クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

順伝播を手で計算する

このレッスンのあとで: 小さなネットワークが出す答えを、手で計算できる。

55分のレッスンコマンド1件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

答えが出るまでの計算の流れ

順伝播(フォワードパス)は、入力を最初の層から最後の層へ順に通して、ネットワークの答えを求める計算です。学習を終えたネットワークが答えを出すときは、いつもこの計算だけを行います。

小さなネットワークなら、この計算は紙の上でできます。1層ずつ、同じ手順をくり返すだけです。

このレッスンのゴール

メモ

小さなネットワークが出す答えを、手で計算できる。

キーワード

ことばいみ
順伝播入力から出力へ、層を順に計算していくこと
層の出力1つの層のすべてのニューロンが出す数
重み入力ごとにかける数
バイアス合計に足す数
ReLU0より小さい数を0にする活性化関数
予測ネットワークが出した答え

学生が入力するセルは、このプレビューでは空白です。

1つの層は同じ計算を並べたもの

層の計算は、ニューロンごとの計算を並べたものです。ニューロンごとに、重み、バイアス、合計、ReLU の順で進みます。

同じ層のニューロンは、同じ入力を受け取ります。ただし、重みとバイアスは、ニューロンごとに別です。

例: 入力2つ、隠れ2つ、出力1つ

ニューロン計算(入力は 2 と 1)合計ReLUのあと
隠れ12×1 + 1×(-1) + 011
隠れ22×1 + 1×1 - 122
出力1×2 + 2×(-1) + 111(ReLU なし)

学生が入力するセルは、このプレビューでは空白です。

計算はコマンドで確かめられる

max(0, 合計) は、ReLU と同じ働きをします。次のコマンドは、表の隠れ1と隠れ2の値を、一度に計算します。

隠れ層の2つの値を確かめる

コマンド
docker exec jupyter python3 -c "print(max(0, 2 * 1 + 1 * -1), max(0, 2 * 1 + 1 * 1 - 1))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ネットワーク全体を Python で

コード: python
# 例の表と同じネットワークです。
hidden_weights = [[1, -1], [1, 1]]
hidden_biases = [0, -1]
out_weights = [2, -1]
out_bias = 1
inputs = [2, 1]
hidden = []
for n in range(2):
    total = hidden_biases[n]
    for k in range(2):
        total = total + hidden_weights[n][k] * inputs[k]
    if total < 0:
        total = 0
    hidden.append(total)
print("隠れ層:", hidden)
answer = out_bias
for n in range(2):
    answer = answer + out_weights[n] * hidden[n]
print("出力:", answer)
# inputs を [0, 3] に変えて、もう一度実行します。
# 出力はいくつになりますか。

出力が複数なら、いちばん大きいものが答え

出力層に数が複数あるとき、いちばん大きい数の位置が、ネットワークの答えです。出力が3つなら、「静か」「ふつう」「混む」に1つずつ当てはめます。

同点のときは、先に並んだほうを選ぶと決めておきます。

例: 出力3つから答えを選ぶ

出力のニューロン重みバイアス計算(隠れ層は 1 と 2)値
静か2、-111×2 + 2×(-1) + 11
ふつう0、101×0 + 2×1 + 02
混む-1、021×(-1) + 2×0 + 21

学生が入力するセルは、このプレビューでは空白です。

層の数が増えても手順は同じ

層が3つでも10でも、手順は同じです。前の層の出力が、次の層の入力になります。

最後の出力層だけは ReLU をかけず、合計をそのまま答えに使います。数を予測するときは値そのものが、分類のときは最大の位置が答えです。

よくある間違い

注意

同じ層のニューロンは、同じ重みを使うと考えがちです。実際は、ニューロンごとに重みとバイアスが別です。だから、同じ入力を受け取っても、ニューロンごとに違う数が出ます。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。