3秒でわかる
入力に重みを掛けて足し、バイアスを加えてから活性化関数に通す計算単位。これを層状に並べたものがニューラルネットワークの中身です。
30秒図解
もう少し詳しく
どういうものか
ニューロンはニューラルネットワークを構成する最小の計算単位です。やっていることは三段階しかありません。複数の入力それぞれに重みを掛けて合計し、バイアスと呼ばれる定数を足し、その結果を活性化関数に通して出力します。生物の神経細胞から名前を借りていますが、中身は掛け算と足し算と一つの関数だけです。
学習で変わるのは重みとバイアスの値であって、この計算の形は変わりません。ネットワークが賢くなるとは、大量のニューロンの重みが少しずつ調整されることを指します。
なぜ必要か
重み付き和だけでは、何段重ねても直線的な変換にしかならず、一本の直線で分けられない問題を解けません。活性化関数という折れ曲がりを一つ挟むことで、層を重ねた分だけ複雑な境界を表せるようになります。ニューロンは、その折れ曲がりを持つ最小の部品として置かれています。
具体例
活性化関数に ReLU を使った一個のニューロンです。
import numpy as np
def relu(x):
return np.maximum(0, x)
x = np.array([1.0, 2.0, 3.0])
w = np.array([0.5, -0.2, 0.1])
b = 0.3
z = np.dot(w, x) + b
print(z)
print(relu(z))層に増やしても構造は同じで、重みが行列になり、np.dot が行列積に変わるだけです。図で書くと下のような流れになります。
x1 --w1--\
x2 --w2---> [ sum + b ] -> [ activation ] -> y
x3 --w3--/つまずきやすいところ
バイアスを省略しても動いてしまうため軽視されがちですが、バイアスが無いと境界が必ず原点を通る位置に固定され、表現力が大きく落ちます。
重みの初期値も落とし穴です。すべてゼロで始めると同じ層のニューロンが全部同じ値を出し、更新量まで同じになるため、いくら学習しても区別が生まれません。乱数で散らして始めます。シグモイドを深く重ねたときに学習が止まるのは、傾きがゼロに近い領域で勾配が消えるためで、現在 ReLU が既定で使われる理由がここにあります。
具体例をもう一歩
同じ計算を層にすると、重みは行列になります。入力が三つ、ニューロンが二個なら、重みは二行三列です。ライブラリが用意している全結合層は、この行列積とバイアスの加算をまとめた部品にすぎません。層を積むほど表現力が上がるのは、折れ曲がりが重なって境界が細かくなるためです。
似た用語との違い
パーセプトロンは、活性化関数が「しきい値を超えたら 1」という階段関数に固定された初期のニューロンです。現在のニューロンは連続な関数を使うため、微分して重みを更新できます。
覚え方
掛けて、足して、曲げる。この三語で一個分の処理はすべて説明できます。