こんにちは!
現役パラレルワーカー フクコです。
以前の記事↓で、
やっとJDLA認定プログラムを修了し、
E資格試験受験できるようになったことをお伝えしました。(^^)
なので現在、来年の2月の試験に向けてE資格試験勉強中なんですが…
やっぱり、
私には実際にディープラーニングを実装する経験が圧倒的に足りないと
問題を解きながらひしひしと感じました…(>ー<)
「作る経験まではコピーできない」んですよね。
たしかにググればセンパイ達が書いてくれたコードがあり、
コピペしてそのまま実装することは可能です。
でもそれでは私自身の経験にはならない。
私も最初のうちは見よう見まね、コピペ、コピペで
なんとなく実装が出来ている気でここまで来ましたが
やはりE資格試験突破となると私としてはこのままではキビシイ(>ー<)
ソウダ!
ゼロから作ってみよう!
というコトで、ゼロつくシリーズでおなじみ
オーライリーから出版されている
ディープラーニングの本格的な入門書でおススメされる
この本↑を毎日5ページずつコツコツこなすと
約2か月間で今年中に終了するので
来年のE資格試験までにこれで基礎力をつけることにしました。(^^)
ついつい私は何もないとだらけてしまうので(笑)
今日から毎日5ページ終わった後の記録とまとめを書いていこうと思います。
と、まとめに入る前に…やる気を出すためのコトバをシェアします!!
(私のやる気を出すために 笑)
「努力は日々の積み重ね。少しずつでいい。前に進め!!」
by炭治郎
マンガの連載はもうすでに終わったのに、
アニメのシリーズやPSゲームが出てまたまた人気急上昇「鬼滅の刃」から
私の大好きな炭次郎のコトバです。
やっぱり「鬼滅の刃」いいですよね~。
おかげでやる気が出ます。
ありがとうございます!!(^^)
というコトで、いい加減まとめに入ります。笑
その前に本の目次の紹介です。
ゼロつくディープラーニングは、下記↓の合計8章で構成されています。
- 1章 Python入門
- 2章 パーセプトロン
- 3章 ニューラルネットワーク
- 4章 ニューラルネットワークの学習
- 5章 誤差伝播法
- 6章 学習に関するテクニック
- 7章 畳み込みニューラルネットワーク
- 8章 ディープラーニング
ちなみに…
ゼロつくディープラーニングの第1章はPython入門のセクション(20ページ分)なので、
とりあえず今回私は飛ばし、第2章からまとめています。
第2章 パーセプトロン
パーセプトロン(Perceptron) とは
複数の信号を入力として受け取り、一つの信号を出力する。
パーセプトロンは、複数ある入力信号のそれぞれに固有の重みをもつ。
重み(w)は、電流で言うところの「抵抗」に相当する。
パーセプトロンの例
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.5 多層パーセプトロン
そこで登場するのが、多層パーセプトロン(multi-layered perceptron)。
多層パーセプトロンとは、層を複数重ねたパーセプトロンのこと。
パーセプトロンのすばらしさは、「層を重ねることができる」コトにある。
よって、
XORゲートは、AND, NAND, ORゲートを組みあわせて層を重ねればできる。
2.5.2 XORゲートの実装
パーセプトロンは、層を重ねることで(層を深くすることで)、より柔軟な表現が可能になった
と言える。
実は、NANDゲートの組み合わせだけで、コンピュータが行う処理を再現することができる。
第2章のまとめ
- パーセプトロンでは、「重み」と「バイアス」をパラメータとして設定する。
- 「重み」を設定する作業は、今のところヒトの手で行われている。
- XORゲートは単層のパーセプトロンでは表現できない。
- 2層のパーセプトロンを用いれば、XORゲートを表現することができる。
- 多層のパーセプトロンは、理論上コンピュータ表現できる。
ということで、第2章のパーセプトロンは何とか終わりました~!
以前は???がずっと続いていたディープラーニングのお勉強でしたが
いやー、アラ不思議。
ヒトはそのうち慣れるんですよね。笑
前よりはスグに理解できるようになりました。
やっぱりコツコツとちょっとずつでもいいから続けるのが大切です。
引き続き頑張りまっす。
最後まで読んでくださり、ありがとうございます!
フクコ
ディープラーニング入門書おススメ本