본문 바로가기
MJU Session (22-23)

[Session] About Attention Mechanism / 노장현

by Jack_Noh 2023. 1. 23.

작성자 :  노장현


1. Abstract

Attention Mechanism은 모든 정보가 아닌 소수의 중요한 정보에 집중하는 방법으로 기계 번역의 성능을 높이기 위해 처음 제안되었습니다. 현재는 좋은 성능을 바탕으로 NLP(자연어 처리)뿐만 아니라 CV(컴퓨터 비전), Time-series 분야에서도 사용되고 있습니다. 이번 세션에서는 다양한 분야에서 사용되고 있는 Attention Mechansim의 개념과 그 배경에 대해 알아보겠습니다.

 

2. What is Language Model?

언어 모델(Language Model, LM)은 단어 시퀀스에 확률을 할당하는 모델로 이전 단어들을 바탕으로 다음에 등장할 단어의 확률을 예측하는 모델입니다. 언어 모델은 크게 통계를 기반으로 한 방법과 인공 신경망을 기반으로 방법으로 나뉩니다.

⇒ 이전에는 규칙 기반의 언어 모델을 사용했으나 단어와 단어를 1:1로 번역하기 때문에 결과도 좋지 않으며, 오늘날 사용하지 않기 때문에 생략했습니다.

2-1. Statistical Language Model(SLM)

먼저 통계적 언어 모델은 문장에 대한 확률을 통해 다음 단어를 예측하는 방법으로 카운트를 기반으로 확률을 계산합니다. 이때 이전 단어들이 주어졌을 때 해당 단어가 다음 단어로 등장할 확률을 conditional probabilty(조건부 확률)라는 것을 사용해서 계산합니다.

 

조건부 확률을 사용해 P(An adorable little boy is spreading smiles)라는 문장의 확률을 구한다고 가정하겠습니다. 이 경우 아래와 같은 식으로 표현되며, 문장의 확률을 구하기 위해서는 다음 단어에 대한 예측 확률을 모두 곱해야한다는 것을 알 수 있습니다.

조금 더 쉽게 설명하면 “나는 점심으로 국밥을”이라는 문장 A가 있을 때, A 뒤에 어떤 단어가 나오는지 예측하기 위해서는 먼저 문장 A가 전체 corpus에서 등장하는 횟수를 카운트합니다. 이후 그 뒤에 나올 수 있는 단어 ⍺(먹었다), β(졸리다)를 추가한 문장 A+⍺ 또는 문장 A+β가 corpus에 등장한 횟수를 카운트 해서 가장 높은 확률의 단어를 다음 단어로 예측하는 것입니다.

 

이때 SLM은 다음 단어를 예측하기 위해 이전의 단어들을 카운트할 수 있는 방대한 양의 corpus가 필요했으며, 방대한 양의 corpus가 있더라도 이전의 단어가 카운트되지 않아 확률이 0이 되어버리는 sparsity problem이 발생합니다. 이를 해결하기 위해 n-gram이라는 개념이 제안되었으나 해당 문제를 근본적으로 해결하지는 못했습니다. 이를 해결하기 위해 제안된 방법이 인공 신경망 기반 모델인 Neural Network Language Model입니다.

 


- Conditional Probability(조건부 확률)

어떤 사건 A가 발생했을 때 다른 사건 B가 일어날 확률을 의미하며 두 확률 P(A), P(B)에 대해서 다음과 같은 관계를 가집니다.

이때 더 많은 확률에 대한 조건부 확률은 chain rule(연쇄 법칙)을 통해 다음과 같이 표현할 수 있습니다.

이는 사건 A, B, C, D가 순서대로 동시에 일어날 확률을 나타냅니다.

 

- Corpus

많은 양의 정보가 담긴 말뭉치로 모델 학습을 위한 데이터를 의미합니다.

 

- Sparsity Problem(장기 의존성 문제)

예측하기 위한 사전 단어 또는 문장이 corpus에서 sparse(너무 적거나 아예 없는)한 경우 모델의 성능 떨어지고 이를 sparsity problem이라고 합니다.

 

- N-gram

corpus에서 이전 단어들을 카운트하지 못할 확률을 줄이기 위한 방법으로 모든 단어가 아닌 n개의 단어만을 고려하는 방법입니다. 쉽게 말해 “오늘 눈이 많이 오고 추워서 문득 따듯한 음식이 먹고 싶어졌다. 그래서 나는 점심으로 국밥을”이라는 문장을 corpus에서 카운트할 확률보다 3-gram에 해당하는 “나는 점심으로 국밥을”이라는 문장을 카운트 할 확률이 높다. 하지만 이런 n-gram 방법은 임의로 개수를 정하기 때문에 앞 문장의 맥락을 놓쳐 전체 문장을 고려한 모델보다 정확도가 떨어지고, 카운트를 기반으로 하기 때문에 sparsity problem을 해결하지 못했습니다. 추가적으로 해당 방법을 제안한 논문에 따르면 n-gram은 trade-off 문제를 가지고 있어 n이 5를 넘지 않는 선에서 사용하는 것을 권장했다고 합니다.


