Skip to content

Instantly share code, notes, and snippets.

@shuntagami
Created April 9, 2025 12:31
Show Gist options
  • Select an option

  • Save shuntagami/1a07b80ac891caf8e49b1c316498d328 to your computer and use it in GitHub Desktop.

Select an option

Save shuntagami/1a07b80ac891caf8e49b1c316498d328 to your computer and use it in GitHub Desktop.
ニューラルネットワークと最先端AI:原理から応用まで

はじめに

人工知能(AI)は私たちの生活に急速に浸透し、特に2022年以降はChatGPTなどの大規模言語モデルが社会に大きなインパクトを与えています。これらの技術の根幹にあるのがニューラルネットワークと深層学習です。

このテキストでは、ニューラルネットワークの基本的な仕組みから、現代のAIブームを支える最先端技術「Transformer」までを体系的に解説します。数学的な複雑さを最小限に抑えながらも、その本質的な理解を目指します。

この知識を学ぶことの価値は計り知れません。AIが日々進化する現代において、その仕組みを理解することは、単にテクノロジーを使いこなすだけでなく、その可能性と限界を見極める力を身につけることになります。

「ニューラルネットワークって何?」「ChatGPTはどうやって動いているの?」という疑問に答えるべく、まずは単純なニューラルネットワークから始め、徐々に現代の複雑なモデルへと理解を深めていきましょう。

チャプター

ニューラルネットワークの仕組み

人間の脳から着想を得た仕組み

私たちの脳は、見たものを瞬時に認識します。例えば「3」という数字が書かれた画像を見たとき、それがどれほど雑に書かれていても、すぐに「3」と認識できます。これは当たり前のように思えますが、実はとても複雑な処理を脳が行っているのです。

コンピュータにこのような認識能力を持たせるのが、ニューラルネットワークの目的です。

ニューラルネットワークの基本構造

ニューラルネットワークは、以下の要素から構成されています:

  1. ニューロン:0から1の値を持つ単位。活性化が高いほど「点灯している」状態。
  2. :ニューロンの集まり。入力層、隠れ層(中間層)、出力層がある。
  3. 重み:ニューロン間のつながりの強さを表す。
  4. バイアス:ニューロンが活性化するための閾値調整に使われる。

典型的な例として、手書き数字の認識を考えてみましょう。例えば28×28ピクセルの画像から数字を認識する場合:

  • 入力層:784個のニューロン(28×28ピクセル)
  • 隠れ層:この例では2層、それぞれ16個のニューロン
  • 出力層:10個のニューロン(0から9の数字に対応)

入力層の各ニューロンは対応するピクセルの明るさ(0〜1)を持ち、出力層の最も活性化したニューロンがネットワークが認識した数字を表します。

情報の伝播

情報はネットワーク内をこのように流れます:

  1. 入力層のニューロンに画像のピクセル値を設定
  2. 各層のニューロンのアクティベーション(活性度)が次の層へ伝播
  3. 伝播の際、前の層のすべてのアクティベーションの「重み付き和」+「バイアス」を計算
  4. この値をシグモイド関数やReLU関数(活性化関数)に通す
  5. 最終的に出力層に到達し、最も活性化したニューロンが認識結果を示す

数学的表現

この計算は以下のように表現できます:

アクティベーション = シグモイド関数(重み付き和 + バイアス)

より効率的な計算のため、これを行列とベクトルの演算として表現すると:

a^(l) = σ(W^(l)a^(l-1) + b^(l))

ここで:

  • a^(l):l層目のアクティベーション
  • W^(l):重み行列
  • b^(l):バイアスベクトル
  • σ:シグモイド関数

活性化関数の役割

アクティベーションを計算する際に使われる関数には、主に以下のようなものがあります:

  1. シグモイド関数:出力を0~1の範囲に押し込む、S字型の関数
  2. ReLU関数:負の値をゼロに、正の値はそのまま出力する関数

最近のニューラルネットワークでは、訓練の効率性からReLU関数が多く使われています。

単なる関数としてのニューラルネットワーク

ニューラルネットワークは複雑に見えますが、本質的には「入力を受け取り、出力を返す関数」です。ただし、この関数は非常に複雑で、多数のパラメータ(重みとバイアス)を持っています。

