Pythonで学ぶ順伝播と損失関数
ニューラルネットワークはニューロンの層でできています。順伝播では入力が各層を流れて予測が作られ、損失関数がその予測が正解からどれだけ離れているかを採点します。
やさしい言葉で概念を理解する
ニューラルネットワークはニューロンの層でできています。順伝播では入力が各層を流れて予測が作られ、損失関数がその予測が正解からどれだけ離れているかを採点します。
小さなニューラルネットワークに入力を層ごとに通し、二乗誤差と交差エントロピーで誤差を測ります。
重要なポイント
- 全結合(dense)層は、すべての入力を層内のすべてのニューロンにつなぎます。
- ある層の出力が次の層の入力になります。
- 損失は1つの数値で、低いほど予測が良いことを意味します。
- 数値には二乗誤差、確率やクラスには交差エントロピーを使います。
どのような場面で使う?
- ニューラルネットワークやAIライブラリの内部で何が起きているかを理解する。
- 対応するチャレンジで実装する前に考え方をつかむ。
- 機械学習の講座、面接、プロジェクトに備える。
動かして理解する
入力と目標を変えてみましょう。値が隠れ層を通る様子と、2つの損失が予測にどう反応するかを確認できます。
サンプルコード
main.py
import math
def dense(inputs, weights, biases, activation):
# Each row of weights belongs to one neuron in the layer.
return [activation(sum(x * w for x, w in zip(inputs, row)) + b) for row, b in zip(weights, biases)]
relu = lambda z: max(0.0, z)
sigmoid = lambda z: 1 / (1 + math.exp(-z))
x = [1.0, 2.0]
hidden = dense(x, [[0.5, -0.2], [0.3, 0.8]], [0.0, -0.5], relu)
output = dense(hidden, [[1.0, -1.0]], [0.2], sigmoid)
print("hidden layer:", [round(h, 3) for h in hidden])
print("prediction:", round(output[0], 3))
# A loss function measures how wrong the prediction is.
target = 1.0
mse = (output[0] - target) ** 2
bce = -(target * math.log(output[0]) + (1 - target) * math.log(1 - output[0]))
print("squared error:", round(mse, 3))
print("cross-entropy:", round(bce, 3))
期待される出力
hidden layer: [0.1, 1.4]
prediction: 0.25
squared error: 0.563
cross-entropy: 1.387
仕組み
dense()は1つの層を計算し、重みの各行が1つのニューロンです。隠れ層はReLU、出力層はsigmoidを使って確率を出します。二乗誤差と交差エントロピーはどちらも予測0.25と目標1.0の差を測り、学習ではこれを小さくしようとします。
値を変更し、PythonをインストールせずにCodeUtilityオンラインPythonコンパイラで実行できます。
練習問題
入力値と境界ケースを変更し、より大きなデータでも動作を確認してください。
- 入力や重みを変えて、実行前に出力を予想してみましょう。
- 途中の値を出力して、計算の各ステップを追いましょう。
- 下のリンクのチャレンジを解いて、自分でアイデアを実装しましょう。
チャレンジで練習する
このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。
- 全結合層の順伝播 活性化関数を選べる全結合層のニューロンの出力を計算します。 中級
- 2層ネットワークの順伝播 入力を ReLU の隠れ層と sigmoid の出力層に通します。 中級
- 損失関数:MSE、MAE、交差エントロピー 平均二乗誤差、平均絶対誤差、二値交差エントロピーで、予測がどれだけ間違っているかを測ります。 簡単