1. Self-Attention 공식화
Self-Attention의 수학적 표현은 다음과 같습니다:
Attention(Q,K,V)=softmax(dkQKT)V
- Q : Query 벡터
- K : Key 벡터
- V : Value 벡터
- dk : Key 벡터의 차원 수 (정규화를 위해 사용)
여기서 QKT 는 Query와 Key 간의 내적을 나타내며, 그 값은 각 단어 간의 유사도를 나타냅니다. 이후 softmax를 통해 확률 분포로 변환된 후, Value 벡터(V)와 결합되어 최종 출력이 됩니다.
2. Self-Attention 계산 예제
간단한 예제를 통해 Self-Attention이 어떻게 계산되는지 차근차근 살펴보겠습니다.
2.1. 입력 단어 벡터 (Embeddings)
문장이 다음과 같다고 가정합니다.
문장: "The cat sat"
각 단어를 3차원 벡터로 표현한다고 가정하면, 임베딩 벡터는 다음과 같습니다.
XThe=[1,0,1],XCat=[0,1,1],XSat=[1,1,0]
2.2. Query, Key, Value 행렬 생성
각 단어 벡터 X 에 대해 Query (Q), Key (K), Value (V) 행렬을 생성해야 합니다.
이를 위해 학습된 가중치 행렬 WQ,WK,WV 를 곱합니다.
가중치 행렬 예제
WQ=⎣⎢⎡10101−1−110⎦⎥⎤,WK=⎣⎢⎡101−11001−1⎦⎥⎤,WV=⎣⎢⎡101011110⎦⎥⎤
각 단어 벡터에 이 행렬을 곱해서 Q,K,V 를 구합니다.
QThe=[1,0,1]×WQ=[2,−1,−1]
QCat=[0,1,1]×WQ=[1,0,1]
QSat=[1,1,0]×WQ=[1,1,0]
KThe=[1,0,1]×WK=[2,−1,−1]
KCat=[0,1,1]×WK=[1,1,0]
KSat=[1,1,0]×WK=[1,0,1]
VThe=[1,0,1]×WV=[2,1,1]
VCat=[0,1,1]×WV=[1,2,1]
VSat=[1,1,0]×WV=[1,1,1]
2.3. Query와 Key의 내적을 이용한 Attention Score 계산
Attention Score는 Query와 Key의 내적(dot product) 으로 계산됩니다.
scoreij=Qi⋅KjT
예를 들어, "The"에 대한 Attention Score를 구해보겠습니다.
scoreThe,The=QThe⋅KTheT=6
scoreThe,Cat=QThe⋅KCatT=1
scoreThe,Sat=QThe⋅KSatT=1
위와 같은 방식으로 나머지도 계산하면 Attention Score 행렬 S 은 다음과 같습니다.
S=⎣⎢⎡611121112⎦⎥⎤
2.4. Softmax를 적용하여 Attention Weight 계산
각 단어에 대해 Softmax를 적용하여 가중치(Attention Weight, αij) 를 계산합니다.
αij=∑kexp(scoreik)exp(scoreij)
예를 들어, "The" 단어의 가중치는:
αThe,The≈0.88,αThe,Cat≈0.059,αThe,Sat≈0.059
비슷한 방식으로 계산하면 Attention Weight 행렬 A 는 다음과 같습니다.
A=⎣⎢⎡0.880.320.320.0590.320.320.0590.320.32⎦⎥⎤
2.5. Attention Weight를 이용한 Value의 가중평균
outputi=j∑αijVj
예를 들어 "The" 단어의 Attention Output을 구하면:
outputThe=[1.878,1.057,1.0]
비슷한 방식으로 계산하면 최종 출력 행렬은 다음과 같습니다.
Output=⎣⎢⎡1.8781.321.321.0571.321.321.01.321.32⎦⎥⎤
정리
- Query-Key의 내적으로 Attention Score를 계산
- Softmax를 적용하여 Attention Weight를 구함
- Attention Weight를 사용해 Value 벡터의 가중평균을 계산하여 최종 Attention Output을 얻음
이를 통해 각 단어들이 문맥 내에서 서로 다른 중요도를 가지도록 학습할 수 있습니다.
3. Attention이란?
Attention은 입력 데이터(예: 단어, 이미지 패치 등)에서 중요한 부분을 선택하여 집중하는 메커니즘입니다.
Transformer 모델에서 각 단어(또는 토큰)가 문장에서 다른 단어들과 얼마나 중요한 관계를 가지는지 학습하는 과정을 의미합니다.
예를 들어, 문장이 "The cat sat" 이라면,
- "cat"은 "sat"과 밀접한 관련이 있음
- "The"는 문법적으로 중요한 단어이지만 "sat"과는 관계가 약함
이처럼 각 단어가 문장에서 어떤 단어에 집중해야 하는지(즉, 중요도를 결정) 하기 위해 Attention Mechanism이 사용됩니다.
4. Attention을 왜 구해야 할까?
4.1 문맥 정보 반영
각 단어가 문장에서 어떤 단어들과 중요한 관계를 맺고 있는지를 반영하기 위해 사용됩니다.
예를 들어, 번역 모델에서 "He went to the bank"라는 문장에서 "bank"가
"강가"인지 "은행"인지 결정하려면 앞뒤 단어들과의 관계를 고려해야 합니다.
4.2 장거리 의존성(Long-range Dependency)
RNN이나 LSTM과 달리, Attention은 멀리 떨어진 단어들 간의 관계도 쉽게 포착할 수 있습니다.
예를 들어,
"The boy who lived in the old house was very happy"
에서 "boy"와 "happy"는 멀리 떨어져 있지만 서로 강한 관련이 있을 수 있습니다.
4.3 병렬 연산 가능
- RNN/LSTM과 달리, Self-Attention은 병렬 연산이 가능하여 속도가 빠름
5. 위에서 구한 Attention Output을 어떻게 해석할까?
5.1. Output 행렬을 다시 보자
Attention을 거친 최종 Output 행렬은 다음과 같습니다:
Output=⎣⎢⎡1.8781.321.321.0571.321.321.01.321.32⎦⎥⎤
각 행은 하나의 단어에 대한 Attention 결과를 나타냅니다.
행 벡터가 의미하는 것은 각 단어가 문맥에서 조정된 새로운 표현(임베딩) 입니다.
5.2. 첫 번째 단어 "The"의 Output 해석
"The"의 Attention Output:
[1.878,1.057,1.0]
- "The"는 원래 [1,0,1] 이었지만, Attention을 적용한 후 다른 단어들의 정보가 반영된 새로운 벡터가 됨
- 1.878 → "The"가 원래 [1,0,1]일 때보다 강조되었음을 의미
- 즉, "The"의 새로운 표현은 "Cat"과 "Sat"과의 관계를 반영한 벡터로 조정됨
5.3. "Cat"과 "Sat"의 Output 해석
"Cat"과 "Sat"의 Attention Output:
[1.32,1.32,1.32]
- "Cat"과 "Sat"은 원래 [0,1,1], [1,1,0] 이었지만, Attention 이후 거의 동일한 값을 갖게 됨
- 이는 "Cat"과 "Sat"이 문맥 내에서 비슷한 중요도를 가지도록 조정되었음을 의미
6. 요약 및 핵심 포인트
6.1 Attention이란?
입력 데이터에서 중요한 요소를 학습하여, 특정 요소에 더 집중하도록 가중치를 주는 메커니즘
6.2 왜 필요한가?
- 문맥 정보를 반영하여 중요한 단어를 강조
- 멀리 떨어진 단어들 간의 관계를 잘 포착
- 병렬 연산이 가능하여 속도가 빠름
6.3 Output 해석
- Attention Output은 Value 벡터의 가중평균
- 각 단어의 벡터가 문맥 정보를 반영하여 새로운 표현(embedding) 으로 변환됨
- "Cat"과 "Sat"은 문장에서 비슷한 중요도를 가지도록 조정됨
- "The"는 상대적으로 문장에서 덜 중요한 역할을 하므로 변환이 다르게 이루어짐
이처럼 Attention은 입력 데이터를 문맥에 맞게 변환하여
더 의미 있는 표현을 학습할 수 있도록 도와줍니다!