Attention for CNN&RNN

1. Seq2seq

Seq2seq model의 forwarding 과정이다.

Sentence를 Input으로 받아서 sentence를 output으로 가지는 model이다.

Encoder RNN + Decoder RNN

Encoder RNN의 마지막 hidden state를 Decoder의 Input hidden state로 사용한다.

Decoder RNN:

  • Loss function: \( J = {1 \over k} \sum J_{k} \)
  • Backpropagation operated end-to-end

여기서 볼 수 있듯이, Encoder RNN은 sentence에 대한 정보를 하나의 hidden state에 녹여서 Decoder로 보내게 된다.

Long sentence에서 불리하며, Information bottleneck이 된다.

이를 해결하고자 attention 개념을 추가한다.

 

2. Attention

Seq2seq에 attention을 적용한 결과이다.

Query 기반 fixed-sized representation을 얻는 것이 목표이다.

Attention은 Q, K, V를 이용해서 얻을 수 있다.

  • Q = \( s_{0} \)
  • K = { \( h_{0}, h_{1}, h_{2}, h_{3} \) }
  • V = { \( h_{0}, h_{1}, h_{2}, h_{3} \) }

과정은 다음과 같다.

  1. Q*K를 구한후 softmax를 수행한다. (Attention score)
  2. Attention score * V를 구한다. (Attention value)
  3. [ Attention value, \( s_{0} \) ] 를 구한다.

 

Transformer

위에서 사용한 attention을 RNN을 위해서 사용할 것이 아니라, attention만을 가지고 학습을 해보자는 아이디어에서 나왔다.

 

1. Positional Encoding

Input sequence를 그대로 사용하기 보다는, 순서를 부여하기 위해서 필요한 과정이다.

Position 정보가 추가되기 때문에 같은 단어여도 다른 단어가 된다.

sin(짝수)과 cos(홀수)을 이용해서 표현한다.

범위는 2\( \pi \) ~ 10000*2\( \pi \)이다.

\( d_{model} \) = 출력 vector 차원이다.

 

\( PE_{pos, 2i+1} = cos({pos \over 10000^{{2i \over d_{mode}}}}) \)

\( PE_{pos, 2i} = sin({pos \over 10000^{{2i \over d_{mode}}}}) \)

 

2. Self-attention layer

모든 word는 모든 word를 참고한다.

문장 내 word로부터 의미를 추출할 수 있다.

 

* \( score(x_{k}, x_{i}) = {x_{k}^{T} x_{i} \over \sqrt{d}} \)

