3秒でわかる
入力に重みを掛けて足す計算を層状に重ね、その重みをデータから自動で学習させるモデル。画像認識や生成AIの土台になっています。
30秒図解
もう少し詳しく
どういうものか
ニューラルネットワークは、数値を受け取って重みを掛けて足し合わせ、その和を非線形な関数に通す、という小さな計算単位を層状に並べたモデルです。層をいくつも重ねると、入力と出力の間にある複雑な対応関係を表現できます。重みは人が決めるのではなく、正解との誤差を小さくする向きへ少しずつ動かして決めます。この誤差の伝え方が誤差逆伝播で、学習の中身はほぼこの繰り返しです。
なぜ必要か
「猫の写真かどうか」を判定するルールを、if文の条件として人が書き下すことはできません。耳の形も毛色も撮影角度も無数にあるからです。ニューラルネットワークは、ルールを書く代わりに大量の例を見せて重みを調整させます。判定基準を人が言語化できない問題を扱えることが、この仕組みが使われる最大の理由です。翻訳や音声認識のように、正解はあるのに規則を書き下せない分野で成果が出たのはこのためです。
具体例
重み付き和と活性化関数だけなら、数行で書けます。
import numpy as np
def relu(x):
return np.maximum(0, x)
x = np.array([0.5, -1.2, 3.0]) # 入力3つ
W1 = np.random.randn(3, 4) * 0.1 # 3 -> 4 の重み
b1 = np.zeros(4)
W2 = np.random.randn(4, 1) * 0.1 # 4 -> 1 の重み
b2 = np.zeros(1)
h = relu(x @ W1 + b1) # 中間層
y = h @ W2 + b2 # 出力
print(y)学習とは、この W1 W2 の中身を誤差が減る方向へ更新し続けることです。
つまずきやすいところ
活性化関数を入れ忘れる誤りが多く見られます。非線形な関数を挟まないと、何層重ねても数学的には一段の行列積と同じになり、層を深くした意味が消えます。もうひとつは、学習データでの正解率だけを見て喜んでしまう点です。訓練データを丸暗記した状態でも正解率は上がるので、必ず学習に使っていないデータで測ります。
似た用語との違い
| 語 | 指す範囲 |
|---|---|
| 機械学習 | データから規則を学ぶ手法の総称 |
| ニューラルネットワーク | 機械学習の手法のひとつ |
| ディープラーニング | 層を深く重ねたニューラルネットワーク |
覚え方
やっていることは、掛けて足して曲げる、の繰り返しです。曲げる部分が活性化関数で、掛ける数を経験から直していく作業が学習にあたります。