Python

ファインチューニングと転移学習の違いやChatGPTをPythonでファインチューニングする方法!

記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、話題のAIで重要なファインチューニングについて解説していきます。ファインチューニングと同じく色々なところで聞かれる転移学習と混同されていることが多いのでそちらについても言及していきます!またPythonを使って実際にChatGPTのファインチューニングも行います。

こんにちは!

データサイエンティストのウマたん(@statistics1012)です!

この記事ではAI機械学習領域において非常に重要なファインチューニングについて解説していきたいと思います!

ファインチューニングは今後上手くAIと付き合っていく上でぜひ身につけておきたい知識ですのでしっかり理解しておきましょう。

以下の動画でも解説しているのであわせてチェックしてみてください!

ファインチューニングとは

ファインチューニングというアプローチは以前からあったのですが、ChatGPTをはじめとした生成系AIのブームで様々なところでよく聞かれるようになりました。

ファインチューニングとはザックリ言うと、「事前に学習されたモデルに対して手元のデータセットを元に再学習させてモデルのパラメータを調整して特定のタスクに適用させるようなモデルを生成する」アプローチを指します。

AIの学習には大量のデータセットが必要ですが、一般にそこまでデータセットを用意するのは難しいことが多いですし、用意できたとしても多大な費用と時間がかかってしまいます。

そこで元々誰かが用意してくれている事前学習済みモデルを利用して、費用と時間を削減した上で自分の解きたい特定のタスクに合わせたモデルを作成していくのです。

ファインチューニングでは既存モデルのパラメータを調整しますが、一般的には下位層(低レベルな特徴)は固定し、上位層(高レベルな特徴)の一部または全部を再学習します。

ファインチューニング (1)

例えばニューラルネットワークで日本人の顔を分類するモデルを作ったとしましょう!その際に下位層は顔の輪郭などの一般的な特徴を学習しており、上位層は顔の特定のパーツなどの細かい特徴を学習する場合が多いです。

そしてこのモデルを元にファインチューニングをしてアメリカ人の顔を分類するモデルを作るとしましょう!

この際、下位層で学習した大まかな顔の輪郭などは日本でもアメリカでも同じなのでパラメータを変えずに固定のままでよいでしょう。

一方で上位層で学習していた顔のパーツなどは日本人とアメリカ人で変わってくる可能性が高いので新しいデータセットでパラメータをチューニングします。

ファインチューニングはこのようなイメージなんです!

ファインチューニングと転移学習の違い

それではファインチューニングと同じくよく色んなところで聞かれる転移学習とはどんな手法なのでしょうか?

実はファインチューニングは転移学習の一種の手法であり、転移学習自体は「他のタスクで得た知識を他のタスクに適用させる」アプローチ全体を指します。

転移学習とファインチューニング
ロボたん
ロボたん
え!?転移学習とファインチューニングって同じじゃないの?
ウマたん
ウマたん
転移学習のアプローチの1つであるファインチューニングの方が色んなところで聞かれるし、転移学習の中でもファインチューニングが最も使われるから転移学習=ファインチューニングみたいな感じで思われることが多いんだ!

結構分かりにくく違いも曖昧で混乱を招きやすいのですが、、、あくまで転移学習の方が広い概念なのです。

海外のサイトで以下のサイトに転移学習の手法のいくつかが取り上げられています。

ここではいくつかの手法が取り上げられています。

1. TRAINING A MODEL TO REUSE IT

Imagine you want to solve task A but don’t have enough data to train a deep neural network. One way around this is to find a related task B with an abundance of data. Train the deep neural network on task B and use the model as a starting point for solving task A. Whether you’ll need to use the whole model or only a few layers depends heavily on the problem you’re trying to solve.

If you have the same input in both tasks, possibly reusing the model and making predictions for your new input is an option. Alternatively, changing and retraining different task-specific layers and the output layer is a method to explore.

このパターンは、特定のタスクAを解きたいけどそのタスクのデータを大量に保持していなくて似たようなタスクBのデータなら持っている場合に似たようたタスクBでモデルを作りそのモデルをタスクAを解くのに使う状況です。

これもあるタスクで得た知見を別のタスクに適用させているので転移学習と呼びますが、ファインチューニングは既存モデルを再学習させてパラメータを調整するのでファインチューニングではないことが分かると思います。

2. USING A PRE-TRAINED MODEL

The second approach is to use an already pre-trained model. There are a lot of these models out there, so make sure to do a little research. How many layers to reuse and how many to retrain depends on the problem.

This type of transfer learning is most commonly used throughout deep learning.

既存の訓練モデルを使うということで、これがいわゆるファインチューニングですね!!

