jiku log

JTCのデータサイエンス中間管理職の学び

「大規模言語モデル入門」を読む〜第2章〜

はじめに

製造業においても,自然言語処理は重要な技術テーマのひとつである。週報などのメール,社内規定などのルール,安全記録や検査記録など,日々多くの文章が業務上で現れる。これらのテキストデータに対して自然言語処理技術を適用して業務効率化を実現していくために,近年発展が目覚ましい大規模言語モデルについて学ぶことにした。

このたび,大規模言語モデルの入門書として,山田 育矢 著「大規模言語モデル入門」を読むこととした。

gihyo.jp

第2章 Transformer

本章では,自然言語処理において標準的に用いられるニューラルネットワークモデルであるTransformerについて説明されている。Transformerは,大規模言語モデルを含む幅広いタスクに応用されている。

2.1 概要

Transformerには,エンコーダ・デコーダ,エンコーダのみ,デコーダのみの3種類が存在する。



図 : Transformerのモデル構造
出所 : Vaswani et. al. "Attention Is All You Need" https://arxiv.org/pdf/1706.03762

2.2 エンコーダ

本節では3種類のTransformerのうち,エンコーダについて,エンコーダを構成する各要素の役割が説明されている。
各要素の入出力や役割について説明する。なお,語彙 Vの次元数は |V|,入力トークンの埋め込みの次元数を Dとする。

入力トークン埋め込み
  • 役割 : 後段の処理ができるよう,入力トークン列を入力トークンの埋め込みに変換する。
  • 入力 : トーク w
  • 処理 : トークンを埋め込みに変換する。
  • 出力 : 入力トークンに対応する埋め込み e_w \in R^D

※註 : この処理を行なうためには,トークンの埋め込み表現を事前に準備しておく必要がある。

位置符号
  • 役割 : 入力トークン埋め込みには,トークンの順序や位置の情報がないので,これらを与える。
  • 入力 : 入力トークン埋め込み e_{w_i}
  • 処理 :

以下の式で定義される D次元の位置符号(position encoding)を計算する。


 \begin{align}
p_{i, 2k+1} &= \sin \left( \frac{i}{10000^{2k/D}} \right) \\
p_{i, 2k+2} &= \cos \left( \frac{i}{10000^{2k/D}} \right) \\
k & \in \{ 0, 1, ..., \frac{D}{2}-1 \}
\end{align}

その後,以下の式を用いて,モデルの入力埋め込み x_iを算出する。


 \displaystyle
x_i = \sqrt{D} e_{w_i} + p_i

  • 出力 : モデルの入力埋め込み x_i
自己注意機構 (self-attention)
  • 役割 : 文脈の情報,すなわちある文章におけるある単語において,関係性が深い別の単語の情報を付与する。
  • 入力 : モデルの入力埋め込み h_i
  • 処理 :

入力された埋め込みに対して,キー(key),クエリ(query),バリュー(value)の3つの異なる埋め込みを計算する。
クエリ埋め込み・キー埋め込み・バリュー埋め込みのそれぞれを q_i, k_i, v_iとすると,これらの3つの埋め込みは D \times D次元の重み行列を用いて,


 \begin{align}
q_i = W_q h_i \\
k_i = W_k h_i \\
v_i = W_v h_i \\
\end{align}
で計算される。
 i番目のトークンから見た j番目のトークンの関連性スコア s_{ij}は,

 \displaystyle
s_{ij} = \frac{q_i ^T k_j}{\sqrt{D}}

そして,出力埋め込み o_iは,関連性スコアをソフトマックス関数を用いて正規化した重み \alpha_{ij}によるバリュー埋め込みの重み付き和になる。


 \begin{align}
\alpha_{ij} & = \frac{\exp(s_{ij})} { \sum_{j'=1}^{N} \exp(s_{ij'})} \\
o_i &= \sum_{j=1}^{N} \alpha_{ij} v_j
\end{align}

  • 出力 : 出力埋め込み o_i
マルチヘッド注意機構
  • 役割 : キー・クエリ・バリュー注意機構の表現力をさらに高めるために,この注意機構を同時に複数適用する。
フィードフォワード
  • 役割 : 活性化関数により,ニューラルネットワークの表現力を高める。
    • 提案当初のTransformerではReLUが用いられていたが,大規模言語モデルではより良い収束性能を発揮するガウス誤差線形ユニット(gaussian error linear unit; GELU)が用いられる。
残差結合
  • 役割 : 勾配消失・勾配爆発問題を回避する。
層正規化
  • 役割 : 値が大きい値になり過ぎないようにして,訓練を安定化させる。
ドロップアウト
  • 役割 : 過適合を防ぐ。

2.3 エンコーダ・デコーダ

上図の構成が,エンコーダ・デコーダ構成であるが,本節ではエンコーダ・デコーダ構成のTransoformerについて説明がされている。

交差注意機構
  • 役割 : 機械翻訳のタスクにおいて,原言語側にをエンコーダ,目的言語側をデコーダとするが,原言語と目的言語をつなげる役割を持つ。
    • バリュー・キーには原言語の出力埋め込みを,クエリには目的言語の「自己注意機構・マスク付」の出力埋め込みを用いる。
トークン出力分布の計算
  • 役割 : 目的言語におけるトークンを予測する。
注意機構のマスク処理
  • 役割 : 目的言語のトークンを予測する際には,初めに出てきたトークンを用いて,目的位置のトークンを予測することになるが,自己注意機構では後ろ側のトークン情報も使ってしまうので,これを避けるために後ろ側のトークンの情報をマスクする(関連度スコアを -\inftyにする)。

まとめと感想

本章では,近年の自然言語処理技術の中核にあるTransformerの解説がなされていた。
Transformer以前の系列データ用のモデルであるRNNやLSTMとはかなり構造が異なっており,なかなか興味深かった。