Transformerを用いた
AutoEncoderの設計と実験
発表者:myxy
ML集会
誰?
● myxy(みきしぃ)
● 本業はプログラマ
● 機械学習は完全に趣味で勉強してる
アバター作ったりもする
アバターワールドの検索・表示システムとか作った
Transformerを用いた
AutoEncoderの設計と実験
発表者:myxy
ML集会
Transformer
"Attention is All You Need"より引用
● 自然言語処理で活躍
● 言語・音声等系列データの処理
● パラメータが増えるほど強いらしい
Transformerを用いた
AutoEncoderの設計と実験
発表者:myxy
ML集会
AutoEncoder
● 入力次元より低い次元に圧縮してから
元のデータを復元する
● 入力と出力の誤差を最小化
● データに対して低次元の
特徴量が得られる
英語版wikipedia "AutoEncoder"より引用
(CC-BY-SA)https://en.wikipedia.org/wiki/Autoencoder#/
media/File:Autoencoder_structure.png
動機
通常のAutoEncoderは入出力次元数が固定されており
長さが変化する系列データの処理はできない
Transformerを使って
系列データのAutoEncoderを作りたい
既存研究
"Masked Autoencoders Are Scalable Vision Learners"より引用
AutoEncoderと銘打っているが
やってることはマスクしたパッチの補間
出力次元数を下げる
● 系列長は減らない
● あまり次元を下げると
位置情報が保持できなくなる
次元数を減らすのではなく
系列長を減らせるだろうか?
ナイーブな方法
Transformer Encoder
系列長n × 次元数256
・・・
・・・
系列長n × 次元数128
V K Q
Transformerに使われる
Query-Key-Value型のAttentionでは
Queryに入力した系列と
同じ長さの系列が出力される
系列長n
・・・
系列長n
・・・
V K Q
Transformerに使われる
Query-Key-Value型のAttentionでは
Queryに入力した系列と
同じ長さの系列が出力される
系列長n
・・・
系列長n
・・・
Key-Valueの方に入力すれば
系列長を圧縮できるのでは?
位置エンコーディング
(潜在ベクトル用)
・・・
潜在ベクトル系列
・・・
Encoder
(Transformer Decoder)
提案手法
Decoder
(Transformer Decoder)
入力ベクトル系列
・・・
位置エンコーディング
(入力ベクトル用)
・・・
+
位置エンコーディング
(入力ベクトル用)
・・・
出力ベクトル系列
・・・
Key-Value
Key-Value
Query
Query
同じ位置エンコーディ
ングを使用
x N
x N
空間的な位置というより
潜在ベクトルを識別するIDに近い
実験
● CIFAR-10の画像データ(32x32)を
4x4のパッチに分割(64個x48次元)
● Encoder, Decoderはそれぞれ6層の
TransformerDecoder
● 位置エンコーディングは正規分布で初期化して
学習可能な位置埋め込みとした
● 詳しくはコード見て
https://gist.github.com/myxyy/0e06c430652b35cd
a4d56aaf21eb7fa9
潜在ベクトルが16個の16次元ベクトルの場合
● 左から入力画像、潜在ベクトル、出力画像
画像の位置埋め込み、潜在ベクトルの位置埋め込み
● 500epoch時点のvalidationのMSELossは0.00805
● 500epoch時点のvalidationのMSELossは0.00646
● 16x16よりちょっと鮮明になった
潜在ベクトルが32個の16次元ベクトルの場合
● 500epoch時点のvalidationのMSELossは0.00480
● 32x16よりも性能が良い
潜在ベクトルが16個の32次元ベクトルの場合
考察
● なんで32x16より16x32の方が性能いいの?
○ Transformerの系列は並び替えで変化しない
○ 16x16は256次元ベクトルより16!倍弱い
○ 系列長を倍にしても情報量が倍にならない
○ ベクトルの次元数を増やす方が効率が良い
今後の課題
● 文字列等の本来やりたかった可変長系列の処理
○ 画像をパッチ分割することで様々な解像度の
画像を処理可能?
● 潜在ベクトルから位置情報を分離したい
○ VAEのような正則化が必要?

Transformerを用いたAutoEncoderの設計と実験