Velvet Theory AIとデータの話を、やわらかく、筋道立てて。

機械学習の全体地図(5)深層学習とLLM

ニューラルネットワークの仕組みからCNN・RNN・Transformer、学習済みモデルの活用、LLMができるまでの流れ、使う側の選択肢、限界と評価までを整理します。

連載 機械学習の全体地図 第5回/全8回
  1. 第1回全体像と「学び方」
  2. 第2回タスクとモデル
  3. 第3回作って確かめる手順
  4. 第4回評価指標と落とし穴
  5. 第5回深層学習とLLM
  6. 第6回運用と責任あるAI
  7. 第7回Pythonで書く
  8. 第8回通しチュートリアル:解約予測

深層学習とLLM

深層学習は、③モデルのニューラルネットワークを何層にも重ねたものです。画像・音声・文章で主役となり、その延長にLLM(大規模言語モデル)があります。

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

1つのニューロン(脳の神経細胞をまねた計算の最小単位)は、入力の重み付き和に活性化関数をかけて次の層へ渡します。活性化関数がないと、何層重ねても1つの線形モデルと同じになってしまいます。代表はReLU(負なら0、正ならそのまま)です。

学習は2つの計算の繰り返しです。入力から予測を出す順伝播と、損失から各重みの勾配を出力側から逆にたどって求める誤差逆伝播法(Backpropagation)です。求めた勾配を使い、勾配降下法(ミニバッチ+Adamなど)で重みを更新します。

入力中間層(隠れ層)出力順伝播:入力から予測を出す誤差逆伝播:損失から各重みの勾配を計算
順伝播で予測し、損失を出力側から逆にたどって勾配を求め、勾配降下法で重みを更新する。これを繰り返す。

層を深くすると、浅い層が単純な特徴(画像なら線や角)を、深い層がそれを組み合わせた複雑な特徴(目や車輪)を捉えるようになり、人が特徴量を設計しなくて済みます。その代わり、大量のデータと計算資源(並列計算が得意なGPUなど)が必要です。

深層学習でよく使う工夫
  • ドロップアウト:学習中にニューロンの一部をランダムに無効にし、過学習を防ぐ
  • 正規化層(バッチ正規化・レイヤー正規化):層の出力のばらつきを整え、学習を安定させる
  • 残差接続:層を飛び越える近道を作り、非常に深いネットワークでも学習できるようにする
  • 学習率のスケジュール:学習が進むにつれて学習率を下げる
  • データ拡張と早期終了(④手順の過学習対策と同じ)

CNN・RNN・Transformer

CNN Convolutional neural network

小さなフィルタを画像全体にずらしながら当て、位置が変わっても同じ模様を見つけます。画像認識の定番です。

RNN Recurrent neural network

系列を1つずつ順に読み、それまでの内容を「状態」として次へ引き継ぎます。長い系列では前半の情報が薄れやすく、順番に計算するため並列化もしにくいという弱点があります。

Transformer

各単語が、文中の他のすべての単語との関連度を計算し、関連の強い単語の情報を重点的に取り込みます。この仕組みをAttention(自己注意、Self-attention)と呼びます。全単語を同時に処理できるので並列計算に向き、大規模化しやすいのが強みです。そのままでは語順が分からないため、位置を表す情報を組み込んで与えます。

猫が魚を食べた0.350.050.450.050.10(自分)
「食べた」を処理するとき、各単語にどれだけ注目するかの例(線の太さと下の数字=注目の度合い。合計は1)。「誰が」「何を」にあたる「猫」「魚」を強く参照している。数値は説明用の例。
数式で見る:ニューロン・softmax・Attention

1つのニューロン(f は活性化関数)

a = f(w1x1 + … + wnxn + b)
ReLU:f(z) = max(0, z)

softmax:出力の数値を、合計1の確率に変えます。多クラス分類や、LLMの次のトークンの確率に使います。

pi = ezi / Σj ezj

Attention(Transformerの中心)

Attention(Q, K, V) = softmax( QKT / √d ) V

