KATUBLO | エンジニアの日常BLOG
2018年12月24日

【DeepLearning】勾配降下法を数式を用いて解説してみた。

何をするのか?

deeplearningにおける勾配降下法を数式を用いて, 解説する.

 

勾配降下法は何をするの?

交差エントロピー誤差関数のパラメーター, w(重み),b(バイアス)を偏微分したときに0になる値はを求めることができれば, 正しい出力を求めることができる. じゃあ, 偏微分すればいいじゃん!となるが, どのように値を増やしたり, 減らして調節すればいいのだろうか? その方法として持ちいられるのが, この勾配降下法である.

 

定義式

$$
\begin{aligned} w ^ { ( k + 1 ) } & = w ^ { ( k ) } – \eta \frac { \partial E ( w , b ) } { \partial w } \\ b ^ { ( k + 1 ) } & = b ^ { ( k ) } – \eta \frac { \partial E ( w , b ) } { \partial b } \end{aligned}
$$

 

E:誤差関数

η:学習率(η>0)

 

学習率

学習率とは誤差関数を一回, 偏微分を行ったときに変化させる値の幅を決定する. 学習率が大きいと最適解があっても移動幅が大きいため, たどり着かなかったりする問題が生じる. 逆に学習率が小さすぎると最適解にたどり着くまでに, 計算の時間がかかりすぎて求めることができないといった問題が生じてしまう. 一般的には0.1, 0.01がちょうどいい学習率の値と呼ばれる.

 

誤差関数を偏微分してみる.

 

交差エントロピー誤差関数

$$
E _ { n } : = – \left\{ t _ { n } \log y _ { n } + \left( 1 – t _ { n } \right) \log \left( 1 – y _ { n } \right) \right\}
$$

 

偏微分してみる

$$
\begin{aligned} \frac { \partial E ( w , b ) } { \partial w } & = \sum _ { n = 1 } ^ { N } \frac { \partial E _ { n } } { \partial y _ { n } } \frac { \partial y _ { n } } { \partial w } \\ & = – \sum _ { n = 1 } ^ { N } \left( \frac { t _ { n } } { y _ { n } } – \frac { 1 – t _ { n } } { 1 – y _ { n } } \right) \frac { \partial y _ { n } } { \partial w } \\ & = – \sum _ { n = 1 } ^ { N } \left( \frac { t _ { n } } { y _ { n } } – \frac { 1 – t _ { n } } { 1 – y _ { n } } \right) y _ { n } \left( 1 – y _ { n } \right) x _ { n } \\ & = – \sum _ { n = 1 } ^ { N } \left( t _ { n } \left( 1 – y _ { n } \right) – y _ { n } \left( 1 – t _ { n } \right) \right) x _ { n } \end{aligned}
$$

 

$$
= – \sum _ { n = 1 } ^ { N } \left( t _ { n } – y _ { n } \right) x _ { n }
$$

 

$$
\frac { \partial E ( \boldsymbol { w } , b ) } { \partial b } = – \sum _ { n = 1 } ^ { N } \left( t _ { n } – y _ { n } \right)
$$

 

勾配降下法の式に代入

$$
\begin{aligned} w ^ { ( k + 1 ) } & = w ^ { ( k ) } + \eta \sum _ { n = 1 } ^ { N } \left( t _ { n } – y _ { n } \right) x _ { n } \\ b ^ { ( k + 1 ) } & = b ^ { ( k ) } + \eta \sum _ { n = 1 } ^ { N } \left( t _ { n } – y _ { n } \right) \end{aligned}
$$

 

 

最後まで読んで頂き、ありがとうございました。
SNS等でのシェアが頂ければ幸いです!

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習を開始。現在は「ToC向け大規模サービスを運営するメガベンチャー」と「AIスタートアップ」でインターンで修行中。2020年4月からwebエンジニアとして社会人生活スタート。

Twitterアカウント

広告

スポンサー