こんにちは!
現役パラレルワーカー フクコです。
前回の記事↓に続き
来年の2月の試験に向けてE資格試験勉強中のため
E資格とは?の記事はコチラ↓
ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でよくおススメされる
「ゼロからつくる Deep Learning」本
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…
やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)
「なれるかなれねぇかなんてくだらねぇこと言うんじゃねぇ!!
信じると言われたなら
それに応えること以外考えんじゃねぇ!!」
by 嘴平伊之助(はしびら いのすけ)
私の大好きな「鬼滅の刃」から
嘴平伊之助(はしびら いのすけ)の名言です。
伊之助は、主人公・炭治郎の同期にあたる鬼殺の剣士。
赤ちゃんの頃に山に捨てられ、その後、猪に育てられたという野生児。
なのに顔は美形という。笑
伊之助の不器用ながらもどストレートな言葉、心に響くんですよね。
伊之助、どうもありがとう! (^0^)
今日もやる気が出てきました!
よし!! 今日も頑張るぞ~! お~!!
というコトで、
今日も自分を信じて、努力の継続!ノルマをこなしますよ! 笑
ではでは、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
本の目次
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
現在は、第6章からで~す。
第6章 学習に関するテクニックつづき
ニューラルネットワークの学習において
キーとなる重要なアイディアを説明する。
ニューラルネットワークの学習を効率的に進め、認識精度を高める手法を紹介。
6.1.4 Momentum
Momentum(モーメンタム)は、「運動量」という意味。
モーメンタムを数式で表すと次のとおり。
← -
← +
Wは、更新する重みパラメータ。
は、Wに関する損失関数の勾配。
vは、速度。
# 6.1.4 Momentum import numpy as np class Momentum: def __init__(self, lr=0.01, momentum=0.9): self.momentum = momentum self.v = None def updte(self, params, grads): if self.v is done: 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] += self.v[key]
6.1.5 AdaGrad
(イータ)であらさわれる学習率は
小さすぎると学習に時間がかかり過ぎる
大きすぎると発散して正しい学習が行えない。
学習率について有効なテクニックとして、
学習率の減衰(learning rate decay)という方法がある。
この「減衰」という方法は、
最初は「大きく」学習し、次第に「小さく」学習するという手法。
AdaGradは、
パラメータの要素ごとに適応的に学習率を調整しながら学習を行う手法。
AdaGradの更新方法の数式は以下のとおり。
← +
← -
Wは、更新する重みパラメータ。
は、Wに関する損失関数の勾配。
ηは、学習率を表す。
AdaGradの場合、
学習係数の減衰により、
学習を進めれば進めるほど、更新度合いは小さくなる。
AdaGradの実装はPythonでは以下のとおり。
# 6.1.5 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(val) for key in params.keys(): self.h[key] += grads[key] * grads[key] params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)
今日のまとめ
ハイ、今日はここまで!!
第6章の学習に関するテクニックまだまだ続きます!(^^)
引き続き頑張りまっす。
最後まで読んでくださり、ありがとうございます!
フクコ
ディープラーニング入門書おススメ本
E資格とは?