TransformerとDETRについて説明します!

皆さん、「AI」という単語を耳にすることが最近増えてきたのではないかと思います。しかし、その仕組みについて知りたいと感じても、「私には難しそう...」と敬遠してしまっている方も多いのではないでしょうか?

ここではAIの技術である、「Transformer」と「DETR」の特徴について説明していきたいと思います!

Transformerとは

Transformerとは、RNNやCNNを使わずにAttentionのみを用いたモデルです。

このことによって、

  • 翻訳で2017年時のSoTAを超えるBLEUスコア(=28.4)より高いスコアを叩き出した
  • 並列化がしやすく、学習時間が削減された
  • 言語モデル以外にも導入できるなど、汎用性が高い

という特徴を持っています。

CNNを組み込む際の欠点であった、入力文字列と出力文字列の位置関係に依存して逐次計算効率が下がる点を克服しています。

Transformerのモデルの構造

Transformerは大枠が①エンコーダ・デコーダモデルとなっており、②Self-Attention③Position-wise Feed-Forward Networkが組み込まれています。

①エンコーダ・デコーダモデル

翻訳などの文章を他の文章に変換するモデルでよく使用されています。

上図では、左半分がエンコーダ、右半分がデコーダを表しています。

英語の文章を日本語の文章に翻訳させたい場合、エンコーダーに英語の1文(I like apples)、デコーダーに対応する日本語の1文(私はリンゴが好きです)を入力します。

〜エンコーダ〜

エンコーダのメイン部分はN=6の同一の層で構成されています。

入力文章をEmbedding層で圧縮、Position Encoding層で位置情報を付加し、メイン部分に入力されます。

メイン部分の各層には、Multi-Head Attention層とPosition-wise Feed-Forward Network層の2つのサブ層があります。それぞれのサブ層の後には残差接続と正規化処理(Add & Norm層)が採用されています。

6層分処理を繰り返し、出力をデコータへと渡します。

〜デコーダ〜

デコーダのメイン部分もN=6の同一の層で構成されており、メイン部分までの処理はエンコーダーと同様です。

メイン部分の各層には、エンコーダの2つのサブ層に加えて、1つ目のサブ層からの出力を受け取るMulti−Head Attention層が追加されています。エンコーダと同様にそれぞれのサブ層はAdd & Norm層によって正規化されています。

最初のMulti-Head Attentionはmaskingされており、Position Encoding層からの情報をマスクする(隠す)役割を担っています。

②Multi-Head Attention層(Self-Attention層)

Transformerで用いられるSelf-Attentionとは、文中のある単語の意味を理解するときに、文中の単語のどれに注目すればよいかを表すスコアのことです。文中の単語間の対応関係や単語の重要度を取得します。

Self-Attentionは、文中の各単語に対応付けられたQueryとKey、Valueの3つのベクトルを使用します。

Attention関数の出力はValueの加重和で計算され、各Valueの重みはQueryとKeyによって計算されます。

③Position-wise Feed Forward Network層

Position-wise Feed Forward Network層はエンコーダ及びデコーダの各層に含まれており、ReLUを挟んだ2つの線形変換で構成されています。

文中の単語ごとに独立して順伝搬ネットワークを構築するため、単語間の影響を受けずに並列処理を行うことができます。ただし、層間の重みは共有されます。

論文:Attention Is All You Need

DETRとは

DETR(DEtection with TRnsformers)はCNN+Transformerのシンプルな構成でEnd to Endな物体検出を実現しました。

上述の通り、TransformerはSelf-Attention層によって事前知識を用いずに入力データから知識を獲得するモデルでした。

事前のAnnotation方法によって、学習の精度が大きく変わってしまうといった物体検出の学習モデルにある問題を解消できる可能性を秘めています。

下図がDETRの一連の流れです。

Backbone : 入力画像をCNNによって低次元にエンコード

Encoder : 入力された特徴量をTransformer Encoderによって処理し、Decoderへと受け渡す。並列処理可能

Decoder : Encoderからの情報とobject queryを入力として、FFNへ処理を渡す。並列処理可能

FFN : Decoderの出力から、検出した物体の位置とラベルを識別

  1. CNN出力のマップを、1x1 convolutionでdチャネルに圧縮する
  2. Transformer encoderに、サイズH∗Wの特徴マップd個を、H∗W個のd次元特徴として入力する
  3. Transformer encoderは、H∗W個の中間オブジェクト特徴(各d次元)を出力する
  4. Transformer decoderへ、H∗W個の中間オブジェクト特徴とN個のobject queryを入力する
  5. Transformer decoderは、N個のオブジェクト特徴(各d次元)を出力する
  6. N個のオブジェクト特徴それぞれをFFN (Feed Forward Network) へ通して、N個のオブジェクト推論結果(クラス、矩形)が出てくる

encoderへの入力は、d個の特徴マップの各画素をチャネル方向に結合したもの(H∗W個のd次元特徴)が入ります。出力も同じ形(H∗W個のd次元特徴)です。

decoderへの入力は、encoderの出力に加え、N個のd次元のobject query(=learnt positional encoding)が入ります。このobject queryはネットワーク重みと同様の学習パラメータであり、学習して決まるパラメータです。このように機械翻訳タスクと違って、decoder入力(=N個のobject query)を事前に用意できるため、N個の推論すべてを同時に走らせることが可能です。(parallel decoding)

またpositional encoding(=object queryとspatial positional encoding)を1層目だけでなく各層で使用するようにしており、さらに上図のようにobject query(学習値)とspatial positional encoding(固定値)の両方を場所毎に使い分けることで精度を上げています。

論文:End-to-End Object Detection with Transformers

DETRの活用事例

学習済みのモデルを使用して、日常の風景画像から、人や車、鞄などの物体検出を気軽に試すことができます。

ラベル名とラベルがどの程度正しいかを示す確信度(1に近いほど確信が高い)が表示されています。

参考サイト:AI(DETR:Detection Transformerモデル)による物体検知

その他Transformerの活用事例

Transformerのモデルは、その汎用性から機械翻訳や物体検出だけでなく、幅広い分野に応用されています。

時系列データ予測

論文では、週単位の地域別インフルエンザ様疾患(Influenza-like Illnesses:ILI)比率を予測するため、Transformerが活用されています。

基本的な構成はTransformerと同様です。

上図では、T1〜T4までの時系列データをEncoderに入力し、DecoderにT4とT5の時系列データを入力することで、T5とT6の時系列データを予測しています。

論文:Deep Transformer Models for Time Series Forecasting: The Influenza Prevalence Case

音楽生成

時系列の音データを入力に、Transformerによって音楽を創造するチャレンジも行われています。

処理パフォーマンスの面で課題はありますが、将来的に音楽生成ツールとしてTransformerが活躍することが期待されます。

論文:MUSIC TRANSFORMER: GENERATING MUSIC WITH LONG-TERM STRUCTURE