🕌

テセウスのTransformer

に公開

はじめに

サイバーエージェント AI Lab NLP チームの高瀬です。自然言語処理や機械学習分野で研究をしていまして、最近はTransformerの性質に関する研究が多いです。

さて、大規模言語モデル(LLM)が日常に浸透してきたこともあり、多くのLLMで採用されている、Transformerと呼ばれるモデルも広く知られるようになっているかと思います。しかし、現在のLLMで採用されているTransformerは2017年に提案されたオリジナルの構造とは別物であることはあまり知られていないようです[1]。本記事ではTransformerの構造や構成する要素と、それが学習の挙動や性能にどのような影響があるかについて概説します。

Transformerの構造

上の図は、Vaswani et al., 17で提案された、オリジナルのTransformerの構造と、LlamaシリーズやQwenシリーズなど多くのLLMで使われている構造を示しています。赤枠で囲まれた部分が1層分に該当し、層の数だけ演算が繰り返されます。この2つを見比べて「全然違う!」と思ってもらえれば、この記事の目的は概ね達成されました。

図にあるように、まず大きな違いとしてResidual接続の位置(枝の分岐と足し込む位置)とNormalizationの位置が異なります。(Layer) Normalizationの位置の違いに着目し、左がPost-Layer Normalization (Post-LN)、右がPre-Layer Normalization (Pre-LN)と呼ばれています。

その他にも、Feed-Forward Network (FFN)の活性化関数が左ではReLUなのに対し、右ではSwiGLUと、各モジュールも差異があります。それぞれの変更や研究が主に何を目的としているかというと、

  • 構造(Post-LN / Pre-LN):大規模化した際の学習の可否
  • Normalization:高速化
  • FFN(内の活性化関数):予測性能
  • Self-Attention:(特に扱う系列が長い際の)高速化
    • ただし、多くの研究があるにも関わらず、オリジナルの演算から最も変化が少ないモジュールという認識
  • 位置情報:予測性能・予測の頑健性

という感じです。
ここからは各モジュールの研究を紹介します。

構造(Post-LN / Pre-LN)

Self-AttentionやFFNでの演算を行い、その入力とを足し合わせた後にNormalizationを適用する、オリジナルのTransformerの構造をPost-LNと呼び、まずNormalizationを適用し、その後Self-AttentionやFFNを適用した後にNormalizationへの入力と足し合わせる、近年多用されている構造をPre-LNと呼びます[2]
2023年の自分の論文も含め、Post-LNでは層の数に従って指数的に勾配が減少する、いわゆる勾配消失の問題が存在すると報告されており、層が多くなると学習できなくなります[3]。下に自分の論文から、機械翻訳のタスクにおけるPost-LNおよびPre-LNの、学習データと開発データに対する損失値のプロットを引用します。

損失値なので値が小さいほど良いのですが、左の図を見て分かるように、Post-LNでは学習データに対する損失値が高止まりしてしまっており、右の図の、開発データに対する損失値も途中から跳ね上がってしまっています。つまりPost-LNでは学習がまったく上手くいっていません。Post-LNではLayer Normalizationによって勾配のノルムが大きく減少する可能性が高いため[4]勾配消失が発生します。この辺りはXiong et al., 20で詳しく議論されているので興味のある方はそちらもご覧ください[5]

Post-LNにおける勾配消失問題を解決するためにいい感じの初期化を考える研究別の構造を考える研究などがありますが、Pre-LNの利用が単純かつ強力なためか、少なくともLLMの構築において、広く活用されるには至っていない状況です。

Normalization

TransformerではLayer Normalizationが長く使われてきました。Layer Normalizationは入力ベクトルの平均を0、分散を1に変換します。これに対してZhang et al., 19では平均を0にする作用は要らないのでは、という仮説のもと、平均の計算を除去したRMSNormを提案しました。これにより、Layer Normalizationを使用した際の性能を維持したまま高速化を実現しています[6]。Transformerへの組み込みについてはLlamaで使用されてから急速に市民権を得た印象です。

FFN内の活性化関数

オリジナルのTransformerでは負の値を0にする、ReLUという活性化関数が用いられていました。これに対し、2018年に発表された最初のGPTではGeLUが使われており、以降の有名なモデル、例えばBERTでもGeLUが採用されています[7]。近年ではPaLM、次いでLlamaがSwiGLUを採用しており、現在のLLMではSwiGLUが主流な印象です。
自分の手元で行った比較でもSwiGLUは予測性能が如実に良かったと記憶していますし、Transformerの様々なモジュールについて経験的な調査を行った論文でも性能が良いと報告されています。

Self-Attention

Self-Attentionの計算は、入力された系列の長さの2乗の計算量となり、入力が長くなればなるほど重たくなります。このため、計算対象を限定して計算量を削減しようという研究が行われてきました[8]。多くの手法が提案されてきましたが、現在公開されているLLMではあまり採用されていません。自分の知る限りでは、Gemma 2Gemma 3の一部の層において、Self-Attentionの計算対象を入力単語の周辺に限る手法が採用されているのみです。

これとは別に、Self-Attentionにおける演算を減らす手法としてGrouped-Query Attentionという手法があります。直感的な説明としては、Self-Attentionの計算において、一部をサボって別の計算結果を使い回すという手法です。これにより、パラメータ数と計算量の両方が節約可能となります[9]。LLMにおいてはLlama 2から導入され始めました。

位置情報

