はじめに
これまでの記事では、人工ニューロンが重み・バイアス・活性化関数を使って出力を計算する仕組みと、ニューラルネットワークに非線形性が必要な理由を説明しました。
では、複数のニューロンをつなぎ合わせたニューラルネットワークでは、入力された値がどのように計算され、最終的な出力になるのでしょうか。たとえば、2つの数値を入力し、中間層にある2つのニューロンを通して、最後に1つの値を出力するネットワークを考えます。
この場合、それぞれのニューロンが計算した結果を、次の層へ順番に渡していきます。このように、入力から出力へ向かって計算を進める処理を順伝播(forward propagation)と呼びます。
順伝播とは、入力層から出力層へ向かって、重み付き和・バイアス・活性化関数による計算を順番に進める処理です。ニューラルネットワークが予測値を求めるための基本となります。
この記事では、小さなニューラルネットワークを使い、入力から出力までの計算を具体的な数値で確認していきます。
この記事でわかること
この記事では、次の内容の理解を目指します。
- 順伝播とは何をする処理なのか
- 入力層・中間層・出力層の役割
- 複数のニューロンがどのようにつながっているのか
- 中間層の出力を具体的に計算する方法
- 中間層の結果から最終的な出力を求める方法
- 順伝播と学習の違い
1.順伝播とは何か?
順伝播は、ニューラルネットワークに入力されたデータを、入力側から出力側へ順番に伝えながら計算する処理です。前回までの記事では、人工ニューロン1個の計算を、次の式で表しました。
$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$
ここで、\(\boldsymbol{x}\) は入力、\(\boldsymbol{w}\) は重み、\(b\) はバイアス、\(f\) は活性化関数です。ニューラルネットワークでは、この計算を複数のニューロンで行い、ある層の出力を次の層の入力として使います。
つまり、順伝播は「入力 → 中間層で計算 → 次の層へ結果を渡す → 出力層で計算 → 最終的な出力」という流れです。
ここで重要なのは、単に数値を次の層へ渡すだけではないことです。各ニューロンでは、受け取った値に重みを掛け、バイアスを加え、必要に応じて活性化関数を適用します。
2.今回計算するニューラルネットワーク
実際に計算する前に、今回使用するニューラルネットワークの構造を確認しましょう。今回は、次の3つの層からなるネットワークを考えます。
- 入力層:2つの入力 \(x_1,\ x_2\) を受け取る
- 中間層:2つのニューロンで計算する
- 出力層:中間層の結果から1つの値を計算する
入力層はデータを受け取る部分で、今回の例では重み付き和や活性化関数の計算を行いません。実際の計算は、中間層と出力層で行います。
また、今回のネットワークでは、中間層と出力層の活性化関数にReLU関数を使用します。
$$
f(z)=\max(0,\ z)
$$
ReLU関数は、入力が正であればその値をそのまま出力し、\(0\) 以下であれば \(0\) を出力する関数です。ここで、今回のネットワーク全体の構造を図で確認します。

