[구글 BERT의 정석] Chapter1: 트랜스포머 입문(2)
이전 글에서 트랜스포머와 어텐션에 대해 대략적으로 알아보았다.
트랜스포머는 어텐션 구조를 이용해 문장 간의 관계를 파악한다.
그리고, 여기서 Q,K,V를 활용한다.
오늘은 저 행렬들을 어떻게 활용하여 관계를 구하는지 자세히 알아보자
1단계
첫번째 단계는 쿼리 행렬과 키(transpose)의 내적 연산을 수행한다.
행과 열의 이름은 각 단어로 불러보자 그럼 "I" 행 "I"열의 원소는 "I" 벡터와 "I"벡터의 내적이다
마찬가지로 임의의 행 N과 열 M에 대해서 원소는 단어 N 벡터와 M의 내적이라고 할 수 있다.
기하학적으로 내적은 두 벡터의 선형사상을 의미한다.
조금 비약해서 말하면 두 벡터가 비슷한지 정도로 이해하면 좋을 것 같다.
그렇다면 결과로 나온 행렬의 각 원소는 단어와 단어의 유사도의 행렬이라고 할 수 있다.
2단계
다음은 Q와 K의 내적을 K벡터의 차원의 제곱근으로 나누어준다. 이를 통해 안정적인 gradient를 얻을 수 있다
3단계
마지막으로 softmax함수를 통해 정규화 작업을 진행한다. 소프트맥스는 함수의 특성 상 0~1 사이의 값을 지닌다.
이를 통해 2단계의 결과를 적용하면 각 단어들이 어느정도 %의 유사도를 가지는지 알 수 있다.
이렇게 결과로 나온 행렬은 스코어 행렬이라고 한다.
Score Matrix = $Softmax(\frac{QK^T} {\sqrt d})$
4단계
다음은 어텐션 행렬을 계산하는 것이다. 어텐션 행렬은 각 단어의 벡터값을 갖는다.
앞서 구한 스코어 행렬에 value 행렬을 곱하여 구할 수 있다.
지금까지 과정을 요약하면
1.쿼리와 키의 내적
2.1의 결과를 차원의 제곱근으로 나눔
3.소프트맥스 함수 적용
4.어텐션 행렬 계산