2-2. Neural Network Language Model(NNLM)

인공신경망 기반 언어 모델인 NNLM은 SLM의 sparsity problem을 해결하기 위해 제안된 방법으로 단어의 의미적 유사성을 기계에게 학습시키는 방법입니다. 이는 corpus에 없는 단어를 예측할 때 기계가 학습한 유사한 단어를 대신 사용하자는 아이디어에서 출발했습니다. 유사성을 학습 시키기 위해 word embedding이라는 방법을 사용해 사람들이 사용하는 언어(자연어)를 컴퓨터가 이해할 수 있게 수치화(벡터화)했고 벡터 간 연산을 통해 단어나 문장 사이의 유사도 계산을 구할 수 있게 되었습니다. 하지만 예측을 위해 n개의 단어만 참고할 수 있었고(고정된 입력 길이), n의 크기를 늘리면 계산 속도가 오래 걸린다는 단점이 있었습니다.


- Word Embedding

기존의 one-hot-encoding 방법은 N개의 단어를 N차원 벡터로 나타내는 방법으로 corpus가 크면 차원이 기하급수적으로 증가해 계산복잡성 문제가 발생했습니다. 또 하나의 요소만 1이고 나머지는 모두 0인 sparse vector로 단어간 관계나 의미를 담지 못한다는 단점이 있었습니다. 이를 해결하기 위한 방법인 word embedding는 sparse vector를 dense vector로 표현했으며 word2vec, Glove와 같은 방법들이 있습니다.


2-3. Recurrent Neural Network Language Model(RNNLM)

RNNLM은 n-gram과 NNLM의 고정된 개수의 단어만 고려할 수 있다는 단점을 해결하기 위해 RNN을 도입한 모델입니다. 이는 예측 과정에서 이전 시점의 출력을 현재 시점의 입력으로 사용하는 방법으로 “나는 점심으로 국밥을 먹었다”라는 문장을 예측할 때 “나는”을 받아 “점심으로”를 예측하고 “점심으로”를 받아 “국밥”을 예측하는 방법이라고 할 수 있다. 해당 방법을 통해 이론상 모든 단어를 고려할 수 있었으나 실질적으로는 vanishing gradient가 발생해 모델이 제대로 학습하지 못하는 문제가 발생했습니다. 또한 이전 작업이 끝나지 않으면 다음 작업을 진행할 수 없어(병렬 처리 불가) 계산시간이 오래 걸렸습니다.

⇒ RNN을 개선한 LSTM, GRU를 사용한 경우 더 좋은 성능을 보이나 기존의 문제들을 완벽하게 해결하지 못했습니다.

 


- Recurrent Neural NetWork(RNN)

RNN: 이전 값(word embedding)을 가져와서 계속 업데이트 진행하는 방법으로 주로 Time-series, 문맥을 고려해야하는 NLP에서 사용됩니다. weight을 share한다는 특징을 가지고 있으며, 이전 값을 계속해서 가져와서 사용하기 때문에 long-term dependency 문제가 발생합니다. 또한 이전 셀의 계산이 완료되어야지만 현재 셀의 계산이 진행되기 때문에 동작 속도가 느리다는 단점도 가지고 있습니다.

- Long-Term Dependency

문장의 길이가 길어지면 길어질 수록 앞 단어의 정보를 잃어버리는 현상을 말합니다.

 

- Vanishing Gradient

모델은 학습을 위해 back propagation을 하며 예측 값과 정답과의 오차를 통해 가중치를 수정합니다. 이때 입력층으로 가까워질 수록 기울기가 작아져(미분 과정에서 값이 작아짐) 가중치가 제대로 업데이트 되지 않아 최적의 모델을 찾지 못하게 됩니다.

 

- Back Propagation

실제 정답과 모델이 계산한 예측 값이 얼마나 차이가 나는지 구한 다음, 그 오차값을 뒤로 전파해가면서 각 노드가 가지고 있는 변수들을 갱신하는 알고리즘으로 최적을 모델을 찾기 위한 과정입니다.


 

3. What is Seq2Seq Model?

