はじめに
前回の記事では、ニューラルネットワークが多数の人工ニューロンをつなぎ合わせ、入力された情報を何段階にもわたって変換する仕組みであることを説明しました。
では、その基本となる人工ニューロン1個は、実際にどのような計算をしているのでしょうか。
人工ニューロンの計算は、入力に重みを掛けて足し合わせ、バイアスを加えた後、活性化関数で変換するというものです。基本となる式は、次のように表せます。
$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$
この式には、ニューラルネットワークを理解するための重要な要素が詰まっています。
この記事では、「重み」「バイアス」「活性化関数」の3つに注目し、具体的な数値を使いながら、人工ニューロンがどのように出力を計算するのかを理解していきます。
この記事でわかること
この記事では、次の内容の理解を目指します。
- 人工ニューロンが行う計算の流れ
- 重みが入力に与える影響
- バイアスが計算結果を調整する仕組み
- 活性化関数によって出力が変わる仕組み
- 具体的な数値を使ったニューロンの計算方法
- 重みとバイアスが学習によって調整される理由
1.人工ニューロンは何を計算しているのか?
人工ニューロンは、複数の入力を受け取り、それらを計算して1つの値を出力する仕組みです。
たとえば、3つの入力 \(x_1,\ x_2,\ x_3\) を受け取るニューロンを考えます。それぞれの入力には、対応する重み \(w_1,\ w_2,\ w_3\) が設定されています。
まず、入力と重みを掛け合わせて足し合わせ、バイアス \(b\) を加えます。
$$
z=w_1x_1+w_2x_2+w_3x_3+b
$$
次に、この値を活性化関数 \(f\) に入力して、\(y=f(z)\) という出力を求めます。
つまり、人工ニューロンの計算は、次の3段階に分けられます。
- 入力にそれぞれの重みを掛けて足し合わせる
- バイアスを加えて値を調整する
- 活性化関数を通して出力を求める
この3段階の計算を図で確認してみましょう。複数の入力が重み付きの足し算によって1つの値にまとめられ、バイアスと活性化関数を通して出力される流れがわかります。

人工ニューロンは、「重み付きの足し算」→「バイアスによる調整」→「活性化関数による変換」という順番で出力を計算します。
では、それぞれの計算が何を意味しているのか、具体的に見ていきましょう。
なお、入力と重みを掛けて足し合わせる計算は、数学では「内積」と呼ばれます。内積の意味を詳しく知りたい方は、次の記事も参考にしてください。

2.重みは入力の影響を調整する
最初に考えるのは「重み」です。重みは、それぞれの入力が計算結果にどのくらい影響するかを調整する値です。入力が同じでも、重みが変われば計算結果も変わります。
2.1.重みを掛けると何が変わる?
たとえば、2つの入力 \(x_1=2,\ x_2=3\) があるとします。それぞれの重みを \(w_1=1,\ w_2=2\) とすると、重み付きの足し算は次のようになります。
$$
w_1x_1+w_2x_2=1\times2+2\times3=8
$$
ここで、重みを \(w_1=2,\ w_2=1\) に変更してみます。
$$
w_1x_1+w_2x_2=2\times2+1\times3=7
$$
入力は同じですが、重みを変更したことで、計算結果が \(8\) から \(7\) に変わりました。
最初の例では \(x_2\) の重みが大きく、2つ目の例では \(x_1\) の重みが大きくなっています。このように、重みを調整することで、どの入力を強く反映するかを変えられます。
2.2.重みは正の値とは限らない
ここで重要なのは、重みが必ずしも正の値とは限らないことです。たとえば、\(x_1=2,\ x_2=3\) に対して、重みを \(w_1=1,\ w_2=-2\) とすると、次のようになります。
$$
w_1x_1+w_2x_2=1\times2+(-2)\times3=-4
$$
正の重みは、正の入力を計算結果に加える方向に働きます。一方、負の重みは、正の入力を計算結果から差し引く方向に働きます。
ただし、入力自体が負の場合は影響の向きも変わるため、重みの符号だけで最終的な出力が増えるか減るかを判断できるわけではありません。
ここまでの3つの計算例を図で比較してみましょう。入力が同じでも、重みの大きさや符号を変えることで、重み付きの足し算の結果が変わることを確認できます。

