어텐션 함수(Attention Function)
어텐션을 함수로 표현하면 주로 다음과 같이 표현된다.
Attention(Q, K, V) = Attention Value
어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구한다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해준다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다. 여기서는 이를 어텐션 값(Attention Value)이라고 하겠다.
지금부터 배우게 되는 seq2seq + 어텐션 모델에서 Q, K, V에 해당되는 각각의 Query, Keys, Values는 각각 다음과 같다.
- Query : t 시점의 디코더 셀에서의 은닉 상태
- Keys : 모든 시점의 인코더 셀의 은닉 상태들
- Values : 모든 시점의 인코더 셀의 은닉 상태들
닷-프로덕트 어텐션(Dot-Product Attention)
어텐션은 다양한 종류가 있는데 그 중에서도 가장 수식적으로 이해하기 쉽게 수식을 적용한 닷-프로덕트 어텐션(Dot-Product Attention)을 통해 어텐션을 이해해본다. seq2seq에서 사용되는 어텐션 중에서 닷-프로덕트 어텐션과 다른 어텐션의 차이는 주로 중간 수식의 차이로 메커니즘 자체는 거의 유사하다.
디코더의 첫번째, 두번째 LSTM 셀은 이미 어텐션 메커니즘을 통해 je와 suis를 예측하는 과정을 거쳤다고 가정하고 디코더의 세번째 셀의 예측 과정을 살펴보자. 디코더의 세번째 셀은 출력 단어를 예측하기 위해 인코더의 모든 입력 단어들의 정보를 다시 한 번 참고하고자 한다. 이를 위해 인코더의 모든 시점의 은닉 상태를 활용한다. 어떻게 활용하는지 순서대로 알아보자.
1) 어텐션 스코어(Attention Score)를 구한다.
time step이 1, 2, ..., N이라 할 때 $h_1, h_2, h_3, h_4$는 각 시점의 인코더의 은닉상태들이다. $s_t$는 현재 시점 t에서 디코더의 은닉상태이다.
디코더의 t 시점에서 필요한 입력값은 t-1 시점의 은닉상태와 t-1 시점의 출력 단어이다.
어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 $s_t$와 얼마나 유사한지를 판단하는 스코어값이다.
닷-프로덕트 어텐션에서는 $s_t$를 전치하고 인코더의 각 은닉 상태와 내적을 수행하여 어텐션 스코어를 계산한다.
총 time step이 4이기 때문에 4개의 어텐션 스코어가 계산되고, 이 어텐션 스코어의 모음을 $e^t$라고 정의한다.
2) 소프트맥스 함수를 통해 어텐션 분포(Attention Distribution)를 구한다.
$e^t$에 소프트맥스 함수를 적용하여 어텐션 분포 ${\alpha}^t$를 계산한다.
3) 어텐션 분포와 인코더의 은닉 상태를 가중합하여 어텐션 값(Attention Value)를 구한다.
각 인코더의 은닉 상태와 어텐션 분포를 가중합하여 어텐션 값 $a_t$를 구한다. 수식은 다음과 같다.
$a_t = \sum_{i=1}^N \alpha_i^T h_i$
어텐션 값은 인코더의 문맥을 포함하고 있다고하여, 컨텍스트 벡터(context vector)라고도 불린다.
4) 어텐션 값과 $s_t$를 연결한다.(Concatenate)
$a_t$와 $s_t$를 연결하여 하나의 벡터로 만들고 이를 $v_t$라 한다. 그런다음 이 $v_t$를 $\hat{y}$ 예측의 입력으로 사용한다.
5) 출력층 연산의 입력이 되는 $\tilde{s}_t$를 계산한다.
fig. 1의 출력층을 보면 Dense 층이 있는데 위 그림은 Dense층에서 이뤄지는 연산을 표현한 것이다. 그런 다음 최종적으로 $\tilde{s}_t$에 소프트맥스 함수를 적용하여 예측 벡터 $\hat{y}_t$를 얻는다.
바다나우 어텐션(Bahdanau Attention)
닷-프로덕트 어텐션을 저자의 이름을 따 루옹 어텐션이라고 하는데 바다나우 어텐션은 어텐션 스코어를 계산할 때 닷-프로덕트가 아닌 concat을 활용한다.
바다나우 어텐션의 Q, K, V는 다음과 같다.
- Query : t-1 시점의 디코더 셀에서의 은닉 상태
- Keys : 모든 시점의 인코더 셀의 은닉 상태들
- Values : 모든 시점의 인코더 셀의 은닉 상태들
루옹과 차이점은 Query가 t 시점이 아니라 t-1 시점이다.
과정을 순서대로 살펴보자.
$s_{t-1}$과 $h_i$의 어텐션 스코어 계산 방법은 다음과 같다.
$score(s_{t-1}, h_i) = W_a^T tanh(W_b s_{t-1} + W_c h_i)$
병렬 연산을 위해 $h_1, h_2, h_3, h_4$를 $H$라 두면 수식은 다음과 같다.
$score(s_{t-1}, H) = W_a^T tanh(W_b s_{t-1} + W_c H)$
그림을 통해 이해해보자. 우선 $W_c H$와 $W_b s_{t-1}$는 각각 다음과 같다.
이들을 더한 후 tanh 함수를 지나도록 한다.
이제 $W_a^T$와 행렬곱을 수행해 어텐션 스코어 벡터 $e^t$를 얻는다.
$e^t= W_a^T tanh(W_b s_{t-1} + W_c H)$
이후 컨텍스트 벡터를 구하는 과정은 닷-프로덕트 어텐션과 동일하고 컨텍스트 벡터로부터 $s_t$를 구하는 방법을 알아보자.
기존의 LSTM이 $s_t$를 구할 때를 아래 그림을 통해 상기해보자. 기존의 LSTM은 이전 시점의 셀로부터 전달받은 은닉 상태 $s_{t-1}$와 현재 시점의 입력 $x_t$를 가지고 연산하였다.
바나다우 어텐션 메커니즘에서는 컨텍스트 벡터와 $x_t$를 연결(concatenate)하여 현재 시점의 새로운 입력으로 사용한다.
이후 예측 벡터를 구하는 과정은 닷-프로덕트와 동일하다.
'Deep Learning > NLP' 카테고리의 다른 글
BERT (0) | 2024.02.07 |
---|---|
ELMo(Embeddings from Language Model) (0) | 2024.02.06 |
트랜스포머 (0) | 2024.01.11 |
서브워드 토크나이저 (Subword Tokenizer) (0) | 2023.10.05 |