第24話 バックプロパゲーションの理解に必要な知識 -勾配降下法- 回帰問題・分類問題編
今回もニューラルネットワークの学習アルゴリズム"バックプロパゲーション"に必要な5つの知識のうち、3つ目の勾配降下法を学習します。
<バックプロパゲーションの理解に必要な5要素>
・訓練データとテストデータ
・損失関数
・勾配降下法 ←イマココ
・最適化アルゴリズム
・バッチサイズ
前回は勾配降下法で使用する色々な勾配の一般式を導出しましたが、今回は回帰問題と分類問題における勾配を求めていきます。
具体的な内容は次のとおりです。
1. 勾配を求める一般式 -おさらい-
2. 勾配の求め方 -回帰問題-
3. 勾配の求め方 -分類問題-
それでは学習をはじめましょう。
(教科書「はじめてのディープラーニング」我妻幸長著)
1. 勾配を求める一般式 -おさらい-
前回の6種類の勾配の求める式は次のとおりであることを学びました。
ポイントはδ_kまたはδ_jが逆伝播することでしたね。(詳細は前回参照)
表1
これらの式を回帰問題、分類問題それぞれのケースに当てはめてみましょう。
2. 勾配の求め方 -回帰問題-
一般式から勾配を求めるには
・損失関数
・出力層の活性化関数
・中間層の活性化関数
を設定してあげる必要があります。
回帰問題でよく使用される関数として、次のような関数を選択した場合で考えます。
表2
2.1 出力層の勾配
逆伝播の主役であるδ_kを求めます。
δ_kは表1を見ると、損失関数と活性化関数をそれぞれ偏微分したものの積です。
では、損失関数を偏微分してみましょう。
偏微分により、k番目以外の項目はゼロ、k番目の項も係数の1/2が消えて、シンプルな形になりました。
続いて活性化関数の偏微分です。
こちらはなんと1です。これ以上ない形ですね。
以上2つの偏微分により、δ_kは次のようになりました。
これを使って重み・バイアス・入力の勾配が求めることができますが、中間層とまとめて示すことにします。
2.2 中間層の勾配
出力層と同じように逆伝播の中心人物δ_jを求めます。
δ_jは表1を見ると、活性化関数を偏微分したものと、出力層における入力の勾配の積です。
後者は2.1により求まるので、残った活性化関数の偏微分をみていきます。
活性化関数はシグモイド関数なので、その偏微分は表2に記載のとおりです。
これらをまとめるとδ_jは次のようになります。
2.3 勾配のまとめ
2.1,2.2でδ_k,δ_jが求められたことにより、6つの勾配が求まります。
これをまとめたのが次の表です。
回帰問題における勾配はこのように求めることができました。
注意としては、活性化関数が変わるとこれらの勾配も変わってくるということですね。
3. 勾配の求め方 -分類問題-
回帰問題と同様に、分類問題における勾配を求めてみましょう。
分類問題でよく使用される関数として、次のような関数を選択した場合で考えます。
表3
3.1 出力層の勾配
逆伝播の主役であるδ_kを求めます。
まずは、表3からEを式変形します。
これを表1のδ_kを求める式に代入します。
これでδ_kが求まりました。
しかも!なんということに、δ_kは回帰問題と同じ式になりました。
これを使って重み・バイアス・入力の勾配が求めることができます。
(3.3でまとめて示します。)
3.2 中間層の勾配
出力層と同じように逆伝播の中心人物δ_jを求めます。
今回の分類問題の中間層の活性化関数は、2.2と同じシグモイド関数なので、δ_jは2.2と同じになります。
これを使って重み・バイアス・入力の勾配が求まります。
3.3 勾配のまとめ
3.1,3.2でδ_k,δ_jが求められたことにより、6つの勾配が求まります。
これをまとめたのが次の表です。
もしかしたらお気づきの方もいるかもしれませんが・・・
この表はなんと、回帰問題で導出した勾配と全く同じなのです!
ということは回帰問題でも分類問題でも同じソースコードを使えるということなのです。これはすごい!
(というようりも、同じになるように関数を設定しているのでしょう。)
今回は回帰問題と分類問題において、損失関数と活性化関数を定めて、それらから出力層と中間層の各勾配を求めました。
逆伝播のキモであるδを求めて各勾配を求めていきました。
それと回帰・分類問題のどちらであっても同じソースコードで良いこともわかりました。
これでバックプロパゲーションの実装のイメージが少しできてきたのではないでしょうか。
次回は、バックプロパゲーションの理解に必要な知識の4つ目である最適化アルゴリズムを勉強します。
それではまた(^_^)ノシ
よろしければサポートお願いします!いただいたサポートは書籍代等に活用いたします!