본문 바로가기

DeepLearning Specialization(Andrew Ng)/Sequence Models

[코세라] [Week 3_Sequence models & Attention mechanism] 1. Various sequence to sequence architecture

728x90
Various sequence to sequence architecture
1. Basic Models
2. Picking the most likely sentence
3. Beam Search
4. Refinements to beam search
5. Error analysis in beam search
6. Bleu Score
7. Attention model intuition
8. Attention model

1. Basic Models

1) 번역

  • 위와 같이 번역을 해야하는 상황에서 input sequence와 output sequence 의 크기가 다를 수 있다. 
  • 이럴 땐 위의 구조와 같이 encoder 부분과 decoder 부분을 나누어 주면 된다. 

2) Image to Text

  • 위와 같이 이미지를 인풋하고 이미지에 대한 설명을 산출하고 싶을 때는 어떻게 할까?
  • 간단하다. CNN을 통해 이미지를 feature vector로 만들어주고 RNN에 넣어주면 된다. 

2. Picking the most likely sentence

  • LM(language model)과 MT(machine translation)은 비슷하지만 차이점이 있다.
  • MT의 디코더 부분은 LM과 비슷하다. 다만, a<0> 대신 encoder가 인코딩한 결과물을 인풋할 뿐이며 따라서 교수님은 MT를 conditional LM이라 부른다.

  • MT를 할 때 한가지 유의해야할 점이 있다. LM에서는 확률분포에 따라 random sampling을 하였지만, MT에서는 x가 인풋되었을 때, 가장 쓰일 확률이 높은 문장(= the most likely translation)을 채택해야 한다. 
  • 이를 위한 방법론이 Beam Search 이다. 

  • 왜 greedy search는 안될까?
  • greedy search 는 P(y_hat<1> | x ) 가 가장 높은 단어를 y_hat<1> 로 채택하고 나머지 y_hat<2>, ... 도 차례로 가장 높은 확률을 가진 단어를 채택하는 방법이다. 
    • 정확히 말하면 y_hat은 사전의 전체 단어가 해당 timestep에 등장할 확률이고, 그 중에서 가장 확률이 높은 단어를 one-hot 벡터화해서 다음 timestep에 인풋하는 것. 편의상 "y_hat<1> 로 채택"한다고 했다. 
  • 하지만 이 방법은 위의 슬라이드와 같이 매 timestep에서 가장 높은 확률을 가진 단어를 고르기에 전체 문장이 완성되었을 때 그 문장이 가장 적절한 문장인지를 고려할 수 없다. 
  • 단적으로 첫번째 문장이 더 적절하지만  greedy search를 적용하면 Jane is 다음에 going을 선택할 가능성이 높다.  
  • 그런데 만약 사전의 단어수가 10000개이고 10개 단어짜리 문장을 만든다고 했을 때, 조합가능한 문장은 10000의 10승이며 이 모든 문장의 확률을 따져 가장 높은 확률을 가진 문장을 고르려면 연산량이 너무 많다.
  • 그래서 우리는 근사 확률을 구해서 활용한다.   

3. Beam Search

앞서 말한 greedy search의 문제점을 해결하기 위해 Beam search라는 알고리즘을 활용하며 가장 널리 쓰임.  

  • 첫번째 단어를 뽑을 때 가장 높은 확률을 가진 단어들을 차례로 B(hyper parameter)개 만큼 뽑는다. 
  • 위의 예는 B=3

  • 그럼 B개의 단어들 다음에 올 단어의 경우의 수는 총 Bx10000(사전의 단어수) 이다. 
  • 두번째 단어는 이 전체 30000개의 단어 중에서 또 B개 만큼 단어를 뽑는다. 
  • 이 때 뽑는 기준은 P(y<1>, y<2> | x ) 이며, 이 식은 위와 같이 풀어서 계산된다. 우리가 Language Model에서 확률을 구했던 방식과 같다. 
  • 위의 예에서 in에서 1개, jane에서 2개가 뽑혔다. 

  • 세번째 단어도 같은 방법으로 뽑는다. 
  • 이렇게 쭉쭉 가다가 <EOS>가 나오면 멈춘다. 