重みは、各入力が計算結果に与える影響の大きさと向きを調整する値です。正の値だけでなく、負の値も取ることができます。
3.バイアスは何のためにあるのか?
次に、バイアスについて考えます。バイアスは、重み付きの足し算で求めた値に加える定数です。これにより、入力とは別に、活性化関数に渡す値を調整できます。
3.1.バイアスを加えると計算結果が変わる
先ほどの例では、重み付きの足し算の結果は \(8\) でした。ここにバイアス \(b=2\) を加えると、\(z=8+2=10\) になります。
一方、バイアスを \(b=-3\) にすると、\(z=8-3=5\) になります。このように、入力と重みが同じでも、バイアスを変えることで計算結果を一定量だけずらせます。
3.2.バイアスがないと何が困る?
では、なぜバイアスが必要なのでしょうか。簡単な例として、入力が1つだけのニューロンを考えます。活性化関数に渡す値は、次のように表せます。
$$
z=wx+b
$$
これは、数学で学ぶ一次関数と同じ形です。バイアスがない場合、式は \(z=wx\) となり、グラフは必ず原点を通ります。一方、バイアスがあれば、グラフを上下に移動できます。
たとえば、重みを \(w=2\) とすると、バイアスがない場合は \(z=2x\)、バイアスが \(3\) の場合は \(z=2x+3\) です。
この2つの式をグラフで比較してみましょう。重みが同じでも、バイアスを加えることでグラフが上下に移動する様子がわかります。

