Transformerをほんの少し雰囲気だけ理解しようとする

## はじめに
昨年あたりから耳にしない日がないほどよく聞く `生成AI(Generative AI)` は、作業の効率化から新たなアイディア創出、ビジネスシーンからプライベートまで様々なシーンで利用が広がっています。

AI自体は昔から流行っていましたし、生成AIのベースとなっている生成モデルも同様に数十年前から研究されてきましたが、過去の深層学習モデルと比べ「速いのに精度が高い」という特徴を持つ`Transformer` というモデルの登場により、一気に実用に耐えるものとして普及が広まったようです。

そこで、仕組みや詳しいところは省き、なんとなく過去のモデルとの違いについて雰囲気だけでも理解したいと思い、少し調べてみることにしました。

※ 勉強中ですので、間違っている解釈・内容に誤りがある可能性があります🙇‍♂️

## なんとなく理解するまでの流れ
自然言語処理をベースに以下の流れで調べてみました。

1. 単語や文章のベクトル表現について
1. 再帰型ニューラルネットワークについて
1. Attentionについて
1. Transformerについて

## 単語や文章のベクトル表現について
### Bag of Words(BoW)
文書または文章をベクトル表現する手法。
文章中に含まれる単語の出現回数をもとに、文章を表現するベクトルを構成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/1405c7bb-9b54-7137-a21f-6591098c1420.png)

単語間の順番が表現できていないため文脈や意味の重要性が必要となるタスクにおいては別の手法が必要にはなりますが、文章のベクトル表現としては単純で非常に理解しやすい例となります。

### Word2Vec
単語の分散表現を学習するための手法の一つで、単語を密なベクトルで表現し、単語の意味的な関係を数学的に捉えることを可能にします。

CBOW(Continuous Bag of Words)が周囲の単語から対象の単語を推測するモデルで、Skip-gramが対象の単語から周囲の単語を推測するモデルになっています。

似たような文脈で使用される単語がベクトル空間上で近くに配置される特徴を持つため、有名な例として「king - man + woman」というベクトルの演算結果により、queenに近いベクトルが得られたりします。

このような単語の埋め込み(特徴ベクトル化)が、Transformerなどの言語モデルへの入力として使われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/b3d96a44-6f5f-9c2c-e4ef-b40422d986ec.png)
> [Efficient Estimation of Word Representations in Vector Space, Tomas Mikolov 2013](https://arxiv.org/pdf/1301.3781.pdf)

## 再帰型ニューラルネットワークについて
### 多層ニューラルネットワーク
人間の脳内の電気信号の伝達を数理モデルとして表現したものがニューラルネットワークと言われています。

下記の画像の場合、左側が入力層、真ん中が隠れ層（中間層)、右側が出力層となり、よく識別器として使われます。複数の隠れ層を持つことで複雑な特徴を学習することができる一方、学習すべきパラメータが多かったり、勾配消失問題などにより学習が難しいなどの課題もあり下火になったようですが、AutoEncoderなどの登場により改めて研究が進み性能が大きく向上しました。

ただし、時系列性があるデータには適したモデルではないため、系列データに対してはRNNが利用されることになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/15e3b43a-134b-ed2b-b00c-6dcd77db5d06.png)

###  再帰型ニューラルネットワーク（RNN)
時間的な順序や位置の情報が重要な系列データの処理に対処するために、ループ構造を持つモデルが提案されました。

ある時刻tにおける隠れ層の状態を、次の時刻t+1の入力に使うため、時間的文脈を扱うことが可能になり、特に自然言語処理の分野でよく用いられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/b922cebb-8814-d213-a9fd-ad4aebe985d4.png)

出力を計算する際に、過去の入力内容をもとに計算される隠れ状態ベクトル(理論上は過去の入力全てが反映されている)を利用することになりますが、現実的には長い文章のような場合に離れた単語感の関係性を捉えることが難しいという課題がありました。

そこで、その課題に対応するためにより長期にわたる記憶(文脈)を利用できる手法としてLSTMなどが提案されましたが、並列化が難しかったり、モデルの複雑化による計算量が膨大になるといった課題も残っていたようです。

### Seq2Seq
系列データから系列データへの変換を行うニューラルネットワークモデルのアーキテクチャで、大まかに以下の2つの部分で構成されます。

- エンコーダ
    - 入力系列を固定次元のベクトル表現に変換します。データの情報を抽出し、その意味を捉えたベクトルに圧縮します。
- デコーダ
    - エンコーダで得られたベクトルを用いて、出力系列を生成します。

