前回まで、ディープラーニングの骨格となる人口ニューラルネットワークの構成について見てきました。今回から二回に渡って順方向伝搬と逆方向伝搬、実際に「学習」が行われる過程について説明していきます。まずは順方向伝搬です。
(※)このシリーズはディープラーニング(深層学習)入門と題して全7回のシリーズでお届けしています。初めて御覧になる方はこちらを一度ご覧ください。
【順方向伝搬】
次の図に示すように、1つの入力層、1つの隠れ層、および1つの出力層を持つ2層ニューラルネットワークについて考えてみます。
以前もやりましたがこのニューラルネットワークの構成について一度、確認してみましょう。2つの入力があるため、入力層のニューロンの数は2つになります。隠れ層のニューロンの数を4に設定し、出力層のニューロンの数を1に設定しました。
では、入力されたデータの動きを見ていきましょう!
まずは、入力に重みを掛けてから、バイアスを追加し、結果の値を活性化関数が適用される隠れ層に伝播します。
ただ、重み付けとバイアスの値は最終的にプログラムが決定してくれるのでまだ決めてないですよね?なので「とりあえず、」でランダムに値を決めてしまいます。
さて、ここで入力層から隠れ層に情報が渡る際に掛けられる重みについて見ていきましょう。入力層のニューロンX1から隠れ層の各ニューロンに渡る際には4つの重み付けがあります。同様にX2からも4つです。合計8個の値を「とりあえず、」で決めているんですね。これを行列でひとくくりに【】と表してみます。見た目は一文字ですが、中身は2×4で「とりあえず、」の値が入っている行列です。バイアスも各ニューロンの合計4つありますが、これも【】という行列で表してしまいましょう!さらに入力も本当はX1とX2の二種類ありますがこれもまとめて【X】としてしまいます。
そうすると入力層から隠れ層までの各情報の伝搬は下記のような行列の掛け算として表せます!このz1に以前学習した活性関数を掛ければこの層の順方向伝搬は完了です。
上の式ですが、[1行2列]の行列に[2行4列]の行列を掛け算して[1行4列]の行列を足し算しています。これにさらに活性関数を掛けますがこの層での出力は[1行4列]の行列のままです。これが出力層に同じように伝搬されるので最終的には1つの値が出てきます。
この一連の作業を順方向伝搬といいます。
ただ今回はバイアスも重み付けも適当に決めた数です。出てくる値ももちろんでたらめで何かの予測なんてとてもじゃないですができません。
ここからどうやって「学習」なんてするのでしょうか?次回の逆方向伝搬で理解することでその謎は解けます。
※今回急に行列が出てきて驚かれた方もいるかと思います。機械学習や深層学習を含めたAIの分野では実は線形代数が大量に出てきます。そのうちAIの学習に適した線形代数の入門書を御紹介したいと思います。