* \( \alpha_{k,i} = {exp(score(x_{k}, x_{i}) \over \sum exp(score(x_{k}, x_{j}))} \)

* \( y_{k,i} = \sum \alpha_{k,i} x_{i} \)

 

3. Multi-head self-attention detail

① 단어 vector로부터 \( w_{q} \), \( w_{k} \), \( w_{v} \)을 이용해 Q, K, V 값을 얻는다.

    Q, K, V는 model의 단어 차원보다 작은 차원을 가진다.

    \( {d_{model} \over n_{head}} = d_{v} \)로 차원을 설정한다.

   병렬성을 높이기 위해 위와 같이 수행한다.

 

② Attention score를 구한다.

\( Q_{I} \) × \( K_{I} \) ÷ \( d_{k} \)= 128 / 8 = 16

\( Q_{I} \) × \( K_{am} \) ÷ \( d_{k} \)= 32 / 8 = 4

\( Q_{I} \) × \( K_{a} \) ÷ \( d_{k} \)= 32 / 8 = 4

\( Q_{I} \) × \( K_{student} \) ÷ \( d_{k} \)= 128 / 8 =16

 

softmax 후 결과를 구하면 각각, 0.4/0.1/0.1/0.4가 된다.

 

③ Attention value를 구한다.

0.4 × \( V_{I} \) + 0.1 × \( V_{am} \) + 0.1 × \( V_{a} \) + 0.4 × \( V_{student} \) = \( Q_{I} \)의 attention value

이렇게 모든 word에 대해 attention을 구한다.

최종 결과는 다음과 같다.

④ 병렬 수행의 결과를 이어서 원래 차원으로 돌아온다.

위와 같은 과정으로 Transformer의 예측 결과가 생성된다.

 

4. Transformer Model

Encoder 6개, Decoder 6개로 구성된다.

Transformer

 

5. BERT

Bidirectional Encoder Representations from Transformer의 약자이다.

ImageNet-pretrained CNN의 성공으로부터 Global Encoder의 사용이 제안되기 시작했다.

 

기존의 전략으로는 다음과 같이 나뉠 수 있다.

Feature based Fine tunning
ELMO: pretrained param 사용 OpenAI GRT, ULMFit : task-specific param 정의 및 조정

 

그러나 다음의 한계점을 가지고 있었다.

  • Language model = uni-directional
  • Pre-trained representation을 해치게 됨
  • OpenAI : Left to Right
  • ELMO: concat forawrd & backward

 

그래서 제안된 것이 bidirectional model인 BERT이다.

주로 사용되는 것은 다음과 같다.

  • Deep bidirectional Transformer
  • Masked Language Model (MLM)
    • masked word의 실제 의미를 추론
  • Next sequence prediction

 

현재까지 사용하고 있는 것 중, 성능이 좋다.

 

Deep Generative Model

1. Auto Encoder

Encode + Decoder

Input과 동일한 Output을 생성하는 것이 목표

L2 loss function : \( min_{\theta} | x - x' | \)

 

다음의 이름으로도 불린다.

  • Unsupervised learning
  • Representational Learning
  • Dimensionality Reduction
  • Generative Model Learning

 

2. Manifold learning

고차원의 정보를 저차원으로 끌고 오면, representation이 simple해진다.

Dimensionality reduction은 다음의 곳에서 사용된다.

  • Data compression
  • Data visualization
  • Curse of dimensionality
    • 차원이 높아질수록 학습에 필요한 데이터 수가 증가한다.
  • Important Feature extraction
    • Manifold 구조에 한해서

 

Variational Autoencoder

1. 개요

VAE

Model Loss Training trick
Auto encoder Variational Approximation Reparameterization

 

2. Variational Inference

Maximum likelihood를 사용하지 않는 이유

 

\( P(z) \)를 사용하기 보다 \( P(z|x) \)를 사용한다.

하지만 \( P(z|x) \)는 알지 못한다.

그래서 \( q(z|x) \)를 이용해서 \( P(z|x) \)를 비슷하게 추론한다.

\( q(z|x) \)는 주로 Gaussian distribution을 이용한다. 

\( q_{\phi}(z|x) = N(\mu,  \sigma I) \)

Gaussian distribution을 이용하면 계산이 편리해지기 때문이다.

Gaussian distribution을 사용하는 이유

 

Generative Adversarial Network

1. GAN 학습

Discriminator를 먼저 학습신다.

학습된 Discriminator를 바탕으로 Generator를 학습시킨다.

사용하는 것은 Generator이다.

GAN model

 

2. Train jointly

Min-Max objective function

Encoder와 Decoder의 목표는 다음과 같다.

Discriminator Generator
Maximize gap between x and noise Minimize gap between x and noise
\( D(x) \) = 1
\( D(g(noise)) \) = 0
\( D(g(noise)) \) = 1
sigmoid 사용 tanh 사용
Supervised learning Semi-supervised learning

 

일반적으로 loss는 다음처럼 사용한다.

Loss = \( -y*logD(x) - (1-y)*log(1-D(x)) \)

 

Self-supervised learning

(Un-supervised learning)

1. Method in Computer Vision

ⓘ Pretext Task

Image transformation을 통해 다양한 상황에서의 객체의 feature를 뽑아낸다.

다음의 변형을 줄 수 있다.

  • Image completion
  • Rotation prediction
  • Jigsaw puzzle
  • Colorization

하지만 Learned representation이 general하지 않을 수 있다는 문제점을 가지고 있다.

 

② Contrastive Representation learning

Pretext를 \( x^{+} \)로 이용한다.

모델을 \( x \)와 \( x^{-} \)로 나누어서 학습한다.

 

목표는 다음과 같다.

\( score(x, x_{+}) >> score(x, x_{-}) \)

 

Loss는 다음과 같다.

 

③ SimCLR

A simple framework for contrastive learning representation

score function으로 cosine similarity를 이용한다.

\( S(u, v) = {u^{T}v \over ||u||||v||} \)

projection network를 이용해서 contrastive filed로 보내고 식별률을 높인다.

 

Pretext data 생성 방법은 다음과 같다.

  • Random cropping
  • Random color
  • Distortion
  • Random Blur

 

Reinforcement Learning

1. Q-learning

Policy \( \pi (s) \)의 선택에 \( Q(s,a) \)를 이용한다.

Policy와 Q-value

하지만 위와 같이 Q-value를 설정할 경우, Optimal한 결과가 나오지 않을 수 있다.

원인으로는 Reward model이 단순하거나, discounted factor를 사용하지 않아서 이다.

 

2. Markov Decision Process

  • S : state
  • A : action
  • R : reward
  • T : transition model
  • \( \gamma \) : discounted factor

다음 식을 이해하면 끝난다.

\( P(s_{t+1} = s' | history of (s,a)) = P(s_{t+1} = s' | s_{t} = s, a_{t} = a) \)

 

다음 위치로 가기 위한 확률은 여태것 움직인 과정에서도 추측하여 구할 수 있겠지만, 바로 직전 상태에서의 행동만을 보고 결정할 수 있다는 것이 first MDP이다.

 

3. Policy

Deterministic / Stochastic policy가 있다.

Optimal은 expected reward가 제일 큰 경우이다.

 

4. Value function

state-value function Q-value function
\( V(s) \) \( Q(s,a) \)

 

5. Optimal Policy

\( V^{*}(s) = max_{a}Q^{*}(s,a) \)

\( \pi^{*}(s) = argmax_{a}Q^{*}(s,a) \)

 

T와 R을 알고 있으면 DP로 Optimal policy를 구할 수 있다. 하지만 일반적인 경우 T나 R을 알지 못하여 RL을 이용해 구한다.

 

6. Value Iteration

다음의 과정을 반복해서 optimal 값을 얻어낸다.

\( V^{*}(s) = max_{a} \sum p(s'|s,a)[r(s,a) + \gamma V^{*}(s')] \)

\( Q^{*}(s,a) = \sum p(s'|s,a)[r(s,a) + \gamma V^{*}(s')] \)

 

