Logical Scribbles

[딥러닝] 어텐션 메커니즘(Attention Mechanism)이란? 본문

딥러닝/딥러닝 이론

[딥러닝] 어텐션 메커니즘(Attention Mechanism)이란?

KimJake 2023. 11. 27. 18:12

 

이번 포스팅은 어텐션 메커니즘에 대한 글이다. 어텐션 메커니즘을 공부하게 된 계기는 역시 트랜스포머 모델을 이해하기 위해서이다. "Attention Is All You Need" 논문에 등장한 트랜스포머 모델 구조를 살펴보며 시작해보자.

 

Transformer 구조

 

위 구조에서 지금까지 소개한 것과 소개하지 않은 것을 구분해보았다. 

 

"Add & Norm"은 Residual link와  Nomralization을 진행하는 부분으로,  ResNet에서 소개된 잔차연결을 이용한 뒤, 아래 포스팅에 소개되어 있는 nomalization을 수행한다. 약간 다른점은 layer nomalization을 사용한다는 점이다.

잔차연결
Layer Nomalization

 

 layer nomalization은 batch에 대한 의존도를 줄이고자 사용하며, layer를 기반으로 nomalization을 진행하는 방식이다. batch nomalization 이전 layer에 가중치를 곱한 결과(액티베이션 출력값)를 채널별로 정규화한다. 따라서 채널수(특징 수) 만큼의 평균과 분산을 계산해야 한다. 반면에 layer nomalization 데이터별로 정규화를 진행한다. 그러므로 미니배치 수만큼의 평균과 분산을 계산해야 한다.

 

아래는 batch nomalization에 대한 참고자료이다. layer nomalization과 거의 유사하다.

 

[딥러닝] Batch-Nomalization(배치 정규화)의 기초적 이해

쇼츠가 대세인 요즘, 딥러닝 관련 개념을 짤막하게 설명하는 '딥러닝 쇼츠' 시리즈를 만들어 보려고 한다. 독자가 짧은 시간 안에 읽고 이해할 수 있도록 하는 것이 목표이다. 공부를 하며 Batch-No

stydy-sturdy.tistory.com

 

"Feed Forward"에서는 딥러닝에서의 일반적인 forward 과정을 수행한다. 결합층 layer와 ReLU 함수로 이루어져 있다. 자세한 것은 트랜스포머 논문 리뷰에서 다루기로 하자.

Output 부분 Linear와 Softmax는 딥러닝에서의 과정과 같다고 생각하면 된다.

 

어찌됐든 자세한 것은 트랜스포머 논문 리뷰에서 살펴볼 것이다. 오늘은 저 빨간색 박스 중 어텐션에 관해 알아보자.

 

어텐션 메커니즘은 RNN기반 Seq2Seq 모델의 한계점을 해결하고자 등장한 메커니즘이다. 이 한계점에 대해서는 아래의 글에서 다루고 있다.

 

 

[딥러닝] Seq2Seq 와 거자일소(去者日疎 )

이전 포스팅에서 RNN에 대해 다루었다. 이번에는 RNN에서 조금 더 나아가보자. RNN에 대한 자세한 내용은 다음 글을 참고하면 된다. [딥러닝] RNN(Recurrent Neural Network)이란? 이번 포스팅에서는 가장 기

stydy-sturdy.tistory.com

 

요약해보자면 Seq2Seq 모델의 한계점은 다음과 같다.

  • 첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하므로 정보 손실이 발생한다.
  • 둘째, RNN의 근본적 문제인 기울기 소실 문제가 발생한다.

이러한 한계로 인해 기계 번역에서 번역의 품질이 떨어지는 상황이 발생했고, 이에 대한 대안으로 어텐션 메커니즘이 등장하게 된다.

 

나는 어텐션 메커니즘을 한마디로 "어떤 것을 더 집중해서 볼 것인지" 판단하는 메커니즘이라고 이해했다. 즉 입력 문장의 모든 정보를 동일한 가중치로 취급하지 않고, 출력 문장에서 특정 위치에 대응하는 입력 단어에 더 많은 가중치를 부여하는 메커니즘이다.

출력을 위해 모든 입력 단어들을 참조하는 것을 알 수 있다.

 

어텐션 함수

어텐션 함수에 대해 알아보자. 어텐션 함수는 세가지 인풋에 대해 어텐션 벨류를 출력하며, 다음과 같은 식으로 표현된다.

 

Attention(Q, K, V) = Attention Value

 

어텐션 함수를 이해하기 위해선 쿼리(Query), 키(Key), 값(Value)에 대해 알아야 한다. 위의 어텐션 함수의 인풋에 해당하는 Q, K, V가 각각 쿼리, 키, 값을 의미한다.

  • 쿼리(Query) : t 시점의 디코더 셀에서의 은닉 상태 -> 현재 출력 단어를 나타내는 벡터
  • 키(Key) : 모든 시점의 인코더 셀의 은닉 상태들 -> 입력 시퀀스의 벡터들
  • 값(Value) : 모든 시점의 인코더 셀의 은닉 상태들 -> 입력 시퀀스의 벡터들

어텐션 메커니즘에는 다양한 종류가 있다. 그 중 이 포스팅에서는 내적을 이용한 어텐션 메커니즘에 대해 다룰 것이다.

 

직접 어텐션이 어떤식으로 구현되는지 생각해보자.

 

