18.8K Views
August 22, 23
スライド概要
言語処理技術セミナー2022での講演資料です
- ソフトウェアエンジニア - Kaggler
Transformersによる 自然言語処理の実践 Preferred Networks エンジニア 林孝紀 2022/10/28 1
自己紹介 ● ● ● 林 孝紀(はやし たかのり) Indeed(2016 - 2021)=> Preferred Networks(2021 - 現在) 世界最大規模の機械学習コンペティションプラットフォームKaggleで活動 ○ 自然言語処理(NLP)を扱うコンテストでの主な成績 ■ Jigsaw Unintended Bias in Toxicity Classification(3165チーム中3位) ■ chaii - Hindi and Tamil Question Answering (943チーム中8位) ■ Text Normalization Challenge - English Language (260チーム中5位) 2
本講演の流れ 1. 導入: Hugging Face (🤗) Transformersとは? ○ 2. 3. Transformerの基礎知識 Transformerによる事前学習・ファインチューニング ○ ○ 4. (デモ1: Google Colab) Hugging Face (🤗) Transformersを使ってみる (デモ2: Google Colab)GPTを使ってテキストを生成してみる (デモ3: Google Colab)BERTを用いたテキスト間類似度の判定 Transformerモデル使用のTips 本講演で主に対象とする人 ● これからTransformerを基盤とするモデルを使ってみようと思っている人 ● Pythonに少し触れたことがあり、深層学習についての資料をちょっと見たことはあるものの、 実際に手を動かしたことはあまりない人 3
Hugging Face Transformersとは?① 背景: Transformerモデルの台頭 ● ● ● 2017年に「Attention Is All You Need」という有名論文 ([Vaswani+ 2017]) で Transformerというニューラルネットワークのアーキテクチャが提案された 2022年現在、高精度な自然言語処理を行う上で、Transformerを基盤としたモデル は不可欠なものになっている Transformerを基盤としたモデルが大量に開発されている https://huggingface.co/course/chapter1/4 より引用 4
Transformerの応用例: Google 検索 “Understanding searches better than ever before”(2019年10月の記事)より引用 BERT(Transformerに基づくモデル)により検索クエリの解釈能力は大きな飛躍した より強力なモデル MUM(Multitask Unified Model)も導入予定 (”MUM: A new AI milestone for understanding information” ) 5
Transformerの応用例: GitHub Copilot https://github.com/features/copilot より引用 6
Hugging Face Transformersとは?② ● Hugging Face (🤗) Transformersとその周辺のエコシステムは、Transformerを 基盤とするモデルの効率的な活用を可能にしている 昔 各モデルについてそれぞれに動かし 方を調べる必要があり大変… 今 🤗 Transformers によって、統一され た方法で簡単に各モデルを試せる! https://huggingface.co/course/chapter1/4 より引用 7
🤗 Transformersのエコシステム 推論API Hugging Face Hub モデル データセット ドキュメント Hubに公開されている モデルやデータセットを利用 評価指標 AutoTrain 作成したモデルやデータセットを登録 ライブラリ Tokenizers Transformers Accelerate Datasets 今回触れるのは 赤文字の部分 8
デモ: 🤗 Transformersを使ってみる 9
Transformerの基礎知識 10
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い この映画は面白い テキスト 11
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い 1. 入力テキストをトークンに分割 この映画は面白い この 映画 は テキスト 面白い トークン (単語・文字・サブワードなど) 12
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い 1. 2. 入力テキストをトークンに分割 (単語・文字・サブワードなど) この映画は面白い この 映画 は テキスト 面白い トークン ベクトル 各トークンをベクトル表現に変換 (埋め込みベクトル) 13
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い 1. 2. 入力テキストをトークンに分割 この 映画 は (単語・文字・サブワードなど) テキスト 面白い トークン ベクトル 各トークンをベクトル表現に変換 (埋め込みベクトル) 3. この映画は面白い ニューラルネットワークで文脈を考慮したベクト (周辺のトークン) ル表現を計算 ニューラルネット① 文脈を 考慮した ベクトル 14
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い 1. 2. この映画は面白い この 入力テキストをトークンに分割 映画 は (単語・文字・サブワードなど) テキスト 面白い トークン ベクトル 各トークンをベクトル表現に変換 (埋め込みベクトル) ニューラルネット① 3. ニューラルネットワークで文脈を考慮したベクト (周辺のトークン) ル表現を計算 4. 文脈を考慮したベクトルから出力を計算 文脈を 考慮した ベクトル ニューラルネット② タスクの出力 例: 入力テキストは positive・ negativeどっち(感情分析) 例: このテキストの次に出現 する単語は?(生成) 15
ニューラルネットワークによる自然言語処理 以下のような手順で処理することが多い 1. 2. この映画は面白い この 入力テキストをトークンに分割 映画 は (単語・文字・サブワードなど) テキスト 面白い トークン ベクトル 各トークンをベクトル表現に変換 (埋め込みベクトル) ニューラルネット① 3. ニューラルネットワークで文脈を考慮したベクト (周辺のトークン) ル表現を計算 4. 文脈を考慮したベクトルから出力を計算 文脈を 考慮した ベクトル ニューラルネット② タスクの出力 2018年以降、ニューラルネット①の部分で、 Transformerが頻繁に利用されている 例: 入力テキストは positive・ 例: このテキストの次に出現 negativeどっち(感情分析) する単語は?(生成) 16
Transformer [Vaswani+ 2017] ● 機械翻訳タスク用のアーキテクチャ ○ ○ 当時主流だった畳み込みや再帰を使用せずAttention機構だけを使用 Encoder-decoder構造(これはTransformer以前のモデルと同じ) 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm Add & Norm Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention ×6 これ は ペン 入力文(翻訳元) です This is 出力文(翻訳先) ×6 a 17
Attention機構 ● Attention機構は連続的な辞書としてイメージすることができる 離散的な辞書 (Pythonのdictなど) 連続的な辞書 (attention機構のイメージ ) query keyとqueryの 一致 (1)・不一致 (0) key 1 value 1 ×0 ● key 2 + value 2 ×1 key 3 + value 3 ×0 key 4 + value 4 ×0 = value 2 query keyとqueryの関連度 0.1 0.7 0.2 0.0 key 1 key 2 key 3 key 4 value 1 × 0.1 + value 2 × 0.7 + value 3 × 0.2 + value 4 × 0.0 = 各value の重み付 き平均 Attention機構を用いることで、queryとするトークン と他のトークン (key) の関連度 を計算し、対応するベクトル (value) の重み付き和を求めることで、そのトークンの 文脈を考慮したベクトルを獲得する 18
Transformerのattention機構 query i ● query・key・valueをそれぞれ ベクトルで表現する ○ ○ ○ ● query: key: value: 0.0 key 1 value 1 × key 2 + value 2 × key m + + value m × 0.0 = 各value の重み付 き平均 queryとkeyのベクトルの間で内積を元に関連度と出力を計算 ○ i番目のqueryとj番目のkeyの関連度を求める ● s sssで割って正規化 ○ ● ○ Softmax関数の適用で queryに対する関連度の合計を 1に 関連度によるvalueの重み付き和でqueryに対応する出力を計算 19
Self-attention機構 Transformerのattentionでは、query・key・valueをそ れぞれ入力のベクトル列 から計算 (self-attention) ○ ○ ○ s s 各トークンの新しい表 現ベクトル Attention機構 query key value トークンn トークン2 (行列Wq、Wk、Wvを学習する) トークン1 ● 各トークンの元々の表 現ベクトル 20
Transformerのアーキテクチャ (encoder) 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a 21
Transformerのアーキテクチャ (encoder) 複数のself-attention機構を 横に並べて表現力を強化 (multi-head self-attention) 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a 22
Transformerのアーキテクチャ (encoder) 複数のself-attention機構を 横に並べて表現力を強化 (multi-head self-attention) 2つの典型深層学習手法 で学習を容易にする ● Skip-connection (出力に入力を加算) ● Layer normalization 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a 23
Transformerのアーキテクチャ (encoder) 複数のself-attention機構を 横に並べて表現力を強化 (multi-head self-attention) 2つの典型深層学習手法 で学習を容易にする ● Skip-connection (出力に入力を加算) ● Layer normalization 各トークンのベクトルを 前向きネットワークで変換 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a 24
Transformerのアーキテクチャ (decoder) 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention Add & Norm ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a 25
Transformerのアーキテクチャ (decoder) 次のトークンは? Decoder Add & Norm Encoder Multi-Head Attention ×6 Add & Norm ×6 Feed Forward Feed Forward Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention これ は ペン 入力文 です This is 出力文 a Attentionの関連度の計算時にマスクを かけ、自分より後ろのトークンの情報を 見ることを防ぐ 黒い部分のトークン 同士の関連度を 0に する This is a This is a Add & Norm 26
Transformerのアーキテクチャ (decoder) 次のトークンは? Attentionの計算時にkeyとvalueを encoderのベクトル列から取得し、 queryをdecoderのベクトル列から取 得することで、2つの系列の情報を統 ×6 合する (cross-attention) Decoder Add & Norm Multi-Head Attention Add & Norm ×6 Add & Norm Add & Norm Add & Norm Multi-Head Attention Masked Multi-Head Attention は ペン 入力文 です This is 出力文 value Dec これ a Attentionの関連度の計算時にマスクを かけ、自分より後ろのトークンの情報を 見ることを防ぐ key Attention Feed Forward Enc Feed Forward query 黒い部分のトークン 同士の関連度を 0に する This is a This is a Encoder 27
Transformerのトークン化・トークン埋め込み ● Transformerではサブワード単位にトークン化する ○ ○ ● Byte-Pair Encoding (BPE) [Sennrich+ 2016] を使用 頻出単語は1つのトークンで表し珍しい単語は複数のサブワードで表現することで、限ら れた語彙数で多くの単語をカバーする ■ 例: “He likes playing tennis” => [“He”, “likes”, “play”, “##ing”, “tennis”] 入力トークンを埋め込みベクトルに変換するとき位置情報を付与する ○ Attention機構は位置情報を考慮しないので入力に位置情報を持たせる これ は ペン です 入力ベクトル トークン埋め込み sin・cos関数を 使って定義 位置埋め込み 28
Transformerによる 事前学習・ファインチューニング 29
転移学習 (transfer learning) タスクA (転移元タスク・事前学習タスク ) 数千万文~ データセットA データセットB 共通の ニューラルネットワーク 学習済みモデル をコピー 共通の ニューラルネットワーク タスクA用の ニューラルネットワーク 大規模データから 得た知識を流用 タスクB用の ニューラルネットワーク 予測A 事前学習(pre-training) ● タスクB (転移先タスク・下流タスク ) 数千~ 数万文 予測B ファインチューニング( fine-tuning) NLP分野の転移学習はTransformer出現以前から行われていたが、 記憶能力に 優れるTransformerの利用によって大きく性能が向上した 30
Transformerに基づくモデル ● 使用しているTransformerの部位でおおまかに分類できる Transformer encoder Encoder部分のみを使用 ● BERT ● RoBERTa ● DeBERTa 入力テキストに対する予 測が得意 Transformer decoder 両方を使用 ● T5 ● BART (本講演では扱わない) 入力テキストで条件付け られた生成が得意(翻訳・ 要約など) Decoder部分のみを使用 ● GPT ● GPT-2 ● GPT-3 テキストの生成が得意 31
Transformerに基づくモデル ● 使用しているTransformerの部位でおおまかに分類できる Transformer encoder Encoder部分のみを使用 ● BERT ● RoBERTa ● DeBERTa 入力テキストに対する予 測が得意 Transformer decoder 両方を使用 ● T5 ● BART (本講演では扱わない) 入力テキストで条件付け られた生成が得意(翻訳・ 要約など) Decoder部分のみを使用 ● GPT ● GPT-2 ● GPT-3 テキストの生成が得意 32
Decoderベースのモデル GPT [Radfold+ 2018] (Generative Pre-trained Transformer) ● 言語モデリングによる事前学習 ○ ○ テキストを前から順番に読んで、次に来るトークンを予測するタスク 正解ラベルをデータ自体から自動的に獲得し学習することが可能(自己教師あり学習 ; self-supervised learning) ⇨ 大規模なコーパスを用いて学習できる 次のトークンは? … Add & Norm Transformerのdecoder同様に 前のトークンだけを見る Feed Forward Add & Norm × 12 ● Masked Multi-Head Attention … 入力テキスト ● 様々なジャンルの本7000冊 のデータセットを利用 8GPUで1ヶ月学習 … 33
GPTのファインチューニング ● 下流タスクの入力を学習済みGPTを利用可能な表現に変換して利用する ○ 出力 文ペア分類の例 … 例: ● GPT ● … </s> startトークン ● テキスト1 $ 区切りトークン テキスト2 テキスト1とテキスト2は同 じ意味? テキスト1からテキスト2は 推論可能? </e> endトークン ファインチューニングは事前学習と比べて計算時間は大幅に少ない ○ 1GPUで数分で学習できるタスクもある 34
デモ: GPTを使ってテキストを生成してみる 35
より強力な生成モデル GPT-2 [Radford+ 2019] / GPT-3 [Brown+ 2020] ● ● GPT(パラメータ数1.17億)を巨大化したモデルGPT-2(パラメータ数15億)・GPT-3 (パラメータ数1750億)のテキスト生成能力は非常に強力 GPT-3は非常に強い生成能力があり、教師データが少ない場合や一切ない場合で も、高い精度の予測を行うことが可能 (zero-shot / few-shot learning) 英仏翻訳の例( [Brown+ 2020]より) few-shot zero-shot 生成する 36
Transformerに基づくモデル ● 使用しているTransformerの部位でおおまかに分類できる Transformer encoder Encoder部分のみを使用 ● BERT ● RoBERTa ● DeBERTa 入力テキストに対する予 測が得意 Transformer decoder 両方を使用 ● T5 ● BART (本講演では扱わない) 入力テキストで条件付け られた生成が得意(翻訳・ 要約など) Decoder部分のみを使用 ● GPT ● GPT-2 ● GPT-3 テキストの生成が得意 37
Encoderベースのモデル BERT [Devlin+ 2019] (Bidirectional Encoder Representations from Transformers) ● 事前学習で2つのタスクを同時に解く(マルチタスク学習) ○ マスク言語モデル (masked language modeling; MLM) ■ 一部の単語をマスクして入力し、元々の単語を予測させる穴埋め問題 最初のデモの例: "東北大学で[MASK]の研究をしています。" [MASK] は元々どんな単語? 各単語の文脈付きベクトルを計算するときに前後両方にある単語を見ることができ る(GPTでは前方にある単語しか見れなかった) 次文予測タスク (next sentence prediction; NSP) ■ 2つの文AとBを入力し、文書内でBがAの直後の文だったかを予測 ■ ○ 38
元々のトークンは? NSP 元々のトークンは? Add & Norm Feed Forward × L (= 12, 24) Add & Norm BERT Multi-Head Attention 今日 [CLS]トークン [CLS] は [MASK] 天気 明日 [SEP]トークン [SEP] も 元々のトークンを隠す ● いい [MASK] [SEP] [SEP]トークン 元々のトークンを隠す BERTの入力の埋め込みベクトルは3つの埋め込みの和で計算する ○ ○ ○ トークン埋め込み 位置埋め込み セグメント埋め込み(1つ目と2つ目どちらの文か?) 39
各種タスクのBERTのファインチューニング① 文ペア分類 テキスト分類 出力 出力 … … [CLS] BERT BERT … … テキスト1 テキスト2 [SEP] [SEP] 質問応答(区間抽出) [CLS] テキスト トークン毎のタグ付け(固有表現抽出など) 区間の最初(or 最後)のトークンか? 出力 … … … … [CLS] テキスト1 質問 BERT … [SEP] … … BERT … [SEP] テキスト2 … [SEP] ここから答えを探す [CLS] テキスト [SEP] 40
各種タスクのBERTのファインチューニング② ● 9つのNLPタスクからなるGLUEベンチマークでGPTを超えるスコアを達成 2種類のサイズの BERTモデル 層数 入出力ベクトルの次元数 パラメータ数 BERT (base) 12 768 110M BERT (large) 24 1024 340M 41
デモ: BERTを用いたテキスト間類似度の判定 42
Transformerモデル使用のTips 1. 2. 3. 限られたGPUメモリで学習するには? 長いテキストを扱うためには? 高精度を達成するには? 43
限られたGPUメモリで学習するには?① ● ● BERTなどを自分でファインチューニングしようとすると、GPUメモリ不足によるエ ラー ”RuntimeError: CUDA out of memory. …” をほぼ必ず見ることになる。 原因の候補としては次のようなものが挙げられる a. b. c. d. 大きなモデルを使っている 長いテキストを扱っている バッチサイズが大きすぎる GPUメモリを使用しているリソースが解放されないまま残っている 44
限られたGPUメモリで学習するには?② 精度を落とさずバッチサイズを減らす ● ● ● 学習時のGPUメモリ使用量はバッチサイズにおおよそ比例するので、バッチサイズ を減らせばGPUメモリ使用量は減る 一方でバッチサイズを小さくしすぎると学習が不安定になる 勾配累積 (gradient accumulation) や分散学習で実効的なバッチサイズ (effective batch size) を保つことができる 勾配累積 ● ● 複数バッチ分の勾配を蓄積してから重みを更新 実効的なバッチサイズを(蓄積回数)倍にする 分散学習(データ並列) ● ● 複数GPUでそれぞれ勾配を計算し、各 GPUで 得られた勾配を集計して重みを更新 実効的なバッチサイズを( GPU数)倍に 45
限られたGPUメモリで学習するには?③ バッチサイズを1にしてもメモリが足りない場合 ● ● モデルを小さくする・入力長を小さくする モデルの一部あるいは全部をfreezeしてファインチューニングする ○ ● 分散学習(モデル並列) ○ ● 入力に近い部分のパラメータをfreeze(更新せず固定)することで、計算グラフを保持する 必要がなくなり消費メモリ量が減る 巨大なモデルを複数GPUで分割して保持し計算を行う Gradient checkpointing ○ ○ 前向き計算時に計算結果全体ではなく一部のみ保持する ■ 誤差逆伝播のとき、残りの部分を保持した値から再計算する 🤗 TransformersではTrainingArgumentsから使用の有無を指定できる 46
長いテキストを扱うためには?① 問題点 & 素朴な方法 ● 通常のBERTモデルは512トークン以下の入力しか想定していない ○ ● 公開されているBERTにもっと長い入力を与えるとエラーになる 素朴な方法 ○ ○ テキストを切り落として無理やり512トークンに収める モデルの入力とするテキストの範囲をスライドさせながら順番にモデルに与える ■ イメージ: input_ids[ 0: 500]をモデルに与える input_ids[400: 900]をモデルに与える input_ids[800:1300]をモデルに与える … ○ 相対的な位置関係のみを考慮するモデル(後述するDeBERTaなど)を使用する 47
長いテキストを扱うためには?② 長い系列を扱うことが得意なモデルを利用する ● Longformer [Beltagy+ 2020] やBig Bird [Zaheer+ 2020] は各トークンに対して attentionの計算対象となるトークンを絞ることでself-attentionの計算時に扱うトー クン対の個数をO(長さ^2)からO(長さ)に落としている 色のついているトークン間のみを attentionの計算対象にする (図は[Zaheer+ 2020]から引用) ○ ○ ● 計算時間とGPU使用メモリを O(長さ^2)からO(長さ)に落とすことに成功 Hugging Face Hubに登録されているLongformerやBig Birdは通常のモデルの8倍の系 列長 (4096) を扱うことができる Attentionの計算を効率的に行うTransformer (efficient transformer) に関して他 にも様々な研究が行われている [Tay+ 2022] 48
高精度を達成するには?① より強力なモデルを使用する ● 同じモデルの種類ならば大きなモデルの性能が高い ○ ○ ● 例: BERT (large) > BERT (base) 一方で、大きなモデルは多くの計算資源を要求し、訓練も難しい傾向がある 同等のサイズでBERTより高精度のモデルも提案されている ○ ○ 以下のモデルがよく使用されている ■ RoBERTa [Liu+ 2019]: 主に事前学習方法を改善 ■ DeBERTa [He+ 2021]: 主に位置の情報の取扱いを改善 英語タスクでファインチューニングを行った場合、 DeBERTa-v3 > RoBERTa >= BERT という印象 49
高精度を達成するには?② 追加の事前学習 & 追加のファインチューニング ● 解きたい下流タスクと同じ種類のタスクに対してファインチューニング済みのモデル を使用することで精度が改善できることが多い ○ ● 英語の質問応答タスクを扱いたい場合、SQuAD2.0(有名な質問応答データセット)でファ インチューニングRoBERTaをファインチューニングした方が、通常のRoBERTaをファイン チューニングするよりも高い精度を期待できる 事前学習済みのモデルに対して、下流タスクと同じドメインのデータセットを用いて 追加の事前学習を行うことで、精度を改善できることがある [Gururangan+ 2020] 50
高精度を達成するには?③ アンサンブル学習 ● 複数モデルの出力を合わせることで単一のモデルより高い精度を実現する a. b. ● 複数のモデルの出力の(加重)平均を取る(averaging) ■ 異なる乱数シードで学習したモデル同士でも精度は向上する (seed averaging) ■ 予測の傾向が異なるモデル同士を組み合わせた方が高精度になりがち スタッキング(stacking) ■ 検証セットに対する各モデルの出力を入力とする2段階目のモデルを学習 ■ 過学習のリスクはあるが、上手く学習できればaveragingより高精度 ■ 詳細は「Kaggleで勝つデータ分析の技術」に アンサンブルに使用するモデルを増やせば当然計算コストは増加する 51
関連書籍など ● 機械学習エンジニアのためのTransformers ○ ○ ● IT Text 自然言語処理の基礎 ○ ● 🤗 Transformersの開発者によって執筆 本格的に 🤗 Transformersを使うなら目を通すべき NLPの基礎知識を幅広くカバーしつつ Transformerに関しても詳しく書かれている 🤗 Course (英語) ○ 本家によるチュートリアル 52
宣伝 ● Kaggle(機械学習コンテスト)に関する本を出します 『Kaggleに挑む深層学習プログラミングの極意(仮)』(講談社サイエンティフィック) 小嵜耕平・秋葉拓哉・林孝紀・石原祥太郎 ニューラルネットワークが使用される分野(画像・NLP)において、 高精度のモデルを構築する方法を実例を交えながら紹介します 53
54
残りのトピック 55
関連モデル: RoBERTa [Liu+ 2019] (Robustly Optimized BERT Pretraining Approach) ● モデルのアーキテクチャはBERTと全く同じだが、事前学習において以下の改善を 導入し高精度を達成している a. b. c. d. マスクするトークンを動的に選択する 事前学習タスクから次文予測タスクを除外する ミニバッチのサイズを増やす(256 => 8129) 文字ではなくバイト単位のBPEを使用(語彙数も30Kから50Kに増やす) 56
[発展] 関連モデル: DeBERTa [He+ 2021] (Decoding-Enhanced BERT with Disentangled Attention) ● トークンの内容の埋め込みと位置の埋め込みを別々に扱う (disentangled attention) ○ ○ ● ● attentionの関連度の計算にはトークン対の相対的な位置関係を見る [MASK] を予測する部分で絶対的な位置の情報を補足する (enhanced mask decoder) SuperGLUE (GLUEの難しい版) ベンチマークのスコアで初めての人間超え 継続して改善が行われている ○ ○ DeBERTa V2(トークン化の改善など) DeBERTa V3(事前学習タスクの改善など) 57
高精度を達成するには?④ [発展] 敵対的学習① ● Sharpness-aware Minimization (SAM) [Foret+ 2021] ○ ○ ○ 局所解の周りの平坦だとモデルの性能が良くなることが知られている 下図左のような局所解ではなく下図中央のような局所解を見つけたい SAMでは敵対的摂動を重みに加えて勾配を計算することで平坦な局所解を探す ■ (ステップ1)今の重み w_t の周辺で損失最大の重み w_adv を求める ■ (ステップ2)w_adv における勾配を用いて w_t を更新する ステップ1 ステップ2 図は [Foret+ 2021] より引用 58
高精度を達成するには?④ [発展] 敵対的学習② ● 敵対的学習はNLPタスクのファインチューニングでも有効 [Bahri+ 2022] ○ ○ ○ ○ ○ ○ ● s s s s s s NLPを題材とした機械学習コンテストでは、SAM自体ではなく他の手法([Wu+ 2020])を元にした実装の利用が多い ○ 例: Feedback Prize - Evaluating Student Writingの1位チームのコード 59
自然言語処理以外のモデル① [発展] Vision Transformer [Dosovitskiy+ 2021] ● ● 画像をパッチに分割し、各パッチの ピクセルの値から入力ベクトルを作成 3億枚の画像からなるデータセット (JFT-300M)で事前学習(教師あり)する ことで既存手法より高精度を実現 ○ ● 逆にそれより小さいデータセットだと既存 手法に負けている 後続研究では、画像に特化した形で Transformerを組み込むことで精度を改善 している [Liu+ 2021] 60
自然言語処理以外のモデル② [発展] wav2vec [Baevski+ 2020] ● ● 畳み込みニューラルネットワーク(CNN)とTransformer encoderを組み合わせ、対 照学習(contrastive learning)のテクニックを利用することで、音声データに対する 自己教師あり学習を実現 BERTなどと同様に下流タスクに対してはファインチューニングして利用 [Baevski+ 2020] より引用 61