この例のネットワークでは、約13,000の調整可能なパラメータがあります。これらの値をうまく設定できれば、手書き数字を高確率で正しく認識できる関数になります。

では、どうやってこれらのパラメータを適切に設定するのでしょうか?それが次章で説明する「学習」のプロセスです。

深層学習の仕組み

ニューラルネットワークの学習とは

前章では、ニューラルネットワークが関数として動作することを見てきました。この章では、そのネットワークが学習する仕組み、すなわち「深層学習」について解説します。

ニューラルネットワークの学習とは、大量のデータを見せることで、そのネットワークの重みとバイアスを調整していくプロセスです。目指すのは、入力に対して正しい出力ができるようにパラメータを最適化することです。

コスト関数の役割

ニューラルネットワークの出力が理想とどれだけ離れているかを測る指標として「コスト関数」を使います。手書き数字認識の例では、以下のようなコスト関数を使います:

コスト = (ネットワークの出力 - 理想の出力)^2 の和

例えば、「3」の画像を入力したとき、出力層の3番目のニューロンが1に近く、他のニューロンは0に近いほど、コストは低くなります。

学習の目標は、このコスト関数を最小化することです。これにより、ネットワークは入力に対して正しい出力を返せるようになります。

勾配降下法

コスト関数を最小化するための主要な手法が「勾配降下法」です。これは、コスト関数の値を下げる方向に少しずつパラメータを調整していく方法です。

イメージとしては、コスト関数を「丘」に例えると、一番低い谷底を探して下っていくように調整していきます。

数学的には:

  1. 現在のパラメータにおけるコスト関数の「勾配」(傾き)を計算
  2. 勾配の方向と逆の方向にパラメータを少し動かす
  3. これを繰り返して、コスト関数の値を下げていく

注意点としては:

  • 勾配の大きさに比例して調整量を変えると、急な勾配では大きく、緩やかな勾配では小さく調整される
  • 完全な最小値ではなく「局所的な最小値」に到達する可能性がある
  • 初期パラメータをランダムに設定することで、異なる経路で学習する

確率的勾配降下法

実際の学習では、全ての学習データについてコスト関数を計算するのは非効率なため、「確率的勾配降下法」を使います。

これは、学習データをランダムに小さなバッチ(束)に分け、バッチごとに勾配を計算して調整する方法です。完全な勾配ではなく近似値を使うため少し不正確ですが、計算速度が大幅に向上します。

この方法は、「酔っ払いが山を下るように、少しふらつきながらも素早く下っていく」と例えられます。

学習の評価

学習の成果を評価するためには、学習に使っていない「テストデータ」での性能を確認します。例えば、先ほどの手書き数字認識では、学習データで調整したネットワークが未知の画像に対しても正しく認識できるかを測定します。

この例のネットワークでは、テストデータに対して約96%の精度で正しく認識できることが示されています。さらに隠れ層の構造を最適化すると、98%程度まで向上することも可能です。

予想外の振る舞い

興味深いことに、学習済みのネットワークの内部表現は、人間が想像したものとは異なることがあります。

例えば、最初は「隠れ層で短い線を検出し、それらを組み合わせて形を認識する」というモデルを想定していたかもしれませんが、実際の学習結果ではそうなっていないことが多いです。

さらに、ランダムな画像に対して、ネットワークは自信を持って誤った判断をすることもあります。これは、ネットワークが「世界には明確に定義された数字しかない」と学習しており、「わからない」という概念を持っていないためです。

このように、ニューラルネットワークは非常に効果的ですが、その内部の振る舞いは必ずしも人間の直感に合わないことがあります。ここに、AI研究の面白さと難しさがあります。

誤差逆伝播法(バックプロパゲーション)

ニューラルネットワーク学習の核心技術

前章では、ニューラルネットワークの学習が勾配降下法によりコスト関数を最小化するプロセスであることを見てきました。しかし、13,000ものパラメータに対して、どのように効率的に勾配を計算するのでしょうか?

その答えが「誤差逆伝播法(バックプロパゲーション)」です。これは複雑な勾配を効率よく計算するためのアルゴリズムであり、深層学習の核心技術と言えます。

直感的理解:価値ある変化を探す

