Frqux’s AI laboratory

AIの技術が進化する今日

現代の革新的技術!transformerモデルを解説(Encoder編)

 本記事では、近年話題になっているGPTなどのモデルの基礎にもなっているtransformerモデルの解説を行います。

 今回はEncoder編で、Decoder部分は別記事で紹介します。

 私も学習段階で、記事の信ぴょう性としては薄いですが参考程度に読んでいただけますと幸いです。


transformerモデルのEncoder構造

 オリジナルのtransformerモデルのEncoder部分は以下のような構造になっています。

transformer Encoder

 Attention層・Normalization層・Linear層・Activation層が組み合わさったものがtransformer Encoderです。

 この各層の役割について次に解説していきます。


入力

 transformer Encoderに入力されるデータは、数値の時系列データです。

 例えば、「1, 13, 4, 76, 2」などです。

 主にこれはトークンIDと言って、単語それぞれに割り振られたIDを入力とすることが多いです。上記の例ですと、何らかの5つのトークンが入力されることになります。


入力からAttention層への間の処理

 入力からAttention層にデータが入る際、トークンIDをそれに対応したベクトルに変換する処理が入ります。

 詳しく言うと、単語埋め込み情報と言って、単語それぞれにベクトルが割り振られており、Attention層に入る前にトークンIDがそのベクトルに変換されます。
 例えば、語彙数ぶんの次元があるone-hotベクトルに変換されるなどです。


Attention層

 ここがtransformerモデルの一番重要な部分です。

 Attentionとは、そのままの意味で注意する機構のことです。文章のどの位置にどれくらい注意を向けて読み解くかを計算する層なのです。

 Attentionは大きく分けて以下の2種類があります。

  • 外部からどこを注意するか指示される普通のAttention
  • 自分自身でどこに注意を向けるか計算するself-Attention

 中でも主にself-Attentionが採用されていますので、こちらを説明します。
 更にself-Attentionの中にもいろいろ種類がありますが、transformerモデルで採用されたキーバリューストアという機構を使ったself-Attentionを説明します。

 このキーバリューストアとは、文章を、クエリ(query)・キー(key)・バリュー(value)の3つに分けることで、文章内の注意するべき箇所を見つけ出す手法です。

 まず、文章の数値情報をそのままクエリとキーとバリューにコピーします。そのうちのクエリとキーの2つの数値の行列積をとり、単語間の関係性の行列情報を得ます。そしてそれをsoftmax関数に通すことで、数値の正規化を行います。
 行列積をとることによって、各次元に対応するベクトルを合わせた情報が得られます。

 その後、この注意次元ベクトルとバリューのベクトルを掛け合わせると、最終的な出力が得られます。

 これがSelf-Attentionです。


Normalization層

 ここでは、ベクトルデータの正規化を行います。

 ベクトルの正規化には以下の式を使います。


\displaystyle
hi = f(\frac{gi}{σi}(ai-μi)+bi)

  • σ ... 二乗誤差の平方根
  • a ... 入力ベクトル
  • μ ... 平均値
  • f ... 活性化関数
  • g, b ... 学習可能パラメータ

ここで記号の後についているiはトークンの位置を表します。


Linear層

 ここでは、演算処理および次元圧縮・次元拡張を行います。

 主に、入力されたベクトルを全結合層と同じような方法(入力*重み+バイアス)で演算処理したり、入力された2次元及び3次元のベクトルを1次元に圧縮、もしくはそれを2次元、3次元に戻してあげる役割を果たします。

 この次元変更がなぜ必要なのかというと、オリジナルのモデルでは、全結合層としての演算を行う際に1次元データのみ処理できる形となっていたため、このような処理が入ります。
 後に出た改良型では、複数次元でも処理できるようになったとかなってないとか...。


Activation層

 ここでは、活性化関数を定義してデータを通します。

 活性化関数とは、ニューロンの発火を制御するための関数です。

 上でAttention層を通してどの次元に注意すべきかが決まっているので、それを活性化関数に通してフラットにします。
 
 活性化関数には様々な種類があり、それぞれにメリット・デメリットがあります。
 より詳しく実例を知りたい方は、以下のリンクより飛んでください。詳しく説明してくださっているサイトに飛びます。

活性化関数(activation function) [ディープラーニング向け] | CVMLエキスパートガイド


 これですべての層の説明が終わりました。


終わりに

 今回はtransformerモデルを解説しました。
 意外と簡単に見えますが、時代を変えた革新的な技術です。

 このAttention部分がなかなかの曲者で、これが性能の向上を助けています。
 「Attention Is All You Need」という論文で世に広まるきっかけを作り、一世を風靡しました。論文のリンクを以下に貼っておきます。

[1706.03762] Attention Is All You Need

 では、今回はこれで終わります。

 このtransformerモデルは、今後解説する予定のBERTやGPTに使われているモデル構造なので、理解しておくことが必要です。

 では、最後まで閲覧いただきありがとうございました!