요런 느낌

cf) Beam Search의 특성상 조합이 가능한 모든 문장에서 가장 P값이 높은 문장을 선택하는 것은 아니다. 따라서 전역적으로 최적화된 값은 아님


4. Refinements to beam search

1) Log

  • 식으로 표현하면 위와 같음. 근데 확률이므로 1보다 작은(사실 엄청 작은) 값들이 서로 곱해지게 되고, 결과값은 매애우 작은 값이 나온다.
  • 이는 컴퓨터가 저장하기에 너어무 작은 값이라 반올림 등을 거치면서 연산에 차질이 생긴다. 
  • 따라서 로그를 적용할 것.  식을 보아하니 다 계산하고 log을 적용하기에는 앞선 문제점이 생기므로 각각의 P 값에 로그를 씌워 더해줌으로써 결론적으로 같은 값을 얻는다.
  • 로그함수의 특성상 계속해서 증가하므로 로그를 적용해도 우리가 목적인 P 값의 최대화를 달성하는데는 문제가 없다. logP를 최대화하는 y를 찾는 것과 P를 최대화하는 y 값을 찾는 것은 같은 문제이다.  
  • 아는 다른 알고리즘에도 범용적으로 적용되는 논리임.

2) Length Normalization

- 표준화 작업

  • 그리고 문장의 길이가 길수록 P 값은 매우 작아질 것이다. 이렇게 되면 모델은 자연스레 짧은 문장만을 선호하게 될 것이므로 바람직하지 않다. 
  • 따라서 문장의 길이만큼 로그값을 나눠주어 문장의 길이에 대한 패널티를 줄여준다.
  • 그리고 알파(하이퍼 파라미터)를 제곱해주고 0(비표준화) ~ 1(표준화)의 적당한 값을 설정한다. 이는 연역적이라기 보다는 그냥 해보니까 잘돼서 이렇게 쓴다.

- Beam Search 적용

  • Beam Search를 하면 산출문장의 길이가 1일 수도, 2일수도, 30일 수도 있다.
    • 아마 <EOS>가 빨리 나타나면 짧게 끝나고 늦게 나타나면 문장이 길어지겠지?
  • 그러면 이 가능한 모든 문장들의 표준화된 log P 값을 구해서 비교하고 가장 높은 값을 가지는 문장을 선택한다. 

 

3) Beam width

  • Beam width 값이 크면 연산량이 많다. 적당한 값을 취해야함. 대신 더 나은 결과를 얻을 수 있음. 
  • 여러 선택지가 있기 때문에 전역적으로 최적의 값에 도달할 가능성이 높아짐. 
  • 3은 좀 작고 10은 보통이다. 도메인에 따라 3000까지도 써서 어떻게든 바득바득 조금이라도 좋은 결과를 얻으려하는 경우도 있음.
  • 중요한건 Beam Search가 최적값을 보장하지는 못한다는 것. 

5. Error analysis in beam search

먼저 Error Analysis에 대해서는 다음 글을 참조하자. 아주 좋은 글이다.

jackiechansbigdata.tistory.com/15

 

[Week 2] 1. Error Analysis

Error Analysis 1. Carrying out error analysis 2. Cleaning up incorrectly labeled data 3. Build up your first system and then iterate 1. Carrying out error analysis  - 오류분석은 수동으로 dev set에..

jackiechansbigdata.tistory.com

1) 오차분석을 하는 이유

  • Beam search는 최적값을 보장하지 못하고, 우리는 최적값을 찾기 위해 노력해야 한다. 하지만 무엇을 우선순위로 하여 노력해야하는가? Error analysis를 하는 의의는 그것을 정하는데 있다.

2) RNN(using beam search) 의 2가지 error

  • beam search를 활용한 RNN 모델에서의 Error는 두가지로 나누어볼 수 있다.
    • Case1) 최적의 번역문장인 y*의 확률이 모델로 예측한 y_hat보다 작은 경우이다.
      • => 이는 '아직' 최적의 문장을 못찾은 것이므로 b값을 크게 하여 beam search를 수정할 필요가 있다.
    • Case2) 최적의 번역문장인 y*보다 모델 예측값이 더 큰 경우로서, RNN 모델 자체가 문제가 있는 경우이다. 
      • => 실제로는 저런 경우가 나오면 안되므로 모델 자체를 수정해야하는 것. 데이터를 모으거나, 정규화를 하거나... 

