ニューラルネットワークとは何か?|人間の脳をヒントにしたAIの仕組み

AI

はじめに

ChatGPTや画像認識AIなど、最近のAI技術の多くには「ニューラルネットワーク」という仕組みが使われています。

ニューラルネットワークは、人間の脳の神経細胞(ニューロン)のつながりをヒントに考えられた計算モデルです。しかし、「脳をヒントにした」と言われても、実際に何を計算しているのか、イメージしにくいのではないでしょうか。

実は、ニューラルネットワークの基本的な計算は、それほど複雑ではありません。入力された数値に「重み」を掛けて足し合わせ、その結果を活性化関数で変換しながら次の層に伝えていく仕組みです。

この記事では、ニューラルネットワークを難しい数式から理解するのではなく、「情報を受け取る」「重要度を調整する」「次の層に伝える」という流れから、その基本的な仕組みを考えてみます。

この記事でわかること

この記事では、次の内容の理解を目指します。

  • ニューラルネットワークとは何か
  • 人間の脳とニューラルネットワークの関係
  • 入力層・隠れ層・出力層の役割
  • ニューロンがどのような計算をしているのか
  • 重み・バイアス・活性化関数の意味
  • ニューラルネットワークがどのように学習するのか

1.ニューラルネットワークとは何か?

ニューラルネットワークとは、多数の小さな計算単位をつなぎ合わせて、入力された情報から出力を計算する仕組みです。たとえば、画像を見て「これは犬なのか、猫なのか」を判断するAIを考えてみます。

人間であれば、耳の形や顔の特徴などを見て、犬か猫かを判断できます。一方、コンピュータは画像をそのまま人間のように理解しているわけではありません。画像を数値として受け取り、その数値を何段階にもわたって変換することで、犬や猫を区別するための特徴を学習していきます。

このような計算を実現する仕組みの一つが、ニューラルネットワークです。

ニューラルネットワークは、入力された数値を何段階にもわたって変換し、最終的な判断や予測につなげる計算モデルです。

2.人間の脳をヒントにした仕組み

ニューラルネットワークという名前は、人間の脳にある「ニューロン(神経細胞)」に由来しています。人間の脳には非常に多くのニューロンがあり、ニューロン同士が信号をやり取りすることで、さまざまな情報を処理しています。

人工的なニューラルネットワークも、この「信号を受け取り、処理して、次に伝える」という考え方をヒントにしています。

ただし、人工ニューラルネットワークが人間の脳をそのまま再現しているわけではありません。実際には、数値を入力として受け取り、決められた数式に従って計算する数学的なモデルです。

2.1.人工ニューロンは何をしている?

人工ニューロンの基本的な役割は、次の3つです。

  1. 複数の入力を受け取る
  2. 入力を計算して1つの値にまとめる
  3. 計算結果を次のニューロンに伝える

たとえば、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)\) という出力を求めます。

つまり、人工ニューロンは、複数の入力を受け取って1つの値を計算し、その結果を次に伝えているわけです。次の図で、この計算の流れを確認してみましょう。

人工ニューロンの基本構造

人工ニューロンの基本は、「入力に重みを掛けて足し合わせる」→「バイアスを加える」→「活性化関数で変換する」→「出力する」という計算です。

3.ニューラルネットワークは3種類の層で構成される

人工ニューロンを複数つなぎ合わせると、ニューラルネットワークになります。基本的なニューラルネットワークは、入力層・隠れ層・出力層という3種類の層で構成されています。

3.1.入力層:情報を受け取る

入力層は、ニューラルネットワークに情報を渡す部分です。たとえば、画像認識であれば画像の画素値、数値データを使った予測であれば気温や湿度などが入力になります。

入力層そのものは、一般的な全結合型ニューラルネットワークでは、受け取った値を次の層に渡す役割を持っています。

3.2.隠れ層:情報を変換する

隠れ層(中間層)は、入力された情報を計算によって変換する部分です。ここでは、それぞれのニューロンが入力に重みを掛け、バイアスを加え、活性化関数を通して出力を計算します。

隠れ層が複数ある場合、前の層で計算した結果が次の層に渡され、さらに変換されます。このように計算を重ねることで、入力されたデータから、目的に役立つ特徴を表現できるようになります。

3.3.出力層:最終的な結果を求める

出力層は、ニューラルネットワークの最終的な計算結果を出す部分です。たとえば、犬と猫を分類するAIであれば、犬である確率と猫である確率を出力するように設計できます。

