読者です 読者をやめる 読者になる 読者になる

ディープラーニング学習メモ #3 誤差と微分

誤差関数の最小化問題

機械学習が何をやっているか、、一言で言えば 誤差を最小化する Wを見つける ということになります。

関数の最小値を求めると言えば高校の数学でも微分を使って最小値を求めていましたが、機械学習の最小化問題は枠組みが少し違っています。

高校の数学 機械学習
L'(w) = 0 となる w を 直接的に計算する あるwが与えられたとき、L'(w) が 0 に近づく wを動かす向き を見つける
 L = w^{2} のとき  \frac{dL}{dw} = 2w

 \frac{dL}{dw}  = 0 となるのは  w = 0 のとき

このとき、最小値  L(0) = 0
f:id:sanshonoki:20170312073508p:plain:w300

右図のように勾配(gradient)を計算して変数を更新していきます。 実際には誤差関数はいくつかの変数からなる関数なので偏微分(partial derivative)で勾配を求めます。

いずれにせよ、微分は知っておく必要があります。。┗(`・∀・´●)

合成関数の偏微分

実際にはいくつもの演算が組み合わさった結果を微分することになるので目的の変数の勾配を計算するにはチェインルール(連鎖律)を知っておく必要があります。

マストです。。 (゜ロ゜)

計算例

 y = wx + b L(w, b) = \frac{(t - y)^{2}}{2} であるとき

 d = t - y とおくと  L = d^{2} / 2


 \frac{\delta L}{\delta w} = \frac{\delta L}{\delta d} * \frac{\delta d}{\delta w}

 = \frac{\delta (d^{2} / 2) }{\delta d} * ( \frac{\delta d}{\delta y} * \frac{\delta y}{\delta w} )

 = d * \frac{\delta (t - y)}{\delta y} * \frac{\delta (wx + b)}{\delta w}

 = d * -1 * x

 = (y - t) * x

イメージ

個人的にはPFNの岡野原さんのスライドがイメージを掴みやすかったです。

IIBMP2016 深層生成モデルによる表現学習

f:id:sanshonoki:20170313050821j:plain f:id:sanshonoki:20170313050840j:plain

覚えておきたい基本的な微分の計算

とりあえず、以下を知っていれば大抵は何とかなるはず・・・

関数 導関数
 ax  a
 x + c  1
 x^{2}  2x
 \frac{1}{x}  -\frac{1}{x^{2}}
 e^{x}  e^{x}
 \log x  \frac{1}{x}

勾配降下法(gradient descent)の実装サンプル

クラッチで実装すると自信がつく気がします。。 (o・ω・o)

github.com