이 글은 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에 어떻게 집중을 하거나 한 문장에서 단어들을 연관시키는 것에서 출발 했습니다. 

Fig 1. A Shiba Inu in a men’s outfit. The credit of the original photo goes to Instagram @mensweardog.

사람의 visual attention은 특정 지역을 "고해상도"로 보고, (i.e., Fig 1의 노란 박스) 주변의 이미지는 "저해상도"로 보도록 하고, (i.e., 눈 내린 풍경) 이에 따라 초점을 조절하거나 추론을 가능하게 합니다. 노란 박스에 무엇이 있을 지를 예측하고자 할 때, 주변 패치들은 힌트를 줍니다. 우리는 오른쪽의 뾰죡한 귀, 개의 코 그리고 Shiba의 눈을 보고 (i.e. Fig 1의 빨간 박스) 노란 박스에 뾰죡한 귀가 나오겠다고 예측할 수 있습니다. 하지만, 밑의 스웨터와 담요는 개의 특징을 포착하기에 도움이 되지 않습니다.

 

이와 비슷하게 우리는 한 문장에서 단어들 사이의 관계를 설명할 수 있습니다. 예를 들어 "eating" 이라는 단어를 보면 대응되는 음식을 예상합니다. 색 단어는 음식을 묘사하나, "eating" 과 직접적인 관련성이 떨어집니다.

Fig 2. One word "attends" to the other words in the same sentence differently.

간단히 말해서, 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 구조를 사용합니다.

Fig 3. The encoder-decoder model, translating the sentence “she is eating a green apple” to Chinese.

이러한 고정된 사이즈의 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

Fig 4. The encoder-decoder model with additive attention mechanism in Bahdanau et al., 2015.

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을 볼 수 있는 좋은 산출물 입니다.

Fig. 5. Alignment matrix of “L’accord sur l’Espace économique européen a été signé en août 1992” (French) and its English translation “The agreement on the European Economic Area was signed in August 1992”.

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에 따라 아웃풋을 만듭니다. 상호 작용은 짝을 이루는 readwrite 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

 

 

 

TL;DR

Deep Residual Network (ResNet) [1]는 점차 깊어지는 (Deep) 딥러닝 아키텍처를 효과적으로 학습 가능하도록 하였으며, Residual Connection이라는 직관적이며 실제 성능 향상에 도움이 되는 구조를 제시한 딥러닝 분야의 ground breaking 한 논문입니다. 이 글에서는

https://towardsdatascience.com/an-overview-of-resnet-and-its-variants-5281e2f56035

 

An Overview of ResNet and its Variants

After the celebrated victory of AlexNet [1] at the LSVRC2012 classification contest, deep Residual Network [2] was arguably the most…

towardsdatascience.com

해당 링크를 참고하여, ResNet의 두 가지 후속 연구방향:  (i) ResNet 구조를 결정하기 위한 후속 연구와 (ii) Improved ResNet (DenseNet, ResNeXt)를 소개하고, 저 역시 팔로업하고자 합니다.

 

Revisiting ResNet

Universal approximation theorem에 따르면 하나의 레이어를 가진 Neural Network가 임의의 function도 근사할 수 있는 능력을 가졌음을 보였습니다. 하지만, 얕은 레이어 구성은 Overfitting 되기 쉽고, 따라서 레이어를 깊이 쌓는 것이 일반적인 딥러닝 트렌드가 되었습니다. 그래서 이미지 분류에서 과거 뛰어난 성능을 보였던 모델들은 모두 점차 깊어지면서 성능 향상을 이뤘습니다. AlexNet에서 시작해서 VGG network 그리고 GoogleNet (Inception v1) 이 그 예가 됩니다. 하지만 Neural Network가 깊어질수록 Vanishing gradient 문제에 취약해지고 성능에 악영향을 주었습니다. Vanishing gradient를 해결하기 위해서 ResNet에서 제시한 방법은 각 레이어를 통과할 때, identity mapping을 하는 통로를 열어주는 것입니다. 이를 가리켜 Residual connection이라고 부르고, 비유적으로 지름길 (shortcut)이라고 볼 수 있습니다.

