こんにちは!
現役パラレルワーカー フクコです。
前回の記事↓に続き
来年の2月の試験に向けてE資格試験勉強中のため
ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でよくおススメされる
「ゼロからつくる Deep Learning」本
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…
やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)
「君には未来がある。
十年後二十年後の自分のためにも今頑張らないと。
今できないこともいつかできるようになるから。」
by 炭治郎
おなじみ私の大好きな「鬼滅の刃」から(笑)
炭治郎の名言です。
エ!?炭治郎、君は一体何歳なの??
と思わずツッコみたくなるすべてを見通す達観した発言(笑)ですが
でもそう!!
今ガンバらないと、未来の自分は変わらない!!
炭治郎、どうもありがとう! (^0^)
今日もやる気が出てきました!
よし!! 今日も頑張るぞ~! お~!!
というコトで、今日も粛々と私はノルマをこなしますよ! 笑
ではでは、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
本の目次
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
今回も第4章のつづきからでーす。
第4章 ニューラルネットワークの学習つづき
ニューラルネットワークの学習とは、
訓練データから最適な重みパラメータの値を自動で獲得するようにできるコト。
4.4.1 勾配法
機械学習のモンダイの多くは、学習の際に最適なパラメータを探索する。
最適なパラメータというのは
損失関数が最小値を取る時のパラメータの値である。
そこで
勾配を使って関数の最小値を探そう!!というのが「勾配法」(gradient method)
ポイント:
鞍点とよばれる、
ある方向から見れば極大値、別の方向から見たら極小値となるような
局所最適解には気をつけないといけない。
「勾配法」(gradient method)とは??
勾配方向へと進むことを繰り返すことで、関数の値を徐々に減らし最小値を探す方法。
「勾配法」は、
最小値を探す場合は、「勾配降下法」
最大値を探す場合は、「勾配上昇法」といわれる。
「勾配法」を数式で表すと次のように↓なる。
x₀ = x₀ - η
x₁ = x₁ - η
ちなみに、ηは「エータ」と読む。 ギリシャ文字の第7番目の文字。
ηは、ハイパーパラメータで、学習率のコト。
η、学習率は前もって決めておくハイパーパラメータと言われるもの。
勾配法降下法をPythonで実装すると、↓の感じ。
#勾配降下法の定義 #fは最適化したい関数、init_xは初期値、lrは学習率、step_numは勾配法による繰り返しの数 def gradient_descent(f, init_x, lr=0.01, step_num = 100): x = init_x for i in range(step_num): grad = numerical_gradient(f, x) x -= lr * grad return x
fは最適化したい関数、
init_xは初期値、lrは学習率、
step_numは勾配法による繰り返しの数となる。
試しにこの式で
次の↓モンダイをPythonで解いてみる。
の最小値を勾配法で求めよ。
def function_2(x): return x[0] **2 + x[1]**2 init_x = np.array([-3.0, 4.0]) gradient_descent(function_2, init_x = init_x, lr = 0.1, step_num = 100) #答えは、array([-6.11110793e-10, 8.14814391e-10])
ポイント:
学習率が大きすぎると、大きな値に発散してしまう。
逆に
学習率が小さすぎると、ほとんど更新されずに終わってしまう。
最適な学習率を設定することが重要な問題になってくる。