본문 바로가기

학부/AI 관련 공부

Attention score (Attention Mechanism)

728x90
반응형

딥러닝 과목을 공부하던 중, 예전부터 정말 많이 들어왔고 나도 꽤 잘 안다고 생각했던 attention에서 너무 많이 헤매고 있다가 드디어 어느정도 이해를 할 수 있어서 그 감을 잊지 않고자 티스토리를 급하게 켰다.

 


Attention이란?


 

NLP를 생각하면서 attention에 접근해보자.

Attention mechanism이란, 실제 영어 단어의 뜻처럼 '문맥의 특정 부분에 집중'하는 메커니즘을 의미한다.

 

A : 내일 몇시에 만날거야?

B : 음... 나 밥도 먹고 청소도 하면 한 .. 오후 3시쯤 만나는 게 좋을 것 같은데?

 

이 예시에서 A의 질문에 필요한 대답은 '오후 3시'일 것이다.

안타깝게도, 컴퓨터는 이 문장을 다 보고 해석하려고 하기 때문에 쓸데없는 정보가 추가되기도 하고 그에 따라 오류가 발생할 수도 있다. 그런 문제를 보완하기 위해 attention mechanism을 사용한다고 이해하면 된다.

 


Attention value


 

Attention value를 계산하는 방법은 생각보다 간단하다. 나는 여기서 많이 헤맸지만, 다른 분들은 이 포스팅을 통해 조금이나마 덜 헤매길 바란다.

 

Attention score를 계산하기 위해, 3가지가 필요한데, 조금 더 이해가 쉽도록

‘나는 행복하다’ → ‘I am happy’ 로 번역하는 과정을 예시로 들자.

  • Q (Query, 쿼리) : 쿼리는 내가 어느 부분에 집중을 할 지 물어보는 부분이다.
    • 분석의 대상이 되는 부분, 즉 ‘나는 행복하다’를 의미한다.
  • K (Key) : 가지고 있는 모든 정보들을 의미한다.
    • 영어 단어들을 의미한다고 볼 수 있다.
    • ‘I’, ‘am’, ‘happy’ 외에도 ‘you’, ‘hungry’, ‘be’, ‘say’ 등이 있을 것이다.
  • V (Value) : key와 mapping되는 실제 값들을 의미한다.
    • Key와 value는 하나의 dictionary data로 생각하면 된다.
    • ‘I’ 에 대한 value=0.1, 이런 식으로 mapping될 수 있다.

 

계산하는 순서는 다음과 같다.

  1. 가장 먼저 Query와 key의 유사도를 구한다. (Attention score)
    1. $QK^T$, 즉 dot-product (내적)을 통해 구한다.
    2. 만약 유사도가 높다면 내적 값이 크게 나올 것이다.
  2. Softmax 함수를 통해 $QK^T$의 값이 너무 커지지 않도록 normalization을 취한다.
    1. $softmax(QK^T)$
    2. 여기서 key의 dimension을 이용해서 scaling하는 방법도 있다.
  3. Normalization된 attention score를 key와 mapping된 value값과 weighted sum을 해준다. (Attention value)

이렇게 구해진 attention value를 통해 ‘나는’ → ‘I am’, ‘행복하다’ → ‘happy’ 로 번역이 가능한 것이다.

 


여기서 self-attention을 수행하고 싶다면?


 

기존의 key들은 영어 백과사전 마냥 영어 단어들이 존재하는 형식이라고 생각하면 된다.

즉, query와 key의 출처가 다르다는 의미이다.

 

하지만, self-attention은 query와 key의 출처가 모두 동일하다. 

즉, 유사성을 찾고자 하는 문장이 input 문장과 같기 때문에 'it', 'you'와 같은 인칭 대명사가 무엇을 의미하는 지와 같은 task나 태깅, information retrieval task에서 자주 사용된다.

728x90
반응형