일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Transformer 모델
- 트랜스포머
- Transformer 디코더
- 어텐션 행렬
- self-attention
- Transformer Decoder
- Auto-Encoding Variational Bayes
- 포지셔널 인코딩
- AI Math
- seq2seq
- 네이버 부스트캠프 코딩테스트 후기
- 트랜스포머 모델
- 트랜스포머 행렬
- VAE 논문 리뷰 #
- VAE 설명
- 부스트캠프
- 네이버 부스트캠프 AI Tech 6기
- 네이버 부스트캠프 AI Tech
- Transformer model
- VAE
- Positional Encoding
- boostcamp
- 어텐션
- transformer
- 주간학습정리
- 네이버 부스트캠프
- 셀프 어텐션
- pytorch
- 네이버 ai 부스트캠프
- 네이버 부스트캠프 KDT 전형
- Today
- Total
DH. AI
[딥러닝] 어텐션 메커니즘 (Attention Mechanism) 본문
- 어텐션 메커니즘의 이해는 Transformer 모델을 이해를 위해 필수입니다.
1. 이전 방식(seq2seq)의 문제점과, 어텐션(Attention)의 아이디어
첫번째, 하나의 소정된 크기에 벡터의 모든 정보를 압축하기 때문에 정보 소실이 발생함.두번째, RNN의 문제인 기울기 소실(vanishing gradient) 문제가 있음.
어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 점입니다. 단, 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(attention)해서 보게 됩니다.
2. 어텐션 함수(Attention Function)

어텐션을 함수로 표현하면 주로 다음과 같이 표현됩니다.
Attention(Q, K, V) = Attention Value
어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구합니다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해줍니다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다. 여기서는 이를 어텐션 값(Attention Value)이라고 하겠습니다.
- Q = Query : t 시점의 디코더 셀에서의 은닉 상태
- K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
- V = Values : 모든 시점의 인코더 셀의 은닉 상태들
3. 닷-프로덕트 어텐션(Dot-Product Attention)

위 그림은 디코더의 세번째 LSTM 셀에서 출력 단어를 예측할 때, 어텐션 메커니즘을 사용하는 모습을 보여줍니다.
(디코더의 1,2번째 셀에서는 이미 어텐션을 통해서 je, suis를 예측했다고 가정)
디코더의 세번째 LSTM 셀은 출력 단어를 예측하기 위해서 인코더의 모든 입력 단어들의 정보를 다시 한번 참고하고자 합니다. 중간 과정에 대한 설명은 현재는 생략하고 여기서 주목할 것은 인코더의 소프트맥스 함수입니다.
소프트맥스 함수를 통해 나온 결과값은 I, am, a, student 단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값입니다. 위의 그림에서는 빨간 직사각형의 크기로 소프트맥스 함수의 결과값의 크기를 표현했습니다. 직사각형의 크기가 클 수록 도움이 되는 정도의 크기가 큽니다. 각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이를 하나의 정보로 담아서 디코더로 전송됩니다. 위의 그림에서는 초록색 삼각형이 이에 해당됩니다. 결과적으로, 디코더는 출력 단어를 더 정확하게 예측할 확률이 높아집니다. 좀 더 상세히 알아보겠습니다.
3 - (1) 어텐션 스코어(Attention Score)를 구한다.

