ニューロンの学習
ニューロンの動きが分かったので、次は学習方法を見てみる。
ニューロンの学習
ニューロンの入力と出力の関係がわかった。 このニューロンにより良い出力を出してもらうためには、パラメータをどう動かせばいいのだろうか。
ここで、最終的に出してほしい特定の「正解値」が事前にわかっていると仮定して、 現在のニューロンの出力がどれだけ正解値から離れているかを評価する関数を「損失関数」と呼ぶ。 損失関数としてよく使われるものの一つが正解値との差を二乗したもので、 正解値に対してが出力されたとき、次のように書ける。
通常、ニューロンを単体で使うことはなく、ニューロンを組み合わせたニューラルネットとして使用する。 単体では一つの出力しか持たないニューロンが、 ニューラルネットになると複数のニューロンがそれぞれ出力を担当する。
個のニューロンが出力を担当するニューラルネットを考える。 正解値 に対応する出力 が出力されたとき、それぞれの損失の和をとる。
行列で表現すると
という具合に、ベクトルのノルムで表現できる。
損失が小さくなるようにパラメータを調節していけば、正解値に近い値を出力するようになるが、 問題はどうやって調整するかというところだ。
損失関数が微分可能なら、損失関数が下る方向にパラメータを調整すればさらに損失関数が小さくなる。 傾きが大きいほど正解値から離れていると考えて、パラメータを多きく動かすようにすれば良い。
損失関数の傾きは微分によって得られるので、損失関数に影響を与えるパラメータ に対して次のように値を更新し、それを繰り返していけば出力が正解値に近づいていく。
は学習率と呼ばれ、一回の学習でパラメータを動かす度合を調整するために設定される。 学習率が大きすぎれば一度の学習で正解値を大幅に通り過ぎて、なかなか収束しなかったり、 逆に小さすぎれば極小値にとらわれて正解値に近づかなくなったりするらしい。
単一ニューロンでの学習
簡単にするため、単一ニューロンで学習した場合どうなるかを見てみる。 活性化関数はシグモイド関数で、学習係数は1とする。
入力が一定なのでほとんど意味のない形だが、学習のたびに出力が正解値に近づくことがわかる。 この場合は正解値が入力に依存して変化しないので、bだけ動かせば正解値が出せてしまう。