エンコーダ、デコーダ部にLSTM(RNN)を利用していることが特徴で、{A, B, C}という入力系列から、{W, X, Y, Z}という出力系列を得ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/5ec8b26c-67ad-bd50-eb9e-454303de2507.png)
> [Sequence to Sequence Learning with Neural Networks, Ilya Sutskever 2014](https://arxiv.org/pdf/1409.3215.pdf)

単純なSeq2Seqモデルの場合、入力から生成されるベクトルが固定長であることやRNNの性質などにより、長い文や系列に対応するのが難しく、長期の依存関係を捉えることに対して課題が残っています。

## Attentionについて
単純なSeq2Seqでは、エンコーダから出力される固定長ベクトルの結果のみをデコーダに渡すため長期的な依存関係を伝えることが難しいという課題がありました。この課題に対応するために、エンコーダ部分の各RNNで生成される隠れ状態をデコーダ部分でも参照するように改善を行ったのが、Seq2Seq with Attentionです。

さらにデコーダ部分の各出力の際に、エンコーダ部の各入力との類似度スコアを元に計算されるアテンション係数を利用することで、毎フレームごとに重要な箇所が異なる(注意を向けている箇所が異なる)コンテキストベクトルを利用した結果の出力ができるようになりました。

また、アテンションには、各単語間の関係性を直感的に把握できるという特徴もあります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/341af22f-1def-24a2-3dbe-a9c4d68a9968.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/8b48d822-09d6-96d0-772f-68fac09d31ca.png)|
|---|---|

> [Neural Machine Translation by Jointly Learning to Align and Translate, Dzmitry Bahdanau 2014](https://arxiv.org/pdf/1409.0473.pdf)

ただし、RNNをベースとしたモデルであるため、長期の依存関係・文脈の把握や計算コストという観点で課題が残っていました。

## Transformerについて
RNNは系列データを扱う分野でよく使われていましたが、ループ構造を持つため並列計算することができない、また長い文章内の距離の離れた単語間の関係性を捉えるのが難しいという課題がありました。

そこで、TransformerではRNNのようにデータを系列データとして扱わず、ネットワーク分析（グラフ理論)のように集合として扱うことで並列的に構造を解析することにしたそうです。
データ間の関係性をAttentionを利用しすることで類似度として計算し、Attentionでは認識できない単語の順番を位置エンコーディングにより解消しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128594/4f05eeec-d31c-dd66-74b4-d9c71eb19942.png)
> [Attention Is All You Need, Ashish Vaswani 2017](https://arxiv.org/pdf/1706.03762.pdf)

Self Attention（上記画像の左側の図）では、各単語に対して、文章中の他の単語との関連度をもとに計算したコンテキストベクトルを生成します。Seq2Seqで入力データと出力データ間の関係性で行われていたAttentionを入力データ間で実施しているイメージです。

そして、Multi-Head Attention(上記画像の右側の図）は、Scaled Dot-Product Attentionが複数並べられたものを結合した構成となっています。ですので、複数の視点(Attention)で表現することにより、一つのAttentionでは表現しきれなかった情報をエンコードすることができるため、豊かな情報を得る(文脈を理解する)ことにつながっています。アンサンブル学習のようなイメージかと思います。

RNNのように系列データとして扱わず、グラフ構造データとしての関係性を扱うこと(Attentionメカニズム)により、並列処理できるようになりました。このメカニズムより長期的な文脈も扱えるようになり、並列処理できることからさらに大規模データセットを扱えるようになり、性能が飛躍的に上がったようです。

## おわりに
最近はやりの生成AIが飛躍的に進歩した理由を、Transformerに着目して調べてほんの少し雰囲気だけは理解できた気になりましたが、途中をかなり飛ばしながら調べたので、あらためて時間のある時に詳細を読んでみたいと思います。また、実際の活用事例も参考にしつつ、活用までつなげていけたらなと思っています。

## 参考
- [Efficient Estimation of Word Representations in Vector Space, Tomas Mikolov 2013](https://arxiv.org/pdf/1301.3781.pdf)
- [Sequence to Sequence Learning with Neural Networks, Ilya Sutskever 2014](https://arxiv.org/pdf/1409.3215.pdf)
- [Neural Machine Translation by Jointly Learning to Align and Translate, Dzmitry Bahdanau 2014](https://arxiv.org/pdf/1409.0473.pdf)
- [Attention Is All You Need, Ashish Vaswani 2017](https://arxiv.org/pdf/1706.03762.pdf)
- [深層学習 (機械学習プロフェッショナルシリーズ)](https://www.amazon.co.jp/dp/4065133327)
- [深層学習 Deep Learning](https://www.amazon.co.jp/dp/B01B768QJW)