인코더의 시점(time step)을 각각 1, 2, ... N이라고 하였을 때 인코더의 은닉 상태(hidden state)를 각각 h1, h2, ... hN라고 합시다. 디코더의 현재 시점(time step) t에서의 디코더의 은닉 상태(hidden state)를 st라고 합시다.
(여기서 인코더의 은닉상태와 디코더의 은닉상태의 차원이 같다고(4로 ) 가정)
이전 방식(seq2seq) 디코더의 셀은 두 개의 입력값을 필요로 하는데, 바로 이전 시점인 t-1의 은닉 상태와 이전 시점 t-1에 나온 출력 단어입니다.
그런데, 어텐션 메커니즘에서는 출력 단어 예측에 또 다른 값을 필요로 하는데 바로 어텐션 값(Attention Value)이라는 새로운 값입니다. t번째 단어를 예측하기 위한 어텐션 값을 at이라고 정의하겠습니다.
지금부터 설명하는 모든 과정은 at를 구하기 위한 여정입니다. 그 여정의 첫 걸음은 바로 어텐션 스코어(Attention Score)를 구하는 일입니다. 어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 st와 얼마나 유사한지를 판단하는 스코어값입니다.
닷-프로덕트 어텐션에서는 이 스코어 값을 구하기 위해 st를 전치(transpose)하고 각 은닉 상태와 내적(dot product)을 수행합니다. 즉, 모든 어텐션 스코어 값은 스칼라입니다. 예를 들어 st과 인코더의 i번째 은닉 상태의 어텐션 스코어의 계산 방법은 아래와 같습니다.

3 - (2) 소프트맥스(softmax) 함수를 통해 어텐션 분포(Attention Distribution)를 구한다.

모든 어텐션 스코어에 소프트맥스 함수를 적용해서 합이 1이 되는 어텐션 분포를 얻어냅니다. 이때 각각의 값은 어텐션 가중치(Attention Weight)라고 합니다.
* 지금 어텐션 과정을 보이는 것은 디코더의 한 시점에서 출력결과를 만들어 내는 과정에서의 어텐션 값을 구하는 과정이라는 것을 명심하자.
3 - (3) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값(Attention Value)을 구한다.

이제 지금까지 준비해온 정보들을 하나로 합치는 단계입니다. 어텐션의 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태와 어텐션 가중치값들을 곱하고, 최종적으로 모두 더합니다. 아래 수식은 어텐션 함수의 출력값인 어텐션 값(Attention Value) at에 대한 식입니다.

어텐션 값 at는 인코더의 문맥을 포함하고 있다고 하여, 컨텍스트 벡터(context vector)라고도 불립니다. 이는 seq2seq의 용어와는 다르게 쓰입니다.
3 - (4) 어텐션 값과 디코더의 t 시점의 은닉 상태를 연결한다.(Concatenate)

다. 사실 어텐션 값이 구해지면 어텐션 메커니즘은 at를 st와 결합(concatenate)하여 하나의 벡터로 만드는 작업을 수행합니다. 이를 vt라고 정의해봅시다. 그리고 이 vt를 y_hat 예측 연산의 입력으로 사용하므로서 인코더로부터 얻은 정보를 활용하여 y_hat를 좀 더 잘 예측할 수 있게 됩니다. 이것이 어텐션 메커니즘의 핵심입니다.
3 - 5) 출력층 연산의 입력이 되는 s~t를 계산합니다.

가중치 행렬과 곱한 후에 하이퍼볼릭탄젠트 함수를 지나도록 하여 출력층 연산을 위한 새로운 벡터인 s~t를 얻습니다. 어텐션 메커니즘을 사용하지 않는 seq2seq에서는 출력층의 입력이 t시점의 은닉 상태인 st였던 반면, 어텐션 메커니즘에서는 출력층의 입력이 s~t가 되는 셈입니다.
3 - (6) s~t를 출력층의 입력으로 사용합니다.


-딥 러닝을 이용한 자연어 처리 입문을 참고하였습니다. -
'[딥러닝] > [Transformer]' 카테고리의 다른 글
[딥러닝] 트랜스포머(Transformer) Position-wise FFNN, Residual connection & Layer Normalization, 디코더 (0) | 2022.08.07 |
---|---|
[딥러닝] 트랜스포머(Transformer) 어텐션, 인코더, 셀프 어텐션 (0) | 2022.08.07 |
[딥러닝] 트랜스포머(Transformer) 하이퍼파라미터, 인코더와 디코더, 포지셔널 인코딩 (0) | 2022.08.07 |