勾配降下法

Pythonで学ぶDeep Learning入門

Dan Becker

Data Scientist and contributor to Keras and TensorFlow libraries

勾配降下法

ch2_2.003.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.004.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.005.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.006.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.008.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.009.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.010.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.011.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.012.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.013.png

Pythonで学ぶDeep Learning入門

勾配降下法

ch2_2.014.png

Pythonで学ぶDeep Learning入門

勾配降下法

  • 傾きが正のとき:
    • 傾きと逆向きに進む=値を小さくする
    • 現在値から傾きを引く
    • 歩幅が大きすぎると外れる恐れ
  • 解決策: 学習率
    • 各重みを 学習率 × 傾き 分だけ引いて更新
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.022.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.028.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.029.png

  • 二乗誤差損失の予測に関する傾き:
    • 2 × (予測値 − 正解値) = 2 × 誤差
    • 2 × -4
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.033.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.035.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.037.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.038.png

  • 重みの傾きを求めるには次を乗算:
    • 目的関数の傾き(流入ノードの値に関して)
    • 当該重みに流れ込むノードの値
    • 活性化関数の傾き(入力値に関して)
Pythonで学ぶDeep Learning入門

傾き計算の例

ch2_2.044.png

  • 2 * -4 * 3
  • -24
  • 学習率が0.01なら新しい重みは
  • 2 - 0.01(-24) = 2.24
Pythonで学ぶDeep Learning入門

予測に影響する2入力のネットワーク

ch2_2.045.png

Pythonで学ぶDeep Learning入門

傾き計算と重み更新のコード

import numpy as np
weights = np.array([1, 2])
input_data = np.array([3, 4])
target = 6
learning_rate = 0.01
preds = (weights * input_data).sum()
error = preds - target

print(error)
5
Pythonで学ぶDeep Learning入門

傾き計算と重み更新のコード

gradient = 2 * input_data * error

gradient
array([30, 40])
weights_updated = weights - learning_rate * gradient
preds_updated = (weights_updated * input_data).sum()
error_updated = preds_updated - target

print(error_updated)
2.5
Pythonで学ぶDeep Learning入門

Let's practice!

Pythonで学ぶDeep Learning入門

Preparing Video For Download...