---
title: 【大規模言語モデル入門】５章5.4-5.6
tags: 
author: [京都大学人工知能研究会KaiRA](https://convert.docswell.com/user/kyoto-kaira)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LJLK424V7R.jpg?width=480
description: 【大規模言語モデル入門】５章5.4-5.6 by 京都大学人工知能研究会KaiRA
published: October 31, 24
canonical: https://convert.docswell.com/s/kyoto-kaira/ZXEWXN-2024-10-31-222852
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LJLK424V7R.jpg)

2024年度後期輪読会 #5（2024/10/31）
大規模言語モデル入門 5.4-5.6
大規模言語モデルのファインチューニング
京都大学工学部理工化学科 1回生
岡本 和優
0


# Page. 2

![Page Image](https://bcdn.docswell.com/page/47M2K8KN7W.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
1


# Page. 3

![Page Image](https://bcdn.docswell.com/page/P7RMX5X4J9.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
2


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PJXV6K6ZEX.jpg)

5.4.1 自然言語推論モデルの実装
自然言語推論モデルの概要
JNLI（Japanese Natural Language Inference）は2つの文の推論関係を判定するタスク。
データセットは2つの文と，その関係を表す3種類のラベル（含意・矛盾・中立）を持つ。
文を2つ連結して入力している点以外は，MARC-jaの実装と同じ。
3


# Page. 5

![Page Image](https://bcdn.docswell.com/page/3JKQ151VJD.jpg)

5.4.1 自然言語推論モデルの実装
データセットの前処理
単一の文書を分類するときと違うのは，tokenizerにテキストが2つ渡されている点。
[SEP]を挟んで連結された2つのテキストのトークンが出力される。
4


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE3PQKNQJ5.jpg)

5.4.1 自然言語推論モデルの実装
訓練したモデルを読み出して評価する
モデルとトークナイザーを読み込み，trainer.evaluate()を実行することで，
事前に訓練したモデルを読み出し，指定したeval_datasetを用いて評価することができる。
5


# Page. 7

![Page Image](https://bcdn.docswell.com/page/8EDL93WWJG.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
6


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V7P2Z49X78.jpg)

5.4.2 意味的類似度計算モデルの実装
意味的類似度計算モデルの概要
JSTS（Japanese Semantic Textual Similarity）は2つの文の類似度を算出するタスク。
回帰タスクである点以外はJNLIの実装と同じ。
モデルを定義するときに，AutoModelForSequenxeClassificationを用いて，
problem_type=&quot;regression&quot;を指定する。
7


# Page. 9

![Page Image](https://bcdn.docswell.com/page/2JVDWXM3JQ.jpg)

5.4.2 意味的類似度計算モデルの実装
回帰タスクの評価
回帰タスクは正解率でモデルを評価することができないから，次の2つの相関係数を用いる。
• ピアソンの相関係数
• いわゆる普通の相関係数。2つの変数間の線形相関を測定する。
σ𝑁
ො𝑖 − 𝑦തො (𝑦𝑖 − 𝑦)
ത
𝑖=1 𝑦
r𝑝𝑒𝑎𝑟𝑠𝑜𝑛 =
2 𝑁
ത
σ𝑁
σ𝑖=1(𝑦𝑖 − 𝑦)
𝑦
ො
−
𝑦
ො
ത 2
𝑖=1 𝑖
• スピアマンの順位相関係数
• 2つの変数間の順位の関係から算出する（線形関係でなくてもよい）。
• ピアソンの相関係数と異なり，2つの変数の分布を仮定する必要がない。
• ピアソンの相関係数と同様に，-1から1の値をとる。
6 σ𝑁
ො𝑖 ))2
𝑖=1(𝑟𝑎𝑛𝑘 𝑦𝑖 − 𝑟𝑎𝑛𝑘(𝑦
𝑟𝑠𝑝𝑒𝑎𝑟𝑚𝑎𝑛 = 1 −
𝑁(𝑁 2 − 1)
8


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5EGYDVGYEL.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
9


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JQM16X67P.jpg)

5.4.3 多肢選択式質問応答モデルの実装
多肢選択式質問応答モデルの概要
JCommonsenseQAは5択のクイズを用いた常識推論のタスク。
問題文の選択肢のペアを連結させて文を作り，それぞれの妥当性を表すスコアを計算し，
最も高いスコアの選択肢を回答として選択する。
10


# Page. 12

![Page Image](https://bcdn.docswell.com/page/K74VR46MJ1.jpg)

5.4.3 多肢選択式質問応答モデルの実装
データセットの前処理
問題文と選択肢のペアを連結させる。
問題文を選択肢の数だけ複製して
作成したリストと，選択肢を含むリスト
をtokenizerに与えて連結させている。
推論時にも使い回すために，正解ラベル
が無くても使用できるよう定義している。
11


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LJ13Q4VY7G.jpg)

5.4.3 多肢選択式質問応答モデルの実装
ミニバッチ構築処理
1つの入力（問題）が複数の系列（選択肢の文章）を持っているから，
各選択肢を別々の系列として入力するために，バッチサイズ×選択肢数×最大系列長
のテンソルを作ることになる。
そのために，すべての系列を1つのリストに
まとめてパディングを行って，
（バッチサイズ・選択肢数）×最大系列長
のテンソルを作ってから，
バッチサイズ×選択肢数×最大系列長
のテンソルに変換する。
12


# Page. 14

![Page Image](https://bcdn.docswell.com/page/GJWPMXL172.jpg)

5.4.3 多肢選択式質問応答モデルの実装
モデルの定義と推論
モデルはAutoModelForMultipleChoice
を用いて読み込む。
多肢選択式質問応答のためのpipelineは
実装されてないため，自ら定義する必要がある。
訓練のときに用いた，前処理とミニバッチ構築の
関数を利用する。
モデルに入力するテンソルは，
モデルが使用するデバイス上に移動しておく。
13


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4EZKQ6MXE3.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
14


# Page. 16

![Page Image](https://bcdn.docswell.com/page/Y76Q62NP7V.jpg)

5.5 メモリ効率の良いファインチューニング
自動混合精度演算（automatic mixed precision：AMP）
FP32ではなくFP16でパラメータや計算結果を表現すると，メモリ使用量が半分に抑えられる。
自動混合精度演算は，FP32とFP16を使い分けることで精度と効率を両立させた。
パラメータ更新用のFP32表現（Master-Weights）を保持することで，
FP32を用いたときと同等の精度で学習が進められる。
図は[1710.03740] Mixed Precision Trainingから。
15


# Page. 17

![Page Image](https://bcdn.docswell.com/page/G75R625PE4.jpg)

5.5 メモリ効率の良いファインチューニング
FP16でパラメータを更新すると精度が落ちる理由
FP16だと重みがうまく更新できない。
• 重みの更新値がFP16で表現できる最小値（2−24 ）を下回り0になる。
• 重みの更新値と比べて，重みの値が大きすぎる（2048倍以上）場合は重みが更新されない。
通常だと重みの勾配には2−24 を下回る値が含まれる。
AMPでは誤差逆伝播の計算前に損失を定数倍することで，
勾配がこれを下回らないように工夫している
（損失スケーリング（loss scaling））。
図は[1710.03740] Mixed Precision Trainingから。
16


# Page. 18

![Page Image](https://bcdn.docswell.com/page/9J2DM4NZJR.jpg)

5.5 メモリ効率の良いファインチューニング
勾配累積（gradient accumulation）
小さなバッチサイズで計算した勾配を集約することで，実質のバッチサイズを大きくできる。
パラメータを更新せずに，各バッチで計算される勾配を足し合わせてから，まとめて更新する。
勾配累積を用いない場合と勾配のスケールを
合わせるために，累積回数で損失を割っている。
これにより，得られる勾配は各バッチで計算した
勾配の平均に相当する。
17


# Page. 19

![Page Image](https://bcdn.docswell.com/page/DEY2XMPNEM.jpg)

5.5 メモリ効率の良いファインチューニング
勾配チェックポインティング（gradient checkpointing）
誤差逆伝播に必要な途中の計算結果を間引き，必要になれば再度計算することで，
計算速度は遅くなるがメモリ消費量を抑えている。
PyTorchではtorch.utils.checkpoint.checkpointという関数で実現できる。
transformersのBERTやRoBERTaなどの
モデルではTrainingArgumentsの引数
としてgradient_checkpointing=True
を指定することで使用できる
18


# Page. 20

![Page Image](https://bcdn.docswell.com/page/VJN81W5V78.jpg)

5.5 メモリ効率の良いファインチューニング
LoRA（Low-Rank Adaptation）
線形層のパラメータの事前学習済みモデルからの差分Δ𝑊を， Δ𝑊 = 𝐴𝐵と2つの低ランク
行列の積で表し，この𝐴と𝐵を学習させることで学習するパラメータを削減している。
෡
෡
推論時には𝑊とΔ𝑊を足し合わせて1つのパラメータ𝑊とし，ℎ
= 𝑊𝑥と出力を計算する。
Δ𝑊(𝐷𝑖𝑛 × 𝐷𝑜𝑢𝑡 )が𝐴(𝐷𝑖𝑛 × 𝑟)と𝐵 𝑟 × 𝐷𝑜𝑢𝑡
の積で表されている。
Δ𝑊が動く範囲が制限されるから，
モデルが訓練セットに過剰に適合
することが抑えられる。
19


# Page. 21

![Page Image](https://bcdn.docswell.com/page/YE9K5XYVE3.jpg)

5.5 メモリ効率の良いファインチューニング
peftライブラリでLoRAをtransfomersと組み合わせて使用する
peft（Parameter-Efficient Fine-Tuning）ライブラリを用いることで簡単にLoRAを使用できる。
𝛼
𝑟
LoRA層の出力が𝛼と𝑟によりh = 𝑊𝑥 + ∆𝑊𝑥でスケールされている。
Transformerの場合，注意機構の線形層にのみLoRAを適用することが多い。
20


# Page. 22

![Page Image](https://bcdn.docswell.com/page/GE8RY264JD.jpg)

アジェンダ
◼ 自然言語推論モデルの実装
◼ 意味的類似度計算モデルの実装
◼ 多肢選択式質問応答モデルの実装
◼ メモリ効率の良いファインチューニング
◼ 日本語大規模言語モデルの比較
21


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LELK429VJR.jpg)

5.6 日本語大規模言語モデルの比較
LUKE（Language Understanding with Knowledge-based Embeddings）
LUKEはエンティティ情報を取り入れたエンコーダ構成のTransfoemer。
Wikipediaの記事を1つのエンティティとし，その集合で定義されるエンティティ語彙をもつ。
テキスト中にエンティティへの言及があれば，そのエンティティも入力に追加している。
これにより，テキストだけでなく，エンティティの文脈化トークン埋め込みを得られる。
事前学習ではマスク言語モデリングに加え，マスクされたエンティティトークンを予想させる。
図は[2010.01057] LUKE: Deep Contextualized Entity Representations with Entity-aware Self-attentionから。
22


# Page. 24

![Page Image](https://bcdn.docswell.com/page/4JM2K8ZNJW.jpg)

5.6 日本語大規模言語モデルの比較
DeBERTa（Decoding-enhanced BERT with disentangled attention）V2
DeBERTaはBERTのアーキテクチャを以下の点で改良したもの。
• Disentangled Attention
• 注意機構の重みを，トークン埋め込み間，位置埋め込み間，トークン埋め込みと位置埋込間
に分けて計算したものを足し合わせる。
• 𝑖番目のトークンは 𝐻𝑖 と{𝑃𝑖|𝑗 }の2つのベクトルによって表される。
𝑇
𝑇
𝐴𝑖,𝑗 = 𝐻𝑖 , 𝑃𝑖|𝑗 × {𝐻𝑗 , 𝑃𝑗|𝑖 }𝑇 = 𝐻𝑖 𝐻𝑗𝑇 + 𝐻𝑖 𝑃𝑗|𝑖
+ 𝑃𝑖|𝑗 𝐻𝑗𝑇 + 𝑃𝑖|𝑗 𝑃𝑗|𝑖
• Enhanced Mask Decoder
• 事前学習時にマスク言語モデリングでトークンを予測する出力層の埋め込みに，
絶対位置を表す埋め込みを加えている。
• nGiE（nGram induced input encoding）（V2で追加）
• Transformerエンコーダの第1ブロックの出力の後に畳み込み層を加える。
• これにより近接トークンとの依存関係をより良く学習できる。
23


