Databricks AI研究主任による生成AIプロジェクト成功のための原則、戦略

# 導入
本記事では、先日行われた Data & AI Summit 2024 で Databricks 社のニューラルネットワーク研究の主任によるセッション「[CUSTOMIZING YOUR MODELS: RAG, FINE-TUNING, AND PRE-TRAINING](https://www.databricks.com/dataaisummit/session/customizing-your-models-rag-fine-tuning-and-pre-training-repeated)」で紹介されていた LLM をカスタマイズする際の戦略を紹介します。
生成AIサービスを成功に導くための基本的な考え方について話されているので、その内容を解説していきたいと思います。

Jonathan Frankle氏が最も聞かれることの多い質問が、セッションのタイトルにもなっている「RAG, fine-tuning, pre-training どれを使えばいいか？」であり、これは日本でも多くの方が興味のある内容かと思います。
結論、この質問の回答は「普遍的な答えもルールもまだない」とおっしゃっています。だからこそ、この明確なルールがない分野に対してどのように科学を導入し、どのように探究するかの戦略が大事となり、その原則と戦略についてがこのセッションの内容となります。
#### スピーカー
Jonathan Frankle氏：Chief Neural Network Scientist at Databricks

# 原則
1. データ駆動であること
2. 小さくはじめること、本当に小さく始めること
3. 正しい順序で進めること

この原則を守りながら（守るために）以下の戦略をとります。
# 戦略
戦略は以下の3つのステップになります
1. 評価：評価基準を決める
2. 目的：制約とコストを理解しデザインスペースを策定
3. 解決：最も安価な手法から高価な手法までROIをトラッキングする

これから各ステップの詳細について解説します。
## ステップ0：用語の解説
3つのステップの前に基本的な用語の解説をします。LLMとのやりとりには以下の方法から選択することになります。
- Prompting
- Many(few)-shot prompting
- Retrieval augmented generation (RAG)

ここでは各手法の詳細は説明は省略しますが、注意するべき点はすべて組み合わせて利用できるという点です。それぞれ独立している手法ではないため、すべてが相互に影響を与えることができ評価はより複雑になります。

モデルは以下の方法から選択することになります
- off the sehlf（既存のモデルをそのまま利用）
- fine-tuning（~10K-100K の回答例データセット）
- continued-pre-training（~1K-100B のトークンテキスト）
- pre-training（~1T-10T のトークンテキスト）

continued-pre-training は少し聞きなれないかもしれないですが、多くのデータを使った fine-tuning を continued-pre-training と定義しています。これは既存のモデルに対して行うこともあれば、pre-training モデルをさらに改善するために繰り返し行われることもあります。Databricks が構築しているLLMモデルの DBRX では12兆トークンのテキストを利用した pre-training モデルですが、4つのステップで学習しておりさらに continued-pre-training を追加する予定があるそうです。
セッション内ではもう少し各用語に対して詳しく説明されているため、詳細については元動画をご覧ください。
## ステップ１ 評価：評価基準を決める
生成AIサービスには3つの種類の評価が必要としています。
1. Something cheap and automatic（安価で自動化されているもの）
2. Something somewhat involved and more realistic（もう少し現実に近いもの）
3. Something close to the real world（ほとんど現実と同様のもの）

それぞれの評価について解説します。
### 1. Something cheap and automatic（安価で自動化されているもの）
これは、ユニットテストのようなもので、既知の情報に対して正しい答えと間違った答えを用意し、ボタン一つですぐにチェックできるようにします。しかし、生成モデルでは現実世界に正しい答えと間違った答えがないため、あくまで近似的なテストであることに気を付ける必要があります。
### 2. Something somewhat involved and more realistic（もう少し現実に近いもの）
モデルが生成的なタスクを行い、LLMによる評価を実施します。
同氏はあまりこの手法が好きではない（科学的ではないため）が、うまく機能することが多く他にいい手段がないため採用しているとのことです。
### 3. Something close to the real world（ほとんど現実と同様のもの）
実際の設定でデプロイし、実際の人間（ユーザ）によるテストを行います。実運用でABテストを行ったり、ユーザにアンケートを取ったりすることになるかもしれません。
この手法は時間がかかりますが、1,2はあくまで近似的なもので実際の評価は 3 で決まります。1,2でどんなにいい結果が得られても 3 で改善がみられなければ意味がないといってもいいでしょう。

こちらの評価プロセスは [Mosaic AI Agent Evaluation](https://docs.databricks.com/en/generative-ai/agent-evaluation/index.html) に採用されているため、実装方法など興味のある方は一読をお勧めします。
評価基準を設定、改善し続ける必要がありますが、同氏もつい意識から抜けてしまうことがあるため毎日忘れないように気を付けているそうです。
## ステップ2 目的：制約とコストを理解しデザインスペースを策定
目標を立てるために、品質とコストの2つの軸が重要になります。
- 品質はステップ1で行っている評価メトリックを利用します
- コストは以下の点を考慮します
	- モデルの構築にかかる「料金」と利用にかかる「料金」
	- モデルの構築にかかる「時間」と利用にかかる「時間」
		- リアルタイムチャットボットであれば2分も待てないため、スループットやレイテンシなどのメトリックで測定することになる
		- この指標は自分のユースケースに合わせて具体化する必要があります

### 可視化
- 以下は例として y 軸に MMLU（一般的なLLM評価指標の一つ）、x 軸にドル（料金）を設定したグラフになります
- 各種メトリックに対して、安価な手段から高価な手段を試行し ROI を計測します
 - ![2024-06-18_09h44_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/1ca034f6-cf2f-82de-cb2d-603d9b49bc03.png)
コストと制約を考える際に、以下の３つどのシナリオに当てはまるかを考えます
1. ステップ関数のような改善
2. 十分に良い AI が必要な場合
3. 予算に制限がある場合

各シナリオについて解説します。
### ステップ関数のような改善
AI によってこれまでできなかったことを可能にすることを目指しているシナリオです。ここでは例として [AlphaFold 社のタンパク質の折り畳み問題の解決](https://www.itmedia.co.jp/news/articles/2012/01/news053.html) を目指したプロジェクトを引用しています。このように、これまで不可能されたいたことがAIによって解決される、または非常に高価だったものが安価に実行可能になるような開発に対しては非常に大きなコストを支払うことができとしています。つまり、この曲線でいえばコストに関係なく品質をできるだけ高くしたいと考えられます。実際にはコストは有限ですが最もコストの制限がなく、品質の向上にフォーカスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/9e7e211c-c4df-87f2-13df-4e9e58245d22.png)
### 十分に良いAIが必要な場合
あるメトリックで「十分に良い」とされるレベルがあるシナリオです。AIがそのレベルの品質に達しない場合は利用できません。そのレベルに達したらコストを削減することだけが重要になります。この交点は事前にはわからないため、最適化の作業には時間がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/ec1000f5-b392-fc65-6df0-18759393a399.png)
### 予算に制限がある場合
予算に制限があり、その中で最良のモデルを探索したりレスポンス速度を追求したりします。こちらも上のシナリオと同様に最適化には時間がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/c513c01b-63cd-be7b-c23b-d25835c3070c.png)


### どのように最適化するか？ 
とにかく小さく始めて徐々に大きくしていくことが大事です。（この点についてセッション内で何度も強調していました。）簡単で安価なものからはじめて徐々に難しくて高価なものへの進めていきます。
- AIがステップ関数的な改善をもたらす場合、目標を達成できるかどうかを慎重に検討します
- 十分に良いAIが必要であれば、品質目標に到達する最小のモデルを見つけるために徐々に進めていきます
- 予算が限られている場合は、予算内で最適なものに到達するまで徐々に進めていきます

基本的な戦略の概要は以上になります。ここからは具体的な解決のプロセスについての話になります。

## ステップ３ 解決：最も安価な手法から高価な手法までROIをトラッキングする
上図の曲線をどのようにして上るのかについて解説します。
### モデルの選択
まずはモデルをどこから用意するかが大事です。以下の選択肢の上から求める結果が得られるまで段階を踏んで進めていきます。下に行くにつれて、かかる時間も料金も大幅に増加します。利用するデータへの理解や量についても同様です。評価基準についても同様で、最初に設定したものを最大化し、もっと複雑なものが必要になり、どんどん成熟していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/f010db25-cbab-d21e-e9a1-26fac5b97e45.png)
### プロンプティング
LLMへの入力に以下のどのパターンを利用するかを策定します。
1. Prompting
2. Many(few)-shot prompting
3. Retrieval augmented generation (RAG)
4. 上記の組み合わせ

