Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Zorba blog

어텐션 메커니즘 (Attention Mechanism) 본문

자연어처리

어텐션 메커니즘 (Attention Mechanism)

Zorba blog 2022. 5. 31. 18:27

어텐션 메커니즘 (Attention Mechanism)

- seq2seq 모델의 경우 인코더에서 입력 시퀀스를 Context Vector 라는 하나의 고정된 크기의 벡터 표현으로 압축.

- 이러한 RNN 기반의 seq2seq 모델에는 크게 두 가지 문제가 있음.

 

1. 하나의 고정된 크기의 Vector에 모든 정보를 압축하려고 하니까 정보 손실이 발생.

2. RNN의 고질적인 문제인 기울기 소실(Vanishing gradient) 문제가 존재.

 

- 입력 시퀀스가 길어지면 출력 시퀀스의 정확도가 떨어지는 것을 보정해주기 위해 어텐션(Attention) 기법이 등장.


1. 어텐션 (Attention)의 아이디어

- 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점 마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고.

- 단, 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(Attention)해서 보게 됨.


2. 어텐션 함수(Attention Function)

- 어텐션 메커니즘을 설명하기 위해 key-value의 개념 설명.

- 파이썬을 예로 들면 딕셔너리 자료형은 키(key) 와 값(Value) 라는 두 개의 쌍으로 구성되는데, 키를 통해서 맵핑된 값을 찾을 수 있음.

# 파이썬의 딕셔너리 자료형을 선언
# 키(Key) : 값(value)의 형식으로 키와 값의 쌍(Pair)을 선언한다.
dict = {"2017" : "Transformer", "2018" : "BERT"}
print(dict["2017"]) #2017이라는 키에 해당되는 값을 출력
Transformer

print(dict["2018"])  #2018이라는 키에 해당되는 값을 출력
BERT

- 어텐션을 함수로 표현하면 다음과 같이 표현

  Attention(Q, K, V) = Attention Value

 

- 어텐션 함수는 주어진 '쿼리(Query)에 대해서 모든 '키(Key)'와의 유사도를 각각 구함.

- 구해낸 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영.

- 유사도가 반영된 '값(Value)'을 모두 더해서 리턴, 이를 Attention Value라고 함.

Q = Query : t 시점의 디코더 셀에서의 은닉 상태
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
V = Values : 모든 시점의 인코더 셀의 은닉 상태들

3. 닷-프로덕트 어텐션 (Dot-Product Attention)

- 어텐션은 다양한 종류가 있는데 그 중에서 닷-프로덕트 어텐션(Dot-Product Attention)을 통해 어텐션을 이해.

- 다른 어텐션과의 차이는 주로 중간 수식의 차이이며, 메커니즘 자체는 거의 유사.

 

- 위 그림은 디코더의 세번째 LSTM 셀에서 출력 단어를 예측할 때, 어텐션 메커니즘의 사용 예시.

- 디코더의 세번째 LSTM 셀은 출력 단어를 예측하기 위해서 인코더의 모든 입력 단어들의 정보를 다시 한번 참고.

- 인코더의 소프트맥스 함수의 결과값은 I, am, a, student 단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값.

- 각 입력 단어가 디코더의 예측에 도움이 되는 정도를 수치화하여 측정되면 이를 하나의 정보로 담아서 디코더로 전송.

- 결과적으로, 디코더는 출력 단어를 더 정확하게 예측할 확률이 높아짐.

  (이전 인코더에서의 모든 단어 중 도움되는 단어를 참고함으로.)

- 아래 설명을 통해 단계적으로 확인.

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

- 인코더의 시점을 각각 1,2,...,N 이라고 하였을 때 인코더의 은닉 상태를 각각 h1, h2, ..., hN 이라고 함.

- 디코더의 현재 시점 t에서의 디코더의 은닉 상태를 St 라고 함.

- 여기서는 인코더의 은닉 상태와 디코더의 은닉 상태의 차원이 같다고 가정.

 

- 디코더의 현재 시점 t에서 출력 단어를 예측하기 위해 이전 시점인 t-1의 은닉 상태와 t-1 시점에서 나온 출력 단어 필요.

- 어텐션 메커니즘에서는 출력 단어 예측을 위해 어텐션 값(Attention Value)를 필요로 함.

- t번째 단어를 예측하기 위한 어텐션 값을 at라고 정의.

 

- 지금 모든 과정은 어텐션 값(Attention Value)을 구하기 위한 여정.

- 첫 걸음은 어텐션 스코어(Attention Score)를 구하는 일.

- 어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 St와 얼마나 유사한지를 판단하는 스코어값.

- 닷-프로덕트 어텐션에서는 이 스코어 값을 구하기 위해 St를 전치(Transpose)하고 각 은닉 상태와 내적을 수행.

- 내적을 했기 때문에 모든 어텐션 스코어 값은 스칼라.

- et는 st와 인코더의 모든 은닉 상태의 어텐션 스코어의 모음값.

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

- et에 소프트맥스 함수를 적용하여, 모든 값을 합하면 1이 되는 확률 분포를 얻어냄.

- 이를 어텐션 분포(Attention Distribution)라고 하며, 각각의 값은 어텐션 가중치(Attention Weight) 라고 함.

3) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값(Attention value)을 구한다.

- 어텐션의 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태와 어텐션 가중치값들을 곱하고, 최종적으로 모두 더함.

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

- 최종적으로 구한 어텐션 값 at를 st와 결합하여 하나의 벡터로 만드는 작업을 수행. 이를 vt라고 정의.

5) 출력층 연산의 입력이 되는 st를 계산합니다.

- vt를 바로 출력층으로 보내기 전에 신경망 연산을 한 번 더 추가.

- 가중치 행렬과 곱한 후에 하이퍼볼릭탄젠트 함수를 지나도록 하여 출력층 연산을 위한 새로운 벡터인 st를 얻음.

6) st를 출력층의 입력으로 사용합니다.

- st를 출력층의 입력으로 사용하여 예측 벡터를 얻습니다.


4. 다양한 종류의 어텐션(Attention)

Comments