identity mapping 통로를 붙여주면 Vanishing gradient 문제에서 자유로워집니다. 먼저, F(x) + x 에서 발생한 gradient는 F(x)를 통과하며 해당 weight layer의 gradient와 곱해지면서, 마찬가지로 gradient가 작아지지만, identity x 쪽은 gradient가 작아지는 일 없이 그대로 Backpropagation 할 수 있습니다. add 연산이 gradient distributor임을 기억하면, 이 레이어의 인풋이 되는 x의 gradient는 $\nabla F(x) + \nabla (identity \ x)$로 계산할 수 있으니, 만일 전자가 Vanishing된다고 하더라도, 후자가 gradient를 그대로 보존하고 있으니 gradient가 완전히 사라지는 일은 없습니다. 또한 Residual connection이 있다면, identity x 쪽에서 중요한 feature를 보존하고 (예를 들어, 개-고양이 분류라면, 고양이의 귀 정보), weight layer가 나머지 부분 (Residual)을 집중해서 학습하여 성능이 향상된다고 해석할 수 있습니다. 상대적으로 이미 찾아낸 주요한 feature의 손상을 최소화하고, 중복될 수 있는 weight layer의 임무를 덜어줄 수 있는 것입니다.  

 

(i) How to determine the architecture of ResNet?

실제 ResNet 구조에서는 identity mappings이 아닌 부분에 대한 실험은 별도로 진행하지 않았습니다. 더불어 논문에서는 깊은 레이어에 대해서 뛰어난 성능을 보였지만, 이상하게도 1202-layer짜리 아주 깊은 (그 당시 기준) 네트워크는 학습하는 데 실패했습니다. 동일한 저자는 이를 태클링하고 identity mappings이 아닌 부분에 대한 다양한  변종에 대한 실험을 덧붙여서 최적의 구조를 제시했습니다 [2].   

 

(ii) Improved ResNet (DenseNet, ResNeXt)

 (1) DenseNet [3]에서는 ResNet에서 제안한 Connection의 효율을 극대화하기 위해서 모든 레이어를 서로 잇는 방법을 제안합니다. 또한 각 layer별로 채널이 달라지기 때문에 , add하는 대신 feature map은 채널로 concatenation 돼서 연산됩니다. 이런 구조에서는 각 레이어에서 나온 모든 feature map의 정보를 보존하여 사용할 수 있습니다. 한편, 채널이 지나치게 증가하여 연산이 비싸지는 것을 방지하고자, Dense Block 이후에 Transition Layer를 두어 채널을 허용될 정도로 줄이는 구조를 취하고 있습니다.

(2) ResNeXt [4] 는 ResNet의 아이디어와 Inception 모듈의 아이디어를 합쳐서 흡사 앙상블 전략을 취했습니다.

 

 

Conclusion

이 포스팅에서는 ResNet의 코어 아이디어를 복습하고, 해당 논문을 발전시킨 연구방향에 대해서 알아봤습니다.

 

 

 

 

[1]. K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. arXiv preprint arXiv:1512.03385,2015.

[2] K. He, X. Zhang, S. Ren, and J. Sun. Identity Mappings in Deep Residual Networks. arXiv preprint arXiv:1603.05027v3,2016.

[3]. G. Huang, Z. Liu, K. Q. Weinberger and L. Maaten. Densely Connected Convolutional Networks. arXiv:1608.06993v3,2016.

[4]  S. Xie, R. Girshick, P. Dollar, Z. Tu and K. He. Aggregated Residual Transformations for Deep Neural Networks. arXiv preprint arXiv:1611.05431v1,2016.

'Machine Learning' 카테고리의 다른 글