seq2seq는 한 문장(시퀀스)을 다른 문장(시퀀스)으로 변환하는 모델로 현재 번역기에서 대표적으로 사용되고 있으며 encoder와 decoder 두 개의 RNN 모듈로 구성됩니다. 이때 encoder에서는 단어를 순차적으로 입력 받아 모든 정보를 함축한 하나의 고정된 크기의 context vector를 생성하고 decoder에서는 context vector를 받아 번역된 단어를 하나씩 순차적으로 출력합니다. 해당 방법을 통해 입력과 출력의 길이가 다른 경우 차원의 크기를 맞춰줘야하는 문제(”How are you?” → “잘 지내?”)를 해결할 수 있었습니다. 하지만 고정된 context vector에 모든 정보를 담아야 하는 모델의 특성상 문장이 길어질 수록 정보 손실이 발생하는 문제(bottleneck problem)가 발생합니다. 이를 해결하기 위해 제안된 방법이 오늘 세션의 주제인 Attention Mechanism입니다.

encoder는 "I love you"라는 문장을 순차적으로 받아 context vector를 생성합니다. 이후 decoder는 context vector와 예측한 단어를 통해 다음 단어를 예측합니다.

⇒ decoder는 초기 입력으로 문장의 시작을 의미하는 와 context vector를 받아 다음에 등장할 확률이 높은 단어를 예측하고 예측한 단어를 다음 시점의 RNN 셀의 입력으로 사용한다. 위 과정을 문장의 끝을 의미하는 가 다음 단어로 예측될 때까지 반복합니다.

 


- Context vector

입력 시퀀스(문장)의 모든 정보를 고정된 크기를 가진 vector로 압축하는 것으로 인코더가 입력 시퀀스의 정보를 얼마나 잘 압축했는지에 따라 모델의 성능이 결정됩니다. 이때 입력 시퀀스가 긴 경우 정보를 압축하는 과정에서 정보 손실이 발생해 성능이 떨어지는 문제가 발생합니다.


 

4. What is Attention Mechanism?

4-1. Attention Mechanism

Seq2Seq 모델의 고정된 context vector로 발생하는 bottleneck 문제를 개선하기 위한 방법으로 매 출력(예측)시점마다 모든 RNN 셀의 정보와 이전 예측 값으로 사용해 해당 시점의 맞춤형 context vector를 만들어서 예측하는 방법이다. 이는 문장이 길어져 context vector의 정보 손실이 발생하는 것을 방지하기 위해 매 예측 시점마다 중요한 단어에 더 집중한 context vector를 생성해서 사용하는 방법이라고 할 수 있습니다.

4-2. Process

Fully Connected layer(모든 RNN 셀의 state와 이전 예측 값 사용)에서 각 RNN 셀의 score를 계산한 다음 softmax 함수를 사용해 RNN 셀 별로 attention weight을 생성한다. 이는 해당 시점에 어떤 단어에 더 집중해서 예측할지를 알려주는 context vector입니다.

4-3. Performance

Attention Mechanism을 제안한 모델의 Result로 seq2seq 모델에 attention을 도입한 모델이 입력 단어가 적저나 많아도 압도적으로 좋은 성능을 보이는 것을 알 수 있었습니다.

⇒ RNNsearch는 seq2seq+att, Rnnenc는 seq2seq 모델의 테스트 결과를 의미하며, 30/50는 학습 과정에서의 maximum 30/50개 단어를 나타냅니다.

4-4. Teacher Forcing

Teacher Forcing은 seq2seq 모델을 훈련하는 방법으로 학습하는 과정에서 틀린 예측 값을 FC에 넣으면 이후의 예측에 계속해서 문제가 발생합니다. 이런 문제를 극복하기 위해 예측 값이 아닌 정답을 input으로 넣어 잘못된 예측을 하더라도 모델의 빠른 초기 학습과 제대로 훈련을 돕는 방법입니다.

 

5. Conclusion

현재 Attention Mechanism은 NLP뿐만 아니라 다양한 분야에서 사용되고 있으며, 2017년 “Attention is all you need”라는 논문에서 제안되어 NLP 분야에 한 획을 그은 Transformer의 핵심 아이디어로 사용됩니다. 현재 Transformer는 딥러닝 분야에서 없어서는 안되는 모델로 GitHub, GPT-3, bert 등 다양한 곳에서 폭넓게 쓰이며 거의 모든 시장을 점유하고 있습니다.

 

6. Reference

https://wikidocs.net/book/2155

https://ratsgo.github.io/nlpbook/

https://cordingdiary.tistory.com/98

https://reniew.github.io/contents/categories/

https://bkshin.tistory.com/entry/NLP-13-시퀀스투시퀀스seq2seq