In Korea, there is a tradition of “study” groups where engineers from various companies or backgrounds gather to explore specific engineering concepts. Participants typically select a book or an online curriculum to follow, and each week, one member is responsible for studying a chapter in depth and presenting the ideas to the group. I recently joined a study group focused on understanding how Large Language Models (LLMs) function. Last week, I was tasked with presenting the concepts of Attention and Transformers within LLMs. While I am familiar with these concepts, explaining them to others proved to be a distinct challenge compared to understanding them on my own. Here is my perspective on explaining how the Attension Score is calculated
Attention Score란?
Attention Score는 모델이 입력 데이터의 특정 부분에 더 집중하도록 가중치를 부여하는 방식이다. Attention Score는 주어진 Query와 Key의 관계를 수치화하여 계산되며, 이 값이 클수록 해당 Key가 Query와 더 밀접한 연관성을 가진다고 본다.
Query(Q), Key(K), Value(V) 도출 과정
Attention 메커니즘에서 Q(Query), K(Key), V(Value)는 입력 데이터에서 선형 변환(Linear Transformation)을 통해 얻어지는 벡터이다. Transformer 모델에서 입력은 보통 단어 임베딩(embedding)이나 그 변형된 형태로 표현되며, 이 벡터들이 Q Q Q , K K K , V V V 로 매핑된다.
예를들면 “어제 밤에 배가 고파서 치킨을 시켜서 먹었다”라는 문장에서, “배”라는 단어가
과일 배
사람의 배
이동수단 배
중에 어떤 것을 뜻하는지 결정하려면 Attention Score 를 활용하여 문맥 정보를 기반으로 “배”와 관련된 단어들 간의 관계를 학습할 수 있다.
1. 입력 데이터 준비
문장을 단어 단위로 분리하고 각 단어를 임베딩 벡터로 변환한다.
예를 들어, 각 단어가 4차원 벡터로 표현된다고 하자:
“어제” → [0.1, 0.2, 0.1, 0.3]
“밤에” → [0.0, 0.1, 0.2, 0.4]
“배” → [0.5, 0.3, 0.2, 0.1]
“가” → [0.1, 0.1, 0.1, 0.2]
“고파서” → [0.2, 0.3, 0.1, 0.0]
“치킨을” → [0.4, 0.0, 0.3, 0.2]
“시켜서” → [0.3, 0.1, 0.4, 0.1]
“먹었다” → [0.5, 0.2, 0.0, 0.1]
X \mathbf{X} X 는 다음과 같다:
X = [ 0.1 0.2 0.1 0.3 0.0 0.1 0.2 0.4 0.5 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.0 0.4 0.0 0.3 0.2 0.3 0.1 0.4 0.1 0.5 0.2 0.0 0.1 ] \mathbf{X} =
\begin{bmatrix}
0.1 & 0.2 & 0.1 & 0.3 \\ % 어제
0.0 & 0.1 & 0.2 & 0.4 \\ % 밤에
0.5 & 0.3 & 0.2 & 0.1 \\ % 배
0.1 & 0.1 & 0.1 & 0.2 \\ % 가
0.2 & 0.3 & 0.1 & 0.0 \\ % 고파서
0.4 & 0.0 & 0.3 & 0.2 \\ % 치킨을
0.3 & 0.1 & 0.4 & 0.1 \\ % 시켜서
0.5 & 0.2 & 0.0 & 0.1 % 먹었다
\end{bmatrix} X = 0.1 0.0 0.5 0.1 0.2 0.4 0.3 0.5 0.2 0.1 0.3 0.1 0.3 0.0 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.3 0.4 0.0 0.3 0.4 0.1 0.2 0.0 0.2 0.1 0.1
2. Q, K 계산
X \mathbf{X} X 를 Query(Q), Key(K) 로 변환하기 위해 학습 가능한 가중치 행렬(Weight Matrix) W Q , W K W_Q, W_K W Q , W K 를 사용한다.
편의상 Weight Matrix는 아래와 같이 정의한다.
W Q = [ 0.5 0.1 0.2 0.2 0.2 0.3 0.1 0.4 0.1 0.5 0.3 0.1 0.3 0.1 0.4 0.2 ] , W K = [ 0.4 0.2 0.1 0.3 0.1 0.3 0.2 0.5 0.2 0.4 0.5 0.1 0.3 0.2 0.1 0.4 ] \mathbf{W}_Q =
\begin{bmatrix}
0.5 & 0.1 & 0.2 & 0.2 \\
0.2 & 0.3 & 0.1 & 0.4 \\
0.1 & 0.5 & 0.3 & 0.1 \\
0.3 & 0.1 & 0.4 & 0.2
\end{bmatrix}, \quad
\mathbf{W}_K =
\begin{bmatrix}
0.4 & 0.2 & 0.1 & 0.3 \\
0.1 & 0.3 & 0.2 & 0.5 \\
0.2 & 0.4 & 0.5 & 0.1 \\
0.3 & 0.2 & 0.1 & 0.4
\end{bmatrix} W Q = 0.5 0.2 0.1 0.3 0.1 0.3 0.5 0.1 0.2 0.1 0.3 0.4 0.2 0.4 0.1 0.2 , W K = 0.4 0.1 0.2 0.3 0.2 0.3 0.4 0.2 0.1 0.2 0.5 0.1 0.3 0.5 0.1 0.4
각 행렬 곱 연산을 통해 Q, K를 얻는다.
Q = X W Q , K = X W K \mathbf{Q} = \mathbf{X} \mathbf{W}_Q, \quad \mathbf{K} = \mathbf{X} \mathbf{W}_K Q = X W Q , K = X W K
Q = [ 0.1 0.2 0.1 0.3 0.0 0.1 0.2 0.4 0.5 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.0 0.4 0.0 0.3 0.2 0.3 0.1 0.4 0.1 0.5 0.2 0.0 0.1 ] [ 0.5 0.1 0.2 0.2 0.2 0.3 0.1 0.4 0.1 0.5 0.3 0.1 0.3 0.1 0.4 0.2 ] = [ 0.17 0.24 0.17 0.22 0.17 0.28 0.23 0.20 0.36 0.27 0.26 0.25 0.11 0.15 0.13 0.14 0.16 0.18 0.12 0.16 0.28 0.16 0.26 0.24 0.31 0.18 0.27 0.25 0.32 0.19 0.20 0.22 ] \mathbf{Q} =
\begin{bmatrix}
0.1 & 0.2 & 0.1 & 0.3 \\
0.0 & 0.1 & 0.2 & 0.4 \\
0.5 & 0.3 & 0.2 & 0.1 \\
0.1 & 0.1 & 0.1 & 0.2 \\
0.2 & 0.3 & 0.1 & 0.0 \\
0.4 & 0.0 & 0.3 & 0.2 \\
0.3 & 0.1 & 0.4 & 0.1 \\
0.5 & 0.2 & 0.0 & 0.1
\end{bmatrix}
\begin{bmatrix}
0.5 & 0.1 & 0.2 & 0.2 \\
0.2 & 0.3 & 0.1 & 0.4 \\
0.1 & 0.5 & 0.3 & 0.1 \\
0.3 & 0.1 & 0.4 & 0.2
\end{bmatrix}
=
\begin{bmatrix}
0.17 & 0.24 & 0.17 & 0.22 \\
0.17 & 0.28 & 0.23 & 0.20 \\
0.36 & 0.27 & 0.26 & 0.25 \\
0.11 & 0.15 & 0.13 & 0.14 \\
0.16 & 0.18 & 0.12 & 0.16 \\
0.28 & 0.16 & 0.26 & 0.24 \\
0.31 & 0.18 & 0.27 & 0.25 \\
0.32 & 0.19 & 0.20 & 0.22
\end{bmatrix} Q = 0.1 0.0 0.5 0.1 0.2 0.4 0.3 0.5 0.2 0.1 0.3 0.1 0.3 0.0 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.3 0.4 0.0 0.3 0.4 0.1 0.2 0.0 0.2 0.1 0.1 0.5 0.2 0.1 0.3 0.1 0.3 0.5 0.1 0.2 0.1 0.3 0.4 0.2 0.4 0.1 0.2 = 0.17 0.17 0.36 0.11 0.16 0.28 0.31 0.32 0.24 0.28 0.27 0.15 0.18 0.16 0.18 0.19 0.17 0.23 0.26 0.13 0.12 0.26 0.27 0.20 0.22 0.20 0.25 0.14 0.16 0.24 0.25 0.22
K = [ 0.1 0.2 0.1 0.3 0.0 0.1 0.2 0.4 0.5 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.0 0.4 0.0 0.3 0.2 0.3 0.1 0.4 0.1 0.5 0.2 0.0 0.1 ] [ 0.4 0.2 0.1 0.3 0.1 0.3 0.2 0.5 0.2 0.4 0.5 0.1 0.3 0.2 0.1 0.4 ] = [ 0.15 0.22 0.20 0.28 0.18 0.30 0.28 0.32 0.33 0.31 0.27 0.30 0.10 0.15 0.13 0.18 0.14 0.20 0.16 0.19 0.28 0.18 0.23 0.26 0.27 0.24 0.25 0.27 0.26 0.24 0.20 0.24 ] \mathbf{K} =
\begin{bmatrix}
0.1 & 0.2 & 0.1 & 0.3 \\
0.0 & 0.1 & 0.2 & 0.4 \\
0.5 & 0.3 & 0.2 & 0.1 \\
0.1 & 0.1 & 0.1 & 0.2 \\
0.2 & 0.3 & 0.1 & 0.0 \\
0.4 & 0.0 & 0.3 & 0.2 \\
0.3 & 0.1 & 0.4 & 0.1 \\
0.5 & 0.2 & 0.0 & 0.1
\end{bmatrix}
\begin{bmatrix}
0.4 & 0.2 & 0.1 & 0.3 \\
0.1 & 0.3 & 0.2 & 0.5 \\
0.2 & 0.4 & 0.5 & 0.1 \\
0.3 & 0.2 & 0.1 & 0.4
\end{bmatrix}
=
\begin{bmatrix}
0.15 & 0.22 & 0.20 & 0.28 \\
0.18 & 0.30 & 0.28 & 0.32 \\
0.33 & 0.31 & 0.27 & 0.30 \\
0.10 & 0.15 & 0.13 & 0.18 \\
0.14 & 0.20 & 0.16 & 0.19 \\
0.28 & 0.18 & 0.23 & 0.26 \\
0.27 & 0.24 & 0.25 & 0.27 \\
0.26 & 0.24 & 0.20 & 0.24
\end{bmatrix} K = 0.1 0.0 0.5 0.1 0.2 0.4 0.3 0.5 0.2 0.1 0.3 0.1 0.3 0.0 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.3 0.4 0.0 0.3 0.4 0.1 0.2 0.0 0.2 0.1 0.1 0.4 0.1 0.2 0.3 0.2 0.3 0.4 0.2 0.1 0.2 0.5 0.1 0.3 0.5 0.1 0.4 = 0.15 0.18 0.33 0.10 0.14 0.28 0.27 0.26 0.22 0.30 0.31 0.15 0.20 0.18 0.24 0.24 0.20 0.28 0.27 0.13 0.16 0.23 0.25 0.20 0.28 0.32 0.30 0.18 0.19 0.26 0.27 0.24
3. Attention Score 계산
“배”의 의미를 결정하기 위해, “배”의 Query ( Q 배 ) (Q_{\text{배}}) ( Q 배 ) 와 모든 단어의 Key ( K 모든 단어 ) (K_{\text{모든 단어}}) ( K 모든 단어 ) 를 비교하여 Attention Score
를 계산한다. Attention에서 Query(Q) 는 단어가 “묻고” 있거나 찾고 있는 것을 나타내고, Key(K) 는 각 단어가 제공하는 특징이나 문맥을 나타낸다. 따라서 아래와 같이 표현할 수 있다
Query ( Q 배 ) (Q_\text{배}) ( Q 배 ) : “문맥적으로 나와 관련된 단어를 찾아보자.”
Key ( K 밤에 ) (K_\text{밤에}) ( K 밤에 ) : “나는 시간적 정보를 제공하는 단어야.”
Key ( K 치킨 ) (K_\text{치킨}) ( K 치킨 ) : “나는 음식과 관련된 단어야.”
Attention Score
는 아래 공식을 통해 계산된다.
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention ( Q , K , V ) = softmax ( d k Q K T ) V
d k = 4 d_k = 4 d k = 4 이기 때문에 d k = 2 \sqrt{d_k} = 2 d k = 2 가 된다.
먼저 Q K T \mathbf{Q} \mathbf{K}^T Q K T 를 계산하면:
Q K T = [ 0.17 0.24 0.17 0.22 0.17 0.28 0.23 0.20 0.36 0.27 0.26 0.25 0.11 0.15 0.13 0.14 0.16 0.18 0.12 0.16 0.28 0.16 0.26 0.24 0.31 0.18 0.27 0.25 0.32 0.19 0.20 0.22 ] [ 0.15 0.18 0.33 0.10 0.14 0.28 0.27 0.26 0.22 0.30 0.31 0.15 0.20 0.18 0.24 0.24 0.20 0.28 0.27 0.13 0.16 0.23 0.25 0.20 0.28 0.32 0.30 0.18 0.19 0.26 0.27 0.24 ] \mathbf{Q} \mathbf{K}^T =
\begin{bmatrix}
0.17 & 0.24 & 0.17 & 0.22 \\
0.17 & 0.28 & 0.23 & 0.20 \\
0.36 & 0.27 & 0.26 & 0.25 \\
0.11 & 0.15 & 0.13 & 0.14 \\
0.16 & 0.18 & 0.12 & 0.16 \\
0.28 & 0.16 & 0.26 & 0.24 \\
0.31 & 0.18 & 0.27 & 0.25 \\
0.32 & 0.19 & 0.20 & 0.22
\end{bmatrix}
\begin{bmatrix}
0.15 & 0.18 & 0.33 & 0.10 & 0.14 & 0.28 & 0.27 & 0.26 \\
0.22 & 0.30 & 0.31 & 0.15 & 0.20 & 0.18 & 0.24 & 0.24 \\
0.20 & 0.28 & 0.27 & 0.13 & 0.16 & 0.23 & 0.25 & 0.20 \\
0.28 & 0.32 & 0.30 & 0.18 & 0.19 & 0.26 & 0.27 & 0.24
\end{bmatrix} Q K T = 0.17 0.17 0.36 0.11 0.16 0.28 0.31 0.32 0.24 0.28 0.27 0.15 0.18 0.16 0.18 0.19 0.17 0.23 0.26 0.13 0.12 0.26 0.27 0.20 0.22 0.20 0.25 0.14 0.16 0.24 0.25 0.22 0.15 0.22 0.20 0.28 0.18 0.30 0.28 0.32 0.33 0.31 0.27 0.30 0.10 0.15 0.13 0.18 0.14 0.20 0.16 0.19 0.28 0.18 0.23 0.26 0.27 0.24 0.25 0.27 0.26 0.24 0.20 0.24
Q K T = [ 0.156 0.212 0.199 0.119 0.158 0.211 0.229 0.217 0.170 0.236 0.220 0.131 0.175 0.233 0.248 0.230 0.274 0.374 0.342 0.204 0.266 0.352 0.375 0.340 0.114 0.154 0.143 0.085 0.110 0.147 0.158 0.144 0.131 0.174 0.159 0.095 0.126 0.166 0.176 0.159 0.239 0.315 0.288 0.173 0.227 0.302 0.321 0.293 0.264 0.346 0.316 0.189 0.249 0.328 0.349 0.319 0.258 0.339 0.311 0.186 0.243 0.320 0.340 0.313 ] \mathbf{Q} \mathbf{K}^T =
\begin{bmatrix}
0.156 & 0.212 & 0.199 & 0.119 & 0.158 & 0.211 & 0.229 & 0.217 \\
0.170 & 0.236 & 0.220 & 0.131 & 0.175 & 0.233 & 0.248 & 0.230 \\
0.274 & 0.374 & 0.342 & 0.204 & 0.266 & 0.352 & 0.375 & 0.340 \\
0.114 & 0.154 & 0.143 & 0.085 & 0.110 & 0.147 & 0.158 & 0.144 \\
0.131 & 0.174 & 0.159 & 0.095 & 0.126 & 0.166 & 0.176 & 0.159 \\
0.239 & 0.315 & 0.288 & 0.173 & 0.227 & 0.302 & 0.321 & 0.293 \\
0.264 & 0.346 & 0.316 & 0.189 & 0.249 & 0.328 & 0.349 & 0.319 \\
0.258 & 0.339 & 0.311 & 0.186 & 0.243 & 0.320 & 0.340 & 0.313
\end{bmatrix} Q K T = 0.156 0.170 0.274 0.114 0.131 0.239 0.264 0.258 0.212 0.236 0.374 0.154 0.174 0.315 0.346 0.339 0.199 0.220 0.342 0.143 0.159 0.288 0.316 0.311 0.119 0.131 0.204 0.085 0.095 0.173 0.189 0.186 0.158 0.175 0.266 0.110 0.126 0.227 0.249 0.243 0.211 0.233 0.352 0.147 0.166 0.302 0.328 0.320 0.229 0.248 0.375 0.158 0.176 0.321 0.349 0.340 0.217 0.230 0.340 0.144 0.159 0.293 0.319 0.313
스케일링을 위해 d k = 2 \sqrt{d_k} = 2 d k = 2 로 나누면
Q K T scaled = [ 0.078 0.106 0.100 0.060 0.079 0.106 0.115 0.109 0.085 0.118 0.110 0.065 0.087 0.117 0.124 0.115 0.137 0.187 0.171 0.102 0.133 0.176 0.188 0.170 0.057 0.077 0.071 0.043 0.055 0.074 0.079 0.072 0.065 0.087 0.080 0.048 0.063 0.083 0.088 0.080 0.120 0.158 0.144 0.087 0.114 0.151 0.160 0.146 0.132 0.173 0.158 0.095 0.125 0.164 0.175 0.160 0.129 0.170 0.156 0.093 0.121 0.160 0.170 0.157 ] \mathbf{QK^T}_{\text{scaled}} =
\begin{bmatrix}
0.078 & 0.106 & 0.100 & 0.060 & 0.079 & 0.106 & 0.115 & 0.109 \\
0.085 & 0.118 & 0.110 & 0.065 & 0.087 & 0.117 & 0.124 & 0.115 \\
0.137 & 0.187 & 0.171 & 0.102 & 0.133 & 0.176 & 0.188 & 0.170 \\
0.057 & 0.077 & 0.071 & 0.043 & 0.055 & 0.074 & 0.079 & 0.072 \\
0.065 & 0.087 & 0.080 & 0.048 & 0.063 & 0.083 & 0.088 & 0.080 \\
0.120 & 0.158 & 0.144 & 0.087 & 0.114 & 0.151 & 0.160 & 0.146 \\
0.132 & 0.173 & 0.158 & 0.095 & 0.125 & 0.164 & 0.175 & 0.160 \\
0.129 & 0.170 & 0.156 & 0.093 & 0.121 & 0.160 & 0.170 & 0.157
\end{bmatrix} Q K T scaled = 0.078 0.085 0.137 0.057 0.065 0.120 0.132 0.129 0.106 0.118 0.187 0.077 0.087 0.158 0.173 0.170 0.100 0.110 0.171 0.071 0.080 0.144 0.158 0.156 0.060 0.065 0.102 0.043 0.048 0.087 0.095 0.093 0.079 0.087 0.133 0.055 0.063 0.114 0.125 0.121 0.106 0.117 0.176 0.074 0.083 0.151 0.164 0.160 0.115 0.124 0.188 0.079 0.088 0.160 0.175 0.170 0.109 0.115 0.170 0.072 0.080 0.146 0.160 0.157
위에 scaling된 Matrix를 Attention Score라고 부른다.
이제 softmax
를 적용한다. 우리는 “배”라는 단어가 무엇을 뜻하는지에 관심이 있기 때문에 3번 row를 대상으로 대표 계산을 진행하고 softmax
를 적용한다.
Softmax ( Row 3 ) = exp ( x i ) ∑ j exp ( x j ) , x i ∈ Row 3 \text{Softmax}(\text{Row 3}) = \frac{\exp(x_i)}{\sum_{j}\exp(x_j)}, \quad x_i \in \text{Row 3} Softmax ( Row 3 ) = ∑ j exp ( x j ) exp ( x i ) , x i ∈ Row 3
exp ( Row 3 ) = [ 1.147 1.205 1.187 1.108 1.143 1.193 1.207 1.186 ] \exp(\text{Row 3}) = \begin{bmatrix}
1.147 & 1.205 & 1.187 & 1.108 & 1.143 & 1.193 & 1.207 & 1.186
\end{bmatrix} exp ( Row 3 ) = [ 1.147 1.205 1.187 1.108 1.143 1.193 1.207 1.186 ]
각 항목의 합을 구하면
sum = 1.147 + 1.205 + 1.187 + 1.108 + 1.143 + 1.193 + 1.207 + 1.186 = 9.376 \text{sum} = 1.147 + 1.205 + 1.187 + 1.108 + 1.143 + 1.193 + 1.207 + 1.186 = 9.376 sum = 1.147 + 1.205 + 1.187 + 1.108 + 1.143 + 1.193 + 1.207 + 1.186 = 9.376
sum을 활용해 normalization을 적용하면,
Softmax ( Row 3 ) = [ 0.122 0.129 0.127 0.118 0.122 0.127 0.129 0.127 ] \text{Softmax}(\text{Row 3}) = \begin{bmatrix}
0.122 & 0.129 & 0.127 & 0.118 & 0.122 & 0.127 & 0.129 & 0.127
\end{bmatrix} Softmax ( Row 3 ) = [ 0.122 0.129 0.127 0.118 0.122 0.127 0.129 0.127 ]
다른 row들에도 모두 softmax를 적용하면 아래 Attention Weights가 계산된다.
A W i = [ 0.123 0.127 0.126 0.121 0.123 0.127 0.128 0.127 0.123 0.127 0.126 0.120 0.123 0.127 0.128 0.126 0.122 0.129 0.127 0.118 0.122 0.127 0.129 0.127 0.124 0.127 0.126 0.122 0.124 0.126 0.127 0.126 0.124 0.127 0.126 0.122 0.124 0.126 0.127 0.126 0.122 0.127 0.125 0.118 0.122 0.126 0.127 0.125 0.123 0.128 0.126 0.118 0.122 0.127 0.128 0.126 0.123 0.128 0.126 0.119 0.122 0.127 0.128 0.126 ] \mathbf{AW_i} =
\begin{bmatrix}
0.123 & 0.127 & 0.126 & 0.121 & 0.123 & 0.127 & 0.128 & 0.127 \\
0.123 & 0.127 & 0.126 & 0.120 & 0.123 & 0.127 & 0.128 & 0.126 \\
0.122 & 0.129 & 0.127 & 0.118 & 0.122 & 0.127 & 0.129 & 0.127 \\
0.124 & 0.127 & 0.126 & 0.122 & 0.124 & 0.126 & 0.127 & 0.126 \\
0.124 & 0.127 & 0.126 & 0.122 & 0.124 & 0.126 & 0.127 & 0.126 \\
0.122 & 0.127 & 0.125 & 0.118 & 0.122 & 0.126 & 0.127 & 0.125 \\
0.123 & 0.128 & 0.126 & 0.118 & 0.122 & 0.127 & 0.128 & 0.126 \\
0.123 & 0.128 & 0.126 & 0.119 & 0.122 &
0.127 & 0.128 & 0.126
\end{bmatrix} A W i = 0.123 0.123 0.122 0.124 0.124 0.122 0.123 0.123 0.127 0.127 0.129 0.127 0.127 0.127 0.128 0.128 0.126 0.126 0.127 0.126 0.126 0.125 0.126 0.126 0.121 0.120 0.118 0.122 0.122 0.118 0.118 0.119 0.123 0.123 0.122 0.124 0.124 0.122 0.122 0.122 0.127 0.127 0.127 0.126 0.126 0.126 0.127 0.127 0.128 0.128 0.129 0.127 0.127 0.127 0.128 0.128 0.127 0.126 0.127 0.126 0.126 0.125 0.126 0.126
4. 최종 Output 계산
Attention Weight를 Value (V)에 곱하여 최종 Output을 계산한다:
Output 배 = ∑ i Attention Weight i ⋅ V i \text{Output}_{\text{배}} = \sum_{i} \text{Attention Weight}_i \cdot V_i Output 배 = i ∑ Attention Weight i ⋅ V i
Value(V)는 각 단어가 “전달할 정보”를 담고 있는 벡터이다.
앞서 X \mathbf{X} X 와 학습된 W V W_V W V 를 사용해 V를 계산하면 다음과 같다:
W V = [ 0.3 0.1 0.2 0.4 0.1 0.4 0.3 0.2 0.4 0.2 0.1 0.3 0.2 0.3 0.4 0.1 ] \mathbf{W}_V =
\begin{bmatrix}
0.3 & 0.1 & 0.2 & 0.4 \\
0.1 & 0.4 & 0.3 & 0.2 \\
0.4 & 0.2 & 0.1 & 0.3 \\
0.2 & 0.3 & 0.4 & 0.1
\end{bmatrix} W V = 0.3 0.1 0.4 0.2 0.1 0.4 0.2 0.3 0.2 0.3 0.1 0.4 0.4 0.2 0.3 0.1
V = X W V = [ 0.1 0.2 0.1 0.3 0.0 0.1 0.2 0.4 0.5 0.3 0.2 0.1 0.1 0.1 0.1 0.2 0.2 0.3 0.1 0.0 0.4 0.0 0.3 0.2 0.3 0.1 0.4 0.1 0.5 0.2 0.0 0.1 ] [ 0.3 0.1 0.2 0.4 0.1 0.4 0.3 0.2 0.4 0.2 0.1 0.3 0.2 0.3 0.4 0.1 ] = [ 0.17 0.18 0.18 0.18 0.22 0.20 0.18 0.18 0.32 0.26 0.23 0.21 0.13 0.13 0.13 0.12 0.17 0.17 0.15 0.12 0.30 0.21 0.23 0.20 0.32 0.23 0.24 0.21 0.29 0.22 0.20 0.18 ] \mathbf{V} = \mathbf{X} \mathbf{W}_V
= \begin{bmatrix}
0.1 & 0.2 & 0.1 & 0.3 \\
0.0 & 0.1 & 0.2 & 0.4 \\
0.5 & 0.3 & 0.2 & 0.1 \\
0.1 & 0.1 & 0.1 & 0.2 \\
0.2 & 0.3 & 0.1 & 0.0 \\
0.4 & 0.0 & 0.3 & 0.2 \\
0.3 & 0.1 & 0.4 & 0.1 \\
0.5 & 0.2 & 0.0 & 0.1
\end{bmatrix}
\begin{bmatrix}
0.3 & 0.1 & 0.2 & 0.4 \\
0.1 & 0.4 & 0.3 & 0.2 \\
0.4 & 0.2 & 0.1 & 0.3 \\
0.2 & 0.3 & 0.4 & 0.1
\end{bmatrix}
=
\begin{bmatrix}
0.17 & 0.18 & 0.18 & 0.18 \\
0.22 & 0.20 & 0.18 & 0.18 \\
0.32 & 0.26 & 0.23 & 0.21 \\
0.13 & 0.13 & 0.13 & 0.12 \\
0.17 & 0.17 & 0.15 & 0.12 \\
0.30 & 0.21 & 0.23 & 0.20 \\
0.32 & 0.23 & 0.24 & 0.21 \\
0.29 & 0.22 & 0.20 & 0.18
\end{bmatrix} V = X W V = 0.1 0.0 0.5 0.1 0.2 0.4 0.3 0.5 0.2 0.1 0.3 0.1 0.3 0.0 0.1 0.2 0.1 0.2 0.2 0.1 0.1 0.3 0.4 0.0 0.3 0.4 0.1 0.2 0.0 0.2 0.1 0.1 0.3 0.1 0.4 0.2 0.1 0.4 0.2 0.3 0.2 0.3 0.1 0.4 0.4 0.2 0.3 0.1 = 0.17 0.22 0.32 0.13 0.17 0.30 0.32 0.29 0.18 0.20 0.26 0.13 0.17 0.21 0.23 0.22 0.18 0.18 0.23 0.13 0.15 0.23 0.24 0.20 0.18 0.18 0.21 0.12 0.12 0.20 0.21 0.18
이제 “배”에 대한 Attention Output을 계산한다
A Row 3 × V = [ 0.122 , 0.129 , 0.127 , 0.118 , 0.122 , 0.127 , 0.129 , 0.127 ] × [ 0.17 0.18 0.18 0.18 0.22 0.20 0.18 0.18 0.32 0.26 0.23 0.21 0.13 0.13 0.13 0.12 0.17 0.17 0.15 0.12 0.30 0.21 0.23 0.20 0.32 0.23 0.24 0.21 0.29 0.22 0.20 0.18 ] = \mathbf{A}_{\text{Row 3}} \times \mathbf{V} =
[0.122, 0.129, 0.127, 0.118, 0.122, 0.127, 0.129, 0.127] \times
\begin{bmatrix}
0.17 & 0.18 & 0.18 & 0.18 \\
0.22 & 0.20 & 0.18 & 0.18 \\
0.32 & 0.26 & 0.23 & 0.21 \\
0.13 & 0.13 & 0.13 & 0.12 \\
0.17 & 0.17 & 0.15 & 0.12 \\
0.30 & 0.21 & 0.23 & 0.20 \\
0.32 & 0.23 & 0.24 & 0.21 \\
0.29 & 0.22 & 0.20 & 0.18
\end{bmatrix} = A Row 3 × V = [ 0.122 , 0.129 , 0.127 , 0.118 , 0.122 , 0.127 , 0.129 , 0.127 ] × 0.17 0.22 0.32 0.13 0.17 0.30 0.32 0.29 0.18 0.20 0.26 0.13 0.17 0.21 0.23 0.22 0.18 0.18 0.23 0.13 0.15 0.23 0.24 0.20 0.18 0.18 0.21 0.12 0.12 0.20 0.21 0.18 =
A Row 3 × V = [ 0.275 , 0.222 , 0.206 , 0.183 ] \mathbf{A}_{\text{Row 3}} \times \mathbf{V} =
[0.275, 0.222, 0.206, 0.183] A Row 3 × V = [ 0.275 , 0.222 , 0.206 , 0.183 ]
전체 row에 대해 계산하면 아래와 같은 Attention Output 결과를 볼 수 있다
Attention Output = [ 0.267 0.219 0.204 0.181 0.267 0.219 0.204 0.181 0.275 0.222 0.206 0.183 0.263 0.218 0.203 0.180 0.263 0.218 0.203 0.180 0.270 0.221 0.205 0.182 0.272 0.221 0.205 0.182 0.271 0.220 0.204 0.181 ] \text{Attention Output} =
\begin{bmatrix}
0.267 & 0.219 & 0.204 & 0.181 \\
0.267 & 0.219 & 0.204 & 0.181 \\
0.275 & 0.222 & 0.206 & 0.183 \\
0.263 & 0.218 & 0.203 & 0.180 \\
0.263 & 0.218 & 0.203 & 0.180 \\
0.270 & 0.221 & 0.205 & 0.182 \\
0.272 & 0.221 & 0.205 & 0.182 \\
0.271 & 0.220 & 0.204 & 0.181
\end{bmatrix} Attention Output = 0.267 0.267 0.275 0.263 0.263 0.270 0.272 0.271 0.219 0.219 0.222 0.218 0.218 0.221 0.221 0.220 0.204 0.204 0.206 0.203 0.203 0.205 0.205 0.204 0.181 0.181 0.183 0.180 0.180 0.182 0.182 0.181
5. Attention Score를 통한 의미 결정
최종 Output [0.73, 0.32]는 “배”가 문맥에서 가장 중요한 단어인 “고파서”와 강하게 연결된 정보를 반영한다. Output이 “배”가 “고파서”와 가장 강하게 연결됐다는 Attention Score를 활용해서 계산된 결과이기 때문이다
이 Output은 다음과 같은 역할을 한다:
문맥적 의미 제공 : “배”가 “고파서”와 연관되어 “사람의 배”로 해석될 가능성이 높다는 문맥적 정보를 포함한다.
후속 레이어 활용 : Transformer의 다음 레이어는 이 정보를 개반으로 “배”의 문맥적 역할을 더 정교하게 학습한다.
최종 작업에 반영 : 번역, 요약, 질문응답 등 NLP 작업에서 “배”의 문맥적 의미가 정확히 반영되도록 지원한다.
최종 Output 벡터는 Transformer의 후속 레이어에서 사용되며, 다음과 같은 방식으로 “배”의 의미를 결정한다:
문맥 기반 표현 학습 : Output 벡터는 “배”가 다른 단어와의 문맥적 관계를 학습한 결과다.
“배”와 “고파서”, “치킨”의 관계 → “사람의 배”일 가능성이 높음.
“배”와 “밤에”, “치킨”의 관계 → “과일 배”일 가능성.
“배”와 “밤에”의 관계 → 높진 않지만 “이동수단 배”일 가능성.
다음 작업 수행 :
질문 답변(Task): “배”가 무엇인지 명확히 설명.
번역(Task): “배”를 상황에 따라 다른 언어로 번역.
이제 Attention Score가 어떻게 계산되는지 이해했으니, 이를 기반으로 Transformer 모델이 어떻게 학습되는지 알아보도록 하겠다.