入力層の2つの値は、中間層にある両方のニューロンへ渡されます。そして、中間層の2つの出力が、出力層のニューロンへ渡されます。
今回のネットワークでは、2つの入力から中間層の2つの値を計算し、その結果を使って最終的な1つの出力を求めます。
3.中間層では何を計算するのか?
まず、中間層の計算を考えます。今回は、2つの入力を \(x_1=2,\ x_2=3\) とします。
中間層には2つのニューロンがあるため、それぞれについて重みとバイアスを設定します。
3.1.中間層の1つ目のニューロン
1つ目のニューロンでは、次の重みとバイアスを使います。
- 入力 \(x_1\) に対する重み:\(w_{11}^{(1)}=1\)
- 入力 \(x_2\) に対する重み:\(w_{12}^{(1)}=-1\)
- バイアス:\(b_1^{(1)}=2\)
ここで、上付きの \((1)\) は中間層を表し、重みの下付き添字は「ニューロン番号、入力番号」の順番で表しています。
まず、重み付き和にバイアスを加えます。
$$
\begin{aligned}
z_1^{(1)}
&=w_{11}^{(1)}x_1+w_{12}^{(1)}x_2+b_1^{(1)}\\
&=1\times2+(-1)\times3+2\\
&=1
\end{aligned}
$$
次に、ReLU関数を適用します。
$$
h_1=f(z_1^{(1)})=\max(0,\ 1)=1
$$
したがって、1つ目のニューロンの出力は \(h_1=1\) です。
3.2.中間層の2つ目のニューロン
2つ目のニューロンでは、次の重みとバイアスを使います。
- 入力 \(x_1\) に対する重み:\(w_{21}^{(1)}=-1\)
- 入力 \(x_2\) に対する重み:\(w_{22}^{(1)}=1\)
- バイアス:\(b_2^{(1)}=-2\)
同じように、重み付き和にバイアスを加えます。
$$
\begin{aligned}
z_2^{(1)}
&=w_{21}^{(1)}x_1+w_{22}^{(1)}x_2+b_2^{(1)}\\
&=(-1)\times2+1\times3-2\\
&=-1
\end{aligned}
$$
次に、ReLU関数を適用します。
$$
h_2=f(z_2^{(1)})=\max(0,\ -1)=0
$$
今回は、重み付き和にバイアスを加えた結果が \(-1\) になりました。しかし、ReLU関数は負の値を \(0\) に変換するため、2つ目のニューロンの出力は \(h_2=0\) になります。
このように、活性化関数によって、次の層へ渡される値が変わることがわかります。
3.3.中間層の計算結果をまとめる
ここまでの計算結果をまとめると、次のようになります。
| ニューロン | 重み付き和+バイアス | ReLU適用後 |
|---|---|---|
| 1つ目 | \(z_1^{(1)}=1\) | \(h_1=1\) |
| 2つ目 | \(z_2^{(1)}=-1\) | \(h_2=0\) |
中間層では、2つのニューロンがそれぞれ計算を行い、\(h_1=1,\ h_2=0\) という2つの出力が得られました。
1つ目のニューロンではReLU関数を適用しても値が変わりませんでしたが、2つ目では負の値が \(0\) に変換されました。これらの値が、次の出力層への入力になります。
4.出力層では何を計算するのか?
続いて、出力層の計算を考えます。出力層には1つのニューロンがあり、中間層の出力 \(h_1,\ h_2\) を受け取ります。
今回は、次の重みとバイアスを使います。
- \(h_1\) に対する重み:\(w_{11}^{(2)}=2\)
- \(h_2\) に対する重み:\(w_{12}^{(2)}=-1\)
- バイアス:\(b_1^{(2)}=1\)
上付きの \((2)\) は、2番目の計算層である出力層を表しています。
4.1.中間層の出力から重み付き和を計算する
まず、中間層の出力を使って、重み付き和にバイアスを加えます。
$$
\begin{aligned}
z_1^{(2)}
&=w_{11}^{(2)}h_1+w_{12}^{(2)}h_2+b_1^{(2)}\\
&=2\times1+(-1)\times0+1\\
&=3
\end{aligned}
$$
4.2.活性化関数で最終的な出力を求める
最後に、ReLU関数を適用します。
$$
y=f(z_1^{(2)})=\max(0,\ 3)=3
$$
したがって、今回のニューラルネットワークの最終的な出力は、\(y=3\) です。
出力層では、中間層で求めた値を新しい入力として受け取り、重み・バイアス・活性化関数を使って最終的な出力を計算します。
5.入力から出力までの計算を振り返る
ここまで、入力層から中間層、出力層へと順番に計算してきました。計算全体を整理すると、次のようになります。
| 段階 | 計算内容 | 結果 |
|---|---|---|
| 入力層 | 入力値を受け取る | \(x_1=2,\ x_2=3\) |
| 中間層① | \(1\times2-1\times3+2=1\) | \(h_1=1\) |
| 中間層② | \(-1\times2+1\times3-2=-1\) | \(h_2=0\) |
| 出力層 | \(2\times1-1\times0+1=3\) | \(y=3\) |
今回は、中間層の1つ目のニューロンではReLU関数を適用しても値が変わらず、2つ目のニューロンでは \(-1\) が \(0\) に変換されました。このように、活性化関数によって各ニューロンの出力が変わり、その結果が次の層の計算に使われます。
計算の順序と、それぞれのニューロンが出力した値を図で確認してみましょう。

