LLMのサーベイ分野の整理
自分の興味範囲の変化に伴って更新されるかもしれないです。
全体図
LLMの研究領域は大きく2つの方向性に分類できると思います。つまり、生成クオリティの改善とモデルの軽量化です。軽量化は速度の改善と重みのバイト数の削減に分解できますが、これらの領域は被っている部分も多いので今回は1つにまとめました。最近はソフトウェアとLLMの組み込み的な分野も出てきているようにも感じますが、あまり詳しくないので今回は省略しています。
生成クオリティの改善
生成クオリティの改善は①モデルアーキテクチャの改善②学習の改善③推論方法の改善に大別されます。
モデルアーキテクチャの改善はマルチモーダルの研究が盛んに行われている一方で、言語モデル単体としての研究は少なめです。transformerのスケール則を信じればリソースを注ぎ込めばパフォーマンスが改善するのでアーキテクチャ自体をいじらなくても良いことが理由だと思います。言語モデル単体としてはtransformerのロングコンテキストを扱えるようにすることが主な研究テーマです。
学習の改善は事前学習と事後学習それぞれの改善に大別されます。事前学習はデータを増やせば経験的にパフォーマンスが上がるのでそこまで考察はされていませんが、時々学習データの質に関して研究する論文があります。事後学習は事前学習モデルがパブリックに公開されて以降盛んに研究されています。教師あり学習と強化学習、マシンスペックが高くない場合でも学習を可能にするPEFTの研究が主な研究領域です。教師あり学習はデータの作成方法、強化学習は学習アルゴリズムの提案にフォーカスした研究がほとんどです。
推論方法の改善に関してはpromptingは最近はやや下火になってきており、LLM同士、LLMと他のツールを組み合わせることで生成クオリティを上げる研究が盛んです。agentははっきりした定義は筆者も正直よくわかってないです。複数個のtoolを使い分ける主体(langchainではこれ)、もしくは、何らかの役割をもった(promptingされた)LLMをさしていう場合があるように思います。ここでは後者をさしてagentと定義しました。
モデルの軽量化
モデルの軽量化はアーキテクチャレベルで計算量を改善する、枝刈り、量子化、cudaカーネルの改良、cpu-offloadなどがあると思います。
アーキテクチャレベルでの軽量化はtransformerの後継モデルを作る研究です。transformerは系列長が長い時に計算量が辛いので、系列長に依存しない、もしくは、依存度がtransformerよりマシなモデルに関する研究が行われています。なお、今のところ実用面でtransformerを超えるアーキテクチャは出てきていないです(小規模モデルの比較ではtransformerへの優位性を示すものはあるが、大規模に示したものはない認識)。
重みの枝刈りは推論結果に影響しにくい重みを削除するテクニックです。大規模なtransformer推論結果に影響しない計算パスが多いので効果が出やすいです。
重みの量子化は最近盛んに研究されている印象です。事前学習の時から量子化するもの、事後学習で量子化するもの、学習を行わないで量子化するものなどいくつかの手法があります。自分の観測範囲では事後学習で少量データを使って量子化する方法が一番パフォーマンスが出ているように思います。
cudaカーネルの改良はGPUでの処理をソフト面で効率化して速度やVRAM消費を改善します。代表的なものはflash attentionで厳密計算で通常のattentionを高速化します。研究量はそこまで多くないですが、インパクトが大きい研究が多いイメージです。
cpu offloadは研究領域として成り立ってるかは微妙ですが、実用的には割と重要で、VRAMの不足をDRAMで補う技術です。DeepSpeedが代表的なアプリケーションです。
Discussion
興味深い記事をありがとうございます。
LLM系の研究をしている者です。
よければZenn上でLLMに関して簡単なディスカッションをしませんか。