Curaai00's Deep Learning Blog

GRU: Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

딥러닝/자연어처리
[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

[GRU]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

기존의 Statistical Machine Translation은 통계와 확률 기반으로 문장을 번역했습니다. 하지만 Deep Learning을 도입하였더니 더 좋은 성능을 보이기 시작했습니다. RNN을 이용한 새로운 방식의 Translation을 선보이고 더욱더 간편한 RNN hidden cell 구조를 선보였습니다.

RNN Encoder-Decoder

새로운 Encoder-Decoder 방식의 RNN은 variable-length input sequence를 encode하여 고정된 길이의 vector로 표현하여 다시 variable-length output sequence로 decode합니다. 이때 vector c는 각각의 단어 혹은 문장의 의미를 가지고 있다고 할수 있겠죠. Decoder는 vector c에서 번역할 언어로 decoding 하며 재표현한다고 볼수 있습니다.


Encoder는 x_1 부터 x_t까지 읽으며 RNN cell을 업데이트하고 RNN의 hidden state는 summary c가 됩니다.

Decoder는 input sequence의 context를 담고 있는 c와 이전의 hidden state, y를 이용하여 hidden state를 다음과 같이 업데이트 합니다.

또한 Decoder는 이전의 y값들과 context c, 현재 hidden state를 이용하여 t번째 y 값의 확률을 예측(softmax)합니다.

RNN Encoder-Decoder는 합쳐져 conditional log-likelihood를 최대화하는 Network로 표현될수 있습니다. n번째 x에 대해 n번째 y를 최대로 하는 확률을 maximize 하는 network Θ를 찾는 것입니다.

이 RNN 아키텍쳐를 두가지 방법으로 사용할 수 있습니다.

  • 하나는 input sequence로 target sequence를 생산하는 것입니다.
  • 또 하나는 input과 output sequence를 줬을 때 모델이 한쌍에 대한 score를 얻을 수 있습니다. (4)의 x에 대한 y의 확률을 이용해서 말입니다.

Gated Recurrent Unit



GRU는 reset gate와 update gate가 있습니다. sigma 기호는 sigmoid function을 나타내고, phi 기호는 tanh function을 나타냅니다. 그리고 W와 U는 weight matrices입니다. x는 input, h는 hidden state를 나타냅니다.

  • reset gate는 수식 (5)로 계산되며, 이전의 hidden state가 무시될지 결정합니다.

  • update gate는 수식 (6)으로 계산되며, hidden state가 h^hat으로 update될지 결정합니다.

  • reset gate가 0에 가까워질수록 hidden state가 이전 hidden state를 무시하도록 하며, 현재의 input만을 reset하도록 합니다. update gate는 이전의 hidden state의 정보가 현재의 hidden state까지 전달되도록 조종합니다.

Statistical Machine Translation

우리의 목적은 original source e를 줬을 떄 번역 f를 찾는 것입니다. 식으로 표현한다면 다음과 같겠죠. 즉 source로 번역(target)을 찾을 확률과 source가 target으로 완전히 번역되는 확률을 비례하려합니다.

이를 log 선형 모델로 나타낼수 있습니다. f_n과 w_n은 n번째 feature와 weight입니다.

Z(e)는 w에 의존하지 않는 normalization 상수입니다. w는 BLEU score를 최적화하기 위해 종종 최적화됩니다. log p(e | f)는 source와 target에 매칭되는 구(phrase)를 맞추는 확률들로 분해될 수 있습니다. 이 확률이 추가적인 feature로 표현된다면 (9)와 같습니다.

RNN Encoder-Decoder를 학습할때에는 corpus(말뭉치?)에서 각 구(phrase) pair가 얼마나 자주 나오는지에 대해서는 무시합니다.

  1. large phrase frequency table(큰 구 빈도 테이블)에서 일반화된 빈도수의 phrase pair를 선택하여 연산량을 막기 위함입니다.
  2. RNN Encoder-Decoder가 phrase pair의 translation probability가 이미 phrase fair의 빈도수를 반영하고 있기 때문에 쉽게 학습되지 않기 때문입니다.


ResNet: Identity Mappings in Deep Residual Networks

딥러닝/이미지 인식

ResNet Identity Mappings in Deep Residual Networks

ResNet: Identity Mappings in Deep Residual Networks


Residual Unit에서 사용되는 Identity Mapping이 단순히 더하는 연산일 뿐인데 왜 잘 작동하고, 오히려 기존의 것들 보다 더 좋은 성능이 나오는지 알아보려고 합니다.

Residual Function

ResNet은 여러 "Residual Unit"이 쌓여있습니다. 이를 수식으로 표현한다면 F는 residual function, h(x)는 Identity mapping, W는 해당 l번째 layer의 Weight, f는 ReLU function입니다.



그리고 저희는 이러한 Residual Unit의 residual function + identity mapping 방식을 shortcut connection, skip connection라고 부릅니다.

이 shortcut connection의 ReLU는 아무 영향을 미치지 않고, h(x)는 identity function이기 때문에



과 같이 바꿔 쓸수 있습니다. 하지만 이것을 재귀적으로 바꿔쓴다면 (2)와 같이 쓸수 있겠죠



그래서 L번째 unit은 l번째 unit으로 표현할 수 있습니다.(L > l)


Pre-Activation

h(x)인 identity mapping과 f: relu나 batch norm 같은 activation은 기존의 방식에서는 layer(weight)를 거친 후에 적용하였지만, 연구를 하던 도중 다양한 identity mapping을 시도하던 중 post-activation보다 pre-activation이 더 좋은 성능을 나온 다는 것을 알아냈습니다.



Why Identity Mapping

근데 여기서 왜 Identity Mapping이 필요한가 생각할 수 있습니다. Residual Unit은 전파 정보를 직접적으로 전달하는데 집중합니다. h(x)나 f(x)같은 identity mapping이 포워드 패스(forward pass, 네트워크의 input을 end로 전파시키는 것)와 역전파시 한 Unit에서 다른 Unit으로 전달하도록 합니다!

Back Propagation

E(Epsilon)을 loss function으로 나타냈을 때, chain rule에 의한 역전파시 다음과 같은 식을 얻을 수 있습니다. gradient는 두가지 항으로 나눌 수 있습니다. 첫번째 항은 다른 어떤 weight layer의 방해 없이 정보를 직접적으로 전파할 수 있습니다. 두번째 항은 weight layer를 거쳐 전파를 하게 됩니다.

또한 (4)는 mini batch의 모든 sample이 두번째 항을 -1로 만들경우는 거의 없기 때문에 gradient가 0이 돼 취소돼지 않습니다.

Several types of Skip Connection

일반적인 skip connection이 아닌 여러 버전의 skip connection을 시도하였습니다.



여러가지 skip connection 방식을 시도해봤지만 역시 original skip connection이 정확도가 가장 높았습니다.