はじめに
ChatGPTや画像認識AIなど、さまざまなAI技術の基礎となっているのが「ニューラルネットワーク」です。しかし、ニューラルネットワークという言葉を知っていても、実際にどのような計算が行われているのか、イメージしにくいのではないでしょうか。
ニューラルネットワークは、多数の人工ニューロンをつなぎ合わせ、入力された数値を何段階にもわたって変換する仕組みです。その基本となるのは、重み付きの足し算、バイアスによる調整、活性化関数による変換という比較的シンプルな計算です。
ニューラルネットワークの基本は、「入力に重みを掛けて足し合わせる」→「バイアスを加える」→「活性化関数で変換する」という計算を、複数のニューロンや層で繰り返すことです。
この記事では、ニューラルネットワークの基本構造から、ニューロンの計算、活性化関数、順伝播、行列による表現までを一つの流れとして整理します。
この記事でわかること
この記事では、次の内容の理解を目指します。
- ニューラルネットワークの基本構造
- ニューロンが重み・バイアスを使って計算する仕組み
- 活性化関数によって非線形性が生まれる理由
- 順伝播によって入力から出力まで計算する流れ
- 複数のニューロンの計算を行列で表せる理由
- ニューラルネットワークの計算と学習の違い
1.ニューラルネットワークとは何か?
ニューラルネットワークとは、多数の小さな計算単位をつなぎ合わせ、入力された情報から出力を求める計算モデルです。人間の脳にある神経細胞(ニューロン)のつながりをヒントにしていますが、脳の働きをそのまま再現しているわけではありません。
基本的なニューラルネットワークは、入力層・隠れ層(中間層)・出力層という3種類の層で構成されます。
- 入力層:画像の画素値など、入力データを受け取る
- 隠れ層:重み・バイアス・活性化関数を使って情報を変換する
- 出力層:分類結果や予測値など、最終的な出力を求める
たとえば、犬と猫を分類するAIでは、画像を数値として受け取り、隠れ層で何段階にもわたって変換し、最後に分類結果を出力します。
このとき重要なのは、入力された情報をそのまま次の層に渡しているわけではないことです。各ニューロンが計算を行い、その結果を次の層へ渡しています。

ニューラルネットワークは、「入力層で情報を受け取る」→「隠れ層で情報を変換する」→「出力層で結果を求める」という流れで計算しています。
ニューラルネットワークの全体像や、人間の脳との関係については、次の記事で詳しく説明しています。

2.ニューロンは何を計算しているのか?
ニューラルネットワークの基本となるのが、人工ニューロン1個の計算です。人工ニューロンは、複数の入力を受け取り、それぞれに重みを掛けて足し合わせ、バイアスを加えた後、活性化関数で変換します。
入力を \(\boldsymbol{x}\)、重みを \(\boldsymbol{w}\)、バイアスを \(b\)、活性化関数を \(f\) とすると、ニューロンの出力は次の式で表せます。
$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$

ここで、\(\boldsymbol{w}\cdot\boldsymbol{x}\) は入力ベクトルと重みベクトルの内積です。たとえば、入力が2つの場合、活性化関数に渡す値は \(z=w_1x_1+w_2x_2+b\) となります。
2.1.重みは入力の影響を調整する
重みは、それぞれの入力が計算結果にどのくらい影響するかを調整する値です。たとえば、入力が \(x_1=2,\ x_2=3\) の場合、重みを \(w_1=1,\ w_2=2\) とすると、重み付き和は \(1\times2+2\times3=8\) になります。
一方、重みを \(w_1=2,\ w_2=1\) に変えると、結果は \(2\times2+1\times3=7\) になります。入力が同じでも、重みを変えることで計算結果が変わるのです。
2.2.バイアスは計算結果をずらす
バイアスは、重み付き和に加える定数です。たとえば、重み付き和が \(8\) のとき、バイアスが \(2\) なら \(z=10\)、バイアスが \(-3\) なら \(z=5\) になります。
これにより、入力や重みが同じでも、活性化関数に渡す値を調整できます。
2.3.活性化関数は出力を変換する
重み付き和にバイアスを加えた値 \(z\) は、活性化関数によって変換されます。たとえば、ReLU関数は、入力が正ならその値をそのまま出力し、\(0\) 以下なら \(0\) を出力する関数です。
$$
f(z)=\max(0,\ z)
$$
したがって、\(z=3\) なら出力は \(3\)、\(z=-2\) なら出力は \(0\) になります。
人工ニューロンは、重みで入力の影響を調整し、バイアスで値をずらし、活性化関数で出力を変換します。
それぞれの役割や、具体的な数値を使った計算については、次の記事で詳しく説明しています。

