科学・技術
合成は分析よりも難しい
Synthesis is harder than analysis (surfingcomplexity.blog)
要約
この記事は、微分積分学における微分(局所的でアルゴリズム的)と積分(大域的でより困難)の対比を通じて、分析と合成の難易度の違いを探求しています。分析は問題を分解するのに対し、合成は要素を統合するため、より複雑な問題解決を必要とします。特にSREのような分野では、システム全体の相互作用を理解する合成能力が重要ですが、このスキルの育成は業界で十分に認識されていません。
全文翻訳
長年にわたり、数学者、論理学者、コンピュータ科学者は様々な計算体系(calculi)を開発してきました。コンピュータサイエンスのバックグラウンドがあれば、アロンゾ・チャーチによって開発された計算モデルであるラムダ計算(lambda calculus)を聞いたことがあるでしょう。データベースがより身近であれば、SQLがリレーショナル計算(relational calculus)に基づいているため、意識せずにそれに触れていることになります。形式手法に興味があるなら、述語計算(predicate calculus)、より一般的には一階述語論理(first-order logic)を扱ったことがあるでしょう。最後に、プログラミング言語に関する学術論文を読むのが好きなら、シークエント計算(sequent calculus)に必ずと言っていいほど遭遇するはずです。
しかし、誰かが単に「計算」(calculus)と言う場合(例:「来学期、計算を履修します」)、どの計算を指しているのか曖昧さはありません。それは常に特定の計算、あるいはむしろ、互いに深く関連した2つの計算、すなわち微分計算(differential calculus)と積分計算(integral calculus)のいずれかです。
視覚的には、微分計算は与えられた点における関数の傾きを計算することだと考えることができます。例えば、このグラフを考えてみましょう。
「x=6のとき、この曲線はどれくらいの速さで変化していますか?」と問うかもしれません。言い換えれば、x=6の非常に近い近傍におけるこの関数の傾きは何でしょうか?微分計算は、与えられた点における関数の傾きを計算することを可能にします。
一方、積分計算は、特定の区間におけるグラフの下の面積を求めることです。例えば、「x=2からx=7の間のこの曲線の下の面積はどれくらいですか?」と問うかもしれません。積分計算は、与えられた区間における関数の下の面積を計算することを可能にします。
微積分学を学ぶと、まず微分計算(「Calculus 1」または「Cal 1」と呼ばれることもあります)を教わり、次に積分計算(「Cal 2」)を教わるでしょう。微分計算を学ぶとき、関数の導関数(点における傾き)を計算するための規則を学びます。そして、関数の種類に関わらず、導関数を計算するのは非常に簡単であることがわかります。それは単なるアルゴリズムであり、もし望むならコンピュータで導関数を計算するように簡単にプログラムできるのです。(ちなみに、自動微分はLLMのトレーニングプロセスにおいて基本的な要素です。興味があれば、自動微分を調べてみてください。)
そして、Cal 2に進むと、積分(曲線の下の面積)を計算する方法について学びます。Cal 1とは異なり、任意の関数の積分を計算するためのアルゴリズムは存在しないことにすぐに気づくでしょう。代わりに、学ぶのは、さまざまな種類の関数の積分を計算するためのトリックの集まりです。また、いくつかの関数については、積分に閉形式解が存在しないことさえ学びます。
例として、正規分布に現れるガウス関数を考えてみましょう。平均ゼロ、分散1の場合、このようになります。
12πe−x22
有名なベルカーブ。
この関数の導関数を計算するように学生に依頼することは、Cal 1の期末試験で十分に妥当な質問でしょう。答えは次のようになります。
−x2πe−x22
しかし、この関数の積分をCal 2の期末試験で学生に依頼するのは不公平でしょう。なぜなら、クラスで学んだテクニックでは(少なくとも私は、必要なテクニックをCal 3まで学びませんでした)、それを実行することが不可能だからです。積分には閉形式解がないため、解を無限級数として表現する必要があります。
12π∑n=0∞(−1)n2nn!(2n+1)x2n+1=12π(x−x36+x540−x7336+x93456−⋯)
(注:ガウス関数の積分はAIに尋ねました。うまくいったことを願っています!)
微分計算と積分計算が互いに関連していることは、明白ではありません(少なくとも私には)。しかし、これらの2つの計算体系はコインの裏表であることが判明しています。なぜなら、積分は反導関数だからです。つまり、f(x)がF(x)の導関数であるなら、F(x)はf(x)の積分なのです。この結果は微積分学の基本定理として知られています。
微分計算と積分計算のこの関連性は、ほとんど哲学的な問いを投げかけます。なぜ導関数を計算する方が積分を計算するよりもずっと簡単なのだろうか?
2011年、誰かがMathematics Stack Exchangeでこの質問をしました。「なぜ積分は微分よりもずっと難しいのか?」最も多くの票を得た回答はQiaochu Yuanによって書かれたもので、その核心は(強調は原文ママ)次のとおりです。
「微分は『局所的』な操作です。ある点における関数の導関数を計算するには、その点の近傍でどのように振る舞うかを知るだけで十分です。しかし、積分は『大域的』な操作です。ある区間における関数の定積分を計算するには、その区間全体でどのように振る舞うかを知る必要があります(そして不定積分を計算するには、すべての区間でどのように振る舞うかを知る必要があります)。それは要約するには多くの情報です。一般に、局所的なものは大域的なものよりもはるかに簡単です。」
ある意味で、局所的なものが大域的なものよりも簡単であるというのは、ありふれた声明です。例えば、局所最適化は大域最適化よりも簡単であることは誰もが知っています。しかし、それは非常に深いものでもあります。そして、それはこの投稿のタイトル、すなわち「合成は分析よりも難しい」という点に触れています。
私は以前、「demon of the gaps」で分析と合成の違いについて書きました。分析では、より大きな問題を、きれいに分離できる小さな問題に分解しています。これらの小さな問題はより局所的であり、したがって解決が容易です。だからこそ、私たちはカプセル化や関心の分離といった原則を提唱し、小さな問題が局所的であることを保証するのです。
合成の仕事は、複数のものを統合すること(integrate!)を含みます。これは逆の方向へ進みます。私たちは、より局所的でない問題を作り出しています。そして、大域的なものは局所的なものよりもはるかに難しいのです。
私たちが直面する課題は、ある種の種類の問題は本質的に合成問題であるということです。私が以前の投稿で書いたように、インシデント対応は、私たちが頻繁に合成問題に直面する分野の1つです。何が現在うまくいっていないのかを理解するために、通常、物事がどのように組み合わさっているかを理解する必要があります。だからこそ、私はこのような合成作業がSREにとって重要だと考えています。
合成は分析よりも難しいのであり、SREは超人的な認知能力を持っていないため、彼らが与えられたコンポーネントをどれだけ深く理解できるかには限界があることを意味します。しかし、異なるコンポーネントがどのように相互作用するかを理解すればするほど、より困難なインシデントを解決するのに有利な立場に立つことができます。
残念ながら、私たちの業界では、合成能力の育成を第一級の事項として認識していません。これは理解できます。なぜなら、この作業は非常に状況依存的であり、SREが働く組織の特定のシステムの厄介な詳細に依存するからです。一方で、システムの運用上の詳細について学ぶ方法を改善することはできます。そして、私はそれをもっと見たいと思っています。
共有:
共有 X (新規ウィンドウで開きます) X
共有 Facebook (新規ウィンドウで開きます) Facebook
いいね
読み込み中...
公開者: Lorin Hochstein
Lorin Hochstein のすべての投稿を表示
公開日: 2026年7月3日2026年7月3日