이 글은 https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html을 저자의 동의 하에 번역한 글입니다.
This posting is a Korean translated version of https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html under the author's permission
Contents
- What's Wrong with Seq2Seq Model?
- Born for Translation
- Definition
- A Family of Attention Mechanisms
- Summary
- Self-Attetion
- Soft vs Hard Attention
- Global vs Local Attention
- Neural Turing Machines
- Reading and Writing
- Attention Mechanisms
- Pointer Network
- Transformer
- Key, Value and Query
- Multi-Head Self-Attention
- Encoder
- Decoder
- Full Architecture
- SNAL
- Self-Attention GAN
- Refereneces
Attention은 사람이 이미지의 다른 region에 어떻게 집중을 하거나 한 문장에서 단어들을 연관시키는 것에서 출발 했습니다.
사람의 visual attention은 특정 지역을 "고해상도"로 보고, (i.e., Fig 1의 노란 박스) 주변의 이미지는 "저해상도"로 보도록 하고, (i.e., 눈 내린 풍경) 이에 따라 초점을 조절하거나 추론을 가능하게 합니다. 노란 박스에 무엇이 있을 지를 예측하고자 할 때, 주변 패치들은 힌트를 줍니다. 우리는 오른쪽의 뾰죡한 귀, 개의 코 그리고 Shiba의 눈을 보고 (i.e. Fig 1의 빨간 박스) 노란 박스에 뾰죡한 귀가 나오겠다고 예측할 수 있습니다. 하지만, 밑의 스웨터와 담요는 개의 특징을 포착하기에 도움이 되지 않습니다.
이와 비슷하게 우리는 한 문장에서 단어들 사이의 관계를 설명할 수 있습니다. 예를 들어 "eating" 이라는 단어를 보면 대응되는 음식을 예상합니다. 색 단어는 음식을 묘사하나, "eating" 과 직접적인 관련성이 떨어집니다.
간단히 말해서, attention은 딥러닝에서 가중치 벡터로 해석할 수 있고, 이를 통해 이미지의 픽셀이나 단어를 예측할 수 있습니다. 우리는 attention vector를 통해서 하나를 기준으로 다른 요소들과 얼마나 강하게 연관되어 있나 추정하고 이를 가중 평균하여 타겟을 추정하는데 사용할 수 있습니다.
What's Wrong with Seq2Seq Model?
seq2seq 모델은 language modeling 분야에서 탄생하였으며, 넓게 봤을 때 임의의 길이의 input sequence (soruce)를 target으로 바꾸는 목표를 가지고 있습니다. 이러한 변환의 예는 텍스트 혹은 오디오 기계 번역, QA 대화 생성 등을 포괄하고 있습니다.
seq2seq 모델은 일반적으로 encoder-decoder 구조를 가지고 있습니다:
- Encoder 는 input sequence를 받아드리고 정보를 처리하여 고정된 사이즈의 context vector (= sentence embedding = thought vector)로 임베딩합니다. 이 representation은 전체 source에 대한 좋은 요약 생각할 수 있습니다.
- Decoder는 context vector에서 출발하여 변환된 아웃풋을 만들어 냅니다. 초기의 연구들은 encoder의 마지막 아웃풋만 이용하여 decoder의 인풋으로 사용했습니다.
encoder, decoder는 모두 LSTM, GRU 같은 RNN 구조를 사용합니다.
이러한 고정된 사이즈의 context vector의 약점은 아주 긴 문장들을 잘 기억하지 못한다는 것입니다. 마지막 단어까지 임베딩을 하면 처음에 임베딩 했던 정보들을 잊는 다는 것입니다. attention mechanism은 이러한 문제를 해결하고자 태어났습니다. (Bahdanau et al., 2015)
Born for Translation
Attention mechanism은 neural machine translation에서 긴 source 문장을 기억하기 위해서 제안되었습니다. Encoderd의 마지막 hiddent state을 그대로 context vector로 사용하기 보다는, attention에서는 context vector와 전체 source sequence의 shortcut을 만듭니다. 이 shortcut의 가중치는 각 아웃풋에 따라서 변화합니다.
context vector가 전체 source sequence에 대해서 접근할 수 있기 때문에, "잊는 것"에 대해서 걱정 할 필요가 없습니다. 결과적으로 context vector는 세 가지 정보를 고려합니다: encoder hidden states; decoder hidden states; alignment between source and target
Definition
이제 NMT에서의 attention mechanism을 정의해 봅시다. 길이가 $n$인 source sequence $x$가 있고, 아웃풋으로 길이가 $m$인 traget sequence $y$를 낸다고 합시다:
Encoder는 bidirectional RNN이고 forward hidden state $\overrightarrow{h}_i$, bacward hidden state $\overleftarrow{h}_i$입니다. 즉, 두 개의 단순 concatenation이 encoder state를 의미합니다. 목적은 앞선 단어들과 뒤에 나오는 단어들을 모두 고려하기 위함입니다.
Decoder의 hidden state는 context vector $c_t$를 가중치를 alignment score $h_i$의 합이라고 할 때, $s_t=f(s_{t-1}, y_{t-1}, c_{t})$와 같이 나타낼 수 있습니다. 여기서 $t$는 아웃풋의 위치를 의미합니다.
alignment 모델이 아웃풋으로 주는 $\alpha_{t,i}$는 input 위치 $i$와 아웃풋 위치 $t$에서의 조합 $(y_t, x_i)$의 매칭 (혹은 유사도) 정도를 의미합니다. 다시 말하면, 집합 $\{\alpha_{t,i}\}$은 각 source hidden state가 각 아웃풋을 만들때 얼마나 고려되나를 의미합니다. Bahdanau의 논문에서 alignment score $\alpha$는 single hidden layer인 feed-forward network로 parametrize되고, 모델과 같이 훈련됩니다. score 함수는 따라서 아래와 같은 형태를 가집니다.
$v_a$, $W_a$는 alignment 모델의 learnable parameter입니다.
alignment score의 행렬은 source와 target 단어들의 correlation을 볼 수 있는 좋은 산출물 입니다.
A Family of Attention Mechanisms
Summary
아래는 유명한 attention mechanism과 alignment score함수의 요약 테이블 입니다.
(*) 는 Luong et al., 2015에서 "concat"이라고 불리고, Vaswani et al., 2017에서는 "additive attention"이라고 불립니다.
(^)에서는 scaling factor $1/\sqrt{n}$를 곱해주는 데, 이는 값이 너무 커지면 softmax funciton의 이 극단적으로 작은 gradient를 가지게 되고, 이는 훈련하기 어렵기 때문입니다.
아래는 attention mechanism의 넓은 범주입니다.
(&) 는 또한 Cheng et al., 2016에서 "intra-attention"이라고 불립니다.
Self-Attention
Self-attention은 single sequence에서의 다른 위치들 사이를 관련시켜서 같은 sequence의 representation을 계산합니다. 이는 machine reading, abstractive summarization, image description generation 태스크에 매우 유용하다는 것이 밝혀 졌습니다.
Long Short-Term Memory-Networks 논문에서는 machine reading을 위해서 self-attention을 사용합니다. 아래의 예에서 처럼 self-attention mechanism은 우리에게 현재 단어와 전에 나왔던 단어들 사이의 correlation을 계산해 줍니다.
Soft vs Hard Attention
show, attend and tell 논문에서는 attention mechanism을 이미지 캡셔닝 태스크에 적용합니다. 이미지는 처음에 CNN으로 인코딩하여 특징을 추출한 다음, LSTM decoder가 특징을 이용해서 캡셔닝 단어를 차례로 만들어 냅니다. 이 때 weight는 attention을 통해서 배웁니다. attention weight의 시각화는 확실히 모델이 특정 단어를 만들기 위해서 이미지의 어떤 부분에 집중하고 있는지 보여 줍니다.
이 논문에서는 처음으로 attention이 전체 이미지에 접근할 수 있는지 혹은 패치에만 접근할 수 있는지에 따라서 "soft vs hard" 으로 attention을 나누었습니다.
- Soft Attention: alignment weights는 "softly" source 이미지의 모든 패치에 걸립니다.
- 장점: 모델이 쉽게 differentiable하다.
- 단점: source 사이즈가 커지면 computationally 비싸다.
- Hard Attention: 이미지 중의 한 패치만 골라서 attend 한다.
- 장점: inference 때 계산이 더 적다.
- 단점: 기본적으로 non-differentiable해서 variance reduction 이나 reinforcement learning 같은 복잡한 기술이 필요하다.
Global vs Local Attention
Luong et al., 2015 은 "global"과 "local" attention이라는 개념을 제안합니다. global attention은 soft attention 이라고 비슷하며, local attention은 hard 와 soft attention의 중간이며, hard attention를 differentiable하게 만든 개선 버전입니다. local attention에서 모델은 처음에 현재 target 단어에 대해서 개별 aligned 된 위치를 예측하고, 이를 중심으로 하여 window내에 있는 source 위치의 hidden state를 이용해서 context vector를 계산합니다.
Neural Turing Machines
Alan Turing은 1936년은 계산을 위한 모형을 제안했습니다. 이는 무한히 긴 테이프와 테이프와 상호작용하는 헤드로 구성되었습니다. 테이프 위에는 셀 수 없는 셀이 있고, 각 셀은 0, 1 혹은 빈 칸 (" ")으로 채워져 있었습니다. 헤드는 해당 심볼은 읽거나, 편집하거나, 좌우로 움직일 수 있었습니다. 이론적으로 Turing machine은 어떠한 컴퓨터 알고리즘이라고 시뮬레이션할 수 있었습니다. 무한한 메모리는 Turing machine에게 수학적으로 무한한 능력을 주었습니다. 그러나, 무한한 메모리는 사실상 현대 컴퓨터로는 불가능했고 우리는 Turing machine을 단순히 계산을 위한 수학적 모델로 여겼습니다.
Neural Turing Machine (NTM, Graves, Wayne & Danihelka, 2014) neural network와 외부 메모리 저장소를 결합시키기 위한 모델 구조입니다. 메모리는 Turing machine의 테이프에 해당하고, neural network는 헤드처럼 메모리(테이프)를 읽거나 씁니다. 그러나 NTM는 유한합니다. 따라서 오히려 “Neural von Neumann Machine”에 더 가깝습니다.
NTM은 두 가지 부분으로 구성됩니다: controller (neural network) 와 memory bank. Controller는 메모리의 명령을 작동시킵니다. neural network는 제한 없이 feed-forward이거나 recurrent neural network로 구성됩니다. Memory는 처리된 정보를 저장합니다. 이는 $M$ 차원을 가진 $N$개로 구성된 $N \times M$ 사이즈의 행렬입니다.
한번의 업데이트에서 controller는 input를 처리하고 memory bank에 따라 아웃풋을 만듭니다. 상호 작용은 짝을 이루는 read 와 write head들로 이루어 집니다. read와 write 모두 모든 메모리 주소에 softly attending 하면서 이루어 집니다.
Reading and Writing
$t$시점에서 메모리로부터 읽어 올때는 attention vector는 사이즈가 $N$이며, $w_t$는 각 메모리 지점에 (matrix 행)에 얼만큼 attention할껀지를 조정합니다. read vector $r_t$는 이들을 이용한 가중 평균입니다.
여기서 $w_{t}(i)$는 $w_t$의 i번째 요소이고 $M_{t}(i)$는 메모리의 i번째 행 벡터입니다.
$t$시점에서 쓸 때는 LSTM의 input, forget 게이트처럼 write head가 erase vector $e_t$에 따라 몇몇 낡은 content를 지우고, add vector $a_t$에 따라 새로운 정보를 추가합니다.
Attention Mechanisms
NTM에서 attention 분포 $w_t$를 만드는 과정은 addressing mechanism과 관련 있습니다: NTM은 content기반, location기반 addressing를 섞어 씁니다.
Content-based addressing
content-addressing은 input를 controller로 변환한 key vector $k_t$와 메모리 행들과의 유사도로 attention vector를 만듭니다. content기반 attention은 코사인 유사도를 구한 이후에 softmax로 구합니다. 게다가 NTM은 strength multiplier $\beta$를 추가하여 분포의 집중을 더 심하게 합니다.
Interpolation
interpolation gate 값 $g_t$는 새롭게 생성된 content기반 attention vector와 이전 스텝의 것을 섞습니다.
Local-based addressing
Location-based addressing은 특정 길이에서의 weighting distribution을 가중치로 하여 attention vector에 있는 다른 위치의 값들을 더합니다. 이는 1d convolution을 $s_t(\dot)$ 커널로 하는 것과 같습니다. 이 분포를 정의하는 것은 다양한 방법이 있습니다.
마지막으로 attention 분포는 sharpening 값 $\gamma_t \geq 1$에 의해 계산됩니다.
attention vector $w_t$를 만들어내기 위한 전체적은 과정은 아래에 있습니다. controller가 가지는 모든 파라미터는 각 head 별로 고유합니다. 만약 복수의 read, write head가 있다면, controller는 복수개의 아웃풋을 냅니다.
Pointer Network
sorting 이나 travelling salesman 문제에서 input과 output은 sequential 데이터 입니다. 불행히도 우리는 seq2seq와 NMT 모델로 이러한 문제를 해결할 수 없습니다. 왜냐하면, output의 discrete한 카테고리가 미리 정해지지 않고, input 사이즈에 따라서 정해지기 때문입니다. Pointer Net (Ptr-Net; Vinyals et al., 2015) 는 . output 요소가 input sequence의 특정 위치에 대응될때 (sorting의 경우가 그렇습니다.), 이 문제를 풀기 위해서 제안되었습니다. Encoder의 hidden state를 섞어서 context vector를 만들기 보다는 Ptr-Net은 각 decoding 스텝에서 attention을 input에 적용하여 하나를 뽑아서 아웃풋으로 사용하게 됩니다.
Input vector $x=(x_1,\ldots,x_n)$가 주어지면 Ptr-Net integer 인덱스의 sequence $c=(c_1,\ldots,c_m), 1 \leq c_i \leq n$을 아웃풋으로 내게 됩니다. 모델은 어전히 encoder-decoder 구조이며 인코더와 디코더의 hidden state는 그림에서 $(h_1,\ldots,h_n)$, $(s_1,\ldots,s_m)로 표기됩니다. Ptr-Net은 state들 사이의 additive attention을 적용하고, 이를 softmax를 통해서 normalize하여 conditional probability를 아웃풋으로 만듭니다.
여기서의 attention mechanism은 단순합니다. Ptr-Net은 attention weight를 통해서 encoder state를 섞어서 아웃풋으로 내지 않습니다. 이를 통해서 아웃풋은 "위치"에만 연관되고 input content(state)에는 관련성이 없어집니다.
Transformer
"Attetion is All you Need"는 2017년에 나온 아주 흥미로운 논문입니다. 이 논문에서는 soft attention을 개선시키고 이를 recurrent network 구조 없이도 seq2seq 모델링을 가능하게 했습니다. 제안된 구조인 "transformer"은 sequence를 받기 위한 recurrent한 구조없이 self-attention mechanism에 기반하여 만들어 졌습니다.
Key, Value and Query
transformer의 주요 요소는 multi-head self-attention mechanism입니다. transformer는 input의 인코딩된 representation을 차원이 $n$ (input sequence 길이)인 key-value 페어 ($K, V$)로 봤습니다. NMT의 관점에서 key와 value는 모두 encoder의 hidden state에 해당합니다. decoder에서는 이전 아웃풋이 query ($m$차원의 $Q$)로 압축되어, 다음 아웃풋을 이 query를 key, value 셋들과 맵핑하여 만들게 됩니다.
transformer에서는 scale dot-product attention을 이용하여 아웃풋이 value들의 가중합으로 나타내어 집니다. 이 때의 각 value의 가중치는 query와 모든 key들의 dot-product로 결정됩니다.
Multi-Head Self-Attention
attention은 한번에 계산하기 보다는 multi-head mechanism은 scaled dot-product attetnion을 병렬적으로 여러 번 계산합니다. 독립적인 attention 아웃풋은 단순히 concatenation되서 지정된 차원으로 선형적으로 변환됩니다. 저는 이 목적이 단순히 attention을 ensembling하는 거라고 생각하고 있습니다. 논문에서는 “multi-head attention allows the model to jointly attend to information from different representationsubspacesat different positions. With a single attention head, averaging inhibits this.” 와 같이 기술하고 있습니다.
여기서에 $W_{i}^{Q}, W_{i}^{K}, W_{i}^{V}$와 $W^{O}$는 learnable 파라미터 입니다.
Encoder
Encoder는 매우 큰 context에서 특정 부분을 찾을 수 있는 attention기반 representation을 만듭니다.
- 같은 6개의 layer의 스택
- 각 layer는 multi-head self-attention layer와 단순한 fully connected feed-forward network로 구성되어 있습니다.
- 각 sub-layer는 residual connection과 layer normalizaiton을 가집니다. 모든 sub-layer들의 아웃풋은 512차원을 가집니다.
Decoder
decoder는 인코딩된 representation으로 부터 정보를 추출할 수 있습니다.
- 6개의 같은 layer의 스택입니다.
- 각 layer는 2개의 multi-head attention과 fully connected feed-forward network를 sub-layer로 가집니다.
- encoder와 비슷하게 각 sub-layer는 residual connection과 layer normalization을 가집니다.
- 첫 번째 multi-head attention은 기존 것과 조금 달리 마스크 연산을 해줘야 합니다. 왜냐하면, 이후의 위치에 attention이 걸리는 것을 방지하기 위해서 입니다. 마치 우리가 현재 위치의 단어를 맞추기 위해서 미래의 것들을 보지 않는 것과 같습니다.
Full Architecture
transformer에 대한 완전한 뷰는 아래와 같습니다.
- source, target sequence 모두 처음에 embedding layer를 통과해서 512차원으로 임베딩 됩니다.
- 위치 정보를 보전하기 위해서 sinusoid-wave-based positional encoding이 임베딩에 더해 집니다.
- 마지막 decoder 아웃풋을 내기 위해서 softmax와 linear layer가 마지막에 붙습니다.
SNAIL
transformer는 recurrent 혹은 convolutional 구조를 가지고 있지 않고, 위치에 대한 정보를 positional encoding으로 처음 임베딩에 더해주는 것이 전부이기 때문에, sequence의 순서에 대한 정보는 약하게 고려됩니다. 만약 reinforcement learning처럼 positional dependency에 민감한 문제인 경우에 이는 큰 문제가 될 수 있습니다.
A Simple Neural Attentive Meta-Learner (SNAIL; Mishra et al., 2017)에서는 temporal convolution을 transformer의 self-attention mechanism에 결합하여 transformer가 위치 정보를 고려하지 못한다는 문제를 해결하고자 합니다. 이는 supervised learning과 reinforcement learning 태스크에서 좋은 성능을 보입니다.
SNAIL은 하나의 포스팅으로 다룰 만한 메타러닝의 필드에서 탄생했습니다. 단순하게 말하면 메타러닝 모델은 비슷한 분포에서의 새롭고 보지못한 태스크를 일반화할 수 있음을 기대됩니다. 이에 대한 좋은 introduction: 링크
Self-Attention GAN
Self-Attention GAN (SAGAN; Zhang et al., 2018)은 self-attention layer를 GAN 구조와 결합하려 generator와 discriminator가 spatial 지역들 사이의 관계를 잘 모델링할 수 있게 했습니다.
전통적인 DCGAN은 단순히 multi-layer convolutional network로 구성되어 있기 때문에, network의 capacity는 필터 사이즈에 의해서 제한됩니다. 멀리 떨어져 있는 지역을 연결하기 위해서는 여러층의 convolutional layer를 통과하여야 하기 때문에 dependency가 유지가 보장되지 않습니다.
비전 분야에서 (soft) self-attention은 한 픽셀과 다른 모든 위치들 사이의 관계를, 심지어 멀리 떨어져 있더라도, 명시적으로 배우기 위해서 디자인되었습니다. 이를 이용하면 global dependency를 쉽게 포착할 수 있습니다. 그러므로 self-attention이 들어간 GAN은 세부적인 부분을 좀 더 잘 만들 수 있을 것이라고 기대됩니다.
SAGAN은 non-local neural network을 attention 계산을 위해서 도입했습니다. convolution 연산을 통과한 이미지 피처맵 $x$를 통해서 key, value, query를 구하는 데 사용됩니다.
- Key: $f(x)=W_f(x)$
- Query: $g(x)=W_g(x)$
- Value: $h(x)=W_h(x)$
그런 다음 dot-product attention을 통해서 self-attention 걸린 피쳐맵을 만듭니다.
$\alpha_{i,j}$는 attention map의 한 멤버이며, j번째 부분을 만들 때 i번째 부분을 얼만큼 attend를 할지를 결정합니다. $W_f, W_g$ 그리고 $W_h$은 모두 $1 \times 1$ convolution 필터입니다. 만약 $1 \times 1$이 그저 피쳐맵을 하나의 숫자로 곱하는 것이라고 생각해서 그것을 쓰는 게 이상하다고 여겨진다면, 이 tutorial 을 보는 것을 추천합니다. 아웃풋 $o_j$는 최종 아웃풋 $o=(o_1,o_2,\ldots,o_{j},\ldots,o_{N})$의 열 벡터입니다.
게다가, attention layer의 아웃풋은 scale 파라미터와 곱해져서 원래의 피쳐맵과 더해집니다.
논문에서는 $\gamma$값이 훈련 중에 0에서부터 출발해서 점차적으로 올라간다고 하고 있습니다. 이는 network가 처음에는 근처 지역의 정보에 의존하다가 점차적으로 멀리 떨어진 영역에 weight를 부여하는 것을 의미합니다.
Reference
[1] “Attention and Memory in Deep Learning and NLP.” - Jan 3, 2016 by Denny Britz
[2] “Neural Machine Translation (seq2seq) Tutorial”
[3] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” ICLR 2015.
[4] Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, and Yoshua Bengio. “Show, attend and tell: Neural image caption generation with visual attention.” ICML, 2015.
[5] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” NIPS 2014.
[6] Thang Luong, Hieu Pham, Christopher D. Manning. “Effective Approaches to Attention-based Neural Machine Translation.” EMNLP 2015.
[7] Denny Britz, Anna Goldie, Thang Luong, and Quoc Le. “Massive exploration of neural machine translation architectures.” ACL 2017.
[8] Ashish Vaswani, et al. “Attention is all you need.” NIPS 2017.
[9] Jianpeng Cheng, Li Dong, and Mirella Lapata. “Long short-term memory-networks for machine reading.” EMNLP 2016.
[10] Xiaolong Wang, et al. “Non-local Neural Networks.” CVPR 2018
[11] Han Zhang, Ian Goodfellow, Dimitris Metaxas, and Augustus Odena. “Self-Attention Generative Adversarial Networks.” arXiv preprint arXiv:1805.08318 (2018).
[12] Nikhil Mishra, Mostafa Rohaninejad, Xi Chen, and Pieter Abbeel. “A simple neural attentive meta-learner.” ICLR 2018.
[13] “WaveNet: A Generative Model for Raw Audio” - Sep 8, 2016 by DeepMind.
[14] Oriol Vinyals, Meire Fortunato, and Navdeep Jaitly. “Pointer networks.” NIPS 2015.
[15] Alex Graves, Greg Wayne, and Ivo Danihelka. “Neural turing machines.” arXiv preprint arXiv:1410.5401 (2014).
'Machine Learning' 카테고리의 다른 글
An Overview of ResNet and its Variants (0) | 2020.04.21 |
---|---|
2 Viewpoints of MSE vs Cross-entropy loss (0) | 2020.04.11 |