요약
- self attention은 encoder안에서 단어 임베딩 사이의 관계를 계산하는 메커니즘
- 임베딩 사이의 관계: 서로를 얼마나 참조해야하는지 계산함
- attention score로 표현됨
- 핵심 개념은 Query, Key, Value
본문
- 입력 문장을 단어로 쪼개고 임베딩으로 만들어서 임베딩 벡터 X로 만듦
- X에 가중치 행렬 W_q, W_k, W_v를 곱해서 Q, K, V를 얻음
- Q와 K 사이의 내적을 구함 => attention score 행렬
- 스코어 행렬의 행은 특정 단어 A와 나머지 단어들 사이의 관계를 수치적으로 보여줌
- 이제 score 행렬을 softmax를 통해 정규화(가중치화)하고 가중치 벡터와 V를 곱해 최종 표현을 만듦
- 한 단어 기준으로 문장 내 다른 단어들이 그 단어 표현을 만드는데 얼마나 기여하는지 알려줌
- 예시
- I love cat 이라는 문장이 입력으로 들어옴
- 임베딩을 통해 3 X dm 행렬 X가 만들어짐
- dm는 입력 임베딩 방법론에 따라 다름
- 가중치 행렬 W_q(dm * dk), W_k(dm* dk), W_v(dm * dv) 을 이용해 Q, K, V를 만듦
- dk, dv는 하이퍼 파라미터 값임
- 를 통해 attention score를 계산함
- 차원이 커지면 값이 너무 커짐, softmax 정규화해서 상관없다고 생각할 수 있지만, 입력 차이가 크면 거의 one-hot에 가까워짐, 이렇게 되면 모든 단어에 거의 0 또는 1의 weight만 줘서 정보 손실
- 내적의 분산을 대략 1 근처로 안정될 수 있게 구현
- 만들어진 attention score를 softmax화 하고 V와 곱해서 최종 표현을 만듦