多層パーセプトロン
目次
はじめに
ようやくディープラーニングの領域に入ってきました。今回でやっとバックプロパゲーションが理解できたので履歴を残しておきます。
バックプロパゲーションですが、計算式を書いてるとテンソルのインデックスが多すぎて途中で訳が分からなくなってくるので、始めは難しいと感じていましたが、分かってしまえば偏微分のチェーンルールをいじくってるだけでした。
3層パーセプトロン
何層でもいけるようなものを実装しようと思ってますが、まずは3層で考えていきます。
の特徴量行列 を入力とし、中間層の出力を の行列 、最終出力を の行列 であらわします。
層のインデックスがわかるように、右上に()書きしています。
がサンプル数、 が特徴量数、 がクラス数になります。
全結合と活性化関数の行列演算は以下の様になります。
損失関数の重み勾配
- 。(6)式と同じように考えて、
- 。以下同様に、
- 。
- をこれ以上展開しないのがポイントです。後でバックプロパゲーションで一気に求めます。
バックプロパゲーション
- (6)、(7)、(8)、(9)式において が求まれば、損失関数の重み・閾値の勾配は一気に求まるので、それぞれ求めていきましょう。
- 先ずは下準備として の下準備として、 を先に求めておきます。
- を求めてみます。
- 次に を求めます。
- (11)式より が求まり、(12)、(13)式より が求まり...というのを繰り返すと、(6)、(7)、(8)、(9)式より重み勾配を逐次的に求めることができます。これがバックプロパゲーションです。
行列表記
numpyで書きやすいように行列表記しておきます。求める順番に書いていきます。
。(11)式の を縦、 を横に並べます。
が求まったので、 が求まります。
。(8)式の を縦、 を横に並べます。
- 。同様に(9)式より、
- (11)式の より、 (12)式の が求まります 。(12)式の を縦、 を横に並べます。
- がシグモイド関数とすると(13)式より、
(17)、(18)式の は、アダマール積を表しており、行列の同じ成分同士を掛け算する記号です。要するに
np.array
の積です。(18)式の は、全要素が1の行列です。
が求まったので が求まります。(6)式の を縦に並べ、 を横に並べます。
- 同様に です。(7)式の を縦に並べ、 を横に並べます。
多層パーセプトロン
- 3層パーセプトロンを一般的な 層に発展させてみましょう。
順伝播
- :サンプル数。 :特徴量数。 :中間層のユニット数。 :クラス数。 :特徴量行列。 :目標値(教師データ)行列とします。
全結合
活性化関数
損失関数(交差エントロピー)
逆伝播
- 以下 として記述します。
誤差計算
- (14)式より、
バックプロパゲーション
- (17)式より、
損失関数の重み・閾値勾配
- (19)、(20)式より、
が になるまで(25)~(27)式の操作を繰り返します。
(24)式の誤差 が(25)式の様に、各層を逐次的に逆伝播していくので誤差逆伝播というわけです。
追記
- (25)式ですが以下のようにも展開することができます。
- (25)式と(26)式を比べてみると、以下のような関係になっている事が分かります。
- (27)式の を にして、再度(26)式に代入し を消去すると、 に関してのバックプロパゲーションの式が得られます。