본격적으로 트랜스포머에 대해 배우기 전에 어텐션과 어텐션의 탄생에 대해 알아보겠습니다
Seq2Seq의 한계
어텐션은 seq2seq 모델의 단점을 극복하기 위해 등장한 방법입니다. seq2seq이 가지는 단점은 다음과 같습니다:
- seq2seq의 인코더는 입력된 시퀀스 데이터에 대해 하나의 은닉 상태 벡터(hidden state vector) 만을 디코더로 전달합니다
- 그래서 시퀀스의 앞부분에 있는 데이터에 대한 정보 유실됩니다
- 시퀀스 데이터의 길이가 길어질수록 이 문제는 더 심각해집니다
어텐션
seq2seq의 한계가 인코더에서 하나의 은닉 상태 벡터만이 디코더로 전달되는 것이 문제라면 인코더의 모든 은닉 상태 벡터를 전달해준다면 어떨까요?
그래서 seq2seq with attention에서는 디코더의 어텐션 블럭이 인코더의 모든 은닉 상태 벡터를 입력 받습니다. 대신 은닉 상태 벡터들을 그대로 이용하는 것이 아니라 예측하려는 결과와 더 많은 연관이 있는 은닉 상태 벡터에 더 높은 가중치를 부여함으로써 주의(attention)을 기울입니다. 이 때 부여하는 가중치를 어텐션 스코어(attention score)라고 합니다
어텐션 블럭은 인코더로부터 얻은 은닉 상태 벡터들에 가중치를 곱한 후 모든 벡터를 합산한 하나의 벡터를 디코더의 현재 스텝에서의 은닉 상태 벡터와 concatenate하여 출력층(출력층 이전에 다른 층이 있을 수 있음)에 전달하게 됩니다
어텐션 스코어
이제 인코더에서 얻은 은닉 상태 벡터에 곱해줄 어텐션 스코어(가중치)를 구하는 방법을 알아보겠습니다
예시를 들기 위해 어텐션 블럭이 인코더로부터 입력 받을 은닉 상태 벡터들을 $h_{1}, h_{2}, h_{3}$라고 정의해보겠습니다. $h_{e}$는 은닉 상태 벡터들을 담는 리스트입니다 $$h_{e} = \begin{bmatrix}h_{1} \\ h_{2} \\ h_{3} \end{bmatrix}$$
또한, 디코더의 첫번째 스텝에서의 은닉 상태 벡터를 $h_{(decoder, 1)}$라고 할 때, $h_{1}, h_{2}, h_{3}$ 각 벡터와 $h_{(decoder, 1)}$의 유사도를 구하면 됩니다. 유사도를 구하는 방법은 여러가지가 있지만 일반적으로 두 벡터간의 내적 연산이 사용됩니다. 구체적 예시를 들어 계산 과정을 살펴보겠습니다:
$$ \begin{align} h_{1} = [1, 1, 1] \\ h_{2} = [2, 2, 2] \\ h_{3} = [3, 3, 3] \\ h_{(decoder, 1)} = [1, 2, 3] \end{align}$$ 이라고 할 때,
$h_{1}$과 $h_{(decoder, 1)}$의 유사도는 내적으로 연산합니다: $[1, 1, 1] \cdot [1, 2, 3] = 1 \times 1 + 1 \times 2 + 1 \times 3 = 6$이 됩니다. $h_{2}$와 $h_{3}$에 대해서도 $h_{(decoder, 1)}$과 내적을 연산하면 각각 $12$와 $18$이라는 유사도 값을 얻을 수 있습니다
이제 이 유사도를 원래 각 벡터와 곱해주면 되는데, $6, 12, 18$이라는 값을 그대로 곱해줄 수도 있지만 어텐션 스코어의 합을 1로 만들어주기 위해 여기에 소프트맥스를 취해주게 됩니다
즉, $6$ 대신 $\frac{e^{6}}{e^{6} + e^{12} + e^{18}} \approx 0$, $12$ 대신 $\frac{e^{12}}{e^{6} + e^{12} + e^{18}} \approx 0$, $18$ 대신 $\frac{e^{18}}{e^{6} + e^{12} + e^{18}} \approx 1$을 어텐션 스코어로 사용해주게 됩니다. (제가 수를 잘못 골라서 이런 극단적인 예시가 나왔네요. 대충 이런 식으로 계산 된다는 것만 알아두세요)
인코더에서 온 각 은닉 상태 벡터에 어텐션 스코어를 곱한 후 각 결과 값을 합해 하나의 벡터로 만듭니다. 여기서 결과로 나온 하나의 벡터는 여러 은닉 상태 벡터 중 현재 예측해야하는 결과(디코더의 은닉 상태 벡터. 이 예시에서는 $h_{(decoder, 1)}$)와 많은 연관이 있는 정보에 가중치를 높게 둔 벡터가 됩니다.
$$ \begin{align} h_{1} \times 0 = [0, 0, 0] \\ h_{2} \times 0 = [0, 0, 0] \\ + \ h_{3} \times 1 = [3, 3, 3] \\ \\ = [3, 3, 3] \end{align} $$
이렇게 나온 $[3, 3, 3]$은 $h_{(decoder, 1)} = [1, 2, 3]$과 concatenate 되어 출력층의 소프트맥스를 거치면 첫번째 예측이 완료됩니다
이번 포스팅에서는 어텐션이 무엇인지, 왜 나오게 된 개념인지, 어텐션 스코어는 어떻게 계산되는지에 대해 알아보았습니다
다음 포스팅에서는 셀프 어텐션에 대해 알아보겠습니다
감사합니다
'딥러닝 > 트랜스포머' 카테고리의 다른 글
트랜스포머 시리즈 마지막편 트랜스포머의 구조 - 디코더 (0) | 2024.02.06 |
---|---|
트랜스포머 시리즈 4편 트랜스포머의 구조 - 인코더 (0) | 2024.02.05 |
트랜스포머 시리즈 3편 Q, K, V (0) | 2024.02.04 |
트랜스포머 시리즈 2편 Self-Attention 셀프 어텐션 (0) | 2024.02.02 |