第1章 ディープラーニング
1 環境の準備
ディープラーニングにも対応した機械学習ライブラリである「Tensorflow」の環境を構築すします。
pip install tensorflow
2 ニューラルネットワークとは?
ニューラルネットワークとは人間の脳の神経細胞であるニューロンの動作を元にプログラムを構築したものです。
ニューロンは複数の電気信号が入ってきて、その大きさを判断して1つの電気信号を出力します。それを模したプログラムがパーセプトロンです。
パーセプトロンはデータを入力するときにある数を掛けます。これを重み付けといいます。それらを合計し、ある一定値(バイアス)以上なら1を出力し、そうでないなら0を出力します。
例えば、and出力をパーセプトロンで表してみます。 引数 x1とx2には1または0が入ってくるものとします。これに重み付け係数(w1とw2)を掛けて、バイアス(0.5)以上なら1、そうじゃないなら0を返します。
per.ipynb に以下を記述してみましょう。
# ANDの例
def percep(x1, x2):
w1 = 0.3 # 重み1
w2 = 0.3 # 重み2
b = 0.5 # バイアス
a = x1 * w1 + x2 * w2
if a >= b:
y = 1
else:
y = 0
return y # 出力
print(percep(0, 0))
print(percep(0, 1))
print(percep(1, 0))
print(percep(1, 1))
この関数は重み付け係数とバイアスを変えるだけでORにすることもできます。重み付け係数を0.5、バイアスを0.3にするだけです。NANDにするには、重み付け係数を-0.5、バイアスを-0.7にします。
このように、重み付け係数とバイアスを変更することで、さまざまな処理を行えるようにします。
3 多層ニューラルネットワーク
ニューラルネットワークはこのパーセプトロンをいくつもつなげます。そして最終的に0か1かの数値にします。
例えば、XORは一つのパーセプトロンでは実現できません。ANDとNANDの結果をORすることでXORを実現します。
def and_gate(x1, x2):
w1 = 0.3
w2 = 0.3
b = 0.5
a = x1 * w1 + x2 * w2
return 1 if a >= b else 0
def or_gate(x1, x2):
w1 = 0.5
w2 = 0.5
b = 0.3
a = x1 * w1 + x2 * w2
return 1 if a >= b else 0
def nand_gate(x1, x2):
w1 = -0.5
w2 = -0.5
b = -0.7
a = x1 * w1 + x2 * w2
return 1 if a >= b else 0
def xor_gate(x1, x2):
# 1層目: ANDゲートとNANDゲートで出力を計算
and_output = and_gate(x1, x2)
nand_output = nand_gate(x1, x2)
# 2層目: ANDゲートとNANDゲートの出力をORゲートに統合
xor_output = or_gate(and_output, nand_output)
return xor_output
# テスト
print(xor_gate(0, 0)) # 出力: 0
print(xor_gate(0, 1)) # 出力: 1
print(xor_gate(1, 0)) # 出力: 1
print(xor_gate(1, 1)) # 出力: 0
このように複数のパーセプトロンを組み合わせ、複雑なことが可能になります。
4 ディープラーニング
例えば、あやめの分類を行うとします。
4つの数値が入力です(SepalLength、SepalWidth、PetalLength、PetalWidth)。これを入力として最終的に3つの出力(3種類のどれか)を得ます。この3つの出力がそれぞれその答えになる確率が入ります。
ニューラルネットワークでは、学習データを使い、正解になるような重みとバイアスを見つけていきます。この作業が学習となります。
ニューラルネットワークは画像にも適用できます。
画像は数値の配列と見なすことができます。これを入力とし出力を出します。最終的にはいくつかの出力のうちのどれか1つが1になるように計算を行います。1になったところが正解となります。
例えば、8×8の画像に書かれた数字を何の数か認識するとします。8×8=64要素の配列と見なすことが出来ます。これを最終的に10個の要素の配列にします。そのうちのどれかが1になります。
これを多重に行っていきます。一番最初が入力層、最後が出力層と呼ばれます。中間は中間層(隠れ層)と呼ばれます。この中間層を大量に設けて処理するのがディープラーニングです。