위의 그림은 어텐션 메커니즘을 간략하게 보여주고 있다. 진행하고 있는 task는 "I am a student"라는 영어 문장을 독일어로 번역하는 것이다. 현재 그림 시점에서 'suis'라는 독일어가 디코더에 인풋으로 들어왔을 때, 알맞은 독일어 아웃풋을 내야하는 상황이다.

 

그런데 위 그림에서 디코더 셀은 입력 시퀀스의 벡터들과 어떠한 연산을 하는 듯하고, 이후 softmax를 통과한 값들이 확률을 출력하고 있다. softmax를 통과한 값으로 am과 student에 해당하는 확률이 큰것을 볼 수 있다. 이들은 또 다시 디코더 셀의 아웃풋과 연산되어 dense, softmax 층을 통과한 후 'etudiant' 라는 단어를 출력하고 있다. 만약 입력 문장의 길이가 엄청나게 길었다고 하더라도 디코더 셀은 이 모든 입력 벡터들과의 연산을 진행할 것이다. 

 

이제 이 과정을 하나하나 살펴보자. 어텐션 함수를 통해 어텐션 값을 구하는 과정은 4가지로 나누어 생각할 수 있다.

 

1) 어텐션 스코어를 구한다.

 

 

인코더의 은닉 상태들을 h1, h2, h3, h4라고 하고, 디코더의 은닉 상태를 St라고 해보자. 어텐션 메커니즘에서 가장 먼저 진행하는 것은 St를 이 모든 은닉 상태의 인코더들과 내적하는 것이다.

 

내적이 의미하는 것은 무엇일까?

 

보통 내적은 두 벡터간의 유사한 정도를 구하기 위하여 사용한다.

 

 

왼쪽 두 벡터 x,y를 보자. 세가지 상황 중에서 x와 y가 가장 유사한 상태라고 판단할 수 있을 것이다. 만약 둘의 내적을 취하면, 값은 양수이며 x가 y에 정사영 된 길이만큼의 값을 갖게 될 것이다.(스칼라 값) 만약 중앙의 그림처럼 x와 y가 수직이면 내적은 0의 값은, 오른쪽 그림처럼 아예 다른 방향을 가르키고 있으면 내적의 값은 오히려 음수가 될 것이다.

 

어텐션 메커니즘에서도 디코더의 은닉 상태와 인코더의 은닉 상태간의 유사도를 구하기 위하여 내적을 진행한다. 

 

 

이렇게 구해진 내적값을 어텐션 스코어라고 한다. 따라서 어텐션 스코어에 대한 수식은 다음과 같다.

 

2) 어텐션 분포를 구한다.

 

 

이제 디코더 셀의 은닉 상태와 인코더의 모든 은닉 상태를 내적하여 얻은 스칼라 값이 준비가 되었을 것이다. 이들을 한 벡터로 묶고, 소프트맥스 함수를 통과시킨다. 그 결과로 확률 값이 나오고, 그들을 모두 합하면 1이 될 것이다. 이들을 어텐션 분포 혹은 어텐션 가중치라고 한다.

 

어텐션 분포(어텐션 가중치)에 대한 식은 다음과 같을 것이다.

Q는 디코더 은닉 상태, K는 인코더 은닉상태

 

3) 어텐션 값을 구한다.

 

 

지금까지는 준비물을 준비한 것이고, 이제 본격적으로 어텐션 값을 구할 것이다. 가장 먼저, 각 인코더의 은닉 상태와 어텐션 분포를 이용하여 weighted sum 방식으로 표현해준다. 아래의 식에서 V가 등장하는데, 우리의 과정 중에서 key와 value는 같다고 생각하면 된다. 따라서 V도 인코더의 은닉 상태이다.

 

 

여기서 우리의 어텐션 값과 쿼리 값이 유사할 것을 추측할 수 있다. (....!!!!) 처음 이 과정을 공부할 때, 선형대수학의 위엄을 다시 한번 느낄 수 있었다. 난 이 부분에서 어텐션 값을 얻는 과정과 특이값 분해 혹은 PCA에서의 수식 전개가 굉장히 유사함을 느꼈다. 이 생각은 아직 확실히 정리가 되지 않아 차후에 포스팅을 작성해보도록 하겠다. 

 

어텐션 값은 또 다른 말로 Context Vector라고도 불리는데, Seq2Seq에서의 Context Vector와 차이가 있음을 알 수 있다.

 

4) 어텐션 값과 디코더의 은닉 상태를 연결한다.

 

여기서 '연결' 이란 말그대로 두 벡터를 결합함을 의미한다. 

 

이후 이 벡터를 활성 함수에 통과시키고, Softmax를 통과시킨다. Softmax는 multi-class classification에서 주로 이용되는 함수이다. 이 기계 번역 역시 수많은 영단어(500,000개 정도라고 알고 있다.) 중에서 가장 확률이 높은 한가지 단어를 선택하는 과정이므로 multi-class classification이라고 볼 수 있다.

 

 

이러한 어텐션 메커니즘은 초창기에는 Seq2Seq 모델에 적용되었지만, 이후 한 논문이 시퀀스 데이터 처리에 있어 모든 것을 바꿔놓는다. (다들 알고 있는 그  논문이다.) 이에 대해서는 다음 포스팅에서 알아보자.

 

끝!