LLMカスタマイズ入門
近年、人工知能の急速な進歩により、大規模な言語モデル(LLMが開発され、自然言語処理(NLP)の分野に革命をもたらしている。)ChatGPT](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)、Llama、Mistral、Zephyr、othersなどのこれらの強力なモデルは、人間のような言語を理解し生成する上で優れた能力を発揮している。
しかし、これらのLLMには限界がある。これらのLLMは、特定の切り口で大量のデータに対して学習されるため、学習データよりも新しい知識を必要とする回答を生成するために使用すると、不正確な回答が得られる危険性がある。したがって、これらのモデルの潜在能力を最大限に引き出すには、特定のタスクやドメインに合わせてカスタマイズすることが不可欠です。そこでLLMのカスタマイズが活躍する。
シアトルで最近開催されたZilliz Unstructured Data Meetup で、OSS4AIのCEOであり、Zillizの以前のシニア・デベロッパー・アドボケイトであるYujian Tangは、特定のタスクでのパフォーマンスを向上させるためにLLMをカスタマイズするためのいくつかのオプションについて議論した。LLMのさまざまなカスタマイズオプションについて議論する前に、LLMの歴史について簡単に調べてみよう。
LLMの簡単な歴史
LLMの誕生に至る研究は、基本的なニューラルネットワークのアーキテクチャから始まっている。基本的なニューラルネットワークの層は、下の図に示すように、入力層、1つ以上の隠れ層、出力層から構成される。
ニューラルネットワーク・アーキテクチャ](https://assets.zilliz.com/Neural_network_architecture_94025bd292.png)
基本的なニューラルネットワークアーキテクチャは、分類タスクに非常に強力であることが証明されており、テキストや画像などの非構造化データを扱うことができる。しかし、自然言語タスクに不可欠な長期的な依存関係や逐次処理を必要とするタスクには効果がない。基本的なニューラルネットワークでは、各入力は独立して処理され、出力は現在の入力のみに基づいて生成される。つまり、ニューラルネットワークはシーケンス全体に関する入力の順序や文脈を考慮しない。
長期的な依存関係を処理する能力がなければ、ニューラルネットワークは入力シーケンスやテキスト全体の意味的な意味を推測することができない。リカレントニューラルネットワーク([RNNs](https://zilliz.com/glossary/recurrent-neural-networks))の登場は、この問題を解決することを目的としていた。
RNNは、隠れ状態を導入することでこの問題に対処する。隠れ状態は、ネットワークが以前に見たことのある情報をキャプチャするメモリとして機能する。この隠れ状態は、ある時間ステップから次の時間ステップに渡され、ネットワークがシーケンスの表現を維持することを可能にする。隠れ状態を追加することで、RNNは入力シーケンスからの情報を選択的に記憶したり忘れたりできるようになり、基本的なニューラルネットワークよりも入力シーケンスの依存性に効果的に対応できるようになる。
RNNアーキテクチャ](https://assets.zilliz.com/RNN_architecture_3bac8bed83.png)
しかし、RNNには以下のような制限もある:
消失勾配問題**:RNNは、学習中にモデルのパラメータを更新するために使用される勾配が、時間を通してバックプロパゲートされるにつれて小さくなる、消失勾配問題に悩まされる。この問題は、RNNがシーケンスの長期的な依存関係を学習することを困難にする。
シーケンシャル処理**:RNNはシーケンスを逐次的に処理するため、計算を並列化する能力が制限され、計算効率が悪くなる。
このようなRNNの限界から、自己注意メカニズムを用いて入力配列を並列処理し、消失勾配問題を回避するTransformerが開発された。
Transformerアーキテクチャ](https://assets.zilliz.com/Transformer_architecture_80d347a22f.png)
Transformerのアーキテクチャは、いくつかのエンコーダとデコーダのブロックで構成されている。各エンコーダーとデコーダーのブロックは、アテンション層と呼ばれる特別な層を含んでいる。このレイヤーは、入力シーケンス全体に関して、各トークンの背後にある意味的な意味を決定する上で重要な役割を果たす。例えば、次の3つの文を考えてみよう:
アップルは2023年に970億ドルの利益を上げた
私は2023年に利益を得るためにアップルパイを食べるのが好きだ。
2023年、アップルの最終利益は過去最高を記録
キーワードベースのアプローチのような従来のアプローチだけでは、最初の2文が最も類似したペアとなる。この2つの文には3つの類似キーワードが見つかった:アップル、2023年、利益。
しかし、我々は最初と3番目の文が意味的に最も類似したペアであることを知っている。Transformerアーキテクチャー内のアテンション・レイヤーは、このコンテキストを捉え、1番目と3番目を最も意味的に類似したペアとして返すことができる。
Transformerモデルの強力な性能と汎用性は、コンピュータビジョンからNLPやマルチモーダルタスクまで、さまざまな分野にわたるAIの急速な進歩につながった。
Transformersの大成功の後に導入されたモデルの1つに、Generative Pretrained Transformers(GPT)モデルがある。このモデルは、入力シーケンスの次のトークンを予測するためにTransformerアーキテクチャのデコーダ部分を使用し、ChatGPTやLlamaなど、これまでに知られている多くのLLMのバックボーンとして使用されている。
GPTアーキテクチャ](https://assets.zilliz.com/GPT_architecture_81ce1440bb.png)
これらのLLMは、膨大な量のデータで訓練されているため、人間のような反応を生成するのに非常に強力です。しかし、すでにご存知かもしれませんが、トレーニングデータには期限があります。つまり、トレーニングデータよりも新しい情報について質問した場合、LLMから正確な回答は得られません。そこで、LLMをカスタマイズする必要がある。
検索拡張世代(RAG)
LLMをカスタマイズする最初の方法は、RAGである。LLMにクエリと関連するコンテキストの両方を入力として提供し、提供されたコンテキストを活用することで、コンテキストに基づいた正確な応答を生成できるようにする。
RAGアーキテクチャ](https://assets.zilliz.com/RAG_architecture_a4710eb118.png)
LLMをRAGに活用するためには、2つの重要なコンポーネントが必要である:
1.ベクトル埋め込みモデル**:クエリとコンテキストをベクトル埋め込みに変換するモデル。
2.ベクトルデータベース**:すべてのコンテキスト埋め込みを格納し、クエリに基づいてLLMに最も関連性の高い、意味的に類似したコンテキストを提供するためにベクトル検索を実行するデータベース。
ベクトル埋め込みを生成するために、OpenAIのディープラーニングモデルや文変換器など、いくつかのモデルを使用することができる。また、TF-IDFやBM25のような従来のbag-of-words-based modelを採用することもできる。
Milvusは、一般的なオープンソースのベクトルデータベースである。このデータベースには、モデルによって生成されたベクトル埋め込みと、そのメタデータの2種類からなる必要なデータが格納されている。例えば、2023年6月1日にTowards Data Scienceによって公開された記事のテキストのチャンクを考えてみよう。Milvusベクトルデータベースに格納されるデータは以下のようになる:
ベクトル埋め込みデータとそのメタデータの例](https://assets.zilliz.com/Example_of_a_vector_embedding_data_and_its_metadata_57c1a9222a.png)
メタデータは、LLMにより正確なコンテキストを提供するために、ベクトル検索操作の際に様々なフィルタを実行するのに便利です。たとえば、特定の出版物からコンテキストをフェッチしたい場合や、特定の日付(たとえば2020年)以降に出版されたコンテキストをフェッチしたい場合があります。
いったんクエリがあり、フィルタリングしたい特定のメタデータが分かれば、Milvusのようなベクトルデータベースがその役割を果たします。ベクトル検索を実行し、メタデータのフィルタリング条件を満たす、クエリと意味的に最も類似したコンテキストを見つける。
微調整
LLMをカスタマイズするもう一つのアプローチは、ファインチューニングだ。コンセプトは簡単で、事前に訓練されたLLMを我々のデータで訓練し、その結果、我々のデータドメイン特有のタスクを実行するように調整された新しい重みを持つモデルが出来上がる。
LLMを微調整する方法はいくつかある:
1.完全な微調整:この方法は、元のLLM内のすべてのパラメーターの重みを変更する。しかし、計算コストがかかります。
2.LORA:このアプローチは、LLMアーキテクチャ内に低ランクのアダプターを導入する。微調整の間、元の重みは凍結され、アダプターの重みのみが更新される。
3.QLORA:この手法は、元のLORA手法に量子化を導入し、妥当な性能を保ちながら計算コストとリソースを削減する。
完全微調整 vs LORA](https://assets.zilliz.com/Full_fine_tuning_vs_LORA_264ef1e50a.png)
微調整の方法がわかったところで、微調整のさまざまなテクニックについて説明しよう:
1.教師付き微調整:この方法では、LLMに独自の学習データと対応するラベルを提供する。そして、教師あり機械学習モデルのようにLLMを訓練する。
2.人間のフィードバックからの強化学習(RLHF):この方法は強化学習理論を取り入れたものである。クエリに基づいてLLMから様々な応答を収集し、各応答の品質を評価する。時間の経過とともに、LLMは私たちの好みに沿った応答を返すようになる。
教師あり微調整 vs. 人間のフィードバックからの強化学習](https://assets.zilliz.com/Supervised_fine_tuning_vs_Reinforcement_Learning_from_Human_Feedback_311286c936.png)
教師ありの微調整は簡単なので、RLHFについてもう少し詳しく説明しよう。ネイティブRLHFの欠点の1つは、LLMによって生成された応答の品質を人間が評価する必要があることである。このアプローチは高価で時間がかかる。
データサイエンティストは、この問題を軽減するためにProximal Policy Optimization(PPO)を導入した。PPOは、人間の評価に代わる報酬モデルを導入する。しかし、この報酬モデルは別途トレーニングする必要があり、PPOアプリケーションを面倒なものにしている。さらに、報酬モデルは新しいデータが追加されるたびに再学習する必要がある。
これらの問題に対処するため、直接選好最適化(DPO)が導入された。DPOは、人間の嗜好データに対して、負の対数尤度損失関数を用いてLLMのポリシーを最適化する。DPOによる微調整のためのデータセットは、プロンプト、優先応答、非優先応答から構成される:
DPOによるLLMのファインチューニングに使用するデータフォーマットの例](https://assets.zilliz.com/Example_of_the_data_format_used_to_fine_tune_LL_Ms_with_DPO_3e68f72810.png)
しかし、DPOはプリファレンス・データセットにすぐに適合しすぎる傾向がある。この問題を軽減するために、アイデンティティ選好最適化(IPO)が開発された。
IPOはオーバーフィッティングを避けるために、DPO損失関数に正則化項を導入する。また、負対数尤度(NLL)損失関数に付加された対数オッズ比項を使用し、好ましくない回答にペナルティを与えながら、LLMを希望するスタイルに微調整することを可能にする。
結論
Yujian Tang氏の講演では、我々の特定のユースケースで最適に使用するためにLLMをカスタマイズする様々な方法について議論した。プレゼンテーションではまず、LLMの開発につながったAIの進歩の歴史を簡単に説明した。続いて、LLMをカスタマイズする2つの方法について説明した:RAGと微調整である。
RAGは、LLMが生成する応答品質を、クエリとともに関連するコンテキストを入力として注入することで向上させる。Milvusのようなベクトルデータベースは、コンテキスト埋め込みを保存し、RAGを実装するためにベクトル検索を実行する。LLMはこれらのコンテキストを利用して適切な回答を生成する。
第2のアプローチは微調整であり、微調整には2つの方法がある:
教師付き微調整**:この方法では、LLMに独自の学習データと対応するラベルを与え、教師あり機械学習モデルのように学習させる。
人間のフィードバックからの強化学習(RLHF)**:この方法は強化学習理論を取り入れたもので、クエリに基づいてLLMから様々な応答を収集し、各応答の品質を評価します。時間の経過とともに、LLMは私たちの好みに沿った応答を返すようになります。
LLMのカスタマイズの詳細については、Yujianのトークのリプレイを見るを参照してください。
読み続けて

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.