3.なぜ活性化関数が必要なのか?
ここまで、ニューロンが重み付き和とバイアスを計算し、活性化関数で出力を変換することを説明しました。では、なぜ活性化関数が必要なのでしょうか。
実は、重み付き和とバイアスによる計算だけでは、何層重ねても全体として1つのアフィン変換にまとめられてしまいます。
たとえば、1層目で \(z_1=2x+1\)、2層目で \(y=3z_1+2\) と計算するとします。これをまとめると、次のようになります。
$$
y=3(2x+1)+2=6x+5
$$
2段階の計算を行っていても、結局は \(y=6x+5\) という1つの式になりました。このような計算だけでは、複雑な非線形の関係を表現できません。
そこで必要になるのが、ReLU関数などの非線形な活性化関数です。
活性化関数を層の間に入れると、単純な1つのアフィン変換では表せない関係も表現できるようになります。たとえば、直線だけでは分けられないような複雑なデータの分類にも対応できるようになります。

活性化関数が必要なのは、ニューラルネットワークに非線形性を与えるためです。非線形な活性化関数を組み込むことで、層を重ねながら複雑な関係を表現できるようになります。
活性化関数がない場合に何が起こるのか、非線形性によって何が変わるのかについては、次の記事で詳しく説明しています。

4.順伝播では入力から出力まで何を計算するのか?
ニューロン1個の計算がわかったところで、次は複数のニューロンをつなぎ合わせたネットワーク全体を考えてみましょう。
ニューラルネットワークでは、入力層から出力層へ向かって計算を順番に進めます。この処理を順伝播(forward propagation)と呼びます。
ここでは、2つの入力、2つの中間ニューロン、1つの出力ニューロンからなる小さなネットワークを考えます。入力は \(x_1=2,\ x_2=3\) とし、中間層と出力層ではReLU関数を使用します。

図中のニューロン内の数値は、ReLU関数を適用した後の出力です。各ニューロンの下にある \(z\) は、活性化関数を適用する前の値を表しています。
4.1.中間層の出力を求める
中間層の1つ目のニューロンでは、重みを \(1,\ -1\)、バイアスを \(2\) とします。すると、活性化関数に渡す値は \(1\times2+(-1)\times3+2=1\) となり、ReLU関数を適用した出力は \(h_1=1\) です。
2つ目のニューロンでは、重みを \(-1,\ 1\)、バイアスを \(-2\) とします。同じように計算すると、\((-1)\times2+1\times3-2=-1\) となり、ReLU関数を適用した出力は \(h_2=0\) です。
したがって、中間層からは \(h_1=1,\ h_2=0\) という2つの値が出力されます。
4.2.出力層で最終的な値を求める
次に、中間層の出力を使って、出力層を計算します。出力層の重みを \(2,\ -1\)、バイアスを \(1\) とすると、次のようになります。
$$
z=2\times1+(-1)\times0+1=3
$$
最後にReLU関数を適用すると、最終的な出力は \(y=3\) です。
今回の計算をまとめると、次のようになります。
| 段階 | 計算結果 |
|---|---|
| 入力層 | \(x_1=2,\ x_2=3\) |
| 中間層 | \(h_1=1,\ h_2=0\) |
| 出力層 | \(y=3\) |
このように、順伝播では、前の層で計算した値を次の層の入力として使い、最終的な出力を求めます。
順伝播とは、各層で「重み付き和+バイアス→活性化関数」という計算を行い、その結果を次の層へ渡していく処理です。
順伝播の各段階を、ニューロンごとの計算から詳しく確認したい場合は、次の記事を参考にしてください。

5.ニューラルネットワークはなぜ行列で計算できるのか?
前の章では、2つの中間ニューロンの出力を、それぞれ別々に計算しました。実は、この2つの計算は行列を使うことで、1つの式にまとめられます。
ニューロンが数百個、数千個と増えた場合、すべての計算を1つずつ書き出すのは大変です。そこで役立つのが、線形代数で学ぶベクトルと行列です。
たとえば、2つの入力を受け取る2つのニューロンでは、活性化関数を適用する前の値を次のように計算します。
$$
\begin{aligned}
z_1&=w_{11}x_1+w_{12}x_2+b_1\\
z_2&=w_{21}x_1+w_{22}x_2+b_2
\end{aligned}
$$
この2つの式は、入力をベクトル、重みを行列、バイアスをベクトルとしてまとめることで、次のように表せます。
$$
\boldsymbol{z}=W\boldsymbol{x}+\boldsymbol{b}
$$
ここで、重み行列 \(W\) の各行は1つのニューロンに対応しています。行列とベクトルの掛け算によって、複数のニューロンの重み付き和をまとめて計算できるのです。
さらに、各成分に活性化関数 \(f\) を適用すると、層全体の出力は次の式になります。
$$
\boldsymbol{h}=f(W\boldsymbol{x}+\boldsymbol{b})
$$
この式は、ニューロン1個の計算 \(y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)\) を、層全体へ広げたものと考えられます。