cf)하나 주의해야할 점은, Length Normalization을 적용할 경우, 최대로 하려는 목표값이 달라지지만 강의에서는 편의상 그냥 두루뭉실 넘어감. 단순히 최적값 vs. 예측값이라고 생각하면 될 듯. 

 

3) 오차분석표

  • 그리고 오차분석표를 위와 같이 만들면 된다. 둘 중에 어느 error 의 비중이 높은지에 따라 어느 error를 줄일지 정하면 되는 것.

6. Bleu Score

1) Bleu Score 의 필요성

  • 기계번역의 경우 이미지 인식과는 달리 복수의 훌륭한 정답이 있을 수 있다. 그럴 경우 어떻게 점수를 매길 것인가?
  • 즉, 우리는 평가를 위한 single metric number가 필요하고 이 때 사용되는 것이 Bleu score(Bilingual evaluate understudy) 이다.

2) Modified precision

  • bleu score를 측정하는데 있어 그냥 precision을 사용하면 위와 같은 MT output도 1의 정확도를 가지므로 적절하지 않다.
  • modified precision은 MT output의 단어가 레퍼런스 문장에 몇번이나 들어가는지를 측정하며, 그 중 최대값을 분모로 한다.
  • 그렇다면 단순히 the 가 반복되는 문장 말고 다른 것을 보자.

3) Bleu Score on N-grams

  • bigram을 이용한 bleu score는 두단어를 쌍으로 하여 sliding 한다. 
  • 그리고 그 덩어리가 MT output에서 몇번 나타났는지(count)레퍼런스에는 몇번 나타났는지(count_clip)를 측정하고 count_clip / count를 하여 modified precision을 구해준다.

  • unigram도 마찬가지이며 단어를 1개만 볼 다름이다. P옆의 숫자가 gram을 나타낸다. 
  • N그램으로 일반화하면 위와 같다. 당연히 레퍼런스 중 하나랑 같으면 P 값은 1이 나온다. 

  • 보통은 combined Bleu score 를 사용하며 이는 p1~p4 의 평균을 e의 지수로 넣음으로써 계산한다.
  • 너무 짧은 output의 경우 자연스레 레퍼런스에 단어들이 포함될 가능성이 높아 Bleu score가 올라간다. 이에 대한 패널티를 주기 위해 BP라는 수식을 활용한다.
  • 공식은 위와 같으며 output이 레퍼런스보다 짧으면 패널티를 준다고 알고 있으면 된다.
    • 빨간부분이 옳은 식이다.

7. Attention model intuition

1) Attention model의 필요성

  • Attention Model은 전반적인 모델의 성능을 향상시킬 수 있는 방법이며 아주 널리 쓰인다.
  • 기존 MT에서는 문장 전체를 인코딩하고 디코딩하는 방식이었다. 그런데 인간이 문장을 번역하는 과정을 생각해보면, 문장 전체를 읽고 기억했다가 번역하는 것이 아니라 문장의 짧은 부분을 읽고 그 부분을 어느정도 번역하는 과정의 반복이다. 
  • 그래프와 같이 문장의 길이가 길어질수록 문장을 모두 기억했다가 디코딩 하는 과정에서 Bleu score가 낮아지며 번역의 질이 떨어진다. 그래서 우리는 attention model을 활용한다.

2) Attention model 개요

  • MT를 위해 개발되었지만 다른 분야에서도 많이 쓰인다.
  • 개괄적인 내용은 다음과 같다.
