今回書くこと
前回、多層パーセプトロンの重み更新の理論として、誤差逆伝播法の考え方の概要を、数式を使って説明しました。
しかし出てきた数式が出力層付近のみの式だったので、今回はすべての層に一般化した更新式を導きます。
デルタの定義
ここで、今回とても重要になる定義をします。
任意の第層 番目のユニットの重み付き和を のように書くと定義しましたが、この で誤差関数 を偏微分したものを とおきます。
上記はすべての出力ユニット1でそれぞれ定義されることにご注意ください。
例: 、
なお、この値の意味は…と深く考える必要はありません。
後の計算式がわかりやすくなるように定義したものです。
はギリシャ文字の (デルタ)の小文字です。
以下、これらの値をそのまま「デルタ」と呼ぶことにします。2
デルタを使って出力層の更新式を表す
出力層にひもづく重みの更新式は前回導きましたが、これをデルタを使った式で改めて導き直してみます。
まず出力層(第層)番目のユニット出力値の式は下記ですね。
勾配降下法による重み更新式はこうでした。(第層 番目ユニットの 番目の重み)
上記の について
となります。
よって出力層の重みの更新式は
と表せます。
随分シンプルな式になりました。
ところで、出力層のデルタはどんな式で表せるでしょうか。展開してみます。
項ごとの変形は前回やったことと同じですので、意味がわからない場合は前回の記事を参照してみてください。
デルタを使って出力層以外の更新式を表す
出力層以外の任意の第層について考えてみます。
第層の番目のユニットの式は下記のようになります。
勾配降下法による重み更新式はこうですね。(第層 番目ユニットの 番目の重み)
上記の は
と変形できるので、更新式は下記のようになります。
出力層の場合とほとんど同じ式になっていることがわかるでしょうか?
ただし、デルタを展開すると、出力層とはだいぶ違う式になります。
展開してみましょう。下記の部分までは同じです。
上式の最終行 第1項は、下記のように展開できます。
(前回名付けた、偏微分の公式の「難しい方」を使っています。)
式中に第層のデルタが出現しました。
前出のデルタ展開式に上記を当てはめます。
第層のデルタを表現するのに、第層のデルタを使うことができました。
これは、下記のことを表しています。
- 上の層の更新式を計算すると、その計算結果の一部を下の層の更新式に使い回すことができる
- ただし、この式は出力層では使えない
1つ目については、前回も触れた内容ですね。
2つ目については、層番号は出力層のが最大で、第層というのはないからです。
つまりデルタの式は、出力層()とそれ以外()で違うということです。
出力層のデルタは、この記事の前半で式展開しましたね。
まとめます。
多層パーセプトロンの重み更新アルゴリズム
多層パーセプトロンの第層 番目ユニットの 番目の重みの更新式は下記で表せます。
ただし、
更新の手順は下記です。
- 多層パーセプトロン内のすべての重みをランダムに初期化
- 学習が完了するまで下記を繰り返す
- 多層パーセプトロンにパラメータを入力し、出力誤差を計算
- 上記更新式に従い、出力層から順にすべての重みの更新量を計算
- 計算した更新量をすべての重みに適用
既に述べましたが、この手法は 誤差逆伝播法 または バックプロパゲーション と呼ばれます。
これで多層パーセプトロンの実装ができます。
次回
次回は、ディープラーニングと画像識別の入り口をちょっとだけ紹介します。