📙
EMNLP 2020 High Performance NLP Tutorial メモ
書きかけメモ。
スライドは
で公開されています。
Introduction
- なぜ High Performance NLP が必要なのか?
- データ数がどんどん増えてるから(SNSなど)
- サイズが増えても効率的にリアルタイムで動かす必要がある
- 具体例
- ニュース記事の見出しの要約
- Facts Extraction
- 感情分析
Recent years...
-
モデルが指数的に大きくなっている
-
naive scaling (単純にモデルサイズを大きくすること)のよくない点
- 実用システムで使いづらい
- 費用がかかる
- GPU にはなかなかアクセスしづらい...
-
効率性を追求する必要がある!→この Tutorial のテーマ
- core techniques
- Knowledge Distillation
- Quantization
- Pruning
- efficient attention
- ケーススタディ
- 実用的なスケーリング
- core techniques
Fundamentals
- seq2seq
- 系列から系列への変換
- 例
- 機械翻訳
- 感情分析
- 言語モデル
- 音声認識
- RNN
- 任意の長さの系列を入力に取れる
- encoders and decoders
- encoders の出力のベクトルだけを使って decode するのには限界がある
- Attention
- encoders の各状態も見ることができる
- 入力
とクエリi_0, ... i_n から重み付きの出力を得るq - 入力とクエリの内積を取って softmax を取ったものを attention weight にする
- Transformers
- sequential な計算から parallel な計算へ
- self-attention
-
を入力に取るK, V, Q -
とQ の内積を取って softmax を取ったものでK を重み付けするV - ただし、次元の
の平方根で重みをスケーリングする(数値安定のために)d - 計算量は、系列の長さを
として、l 必要l \times l
-
- multi-head attention
- attention head の数で分割する
- いずれにしろ系列の長さの二乗の計算量が必要になる
- positional encodings
- 固定することも学習することもある
- The transformer encoder & decoder
- decoder では masked multi-head attnetion を使う
- まだ出力していない部分に注目しないため
- 非常に幅広い分野でうまくいっている(最近では Vision Transformer も)
- 3つのユースケースがある
- Pre-training
- 大きなコーパスで教師無しで学習(MLM など)
- GPU や TPU で学習
- Fine-tuning
- より小さなコーパスで教師ありで学習
- GPU や TPU で学習
- Production
- 推論用に使う
- CPU やモバイルデバイスで動かす
- Pre-training
Core Techniques
- Knowledge Distillation
- Teacher(大きなモデル)から Student(小さなモデル)へ
- Teacher の出力を Student の教師として使う
- いつ使うか?
- Pre-training
- DistilBERT
- student は layer の数が小さい
- MobileBERT
- layer の数は同じだが埋め込み次元が小さい
- DistilBERT
- Fine-Tuning
- 双方のタイミングで
- Pre-training
- Quantization
- 量子化
- 直線量子化
- Q8BERT, Q-BERT
- Quantization with Distillation
Discussion