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

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

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

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



こんにちは!

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

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


以前の記事↓で、

www.fukuko-parallel-work.com



やっとJDLA認定プログラムを修了し、

E資格試験受験できるようになったことをお伝えしました。(^^)

なので現在、来年の2月の試験に向けてE資格試験勉強中なんですが…


やっぱり、

私には実際にディープラーニングを実装する経験が圧倒的に足りない

問題を解きながらひしひしと感じました…(>ー<)

「作る経験まではコピーできない」んですよね。

たしかにググればセンパイ達が書いてくれたコードがあり、

コピペしてそのまま実装することは可能です。

でもそれでは私自身の経験にはならない

私も最初のうちは見よう見まね、コピペ、コピペで

なんとなく実装が出来ている気でここまで来ましたが

やはりE資格試験突破となると私としてはこのままではキビシイ(>ー<)


ソウダ!

ゼロから作ってみよう!


というコトで、ゼロつくシリーズでおなじみ

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

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

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



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

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

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


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

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


と、まとめに入る前に…やる気を出すためのコトバをシェアします!!
(私のやる気を出すために 笑)


「努力は日々の積み重ね。少しずつでいい。前に進め!!」

 by炭治郎



マンガの連載はもうすでに終わったのに、

アニメのシリーズやPSゲームが出てまたまた人気急上昇鬼滅の刃から

私の大好きな炭次郎のコトバです。

やっぱり鬼滅の刃いいですよね~。

おかげでやる気が出ます。

ありがとうございます!!(^^)


というコトで、いい加減まとめに入ります。笑



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

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


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


ちなみに…

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

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


第2章 パーセプトロン


パーセプトロン(Perceptron) とは

複数の信号を入力として受け取り、一つの信号を出力する

パーセプトロンは、複数ある入力信号のそれぞれに固有の重みをもつ。

重み(w)は、電流で言うところの「抵抗」に相当する。

パーセプトロンの例

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


2.2 単純な論理回路


1.ANDゲート

2.NANDゲート:NANDは、「Not AND」という意味

3.ORゲート

パーセプトロンを使えば、AND, NAND, ORという論理回路を表現できる。

2.3.1 パーセプトロンの簡単な実装
def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

↑を実行後、

たとえばAND(0,0)を実行すると…

0が出力される。

2.3.2 重みとバイアスの導入
import numpy as np
x = np.array([0,1])#入力
w = np.array([0.5, 0.5])#重み
b = -0.7#バイアス
w*x#array([0. , 0.5])が出力される。

↑のbをバイアス、w₁やw₂を重みと呼ぶ。

np.sum(w*x)#0.5が出力される。
np.sum(w*x) + b#-0.19999999999999996が出力される。
2.3.3 重みとバイアスによる実装


バイアスという用語には、「ゲタはき」という意味がある。

入力が何もない時に、出力にどれだけゲタをはかせるかというコトを意味する。

AND, NAND, ORは同じ構造のパーセプトロンで、唯一の違いは重みパラメータの値だけ!!


↑の「重みとバイアスの方式」を用いれば、

AND、NAND、OR、XORゲートは次のように実装できる。

#ANDを定義
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
#NANDを定義
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])#重みとバイアスだけANDと違う!!
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
#ORを定義
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5,0.5])#重みとバイアスだけANDと違う!!
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1
#XORゲートの実装
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

↑を実行後、

たとえばXOR(0,0)を実行すると…

0が出力される。

2.4 パーセプトロンの限界

XORゲートとは?

XORゲートは、排他的論理和ともよばれている論理回路

実はこれまで見てきたパーセプトロンでは、XORゲートは実現できない

なぜなら…

1本の直線で、線形で分離できないことがあるから。

2.5 多層パーセプトロン


そこで登場するのが、多層パーセプトロン(multi-layered perceptron)

多層パーセプトロンとは、層を複数重ねたパーセプトロンのこと。

パーセプトロンのすばらしさは、「層を重ねることができる」コトにある。

よって、

XORゲートは、AND, NAND, ORゲートを組みあわせて層を重ねればできる

2.5.2 XORゲートの実装


パーセプトロンは、層を重ねることで(層を深くすることで)、より柔軟な表現が可能になった

と言える。

実は、NANDゲートの組み合わせだけで、コンピュータが行う処理を再現することができる

第2章のまとめ

  • パーセプトロンでは、「重み」と「バイアス」をパラメータとして設定する。
  • 「重み」を設定する作業は、今のところヒトの手で行われている

  

ということで、第2章のパーセプトロンは何とか終わりました~!

以前は???がずっと続いていたディープラーニングのお勉強でしたが

いやー、アラ不思議。

ヒトはそのうち慣れるんですよね。笑

前よりはスグに理解できるようになりました。

やっぱりコツコツとちょっとずつでもいいから続けるのが大切です。

引き続き頑張りまっす。


最後まで読んでくださり、ありがとうございます!

フクコ


ディープラーニング入門書おススメ本