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이 정확도가 가장 높았습니다.


Domain Transfer Network: Unsupervised Cross-Domain Image Generation

딥러닝/GAN
Domain Transfer Network Unsupervised Cross-Domain Image Generation

Domain Transfer Network: Unsupervised Cross-Domain Image Generation

요즘 Deep Learning이 여러 분야에 사용되고 있는데, Deep Learning을 이용한 여러 사용사례에서 학습을 실제 환경의 데이터가 아닌, web 혹은 정제돼있는 데이터를 가지고 학습을 한다음 학습한 것을 실제 환경에 그대로 사용하였더니 정확도도 떨어지고 위험도가 너무 높았습니다. 그런 것을 방지하기 위해 다른 도메인에 적용할 수 있도록 하는 것을 Transfer Learning이라고 합니다.

이 Domain Transfer Network는 두 도메인(비슷하고 본질적으로는 같은 의미를 가짐, Source domain S & Target domain T) S, T를 학습하여 S의 이미지를 T의 이미지로 바꿉니다.

Domain Transfer Network


DTN(Domain Transfer Network)는 다음과 같은 구조를 가지고 있습니다. 보시다시피 일반적인 GAN에 base를 두고있는데, basic GAN과 다른점은 바로 function f와 g입니다. f와 g가 Generator G를 구성하고 있습니다. (G == g*f)

Function f & g

함수 f는 S, T의 feature를 만드는 부분입니다. 이게 무슨말이냐 하면 위 그림의 남자와 G를 통과한 후의 남자는 본질적으로 같은 사람이란 것입니다. 물론 domain(하나는 real, 하나는 emoji)은 다릅니다만. 이 남자를 james라 한다면 실제 james(S)도, emoji의 모습을 한 james(T)도 사실은 똑같은 james란 말입니다. 그래서 funciton f는 그 james라는 사람의 특성(브라운 색 머리카락, 하얀색 피부, 선명한 눈과 눈썹 등)을, 사람을 feature로 압축해내는 함수입니다.

function g는 그 압축된 feature, f(x)를 다시 T의 이미지로서 재변환시키는 함수입니다.

D Loss

D는 각각의 의미를 가진 세가지 loss가 합쳐져 있습니다.

  1. D1은 S에서 sampling한 x가 G를 거치며 T같은 이미지를 만들어내는 것을 D가 잘 구별하느냐를 나타냅니다.
  2. D2는 보기에는 진짜 이미지(Target domain의 이미지)를 G에 넣은 바보처럼 보이지만, f가 어떠한 이미지를 잘 feature화 시키느냐, g는 그 feature를 잘 target domain의 이미지처럼 만들어내는가를 나타냅니다. 심지어 Target domain의 이미지 x가 들어와도 말이죠!
  3. D3는 진짜 이미지 x를 넣었을 때 진짜 이미지인지 잘구별하느냐를 나타냅니다.

G Loss

G도 기존의 basic GAN의 G처럼 D를 이용하여 학습을 진행합니다.

 

  1. 첫번쨰 항은 S에서 sampling된 x가 G를 통하여 T의 이미지처럼 보이도록 만듭니다.
  2. 두번쨰 항은 T에서 sampling된 x가 G를 통하였어도 여전히 진짜 이미지처럼 보이도록 만듭니다.

Consistency Loss

Const Loss에서는 G의 f를 통해서도 여전히 같은가? 같은 feature, 같은 의미, 같은 것, 불변성을 가지고 있는가를 distance 함수를 통해 측정하고 요구합니다.

그래서 S에서 sampling된 x를 f(x), f(G(x))의 두 feature 사이의 거리를 측정하여 최적화합니다.

Identity Loss

Consistency Loss 처럼 같은 feature를 나타내는가 + Target Domain 이미지를 성공적으로 만들어 내는가를 다음과 같은 Loss를 통해 distance를 측정하고 최적화합니다.

TV Loss

TV Loss는 anisotropic total variation loss로서 이미지를 조금더 부드럽고 자연스럽게 만들어 준다고 합니다. G가 만들어낸 이미지 G(x)를 z라고 합니다.

논문의 저자들은 B를 1로 했다고 하네요.

위 Loss들은 L_D와 L_G = L_GANG + alpha * L_CONST + beta * L_TID + gamma * L_TV로 이루어져 있으며 alpha, beta, gamma는 parameter입니다. distance loss들은 여러가지 loss(MSE, Hinge, cosine, triplet)들을 실험했었는데, MSE가 가장 smiple하고 좋았다고 합니다.

Experiment

DTN은 두가지 실험을 하였는데 하나는 SVHN에서 MNIST, 다른 하나는 real face에서 emoji face로 domain을 transfer 하였습니다.



왼쪽그림은 real face에서 emoji face로 transfer, 오른쪽 그림은 SVHN에서 MNIST로 transfer한 것입니다.


Compare


다른 Domain Adaptation Method를 비교해보니 DTN이 더 좋은 성능을 나타냈습니다.

Limitation

