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 모델 자체가 문제가 있는 경우이다.
- => 실제로는 저런 경우가 나오면 안되므로 모델 자체를 수정해야하는 것. 데이터를 모으거나, 정규화를 하거나...
- Case1) 최적의 번역문장인 y*의 확률이 모델로 예측한 y_hat보다 작은 경우이다.
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을 더 부여하는 걸 알 수 있다.
질문과 비판은 언제나 환영입니다. 많이 꾸짖어주세요.
'DeepLearning Specialization(Andrew Ng) > Sequence Models' 카테고리의 다른 글
[코세라] [Week 3] Quiz & Programming Assignments (0) | 2020.12.21 |
---|---|
[코세라] [Week 3_Sequence Models & Attention mechanism] 2. Speech recognition - Audio data (0) | 2020.12.21 |
[코세라] [Week 2] Quiz & Programming Assignments (0) | 2020.12.20 |
[코세라] [Week 2_NLP & Word Embedding] 3. Applications Using Word Embeddings (0) | 2020.12.19 |
[코세라] [Week 2] 2. Learning word embeddings : Word2vec & GloVe (0) | 2020.12.19 |