前回の記事はこちら
https://qiita.com/uaokit0905/items/bb0d84e801e088692f05
【機材協力について】
本記事(および本連載プロジェクト)は、株式会社ハイレゾ様よりGPUクラウドサービス「GPUSOROBAN」の計算資源(NVIDIA A100 80GB)をご提供いただき、開発・検証を行っています。
0.はじめに
こんにちは!東京大学文科3類2年で、東大AI研究会 代表の青木です。
私たち東大AI研究会は東大で活動するサークルで、1年かけて0からGPT型モデルを開発するために、毎週水曜日に勉強会を開催しています。勉強会では初心者でも理解しやすいスライドと、充実したカリキュラムを用いて開発を進めています。
株式会社ハイレゾ様は自社でGPUデータセンターを運営し「GPUSOROBAN」 というGPUのクラウドサービスを提供する会社です。高性能GPUは非常に高価で、私たちのような学生サークルが簡単に手を出せるような代物ではありません。GPUSOROBANではクラウド上で必要な期間・量だけGPUを借りることができるため、初期投資を抑えてGPUを活用し開発を行うことができます。
現在株式会社ハイレゾ様の協力のもと、25億パラメーターのGPT型モデルの実装と訓練を行っています。その名もSGT(Scratch Generative Transformer)プロジェクト!前回に引き続き、SGTプロジェクトの様子をお伝えします。
#性能テスト
モデルの性能をテストするために、G検定の模擬問題を191問用意しました。
この191問を使って、モデルの性能をテストしていきます。
評価方法
前回評価方法について触れていなかったので、ここで説明を加えます。
「何をもってG検定合格レベルの知能を持っているとするのか」は難しい部分です。G検定本番では、問題と選択肢A…/B…/C…/D…が与えられる4択問題形式です。今回のモデル性能のテストでは、「問題文と4つの選択肢を与えて、4つの選択肢のうち、問題文に続くものとして、最も自然なものを回答とする」か、という方法でテストを行います。
pre-trainingのみのモデルだと、191問の正答率は29.3%です。G検定用語を解説したデータセット200Mトークンを使って、学習率最大5e-7でCPTした結果も同じでした。191問の4択問題をランダムに答えた時に正答率が29.3%以上になる確率は約9.9%なので、ランダムに回答したときより正答率が良いとは言えません。
このあと、前回お見せした通り、最大学習率を5e-6、5e-5にあげたことで、CPTのlossが下がり、両方とも正答率も35.6%に上昇しました。(正答率が同じになったのは偶然だと思われる。)
学習率の最大5e-7でCPTして、正答率が変わらなかった時は、CPTしても正答率上がらなかったらどうしようもないじゃん!と思ったので、これには結構感動しました。やっぱCPTって意味あるんだなぁ(当然)。
CPTをおこなって正答率が上昇したのは良いですが、G検定合格レベルを目指すなら、テスト段階で正答率7割は目指したいところです。loss曲線がプラトーに近い状態でこれ以上CPTのエポック数を重ねても仕方がないので、ここからはInstruction tuningに切り替えていきます。いわば、CPTで教えられない4択問題への対応方法を学習させる、ということです。
SciQでInstruction tuning
まず使用したのはSciQデータセット。科学的な4択問題に回答・解説がついたデータセットです。https://huggingface.co/datasets/allenai/sciq G検定と同じスタイルなので、Instruction tuningにはもってこいのデータセットです。まずはこのデータセットを使って4択問題の形式で学習させる場合の効果を見てみます。
まずはSciQを、G検定の問題形式に近い形に加工していきます。
SciQの中身は以下の画像のようになっています。
「問題、誤答選択肢、誤答選択肢、誤答選択肢、解説」の順に並んでおり、すべて英語で書かれています。
日本語訳
G検定は日本語で解くので、このSciQを日本語訳していきます。gpt-oss-120bを使用します。ちなみに、日本語訳が完了した後に、日本語版SciQがあることに気が付きました。(https://huggingface.co/datasets/izumi-lab/sciq-ja-mbartm2m)
選択肢シャッフル
SciQは最後の選択肢が正答になるように、正答の位置が固定されています。これだと、テストでも最後の選択肢ばかりを選んでしまうので、位置に関わらず正しいと思える回答を選ばせるため、選択肢の位置をシャッフルします。
ラベル付け
SciQは4択問題ですが、G検定とは異なり選択肢にA/B/C/Dというラベルがついていません。G検定テストに寄せるために、シャッフル後の選択肢にラベルを付けます。
*注意
SciQは、非商用目的での利用・改変・再配布を認める「CC BY-NC 3.0」ライセンスで公開されています。本実験では、SciQの原データを日本語に翻訳し、選択肢の順序や回答形式を変更したうえで、Instruction Tuning用の学習データとして使用しました。なお、本実験は研究・教育を目的としており、SciQ由来のデータおよび学習成果を商用利用する予定はありません。
学習&検証
トークナイズして、290万トークンほどになりましたので、これを事前学習モデルに学習させます。
そして、CPT後の191問のテストの結果は....正答率32.4%!
35.6%から32.4%への3.2%分の減少です。有意に性能が下がっているわけではないですが、SciQでやっても性能向上するとは限らないことが分かりました。
G検定模擬問題でInstruction tuning
いや、G検定解かせるんだから、G検定模擬試験大量に作って、それでInstruction tuningすればいいじゃんということで、SciQの次はがっつりG検定に似た問題を作って、それで学習させてみます。
まずは学習用のG検定の模擬問題データセットを作ります。
使用するモデルはDeepSeep V4 Pro。今まで愛用していたgpt-oss-120bの5~6倍くらいの値段がかかりますが、生成する量は比較的少ないですし、Instruction tuning用のデータセットは量より質な部分があるので、高級モデルを使います。データセット生成にはお金がかかりますね。
作成したG検定模擬問題は1,126問。トークナイズして50万トークンほどです。
これを学習させて、191問の模擬問題を解かせた結果が...正答率34.0%!
うーん、これまた、Instruction tuning前よりも正答率が下がってしまいました。
Instruction tuning後のモデルで生成テストをした結果がこちらです。
— prompt —から下がプロンプトで、--- expected —から下が生成してほしい解答部分、--- generated —から下が実際の生成内容です。
「答え:」に続くように正答を繰り返してほしいところですが、promptの選択肢を繰り返してしまっています。
これでは解答条件を満たしていないので、次は解説部分を外して、シンプルな問題と回答だけのデータセットで学習させてみます。
その結果、正答率は...21.9%になりました。うーん、4択をランダムで選んだのより性能が低い可能性があるのが困ります。
ただ、A/B/C/Dの選択の分布をみてみると、極端な偏りがあるのが分かります。
モデルがAを選ぶ確率が極端に高くなっています。
もしかしたら、アルファベットごとに選びやすさのバイアスがあるのかもしれません。
そこで、選択肢からアルファベットを外して、選択肢本文だけを学習させることにします。
模擬問題191問も、アルファベットは外して、「問題と選択肢が与えられたときに、問題に対してどの選択肢が最も自然に続くのか」を計測して、その値が最も高いものを回答とします。
その結果、正答率は...23.5%(45/191)。低いです。
こちらがモデルが選んだ回答の分布です。(解答方法を変えたので、ベースラインの分布が変わっています。)
アルファベットを外した状態でも、A、つまり一番最初に提示された選択肢を選ぶ傾向が強いです。
思いっきり位置バイアスがかかっていますね。
こういう4択問題で、一番最初に提示された選択肢を選びやすくなる現象です。
位置バイアスを考慮したうえで、モデルの知識を確かめるため、選択肢の位置をずらして問題を4パターン生成し、それぞれの回答の平均値をとります。
選択肢の並び順
1.A・B・C・D
2.B・C・D・A
3.C・D・A・B
4.D・A・B・C
このように、すべての選択肢が一度は一番最初に提示されるようになっているので、位置バイアスの影響は補正される(はず)です。
この状態での正答率はこちら。
Instruction tuningの結果、正答率はまたもやなぜか下がっていますが、4順列で回答が一致する確率は上がっているので、正答だと考えた選択肢を回答する、という能力はInstruction tuningで向上しています。
ここまでいろいろInstruction tuningの手法を試してきましたが、性能が向上するどころか、むしろ下がっているものも見受けられます。
今までで一番性能、つまり正答率が向上したのがCPTでした。
正直回答方法とかより、モデルそのものの知識を増やした方が良いのかもしれません。
次の記事はこちら
https://qiita.com/uaokit0905/items/40b8b6b1203c921fe07b
まとめ
今回試した条件では、期待した正答率の向上にはつながりませんでした。
ここからはCPTの方での性能向上に戻って、考えていきます。
また2週間後に、技術記事の形で経過を報告します。
お楽しみに。
関連リンク
株式会社ハイレゾ公式サイト:
https://highreso.jp/
クラウドサービス「GPUSOROBAN」:
https://soroban.highreso.jp/
