generated at
MoE
TL;DR
> 高密度モデルと比較して、事前トレーニングがはるかに高速です
> 同じ数のパラメータを持つモデルと比較して推論が高速になります
> すべてのエキスパートがメモリにロードされるため、高 VRAM が必要
> 微調整では多くの課題に直面しているが、MoE の命令調整に関する最近の研究は有望である


https://huggingface.co/blog/moe歴史からトレーニングの概要的なところ、Mixtral 8x7Bのアーキテクチャ(共有部分の存在など)についてまで書かれている。
歴史を遡るとVisionモデル(vlmではない)についての記事https://qiita.com/cvusk/items/c5f9622d7b87c36bf4f5があったりllm方面以外で使われてきた割と歴史のある?技術のようだ。
DeepSeek-R1によって再び注目を集めた技術…だがそもそもGPT-4(初代)はMoEである可能性が指摘されていたりと、案外LLM分野でもそれなりに頻出している。
そのDeepSeek-R1(もといそのベースたるDeepSeek V3)のMoE構成は最適化の為にかなり独特な組み合わせがなされている(正直素人が見ても訳わからん作りしてるmorisoba65536)

Claude 3.5 Sonnetにまとめてもらった内容(さすがに長いのでちょっと編集)
> 1. 基本的な実装例
> 最もシンプルな実装として、https://medium.com/@prateeksikdar/understanding-mixture-of-experts-building-a-moe-model-with-pytorch-dd373d9db81cのような構造が参考になります
> 2. 学習しやすい実装例
> https://github.com/peytontolbert/simple-moepeytontolbert/simple-moeは、学習プロセスを理解しやすい実装として参考になります。
> 3. 主要なコンポーネント
> シンプルなMoEの基本構造は以下の3つから成り立っていますhttps://medium.com/@bragadeeshs/implementing-a-mixture-of-experts-moe-model-using-pytorch-0852fdc5633e
> 1. エキスパートモデル
> - 個々の専門家として機能する単純なニューラルネットワーク
> - 同じ入出力インターフェースを持つ
> 2. ゲーティングネットワーク
> - 入力に基づいてエキスパートの重みを決定
> - 通常は単層のニューラルネットワーク
> 3. 統合メカニズム
> - エキスパートの出力を重み付けして結合
> - 最終的な予測を生成
> 1. 負荷分散
> - エキスパート間で入力が均等に分散されるように設計
> 2. トレーニング安定性
> - 適切な損失関数の選択
> - バッチサイズの調整
> 3.メモリ効率
> - 必要に応じたTop-k選択の実装
> - 効率的なバッチ処理
> これらの実装例を参考に、まずは基本的な構造を理解し、その後必要に応じて機能を追加していくアプローチが推奨されます。
どうやら(非常にシンプルな実装の場合)タスクに応じた比率で専門家モデル同士を選択・マージし、その結果を出力することで精度を得る考え方のようだmorisoba65536
マージ、も厳密には違うようで重みつけして出力足し合わせる、が正解のようだ……(MoE何もわからない)morisoba65536
ふつうに勘違いしてたが、ゲーティングネットワークの所(ルーティングとか色々な呼ばれ方をする)は、「MoEで同じアーキテクチャに縛られるモデル(llm)ではない
極論すれば「特定の単語(トークン)が来たらこっちのモデル」見たいなシンプルな仕組みでも良い、基本的にはシンプルなTransFormerアーキテクチャの分類器を使うことが多いようだ
構造的に「学習済みモデル」をベースにしつつ「共用部」を学習対象外にしたLoraでチューニング→独立したLora適用専門家モデルを作る→ゲーティングネットワークを学習、とすればかなり省資源に学習できると思われる…(私の理解が間違ってなければ)

ゲーティングネットワークについては長くなってきたので別記事に分離