내맘대로 코딩

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

딥러닝 (자연어처리)

어텐션 메커니즘 (Attention Mechanism)

Yoonjung 2024. 10. 29. 12:30

Attention 도입 이유 

  • 디코더가 참고하는 문맥은 입력문이 전부 압축된 하나의 벡터로, 이 벡터는 입력문을 모두 누적하고 있지만, 문장 앞부분의 내용은 너무 압축된 나머지 정보를 거의 잊어버리게 됩니다.
  • 인공신경망이 입력 데이터의 전체 또는 일부를 되짚어 살펴보면서 어떤 부분이 의사결정에 중요한지, 판단하고 중요한 부분에 "집중" 하는 방식인 어텐션 메커니즘을 도입하게 됩니다.
  • 그렇게 되면, 번역 시에 원문을 다시 재참조하여 현재 디코딩할 단어와 연관된 중요 부분에 집중하게 되고,입력 문장이 매우 길어진다 해도 전체 문맥을 골고루 참고할 수 있게 되므로 더 좋은 번역을 할 수 있습니다.

Attention 아이디어 및 컨셉 

  • 토큰에 대해 관심 있는 문맥 정보를 끌어오는 알고리즘
  • 디코딩 타임스텝에서 필요한 정보를 인코터 hidden state에서 가져오게 됩니다.
  • 원본 문장의 hidden vector들을 이용해 context vector(*아래 설명) 를 생성하여 활용하여 번역합니다.
  • 해당 단어에 조금 더 집중하여 전체 입력을 다시 한번 재조정한 입력 데이터 인코딩 벡터를 만듭니다.
  • -> 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 점입니다. 단, 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(attention)해서 보게 됩니다.

Attention(Q, K, V) = Attention Value

  • 어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구합니다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해줍니다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다. 여기서는 이를 어텐션 값(Attention Value)
  • Q = Query : t 시점의 디코더 셀에서의 은닉 상태 K = Keys : 모든 시점의 인코더 셀의 은닉 상태들 V = Values : 모든 시점의 인코더 셀의 은닉 상태들

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

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

  • 어텐션 메커니즘에서는 출력 단어 예측에 또 다른 값을 필요로 하는데 바로 어텐션 값(Attention Value)이라는 새로운 값입니다. t번째 단어를 예측하기 위한 어텐션 값을 at 이라고 정의
  • 어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 st 와 얼마나 유사한지를 판단하는 스코어값
  • 이 스코어 값을 구하기 위해 st 를 전치(transpose)하고 각 은닉 상태와 내적(dot product)을 수행

 

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

  • 어텐션 분포(Attention Distribution) : et에 소프트맥스 함수를 적용하여, 모든 값을 합하면 1이 되는 확률 분포를 얻어냅니다.
  • 각각의 값은 **어텐션 가중치(Attention Weight)**라고 합니다.
  • 예를 들어 소프트맥스 함수를 적용하여 얻은 출력값인 I, am, a, student의 어텐션 가중치를 각각 0.1, 0.4, 0.1, 0.4라고 합시다. 이들의 합은 1입니다. 위의 그림은 각 인코더의 은닉 상태에서의 어텐션 가중치의 크기를 직사각형의 크기를 통해 시각화하였습니다. 즉, 어텐션 가중치가 클수록 직사각형이 큽니다.
  • 디코더의 시점 t에서의 어텐션 가중치의 모음값인 어텐션 분포를 αt이라고 할 때, αt을 식으로 정의하면 다음과 같습니다.

 

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

  • 이제 지금까지 준비해온 정보들을 하나로 합치는 단계입니다. 어텐션의 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태와 어텐션 가중치값들을 곱하고, 최종적으로 모두 더합니다. 요약하면 **가중합(Weighted Sum)**을 진행합니다. 아래는 어텐션의 최종 결과. 즉, 어텐션 함수의 출력값인 어텐션 값(Attention Value) at 에 대한 식을 보여줍니다.
  • 어텐션 값 at은 종종 인코더의 문맥을 포함하고 있다고하여,컨텍스트 벡터(context vector) 라고도 불립니다.

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

 

 

 

어텐션 스코어 구하는 방식에 따라 아래와 같이 나눠짐

  • scaled dot을 주로 사용

 

 

[출처] 

https://calmmimiforest.tistory.com/108

 

[딥러닝] Attention에 대한 설명

RNN을 사용한 Seq2Seq 모델링의 특징과 문제점 인풋 문장의 정보를 잘 인코딩(단어 하나하나 누적해 압축한 벡터 생성)하여 디코더가 그에 부합하는 토큰을 하나씩 꺼내는 구조입니다. 디코더가 참

calmmimiforest.tistory.com

https://wikidocs.net/22893

 

15-01 어텐션 메커니즘 (Attention Mechanism)

앞서 배운 seq2seq 모델은 **인코더**에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, **디코더**는 이 컨텍스트 벡터를 통해서 출력 …

wikidocs.net

 

'딥러닝 (자연어처리)' 카테고리의 다른 글

옵티마이저(Optimizer)  (0) 2024.10.29