大規模言語モデルのUnder-trainedトークン自動検出技術
(arxiv.org)- LLMはトークナイザー生成とモデル学習が分離されているため、
_SolidGoldMagikarpのような特定のトークンが予想外の動作を引き起こすことがある - 問題の核心は、トークナイザーの語彙には存在するものの、学習中にほとんど、またはまったく出現しなかった under-trained tokens であり、一般に「glitch tokens」と呼ばれる
- この研究は、トークナイザー分析、モデル埋め込み重みの指標、プロンプティング手法を組み合わせ、こうしたトークンを自動的に見つける方法を提案している
- こうしたトークンは、固定サイズのトークナイザーの語彙容量を浪費し、入力・出力長や推論コスト、幻覚や壊れた出力に影響を与える可能性がある
- 外部データを検索・処理するツール利用やエージェント環境では、under-trainedトークンの検出と精製が、デプロイ済みモデルの安全性と堅牢性に直接つながる
トークナイザーとモデル学習の不一致
- ほとんどのLLM構成要素は大規模データから教師なしで学習されるが、トークナイザーは通常、別のアルゴリズムとより小さなデータセットで個別に学習される
- GPT-2は現在のTransformerベースの言語モデリングの多くの基盤を作り、byte-pair encoding(BPE)に基づくトークン化フレームワークも広く採用された
- BPEトークン化は入力テキストをサブワードトークン列に変換し、固定されたマージ規則に従って隣接する2つのトークンを反復的にマージする
- マージ規則は、LLMの学習データと代表性が合っているべき、より小さなデータセット上で貪欲学習アルゴリズムにより学習される
Glitch tokenが生じる仕組み
- トークナイザーとモデル学習が分離されると、一部のトークンがモデル学習中にほとんど、またはまったく登場しない状態が生じることがある
- こうしたトークンが入力に含まれると、幻覚や壊れた出力といった予期しない動作を引き起こす可能性がある
- この研究では、こうしたトークンを under-trained tokens または untrained tokens と区別している
untrainedは、特定のトークンがモデル学習データに登場しなかった明確な兆候がある場合にのみ使用する- 一般には「glitch tokens」という名前でも呼ばれる
- 代表例として
_SolidGoldMagikarpトークンが挙げられている
既存のトークン化方式の限界と代替案
- 最近の研究では、トークン化をなくして生のバイト入力へ移行する方式も扱われているが、この選択は通常、推論速度のコストが大きい
- 速度コストは、初期・最終層の特殊なアーキテクチャや、中間層での可変計算によって補える可能性がある
- こうした方式はまだ広く採用されておらず、現代のモデルの大半は依然としてサブワードトークン化に依存している
- BPEの主な代替は Unigram 方式だが、BPEより優れているとする研究があるにもかかわらず、一般にはあまり使われていない
Under-trainedトークンの実質的な問題
- under-trainedトークンは、固定サイズのトークナイザーにおいて、より頻繁に出現するトークンが使えるはずの語彙容量を占有する
- これは平均入力・出力長と推論コストを減らす機会を逃すことにつながり得る
- こうしたトークンが入力データに意図的または偶然に含まれると、望ましくないモデル出力を生み、下流アプリケーションを壊す可能性がある
- LLMのツール利用やエージェントが外部データを検索・処理する場面が増えるにつれ、予期しない入力や悪意ある入力に対する堅牢性がより重要になる
- モデルが学習分布の外へ押し出されると、こうしたトークンがガードレール回避に悪用される可能性もある
自動検出アプローチと公開ツール
- これまでもモデルとトークナイザーの分析によってこうしたトークンを見つけようとする取り組みはあったが、さまざまなモデルで一貫して機能する信頼できる自動化手法は不足していた
- この研究では、問題のあるトークンを特定するために3つの方法を組み合わせている
- トークナイザー分析
- モデル埋め込み重みに基づく指標
- プロンプティング手法
- これらの方法は、人気があり最近公開された複数の公開重みモデルに適用され、非公開モデルへ拡張する方法も簡単に検討している
- Hugging Faceモデルと互換性のある汎用分析ツールと、モデル別の詳細結果も公開されている
1件のコメント
Hacker Newsのコメント
1年前のComputerphileのグリッチトークン動画は良かった: https://www.youtube.com/watch?v=WO2X3oZEJOA
学習不足のトークンだけを探すのではなく、トークンは事実上ニューラルネットワークの最初の層なのだから、他のすべての層のあらゆる重みについても学習データの不均衡を探すべきだ
そうした重みが見つかれば、データがほとんど流れない重みは削除したほうがよいかもしれず、そうすればモデルを小さくできたり、汎化に役立ったりする可能性がある
最近の論文でSparseGPTを引用しつつ、疎性を70〜80%程度まで達成したものも見たが、かなり印象的だった
カナダ企業のモデルにホッケー関連の学習不足トークンが入っていたというのは信じがたい。ドイツ語だったとしてもだ
冗談はさておき、かなり面白い内容で、トークン化がモデルに与える影響についての理解がさらに深まることを期待している。特に、初期のオープンソースモデルのかなりの数がキャリッジリターンで問題を抱えているという発見が目を引く。データソースによってはキャリッジリターンはそれほど珍しくなく入りうるからだ
重み相関行列のスペクトル密度を使う、ランダム行列理論ベースの学習診断法がある
各層のスペクトル密度を切断べき乗則に当てはめ、べき乗則指数アルファが2を少し上回っていれば、適切に学習されていると判断する
https://jmlr.org/beta/papers/v22/20-410.html
解決策は単に、トークナイザをLLMと同じコーパスで学習させることではないのか? トークナイザの再利用がなぜこんなに一般的なのか、よく分からない。知っている人はいる?
BPE方式では、あるトークンが別のトークンとマージされることで非常にまれなトークンが生まれることがある。トークンXとYがあり、ほぼすべてのXの後ろにYが来るとすると、BPEの過程で新しいトークンXYが作られるが、既存のトークンXは削除されないため、Xが学習不足になる
これを解決するには、貪欲マージよりもっと洗練されたマージアルゴリズムが必要そうだ
第一に、最初から始めるのではなく、モデルの事前学習を引き継ぎたい場合だ。ただし、新しいトークナイザで学習してもモデル重みをかなり簡単に再利用できることを知らない人もいるかもしれない。その方法を扱った記事を書いた: https://umarbutler.com/how-to-reuse-model-weights-when-train...
第二に、エンドユーザーにとっての利便性だ。非常に大きなコーパスをトークン化してチャンクに分けるには時間がかかることがあり、GPT2トークナイザで一度処理したあと同じデータで複数のモデルを学習できれば、全部を再トークン化しなくて済むので都合がよい
そうでなければ、コーパスの統計サンプルからトークンヒストグラムを計算すればよいのではないかと思う
counting subredditで努力したSolidGoldMagikarpに悪意はないが、そうした部分はその後の学習から除外される。ところがその時点ではトークナイザがすでにAPIの一部になっているため、新しいバージョンに置き換えると他のものが壊れ、結局不要なトークンが語彙に残ってしまう
論文タイトルが本当に素晴らしい