Attention? Attention! (Korean Version)  (1) 2020.07.25
2 Viewpoints of MSE vs Cross-entropy loss  (0) 2020.04.11

 

 

TL;DR

Mean squared error (MSE), Cross entropy 에 대한 (1) Backpropagation 효율, (2) Likelihood 관점에서의 비교

 

 

(1) Backpropagation 효율

간단한 NN - $z = wx+b, a = \sigma(z), GT = y$, 전부 스칼라라고 하자

MSE의 경우 다음과 같이 된다:

  • $L = \frac{(a-y)^2}{2}$
  • 업데이트할 Gradients $\nabla w = x\sigma'(z)(a-y)$,  $\nabla b = \sigma'(z)(a-y)$
  • $\sigma$의 Gradient에 의해서 해당 값은 작고, 결과적으로 느리게 학습된다. 

 

Cross-entropy의 경우 위와 같은 상황에서 $\sigma$의 미분값이 사라진다!

  • $L=-(y log a + (1-y)log(1-a))$
  • $\nabla_{a}L = \frac{a-y}{(1-a)a}, \sigma'(z) = (1-a)a$
  • 두 항을 곱하면 (a - y) ! 

(2) Maximum Likelihood 관점

확률분포 관점에서 네트워크 출력을 보면, 정해진 확률분포 (e.g. 가우시안, 베르누이 등) 에서 출력이 나올 확률이라고 해석할 수 있습니다.

즉, 우리가 $p(y | f_{\theta}(x))$라고 쓴 네트워크의 아웃풋에서 $f_\theta(x)$가 하는 역할은 확률분포의 모수를 추정하는 것입니다. 예를 들어, 이는 가우시안 분포의 $\mu, \sigma$를 예측을 하는 것이고 loss로 스칼라 하나가 나오는 것은 추정된 분포에서 ground truth (y)의 likelihood를 평가하는 것 입니다. 아래 그림에서 이와 같은 관점이 잘 설명되어 있습니다:

그리고 이러한 likelihood를 최대화 (maximization)를 하기 바라기 때문에 $-log$을 붙여 주어서 Negative log likelihood loss로 사용하는데, 따라서 이 관점에서는 Loss를 최소화 시키는 것은, likelihood를 최대화 시키는 것이 됩니다. 또한 확률 분포를 찾은 것이기 때문에, 샘플링을 한다고 볼 수 있습니다. 근데, 해석이긴 하지만 Negative log likelihood loss가  NN을 학습시키는 적합한 loss로 사용될 있을까요? Backpropagation에 사용될 수 있는 loss는 아래와 같은 두 가지 가정을 충족해야 합니다.

  • (A1) Total loss of DNN over training samples is the sum of loss for each training sample
  • (A2) Loss for each training example is a function of final output of DNN

일반적으로 likelihood를 추정하기 위한 학습 데이터에 대해서 i.i.d 조건을 가정하기 때문에 적합한 loss 입니다.

  • All of our data is independent of each other (Independence) ~ (A1) 만족
  • Our data is identically distributed (Identical Distribution) ~ (A2) 만족

한편 데이터가 Univariate 혹은 Mutivariate 할 경우, Gaussian 분포, Bernoulli / Categorical 분포의 모수를 추정한다고 가정했을 때,  각 경우 어떤 loss가 적합한지 고민해 볼 수 있습니다. 결론부터 이야기하면 Gaussian 분포 모수 추정시에는 MSE가, Bernoulli / Categorical 분포 모수 추정시에는 Cross-entropy가 적합한 loss입니다. 수식 유도는 이활석님 슬라이드에서 가져왔습니다:

이 관점에서 보면 데이터가 continuous 분포를 따른 다면 MSE가 반면 discrete 하다면 Cross-entropy가 적합합니다: 

Summary

참고 자료

'Machine Learning' 카테고리의 다른 글

Attention? Attention! (Korean Version)  (1) 2020.07.25
An Overview of ResNet and its Variants  (0) 2020.04.21

+ Recent posts