1. 위의 도식처럼 양방향 RNN을 적용한다고 했을 때, 각각의 timestep 마다 산출되는 y_hat 값이 있을 것이다. 
2. 아직 y_hat 을 산출하는 단계가 아니므로 그냥 산출값으로서 activation unit 정도로 생각하자.  
3. 그러면 각각의 timestep 마다 unit이 산출될 것이고, 이 unit들에 가중치를 곱해서 context에 전달한다.  
4. 그리고 이 context를 다시 새로운 RNN에 인풋하여 기계번역을 한다(y_hat을 산출한다). 
cf) Neural Network를 새로로 했다고 생각하면 이해가 빠를 수도 있겠다.  
  • 복잡해보이지만, 알고보면 크게 어려운 모형은 아니다.
  • 가중치 alpha와 context 에 대한 자세한 정의는 다음 영상에서...

8. Attention model

이제 Attention Model 에 대해 더 자세히 알아보자.

 

1) Attention model 개요

  • Attention model은 upper RNN과 lower RNN으로 구성된다.
  • 밑에 사용되는 RNN은 주로 양방향 LSTM RNN이 활용된다. 
  • a<0> = a<6> = zero-vector
  • 양방향 RNN의 특성상 양쪽방향에서 activation 값이 전해지고 원래는 이 두개를 조합해서 y_hat을 산출한다. 여기서는 y 값을 산출하는 것이 아니라 upper RNN의 인풋을 산출하기 위한 하나의 activation 이 된다. 
  • t'을 번역하고자 하는 문장(프랑스어)의 sequece 순서라고 하고, a<t'>  을 양방향의 활성화값을 묶어준 것이라 정의하자.
  • alpha는 c 를 산출하기 위해 a<t'>에 곱해지는 가중치(attention)이며, c 는 위와 같이 공식화할 수 있다. 

2) alpha 를 계산하는 법

  •  alpha<t, t'> 는 위와 같이 정의되며, 자연스레 특정 timestep t(상위 RNN)에서의 alpha 의 합은 1이 된다.
  • 그리고 e는 바로 전 타임스텝의 activation 값과 밑의 RNN의 activation 값을 인풋한 작은 NN(Neural Network)를 이용하여 산출할 수 있다.
    • 당연히 훈련과정이 필요하겠지. 
  • 논리를 살펴보면, 다음 타임스텝에서의 context를 산출하기 위해 쓰는 attention alpha는 그 전 타임스텝의 전달값과 해당 attention이 곱해지는 a<t'>을 모두 고려하는 것이 자연스러우므로 두 개를 다 인풋한다. 이 과정을 통해 어떤 activation에 얼만큼의 attention을 부여할지 자동적으로 정할 수 있다.
  • MT의 특성상 인풋과 아웃풋 문장 모두 그으렇게 길지는 않기에 수용가능하긴 하다만, attention 모델은 연산량이 굉장히 많다.
  • 이미지 캡셔닝(이미지를 보고 text를 산출)에서도 적용될 수 있으며 이미지의 일부를 보고 산출하는 것.

3) Attention model 정리 

  • 왼쪽은 전체 모델의 구조이고, 오른쪽은 alpha 및 context 를 구하기 위한 작은 NN을 나타낸다.
  • 앞서 설명한 거와 같다. 다만, alpha를 산출할 때 마지막에 softmax하는 점은 당연하지만 눈여겨 보라.
  • 그리고 원래 모델에서는 Post LSTM(위쪽 RNN)의 previous time step's prediction을 다음 타임스텝의 인풋으로 집어넣었으나, 이 캡쳐의 모델은 사람들이 멋대로 적은 날짜형식을 일정한 형식으로 바꿔주는 모델이라 단어 간의 상관성이 없어 기존 모델과 같은 작업이 불필요하다. 
  • 자세한건 다음 블로그를 참조

jackiechansbigdata.tistory.com/39

 

[코세라] [Week 3] Quiz & Programming Assignments

# Quiz # Programming Assignments 1st Assignments : Neural Machine Translation with Attention Unlike previous text generation examples earlier in the course, in this model, the post-attention LSTM at..

jackiechansbigdata.tistory.com

 

 

 

  • 위와 같이 매칭되는 단어에 attention을 더 부여하는 걸 알 수 있다. 

질문과 비판은 언제나 환영입니다. 많이 꾸짖어주세요.

 

728x90