ファインチューニングの仕組みから転移学習・RAGとの違い、実施方法まで徹底解説
ChatGPTをはじめとする生成Iは、事前に学習した膨大な量の情報を基に幅広い質問に回答するツールです。しかし、ビジネスや特定の領域に特化して使いたい場合、十分な回答が得られないとお悩みの方もいるでしょう。
社内情報など追加のデータを利用したファインチューニングにより、特定の領域に特化した回答が可能になり、自社専用のオリジナルツールとして活用できます。
今回の記事では、ファインチューニングの概要や仕組みから、ChatGPT(LLM)で使われる理由、具体的な利用法、そして転移学習との違いについて解説します。
ファインチューニングとは
ファインチューニングとは「大量の汎用データを用いて事前学習したモデル(事前学習済みモデル)に、解きたいタスクに関連した特定のデータを追加で学習させ、パラメータを微調整すること」を指します。
ファインチューニングに関しては、下記の動画が分かりやすいです。
詳細な解説に入る前に、事前学習済モデルとパラメータ、ファインチューニングの定義を整理しておきましょう。
- 事前学習済モデル:大規模データで事前に学習した、汎用的な機械学習モデル
- パラメータ:タスクを解くために調整する数値
- ファインチューニング:事前学習済みモデルのパラメータを微調整する手法
ファインチューニングを行う目的は、事前学習済みモデルを「タスクに特化したモデル」にするためです。事前学習済みモデルはあくまでも汎用的なモデルであり、ファインチューニングを実施すると、特定のタスクでの回答精度が向上します。
ファインチューニングのイメージは、以下の画像の通りです。
「事前学習用データ」は非常に大きなデータです。一方で「タスクA用のデータ」や「タスクB用のデータ」は、一般的には数百〜数千件ほどのタスクに特化した小さなデータです。
ChatGPTでもファインチューニングを実施している理由
ChatGPTのファインチューニングは、モデルを特定のタスクにカスタマイズしたり、パフォーマンスを向上させるなど、さまざまな理由から行われます。例えば、カスタマーサービスやチャットボットアプリケーションなど、特定のタスク専用に仕上げることが可能です。
ChatGPTを使う際に入力する「プロンプト」はファインチューニングに非常に似ています。現在のChatGPTに使われている「GPT-4」や「GPT-4o」の場合は、数百〜数千件のデータだけでファインチューニングを行うことなく、プロンプトのような1〜2件のデータでも、様々なタスクに対応できます。
事前学習済モデルとファインチューニング、プロンプトそれぞれの一般的なデータ数は以下の通りです。
- 事前学習済モデル(GPT-3):570GB
- ファインチューニング:数十〜数千件
- プロンプト:1~2件
ファインチューニングの仕組みとやり方
ファインチューニングでは、各タスクに特化したモデルを作るために、最終層に新たな層を追加します。その後、追加した層と学習済みモデルの一部または全体を、追加で学習するのです。
ファインチューニングのイメージは、以下の画像の通りです。
ファインチューニングでは、解きたいタスクに応じて専用のデータを別途用意します。例えば、GPTやBERTの論文では、ファインチューニングによって以下のようなタスクを解いています。
- 要約
- 翻訳
- 質問応答
- テキスト分類
自身の手元にあるデータを用いてファインチューニングすれば、ChatGPTのような大規模言語モデルも、自分好みにカスタマイズできます。
ファインチューニングのデータセットの作り方
ファインチューニングの実施で重要なのは、追加学習用データセットの準備です。
一般的にファインチューニング用のデータセットを作成するには、以下のステップを踏みます。タスクの種類に適したデータセットが必要で、機械学習モデルの性能を最大限に引き出すために重要な作業です。
目的の明確化
まず、どのようなタスクや問題を解決したいのかを明確に定義します。ファインチューニングの目的に応じて、必要なデータの種類や特徴が異なります。
データ収集
目的に合ったデータを収集します。データには、保有する既存のデータセットを使用する、Webからのデータスクレイピング、社内のデータベースからのデータ抽出などが含まれます。重要なのはタスクに関連性が高く、多様性を持つデータを収集することです。
データの前処理
収集したデータをモデルに適した形式に加工します。
例えばテキストデータの場合は、
- トークナイズ
- 正規化
- 不要な文字の除去
などが含まれます。
画像データの場合は
- サイズの統一
- 色の正規化
などが必要になる場合もあります。
データのラベリング
教師あり学習を行う場合は、データに適切なラベル(タグやカテゴリー)を付けます。このラベリングは、後のモデルの学習において「正解」として機能します。
データセットの分割
データセットは下記のように分割します。
- 訓練セット
- 検証セット
- テストセット
一般的には、データの70-80%を「訓練用」に、残りを「検証用」と「テスト用」に分けます。
データの拡張(オプショナル)
データ量が不足している場合やモデルの汎用性を高めるために、データの拡張を行います。例えば、画像データの場合は回転や反転、テキストデータの場合は同義語の置換などがあります。
品質の確認
データセットの品質を確認し、必要に応じてクリーニングや再ラベリングを行います。データの品質はファインチューニングの結果に直接影響を与えるため、このステップは非常に重要です。
これらのステップを通じて、ファインチューニングのための高品質なデータセットを作成できます。データセットの作成は手間がかかるプロセスですが、モデルの性能向上には不可欠です。
ファインチューニング用のデータセットを作成する際には、直感的にコードが書けて参照リソースの豊富なPythonが活用されることが多いです。※1
なお、データセットについて知りたい方はこちらをご覧ください。
ChatGPTでのファインチューニングのやり方
ファインチューニングの概要を理解したら、次は実際にChatGPTのモデルをファインチューニングする方法を見てみましょう。具体的には以下4つのステップで作業を実施します。
- データの準備
- APIキーの取得
- 学習用データのアップロード
- ファインチューニングの実行
ChatGPTの詳しいファインチューニングのやり方は、OpenAIのサイトに詳しい解説があります。※2
英語が得意な方は参考にしてください。ここでは、主要な流れを解説します。
1.学習用データセットの準備
ChatGPTでモデルのファインチューニングを行うには、JSONLファイルのデータセットが必要です。少なくとも10件の学習用サンプルデータが必要ですが、公式サイトでは50件程度のデータセットから学習を始めて、改善を確認しながら進める方法が推奨されています。
2.APIキーの取得
ChatGPTのモデルをファインチューニングするには、OpenAI社のウェブページからAPIキーを取得します。APIキーの取得には登録が必要です。
3.学習用データのアップロード
Pyhon環境にOpenAIライブラリをインストールし、学習用データをアップロードする準備を整えます。アップロード可能なファイルサイズは最大1GBなので、超過していないことを事前に確認しておきましょう。
手順2で取得したOpenAIのAPIキーを設定し、学習用データをアップロードして準備は完了です。
4.ファインチューニングの実行
最後に、ファインチューニングの実行をリクエストします。モデルのファインチューニングはOpenAIのサイト上で実行されますが、すぐには開始されません。ファイルサイズに応じて、完了までに数分から数時間の時間を要します。
ファインチューニングが完了するとユーザー宛にメールが届きます。
ファインチューニングと他の方法の違い
ファインチューニングと混同しやすい学習方法・モデルがあるので、解説します。それぞれの違いを理解し上手に使い分けましょう。
ファインチューニングと転移学習の違い
事前学習済モデルを特定タスクに適用する方法として、ファインチューニングの他にも転移学習がよく用いられます。これら二つの手法は似て非なるものです。
ファインチューニングでは、事前に訓練されたモデルの一部または全体を新しいデータセットで追加学習します。一方で、転移学習は、訓練済みのモデルの出力層に新しい層を追加し、その層だけを新しいデータで追加学習する方法です。
主な違いは、追加学習する層と必要なデータ量です。
ファインチューニング | 転移学習 | |
---|---|---|
追加学習する層 | モデル全体または一部 | 新たに追加された出力層のみ |
必要なデータ量 | 転移学習より多い | 少ない |
これらの手法において、データ量が豊富であればファインチューニングが、データ量が少なければ転移学習が適しています。ファインチューニングと転移学習の違いについては、以下の画像が分かりやすいです。
上がファインチューニングの例で、下が転移学習の例です。
ファインチューニングでは、新たに追加した層に加えて、もともとあった層の一部も含めて追加学習しています。一方で、転移学習では、新たに追加した層だけを追加学習し、その他の層の既存パラメータは調整しません。
この転移学習のように、その他の層のパラメータを全くいじらないことを「凍結(フリーズ)」といいます。
ファインチューニングとプロンプトエンジニアリングの違い
ファインチューニングとプロンプトエンジニアリングの違いについても述べておきます。この2つは、両方とも事前学習済のモデルを特定のタスクに適用する方法ですが、そのアプローチには大きな違いがあります。
ファインチューニングは既に述べたように、事前に訓練されたモデルの一部または全体を、新しいデータセットで追加学習する手法です。このプロセスにより、モデルは新しいタスクやデータセットの特性に合わせて調整され、パフォーマンスが向上します。
一方で、プロンプトエンジニアリングは事前学習済モデルのパラメータは調整せず、入力データ(プロンプト)を工夫することで、特定のタスクに対するモデルの反応を最適化する方法です。このアプローチではモデル自体の再学習や調整は行わず、どのように入力を構成するか(例えば、質問の仕方や情報の提示方法)に焦点を当てます。
ファインチューニング | プロンプトエンジニアリング | |
---|---|---|
追加学習 | モデル全体または一部に行う | 行わない |
モデルの調整 | 調整することによりパフォーマンスが向上 | 調整は行わず、入力の構成によりパフォーマンスを向上させる |
主な違いは、ファインチューニングがモデル自体を再学習するのに対し、プロンプトエンジニアリングではモデルの再学習を行わず入力データの工夫によってモデルの出力を最適化する点にあります。
ファインチューニングは「データ量が豊富で特定のタスクにモデルを特化させたい場合」に適しているのに対し、プロンプトエンジニアリングは「追加の学習リソースや時間が限られている状況」で効果的です。
ファインチューニングとインストラクションチューニングの違い
ファインチューニングとインストラクションチューニングは、どちらもパフォーマンスを向上させる学習方法ですが、用途は大きく異なります。ファインチューニングはこれまで解説してきた通り、解きたいタスクに応じたデータを追加で学習し、パラメータを微調整することが目的でした。
それに対して、インストラクションチューニングとは、何らかの指示が記述されたタスクを実行するようにファインチューニングすることを指します。
これは、ファインチューニングのように大規模なデータセットで特定のタスクの精度を上げることを目的としていません。代わりに、与えられた指示を理解し、従う能力を向上させ、様々なタスクを指示に基づいて実行するための汎用性を向上させることを目指します。
インストラクションチューニングを行うことで、入力されたプロンプトに従って、ユーザーの意図に密接に沿ったコンテンツや回答を生成することができます。
ファインチューニングとLoRAの違い
LoRA(Low-Rank Adaptation)はファインチューニング技術のひとつで、特に画像生成AIに用いられています。特徴として、少ない学習データでモデルの精度を向上できる、学習に必要なコストが低いなどがあります。自分の理想のイラスト生成が短時間かつ高精度で実現できます。
追加学習の計算量が少ないため、通常のファインチューニングに必要なパソコンよりも安価な低スペックのもので実行可能です。
特定の世界観を描写でき、ゲームの背景画像などの生成にも用いられています。生成する画像のイメージを写真風やアニメ風などで指定でき、マーケティング戦略に沿った画像を生成可能です。
ファインチューニングとRAGの違い
ファインチューニングとRAG(Retrieval-Augmented Generation)は、両方とも機械学習モデルの訓練方法ですが、その目的とアプローチには大きな違いがあります。ファインチューニング(Fine-tuning)は、特にニューラルネットワークモデルを特定のタスクやデータセットに適応させるために行われます。
既に事前学習を終えたモデルに特定の分野に関するデータセットを用いてチューニングし、特定のタスクに特化させる作業となります。ファインチューニングは、その特定の分野での回答精度を向上させることができます。
RAGは検索コンポーネントと生成コンポーネントを組み合わせた手法であり、質問に対する最新で詳細な回答を生成するのに役立ちます。
大規模な文書コレクションから関連する情報を検索し、その情報を元に回答を生成します。RAGは、特に大量の情報から適切な回答を生成する必要があるタスクに有効です。
RAGとファインチューニングは課題と目的が異なります。ですのでRAGはファインチューニングの代替手段ではなく、お互いが補完する関係にあります。
なお、RAGに欠かせないエンべディングについて知りたい方はこちらをご覧ください。
ファインチューニングのメリット
ファインチューニングを行うことには、当然メリットが存在します。ここでは、ファインチューニングのメリットについて詳しく解説します。
独自の環境を構築できる
利用する側にとって一番のメリットは、社内の業務やサービスに特化した独自の環境を構築できることです。
例えば、社内データを用いてGPTモデルをファインチューニングしたとします。
すると元々のChatGPTの会話能力を受け継ぎながら社内データについて知識を身に着けることになります。これによって社内業務用のChatGPT環境となるわけです。
回答精度が向上する
ファインチューニングは、既存のモデルが持っている豊富な知識を活用しながら、特定分野の回答精度を向上させます。プロンプトよりも多くの例文で学習しているため、モデルが理想通りに回答する能力が向上することを意味しています。
コスト削減
ファインチューニングは、特定の分野におけるタスクに対して同じモデルを使用することを可能にします。これにより、モデルの再利用性が向上し、開発時間とリソースが節約できます。
さらに、プロンプトで多くの例文を提示する必要がなくなります。結果、プロンプトの短縮によりトークン数(コスト)の節約や例文提示の手間を削減することができます。
ファインチューニングのデメリット
ファインチューニングにはデメリットも存在します。把握しておかないと思わぬトラブルの原因になりかねないので、ここでしっかり理解しておきましょう。
学習に必要なデータ量と品質の要求が高い
ファインチューニングでは、モデルを特定のタスクや環境に適応させるために、大量かつ高品質の学習データが必要になります。十分な量のデータがない場合やデータの品質に問題がある場合、モデルの性能は最適なものにならない可能性があります。
過学習(オーバーフィッティング)のリスク
限られたデータセットに対してファインチューニングを行うと、モデルがその特定のデータセットに過剰に適応してしまうことがあります。これは「過学習」と呼ばれ、モデルが新しいデータや異なるタスクに対して汎化する能力が低下する原因となります。
リソースと計算コストが高い
ファインチューニングは計算資源を多く消費する作業です。特に大規模なモデルの場合、追加の学習には高い計算能力が必要となり、それに伴ってコストも増加します。
メンテナンスとアップデートの必要性
一度ファインチューニングされたモデルも、時間が経つと性能を低下させる可能性があります。このため、定期的なメンテナンスやアップデートが必要になり、これには追加の時間とリソースが必要です。
ファインチューニングの活用事例
ファインチューニングを行うとどのようなことができるのでしょうか。実際に生成AIにファインチューニングを行った事例を見てみましょう。
今回解説する事例において、弊社がX(旧Twitter)で発見した参考となるツイートを紹介させていただいております。取り下げなどのご連絡は、弊社公式X(旧Twitter)からご連絡ください。
事例①音声合成
5秒の音声サンプルからリアルな音声合成が可能なGPT-SoVITSもファインチューニングに対応しています。
Xの投稿にもあるように、音声合成をしたい人物の音声データをGPT-SoVITSへファインチューニングすることで、簡単にリアルな音声を生成することができます。
これにより、著名人だけではなく家族や知人など、身近な人の声も生成することができます。
事例②商品説明
店舗で商品の購入を検討しているとき、店員商品の詳細を質問することがあります。しかし、商品に詳しい店員が不在の時も少なくありません。
商品についての情報をファインチューニングした生成AIがあれば、商品の具体的な回答を自動で行ってくれます。人手不足の店舗や無人の販売店などでも、詳しい商品の説明が可能となるでしょう。
事例③画像生成
生成AIで画像を生成する際に、特定のイラストのスタイルに寄せたり、特定のキャラクターや人物のイラストを生成することは困難です。
しかし、自分が生成したい画像に似た画像データでファインチューニングを行えば、同じテイストのキャラクターや人物のイラストを生成することが可能となります。
ChatGPTファインチューニングの料金
ChatGPTを使って自社の業務を効率化したいとお考えの方も多いでしょう。しかし、最も気になるのはファインチューニングに必要な費用です。
ChatGPTのテキスト生成モデル(gpt-3.5-turbo)をファインチューニングする際、モデルのトレーニング費用がかかります。2024年6月時点では、1Mトークン当たり8.00ドルです。
また、作成したモデルを利用するときには、インプットとアウトプットの量に応じて費用が請求されます。インプットでは1Mトークン当たり3.00ドル、アウトプットでは1Mトークン当たり6.00ドルです。
ファインチューニングの注意点
ファインチューニングの注意点として、以下の2点が挙げられます。利用するときは、ここで解説するポイントに注意しましょう。
適切なデータセットの準備
ファインチューニングを行う際には、タスクに適したデータセットを用意することが重要です。データセットがタスクに適していないと、モデルの性能が低下する可能性があります。
このデータセットの準備は、内容によっては非常に手間がかかります。学習率も適切に設定してデータセットを準備しないといけません。学習率が高すぎると過学習を起こしてしまいます。
コストがかかる
ChatGPTのモデルをファインチューニングする際は、モデルの利用時だけでなく学習にも費用が必要です。学習させるデータ量が多いほど精度も高くなると期待できますが、コストも高くなります。
無暗に多量の学習データをアップロードせず、あらかじめどの程度の費用がかかるか見積った上で利用しましょう。
なお、ファインチューニング以外のAIを学習させる方法について詳しく知りたい方は、下記の記事を合わせてご確認ください。
ファインチューニングは特定タスクの効率化につながる
ファインチューニングは、大量のデータで事前学習されたモデルに対して、特定のタスクに適したデータを追加学習し、モデルのパラメータを微調整する手法です。ChatGPTにおいても、ファインチューニングは、特定のタスクにおいてパフォーマンスを向上させるために行われます。
転移学習は新しい層だけを追加学習するのに対し、ファインチューニングはモデル全体または一部を追加学習します。データ量が豊富な場合はファインチューニング、少ない場合は転移学習が適しています。
自社の業務に特化したファインチューニングを実施することにより、既存業務の効率化が可能です。また、時間を問わず顧客からの対応に迅速に回答できるなど、顧客満足度の向上にもつながるでしょう。
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、弊社紹介資料もご用意しておりますので、併せてご確認ください。