これは内部ループのようなもので、まずは市販のモデルに対して1から4へとそれぞれのパターンを進んでいきます。次に、fine-tuning モデルに対して1から4の入力パターンへ進む...という形になります。
市販のモデルに対してシンプルな入力のみで要件を満たすかもしれません。それでも全く問題ありません。
以上の方法で進めることで、最も安価なパターンから段階を踏んで品質とコストの要件の範囲内で最適なパターンを探索することができます。
![2024-06-18_13h42_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/701ad7fe-c969-e72c-7338-8ef09ab71a3d.png)
![2024-06-18_13h43_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/d69dc53b-750e-21dd-79cb-95794c813b4d.png)
![2024-06-18_13h45_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401338/8ef50a4b-fb8a-6c88-1d35-6ff1af89fe3c.png)
この外部ループの段階は一つ上がるごとにコストが倍増するため、しっかりとすべてのループを経るべきです。fine-tuning と RAG のみで解決できれば多くの時間とお金を節約することができます。

# まとめ
はじめの一歩として、評価基準を設定することの大切さについて話されていました。
最初から完璧なものにする必要はないです。Databricks のチームでも「より良い評価が必要だ」と毎日のように議論しているそうです。
生成 AI のユースケースにおいて評価基準を決めることは難しいことが多いと思います。
Databricks では上記の戦略を実現するための機能がそろっており Mosaic AI Agent Evaluation や MLFlow Evalution 等を利用することで評価に必要な情報の整理と評価設定の手助けになると思います。