発展:専門家の混合(Mixture-of-Experts)
Transformer の機構のレッスンの続きとして、大きくしても計算を増やしすぎない工夫、専門家の混合(Mixture-of-Experts、MoE)を掘り下げます。すべてを使うのをやめ、入力ごとに一部だけを使うという考え方、たくさんの専門家と、どれを使うか選ぶ振り分け役、上位いくつかだけを選ぶ仕組み、なぜパラメータを増やしても計算があまり増えないのか、そして負荷の偏りという難しさまでを実装のコードは扱わず、なぜ一部だけ使うと得なのかに絞って説明します。
ねらい
このレッスンは、Transformer の機構のレッスンの続きにあたる発展(はってん)の記事です。いまの大きな言語モデルを支える重要な工夫の1つが、専門家の混合(せんもんかのこんごう、Mixture-of-Experts、通称 MoE)です。モデルを大きくしたいが、そのぶん計算も重くなるのは避けたい。この、相反する願いに答えるのが MoE です。ここでは、その考え方を見ます。
この記事は、ある程度の知識のある人に向けた深掘りです。Transformer の機構のレッスンで、各層にフィードフォワード層があること、そしてスケーリング則のレッスンで、規模を大きくすると性能が上がることをつかんでいると、読みやすくなります。実装のコードは扱いません。なぜ、全部ではなく一部だけを使うと得なのか、という考え方に絞ります。
1. 全部ではなく、一部だけを使う
専門家の混合の考え方は、モデルの中に、役割の異なる小さな部品をたくさん用意し、入力ごとに、そのうちの一部だけを使うことです。
Transformer の機構のレッスンで、各層には、単語ごとに表現を作り変えるフィードフォワード層がありました。専門家の混合では、この1つのフィードフォワード層をたくさんの小さなフィードフォワード層に置きかえます。この1つひとつを専門家(せんもんか、expert)と呼びます。専門家は、それぞれ別の重みを持ち、学習を通じて、少しずつ違う役割を受け持つようになります。
大事なのは、入力の単語ごとに、たくさんの専門家の中から、ごく一部だけを選んで使うことです。すべての専門家を毎回動かすのではありません。ある単語には、この専門家とあの専門家。別の単語には、また別の専門家。こうして、モデルの中にたくさんの専門家を持ちながら、1つの単語のために実際に働くのは、そのうちの少数だけ、という状態を作ります。全部を用意しておくが、毎回使うのは一部だけ。これが専門家の混合の骨組みです。
理解の確認
専門家の混合は、Transformer のフィードフォワード層をたくさんの小さな専門家に置きかえます。そして、入力の単語ごとに、その中のごく一部の専門家だけを選んで使います。たくさん用意しながら、毎回実際に働くのは少数だけ、という作りです。
2. どれを使うか選ぶ:振り分け役
たくさんの専門家の中から、どれを使うかは、どうやって決めるのでしょうか。ここで働くのが、振り分け役です。ゲート(gate)やルーター(router)とも呼ばれます。
振り分け役は、入力の単語を見て、その単語には、どの専門家がふさわしいかを判断します。そして、ふさわしいとされた上位のいくつかの専門家だけに、その単語を送ります。たとえば、専門家が全部で8つあっても、そのうち上位2つだけを選ぶ、という具合です。この「上位いくつかだけを選ぶ」という選び方を上位いくつかを選ぶ振り分けと呼びます。選ばれた専門家だけが、その単語を処理し、選ばれなかった専門家は、その単語については働きません。
この振り分け役も、学習で賢くなります。どの単語をどの専門家に送ると、うまく処理できるか。それをモデル全体の学習の中で、少しずつ身につけます。はじめは手当たり次第でも、学習が進むと、似た性質の単語が、似た専門家に集まるように振り分けられていきます。こうして、専門家それぞれが、自然と得意分野を持つようになります。
ポイント
振り分け役(ゲート・ルーター)が、入力の単語ごとに、ふさわしい上位いくつかの専門家だけを選んで送ります。振り分け役も学習で賢くなり、専門家がそれぞれ得意分野を持つようになります。
理解の確認
振り分け役(ゲート・ルーター)は、入力の単語を見て、ふさわしい上位いくつかの専門家だけを選び、その専門家に単語を送ります。振り分け役は学習で賢くなり、似た性質の単語が似た専門家に集まるようになって、専門家それぞれが得意分野を持ちます。
3. なぜ得なのか:パラメータは増やし、計算は抑える
専門家の混合のうまみは、パラメータの数を増やしながら、1回の計算はあまり増やさずにすむことです。ここが、素直に大きくするのとの、決定的な違いです。
専門家をたくさん用意すれば、モデル全体のパラメータの数は、その数だけ増えます。モデルは、たくさんの専門家に、幅広い知識や役割を分けて蓄えられます。つまり、モデルの「引き出し」は増えます。ところが、1つの単語のために実際に働くのは、選ばれた少数の専門家だけです。だから、1つの単語を処理する計算は、専門家をいくら増やしても、あまり変わりません。引き出しは増やすが、1回に開ける引き出しは少数のまま、というわけです。
この性質のおかげで、専門家の混合は、計算をあまり増やさずに、モデルの蓄えられる量を大きくできます。同じ計算の重さなら、全部を使うふつうのモデルより、多くのパラメータを持てる。だから、大きくしたいが計算は抑えたい、という願いに答えられるのです。現行の大きな言語モデルの中には、この専門家の混合を取り入れて、効率よく大規模化したものがあります。ここでは、専門家の混合は、パラメータを増やしつつ1回の計算を抑えられるから得なのだ、と押さえてください。
理解の確認
専門家の混合は、専門家をたくさん用意することでモデル全体のパラメータ(蓄えられる量)を増やします。一方、1つの単語には少数の専門家しか働かないため、1回の計算はあまり増えません。計算を抑えつつ大規模化できる点が、素直に全部を大きくするのとの違いです。
4. 難しさ:負荷の偏りと、その調整
専門家の混合には、うまい面ばかりでなく、固有の難しさもあります。代表が、負荷の偏りです。
放っておくと、振り分け役が、一部の人気の専門家にばかり単語を送り、ほかの専門家がほとんど使われない、という偏りが起きがちです。こうなると、使われない専門家は学ぶ機会がなく、育ちません。せっかくたくさん用意した専門家が、宝の持ち腐れになります。人気の専門家に仕事が集中し、ほかが遊んでいる、という状態です。
そこで、専門家の間で、なるべく偏りなく単語が行き渡るように、うながす工夫を加えます。特定の専門家に集中しすぎたら、それを抑えるような調整を学習に組み込むのです。この調整で、多くの専門家がまんべんなく育つようにします。
もう1つの難しさは、メモリです。1回に使うのは少数でも、たくさんの専門家をいつでも使えるように手元に置いておく必要があります。だから、計算は軽くても、置き場所は多く要ります。専門家の混合は、計算を節約するかわりに、メモリを多く使う、という釣り合いの上に成り立っています。ここでは、専門家の混合には、負荷の偏りを抑える工夫が要り、メモリを多く使う、という難しさもある、と押さえてください。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。