LoginSignup
0
0

論文紹介:遺伝的アルゴリズムと知識蒸留によるコード生成のための大規模言語モデルの学習

Posted at

概要

  • 紹介する論文
  • 知識蒸留と遺伝的アルゴリズムを組み合わせた学習手法を提案
  • モデルマージなどにより、LLMによるPythonコード生成の精度を約10%向上
  • スケジューラーなどを用いず、ハイパーパラメータ(学習率)を最適化

提案手法

基本的には、遺伝的アルゴリズムのプロセス(初期化、評価、選択、交叉、突然変異)を使用する。

  1. 初期化
    • 複数の生徒LLMモデルを用意する
  2. 学習
    • 知識蒸留によって各生徒モデルを学習する
      1. 教師モデルの出力データと生徒モデルの出力データについて、KLダイバージェンス誤差を計算し学習する
      2. 正解ラベルと生徒モデルの出力データについて、交叉エントロピー誤差を計算し学習する
  3. 評価
    • 評価データセットを用いて、各生徒モデルを評価する
      1. 評価データセット内の設問を各生徒モデルに読み込ませコードを出力する
      2. 出力コードについて、評価データセット内のユニットテストにかける
      3. ユニットテストを通った数をその生徒モデルの評価とする
  4. 繁殖
    • 選択・交叉・突然変異を行い、新たな生徒モデルを生成する
    1. 選択
      • 評価が良かった生徒モデル2つを新たに生成する生徒モデルの親とする
      • 評価が悪かった生徒モデルを削除する。
    2. 交叉
      • 新たな生徒モデルのニューラルネットワークの各層について、親同士の50%の確率でどちらかの層を採用し、モデルマージを行う
      • 新たな生徒モデルの学習率についても、親同士の学習率より範囲を設定し、その中でランダムで設定する。
    3. 突然変異
      • 学習率にランダムでノイズを加える
  5. 終了
    • 学習から繁殖を繰り返し、評価や損失が一定以上変化しなくなったら、終了する。

実験

概要

  • 生徒モデルには、codegen-350M-monoを使用する
  • 教師モデルには、phi-2を使用する
  • G5.2xlargeインスタンス(NVIDIA A10 Tensor Core GPU✕1)を使用する
  • 評価データセットはMBPP、訓練データはCodeExercise-Python-27kを使用する

結果

  • 18時間の学習で、42回学習〜繁殖を繰り返し終了した
  • HumanEval pass@1にて12.8%から14%に改善した
  • 前半は学習率の高い個体が、後半は学習率の低い個体が良い精度を残した。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0