ゼロから作るDeepLearning①の6章でいい感じの実装ができたので、備忘録。
Jupyterも公開するので、間違っていればご指摘いただけると幸いです。
書籍ではデータセットをローカルにダウンロードしていましたが、せっかくsklearnにmnistなどの学習用のデータセットがあるので、sklearnからimportするだけで済むように、コードを調整しました。
jupyter notebook公開用@github
SGD(Stochastic Gradient Descent:確率的勾配降下法)
損失関数の勾配に一定の学習係数をかけた値を重みから差し引くことで、各ネットワークの重みを調整する方法。式として表すと
W(調整後の重み) = W(調整前の重み) - η * dL/dW(学習係数*損失関数の勾配)
AdaGrad法
学習の進み具合によって学習係数を小さくしていき、各ネットワークの重みを調整する方法。式として表すと
h(調整後の勾配の履歴) = h(調整前の勾配の履歴) - dL/dW * dL/dW(損失関数の勾配の二乗)
W(調整後の重み) = W(調整前の重み) - η* h**(-1/2) * dL/dW(学習係数 勾配の履歴*損失関数の勾配)
Momentum法
勾配が大きいほど大きく学習し、勾配が小さい場合は学習を小さくして、各ネットワークの重みを調整する方法(いい表現が見つかりませんでした。。。。)。式として表すと
v(調整後の重みの履歴) = αv(調整前の重みの履歴) - η * dL/dW(学習係数*損失関数の勾配)
αは0.9などで設定するのが普通だそうです。
W(調整後の重み) = W(調整前の重み) + v