「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- その情報に注目スべきか判断して情報を処理するAttentionの導入。
- Self-Attention機構の重要性を示し、他の分野にも影響を与えた。
- 汎用性が高くコレを画像処理に応用したのが、Vision Transformer。
※ RNN Encoder-DecoderのAttention機構と同じ目的を達成するが機構は異なる。
アーキテクチャ †
- Attention機構をMulti-head Attentionに置き換えた、
- 「並列化できない」「長期記憶ができない(大域的な特徴・ニュアンスを捉え難い)」問題を解決。
- 並列計算で高速な学習が可能になった。
- 後半に行けばいくほど昔の記憶を維持するのが難しくなる問題を解決。
- Positional Encoding(位置エンコーディング)でベクトルに語順情報を付加。
パフォーマンス †
RNN Encoder-Decoder(Sequence-to-Sequence)系よりも早くて精度が高い
- 処理が速い:並列化によって学習時間を大幅に短縮。
- データを逐次処理する必要がなく、
- 並列化で訓練時間が圧倒的に削減でき
- ビッグデータで効率的に学習できる。
- 精度が高い:英独翻訳タスクで従来モデルの最良結果を超える。
- 汎用性が高い:汎用的で、大規模なモデルも構築可能
タスクの概要と構造 †
- 翻訳タスク
スペイン語 → 英語
- Yo tengo gatos → I have cats
- ...と、catsを予測するTransformer.
- 入力と出力
翻訳タスク(Yo tengo gatos → I have cats)
- 入力
- Self-Attention:「Yo tengo gatos」
- Masked Self-Attention:「I have [cats]」※ []はMask
- 出力
- 次単語予測(BEAM search):「cats」を予想する。
- Decoderが通常のSeq2seqのように逐次的に単語を出力していく。
- 以下の前処理が処理前に行われる。
- ストップワード削除済み原文
- Embeding:単語の分散表現で512次元のベクトルに圧縮
- Positional Encoding:単語の順番情報を埋込。
- Encoderの出力を一気にDecoderに入れる。
- Encoder
文章を意味に変換する。
- Self-Attention(Multi-head Attention)
1文の単語だけを使って計算された単語間の照応関係を付加
| I | have | cats |
I | 0.88 | 0.10 | 0.02 |
have | 0.08 | 0.80 | 0.12 |
cats | 0.03 | 0.14 | 0.83 |
- Position-Wise Feed-Forward Networks(PFFN)
2層のDNN:FFN(x) = ReLU(xW1+b1)W2+b2
- Source-Target Attention(Multi-head Attention)
ここまでの出力をQueryに、Encoderの出力をKeyとValueにして
Multi-Head AttentionでAttentionを計算し異なる時系列データの照応関係情報を獲得
- Position-Wise Feed-Forward Networks(PFFN)
2層のDNN:FFN(x) = ReLU(xW1+b1)W2+b2
オートエンコーダ †
- Position-Wise Feed-Forward Networks層は...
・入力はQと同サイズのトークン・ベクトルが並んだ文章で
・Position-Wiseは各トークン毎(位置単位)に計算をすると言う意味
- それぞれのサブ層の後にはAdd&Normがある。
- Add:残差接続
- Norm:Layer Normalization(学習高速化の正規化)
Transformer Block †
Transformer ≒ Transformer Block
- 計算結果をPosition-Wise Feed-Forward Networksに適用。
- 最終的なTransformer Blockの出力とする。
Multi-head Attention †
- Multi-head Attention
- Single-Head Attention(Scaled Dot-Product AttentionとLinear層からなる)を並列化したもの。
- 獲得された学習パラメタを可視化すると並列に並んでいる各Single-Headが異なる注意表現を獲得している(後述の①)。
- これは、後述のScaled Dot-Product AttentionのK、Vの値を決める重み、出力を調整する重みの学習になる。
Single-Head Attention | Multi-head Attention |
|
|
Multi-head Attention内部で行われる計算 |
|
|
① 行列をかける。Q = K = V = Xなのでそれぞれを変形させる。 ・QWiqはh=8なのでXの次元を1/8にする。= Xのどの部分を処理するか?を変える。 ・KWikは内積を取る前にXの角度を変える。= どの部分に注目するか?注目の仕方を変える。 ・VWivは出力する前にXの角度を変える。= 出力の様子を調整する。 |
② Scaled Dot-Product Attentionを行う(後述)。 |
③ Concatで横に繋げる(1/hにしたものをh倍にする)。 |
④ 行列Woをかける。 |
https://agirobots.com/multi-head-attention/ |
- Single-Head Attention
HeadとはLinear層*3とScaled Dot-Product Attention層*1の4つの組合せ
- Linear層
Scaled Dot-Product Attention層の直前に学習パラメタを持つLinear層を設け、
多種多様な特徴部分空間における注意表現を学習可能にする柔軟性を獲得させている。
- Scaled Dot-Product Attention層
- 内積に基づく注意計算を行うだけとなっていて内部に学習パラメタを持たない。
- スケール化内積注意と訳せるだけに、内積を利用したベクトル間の類似性に基づく変換を行う注意機構
|
|
・Qは横ベクトルqの縦ベクトル ・Kは横ベクトルkの縦ベクトル ・Vは横ベクトルvの縦ベクトル(KV(kv)はペアになっている) |
QをqにしてSingle-Head Attentionで考えると、qtKは、同様に、qkの内積(類似度)の横ベクトルになる。また、√dkは、次元が大きくなると長くなるので補正する。コレを同様にSoftmaxで重み(Attention_Weight)に変換し、この重み(Attention_Weight)とVのdot積=加重和がCi(文脈を加味した単語ベクトル)になる。 |
Attention(q, K, V)では、qとkiが似ていて場合 Pi≒1 他≒0となる場合、kiとの類似度に応じたVの加重和はほぼviになる。Attention(Q, K, V)はバッチで処理。 |
https://agirobots.com/multi-head-attention/ |
- Concat+Linear層(前述の③、④)
- Concat
- Linear:活性化関数が恒等関数(なのでPosition-Wise Feed-Forward Networksがある)
数式のポイントとベクトルの内容 †
- 数式のポイント
- Xは縦ベクトルではなく横ベクトル、WXではなくXW(= tWtX)
- 詰まる所、以下の様な事をやっているらしい。
アーキテクチャ †
- TransformerのDecoder側、Masked Multi-Head AttentionとFFNを抽出したブロックを用いる。
https://www.youtube.com/@AIcia_Solid
- Token Embedding、Positional Embedding、Decoder型のTransformer Blockを12層、出力層で構成
- Et + Ei
- Token Embedding(Et)
- Positional Embedding(
Encoding)(Ei)
- Decoder型のTransformer Blockを12層
- 入出力
- 入力
- 分類:Start - 文 - Extract
- NLI:Start - 文1 - Delimiter - 文2 - Extract
- Q&A:
・Start - 文Q - Delimiter -文A1(選択肢)- Extract
・...
・Start - 文Q - Delimiter - 文An(選択肢)- Extract
パフォーマンス †
タスクの概要と構造 †
- 次単語予測、文章穴埋
- 自然言語推論 (NLI) :2テキスト間の推論的関係の同定
- 分類、意味、文章生成(翻訳、要約、対話生成、Q&A)
- 計算(足し算・引き算)もできる。
- ソースコード生成、デザイン支援もできる。
- 苦手なタスク
文の意味を人間のように理解していない
- 比較が苦手
- 人間社会、物理現象の慣習や常識を認識、推論できない。
- ファイン・チューニング
少データ、少資源でOKのため、多くの応用が可能。
- 最終層のみ取り替えて教師あり学習
- 数例のデータしか必要としないので教師データの作成が楽
- 学習も3エポック程度の学習で済む。
- 代替手段となるfew-shot学習は、学習を行っているわけではなく、
巨大な汎用事前学習モデルの中の学習結果から求められている学習結果を引き出しているだけ。
GPT-nを少し改変しているので、高性能で汎用性が高く応用し易い。
- Google検索
- Regal BERT(特定ドメイン=法律領域向けのBERTモデル
アーキテクチャ †
- TransformerのEncoderを双方向多層に積み重ねたアーキテクチャ
- 双方向(文頭と文末)から学習することによって「文脈を読むこと」が実現された。
- 膨大な量のテキストデータからテキストの単語の連なりの「言語らしさ」を学習
- 長く複雑な文章を読み取ることができ文脈を読むことが可能になった
https://www.youtube.com/@AIcia_Solid
- Token / Segment / Positional Embedding、型のTransformer Blockを24層
- Et + (Ea or Eb) + Ei
- Token Embedding(Et)
- Segment Embedding(Ea or Eb)
- Positional Embedding(
Encoding)(Ei)
- 入力
1つ2つの文章を入力
- 文1 : t1...tn
- 文2 : t'1...t'm
- 一文 : CLS 文1 SEP 文2 SEP
- 二文 : CLS 文1 SEP SEP
- 出力
基本的には一文、C T1...TN TSEP T'SEP
- 文単位のタスク(分類問題など)ではC(文章の意味ベクトル)を使用
- 単語単位のタスク(固有表現抽出(NER)など)ではT1...TN(単語の意味ベクトル)を使用
パフォーマンス †
高性能で汎用性が高く応用し易い。
- 上記に加えて双方向が凄い
上位の層では意味・文脈に関する抽象化された情報を獲得
タスクの概要と構造 †
マスクされた単語の前後のテキストを使って単語を予測する。
- 元々は機械翻訳で利用されていた。
- 今は自然言語処理なら大概できる。
- 質問応答(質問に対する回答を文書中から見つけてくる)
- 文の比較(片方の文がもう一方の文の内容を含んでいるか)
基本的にGPTと事前学習とファイン・チューニングと同じ。
- 事前学習に工夫をしている。
- 単語・文法を学習:15%マスクされた単語の予測を学習(MLM)
- 文意・文脈を学習:連続する2文であるかないか(5:5)判断を学習(NSP)
- チューニング
実現したいタスクに応じた数百レベルの学習データを用意してファイン・チューニング
- 事前学習結果を実際に使う場合。
- BERTの上にタスク依存の層を重ねる。
- 数百件レベルの学習データで実施可能
リソースと時間が必要なので学習済みモデル(汎用事前学習モデル)をGoogleが無償で公開
GPTのバージョン †
2019年にGPT-2、2020年にGPT-3、202n年にGPT-3.5、202n年にGPT-4が発表
GPT-2 †
- 【論文】Language models are unsupervised multitask learners.
特定のタスクに特化するのではなく、色々なタスクに応用できる、
できるだけ汎用的なモデルを構築する事を目指す。
- 言語モデル(次単語予測)の可能性
Commonsense reasoning(常識的な推論)を解ける。
- 大モデル、大データならもっと凄いのではないか?
結果、半分凄い、半分まだまだ。この方向性に大きな可能性(GPT-3へ)。
- データ
- WebText?コーパスを新規に開発
- 量と質と幅(様々な話題と文脈)
- 約800万のウェブページから抽出された高品質自然言語テキストコーパス
- 3つ以上のカルマを持つRedditの発信リンクからのWebページ(8Mリンク、40GB)
- 言語モデル(次単語予測)
- 8つ中、7データセットでSoTA
- Perplexity予測性能:10-40
- Children's Book Test (CBT)
10選択単語穴埋めタスクでSoTA
- LAMBADA Benchmark
最後の単語を予測するタスクでSoTA
- Winograd Schema Challenge
- Commonsense reasoning(常識的な推論)でSoTA
- ポイントは教師データを使用していない点
- CoQA
- 会話型質問応答システムを構築するための大規模なデータセット
- TOEICのようなテストの質問と回答を最高性能に匹敵
- 同様に、ポイントは教師データを使用していない点
- Translate
- WMT-14の仏→英がBLEU:11.5(当時の最高は40ぐらい)
- ただしデータは英語のみで仏データが僅か10M程度しか混じって無かったのにも関わらず。
- QA
1問1答はまったくSoTAに届いていないが、
一番小さなモデルで1%、一番大きなモデルで4%と、
大モデル、大データならもっと凄いのではないか?と言う可能性。
(実は、WebText?に対して未学習(もっとモデルを複雑にしたら...))
GPT-3 †
- 【論文】Language Models are Few-Shot Learners
- BERTに比べてあまりにも巨大
- 時代背景
- Scaling Law:大きなTransformerは強い。
- NLP & DL:
・DL:数十万件のデータが必要
・PT & FT:1,000件程度のデータで済む。
・FS(Few-Shot):10件程度のデータで済む。
- モデル
GPT-2 + Sparse Transformer
- 1750億(175B)のパラメタ(GPT-2:1.5B、T5:11B)
- ベクトルの次元:12288(GPT-2:1600)
- Transformer Block層:96(GPT-2:48)
- Multi-head Attentionのヘッド数(nhead):96(GPT-2:...)
- Single-Head Attentionの次元?(dhead):128(GPT-2:...)
- トークン数:2048
- バッチサイズ:3.2M
- 学習率:6e^-1
- 約45TBの大規模データセットを前処理した
約570GBテキストデータ(GPT-2:40GB)
- Common Crawl(をCleaningしたもの)
- Wikipedia
- Books1, Books2
- WebText?(GPT-2)
- GPT-3におけるFew / One / Zero-Shotの説明
・≒ コンテキスト内学習でファインチューニングと異なりパラメタ更新は不要。
・Attention機構を変形して見方を変えると勾配降下法をシミュレーションしている。
・モデルがタスクを試みる前に例を処理できるようにするプロンプトとしてコンテキストを与える。
- Few-Shot(FS)
・推論時にタスクに関する説明と少量のデモンストレーションを与える方式
・パラメタを更新しない=デモを学習しない=デモを過学習しない。
- One-Shot(1S)
・Few-shotのデモンストレーションの数が1つであるケース
・人が例示を見てタスクに取り組むという状況に近い
- Zero-Shot(0S)
・推論時にはタスクに関する説明のみが与えられる。
・デモンストレーションは全く与えられないケース
| 一般的な扱い | GPT-3での扱い |
Few / One-Shot | 少量の教師ありデータに基づく学習方法 | タスク説明と少量のデモンストレーションを入力とした予測 |
Zero-Shot | 学習時に存在しないクラスのデータを扱う枠組み | タスク説明のみを入力とした予測 |
- Language Model, Cloze, Continuation Tasks SOTA有り
- Closed Book Question Answering SOTA有り
- Translation En SOTA有り
- FS ≒ 教師なし SOTA < 教師あり SOTA
- 非英語データは7%、英語に翻訳する方が精度が高い。
- Winggrad-Style Tasks SOTA有り
- Super GLUE ◯☓
単語は2つの文書で同じ使われ方をしているか?
- Natural Language Inference ☓
2番目の文書は1番目の文章の賛成 / 反対 / 中立のどれか?
- Synthetic and Qualitative Tasks ◯☓
- 2桁の±が99-100%
- 3-5桁の±、2桁の*、1桁の±, *, ()が20%
- News Article Response
タイトル・サブタイトルから人間と区別できない文書を生成
- 文書生成で
・単語単位の繰り返しは無いが。
・文単位の繰り返しがある。
・長文の一貫性に欠ける。
- 双方向性
双方向性は無いので文の後ろを考慮しない(コンテキストが読めない)。
- Pre-Training dejective
次単語予測の事前学習の精度はScaling Lawで上がるが
Scaling Lawの頭打ちや実問題での性能(次単語予測以外の事前学習)
- 人間から学ぶ
- 強化学習でチューニング
- マルチ・モーダルでやる
- 学習の効率化
GPT-3は300Bトークンで学習するが、
人間は生涯で0.3Bトークンの入力程度(1000倍の差)
- Few-Shotで何が起きる?
・学習済みの内容を思い出している。
・新しい能力を獲得している。
GPT-3.5 †
GPT-4 †
2022年11月に公開される。
参考 †
Qiita †
YouTube? †
以下はブログ側
Wikipedia †
Transformer †
GPT-n †
BERT †
https://ja.wikipedia.org/wiki/BERT_(%E8%A8%80%E8%AA%9E%E3%83%A2%E3%83%87%E3%83%AB)