図の左側はニューロン1個の計算を示しています。同じ計算を複数のニューロンで行い、まとめて表したものが右側の行列の式です。
ニューラルネットワークが行列で計算できるのは、各ニューロンの重み付き和が、行列とベクトルの掛け算に対応しているからです。
行列の各成分がどのニューロンに対応するのか、前の章の順伝播を行列で計算するとどうなるのかについては、次の記事で詳しく説明しています。

6.順伝播と学習は何が違うのか?
ここまで、ニューラルネットワークが入力から出力までどのように計算するのかを見てきました。しかし、これだけではニューラルネットワークが正しい予測をできるようになる理由は説明できません。
今回の順伝播では、重みとバイアスの値をあらかじめ決めて計算しました。一方、実際の学習では、予測結果と正解の違いが小さくなるように、重みとバイアスを調整します。
一般的な教師あり学習では、次のような流れになります。
- 順伝播によって予測値を求める
- 損失関数によって予測値と正解の違いを数値化する
- 誤差逆伝播法などを使って、各パラメータに関する勾配を計算する
- 勾配降下法などを使って、重みとバイアスを更新する

順伝播では、現在の重みとバイアスを使って予測値を求めます。学習では、その予測値をもとに損失や勾配を計算し、重みとバイアスを更新します。
この処理を繰り返すことで、ニューラルネットワークは目的に合った出力を計算できるようになっていきます。
順伝播は、現在の重みとバイアスを使って出力を求める処理です。一方、学習では、予測結果をもとに損失や勾配を計算し、重みとバイアスを更新します。
このシリーズの後半では、損失関数・勾配降下法・誤差逆伝播法を取り上げ、ニューラルネットワークがどのように学習するのかを詳しく見ていきます。
7.ニューラルネットワークの基本をどう学べばよいのか?
ここまで、ニューラルネットワークの基本構造から、ニューロンの計算、活性化関数、順伝播、行列による表現までを整理しました。
それぞれのテーマは独立しているように見えますが、実際には次のようにつながっています。

最初にニューラルネットワークの全体像を理解し、次にニューロン1個の計算を学びます。そして、活性化関数が必要な理由を確認した後、複数のニューロンによる順伝播へと進みます。
最後に、ニューロンごとの計算を行列で表せることがわかれば、ニューラルネットワークの基本的な計算を一通り理解できます。
ニューラルネットワークを理解するには、「全体構造」→「ニューロンの計算」→「非線形性」→「順伝播」→「行列による表現」という順番で学ぶと、各テーマのつながりを理解しやすくなります。
Phase 1の個別記事一覧
それぞれのテーマを詳しく学びたい場合は、次の記事を順番に読むのがおすすめです。
| 学習順 | テーマ | 個別記事 |
|---|---|---|
| ① | 全体構造 | ニューラルネットワークとは何か? |
| ② | ニューロン | ニューロンは何を計算しているのか? |
| ③ | 活性化関数 | 活性化関数はなぜ必要なのか? |
| ④ | 順伝播 | ニューラルネットワークの順伝播とは? |
| ⑤ | 行列 | ニューラルネットワークはなぜ行列で計算できるのか? |
まとめ
今回は、ニューラルネットワークの基本的な仕組みを、5つのテーマに分けて整理しました。
- ニューラルネットワークは、入力層・隠れ層・出力層を通して情報を変換する
- 人工ニューロンは、重み付き和・バイアス・活性化関数を使って出力を求める
- 非線形な活性化関数によって、複雑な関係を表現できるようになる
- 順伝播では、前の層の出力を次の層の入力として使う
- 行列を使うことで、複数のニューロンの計算をまとめて表せる
- 学習では、予測と正解の違いを小さくするように重みとバイアスを調整する
ニューラルネットワークの計算は、一見すると複雑に見えるかもしれません。しかし、基本となるのは、重み付き和とバイアスによる計算に、活性化関数を組み合わせることです。
そして、その計算を複数のニューロンで行い、層から層へと繰り返すことで、ネットワーク全体の出力が求められます。
ニューラルネットワークの基本は、「行列によるアフィン変換」と「活性化関数による非線形変換」を組み合わせ、それを層ごとに繰り返すことです。
ここまでで、ニューラルネットワークがどのように計算するのか、その基本的な仕組みを理解できました。
次のPhaseでは、ステップ関数・シグモイド関数・tanh関数・ReLU関数・ソフトマックス関数を取り上げ、代表的な活性化関数の計算方法と特徴を詳しく見ていきます。
次に学ぶテーマ
(準備中)
シリーズ全体を理解する
(準備中)
関連書籍
ニューラルネットワークの仕組みをさらに詳しく学びたい方には、次の書籍もおすすめです。


コメント