본문 바로가기
딥러닝/트랜스포머

트랜스포머 시리즈 2편 Self-Attention 셀프 어텐션

by 객잔주인 2024. 2. 2.

지난 포스팅에서는 seq2seq과 어텐션을 결합한 seq2seq with attention에 대해 알아보았습니다

 

오늘은 셀프 어텐션(self-attention)에 대해 알아보겠습니다

 

seq2seq with attention을 잘 이해했다면 어렵지 않습니다

 

seq2seq with attention에서는 어텐션 스코어를 계산할 때 인코더에서 넘어온 은닉 상태 벡터들과 디코더의 은닉 상태 벡터간의 내적을 한 뒤 소프트맥스를 취해주었습니다.

 

여기서 주목할 점은 인코더의 은닉 상태 벡터 $h_{(encoder, i)}$와 디코더의 은닉 상태 벡터 $h_{(decoder, j)}$간의 연산이었다는 것입니다. 즉, 현재 출력하려는 결과와 유사도가 가장 높은 input 정보를 많이 반영하겠다는 것입니다

 

반면 셀프 어텐션은 입력 시퀀스 안에서 각 데이터의 임베딩 벡터 간에 어텐션 스코어 계산이 이루어집니다. 즉, 셀프 어텐션은 시퀀스 데이터 내 각 토큰간의 관련성을 보겠다는 뜻입니다.

 

예를 들어, I love apple이라는 문장이 있을 때 각 단어의 임베딩 벡터를 $$\begin{align} e_{I} = [1, 0, 1, 1] \\ e_{love} = [1, 1, 0, 1] \\ e_{apple} = [0, 1, 1, 1] \end{align}$$이라고 할 때 apple의 어텐션 스코어를 계산해보면 apple과 연관이 높은 단어를 구할 수 있습니다. 한 번 계산을 해보겠습니다:

 

$$\begin{align} e_{I} \cdot e_{apple} = [1, 0, 1, 1] \cdot [0, 1, 1, 1] = 2 \\ e_{love} \cdot e_{apple} = [1, 1, 0, 1] \cdot [0, 1, 1, 1] = 2 \\ e_{apple} \cdot e_{apple} = [0, 1, 1, 1] \cdot [0, 1, 1, 1] = 3 \end{align}$$

 

마찬가지로 소프트맥스를 취해주면 $e_{apple}$에 대한 $e_{I}$의 가중치는 0.2, $e_{love}$의 가중치는 0.2, $e_{apple}$의 가중치는 0.6입니다

 

즉, apple은 자기 자신과 가장 관련이 높고(당연하게도), I와 love에 대해서는 같은 정도로 관련돼있다는 것을 알 수 있습니다


이번 포스팅에서는 셀프 어텐션의 개념과 계산 방법에 대해 알아보았습니다

 

다음 포스팅에서는 트랜스포머 구조 안에서의 어텐션에 대해 알아보겠습니다

 

감사합니다