2018年2月27日はじめに多層パーセプトロンの重みを更新する理論について解説します。更新すべき重みがたくさんあるので単純パーセプトロンより難しいですが、ここがわかると近年流行したディープラーニングを理解するための基本ができあがります。長いので、「理論はざっくりでいいから最終的に使える重み更新式が知りたい」という人は、別のサイトや本を読むのをお勧めします。記事中で使われる各種記号の定義は前回やりましたので、わからなくなったらそちらを参照してください。今回は数式がけっこう出てきます。そこで必要な数学知識について、いくつか説明を書いておきます。簡単のため前提条件を少し省略しているので、数学的に厳密ではない箇所はご容赦ください。偏微分は以前の記事でも出てきましたが、僕が誤解してまして、高校数学の範囲には含まれていないようでした。そんなに難しいことではなく、複数の変数による関数があるとして、その中の1つの変数のみに関する微分のことです。含まない項は消えています。合成関数の微分公式こちらは高校数学の範囲内だと思いますが、復習しておきます。ついて、下記のような公式があります。合成関数の偏微分公式これは大学数学の範囲だと思います。偏微分すると下記のようになります。これをこの記事では合成関数の偏微分公式の「難しい方」と呼ぶことにします。(他所で言うと笑われるのでご注意ください。)さらにこれの特殊ケースとして、「簡単な方」があります。影響を受けない場合を考えます。場合だけを考慮すればよくなります。高校で習う方の公式とほぼ同じ形をしています。繰り返しますが、偏微分において上記は特殊なケースです。今回は何度か出てきます。使い方のポイントは下記です。つく勾配降下法の式ここから本題です。単純パーセプトロンの説明で、勾配降下法について説明しました。多層パーセプトロンにおいても、その理論を用いて重みを更新します。前回新たに定義した記号を用いて勾配降下法の式を書き直すと、下記のようになります。1つ前の層のユニット番号)です。誤差関数ですが、単純パーセプトロンと同じ誤差関数が使えないため、新しく定義します。多層パーセプトロンはネットワーク全体で1つの学習機械ですから、誤差関数も全体で1つだけ定義します。誤差関数は次のように定義されます。そのユニットの「理想の出力値と実際の出力値の差」です。それを二乗しています。二乗しているのは後の計算で都合がいいからです。負の値にならないメリットもありますね。出力層の全ユニットについてその計算をして足し合わせるということです。これも後の計算で都合がいいからという理由です。二乗誤差と言ったりしますが、あまり気にしないでください。次のようにも書けます。関数であることを意味しています。誤差関数が決まったので、勾配降下法を適用することを考えます。更新式の展開この重みの勾配降下法による更新式はです。