ニューラルネットワークの前半を学ぶ

前回はパーセプトロンを学んだ。
今回はニューラルネットワーク

パーセプトロンの難点は重さを決める必要があること。
ニューラルネットワークではそれが解決される。らしい。

活性化関数

入力信号の総和を出力信号に変換する関数が活性化関数。
で、単純に閾値で活性化するような活性化関数をステップ関数と呼ぶ。
昨日やってた関数は閾値を使ってたので、活性化関数を使ってたとも呼べる。
※入力信号(に重さをかけたモノ)の総和で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
今回はインストールからどこまでやるかなー。

Python入れる

公式サイトからインストーラをDL。
いれる。
すぐに終わった。
オプションで環境変数:PATHの設定も一緒にしてくれるのうれしい。

いつもの

ハローを作る。
拡張子はpyだそうで。

print("Hello, Python!")

Windowsなので、コマンドから以下を実行。

>python hello.py
Hello, Python!

できたわ。

インストールおしまい。

でぃすとりびゅーしょんとな

インストール回り含め、本に書いてありました。
Deep LearningならAnacondaを使うといいよと。全部そろってるよと。
入れなおしまーす。
なんか時間かかってるからおしまい。

次回からはもうちょいPythonしたいね。

追記

見事にPATHの設定がまずかった。
まぁ、そりゃそうなんだけど。
先に入れちゃった場合はPATHも直そう。
手抜きして、元のパスをそのままにしとくと、もちろんAnaconda側は動きません。(新しいパスを書く場所による)

さらに追記

参考にしてる書籍はこちら。

次回はパーセプトロンだそうです。
先は長そうだ。