図を見ると、入力層の \(2,\ 3\) から中間層の \(1,\ 0\) が計算され、最後に \(3\) が出力される流れがわかります。
順伝播では、前の層の出力を次の層の入力として使い、計算を順番に繰り返すことで、ネットワーク全体の出力を求めます。
6.順伝播と学習は何が違うのか?
ここまでの計算では、重みとバイアスの値をあらかじめ決めていました。そして、その値を使って入力から出力までを計算しました。
これが順伝播です。順伝播は、現在の重みとバイアスを使って、ネットワークがどのような出力を返すかを求める処理です。
一方、ニューラルネットワークの学習では、予測結果と正解の違いを小さくするように、重みとバイアスを調整します。一般的な教師あり学習では、次のような流れになります。
- 順伝播で予測値を求める
- 損失関数で予測値と正解の違いを数値化する
- 誤差逆伝播法などを使って、重みやバイアスに関する勾配を求める
- 勾配降下法などの方法で、重みとバイアスを更新する
つまり、順伝播そのものは重みやバイアスを更新する処理ではありません。学習の中で予測値を求めるためにも、学習済みのネットワークで新しいデータを処理するためにも使われます。
順伝播は現在の重みとバイアスを使って出力を計算する処理です。一方、学習では、順伝播で得られた予測値などをもとに損失や勾配を計算し、重みとバイアスを更新します。
学習の詳しい仕組みについては、後の「ニューラルネットワークの学習」のシリーズで説明します。
7.ニューロンが増えたらどうなるのか?
今回は、中間層に2つのニューロンしかない小さなネットワークを扱いました。しかし、実際のニューラルネットワークでは、1つの層に多数のニューロンがあることも珍しくありません。
その場合も、基本となる計算は同じです。それぞれのニューロンで、入力に重みを掛け、バイアスを加え、活性化関数を適用します。
ただし、ニューロンが増えると、すべての計算を1つずつ書き出すのは大変になります。たとえば、ある層に100個のニューロンがあれば、それぞれについて重み付き和と活性化関数の計算が必要です。
そこで役立つのが、行列です。複数のニューロンの重みを行列にまとめ、入力をベクトルとして扱えば、1つの層の計算をまとめて表せます。
ニューロンが増えても、順伝播の基本は変わりません。多数のニューロンの計算をまとめて表すために、行列とベクトルが役立ちます。
次回は、今回の計算を行列でどのように表せるのかを見ていきます。
まとめ
今回、見てきたことをまとめます。
- 順伝播とは、入力から出力へ向かって計算を順番に進める処理である
- 入力層はデータを受け取り、中間層と出力層でニューロンの計算を行う
- 各ニューロンでは、重み付き和・バイアス・活性化関数を使って出力を求める
- 中間層の出力が、次の出力層への入力になる
- 今回の具体例では、中間層で \(h_1=1,\ h_2=0\) を求め、最終的に \(y=3\) が得られた
- 順伝播は出力を計算する処理であり、重みやバイアスの更新とは異なる
- 多数のニューロンの計算は、行列を使ってまとめて表せる
順伝播の本質は、各層で「重み付き和+バイアス→活性化関数」という計算を行い、その出力を次の層へ渡すことです。この処理を繰り返すことで、ニューラルネットワークは入力から最終的な出力を求めます。
今回は、2つの入力と2つの中間ニューロンを使い、順伝播の計算を具体的に確認しました。
では、ニューロンの数が増えたとき、こうした計算をどのように効率よく表せばよいのでしょうか。次回は、「ニューラルネットワークはなぜ行列で計算できるのか?」というテーマで、順伝播と線形代数のつながりを見ていきます。
関連記事



シリーズ全体を理解する
(準備中)
Phase 1|ニューラルネットワークの基礎をまとめて理解する

関連書籍
ニューラルネットワークの計算や、順伝播の仕組みをさらに詳しく学びたい方には、次の書籍がおすすめです。



コメント