誤差逆伝播法を直感的に理解するために、まず「各パラメータの変化がコスト関数にどう影響するか」を考えてみましょう。

例えば、「2」の画像を認識するケースを考えます。最初のランダムな重みでは、ネットワークの出力はおそらく乱れています。この出力を「2に対応するニューロンは活性化し、他のニューロンは不活性にする」という目標に近づけるために、どのパラメータをどう変えるべきでしょうか?

誤差逆伝播法は、次のように働きます:

  1. まず出力層のエラー(理想との差)を計算
  2. このエラーが前の層にどう影響されるかを計算
  3. この影響を「逆に」各パラメータに伝播させる
  4. 各パラメータが最終的なエラーにどれだけ寄与しているかを計算

これにより、「このパラメータをこれだけ変えると、コスト関数はこれだけ減る」という情報が得られます。

重要なのは相対的な影響度

誤差逆伝播法で求められるのは、単に「パラメータを増やすべきか減らすべきか」だけでなく、「どのパラメータの変化がより大きな影響を持つか」という相対的な重要度です。

例えば、あるパラメータの勾配が3.2で、別のパラメータの勾配が0.1の場合、前者のパラメータを変化させる方が32倍効果的ということになります。

これは生物学の「ヘッブの法則」(一緒に発火するニューロン同士の結合は強くなる)に似ています。「2」を見たときに活性化するニューロンと、「2」について考えるときに活性化するニューロンの結合が強化されるイメージです。

実際の計算過程

誤差逆伝播法のアルゴリズムをステップごとに説明します:

  1. 順伝播:入力から出力まで通常の計算を行う
  2. 出力層のエラー計算:理想との差を求める
  3. 逆伝播:出力層のエラーから前の層へと影響を計算
    • 各ニューロンは「自分のエラーを前の層のどのニューロンのせいにするか」を決める
    • 重みが大きいつながりほど、より多くのエラーを「責任転嫁」する
  4. 勾配計算:各パラメータのエラーへの寄与度を計算
  5. パラメータ更新:勾配の方向と大きさに基づいてパラメータを調整

これを全学習データに対して行うと計算コストが大きすぎるため、確率的勾配降下法では学習データをミニバッチに分け、バッチごとにこの計算を行います。

効率的な学習のための工夫

実際のニューラルネットワーク学習では、いくつかの工夫が使われます:

  1. ミニバッチ学習:データを小さな束に分けて処理
  2. 学習率の調整:勾配に対してどれだけパラメータを変更するかの比率
  3. モメンタム:過去の更新方向を考慮して慣性をつける
  4. 正則化:過学習を防ぐための制約

こうした工夫により、複雑なニューラルネットワークでも効率的に学習することが可能になります。

大量のデータの重要性

誤差逆伝播法が機能するためには、十分な量の学習データが必要です。手書き数字認識の例では、MNISTデータベースという大量の手書き数字画像のセットが使われています。

機械学習において、良質かつ大量のデータを用意することは、アルゴリズムの選択と同等、あるいはそれ以上に重要です。データがなければ、どんなに優れたアルゴリズムも学習できません。

GPTとは何か

GPTの基本概念

GPT(Generative Pre-trained Transformer)は、現代のAIブームの中心となる技術です。その名前は各要素を表しています:

  • Generative(生成的):新しいテキストを生成する能力
  • Pre-trained(事前訓練済み):大量のデータを元に学習済み
  • Transformer:特定の種類のニューラルネットワーク構造

特に最後の「Transformer」が最も重要で、これが現在のAI革命の核心技術です。

Transformerの多様な応用

Transformerを使ったモデルには様々なタイプがあります:

  • 音声認識(音声から文字起こし)
  • 音声合成(テキストから音声を生成)
  • 画像生成(DALL-E、Midjourney等)
  • 機械翻訳(元々の用途)
  • テキスト生成(ChatGPTなど)

これらはすべて同じ基本アーキテクチャの応用です。

テキスト予測の仕組み

GPTのような言語モデルは、与えられたテキストに続く内容を予測するように訓練されています。その予測は「次に来る可能性のあるトークン(単語や文字等)の確率分布」という形で出力されます。

