35 AIとは: ディープニューラルネットワーク
機械学習は深層へ
人間の知識は広範で多様であり、本質的に把握が難しい。人間の思考が知識を吸収し処理できるのは、チョムスキーが述べたように「わずかばかりの情報で機能する驚くほど効率的で優雅でさえあるシステムであり、データ点間の単純な相関を推測するのではなく、説明を生み出すことを求める1」からです。
機械学習は、大量のデータからパターンを発見することでこれを実現します。しかしその前に、専門家やプログラマーが問題に関連するデータの特徴を特定してコード化し、それらを「パラメータ」として機械に与えなければなりませんでした2,3。前述の通り、システムの性能はデータとパラメータの質に大きく依存しており、これらは常に明確に特定できるわけではありません。
ディープニューラルネットワークまたはディープラーニングは、機械学習の一分野であり、以下の方法でこの課題を克服するように設計されています:
- トレーニングフェーズ中にデータから自身のパラメータを抽出する;
- パラメータ間の関係を構築する複数の層を使用し、最外層の単純な表現から次第に複雑で抽象的な表現へと移行する。これにより、従来の機械学習アルゴリズムよりも優れた処理が可能となる2。
強力な機械学習アプリケーションの大半は、ますますディープラーニングを採用するようになっています。これには本書で扱った検索エンジン、推薦システム、音声文字変換、翻訳などが含まれます。ディープラーニングが多様なタスクで人工知能の成功を推進してきたと言っても過言ではありません。

「ディープ」とは、層が積み重なってネットワークを形成することです。「ニューラル」は、設計の一部が生物学的脳に着想を得た事実を反映しています。それにもかかわらず、また私たちの思考プロセスへの洞察を提供するにもかかわらず、これらは厳密に数学的なモデルであり、いかなる生物学的な構成要素やプロセスにも似ていません2。
ディープラーニングの基礎
人間が写真を見ると、自動的に物体や顔を識別します。しかしアルゴリズムにとって写真は単なるピクセルの集合体に過ぎません。色や明るさのレベルの混在から顔を認識するまでの過程は、実行するには複雑すぎる飛躍なのです。
ディープラーニングは、プロセスを単純な表現に分解することによってこの課題を達成します – 例えば第一層では、隣接するピクセルの明るさを比較して、画像のさまざまな領域におけるエッジ(境界線)の有無を検出する。第二層ではエッジの集合を基に、エッジ位置の微小な変動を無視しつつ、コーナーや輪郭といったより複雑な実体を探索する2,3。次の層では、輪郭とコーナーを用いて物体の構成要素を特定する。こうして徐々に複雑さが増し、最終層では異なる部分を十分に組み合わせて顔を認識したり、物体を特定したりできるまでになるのです。

各層で考慮すべきことはプログラマーによって指定されるのではなく、トレーニングプロセスでデータから学習されることです3。これらの予測をトレーニングデータセットの実際の出力で検証することで、各層の機能が微調整され、毎回より良い結果が得られるようになります。正しく行われ、十分な良質なデータが提供されれば、ネットワークは写真の無関係な部分(物体の正確な位置、角度、照明など)を無視し、認識を可能にする部分に焦点を絞るように進化するはずです。
ここで注目すべきは、我々がプロセスを把握するためにエッジや輪郭を利用しているにもかかわらず、各層で実際に表現されているのは数値の集合体であり、それが我々が理解する対象に対応しているかどうかは不明だということです。変わらないのは、抽象性と複雑さが増していくという点です。
ネットワークの設計
プログラマーがタスクにディープラーニングを使用することを決め、データを準備すると、ニューラルネットワークのアーキテクチャと呼ばれるものを設計する必要があります。層の数(ネットワークの深さ)と各層のパラメータの数(ネットワークの幅)を選択しなければなりません。次に、層間の接続方法を決定する必要があります。つまり、各層の各ユニットが前の層のすべてのユニットと接続されるかどうかを決定します。
特定のタスクに対する理想的なアーキテクチャは、多くの場合、実験によって見出されます。層数が増えるほど、層ごとに必要なパラメータは少なくなり、汎用データでネットワークの性能が向上しますが、その代償として最適化が困難になります。接続数を減らせばパラメータも計算量も削減できますが、ネットワークの柔軟性が低下します2。
ネットワークのトレーニング
監視学習を行うフィードフォワードニューラルネットワークの例を取り上げてみましょう。ここでは、情報が層からより深い層へと順に流れ、フィードバックループは存在しません。あらゆる機械学習技術と同様に、ここでの目標は入力と出力の関連性、すなわち観測結果をもたらすパラメータの組み合わせとその仕組みを解明することです。入力xと出力yを結びつける関数fを仮定します。次に、予測出力と実際の出力の整合性が最も高まるパラメータθの集合をネットワークを用いて求めます。
問:予測されたyはf (x, θ)で、どのθか?
ここでは、予測対象のyが最終的な出力であり、データセットxが入力となります。顔認識では、xは通常画像内のピクセルの集合です。yはその人物の名前となります。ネットワークでは、各層は組み立てラインの作業員のような役割を果たします。各作業員は与えられた処理を行い、結果を次の作業員へ渡します。最初の層が入力を受け取り、少し変換して次の層へ渡します。次の層も同じ処理を行い、さらに次の層へ渡します。このプロセスが繰り返され、入力が最終的な出力へと変換されていきます。
数学的には、関数fは多くの関数f1, f2, f3…に分割され、f= ….f3(f2(f1(x)))となります。入力に隣接する層はf1を用いて入力パラメータを変換し、次の層はf2を用いて変換する、という具合に続きます。プログラマーは問題の知識に基づいて、適切な関数群の選択を支援するために介入することがあります。

各層の役割は、受け取った各パラメータに割り当てる重要度(重み)を決定することです。これらの重みは、その層における予測出力と入力の関係を最終的に定義する調整ノブのようなものです3。典型的なディープラーニングシステムでは、こうした調整ノブが数億個存在し、数億件のトレーニング例があります。入力層と出力層の間の層では、出力や重みを定義することも確認することもできないため、これらは隠れ層と呼ばれます。
前述の物体認識の例では、最初の作業員の仕事はエッジを検出して、それを輪郭を検出する次の作業員に渡すという具合です。
トレーニング中、予測出力が実際の出力と比較されます。両者に大きな差がある場合、各層に割り当てられた重みは大きく変更される必要があります。差が小さい場合は、重みをわずかに変更するだけです。この作業は二段階で実施されます。まず予測値と出力値の差を計算します。次に別のアルゴリズムが、出力層から逆方向に(この場合、情報は深層から逆方向に流れます)各層の重み変更方法を算出します。こうしてトレーニングプロセス終了時には、ネットワークは重みと関数を備えテストデータに対処できる準備が整います。残りのプロセスは従来型機械学習と同様です。

1 Chomsky, N., Roberts, I., Watumull, J., Noam Chomsky: The False Promise of ChatGPT, The New York Times, 2023.
2 Goodfellow, I.J., Bengio, Y., Courville, A., Deep Learning, MIT Press, 2016.
3 LeCun, Y., Bengio, Y., Hinton, G., Deep learning, Nature 521, 436–444 (2015).