このように、バイアスを変えると、入力が同じでも活性化関数に渡す値を変えられます。たとえば、ReLU関数では、バイアスによって出力が \(0\) になる入力の範囲も変わります。
バイアスは、重み付きの足し算の結果を一定量だけずらし、入力と出力の関係を柔軟に調整するための値です。
4.活性化関数は計算結果をどう変えるのか?
ここまで、重みとバイアスを使って \(z\) を計算する方法を見てきました。しかし、人工ニューロンでは、この値をそのまま出力するとは限りません。通常は、活性化関数 \(f\) を使って、\(y=f(z)\) という別の値に変換します。
活性化関数にはさまざまな種類がありますが、ここでは計算が簡単なReLU関数を例に考えます。
4.1.ReLU関数で計算してみる
ReLU関数は、入力が正であればその値をそのまま出力し、\(0\) 以下であれば \(0\) を出力する関数です。
$$
f(z)=\max(0,z)
$$
たとえば、\(z=5\) であれば \(f(5)=5\)、\(z=-3\) であれば \(f(-3)=0\) になります。このように、活性化関数を通すことで、計算した値の大きさや符号に応じて出力が決まります。
なお、ReLU関数は代表的な活性化関数の一つですが、すべてのニューロンがReLU関数を使うわけではありません。目的や層の役割に応じて、異なる関数が選ばれます。
4.2.活性化関数が違うと出力も変わる
たとえば、\(z=2\) という値が得られた場合を考えます。
ReLU関数では、\(f(2)=2\) となります。一方、シグモイド関数では、同じ入力を \(0\) から \(1\) の範囲の値に変換し、\(f(2)\approx0.88\) となります。
つまり、重みとバイアスが同じでも、どの活性化関数を使うかによって最終的な出力が変わるのです。
活性化関数は、重みとバイアスによって計算した値を、決められた規則に従って変換する関数です。どの関数を使うかによって、ニューロンの出力の性質が変わります。
では、なぜ重み付きの足し算だけではなく、活性化関数による変換が必要なのでしょうか。この理由については、次回の記事で詳しく説明します。
5.具体例でニューロンの計算を理解する
ここまで、重み・バイアス・活性化関数の役割を個別に見てきました。最後に、これらを組み合わせて、人工ニューロン1個の出力を最初から計算してみましょう。
5.1.入力と重みを決める
今回は、2つの入力を受け取るニューロンを考えます。入力と重みを、次のように設定します。
$$
\begin{aligned}
x_1&=2, & x_2&=3\\
w_1&=1, & w_2&=-1
\end{aligned}
$$
また、バイアスを \(b=2\)、活性化関数をReLU関数とします。
5.2.重み付きの足し算を計算する
まず、入力に重みを掛けて足し合わせます。
$$
\begin{aligned}
w_1x_1+w_2x_2
&=1\times2+(-1)\times3\\
&=-1
\end{aligned}
$$
5.3.バイアスを加える
次に、バイアス \(b=2\) を加えます。
$$
z=-1+2=1
$$
5.4.活性化関数で出力を求める
最後に、ReLU関数を適用します。
$$
y=f(1)=\max(0,1)=1
$$
したがって、今回のニューロンの出力は \(y=1\) となります。
ここまでの計算をまとめると、次のようになります。
| 計算段階 | 計算内容 | 結果 |
|---|---|---|
| ① 重み付きの足し算 | \(1\times2+(-1)\times3\) | \(-1\) |
| ② バイアスを加える | \(-1+2\) | \(1\) |
| ③ ReLU関数で変換 | \(\max(0,1)\) | \(1\) |
この例では、バイアスを加えた結果が正になったため、ReLU関数を通しても値は変わりませんでした。一方、バイアスを \(b=0\) に変更すると、\(z=-1\) となり、ReLU関数の出力は \(y=0\) になります。
つまり、入力が同じでも、重みやバイアスの値によってニューロンの出力は変わります。
人工ニューロンの出力は、入力・重み・バイアス・活性化関数の組み合わせによって決まります。これらの計算を多数のニューロンで行うことが、ニューラルネットワークの基本です。
6.重みとバイアスはどのように決まるのか?
ここまでの計算では、重みやバイアスの値をあらかじめ決めていました。しかし、実際のニューラルネットワークでは、これらの値をどのように決めているのでしょうか。
一般的なニューラルネットワークでは、重みとバイアスは学習によって調整されます。たとえば、画像を見て犬と猫を区別するAIを考えます。最初は適切な重みが設定されていないため、正しく分類できるとは限りません。
そこで、予測結果と正解の違いを調べ、その違いが小さくなるように重みとバイアスを更新します。この処理を繰り返すことで、ニューラルネットワークは目的に合った出力を計算できるようになっていきます。
ただし、重みやバイアスをどのように更新するかは、別の仕組みが必要です。具体的には、損失関数・勾配降下法・誤差逆伝播法などを使います。
ニューラルネットワークの学習では、予測と正解の違いを小さくするように、重みとバイアスを調整していきます。人工ニューロンの計算式そのものではなく、式の中のパラメータを学習によって変えていくことが重要です。
まとめ
今回、見てきたことをまとめます。
- 人工ニューロンは、複数の入力を受け取って1つの出力を計算する
- 重みは、各入力が計算結果に与える影響の大きさと向きを調整する
- 重みは正の値だけでなく、負の値も取ることができる
- バイアスは、重み付きの足し算の結果を一定量だけずらす
- 活性化関数は、計算結果を決められた規則に従って変換する
- 重みとバイアスは、学習によって調整される
人工ニューロンの計算は、次の式で表せます。
$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$
この式の中で、重み \(\boldsymbol{w}\) は入力の影響を調整し、バイアス \(b\) は計算結果をずらします。そして、活性化関数 \(f\) が、その値を最終的な出力へと変換します。
人工ニューロンの基本は、「重みで入力の影響を調整する」「バイアスで値をずらす」「活性化関数で出力を変換する」という3つの役割を組み合わせることです。
ここまで、人工ニューロンがどのような計算をしているのかを見てきました。しかし、ここで一つ疑問が残ります。
なぜ、重み付きの足し算だけではなく、活性化関数が必要なのでしょうか。次回は、「活性化関数はなぜ必要なのか?」という疑問から、ニューラルネットワークに非線形性が必要な理由を詳しく見ていきます。
関連記事


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

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



コメント