まぁ基本はファインチューニングを使うのでファインチューニングだけ覚えていればよいと思うんですが、一応転移学習とファインチューニングは違う定義のものであり転移学習の一部がファインチューニングであるということをおさえておきましょう!

ChatGPTをPythonでファインチューニングしてみよう!

それでは、最後にChatGPTをPythonでファインチューニングする方法について見ていきましょう!

正確にはChatGPTのベースとなっているGPTのモデルをファインチューニングする方法になります。

まずはOpenAIのAPIを取得する必要があります。

OpenAIのサイトからsign upしてください。

登録できたら右上のプロフィールの箇所からView API keysを選びましょう。

OpenAI APIKey

そして、API Keysを選択しCreate new secret keyを押下して自分のAPIキーをメモしておいてください。

これでOpenAIへの登録とAPIの取得は完了です。

それでは実際にPythonを使っていきましょう!ご自身のPCでPythonの環境が整っていない場合はGoogle Colabなどを使うとよいでしょう!

まず今回ファインチューニングする際にAIに食わせる学習データを用意していきます。

以下のようなJSON形式で用意してあげてください。

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...

プロンプトと回答が対になるようなJSON形式のファイルです。

今回は以下のようにシンプルなプロンプトと回答をJSON形式で用意しました。

{"prompt": "スタビジとはどんなサービスですか?", "completion": "スタビジは、ビジネスに活かせるデータサイエンスに関して実務を通して学んだことを発信するメディアです。データサイエンスって本当は面白いんだよ!ってことを知ってもらうためにどこよりも分かりやすく発信しています!"}

準備が完了したのでPythonでコードを書いていきましょう!

まずはライブラリをインポートし、先ほど取得したAPIキーをセットします。

import openai
import json

openai.api_key = "<OpenAIのAPIキー>"

続いて先ほど用意したJSON形式のファイルをインポートしていきます。

path = "<JSONファイルのパス>"
training_file = openai.File.create(file=open(path, "rb"), purpose="fine-tune")

print(training_file)

続いて

# ファインチューニング
FineTune = openai.FineTune.create(training_file = training_file.id, model = "davinci")

これでファインチューニングは完了です。

あとはファインチューニングの結果を待つだけ。以下のように記載してあげるとファインチューニングの経過が出力されます。

import datetime

job_id = FineTune["id"]

events = openai.FineTune.stream_events(job_id)
for event in events:
  print(f'{datetime.datetime.fromtimestamp(event["created_at"])} {event["message"]}')

以下のように出力されます。

ファインチューニング経過

ここで得られたUploaded modelを指定して呼び出してあげるとファインチューニング後のモデルにプロンプトを投げて回答を得ることができます!

response = openai.Completion.create(
  model="<ファインチューニング後のモデル>",
  prompt="スタビジとはどんなサービスですか?"
)

print(response['choices'][0]['text'])

非常に簡単にファインチューニングが出来るのがわかったと思います!ぜひ自分のデータを色々と食わせてファインチューニングを試してみましょう!

ファインチューニング まとめ

ここまでで、AIを学ぶ上でおさえておきたいファインチューニングについて見てきました!

ちなみにファインチューニングと一緒に比較されることの多いzero shot, one shot , few shot learningについては以下の記事を参考にしてみてください!

zero shot, one shot , few shot learning について解説!ファインチューニングとの違いとは?当サイト【スタビジ】の本記事では、zero shot, one shot , few shot learningについて解説していきます!違いの若干分かりにくいファインチューニングとの違いについても解説していきますので合わせて学んでいきましょう!...

最近話題のAIについてより詳しくは当メディアが運営するスタアカの以下のコースを是非チェックしてみてください!

スタアカは業界最安級のAIデータサイエンススクールです。

スタアカトップ
【価格】ライトプラン:1280円/月
プレミアムプラン:149,800円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組みあわせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

AIデータサイエンスを学んで市場価値の高い人材になりましょう!

データサイエンスやAIの勉強方法は以下の記事でまとめています。

【5分で分かる】データサイエンティストに必要なスキルと独学勉強ロードマップ!当サイト【スタビジ】の本記事では、データサイエンティストに求められるスキルとそれを身に付けるための勉強法について徹底的にまとめていきます!入門者でも、しっかりデータサイエンティストについて理解しある程度独学で駆け出しの状態までいけることを目指します。...
AIのロードマップ
【これだけ!】AI(人工知能)の勉強ロードマップを徹底的に解説!当サイト【スタビジ】の本記事では、AIを勉強するロードマップについて徹底的に解説していきます。まずは、AIの概要について理解して統計学の基本知識・機械学習の基本知識・Pythonでの実装・インフラ周りの知識などを包括的に理解していきましょう!...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら