AIの仕組み/ニューラルネットワーク
現在の第3次AIブームを牽引するディープラーニング(深層学習)の基礎となる技術が、ニューラルネットワークです。ニューラルとは、英語で「神経の」という意です。
ニューラルネットワークとは、人間の脳内にある神経細胞(ニューロン)のネットワーク構造を数理的–に模倣したモデルです。もともとは生物学的な着想から作成されましたが、現在では数学的な関数近似器[† 1]として発展しました。現在は、画像認識、音声処理、自然言語処理などにおいて高い性能を発揮し、ディープラーニングや生成AIを支える基盤技術となっています。
人間の脳とパーセプトロン
[編集]ニューラルネットワークの基本単位となるのが、パーセプトロンと呼ばれる人工ニューロンです。
生物学的ニューロンの仕組み
[編集]
人間の脳には、約860億個ものニューロンが存在し[1]、それらが互いに複雑に接続され、巨大なネットワークを形成しています。1つのニューロンは、主に以下の3つの部分から構成されています。
樹状突起 - 他のニューロンから電気信号を受け取る入力部分です。
- 細胞体
- 受け取った電気信号を統合・処理する中心部分です。
軸索 - 処理された信号を次のニューロンへ送り出す出力部分です。
ニューロン間の接続部分はシナプスと呼ばれます。シナプスにはそれぞれ信号の伝達効率があり、この強度が変化することで、脳は情報を学習・記憶しています。
また、ニューロンは入力された信号を単純に中継するものではありません。入力された信号の合計がある一定の閾値を超えたときにのみ反応しパルス状の電気信号を発します(発火)。
パーセプトロンの考案
[編集]1958年、アメリカの心理学者フランク・ローゼンブラットは、「パーセプトロン」を考案しました。これは、神経細胞の仕組みを単純化し、数式としてモデル化したものです。これが現在のニューラルネットワークの原型です。
パーセプトロンは、複数の入力信号を受け取り、それらを計算して1つの信号を出力する仕組みです。生物学的ニューロンとの対応関係は、以下の表の通りです。
| 生物学的概念 | 数理モデル(パーセプトロン) | 記号 |
|---|---|---|
| 他の細胞からの電気信号 | 入力データ | |
| シナプスの結合強度 | 重み | |
| 発火のしやすさ(閾値の調整) | バイアス | |
| 細胞体での信号統合 | 総入力(重み付き和) | |
| 発火するかどうかの決定 | 活性化関数 | |
| 次の細胞への出力信号 | 出力 |
数学的構造
[編集]パーセプトロンの計算プロセスは以下の通りです。2つの入力 がある場合、それぞれの入力には情報の重要度を表す「重み」 が掛け合わされます。
計算は2段階で行われます。まず、重み付き和の計算を行います。入力信号に重みを掛けたものを全て足し合わせます。そこに、ニューロンの発火しやすさを調整する定数項「バイアス」 を加えます(1.1)。
- … 1.1
続いて活性化関数による判定を行います。計算された総入力 を「活性化関数」に通して、最終的な出力 を決定します。初期の単純パーセプトロンでは、活性化関数としてステップ関数(入力が0以上なら1、負なら0を出力する関数)が用いられました。
これを一般化して、 個の入力がある場合の式は以下のようになります(1.2)。
- … 1.2
すなわち、重みを考慮した入力の総和がある基準を超えた場合に信号を出力(1)し、超えない場合は出力しない(0)という意思決定プロセスを表します。
単純パーセプトロンの限界
[編集]
しかし、単層のパーセプトロンは、データを直線で2つの領域に分ける線形分離可能[† 2]な問題しか解くことができません。つまり、XOR(排他的論理和)のような、直線一本では分けられない問題(線形分離不可能)は解けないという数学的な限界がありました。
この限界が指摘されたことで、AI研究は一時的に停滞しました(第1次AIの冬)。しかし、後に複数の層を重ねる「多層パーセプトロン」と、学習アルゴリズムである誤差逆伝播法が登場したことで、この問題は克服されました。
活性化関数
[編集]パーセプトロンのモデルにおいて、総入力 を受け取り、最終的な出力 を決定する関数 を活性化関数と呼びます。
ニューラルネットワークにおいて、活性化関数は単に信号の強さを調整するだけではありません。その最も重要な役割は、ネットワークに非線形性を与えることにあります。そのため、ほとんどの活性化関数は非線形なものになっています。
活性化関数の重要性
[編集]活性化関数を用いなかったり、単なる線形関数(例:)を用いたりした場合、ニューラルネットワークには重大な欠陥が生じます。
数学的に、2つ以上の線形関数の重ね合わせは、1つの線形関数として表現できます。例えば、入力 を3倍にする層の次に2倍にする層を繋げた場合、 となり、単に「6倍にする層」が1つある状態と等価になります。
つまり、活性化関数として非線形な関数(グラフに描いたときに直線にならない関数)を挟まなければ、層を深く重ねても単層のパーセプトロンと同じ表現能力しか持てません。
ニューラルネットワークが複雑なパターンを学習できるのは、各層の間に非線形な活性化関数を挟むことで、複雑な境界線を表現できるためです。
代表的な活性化関数
[編集]活性化関数にはいくつかの種類があり、時代とともに主流となる関数が変化してきました。
初期のパーセプトロンで採用されていたのはステップ関数です。これは入力が0以上であれば1を、0未満であれば0を出力するという、生物学的ニューロンの「発火するか、しないか」という挙動をシンプルに表現したものです。しかし、0と1の間が不連続で滑らかでないため、微分[† 3]ができません。したがって、誤差逆伝播法には適していません。
その後、シグモイド関数が一般的に使用されるようになりました(2.1)。
… 2.1
入力を0から1の間の滑らかな連続値に変換するため、出力を「確率」として扱いやすいという利点があります。しかし、入力値の絶対値が大きくなるとグラフの傾きがほぼ0になり、学習が進まなくなる勾配消失問題が発生しやすい欠点がありました。
現在、ディープラーニングの中間層・隠れ層で最も標準的に使われているのが、1993年にTangらによって提案された、ReLU関数(ランプ関数)です。これは入力が0以下の場合は0を、0を超えた場合は入力をそのまま出力します。シグモイド関数に比べて計算が単純で高速です。また、正の領域では勾配が常に1であるため、層を深くしても勾配消失が起きにくいというメリットがあります。
出力層の活性化関数
[編集]これまでに紹介したステップ関数やReLU関数などは、主に中間層で使用されます。一方、ニューラルネットワークの最終ステップである「出力層」では、解きたいタスクの種類に応じて適切な活性化関数を選ぶ必要があります。
数値予測などの回帰問題では、恒等関数がよく使われます。他の活性化関数と違い、この関数は得られたモデルの値を加工せず、そのまま出力します。
2値分類ではシグモイド関数がよく使われます。モデルの出力を0%~100%(0.0~1.0)の範囲に収め、「確率」として解釈できるようにします。
多クラス分類ではソフトマックス関数がよく使われます。各クラスの出力に対する数値を、それぞれの値が0から1の範囲に収まり、かつ全ての値の合計が100%(1.0)となるように変換します。
学習の仕組み
[編集]ニューラルネットワークは、重みやバイアスといったパラメータがランダムな値に設定されているため、構築した初期段階では全く役に立ちません。例えば「犬の画像」を入力しても、デタラメな予測を出力してしまいます。
ニューラルネットワークにおける学習とは、入力データに対して正しい出力を返せるように、膨大な数のパラメータ(重みとバイアス)を最適な値に自動調整していくプロセスを指します。
この学習プロセスは、3つの要素の連携によって成り立っています。
現在のモデルの成績(誤差)を定量的に評価する損失関数、誤差を減らすためにパラメータを修正する方向を決定する勾配降下法、多層のネットワークにおいて修正量を効率的に計算するために誤差逆伝播法が用いられます。
もし、全ての重みの初期値を「0」や、「全く同じ値」に設定してしまうと、入力層から同じ値を受け取った次の層が全く同じ結果になってしまい、どれだけ層が多くても、1つの層があるのと変わらない状態になってしまいます。
そのため、ニューラルネットワークの学習では、あらかじめそれぞれのニューロンに数値を設定しておきます。設定する数値は、活性化関数のそれぞれの性質に適した手法(Heの初期値やXavierの初期値など)が考案され、使われています。損失関数
[編集]学習を行うためには、現在のモデルが「どれくらい間違っているか」を定量的に知る必要があります。この間違いの度合いを計算する数式を損失関数と呼びます。
損失関数は、モデルが出力した予測値 と、実際の正解ラベル を比較して計算されます。
代表的なものとして以下の2つがあります。
一つは二乗和誤差で、これは予測と正解の差を二乗して合計したものです。差が大きいほど急激に値(ペナルティ)が大きくなるため、主に回帰問題で使用されます。
もう一つは交差エントロピー誤差です。これは正解ラベルに対する予測確率が低いほど、値が急激に大きくなる指標です。主に分類問題で使用されます。
学習の究極的な目的は、この損失関数の値 、つまり誤差を限りなく 0 に近づけることです。
勾配降下法
[編集]
勾配降下法は、損失関数のグラフを「山」に見立てた最適化手法です。現在のパラメータの状態を探索地点とし、標高が最も低い「谷底(損失 )」を目指します。このとき、手がかりとなるのが「現在の地点における傾斜(勾配)」です。
現在のパラメータ位置で傾斜を算出し、「傾きが下っている方向」へパラメータを更新する操作を繰り返すことで、損失関数の最小値へ接近します。
数式では、あるパラメータ を以下の式で更新します(3.1)。
… 3.1
ここで、式中の は傾き(勾配)を表し、損失 をパラメータ で偏微分[† 4]して求めます。
また、 (イータ)は学習率と呼ばれます。これは、一度にどれほど更新するかを決める重要なハイパーパラメータ[† 5]です。学習率が大きすぎると谷底を通り過ぎて発散してしまい、小さすぎると学習に時間がかかりすぎます。
そこで考案されたのが、確率的勾配降下法です。この方法は、全てのデータの中から一部のデータをランダムに選出し(ミニバッチ)、そのグループごとの誤差からパラメータを更新する方法です。
この方法の利点はいくつかあります。まず、少ないデータで近似的に計算を進めていくことで、計算を標準の勾配降下法よりも速く進めることが出来ることです。また、選ばれるデータがランダムであるため、勾配にノイズが生まれ、局所解からも偶然脱出できる可能性が高まります。誤差逆伝播法
[編集]単純なパーセプトロンであれば勾配の計算は容易ですが、多層化したニューラルネットワークでは計算が非常に複雑になります。ある層のパラメータを変化させると、次の層、さらにその次の層へと影響が連鎖していくためです。
この問題を解決し、ディープラーニングの実用化を可能にしたアルゴリズムが誤差逆伝播法です。
通常のデータ処理(推論)は、入力層から出力層へと信号が伝わります。これを順伝播と呼びます。一方、学習時は以下のように「逆」向きに処理を行います。

