はじめに
皆さんは普段から生成AIを使用しているでしょうか?
私たちが普段からよく利用している生成AIが、どのようなロジックで動いているのかを考えたことはあるでしょうか?
こうしたところまで考えている人はあまり多くないと思います。
今回はそんな生成AIのロジックを見ていきましょう。
生成AIは何をしているのか
生成AIは人間のように文章を頭の中で考えてから書き出しているわけではありません。
入力された文章を数値として処理し、学習済みの値を使って、次に続く可能性が高い単語や文字のまとまりを順番に算出しています。
具体的には、次のような流れです。
質問を受け取る
↓
内部で計算する
↓
次のトークンを予測する
↓
文章として出力する
コンピュータ上で文章を数値化し、次に続くものとして適切な候補を確率的に計算しながらつなげていきます。
こうして、私たちが普段利用しているAIの回答が出力されるのです。
AIにおける「学習」とは何か
AIにおける学習とは予測を行い、正解との誤差を計算し、その誤差が小さくなるように内部の数値を更新することです。
学習時には、あらかじめ用意された大量の学習データが使われます。
AIはこのデータをもとに予測を行い、予測と正解の誤差を確認します。そして、その誤差が小さくなるように内部の数値を修正します。
この処理を大量の学習データで繰り返すことで、より適切な予測ができるようになります。
こうして予測を繰り返し、より適切と思われる結果に近づけることで、違和感の少ない回答ができるようになっているのです。
ニューラルネットワークとは何か
先ほど、AIは予測と正解の誤差が小さくなるように内部の数値を更新すると説明しました。
このような数値計算を行う仕組みの一つが、ニューラルネットワークです。
ニューラルネットワークは、人間の脳にある神経回路を参考に作られた計算構造です。
入力された数値に重みを掛けながら、複数の層で情報を加工します。
入力された数値
↓
重みを使って計算する
↓
次の層へ渡す
↓
さらに計算する
↓
予測結果を出す
学習時に調整された重みを回答時の計算に使用します。
後ほど説明するトランスフォーマーもニューラルネットワークの一種です。
TensorFlow Playgroundなどを使えば、層やニューロンの数を変えながら、学習によって分類の境界が変化する様子を確認できます。
学習済みのAIは質問をどう処理するのか
先ほどまでの過程は「学習をどのように行うか」というものでした。
では、学習したAIはどのように質問を処理しているのでしょうか。
AIは入力された質問を数値化しています。
文章を「私は」「医者として」「働いています」などの細かな単位に分解し、それぞれを数値として処理します。
このように分割された一つひとつの単位を「トークン」と呼びます。
トークンは一つの単語である場合もあれば、単語の一部や記号である場合もあります。
数値へ変換された質問は、学習済みの内部パラメータを使って計算されます。
この内部パラメータの代表的なものが「重み」です。
重みとは入力された数値をどのように変換し、どの程度影響させるかを決める計算用の数値です。
学習時には予測と正解の誤差が小さくなるように、この重みが調整されます。
質問に回答するときはすでに学習された重みを使って計算します。
モデルの重みが更新されるのは追加学習や再学習が行われた場合です。
また、文章内のどの情報をどの程度参照するかを計算する際に使われる仕組みが、次に説明する「アテンション」です。
アテンションは何をしているのか
先ほど少し出てきた「アテンション」について、掘り下げていきましょう。
アテンションとは、文章内のどの情報をどの程度参照するかを計算する仕組みです。
例えば、「渋谷駅に電車で5分かけて行った」という文章では、「行った」を処理する際に、「渋谷駅」「電車」「5分」の情報を異なる強さで参照します。
渋谷駅
→ 行き先に関する情報として参照する
電車
→ 移動手段に関する情報として参照する
5分
→ 移動時間に関する情報として参照する
実際には「行き先」や「移動手段」といった日本語の項目を付けて判断しているわけではなく、数値同士の関係として処理しています。
アテンションと情報を加工する処理を何層も重ねた構造が、トランスフォーマーです。
このトランスフォーマーについて、次の章で説明します。
トランスフォーマーとは何か
トランスフォーマーは、アテンションと情報加工の処理を何層も重ねたニューラルネットワークです。
各層で情報同士の関係を計算・加工し、次の層へ渡します。
アテンションで関連する情報をまとめる
↓
まとめた情報を別のニューラルネットワークで加工する
↓
加工した結果を次の層へ渡す
↓
同じような処理を何層も繰り返す
以上がトランスフォーマーの一連の流れです。
なお、アテンションが計算する参照の強さと最終的に次のトークンを選ぶ確率は別のものです。
アテンション
→ 文章内のどの情報をどれだけ参照するかを計算する
出力処理
→ 次にどのトークンを出す可能性が高いかを計算する
「文章を読む」と「文章を作る」はどう違うのか
AIが文章を処理する場合と文章を作る場合では、それぞれの役割が異なります。
文章を処理するとき、AIは各トークンがほかのトークンとどのように関係しているかを計算します。
例えば「私は駅で財布を落とした」という文章では、「私は」「駅」「財布」と「落とした」の関係を処理します。
文章を生成するときは、入力文とすでに生成した内容をもとに、次のトークンを一つずつ予測します。
この処理を繰り返すことで、文章が作られます。
実際に文章が出力される仕組み
ここまでで数値へ変換された文章が、トランスフォーマー内部で何層にもわたって加工されることを説明しました。
次にその加工結果から、実際の文章がどのように出力されるのかを整理します。
トランスフォーマーによる内部計算
↓
次のトークンごとの候補値を算出
↓
候補を確率に変換
↓
次のトークンを選択
↓
選んだトークンを入力に追加
↓
再び次のトークンを計算
次のトークンを選んで文章へ追加し、追加された文章をもとに再び計算することで、文章が少しずつつながっていきます。
AIが出力する文章はこうした工程を何度も繰り返すことで作られているのです。
RAGとは何か
ここまででAIが質問を処理し、回答を生成するまでのロジックを説明してきました。
しかし、一般的な生成AIは企業独自の社内資料や最新の社内ルールを、あらかじめ知っているわけではありません。
では、社内資料などの外部情報をAIに利用させるには、どうすればよいのでしょうか。
そこで使われる技術の一つがRAGです。
RAGとはAIが回答を作る前に外部資料を検索し、見つけた情報を質問と一緒にAIへ渡す仕組みです。
RAGはAIを再学習させる仕組みではなく、回答時に資料を追加で渡す仕組みです。
例えば社内資料に関する質問を受け取った場合、RAGは質問に関連する資料を検索します。
その検索結果を質問と一緒に生成AIへ渡すことで、AIは社内資料を参考に回答できます。
RAGは社内資料だけでなく、商品情報、マニュアル、規約、最新情報などをAIに参照させる場合にも利用できます。
全体を一つにつなげる
ここまでの内容を一つの流れにまとめると、次のようになります。
ユーザーが質問する
↓
必要に応じてRAGが外部資料を検索する
↓
質問や資料をトークンに分割する
↓
トークンを数値に変換する
↓
学習済みの重みを使って計算する
↓
アテンションで情報同士の関連性を計算する
↓
トランスフォーマー内部で情報を何層にもわたって加工する
↓
次のトークンの候補を計算する
↓
候補から一つを選んで文章に追加する
↓
同じ処理を繰り返して回答を作る
まとめ
いかがでしょうか。
生成AIは学習済みの重みやアテンション、トランスフォーマーなど、複数の仕組みを組み合わせて文章を生成しています。
内部の流れを知ることで、生成AIの得意なことや限界も理解しやすくなるでしょう。
今後も、AIとの良い付き合い方を考えていきましょう。