2018年9月15日 | ブログ記事

論文の紹介【Universal Transformers】

hukuda222

この記事は2018年夏のブログリレー9/15の記事です。

はじめに

こんにちは、hukuda222です。今日は私ときんいろモザイクの小路綾ちゃんの誕生日です。実にめでたい日です。ところで、きんモザといえば何でしょうか? そう、英語です。そんなわけで英語の論文を頑張って読んだので、どんな感じだったかを紹介することにしました。色々拙いと思いますが、その辺は生暖かい目でスルーするか優しく指摘してくださると幸いです。
読んだのは、Universal Transformers(https://arxiv.org/abs/1807.03819)です。

概要

RNNやCNNを使わずにAttentionのみを利用したTransformer(https://arxiv.org/abs/1706.03762)によって、翻訳、画像生成、形態素解析などのタスクをこなせるようになったものの、他の多くのタスクにおいてはRNNの方が優れています。
そこで、汎用的に優れた性能を発揮するUniversal Transformersです。これはRNNのように系列の個々の情報を参照するのではなく、毎回系列全ての情報を参照しています。

導入

hi0h_i^0が最初の入力で、hi1h_i^1,hi2h_i^2,...,hit1h_i^{t-1},hith_i^{t}と順番に計算していきます。(1im1\leq i\leq m)ここでのhi0h_i^0は系列のシンボルを表してるので翻訳の場合は、それぞれの単語です。

これの優れている点は、RNNと違ってそれぞれの単語の次のステップへの計算が独立なので並列的に計算できるところと、全ての単語の情報を次のステップの推定に使うことができるという点です。

従来のRNN以外の手法では、訓練中に与えられた長さ以外の入力に対してうまく処理することができなかったのですが、この手法では対応できます。

モデル

Encoder

Scaled Dot-Product Attention

Q,K,VQ,K,Vという入力がしれっと出てくるんですが、Query、Key、Valueの頭文字です。Q,K,VRd×dQ,K,V\in\mathbb{R}^{d\times d}です。Q,K,VQ,K,Vはそれぞれ入力HHに行列WQ,WK,WVW_Q,W_K,W_Vを掛けて作ります。

MultiHead Attention

WiQ,WiK,WiVRd×d/kW_i^Q,W_i^K,W_i^V\in\mathbb{R}^{d\times d/k}で、WORd×dW^O\in\mathbb{R}^{d\times d}です。Scaled Dot-Product Attentionを別々にkk回やってその結果を組み合わせているのでより精度が上がるらしいです。

Encoder全体

LayerNormalizationは、バッチ単位ではなくニューロン単位で出力を正規化する手法です。
Transition関数については、Separable Convolutionと全結合のニューラルネットをタスクに応じて使い分けるのが良いようです。
Separable Convolutionは畳み込みを空間方向とチャネル方向で行いパラメータを削減する手法です。Xception: Deep Learning with Depthwise Separable Convolutions(https://arxiv.org/abs/1610.02357)で提案されています。

PPは、系列の中での位置posposと、時間tt(何回繰り返されたか)、成分の次元jjに依存するパラメータです。位置エンコーディングと呼ばれ、時系列の情報を組み込むのに必要なようです。

Decoder


Decoderはこれを出力します。ORd×VO\in \mathbb{R}^{d\times V}で、VVは語彙数です。これが最も大きくなる語彙が予測された語彙となります。出力は1単語ではなく、TT回目以降の出力を合わせたものが推定された回答となります。

Adaptive Computation Time(https://arxiv.org/abs/1603.08983)

繰り返される数TTはACT(Adaptive Computation Time)によって決めることができます。ACTはRNNのst1sts_{t-1}\to s_tを算出するところを最適化する手法です。具体的には、st1s_{t-1}を中間状態の入力としてst1,2s_{t-1,2}を計算し、それをさらに中間状態の入力として、st1,3s_{t-1,3}を計算し、……st1,ns_{t-1,n}を計算し、それらの重み付け平均を取ったものをsts_{t}、それらの出力を重み付け平均したものをst1s_{t-1}の時の出力とします。
この記事が僕はわかりやすかったです(日本語なので) https://qiita.com/shotasakamoto/items/80809657c4492721b709

成果

定数回で打ち切るようにしたのを無印のUniversal Transformer、前述のACTによって何回で打ち切るかを決めたものをAdaptive Universal Transformerとしているようです。

bAbI Question-Answering

bAbIタスクは、質問応答の形式で自然言語理解の基礎的な能力をテストすることを目的としたタスク群です。12カテゴリー20種の小タスクで構成され、それぞれの小タスクの訓練データとテストデータは文脈設定の単文と1000文ずつの質問からなります。スコアはエラーの比率なので低いほど高精度です。

LAMBADA Language Modeling

LAMBADAタスクは小説から作られた穴埋め問題のタスクです。bAbIは語彙が少なく高いスコアが取りやすいのですが、こちらは小説が元のため難易度が高いです。LSTMやTransformerよりも良い結果を出してはいるもののRCのタスクは6割弱と難しいことがわかります。

Machine Translation

英独翻訳のタスクです。BLUEスコアは人間が翻訳したものに近ければ近いほど高くなります。そもそも元の論文のTransformerが発表時にBLUEスコアが1位だったらしいので、それをさらに上回っててやばいなぁという感じです。

感想

長文読解を解きたくて適した方法を探していたのですが、この手法が向いてそうな気がしました。どの論文も多くの過去の論文を参照してることが多いので界隈によく出てくるものをちゃんと抑えないと辛そうな気がするというのと、参照している論文は大体全部あるのでarXivはすごいなぁと思いました。あと、論文だけ読んでも実装できるくらい完全に理解したかと言われると怪しいので、論文をスッとコードに落とせる人はすごいです。

この記事を書いた人
hukuda222

福田です。主にプログラムを書いてます。

この記事をシェア

このエントリーをはてなブックマークに追加

関連する記事

2017年11月14日
IBIS2017参加報告
Keijan
2017年11月4日
文章をよしなに分散表現しよう
David
2016年12月1日
機械学習初心者がBash on UbuntuでTensorflowのcifar10を改造して自分用の画像分類機を作るまで
to-hutohu
2018年11月9日
機械学習の初歩についてのお話[アドベントカレンダー2018 16日目]
drun
2018年9月24日
夏休みブログリレー エンディング
Yosotsu
2018年9月23日
ゲームを作るものを作っています
Sigma1023

活動の紹介

カテゴリ

タグ