一方、気温や売上などの数値を予測するAIであれば、予測した数値そのものを出力することもあります。つまり、出力層の役割は、ニューラルネットワークが何を予測したいかによって変わります。

ここまで説明した入力層・隠れ層・出力層の関係を、図で確認してみましょう。入力された情報が隠れ層で変換され、出力層へと伝わっていく様子がわかります。

入力層・隠れ層・出力層の構造

ニューラルネットワークは、「入力層で情報を受け取る」→「隠れ層で情報を変換する」→「出力層で結果を求める」という流れで計算しています。

4.ニューロンの計算は「内積」で表せる

ここで、人工ニューロンが行っている計算をもう少し詳しく見てみます。先ほど、3つの入力を受け取るニューロンの計算を、次のように表しました。

$$
z=w_1x_1+w_2x_2+w_3x_3+b
$$

この式を見ると、入力 \(x_i\) と重み \(w_i\) を掛けて足し合わせています。実は、これは線形代数で学ぶ「内積」と同じ計算です。

入力ベクトルと重みベクトルを、

$$
\boldsymbol{x}=
\begin{pmatrix}
x_1\\
x_2\\
x_3
\end{pmatrix},
\quad
\boldsymbol{w}=
\begin{pmatrix}
w_1\\
w_2\\
w_3
\end{pmatrix}
$$

とすると、内積は、

$$
\boldsymbol{w}\cdot\boldsymbol{x}
=w_1x_1+w_2x_2+w_3x_3
$$

となります。したがって、人工ニューロンの計算は、

$$
z=\boldsymbol{w}\cdot\boldsymbol{x}+b
$$

と表せます。

ここで重要なのは、重みベクトル \(\boldsymbol{w}\) の値によって、どの入力をどれくらい強く反映するかが変わることです。

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

4.1.重みは入力の重要度を調整する

たとえば、次の入力を考えます。

$$
\boldsymbol{x}=
\begin{pmatrix}
2\\
3
\end{pmatrix}
$$

重みが、

$$
\boldsymbol{w}=
\begin{pmatrix}
1\\
2
\end{pmatrix}
$$

であれば、内積は \(1\times2+2\times3=8\) になります。

一方、重みを、

$$
\boldsymbol{w}=
\begin{pmatrix}
2\\
1
\end{pmatrix}
$$

に変えると、内積は \(2\times2+1\times3=7\) になります。

入力は同じでも、重みを変えることで計算結果が変わりました。つまり、ニューラルネットワークでは、重みを調整することで、入力された情報のどの部分を強く反映するかを変えられます。

ニューラルネットワークの基本計算は、「入力ベクトルと重みベクトルの内積に、バイアスを加える」という形で表せます。重みを変えることで、入力と出力の関係を調整できます。

4.2.バイアスは何のためにある?

では、内積に加えているバイアス \(b\) は、何のためにあるのでしょうか。バイアスは、入力に対する計算結果を一定量だけずらす役割を持っています。

たとえば、内積が \(8\) のとき、バイアスが \(2\) なら \(z=10\)、バイアスが \(-3\) なら \(z=5\) になります。このように、バイアスを使うことで、入力が同じでも活性化関数に渡す値を調整できます。

5.なぜ活性化関数が必要なのか?

ここまで、ニューロンでは入力と重みの内積にバイアスを加えることを説明しました。しかし、ニューラルネットワークがこの計算だけを繰り返していたら、どうなるでしょうか。

実は、重み付きの足し算とバイアスの加算だけでは、何層重ねても全体として1回の変換と同じ形にまとめられてしまいます。

たとえば、次の計算を考えてみましょう。

$$
z_1=2x+1
$$

さらに、

$$
z_2=3z_1+2
$$

と計算したとします。これをまとめると、

$$
z_2=3(2x+1)+2=6x+5
$$

となります。

2段階の計算を行っていても、結局は \(6x+5\) という1つの式にまとめられました。このような計算だけでは、複雑な非線形の関係を表現することができません。

なお、バイアスを含むこのような変換は、厳密には「アフィン変換」と呼ばれます。アフィン変換を何層重ねても、全体として1つのアフィン変換にまとめられるため、非線形な関係を表現することはできません。

そこで登場するのが、活性化関数です。

5.1.活性化関数は計算結果を変換する

活性化関数は、ニューロンで計算した値 \(z\) を受け取り、別の値に変換する関数です。

$$
y=f(z)
$$

