어텐션(Attention)에 대해 정리하고자 한다.이해하기도 어렵고 설명하기도 어렵다보니 차근차근 알아보도록 하자.
정보 정리, 그림 출처 : https://wikidocs.net/22893
Attention이란 사전적 정의로는 '주의, 주목, 관심' 등의 의미로 정의 되어있다. NLP에서 말하는 attention도 사전적 정의와 비슷하다고 할 수 있다.
seq2seq의 기본 구조를 보면 기존에는 인코더와 디코더가 여러 RNN(셀)로 구성됨을 볼 수 있다. 하지만 이런 구조는 문제점이 존재한다.
- RNN기반의 seq2seq 구조의 문제점
- 기울기 소실(문장이 길 때, 번역 품질의 저하)
- 하나의 고정된 크기 벡터(context vector)에 모든 문장의 정보를 압축하다보니 결과적으로 정보 손실 발생
(= context vector 병목)
따라서, 어텐션을 사용하는 이유는 입력 시퀀스 길이가 길 때 출력 시퀀스(예측한 시퀀스)의 정확도가 떨어지지 않도록 보장 해주기 때문
그렇다면 어텐션을 어떻게 사용하는 것일까??
어텐션의 아이디어는 아래와 같다.
- 디코더의 한 셀에서 나올 단어를 예측할 때 인코더에 입력 되었던 전체 문장을 다시 한 번 참고하는 것!
(예측할 단어와 연관이 있는 단어를 좀 더 집중해서 보는 것)
어텐션이라는 게 어떤 건지 대충 느낌은 알 것 같다.
하지만 어찌됐든 어텐션을 사용하려면 예측 과정에서 은닉 상태와 함께 계산할 수 있는 어떤 값이 존재해야 활용할 수 있다는 정도는 인지할 수 있을 것 같다.
그럼 그 값을 어떻게 구하냐??
방금 말한 어떤 값이라는 게 attention value이다.
그림을 보고 Q,V,K의 각 의미에 대해서 설명하겠다.
- Atttention value = Attention(Q, K, V)로 정의한다.
![]()
Q : Query (어떤 시점(t)일 때 디코더 셀에서의 은닉 상태) -> (인코더 - 디코더 어텐션인 경우)K : key (모든 시점의 인코더 셀의 은닉 상태)V : value (모든 시점의 인코더 셀의 은닉 상태)
즉, attention value를 구하는 알고리즘은,
디코더에서 어떤 시점에서 나올 단어를 예측할 때, 그때 셀의 은닉 상태를 가져온다. (D_t로 명명)
모든 인코더 셀의 은닉 상태(h1,h2,h3....hn)를 가져와서 유사도(sililarity)를 구한 뒤
key에 매핑 되어 있는 각기 다른 value에 유사도를 반영하고 그 값을 모두 더해서 반환(return)한다.
이때 반환된 값이 attention value이다

림의 대략적인 과정은 아래와 같다.
(1) -> 예측 시점의 은닉 상태와 인코더의 모든 단어들의 정보(은닉 상태)를 사용(2) -> 예측 시점의 은닉 상태와 인코더의 모든 단어의 은닉 상태 간 내적을 수행, softmax를 사용하여 확률 값을 산출한다.
(사각형의 크기 = 확률 값)즉, i am a student의 모든 단어와 3번째 셀 출력 단어인 etudiant와의 연관성을 볼 수 있다는 것이고 보다 정확도 높은 단어를 예측할 수 있는 장점
위 세부 과정을 순차적으로 살펴보도록 하겠다.
디코더에서 예측하려는 시점의 은닉 상태를 S_t라고 하고, 인코더 셀의 모든 은닉 상태를 h1,h2,h3.....hn이라고 함
인코더와 디코더의 벡터 dimension이 동일하다는 전재 하에 S_t를 transpose(전치) 처리를 해주고 모든 h1,h2,h3...hn과 각각 내적을 통해 총 n개의 어텐션 스코어를 산출한다. (위 예시에선 4개)
모든 스코어 값은 스칼라 값
이전 과정에서 얻은
attention score에 소프트맥스 함수를 적용하여 어텐션 확률 분포를 얻을 수 있다.분포에서 얻은 각 확률 값을
attention weight라고 한다.
디코더 t 시점에서의 어텐션 분포는 위와 같이 나타낼 수 있다.
a^t -> t시점
Attention weight,
e^t -> t 시점의 모든attention score
- 어텐션 가중치와 각 가중치에 해당하는 은닉 상태의 가중합(weighted sum)을 구하는데, 이게 바로 어텐션 값(attention value)가 되는 것이다.
![]()
- 그림과 같이 attention value를 나타낼 수 있다.
(= 정규화 전 Q, K 내적 값) (= softmax(attention score) = attention weight)(= sum(attention weight * V))