ニューロンは何を計算しているのか?|重み・バイアス・活性化関数の役割

AI

はじめに

前回の記事では、ニューラルネットワークが多数の人工ニューロンをつなぎ合わせ、入力された情報を何段階にもわたって変換する仕組みであることを説明しました。

では、その基本となる人工ニューロン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段階に分けられます。

  1. 入力にそれぞれの重みを掛けて足し合わせる
  2. バイアスを加えて値を調整する
  3. 活性化関数を通して出力を求める

この3段階の計算を図で確認してみましょう。複数の入力が重み付きの足し算によって1つの値にまとめられ、バイアスと活性化関数を通して出力される流れがわかります。

人工ニューロンの計算を3段階に分けた図

人工ニューロンは、「重み付きの足し算」→「バイアスによる調整」→「活性化関数による変換」という順番で出力を計算します。

では、それぞれの計算が何を意味しているのか、具体的に見ていきましょう。

なお、入力と重みを掛けて足し合わせる計算は、数学では「内積」と呼ばれます。内積の意味を詳しく知りたい方は、次の記事も参考にしてください。

▶ 内積が何を表しているのか、「影」と「角度」から理解したい
内積とは何を計算しているのか?|「影」と「角度」でわかるベクトルの本質
内積とは何を計算しているのかを、ベクトルの「影」と角度に注目して直感的に解説。内積の公式にコサインが現れる理由や、2本のベクトルの向きとの関係を図で理解します。

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つの式をグラフで比較してみましょう。重みが同じでも、バイアスを加えることでグラフが上下に移動する様子がわかります。

z=2x と z=2x+3 のグラフ比較

このように、バイアスを変えると、入力が同じでも活性化関数に渡す値を変えられます。たとえば、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つの役割を組み合わせることです。

ここまで、人工ニューロンがどのような計算をしているのかを見てきました。しかし、ここで一つ疑問が残ります。

なぜ、重み付きの足し算だけではなく、活性化関数が必要なのでしょうか。次回は、「活性化関数はなぜ必要なのか?」という疑問から、ニューラルネットワークに非線形性が必要な理由を詳しく見ていきます。

関連記事

▶ 前回:ニューラルネットワークとは何か?|人間の脳をヒントにしたAIの仕組み
ニューラルネットワークとは何か?|人間の脳をヒントにしたAIの仕組み
ニューラルネットワークとは何か?人間の脳をヒントにしたAIの仕組みを初心者向けに解説。入力層・隠れ層・出力層の役割から、重み・バイアス・活性化関数による計算、学習の基本的な仕組みまで、図と具体例を使ってわかりやすく説明します。
▶ 次回:活性化関数はなぜ必要なのか?|ニューラルネットワークに非線形性が必要な理由
活性化関数はなぜ必要なのか?|ニューラルネットワークに非線形性が必要な理由
活性化関数はなぜニューラルネットワークに必要なのか?線形と非線形の違いから、活性化関数がないと何層重ねても1つのアフィン変換にまとめられる理由、非線形性によって複雑な関係を表現できる仕組みまで、図を使ってわかりやすく解説します。

シリーズ全体を理解する

▶ ディープラーニングの基礎からCNNまでを体系的に学びたい

(準備中)

Phase 1|ニューラルネットワークの基礎をまとめて理解する

▶ ニューラルネットワークの仕組みを基礎から理解したい
ニューラルネットワークの仕組みを基礎から理解する|ニューロン・活性化関数・順伝播
ニューラルネットワークの仕組みを初心者向けに図解。ニューロンの重み・バイアス、活性化関数の役割、順伝播の計算、行列による表現まで、ディープラーニングの基礎を具体例とともにわかりやすく解説します。

関連書籍

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

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装 | 斎藤 康毅 |本 | 通販 | Amazon
Amazonで斎藤 康毅のゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装。アマゾンならポイント還元本が多数。斎藤 康毅作品ほか、お急ぎ便対象商品は当日お届けも可能。またゼロから作るDeep Lea...
Pythonによるディープラーニング (Compass Booksシリーズ) | François Chollet, 巣籠悠輔, 株式会社クイープ |本 | 通販 | Amazon
AmazonでFrançois Chollet, 巣籠悠輔, 株式会社クイープのPythonによるディープラーニング (Compass Booksシリーズ)。アマゾンならポイント還元本が多数。François Chollet, 巣籠悠輔, ...
物体・画像認識と時系列データ処理入門 [TensorFlow2/PyTorch対応第2版] NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング | チーム・カルポ |本 | 通販 | Amazon
Amazonでチーム・カルポの物体・画像認識と時系列データ処理入門 NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング。アマゾンならポイント還元本が多数。チーム・カルポ作品ほか、お急ぎ便対象商品は当...

コメント

タイトルとURLをコピーしました