ニューラルネットワークの前半を学ぶ
前回はパーセプトロンを学んだ。
今回はニューラルネットワーク。
パーセプトロンの難点は重さを決める必要があること。
ニューラルネットワークではそれが解決される。らしい。
活性化関数
入力信号の総和を出力信号に変換する関数が活性化関数。
で、単純に閾値で活性化するような活性化関数をステップ関数と呼ぶ。
昨日やってた関数は閾値を使ってたので、活性化関数を使ってたとも呼べる。
※入力信号(に重さをかけたモノ)の総和で0,1を出すのがパーセプトロンなので、
厳密にはパーセプトロンの先、出力の前の話が活性化関数であると理解。
"そのまま素通りのステップ関数があったよね"みたいなことですかね。
ステップ関数のほかにもシグモイド関数、ソフトマックス関数などがある。
単層パーセプトロンでは線形だったけども、活性化関数のおかげで非線形になる。
つなぎ方
パーセプトロンではいくつかの入力にそれぞれの重さをかけて、足して、判定、出力だったのが、
x1*w1 + x2*w2
ニューラルネットワークではいくつかの入力にさらにいくつかの重さをかけて、活性化関数を通って出力になる。
(x1*w11 + x2*w12) と (x1*w21 + x2*w22) と (x1*w31 + x2*w32) を活性化関数にかける。
[x1, x2] と [[w11, w21, w31], [w12, w22, w32]]の行列計算。で出力も三つ[a1, a2, a3]になる。
回帰問題か、分類問題かによって活性化関数のかけ方に違いが出る。
ここまでがニューラルネットワークの計算するとこの概念。
次回は
ニューラルネットワークの出力層を設計ですってよ。
そのまま調子よければ手書き数字認識まで行きたいね!
さよなら!
パーセプトロンを学ぶ
さて、引き続き Python Deep Learning のお時間です。
はじめに
前回はPythonを入れるのが命題だったもんで、サクラエディタで作ってました。
が、今後のことを考えて、開発環境を整えました。
エディターはAtom。
こちらの記事を参考にいろいろプラグイン入れました。
パーセプトロン
さて。アルゴリズムです。
2入力のパーセプトロンを学んでいきます。
パーセプトロンは入力に対して重さを掛け合わせ、その和が閾値を超えたら1、超えなければ0を出力する。
そんな原理。
式で書くとこんな感じ。
x1 * w1 + x2 * w2 > θ : y=1 x1 * w1 + x2 * w2 <= θ : y=0 x:入力 w:重さ θ:閾値 y:出力
シータをバイアスに置き換えて考えます。
重さ(w)とバイアス(b)の大きさで1になりやすさ、なりにくさが変わってくる。
そして、バイアス、重みを変えることで同一のロジックでAND,NAND,ORの論理演算ができようになる。
x = np.array([x1, x2]) #↓ここを変える:重み w = np.array([0.5, 0.5]) b = -0.7 #↓ここを変える:バイアス tmp = np.sum(x*w) + b if tmp <= 0: return 0 elif tmp > 0: return 1
ふむふむ。
ただし、このパーセプトロン(単層パーセプトロン)ではXORが表現できない。
そこでパーセプトロンを重ねて多層にしようと。
def XOR( x1, x2 ): AND( NAND( x1, x2 ), OR( x1, x2 ) )
単層パーセプトロンでは線形だったけど、多層にすることで非線形になる。
そして多層のパーセプトロンがあれば理論的にはコンピュータが実現できる。
ということでした。
アルゴリズムのお話でした。
いったいこれがなんなのだかさっぱりつながらないけど、原理がわかってたほうがきっと後々いいんでしょう。
パーセプトロンって言葉も覚えたし。
次回は
ニューラルネットワークを学びます。
そろそろ機械学習的なことに触れたいなぁ。
Pythonを入れてみる
淡々とPythonする。
目的地はDeep Learning。
今回はインストールからどこまでやるかなー。
いつもの
ハローを作る。
拡張子はpyだそうで。
print("Hello, Python!")
Windowsなので、コマンドから以下を実行。
>python hello.py Hello, Python!
できたわ。
インストールおしまい。
でぃすとりびゅーしょんとな
インストール回り含め、本に書いてありました。
Deep LearningならAnacondaを使うといいよと。全部そろってるよと。
入れなおしまーす。
なんか時間かかってるからおしまい。
次回からはもうちょいPythonしたいね。
追記
見事にPATHの設定がまずかった。
まぁ、そりゃそうなんだけど。
先に入れちゃった場合はPATHも直そう。
手抜きして、元のパスをそのままにしとくと、もちろんAnaconda側は動きません。(新しいパスを書く場所による)
さらに追記
参考にしてる書籍はこちら。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
先は長そうだ。