まず順伝播を行い、出力層での予測結果と正解との「誤差」を計算します。
次に、その誤差を出力層から入力層に向かって逆方向に伝播させます(誤差の逆流、逆伝播)。このプロセスでは、連鎖律[† 6]という数学的性質を利用して、「この誤差は、このニューロンが強すぎたことによるものだ」という責任(勾配情報)を効率的に計算していきます。
最後に、各層に伝わってきた勾配情報をもとに、勾配降下法を用いてそれぞれの重みとバイアスを修正します(パラメータの更新)。
「順伝播・誤差計算・逆伝播・パラメータ更新」というサイクルを、大量のデータセットに対して繰り返すことで、ニューラルネットワークは学習します。
多層パーセプトロン
[編集]単純パーセプトロンの限界でも述べたように、初期の単純なパーセプトロンには「線形分離可能[† 2]な問題しか解けない」という致命的な限界がありました。これは、データを直線一本で切り分けることしかできないという意味です。そのため、「排他的論理和(XOR)」のような複雑な配置のデータは分類できません。
この壁を突破し、ニューラルネットワークに高い表現能力を与えたのが、層を複数重ねる多層パーセプトロンという構造です。
ネットワークの階層構造
[編集]多層パーセプトロンは、ニューロンの層を積み重ねることで構成され、一般的に以下の3種類の層に分類されます。
最下層にあるのは入力層です。これは外部からのデータ(画像や数値など)を最初に受け取る層です。計算は行わず、受け取った値をそのまま次の層へ渡す役割を担います。
その次に位置するのが隠れ層(中間層)です。入力層と出力層の間にあり、外からは直接見えない(入力データでも出力結果でもない)内部的な計算を行う場所であるため、このように呼ばれます。ニューラルネットワークの真価は、この隠れ層の働きにあります。
そして最後に、ネットワークの最終的な判断結果を出力する出力層へとつながります。
単純パーセプトロンは「入力層」と「出力層」の2層(計算する層としては1層)だけでしたが、多層パーセプトロンではこの間に1つ以上の隠れ層を追加します。
隠れ層の役割
[編集]層を挟むだけで複雑な問題が解けるようになる理由は、隠れ層が「入力データを、分類しやすい別の空間(特徴表現)に変換する」役割を果たしているためです。
隠れ層を増やすことは、問題を解くための「空間変換の回数」や「組み合わせの複雑さ」を増やすことと同義です。
普遍性定理
[編集]多層パーセプトロンの能力を裏付ける数学的理論に、普遍性定理があります。これは、「活性化関数を持つ隠れ層が少なくとも1層あれば、ニューロンの数を十分に増やすことで、どんなに複雑な連続関数であっても任意の精度で近似できる」という定理です[† 7]。
この定理は、ニューラルネットワークが原理的にあらゆる問題(株価の変動から画像の分類まで)への対応能力を秘めていることを示しており、AIへの期待を支える理論的根拠の一つとなっています。
深層への拡張とその課題
[編集]多層パーセプトロンの概念を拡張し、「隠れ層を多数(一般に4層以上)重ねたニューラルネットワーク」を用いた機械学習がディープラーニング(深層学習)です。
なぜ層を深くする必要があるのでしょうか。理論上は、普遍性定理で「隠れ層が1層あればどんな関数も近似できる」ことが証明されているため、それ以上層を増やす必要が無いように思えます。しかし、複雑な問題を1層だけで解こうとすると、非現実的な数のニューロンが必要になることが分かっています。層を深く重ねることで、ニューラルネットワークは「単純な概念を組み合わせて、複雑な概念を表現する」ことが可能になります。これにより、浅く広いネットワークに比べて、はるかに少ないパラメータ数で効率的に複雑なパターンを学習できることが、深層学習の大きな利点です。
しかし、単純な層の増加には課題がありました。具体的には、層が深くなるにつれて誤差逆伝播法で伝えるべき勾配が途中で消滅し、入力層側のパラメータが学習できなくなる勾配消失問題や、パラメータ数の増大によりモデルが学習データを丸暗記してしまう過学習といった現象です。
これらの問題を、新しい活性化関数(ReLUなど)の導入や、学習テクニックの改良によって克服したことで、2000年代以降の技術革新が実現しました。
注釈
[編集]- ^ 入力を入れると、何らかの計算をして出力を返す関数のこと。ここでは、現実世界の画像などの複雑なデータと、その正解の関係性を、数式として近似することを指します。
- ^ 2.0 2.1 グラフ上に描いた2個以上の点を、一本の直線だけで綺麗にグループ分けできる状態のこと。
- ^ ここでの微分とは、ある点における関数の傾きを求める操作のことです。ニューラルネットワークの学習(誤差逆伝播法)では、この傾きを利用してパラメータを修正するため、微分可能であることが重要になります。
- ^ 多変数関数において、特定の変数以外を定数とみなして微分すること。ここでは「パラメータ を少し動かしたときに、損失 がどれくらい変化するか」という意味になります。
- ^ モデルが自律的に学習するのではなく、人間があらかじめ設定しておく必要がある変数のこと。
- ^ 合成関数の微分を行うための公式。ある変数が最終的な結果に与える影響を、連鎖的に掛け合わせることで求められます。
- ^ 理論上は可能であるという存在証明であり、実際にその最適なパラメータを学習によって発見できるかどうかは別の問題です。
出典
[編集]- ^ Herculano-Houzel, Suzana (2012-06-26). “The remarkable, yet not extraordinary, human brain as a scaled-up primate brain and its associated cost”. Proceedings of the National Academy of Sciences 109 (supplement_1): 10661–10668. doi:10.1073/pnas.1201895109.
| << 2. 機械学習の基礎 | 目次 | 4.ディープラーニング >> |