まず、大きな差異として、入力に足し合わせての使用から、Self-Attention内に組み込むように変わっています。また、オリジナルのTransformerでは絶対位置、つまり、文内の最初の単語、2番目の単語、というような情報を利用していたのに対し、現在では相対位置、つまり、文内の各単語からどの程度離れた位置にあるかも表現したRoPEという手法が採用されています[10]
学習データ中にはほとんど出現しないような長い文書を扱う際に、絶対位置よりも相対位置の情報を利用すると性能が良いことは報告されていました。Attentionで相対位置情報を扱う研究は2018年には登場していたのですが、絶対位置ではない手法(というかRoPE)が使用されるようになったのは、PaLMの論文において「絶対位置、相対位置のそれぞれを使うよりも、RoPEの方が長い系列において性能が良かった」と報告され、さらに、Llamaが採用した影響が大きそうです[11]

テセウスのTransformer

木造の船について、傷んだ部位を新しい木材で修復していった際に、修復を繰り返して船のすべての部位が建造された当時とは異なる木材で構築される状態となったとき、その船は建造当時と同じ船と呼べるのだろうか?というのがテセウスの船という問いかけです。

Transformerに関しても、様々なモジュールが提案されて改修を重ねた結果、オリジナルの構造とは異なる状態になっているのですが、変わらずTransformerと呼ばれており、どこまで変化したらTransformerとは呼ばれなくなるのだろうという疑問が浮かびます。各モジュールを提案している論文ではxxformerというように、独自の名前をつけることもあるのですが[12]様々な論文の提案を組み合わせたモデルは、やはりTransformerと呼ばれます。

Transformerが提案された論文においては、Attention Is All You Needとタイトルにも入っているように、(Self-)Attention機構が強調されていました。ですので、(Self-)Attention部分が何か他の、まったく異なる演算に置き換われば、Transformerとは呼ばれなくなるのかもしれません[13]

おわりに

本記事ではTransformerについて、オリジナルの構造と多くのLLMで使わている構造が異なる点や、各モジュールの発展について概説しました。Transformerについては既に多くの研究がありますが、まだまだ分かっていないことも多く、いまだに研究しがいのあるモデルに思います。共同研究のお誘いや議論したい点がありましたら、お気軽にコメントいただけますと幸いです。

脚注
  1. Yao et al., 25ではLLMで使われているTransformerとして議論をしていますが、Appendixを読む限りではLLMで採用されている構造ではなく、オリジナルの構造になっています。 ↩︎

  2. 実装ではpost_attention_layernormのように書かれていることもありややこしさに拍車がかかっています。また、Gemma 2Gemma 3ではPre-LNとPost-LNを併用しているかのように書かれていますが、実装を見るとPost-LNと呼んでいる演算はResidual接続の前に行っており、オリジナルの構造を指すPost-LNとは別物です↩︎

  3. 経験的には20から30層程度が学習可能な限界という感じです。BERTはPost-LNで、Largeモデルは24層となっています。なお、Post-LN構造に適した初期化を行うと学習の安定性は上がることが報告されています↩︎

  4. 2025年の自分の論文で議論していますが、この性質はLayer NormalizationではなくてRMSNormを使っても同様です。 ↩︎

  5. この論文、Transformerの構造の議論をする際には必読かと思っており、また、2025年12月現在で1500件以上引用されている論文なのですが、ICLRに落ちていたようです ↩︎

  6. ただし、実際に高速かどうかは実装に依存する面も大きく、理論上は高速でも実装次第では低速な手法に劣ることもあります。Attentionの効率化の文脈ですが、Roy et al., 21では、理論上は高速な提案手法が実測値では遅いことについて、実験に使用したTPUでは適した演算がないためと述べています。 ↩︎

  7. 自分の印象としてはTransformerモデルの研究ではReLUが引き続き使われることが多かったのですが、これは自分がfairseqというOSSをよく使っていて、このデフォルトがReLUなのでそういう印象が強いのかもしれません。 ↩︎

  8. 様々な手法が発表されていますが、それらの統一的な記述法を示したこの論文はとても優れた論文だと思っています。今確認したら引用数が少なくて悲しい……。以前論文読み会で紹介したので興味のある方はこちらもご覧いただければ。 ↩︎

  9. もう少しきちんと(?)説明すると、KeyとValueについて、複数のHeadで使い回す手法です。パラメータの観点からは、KeyとValue計算のためのパラメータを複数のHeadで共有しているとみなせます。Transformerは一部のパラメータを共有しても性能に問題ないことが報告されており、Grouped-Query Attentionも性能を維持したまま高速化できると報告されています。 ↩︎

  10. RoPEはSelf-Attentionに組み込むことまでを含めての手法なので、Self-Attentionから切り離されている本記事の図は厳密には誤りな気もしていますが、分かりやすさを優先しました。 ↩︎

  11. BLOOMというLLMがALiBiという相対位置を扱う手法を採用していたのですが、直後にLlamaが発表され、RoPEが急速に有名になった印象です。 ↩︎

  12. RoPEを提案した論文ではRoPEを組み込んだTransformerをRoFormerと呼んでいます。他にもReformerLinformerなどなど。 ↩︎

  13. この論文のようにN-gramでもある程度は成功しますが、一部の層はAttentionを代替できるものの、全ての層においてAttentionの完全な代替となれるかは難しいという印象です。また、一時期Transformerの代替と騒がれたMambaについてもSelf-Attentionと組み合わせて利用されています。 ↩︎

Discussion