제일 큰 value를 가지도록 policy를 선택하면 된다.

 

7. Policy Iteration

다음의 두 과정을 반복해서 수행한다.

  1. Policy evaluation
  2. Policy refinement

\( V^{\pi}(s) \)를 구하고 greedy하게 높은 값을 선택해서 policy를 계속해서 변경해 나간다.

 

8. Summary

 

9. Model-free learning

일반적으로 T와 R을 알지 못한다.

Stochastic하게 진행하여 비슷한 값을 얻는 방식을 차용한다.

Moving average를 이용해서 update를 진행한다.

\( \epsilon \)-greedy를 이용해서 Exploration 문제를 해결한다.

* Exploration : 새로운거

* Exploitation : 하던거

 

Monte-carlo learning (MC)

Episode에 대한 " s,a,r,s' "을 얻어서 state-value function 업데이트를 진행한다.

 

\( V^{\pi}(s) = V^{\pi}(s) + \alpha (G(s) - V^{\pi}(s)) \)

 

Time Difference learning (TD)

Episode 방식으로 하는 것은 비효율적이다.

" s,a,r,s' " 알 수 있으니까 바로바로 업데이트하자.

 

\( V^{\pi}(s) = V^{\pi}(s) + \alpha (r(s',a) + \gamma V^{\pi}(s') - V^{\pi}(s)) \)

 

그러나 action 정보의 부재로 optimal policy 구하기가 어렵다는 단점이 있다.

 

Q-learning

off-policy learning이다.

Target policy와 Evaluation policy가 다르기 때문이다.

 

\( Q(s,a) = (1- \alpha )Q(s',a') + \alpha [r+ \gamma max_{a'} Q(s',a')] \)

Q-learning과 SARSA의 수도코드이다.

 

Deep Q-learning

Q-learning을 딥러닝에 적용하자는 아이디어이다.

\( Q(s,a | w,b ) = w^{T}_{a}s + b \)

구조는 다음과 같다.

DQL

MSE loss를 사용하며 두 개의 network를 사용한다.

\( L := Q_{new}(s,a) - (r + \gamma max_{a} Q_{old}(s',a))^{2} \)

 

1. Exploration Problem

\( \epsilon \) -greedy 를 사용한다.

  • \( \epsilon \) : random action
  • 1-\( \epsilon \) : argmax action

 

2. Correlated Data problem

Reply buffer를 사용해 해결한다.

DQL 수도 코드이다.

 

3. 전체구조