導入
ニューラルネットワークの最小部品が ニューロン です。やることは単純で、「入力に重みを掛けて足し、活性化関数を通す」だけ。この小さな部品を大量に繋ぐと、驚くほど複雑なことができます。
説明
1つのニューロンの計算はこうです。
flowchart LR x1["入力 x1"] --> sum["重み付き和<br/>z = w1x1 + w2x2 + b"] x2["入力 x2"] --> sum sum --> act["活性化関数<br/>a = f(z)"] act --> out["出力 a"]
もし活性化関数がなければ、何層重ねても結局ただの直線(1次式)にしかなりません。活性化関数という「曲げ」を挟むことで、初めて非線形な(曲がった)関係を表せるようになります。これが NN の力の源です。
代表的な活性化関数:
- シグモイド:出力を 0〜1 に押し込む。確率のように扱える。
1 / (1 + exp(-z)) - ReLU:負なら0、正ならそのまま。
max(0, z)。深いネットで主流。
やってみよう
シグモイドと ReLU を numpy で実装し、いくつかの入力に対する出力を見ます。シグモイドが 0〜1 に収まること、ReLU が負をバッサリ 0 にすることを確かめましょう。
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def relu(z):
return np.maximum(0, z)
zs = np.array([-3.0, -1.0, 0.0, 1.0, 3.0])
print("入力 z :", zs)
print("sigmoid(z) :", np.round(sigmoid(zs), 3))
print("relu(z) :", relu(zs))
演習
ニューロン1個を計算してみましょう。入力 x = [1.0, 2.0]、重み w = [0.5, -1.0]、バイアス b = 0.5 のとき、z = w·x + b を求め、sigmoid(z) を表示してください。
ヒント1を見る
重み付き和は z = np.dot(w, x) + b。内積 np.dot が w1*x1 + w2*x2 を計算します。
ヒント2を見る
z = 0.5*1.0 + (-1.0)*2.0 + 0.5 = -1.0。その sigmoid(-1.0) はおよそ 0.269 です。
まとめ
- ニューロン=「重み付き和 → 活性化関数」の小さな計算単位。
- 活性化関数(sigmoid/ReLU)の非線形な「曲げ」が、NNに複雑な表現力を与える。
- 活性化関数がなければ、何層重ねてもただの1次式にしかならない。