Skip to content

Commit

Permalink
Update and rename 2024-11-27-attention-is-all-you-need.md to 2024-11-…
Browse files Browse the repository at this point in the history
…29-attention-is-all-you-need.md
  • Loading branch information
losskatsu authored Nov 29, 2024
1 parent a71ee75 commit 973e584
Showing 1 changed file with 64 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,67 @@ $i$번째 위치의 예측이 $i$ 이전 위치에서 알려진 아웃풋에만
(figure2)

#### 3.2.1 Scaled Dot-Product Attention

우리는 이 특정한 어텐션 방식을 "Scaled Dot-Product Attention"이라고 부르겠다.
(figure2 참고)
인풋 데이터는 $d_k$ 차원의 쿼리와 키(key)와 $d_v$ 차원의 값(value)으로 구성되어 있다.
우리는 쿼리와 키 간의 내적을 계산한 뒤, 각 결과를 $\sqrt(d_k)$로 나누고
소프트맥스 함수를 적용해 값(value)에 대한 가중치를 얻는다.

실제로는 동시에 여러 쿼리들에 어텐션 함수를 적용하고, 행렬 Q에 함께 모아서 처리한다.
키와 값들 역시 행렬 k와 v에 함께 모아처리한다.
우리는 아웃풋 해열을 다음과 같이 계산할 수 있다.

$Attention(Q, K, V) = softmax(\frac{QK^{T}}{\sqrt{d_k}})V$

가장 흔하게 사용되는 어텐션 함수는 additive(가산) attention과 dot-product(내적) 어텐션이다.
내적 어텐션은 $1/\sqrt{d_k}$ 스케일링 요소만 추가된 것을 제외하면
우리 알고리즘(Scaled Dot-Product Attention)과 동일하다.
가산 어텐션은 호환성 함수를 계산할 때,
단일 은닉층을 가진 피드포워드 네트워크를 사용한다.
이러한 두 방식은 이론적인 복잡도가 비슷하지만,
내적 어텐션은 매우 최적화된 행렬 곱셈 코드로 구현할 수 있으므로
실제로 훨씬 빠르고 메모리 효율적이다.
즉, 가산 어텐션은 은닉층을 활용해 호환성을 계산하고, 내적 어텐션은 단순히 내적을 사용하는데,
내적 어텐션이 더 빠르고 효율적이라고 할 수 있다.

$d_k$가 작을 때는 두 방법의 성능이 비슷하지만
$d_k$가 클 경우에는 스케일링이 없는 내적 어텐션은 가산 어텐션보다 성능이 떨어진다.
$d_k$ 값이 클 경우, 내적 결과값이 매우 커지면서 소프트맥스 함수의
그래디언트가 매우 작은 영역(region)으로 밀려서 그런것이 아닐까 추측한다.
따라서 이러한 일을 예방하고 안정성을 확보하기 위해
내적 값에 $1/\sqrt{d_k}$을 곱하는 스케일링을 적용한다.


#### 3.2.2 Multi-Head Attention

우리는 $d_{model}$ 차원의 키, 값, 쿼리를 사용해 단일 어텐션 함수를 수행하는 대신,
쿼리 키, 값을 각각 서로 다르게 학습된 프로젝션(linear projections)을 사용해
$d_k$, $d_k$, $d_v$ 차원으로 프로젝션(linear projections)하고
이를 h번 반복하는 것이 유리하다는 것을 발견했다.
이렇게 선형 변환된 쿼리, 키, 값에 대해 각각 병렬로 어텐션 함수를 수행하여
$d_v$차원의 아웃풋을 얻는다.
이 아웃풋들을 이어 붙여 서로 연결(concatenate)하고 다시 한번 선형 변환 한 뒤,
figure2에 묘사된 것과 같은 최종 값을 구할 수 있다.

멀티-헤드 어텐션은 모델이 다양한 표현 공간(Representation Subspace)에서
서로 다른 위치의 정보를 동시에 주목할 수 있게 한다.
단일 어텐션 헤드에서는 평균화로 인해 여러 정보가 하나로 합쳐지면서
구체적인 특징들이 희석될 수 있다.
그러나 멀티-헤드 방식은 각 헤드가 독립적으로 특정 특징을 학습할 수 있게 함으로써
모델의 표현력을 강화시킨다.

$MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^{O}$
$where head_i = Attentino(QW_{i}^{Q}, KW_{i}^{K}, VW_{i}^{V})$

이때 프로젝션(projection, 선형 변환)에 사용되는 행렬들은
다음과 같은 매게변수 행렬로 정의 된다.

$W_{i}^{Q}\in \mathbb{R}^{d_{model} \times d_k}$
$W_{i}^{K}\in \mathbb{R}^{d_{model} \times d_k}$
$W_{i}^{V}\in \mathbb{R}^{d_{model} \times d_v}$
$W_{i}^{O}\in \mathbb{R}^{hd_{v} \times d_{model}}$


#### 3.2.3 Applications of Attention in our Model

0 comments on commit 973e584

Please sign in to comment.