Book本日は6章を学んでいきます。重みパラメータの初期値設定方法の2点について重点的に学ぶことができました。今回は重みパラメータの更新方法について、まとめます。復習ニューラルネットワークの学習の目的は、損失関数の値をなるべく小さくすることでしたね。これは言い換えれば最適なパラメータを見つける問題であり、最適化と呼ばれます。重みパラメータの更新手法について見ていきます。SGD(確率的勾配降下法)今まで勉強してきたものは、SGDと呼ばれるものです。これは、単純に勾配方向へある一定の距離を進む、ということを繰り返し、パラメータの更新を行います。数式で表すと下記のようになります。しており、ηは学習係数を表します。pythonで実装してみます。このSGDには欠点があり、関数の形状が等方向でないと非効率な経路で探索してしまいます。下記のような関数の場合は非効率に探索します。0)時点を向かない関数に関しては、SGDは最適ではないと言えます。Momentumこの手法は、物体が勾配方向に力を受け、その力によって物体が動くイメージです。重みだと思ってください。数式にすると下記のようになります。これは、ボールが地面を転がるような動きで最小値点を探索することを表しています。pythonで実装してみます。self.v[key]インスタンス変数のvは物体の速度を保持します。vは初期化時には何も保持せず、update()が初めて呼ばれた時に、パラメータと同じ構造のデータをディクショナリ変数として保持します。AdaGradニューラルネットワークでは、学習係数(η)の値が重要になります。学習係数が小さすぎると学習に時間がかかり過ぎてしまい、逆に大きすぎると発散してしまい、正しく学習できません。この学習係数に関するテクニックとして、学習係数の減衰という方法があります。これは、学習が進むにつれて、学習係数を小さくするという方法です。AdaGradは、「一つ一つ」のパラメータ対して、オーダーメイドの値を生成します。AdaGradの更新方法を数式で表してみます。数式だけみると難しく見えますが、SGDと変わりません。Wに関する損失関数の勾配、ηは学習係数を表します。ここで新たにhという変数が登場しています。これは、式にも表れているように、これまで経験した勾配の値を2乗和として保持しています。上記の式は、パラメータの要素の中で、よく動いた(大きく更新された)要素は、学習係数が小さくなることを意味しています。pythonで実装してみます。融合した手法の紹介です。pythonで実装してみます。上記であげた4つの更新手法について、MNISTデータセットで学習進捗がどれだけ異なるか比較してみると、下記のようになりました。SGDより、他の手法を用いたほうが早く正確に学習できていることが分かります。次は重みの初期値について、まとめようと思います。前回に引き続き、後編です。前編の簡単な復習...2018-06-28k-最近傍法でアイリスのクラス分類問題を解く(python)こんばんは。〜誤差逆伝播法〜本日から5章に入りました。前回に引き続き、4章で学んだことを残しておきます。toC企業でMLエンジニアとして働いています。ブログでは主に機械学習界隈の話ができればと思っています。(1)月別アーカイブリンクプライバシーポリシ。