おひとりさま現役パラレルワーカーフクコろぐ

これからの会社員は、複数の収入源をもとう! 会社に翻弄されずアナタらしく仕事ができる。 そんなパラレルワーカーを広めるフクコのブログです。

【文系プログラミング初心者deE資格】ゼロつくディープラーニング #27

f:id:fukuko-parallel-work:20211126183626j:plain

こんにちは!

現役パラレルワーカー フクコです。

f:id:fukuko-parallel-work:20210212204833p:plain




前回の記事↓に続き

www.fukuko-parallel-work.com






来年の2月の試験に向けてE資格試験勉強中のため


E資格とは?の記事はコチラ↓

www.fukuko-parallel-work.com




ゼロつくシリーズでおなじみ

オーライリーから出版されている

ディープラーニングの本格的な入門書でよくおススメされる

「ゼロからつくる Deep Learning」本


f:id:fukuko-parallel-work:20211029220008j:plain





この本↑を毎日5ページずつコツコツこなす

約2か月間で今年中に終了するので

来年のE資格試験までにこれで基礎力をつけることにしました。(^^)


ついつい私は何もないとだらけてしまうので(笑)

毎日5ページ終わった後の記録とまとめを書いていこうと思います。


と、まとめに入る前に…

やる気を出すためのコトバをシェアします!!(主に私のやる気を出すために 笑)

「なれるかなれねぇかなんてくだらねぇこと言うんじゃねぇ!!

 信じると言われたなら

 それに応えること以外考えんじゃねぇ!!」


by 嘴平伊之助(はしびら いのすけ)


私の大好きな鬼滅の刃から

嘴平伊之助(はしびら いのすけ)の名言です。


伊之助は、主人公・炭治郎の同期にあたる鬼殺の剣士

赤ちゃんの頃に山に捨てられ、その後、猪に育てられたという野生児

なのに顔は美形という。笑 

伊之助不器用ながらもどストレートな言葉、心に響くんですよね。


伊之助、どうもありがとう! (^0^)

今日もやる気が出てきました! 

よし!! 今日も頑張るぞ~! お~!! 

というコトで、

今日も自分を信じて、努力の継続!ノルマをこなしますよ! 笑


ではでは、いい加減まとめに入ります。笑




その前に本の目次の紹介です。

ゼロつくディープラーニングは、下記↓の合計8章で構成されています。

本の目次

  • 5章 誤差伝播法
  • 6章 学習に関するテクニック



ちなみに…

ゼロつくディープラーニング第1章はPython入門のセクション(20ページ分)なので、

とりあえず今回私は飛ばし、第2章からまとめています。

現在は、第6章からで~す。



第6章 学習に関するテクニックつづき


ニューラルネットワークの学習において

キーとなる重要なアイディアを説明する。

ニューラルネットワークの学習を効率的に進め、認識精度を高める手法を紹介。

6.1.4 Momentum


Momentum(モーメンタム)は、「運動量」という意味


モーメンタムを数式で表すと次のとおり。


VαVη { \displaystyle\dfrac{\partial L}{\partial W}}

WW+ v


Wは、更新する重みパラメータ

{ \displaystyle\dfrac{\partial L}{\partial 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の更新方法の数式は以下のとおり。


hh + { \displaystyle\dfrac{\partial L}{\partial W}} \otimes { \displaystyle\dfrac{\partial L}{\partial W}}

WW - η \frac{1}{\sqrt{h}} { \displaystyle\dfrac{\partial L}{\partial W}}


Wは、更新する重みパラメータ

{ \displaystyle\dfrac{\partial L}{\partial 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資格とは?

www.fukuko-parallel-work.com