takeda_san’s blog

KotlinとVRを頑張っていく方向。

学習率、重みってなんだ?

前回のあらすじ

ニューラルネットワークの定義、生成部分のコードを読んだ。

takeda-san.hatenablog.com

やったこと

重みってなんだ?

前回のニューラルネットワークの定義の中で重みというパラメータが登場した。
この重みは、以前にやった下記の数式におけるvの値のこと。
重みを適切に調整し、欲しい出力を得る。


\displaystyle f(x) = f( \sum_{i=0}^{N} v_i x_i - \theta )

takeda-san.hatenablog.com

プログラム内に登場したパラメータとしての重みは、各入力に対する重みの初期値を設定しているっぽい。
なぜ初期化が必要かというと、学習の進むスピードが変わるらしい。

kaeken.hatenablog.com

多層パーセプトロンにおいて、学習時の勾配消失が問題になっていたが、そのあたりと関係がありそう・・・?
初期値を設定する意味は分かったし、話がさらに深くなりそうなので、いったんこの辺で打ち切り。

学習率ってなんだ?

これまた、ニューラルネットワークの定義の中で登場した学習率。
この学習率とは、重みのパラメータを学習していく中で更新していくワケですが、その更新の幅を指しているようです。
1より小さくするのが普通らしい。
この値を小さくすればするほど更新幅が小さいから正確に学習できるが、計算回数が多くなる?
幅大きいと学習によるパラメータ調整が行ったり来たりで収束しない?
値を何を基準にすればよいのかは、また別途。

次回の予定

・不明点の確認(乱数を指定する意味、確率的勾配降下法とは) ・プログラミングのための線形代数を読む ・サンプルプログラム(Perceptron/LenetMnistExample)を読む ・Mavenのpomの読み方