[ゼロから作るDeep Learning]Momentum手法とAdaGrad手法の実装
はじめに
この記事はゼロから作るディープラーニング 7章学習に関するテクニックを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。
Momentum手法実装
class Momentum:
def __init__(self, lr=0.01, momentum=0.9):
self.lr = lr # 学習率
self.momentum = momentum # モーメンタム定数
self.v = None # 速度
def update(self, params, grads):
if self.v is None: # 最初だけ各パラメータの速度を初期化する
self.v = {}
for key,val in params.items():
self.v[key] = np.zeros_like(val) # 各パラメータの速度にゼロを入れて初期化する
for key in params.keys():
self.v[key] = self.momentum *self.v[key] - self.lr * grads[key] # 現在の地点での速度を求める
params[key] = params[key] + self.v[key]
class Momentum:
def __init__(self, lr=0.01, momentum=0.9):
self.lr = lr # 学習率
self.momentum = momentum # モーメンタム定数
self.v = None # 速度
def update(self, params, grads):
if self.v is None: # 最初だけ各パラメータの速度を初期化する
self.v = {}
for key,val in params.items():
self.v[key] = np.zeros_like(val) # 各パラメータの速度にゼロを入れて初期化する
for key in params.keys():
self.v[key] = self.momentum *self.v[key] - self.lr * grads[key] # 現在の地点での速度を求める
params[key] = params[key] + self.v[key]
Momentum手法では速度という概念を使うので、まず最初にインスタンス変数で速度を作成します。
勾配から現在の地点の速度を求め、それを現在の重みパラメータにそれぞれ足して、パラメータを更新します。
AdaGrad手法の実装
class AdaGrad: # 学習係数の減衰を各パラメータに行える
def __init__(self, lr=0.01):
self.lr = lr
self.h = None
def update(self, params, grads):
if self.h is None:
self.h = {}
for key,val in params.items():
self.h[key] = np.zeros_like(val)
for key in params.keys():
self.h[key] = self.h[key] + (grads[key] * grads[key]) # 各パラメータの勾配の二乗和をhに入れていく
params[key] = params[key] - ((self.lr * grads[key] )/ (np.sqrt(self.h[key]) + 1e-7))
class AdaGrad: # 学習係数の減衰を各パラメータに行える
def __init__(self, lr=0.01):
self.lr = lr
self.h = None
def update(self, params, grads):
if self.h is None:
self.h = {}
for key,val in params.items():
self.h[key] = np.zeros_like(val)
for key in params.keys():
self.h[key] = self.h[key] + (grads[key] * grads[key]) # 各パラメータの勾配の二乗和をhに入れていく
params[key] = params[key] - ((self.lr * grads[key] )/ (np.sqrt(self.h[key]) + 1e-7))
AdaDrad手法に関しては、前回の記事に書いた式をそのまま実装するだけなので、解説する必要はありません。
学習係数を少しずつ小さくしていき、SGDのように引き算をします。
Author And Source
この問題について([ゼロから作るDeep Learning]Momentum手法とAdaGrad手法の実装), 我々は、より多くの情報をここで見つけました https://qiita.com/SyutoHidano/items/08e4d87f8ee6ba709868著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .