【初心者必見】合成関数の微分とは?「外側×内側」のルールを新人エンジニア向けに完全解説
こんにちは。ゆうせいです。
新人エンジニアのみなさん、ディープラーニングや機械学習の参考書を読んでいて、突然現れる複雑な数式に頭を抱えていませんか。とくに「誤差逆伝播法」のようなカッコいい名前の技術を学ぼうとすると、必ずと言っていいほど登場するのが微分の知識です。
そのなかでも、もっとも重要で、かつ多くの人がつまずきやすいのが合成関数の微分です。
「合成関数ってなに?」「普通の微分と何が違うの?」そんな疑問を持っているあなたのために、今日はこの強力な計算ツールについて、数式を省略せずにじっくり解説していきます。実はこれ、プログラミングで複雑な処理を小さな関数に分けるのと、とてもよく似ているんですよ。
合成関数ってどんなもの?
まずは、合成関数という言葉のイメージから固めていきましょう。
難しく考える必要はありません。これは、ある関数のなかに、別の関数がすっぽりと入っている状態のことです。
たとえば、マトリョーシカ人形を想像してみてください。人形を開けると、中からまた小さな人形が出てきますよね。あるいは、プレゼントの箱を開けたら、中からさらに小さな箱が出てくるようなものです。
数学の言葉で説明しましょう。ある入力 を、まず関数
で処理します。そして、その結果をさらに別の関数
で処理する。これを式で書くと次のようになります。
これが合成関数です。 が
という箱に入り、その箱ごと
という大きな箱に入っているイメージです。
具体的な例で見てみよう
言葉だけではわかりにくいので、具体的な式を出してみますね。次のような関数があるとします。
これをじっと見てください。これは、次の二つのシンプルな動作が組み合わさっているのがわかりますか?
を2倍して3を足す(
)
- その結果を二乗する(
)
もし、カッコの中身である を
という文字で置き換えたらどうなるでしょう。
こうすると、複雑だった式が、二つの単純な式に分解されました。これが合成関数の正体です。
魔法のルール「連鎖律」
さて、いよいよ本題の微分です。さきほどの を
で微分したいとき、どうすればいいでしょうか。
「一旦カッコを展開して、 にしてから微分すればいいのでは?」
そう思ったあなた、素晴らしい勘をしています。確かにそれでも正解です。しかし、もしこれが だったらどうしますか。展開するだけで日が暮れてしまいますよね。
そこで登場するのが、連鎖律(チェーンルール)と呼ばれる強力な公式です。これを使えば、展開せずにそのまま微分ができます。
公式はとてもシンプルです。
数式アレルギーの方も逃げないでくださいね。この式が言っていることは、たったこれだけです。
「全体( )を微分したければ、外側の箱(
)で微分したものと、中の箱(
)を中身(
)で微分したものを掛け合わせればいい」
もっと直感的に言うと、「外側の微分」 「内側の微分」です。
手順通りに計算してみよう
では、先ほどの例題 を、この連鎖律を使って解いてみましょう。
手順1:中身を と置く
まず、カッコの中身を と置きます。
すると、元の式はこうなります。
手順2:それぞれを微分する
ここで、二つの微分を行います。
ひとつ目は、 を
で微分します(外側の微分)。
なので、微分すると
になります。
ふたつ目は、 を
で微分します(内側の微分)。
なので、微分すると
になります。
手順3:掛け算して元に戻す
最後に、この二つを掛け合わせます。
これで終わりではありませんよ。最後に を元の
に戻してあげましょう。
これで完了です!展開してから微分したときと同じ結果になりましたよね。でも、計算の手間はこちらの方がずっと少なくて済みます。
合成関数の微分のメリットとデメリット
この便利なテクニックにも、良い点と注意すべき点があります。
最大のメリットは、複雑な関数を単純な部品に分解して扱えることです。
今回のような単純な式だけでなく、ニューラルネットワークのような巨大な数式も、実は小さな合成関数の塊です。この「分解して、それぞれの変化率(微分)を掛け合わせる」という考え方があるからこそ、AIは効率よく学習できるのです。各パーツごとに計算ができるので、プログラムとして実装しやすいという利点もあります。
デメリットは、変数の置き方を間違えると混乱することです。
どれを と置くか、どの順番で微分するかを見失うと、計算が破綻します。また、掛け算の連鎖が長くなりすぎると、コンピュータで計算したときに数値が小さくなりすぎて消えてしまう「勾配消失」という問題の原因になることもあります。これはAI開発の現場でよく議論されるテーマですね。
練習問題にチャレンジ
第1問:基本の形を確実に
まずは、前回のおさらいのような問題です。手順通りにやれば絶対に解けますので、落ち着いて取り組んでください。
問題
次の関数を微分してください。
解説
どうでしょう、解けましたか。それでは、ステップごとに答え合わせをしていきましょう。
手順1:中身を置き換える
まず、カッコの中身である を、別の文字
で置き換えます。
すると、元の式はシンプルな形になります。
手順2:それぞれを微分する
次に、外側の箱と、内側の箱をそれぞれ微分します。
まずは外側( を
で微分)です。
次に内側( を
で微分)です。
手順3:掛け算して元に戻す(連鎖律)
最後に、この二つを掛け合わせます。これが連鎖律でしたね。
計算したものを代入します。
数字同士を計算して整理します。
最後に、 を元の
に戻して完成です。
これが正解です!
展開してから微分するよりも、ずっとスッキリと計算できましたよね。
第2問:少しだけレベルアップ
次は、カッコの中身を少し変えてみます。でも、やることは全く同じです。「外側」と「内側」を見抜く目が試されますよ。
問題
次の関数を微分してください。
解説
今度はカッコの中身に が入っていますね。ここがポイントです。
手順1:中身を置き換える
迷わず、カッコの中身を と置きましょう。
元の式はこうなります。
手順2:それぞれを微分する
ここが重要です。
外側の微分( を
で微分)は簡単ですね。
内側の微分( を
で微分)はどうなるでしょうか。
を微分するので、
になります(定数の
は消えます)。
手順3:掛け算して元に戻す
さあ、合体させましょう。
係数同士を掛けて整理します。 と
を掛けるのを忘れないでください。
最後に を元に戻します。
これが正解です!
もし、これを展開してから計算しようとしたら、 乗の展開公式を使わなければならず、計算ミスをする確率はグンと上がっていたはずです。合成関数の微分のありがたみが、より実感できたのではないでしょうか。
連鎖率とは「影響のバケツリレー」
まず、連鎖率を一言で言うなら、「影響力の掛け算」です。
AがBに影響を与え、そのBがCに影響を与える。このとき、Aの変化は最終的にどれくらいCに伝わるのか?これを計算するのが連鎖率です。
これだけでは抽象的なので、工場にある機械を想像してみましょう。
3つの歯車で考える連鎖率
ここに、3つの歯車がつながって動いている機械があります。
- 歯車A(入力): モーターにつながっている最初の歯車
- 歯車B(中間): Aの動きを次に伝える中継ぎの歯車
- 歯車C(出力): 最後に動くドリルなどの部品
これらの歯車の間には、大きさの違いによって、次のような回転のルール(変速比)があるとします。
ルール1:AとBの関係
歯車Aが「1回転」すると、歯車Bは「3回転」します。
つまり、BはAの「3倍」の速さで回ります。これを数式(微分)で表すとこうなります。
「Aがちょっと動いたとき、Bはその3倍動く」という意味です。
ルール2:BとCの関係
次に、歯車Bが「1回転」すると、歯車Cは「2回転」します。
つまり、CはBの「2倍」の速さで回ります。これも式にします。
「Bがちょっと動いたとき、Cはその2倍動く」という意味ですね。
ここで質問です
では、大元の「歯車Aが1回転」したとき、最終的に「歯車Cは何回転」するでしょうか?
直感で考えてみてください。
Aが1回まわると、Bは3回まわります。
Bが1回まわるごとにCは2回まわるので、Bが3回まわれば、Cはその2倍まわることになります。
答えは、「6回転」ですよね。
計算式で書くとこうなります。
実は、あなたが今頭の中で行ったこの計算こそが、「微分の連鎖率」そのものなのです!
数式に当てはめてみよう
今の話を、かっこいい数学の記号に翻訳してみましょう。
: 歯車Aの回転量
: 歯車Bの回転量
: 歯車Cの回転量
私たちが知りたいのは、「A( )を動かしたとき、最終的にC(
)がどれくらいの比率で動くか」です。数学語で言うと
です。
連鎖率の公式を見てみましょう。
これに、さっきの歯車の数字を当てはめます。
(Aに対するCの回転率)
(Bに対するCの回転率)
(Aに対するBの回転率)
どうでしょうか。
「外側の変化率」と「内側の変化率」を掛け合わせる、というあの抽象的なルールが、「ギア比を掛け合わせれば、トータルのギア比が出る」という当たり前の事実に変わりませんか。
連鎖率とは、間にある「仲介役(今回は歯車B)」の影響をキャンセルして、スタートとゴールを直結させるための魔法の掛け算なのです。
別の例:円安と輸入価格
もう一つ、ビジネスの現場でよくある例を出してみましょう。「円安」の影響です。
ここでも3つの要素が連鎖しています。
- ドル円相場(
)
- 原油の輸入価格(
)
- ガソリンの店頭価格(
)
もし、次のような関係があったとします。
- ドル円が1円上がると、原油価格が5円上がる(
)
- 原油価格が1円上がると、ガソリン価格が2円上がる(
)
では、ドル円が1円上がったら、最終的にガソリン価格は何円上がるでしょうか?
もうお分かりですね。
「5円上がる要因」が、さらに「2倍の影響」をもたらすので、
円
つまり、連鎖率は次のように計算されます。
「風が吹けば桶屋が儲かる」ということわざがありますが、微分における連鎖率は、「風の強さが桶屋の儲けにどれくらい影響するか」を、中間のステップ(砂埃、目が見えなくなる人、三味線など)ごとの倍率を掛け算して算出しているだけなのです。
今後の学習の指針
ここまで読んでくれたあなたは、もう「合成関数の微分」という武器を手に入れました。
この考え方は、機械学習の心臓部である「誤差逆伝播法(バックプロパゲーション)」を理解するための最初にして最大の鍵です。AIがどうやって賢くなっていくのか、その裏側では今日やった「外側の微分 内側の微分」が膨大な回数繰り返されているのです。
次は、実際にPythonのライブラリであるPyTorchやTensorFlowなどが、この計算を自動でどうやっているのか、自動微分というキーワードで調べてみると面白いかもしれません。
焦らず、一歩ずつ進んでいきましょう。数式の意味がわかると、ブラックボックスだったAIの中身が少しずつ透けて見えてくるはずです。
それでは、また次の記事でお会いしましょう。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。