代表的な活性化関数には、次のようなものがあります。

  • ステップ関数
  • シグモイド関数
  • ReLU関数
  • ソフトマックス関数

これらは用途や性質が異なりますが、ニューラルネットワークの計算に重要な役割を持っています。特に、隠れ層で非線形な活性化関数を使うことで、単純な重み付きの足し算だけでは表現できない複雑な関係を扱えるようになります。

なお、ソフトマックス関数は、シグモイド関数やReLU関数とは異なり、複数の値をまとめて確率分布の形に変換する関数です。主に多クラス分類の出力層で使われます。

活性化関数の重要な役割は、ニューラルネットワークに非線形な変換を取り入れることです。これにより、層を重ねることで複雑な関係を表現できるようになります。

活性化関数にはいくつかの種類があり、それぞれ特徴やメリット・デメリットがあります。具体的な関数の違いについては、後の記事で詳しく見ていきます。

6.ニューラルネットワークはどうやって学習する?

ここまで、ニューラルネットワークがどのように計算するのかを見てきました。では、ニューラルネットワークは、どのようにして犬と猫を区別できるようになるのでしょうか。

重要なのは、重みとバイアスを調整することです。

6.1.最初から正しい答えを出せるわけではない

ニューラルネットワークは、最初から正しい答えを出せるわけではありません。一般的な学習では、重みを小さなランダムな値などで初期化し、データを入力して予測結果を計算します。

たとえば、猫の画像を入力したのに、犬である確率を高く予測してしまうことがあります。この場合、予測結果と正解の間には誤差があります。

6.2.誤差を使って重みを調整する

ニューラルネットワークの学習では、予測結果と正解の違いを「損失関数」という仕組みで数値化します。そして、その損失が小さくなるように、重みやバイアスを少しずつ調整していきます。

代表的な方法が、勾配降下法とバックプロパゲーション(誤差逆伝播法)です。バックプロパゲーションでは、出力側から入力側に向かって、各パラメータに対する損失の微分を計算します。その結果を使い、勾配降下法などで重みとバイアスを更新します。

この学習の流れを図にすると、予測結果と正解の違いをもとに、重みとバイアスを繰り返し調整していることがわかります。

ニューラルネットワークの学習の流れ

ニューラルネットワークの学習とは、予測結果と正解の違いを小さくするように、重みとバイアスを調整していくことです。

この処理を多くのデータに対して繰り返すことで、ニューラルネットワークは目的に合った予測ができるようになっていきます。

7.ディープラーニングとの違いは?

ニューラルネットワークと一緒によく登場する言葉が「ディープラーニング(深層学習)」です。ディープラーニングは、一般に、複数の隠れ層を持つニューラルネットワークなどを使って学習する手法を指します。

隠れ層を重ねることで、データを何段階にもわたって変換できるようになります。たとえば、画像認識では、初期の層で線や輪郭などの比較的単純な特徴を捉え、後の層でより複雑な特徴を表現する場合があります。

ただし、層を増やせば必ず性能が良くなるわけではありません。学習の難しさや計算量なども考慮する必要があります。

ディープラーニングは、ニューラルネットワークを深くすることで、複雑な特徴や関係を学習する技術です。ニューラルネットワークの基本的な計算を理解することが、ディープラーニングを理解する第一歩になります。

まとめ

今回、見てきたことをまとめます。

  • ニューラルネットワークは、人間の脳の神経細胞のつながりをヒントにした計算モデル
  • 入力層・隠れ層・出力層を通して情報を変換する
  • 人工ニューロンは、入力と重みの内積にバイアスを加えて計算する
  • 重みは入力の影響を調整し、バイアスは計算結果をずらす役割を持つ
  • 活性化関数を使うことで、非線形な関係を表現できる
  • 学習では、予測と正解の違いが小さくなるように重みとバイアスを調整する
  • ディープラーニングでは、複数の層を使って複雑な特徴を学習する

ニューラルネットワークと聞くと、人間の脳のように複雑な処理を行っているイメージがあるかもしれません。しかし、基本となるニューロンの計算は、次のような比較的シンプルな式で表せます。

$$
y=f(\boldsymbol{w}\cdot\boldsymbol{x}+b)
$$

ニューラルネットワークの基本は、「入力と重みの内積」「バイアスによる調整」「活性化関数による変換」を組み合わせることです。この計算を何段階にも重ね、学習によって重みとバイアスを調整することで、さまざまな予測や判断ができるようになります。

ここまで、ニューラルネットワークの全体像を見てきました。では、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をコピーしました