DTN이 만능처럼 보여도 두가지 문제점이 있습니다.

  1. 두 도메인이 비슷해야 한다. 도메인이 완전히 다르거나 의미자체가 틀리다면 transfer는 당연히 안되겠죠?
  2. source domain이 더 많은 feature, 의미, data를 가지고 있어야한다. source에서 더 많은 feature를 가지고 있어야 변환하기도 쉽고, target domain의 feature가 복잡하다면 source의 부족한 feature를 가지고 transfer하기가 어려울 것입니다.

References

 Arxiv 논문: https://arxiv.org/abs/1611.02200

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

딥러닝/이미지 인식
AlexNet ImageNet Classification wtih Deep Convolutional Neural Networks

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

2012년에 쓰여진 논문으로서 그때 작은 크기의 Dataset에서는 Deep Neural Network가 좋은 성능을 보였지만, 실제 Real world에 적용하기에는 무리가 있었습니다. 그래서 큰 Dataset(ImageNet, 15m images&22k labels)를 가지고 이를 적용하고자 하였습니다.

Dataset

ImageNet을 만들기위해 Web에서 이미지를 모으고, 사람들이Amazon’s Mechanical Turk crowd-sourcing tool을 이용해 labeling 작업을 하였습니다. 이렇게 만들어진 ImageNet Dataset으로 Real world의 문제를 해결하기 위해서 두가지 대회를 열었습니다. 바로 PASCAL VOCILSVRC입니다.



ReLU

실제 인간의 뇌처럼 신경망을 구성한다면 활성화 함수는 tanh, sigmoid가 되어야 하는데, 왜 ReLU가 성능이 좋을까요? 그 이유는 ReLU가 non-saturation하기 때문입니다. 그래서 이때 non-saturation이 무엇일까요?

saturation

sigmoid, tanh 함수는 어떠한 값이 들어와도 -1~1, 혹은 0~1 사이의 값을 배출합니다. 그렇다면 큰 값이 들어왔을 때도, 저 사이의 값을 내놓아 saturation(포화)됩니다. 하지만 ReLU는 max(0, x)이므로 어떠한 값이 들어와도 제한이 없습니다. 값이 크면 클수록 더큰 gradient를 가지게 됩니다.

그리고 ReLU의 non-saturation이 stochastic gradient descent와 결합되어 더욱더 효율이 증대됩니다. feature가 큰 값을 가지고 큰 gradient를 가지고 있을 경우 관성이 생겨 더욱더 네트워크가 빨리 최적화합니다. 또한 ReLU는 미분하기에도 단순하여, 연산량의 면에서도 충분한 이점을 가지고 있습니다. 


위 그림을 보시면 실선이 ReLU를 사용했을 때이고 점선이 tanh을 사용한 경우입니다.

Local Response Normalization

lateral inhibition이란 것을 아십니까? 실제 뇌 세포의 증상인데, 강한뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상입니다. 그래서 아래 그림을 보시면 검은 네모들 사이에 회색 점?부분? 이 보일텐데 이는 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분(약한 뉴런)에 반응하여 회색이 조금 보이게됩니다.


그래서 이것이 왜 나왔냐하면, Neural Network의 Feature에서 한 세포가 유별나게 강한 값을 가지게 된다면, 근처의 값이 약하더라도 convolution 연산을 한다면 강한 feature를 가지게 되는것입니다. 그렇다면 over-fitting이 잘 일어나게 되겠죠(training dataset에만 feature가 크게 반응하니까)

그래서 어떠한 filter가 있을 때, 그 주위 혹은 같은 위치에 다른 channel의 filter들을 square-sum하여 한 filter에서만 과도하게 activate하는 것을 막습니다.

  • a^i_x,y는 i번째 kernel의 x,y값입니다. 그리고 정규화가 적용되어 b^i_x,y로 바뀌게 되는 것입니다.
  • n은 해당 a의 위치에 spatial position한 kernel들의 개수를 말합니다. N은 총 kernel 개수입니다.
  • k, alpha, beta는 normalization을 위한 하이퍼 파라미터입니다.

저희는 이 normalization을 ReLU후에 적용하였습니다.

Data Augmentation

over-fitting을 막는 가장 단순한 방법은 데이터셋의 크기를 많이 늘이는 것입니다. 그래서 Data Augmentation이란 것을 통해 dataset을 더 크게만드는 방법을 제시하였습니다.

  • 256x256으로 만들어진 이미지에서 랜덤으로 224x224로 이미지를 여러장 crop하고, 이미지를 filp(좌우반전)한 상태에서도 crop하여 이미지를 2048배 늘였습니다. 테스트시에는 이미지의 가장자리 4개와 정가운데에서 patch를 만들어 네트워크를 통과시킨후 softmax를 평균냈습니다.
  • 이미지 데이터셋에 PCA 분석을 하여 데이터를 학습하기 쉽도록 변환하였습니다.

Dropout

Dropout이란 hidden layer의 몇몇 뉴런의 값을 0으로 바꿔버립니다. 그래서 neuron이 "dropped out(탈락)"되어 forward pass, back propagation시 아무런 영향을 미치지 않습니다. 이 drop out은 뉴런들 간의 복잡한 상호의존도를 낮춰 over fitting을 막습니다. 테스트 시에는 모든 뉴런을 사용하되 output에 0.5를 곱하여 사용하였습니다.


참조

 Alexnet paper