Dev Study
← セキュリティとAIの仕組み
レッスン 8 / 13·約 9 分·第4期 セキュリティとAIの仕組み

AIはなぜ次の語を選べるのか — 確率分布から1つを取り出す

リクエストがアプリケーションに届くまで
  1. ブラウザURL入力
  2. DNS名前→IP
  3. ルータ経路選択
  4. ロードバランサ振り分け
  5. Nginx受け口
  6. アプリ処理今ここ
  7. DB保存

第3期までは、仕様書に書かれたとおりに動く仕組みを見てきました。ここから扱うのは、確率で次を決める仕組みです。動き方の種類がここで変わります。

まず結論

言語モデルの出力は「次の語」そのものではなく、候補全体に広がった確率分布です。実際の1語は、その分布から選ぶ工程で決まります。

だから同じモデルでも、選び方(デコード戦略)を変えると出力の質が変わります。Holtzman らは「デコード戦略だけで機械生成文の質が劇的に変わりうる」と述べています。

? 読む前に予測

言語モデルに同じ文章の続きを書かせたとき、モデルの中身(パラメータ)を一切変えずに出力の質を変えることはできるでしょうか。

当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。

抽象原理

出てくるのは1語ではなく、分布

第3期までに見てきた仕組みは、どれも規格や設定が答えを決めていました。ルーティング表は最長一致で1行を選び、WAFは閾値と比べて遮断を決めます。入力が同じなら出力も同じです。

言語モデルはここが違います。1ステップで出てくるのは「次の語」そのものではなく、候補全体に広がった確率の割り当てです。「この続きは『日』が15%、『年』が9%、『月』が7%……」という形で、語彙のすべてに数値が配られます。

ここが肝心です。分布を作る工程と、そこから1語を取り出す工程は別々です。モデルの中身が同じでも、取り出し方を変えれば出てくる文は変わります。

具体実物

重み付き和 — 原論文の1文だけで説明する

分布をどう作っているかの中核が self-attention です。Vaswani ら8名の2017年の論文「Attention Is All You Need」(arXiv:1706.03762)§3.2 が、数式を使わずに言い換えています。

"The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key."

日本語にすると、出力は values の重み付き和であり、各 value に与えられる重みは、query と対応する key の相性を測る関数で計算される。行列の式を持ち出さなくても、計算していることはこの1文で言えます。

Table 1 — 1層あたりの計算量(キャプションが n と d を定義している)表
Layer Type Complexity per Layer
Self-Attention O(n^2 · d)
Recurrent O(n · d^2)
 
n = the sequence length(系列長)
d = the representation dimension(表現の次元)

系列長 n の2乗で効きます。長い入力ほど1層の計算量が急に増えるという性質は、ここから言えます。

✓ ここまでの確認

self-attention が計算しているものを、原論文の言葉に最も近く言い換えているのはどれですか。

抽象原理

ここが本題 — 選び方を変えると質が変わる

分布ができたとして、そこからどう1語を取り出すか。素朴には「いちばん確率が高い語を選べばよい」と思えます。

そうはなりません。 Holtzman ら(arXiv:1904.09751)は、これを直感に反する観察として報告しています。

"The counter-intuitive empirical observation is that even though the use of likelihood as training objective leads to high quality models for a broad range of language understanding tasks, using likelihood as a decoding objective leads to text that is bland and strangely repetitive."

訓練の目標として尤度を使うと質の高いモデルができるのに、復号の目標として尤度を使うと、単調で奇妙に反復的な文になる。この2つは別の話だということです。

同論文が提案する nucleus sampling(top-p)は、分布の扱い方を変えます。

"By sampling text from the dynamic nucleus of the probability distribution, which allows for diversity while effectively truncating the less reliable tail of the distribution"

信頼の低い裾を切り捨て、動的に定まる上位の塊からサンプリングする。 切り捨てるのは裾であって、選ぶのは上位の塊からです。