Q(クエリ)は注目する側、K(キー)は注目される側の目印、V(バリュー)は取り込む情報です。QKT で関連度を計算し、softmaxで合計1の重みにして、V を重み付きで足し合わせます。√d(d=ベクトルの次元数)で割るのは、値が大きくなりすぎて学習が不安定になるのを防ぐためです。

学習済みモデルを活用する

転移学習:大規模なデータで学習済みのモデルを出発点にして、自分のデータで追加学習(ファインチューニング)します。少ないデータでも高い精度が出やすくなります。すべての重みを更新すると計算が重いため、少数の追加パラメータだけを学習するLoRAなどの手法もよく使われます。

埋め込み(Embedding):学習済みモデルの中間の出力は、意味を反映した数値ベクトルとして使えます。ベクトル同士の近さ(向きの近さを測るコサイン類似度など)で似た文章や画像を探せるので、類似検索・推薦・下のRAGの土台になります。

LLMができるまで Large language models

文章はまずトークン(単語や文字の断片)に分割されます。LLMは「次に来るトークンの確率」を出すモデルで、確率に従って1トークンずつ選ぶことを繰り返して文章を作ります。

事前学習大量の文章で次のトークンを予測(自己教師あり)指示チューニング指示と望ましい応答の組で学習(教師あり)好みに合わせる調整人の比較評価をもとに調整(RLHF・DPOなど)利用プロンプト・RAG・ファインチューニングで活用
LLMができるまでの流れ。色は①学び方の区分と対応している。

確率からトークンを選ぶときの温度(Temperature)を上げると出力がばらつき、下げると確率の高いものに寄ります。

LLMを使う側の3つの選択肢

方法何をするか向いている場面手間
プロンプト
In-context learning
LLMへの指示文(プロンプト)に、指示や数個の例を書く。モデルは学習し直さない最初に必ず試す。形式や口調の指定、簡単な分類・要約・抽出小
RAG
Retrieval-augmented generation
質問に関係する文書を検索し、入力に添えて答えさせる社内文書や最新情報など、モデルが知らない知識に基づいて答えさせたい中(検索の仕組みが必要)
ファインチューニング
Fine-tuning
自分のデータでモデルを追加学習する特定の形式や専門分野での振る舞いを安定させたい。プロンプトでは届かない精度が要る大(データ準備・学習・評価)

知識を答えさせることが目的なら、一般にファインチューニングよりRAGが基本です。文書を差し替えるだけで知識を更新でき、回答の根拠になった文書も示せるためです。

利用者の質問① 検索質問と意味が近い文書を探す② LLMに渡す質問+見つけた文書を入力にする③ 文書に基づく回答文書データベース事前に埋め込みベクトル化
RAG(検索拡張生成)の流れ。モデルを学習し直さずに、手元の文書の内容を答えに反映できる。

LLMの限界と注意点

ハルシネーション Hallucination

もっともらしいが誤った内容を、自信があるように出力することがあります。根拠となる文書を添える(RAG)、出典を確認する、重要な判断では人が確かめる、といった対策をとります。

知識の期限

学習データを集めた時点より後の出来事は知りません。最新の情報が必要なら、検索やRAGで補います。

計算や厳密な論理

計算や細かい条件の処理を誤ることがあります。計算はコード実行や電卓などの道具に任せる設計にします。

プロンプトインジェクション Prompt injection

入力に紛れ込んだ指示に従ってしまうことがあります。外部の文書やWebページを読ませるシステムでは、読み込んだ内容を指示として扱わないよう設計し、実行できる操作を制限します。

入力した情報の扱い

機密情報や個人情報を入力する前に、利用するサービスの規約と、入力データの保存・学習への利用の有無を確認します。

LLMの評価

正解が1つに決まらないことが多く、評価は難しい課題です。代表的な方法は、公開された問題集で測るベンチマーク、人による比較評価、別のLLMに採点させる方法(LLM-as-a-judge)です。LLMによる採点は手軽ですが、採点するLLM自身に偏りがあるため、人の評価と一致するかを確かめてから使います。自分の用途では、実際に来る質問を集めて評価用データを作るのが最も確実です。

理解度チェック

Spark