この予測モデルを使えば、テキスト生成は以下のように行えます:

  1. 初期テキストを入力
  2. モデルが次のトークンの確率分布を予測
  3. その分布からランダムにサンプリング
  4. サンプリングしたトークンを入力に追加
  5. 2~4のステップを繰り返す

これを繰り返すことで、初期テキストを元にした長文を生成できます。

ChatGPTはこの技術を応用し、「システムプロンプト」(AIアシスタントの設定)とユーザーの質問を初期テキストとして、それに続く「AIアシスタントの応答」を生成しています。

Transformerのデータ処理の流れ

Transformerの処理の流れは以下のようになっています:

  1. トークン化:入力テキストを小さな単位(トークン)に分割
  2. 埋め込み:各トークンを高次元ベクトル(数値の配列)に変換
  3. アテンションブロック:ベクトル同士が情報をやり取りして更新
  4. 多層パーセプトロン:各ベクトルが独立して変換される
  5. 3と4を繰り返す:複数層で処理を繰り返す
  6. 最終ベクトルから予測:次のトークンの確率分布を計算

この一連の処理により、テキストの文脈を理解し、適切な続きを生成することができます。

埋め込み空間の直感的理解

Transformerの重要な概念である「埋め込み」について、もう少し詳しく見てみましょう。

単語を高次元のベクトルに変換することで、単語間の意味的な関係を数学的に表現できます。この埋め込み空間では、意味的に近い単語は空間内でも近い位置に配置されます。

また、埋め込み空間には興味深い性質があります:

  • 「女性」と「男性」のベクトルの差は、「女王」と「王」のベクトルの差に似ている
  • 「イタリア」から「ドイツ」を引いて「ヒトラー」を足すと、「ムッソリーニ」に近くなる
  • 「猫」の複数形から単数形を引くと、「数」を表す方向が得られる

これらは、モデルが単語の意味的関係を空間内の方向として学習していることを示しています。

GPTのパラメータ規模

GPT-3のようなモデルは非常に多くのパラメータを持っています:

  • GPT-3:約1750億のパラメータ
  • 単語埋め込み:約6.2億(約4%)
  • アテンションメカニズム:約580億(約33%)
  • 多層パーセプトロン:約1160億(約66%)

これらの膨大なパラメータがテキストの理解と生成を可能にしています。

アテンションの仕組み

アテンションメカニズムの概要

アテンションメカニズムは2017年の論文「Attention is All You Need」で導入された、現代のAIブームの鍵となる技術です。これによりTransformerモデルは単語(トークン)間の関連性を学習し、文脈を理解できるようになりました。

アテンションの機能と役割

アテンションの主な役割は、文脈に基づいて単語の意味を調整することです。例えば:

  • "mole"という単語は、「もぐら」「ほくろ」「モル」など文脈によって異なる意味を持ちます
  • "tower"という単語は、"Eiffel"の後にあれば「エッフェル塔」の情報が付加されるべきです
  • 長い文章の途中に出てきた「犯人は」の後に続く名前は、前の文脈全体から情報を得る必要があります

アテンションはこれらの文脈による意味の調整を可能にします。

シングルヘッドアテンションの仕組み

アテンションの基本的な仕組みは以下のようになっています:

  1. クエリ(質問)の計算

    • 各トークンのベクトルに「クエリ行列」を掛けて「クエリベクトル」を生成
    • これは「他のどのトークンから情報を得るべきか」という問いに相当
  2. キー(鍵)の計算

    • 各トークンのベクトルに「キー行列」を掛けて「キーベクトル」を生成
    • これは「どのトークンがどのような情報を持っているか」を表す
  3. 注意(アテンション)スコアの計算

    • クエリとキーの内積を計算して、トークン間の関連度を数値化
    • この関連度はマスキング処理(未来の情報を見ないための処理)後、ソフトマックス関数で0~1の確率分布に変換
  4. 値(バリュー)の計算と更新

    • 各トークンのベクトルに「バリュー行列」を掛けて「バリューベクトル」を生成
    • アテンションスコアで重み付けしたバリューベクトルの和を計算
    • この結果を元のベクトルに加えて更新

これにより、各トークンは他のトークンから文脈に応じた情報を取り込むことができます。

マルチヘッドアテンションの拡張