そして要旨の中の一文が、このレッスンの主題そのものです。

"we find that decoding strategies alone can dramatically effect the quality of machine text, even when generated from exactly the same neural language model."

(注: 原文の "effect" は原文ママです。)まったく同じモデルからの生成でも、デコード戦略だけで質が劇的に変わりうる。 モデルの良し悪しと、選び方の良し悪しは、別々に効きます。

✓ ここまでの確認

「確率が最も高い語を毎回選べば、いちばん良い文章になる」という考えを、Holtzman らの報告はどう扱っていますか。

⇄ 2つを見比べる
具体例 A

言語モデルの次の語(今週)

直前までの並びから、次に来る語の確率分布を作ります。分布から1語を取り出す工程は別にあり、取り出し方を変えると出力が変わります。選ばれた語は破棄されず、そのまま文章として残ります。

分布を作ってから、1語を取り出す表
工程1 直前までの並びから確率分布を作る
工程2 分布から1語を取り出す(デコード戦略)
外れた場合 出力はそのまま残る
具体例 B

CPUの分岐予測(第6週)

第6週で見たとおり、CPUは条件が確定する前に行き先を予測して先へ進みます。外れた場合は、先走って進めた分をすべて破棄して詰め直します。15〜20サイクルを失いますが、計算結果は正しいままです。

予測して進み、外れたら捨てる表
工程1 過去の履歴から行き先を予測する
工程2 確定を待たずに先へ進む
外れた場合 進めた分を破棄(15〜20サイクルの損失)

この2つは「過去から次を当てる」という点で似ています。共通する構造は何で、外したときの帰結はなぜこれほど違うのでしょうか。

「予測した結果が、どこに書き込まれるか」を両方について考えてください。

この章のまとめ

  • 1ステップの出力は1語ではなく、候補全体に広がった確率分布。
  • 分布を作る工程と、1語を取り出す工程は別。後者がデコード戦略。
  • Holtzman ら: 尤度を復号の目標にすると単調で反復的な文になる。「確率が高い=良い文」ではない。
  • top-p は裾を切り捨て、上位の塊からサンプリングする(arXiv:1904.09751)。
  • 同じモデルでもデコード戦略だけで質が劇的に変わりうる。
  • self-attention は values の重み付き和で、重みは query と key の相性で決まる(arXiv:1706.03762 §3.2)。1層の計算量は O(n² · d)。
  • この論文で言えるのは次トークン確率の出力(§3.4)と自己回帰(§3)まで。分布からのサンプリングは書かれていない(復号は beam search)。
  • 第6週の分岐予測と似ているのは「履歴から次を当てる発想だけ」。機構は同じではない。

自分の現場で確かめる

読んだだけでは身につきません。手元の環境で実際に見てみてください。

理解度チェック

読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。

問題 1 / 4正解: 0

「Transformer の原論文(arXiv:1706.03762)に、次トークンの確率分布からサンプリングするという説明が書かれている」——この記述の評価はどれですか。

用語集(5語)
確率分布としての出力
言語モデルが1ステップで出すのは、1つの語ではなく候補全体に広がった確率の割り当て。実際の1語はそこから選ぶ工程で決まる。
デコード戦略
確率分布から実際の1語を取り出す方法。Holtzman らは、まったく同じモデルからの生成でもデコード戦略だけで質が劇的に変わりうると報告している。
nucleus sampling (top-p)
Holtzman ら(arXiv:1904.09751)が提案した方法。分布の信頼の低い裾を切り捨て、動的に定まる上位の塊からサンプリングする。
self-attention
出力を values の重み付き和として計算し、各 value への重みを query と対応する key の相性を測る関数で決める仕組み。Vaswani ら 2017 §3.2。
O(n² · d)
self-attention の1層あたりの計算量(Table 1)。n は系列長、d は表現の次元。系列長の2乗で効く。