おひとりさま現役パラレルワーカーフクコろぐ

これからの会社員は、複数の収入源をもとう! 会社に翻弄されずアナタらしく仕事ができる。 そんなパラレルワーカーを広めるフクコのブログです。

【文系プログラミング初心者deE資格】ゼロつくディープラーニング #13

f:id:fukuko-parallel-work:20211112192957j:plain


こんにちは!

現役パラレルワーカー フクコです。

f:id:fukuko-parallel-work:20210212204833p:plain



前回の記事↓に続き

www.fukuko-parallel-work.com



来年の2月の試験に向けてE資格試験勉強中のため


ゼロつくシリーズでおなじみ

オーライリーから出版されている

ディープラーニングの本格的な入門書でよくおススメされる

「ゼロからつくる Deep Learning」本


f:id:fukuko-parallel-work:20211029220008j:plain




この本↑を毎日5ページずつコツコツこなす

約2か月間で今年中に終了するので

来年のE資格試験までにこれで基礎力をつけることにしました。(^^)


ついつい私は何もないとだらけてしまうので(笑)

毎日5ページ終わった後の記録とまとめを書いていこうと思います。


と、まとめに入る前に…

やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)



「君には未来がある。
  十年後二十年後の自分のためにも今頑張らないと。
  今できないこともいつかできるようになるから。」

by 炭治郎



おなじみ私の大好きな鬼滅の刃から(笑)

炭治郎の名言です。

エ!?炭治郎、君は一体何歳なの?? 

と思わずツッコみたくなるすべてを見通す達観した発言(笑)ですが

でもそう!! 

今ガンバらないと、未来の自分は変わらない!!

炭治郎、どうもありがとう! (^0^)

今日もやる気が出てきました! 

よし!! 今日も頑張るぞ~! お~!! 

というコトで、今日も粛々と私はノルマをこなしますよ! 笑


ではでは、いい加減まとめに入ります。笑



その前に本の目次の紹介です。

ゼロつくディープラーニングは、下記↓の合計8章で構成されています。

本の目次

  • 5章 誤差伝播法
  • 6章 学習に関するテクニック


ちなみに…

ゼロつくディープラーニング第1章はPython入門のセクション(20ページ分)なので、

とりあえず今回私は飛ばし、第2章からまとめています。

今回も第4章のつづきからでーす。


第4章 ニューラルネットワークの学習つづき


ニューラルネットワークの学習とは、

訓練データから最適な重みパラメータの値を自動で獲得するようにできるコト


4.4.1 勾配法


機械学習のモンダイの多くは、学習の際に最適なパラメータを探索する。

最適なパラメータというのは

損失関数が最小値を取る時のパラメータの値である。


そこで


勾配を使って関数の最小値を探そう!!というのが「勾配法」(gradient method)


ポイント:

鞍点とよばれる、

ある方向から見れば極大値、別の方向から見たら極小値となるような

局所最適解には気をつけないといけない。


「勾配法」(gradient method)とは??

勾配方向へと進むことを繰り返すことで、関数の値を徐々に減らし最小値を探す方法


「勾配法」は、

最小値を探す場合は、「勾配降下法」

最大値を探す場合は、「勾配上昇法」といわれる。


「勾配法」を数式で表すと次のように↓なる。


x₀ = x₀ - η{ \displaystyle\dfrac{\partial f}{\partial x₀}}


x₁ = x₁ - η{ \displaystyle\dfrac{\partial f}{\partial 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で解いてみる。


{ \displaystyle f(x₀ ,x₁) = {x₀^2} +  {x₁^2}}の最小値を勾配法で求めよ。

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])


ポイント:

学習率が大きすぎると、大きな値に発散してしまう

逆に

学習率が小さすぎると、ほとんど更新されずに終わってしまう

最適な学習率を設定することが重要な問題になってくる。

4.4.2 ニューラルネットワークに対する勾配


ニューラルネットワークにおいても勾配を求める必要がある。

ココでいう勾配

重み(w)パラメータに関する損失関数の勾配


コレを実際に式で表すと…


 \boldsymbol{W} =
\begin{pmatrix}
W₁₁&W₁₂&W₁₃\\
W₂₁&W₂₂&W₂₃
\end{pmatrix}


 {\displaystyle\dfrac{\partial L}{\partial W}} =
\begin{pmatrix}
\dfrac{\partial L}{\partial W₁₁} & \dfrac{\partial L}{\partial W₁₂} & \dfrac{\partial L}{\partial W₁₃} \\
\dfrac{\partial L}{\partial W₂₁}& \dfrac{\partial L}{\partial W₂₂} & \dfrac{\partial L}{\partial W₂₃} 
\end{pmatrix}


今日のまとめ


ハイ、今日はここまで!!

ちょっと今日は正直Pythonのプログラミングよりも

はてな記法TeXで数式を書くのにてこづりましたヨ(笑)

行列の中に微分を入れるなんて、私にはハイレベルすぎる…(>ー<)

さん太さんの記事↓で助かりました!

さん太さん、どうもありがとうございます!!

www.sunsunfine.com



ということで、第4章はまだまだつづきます!

引き続き頑張りまっす。


最後まで読んでくださり、ありがとうございます!

フクコ


ディープラーニング入門書おススメ本