実際のTransformerでは、「マルチヘッドアテンション」と呼ばれる拡張版が使われています:

  • 複数のアテンションヘッド(GPT-3では96ヘッド)が並行して計算
  • 各ヘッドは異なるクエリ/キー/バリュー行列を使用
  • 各ヘッドは文脈の異なる側面に注目可能
  • すべてのヘッドからの結果を統合して最終的な更新を生成

これにより、モデルはテキストの複雑な関係性を多角的に捉えることができます。

セルフアテンションとクロスアテンション

Transformerのアテンションには主に2種類あります:

  1. セルフアテンション

    • 同じシーケンス(文章など)内でのトークン間の関係を計算
    • GPTなどの言語モデルで主に使われる
  2. クロスアテンション

    • 異なる2つのシーケンス間の関係を計算
    • 翻訳や画像とテキストの関連付けなどで使用

アテンションの計算効率

アテンションメカニズムの成功の背景には、その並列処理の効率性があります:

  • GPUで大規模な行列計算を効率的に実行可能
  • パラメータ数を増やしても学習速度を維持できる
  • これにより、より大きなモデルのトレーニングが実現

ただし、アテンションの計算量はコンテキスト長の二乗に比例するため、より長いテキストを扱うには工夫が必要です。

LLMはどう知識を記憶しているか

大規模言語モデルの知識保存

ChatGPTのような大規模言語モデル(LLM)は膨大な知識を持っています。例えば、「マイケル・ジョーダンがするスポーツは」という文に対して「バスケットボール」と正確に予測できます。

この知識はどこに、どのように保存されているのでしょうか?Google DeepMindの研究によれば、こうした知識は主に「多層パーセプトロン(MLP)」と呼ばれる部分に保存されているようです。

多層パーセプトロンの構造

多層パーセプトロン(MLP)ブロックは、Transformerアーキテクチャのアテンションブロックと並ぶ主要コンポーネントです。計算自体はアテンションよりシンプルですが、その解釈は複雑です。

MLPブロックの計算フローは以下の通りです:

  1. 入力ベクトルが巨大な行列と掛け算(アップ投影)

    • 各行は「ベクトルのどの特徴を調べるか」という質問に相当
    • この計算は内積を複数取ることで、様々な特徴を抽出
  2. 非線形関数(ReLU)の適用

    • 負の値をゼロにし、正の値はそのまま通す
    • これにより、特定条件が満たされた場合のみ値が通過する「門」として機能
  3. 再び行列との掛け算(ダウン投影)

    • この行列の列は「どのような情報を追加するか」を表す
    • 活性化したニューロンに対応する列の情報が出力に加えられる
  4. 元のベクトルに結果を加算

    • 計算結果は元のベクトルに足され、更新されたベクトルが出力される

この一連の処理により、条件に応じた情報の追加が可能になります。例えば「マイケル・ジョーダン」という情報を持つベクトルに「バスケットボール」という情報を追加するといった処理です。

知識の表現方法

多層パーセプトロンは「マイケル・ジョーダンはバスケットボール選手である」のような知識をどのように保存するのでしょうか?

単純化すると、以下のようなメカニズムが考えられます:

  1. 入力ベクトルが「マイケル」と「ジョーダン」の情報を持っている
  2. MLPの最初の行列がこれを検出する(「マイケル」と「ジョーダン」が同時に存在するか確認)
  3. ReLU関数がANDゲートのように機能し、両方の情報がある場合のみ通過
  4. 二番目の行列が「バスケットボール」の情報を表すベクトルを出力に追加

このように、MLPは条件付きの情報追加を行うことで、様々な知識を保存できます。

高次元空間の重要性

大規模言語モデルが膨大な知識を保存できる理由の一つに、高次元空間の特性があります。

例えば100次元の空間では、互いにほぼ直交する(90度に近い角度を持つ)ベクトルを1万個以上配置することが数学的に可能です。この性質は「ジョンソン-リンデンストロースの定理」として知られています。

これにより、空間の次元数を超える数の概念を、「重ね合わせ(スーパーポジション)」として保存することができます:

  • 一つのニューロンが一つの概念だけを表現するわけではない
  • 複数のニューロンの特定のパターンが一つの概念を表現
  • 同じニューロンが異なるパターンの一部として、複数の概念を表現可能

このような高次元空間の性質が、GPT-3のような大規模モデルが1750億のパラメータで、それよりもはるかに多くの知識を保存できる理由の一つです。

パラメータの内訳

GPT-3のMLPブロックのパラメータ数を見てみましょう:

  • 「アップ投影」行列:約6億400万(12,288×49,152)
  • 「ダウン投影」行列:約6億400万(49,152×12,288)
  • これが96層で繰り返されるため、合計約1160億のパラメータ

これはGPT-3の全パラメータ(約1750億)の約66%を占めており、モデルの知識の大部分がここに保存されていることを示唆しています。

解釈の難しさ

このように、MLPは理論的には知識を保存するメカニズムを持っていますが、実際のモデルではその解釈は非常に困難です:

  • 実際のニューロンは綺麗に一つの特徴を表現しているわけではない
  • 重ね合わせによって、知識の表現は空間全体に分散している
  • モデルの大きさが増すと、その解釈の難しさも増加する

この解釈の難しさが、現代の大規模言語モデルの「ブラックボックス問題」の一因となっています。

スパースオートエンコーダによる分析

近年は「スパースオートエンコーダ」という手法を使って、これらの複雑な表現を分析する研究も進んでいます。これにより、モデルが内部で表現している概念をより明確に理解できる可能性があります。

こうした研究の進展により、AIモデルがどのように知識を獲得し、表現し、活用しているかの理解が深まることが期待されています。

まとめ

ニューラルネットワークの進化

このテキストでは、基本的なニューラルネットワークから最新のTransformerアーキテクチャまで、AIの進化を見てきました。ポイントをまとめると:

  1. ニューラルネットワークの基礎

    • ニューロン、層、重み、バイアスという基本構造
    • 前方向への情報伝播による計算
    • 1万以上のパラメータを持つ複雑な関数
  2. 深層学習のプロセス

    • コスト関数の最小化としての学習
    • 勾配降下法による効率的最適化
    • データ量とモデル規模のスケーリング効果
  3. 誤差逆伝播法の仕組み

    • エラーの逆方向伝播による勾配計算
    • 大量パラメータの効率的更新
    • 確率的勾配降下法の実用的工夫
  4. Transformerアーキテクチャの革新

    • アテンションによる文脈理解
    • トークン間の関連性に基づく情報伝達
    • 並列処理による高効率計算
  5. 大規模言語モデルの知識表現

    • 多層パーセプトロンによる知識保存
    • 高次元空間の重ね合わせ特性
    • 解釈困難な複雑さと研究の最前線

AIの可能性と限界

現代のAIシステムは驚異的な能力を示していますが、同時に限界も持っています:

  • 理解できること:パターン認識、大量データからの学習、統計的予測
  • 難しいこと:因果関係の把握、常識的推論、真の意味での理解

AIモデルは本質的に「パターン認識マシン」であり、与えられたデータの統計的パターンから予測を行っています。これは多くのタスクで人間並み、あるいは人間以上のパフォーマンスを示しますが、人間のような「理解」とは異なります。

今後の展望

AI技術は急速に発展を続けています:

  1. モデルの大規模化

    • より多くのパラメータと学習データによる性能向上
    • 計算効率と環境負荷のバランスの模索
  2. アルゴリズムの改良

    • アテンションメカニズムの効率化
    • 長文脈処理の改善
    • 多モーダル(テキスト、画像、音声等)統合
  3. 解釈可能性の向上

    • モデルの意思決定過程の理解
    • バイアスと公平性の問題への対処
    • 安全性と信頼性の確保
  4. 新たな応用領域

    • 科学研究の加速
    • 創造的作業の支援
    • 個人化されたアシスタンス

学びを深めるために

このテキストで興味を持った方は、以下のリソースからさらに学びを深めることができます:

  • オンラインコース:深層学習専門のプラットフォームやMOOCの活用
  • 実践的演習:オープンソースのモデルを使った実験
  • 論文や書籍:分野の第一人者による最新の研究成果
  • コミュニティ参加:オープンソースプロジェクトやディスカッションへの参加

AI技術の理解は、ただその使い方を知るだけでなく、未来の技術社会を形作る重要な素養となるでしょう。この教材がその第一歩となれば幸いです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment