모바일 앱 환경에서는 latex 수식이 깨져 나타나므로 가급적 웹 환경에서 봐주시길 바랍니다.
오늘부터 두 번에 걸쳐 Transformer에 대해서 이야기를 하고자 한다.
현재 Transformer는 다양한 분야에서 딥러닝 모델의 backbone 역할을 하고 있으며, 가장 많이 사용되는 architecture 중 하나이다. 이 모델의 시작은 NLP에서 '기계 번역' 쪽이었으며 현재는 NLP 뿐만이 아니라 비전, 그래프, 생성 등 딥러닝의 전반적인 영역에 걸쳐서 사용되어지고 있다.
Transformer를 처음 발표한 논문은 'Attention is all you need' (Neurips 2017) 논문이었고 이 논문의 제목에서 알 수 있듯이 'Attention'이라고 하는 메커니즘에 기반한 모델이다.
여기서 Attention은 이전의 RNN 계열에서 사용되던 순환/재귀 방식을 대체한 연산을 의미하는데 이에 대해 먼저 알아보도록 하자.
다음과 같은 문장이 있다고 해보자.
"강아지가 책상 위에 있는 음식을 먹었는데 그가 그것을 먹은 이유는 배고팠기 때문이다."
여기서 "그"가 의미하는 것은 "강아지"이고, "그것'"이 의미하는 것은 "음식"이란 사실은 우리 인간은 쉽게 알 수 있다.
하지만 신경망 모델은 이것을 알 수 없고 이 단어 사이의 대응 관계 또한 신경망은 '학습'해야만 한다.
"그것"이 가리키는 것이 강아지인지, 책상인지, 음식인지를 모델은 학습해야만 한다.
위 문장이 신경망에 입력으로 들어가면 기존의 RNN 모델은 차례대로 '강아지'에 대한 표현을 학습하고, '강아지'에 대한 표현을 기반으로 하여, '책상'에 대한 표현을 추가적으로 학습하고, 다시 '강아지가', '책상'에 대한 표현을 기반으로 하여 '위에'라는 표현을 추가적으로 학습해나갈 것이다.
모델이 '그것'이라는 단어 (토큰)의 표현을 학습하기 위해서 모델은 앞에 있는 '강아지가'부터 시작하여 '그가'까지의 모든 단어들의 표현과 '그것'이라는 단어의 표현을 연결짓는다.
학습이 제대로 이뤄지게 된다면, '그것'이라는 단어와 '음식'이라는 단어의 연결이 가장 강할 것이고 모델은 '그것'이 의미하는 단어가 '음식'이라는 것을 제대로 학습하게 될 것이다.
이것이 바로 Attention의 기본적인 직관이다.
즉, 단어들이 서로 연결되어져 있는데 특정 단어와의 연결은 강하게 하고, 다른 단어들과의 연결은 약화하여 단어의 의미/표현을 학습하는 방식, 이것이 Attention이다.
자, 그러면 구체적으로 이것이 어떻게 이뤄질까?
우선 입력 문장에 대한 각 단어들의 임베딩 벡터를 추출한다. 여기서 임베딩 벡터는 각 단어의 표현을 나타내는 벡터로서, 지난 Word2Vec 글에서 이에 대해 다루었다.
https://kyteris0624.tistory.com/53
Deep dive into Deep learning part 21 : RNN (2)
모바일 앱 환경에서는 latex 수식이 깨져 나타나므로 가급적 웹 환경에서 봐주시길 바랍니다. 오늘은 본격적으로 RNN에 들어가보도록 하자. 우선 이를 위해 워드 임베딩과 가장 대표적인 모델인 Wo
kyteris0624.tistory.com
그러면 각각 단어들의 벡터를 행 벡터 (Row vector)로 하는 임베딩 행렬을 만들 수 있다.
만약, 임베딩 벡터의 차원이 $\mathbb{R}^{100}$이라면, 위 문장은 단어가 $12$개 있으므로 ('조사'는 무시하자) 임베딩 행렬의 크기는 $\mathbb{R}^{12 \times 100}$이 될 것이다.
이 임베딩 행렬로부터 이제 Query 행렬 (Q), Key 행렬 (K), Value 행렬 (V)을 만들어낸다.
이 세 가지 행렬들이 Attention mechanism에 사용된다.
이 행렬들을 어떻게 만들까? 방법 자체는 간단하다. $3$개의 가중치 행렬 $W_q, W_k, W_v$를 사용해서 각각의 행렬들을 만들어내고 이 가중치 행렬의 성분들은 '학습'을 통해 최적화가 진행된다.
Q, K, V 행렬의 각 행벡터가 문장의 각 단어들의 Q, K, V 벡터를 의미하고 이들의 차원은 hyperparameter로 결정된다.
예를 들어 $49$로 결정하였다면 Q, K, V 행렬의 크기는 $\mathbb{R}^{12 \times 49}$인 것이다.
그러면 이 $3$개의 행렬들로 어떻게 Attention 연산이 이뤄지는 것일까?
앞선 문장에서 '그것'이라고 하는 단어는 문장의 다른 단어들 중에서 '음식'과 가장 연결이 강해야 한다.
이 말을 바꿔 말하면 Attention의 값이 가장 커야 한다.
Attention 연산은 각각의 단어들을 문장의 다른 단어들과 연결하는 연산을 수행하고 그 값이 크면 의미가 연결이 되는 것이고, 그 값이 작으면 의미의 연결 강도가 약한 것이다.
Attention 연산의 순서는 다음과 같다.
$1$. 우선, Q와 K 행렬의 내적 연산 ($Q \cdot K = QK^T$)을 수행한다.
이 내적연산을 통해 우리는 각각의 단어벡터들의 유사도를 구할 수 있다. Q, K 행렬의 각 행벡터는 문장 단어들의 Q, K 벡터들이다. 즉, 내적연산을 통해 우리는 각 단어의 Q, K벡터의 유사도를 계산하고 이 값이 $QK^T$로 나오게 된다.
$QK^T$의 각 행벡터는 특정 단어와 문장 내 모든 단어들 사이의 유사도를 나타내는 벡터이다.
$2$. 위 행렬을 $K$ 차원의 제곱근으로 나눈다. 즉, $\frac{QK^T}{\sqrt{d_k}}$이다.
여기서 $d_k$는 $K$의 각 행벡터의 차원이다. 앞에서 우리는 $49$로 가정했으므로 이 값은 $7$이다.
$3$. 이제 이 값을 Softmax 함수에 집어넣는다. 즉, Softmax($\frac{QK^T}{\sqrt{d_k}}$)이다.
Softmax 함수는 함수의 값을 0~1 사이로 만들고 총합을 1로 만드는 정규화 효과를 갖고 있다.
이 결과로 나온 행렬을 우리는 Score matrix라고 하는데, 이 행렬의 각 행벡터는 문장 내 모든 단어들과의 유사도를 성분으로 가지고 있으며, 각 성분은 0~1 사이의 값을 가지고 총합은 1이다.
예를 들어, Score matrix의 1행은 단어 '강아지'가 문장 내 모든 다른 단어들과 갖는 유사도를 나타내며 1행 1열 성분이 0.9라면, 자기 자신과의 유사도가 90%, 1행 2열 성분이 0.05라면 책상과의 유사도가 5%라고 해석할 수 있다.
$4$. 마지막으로 V 행렬과 곱셈을 시행한다. 즉, Softmax($\frac{QK^T}{\sqrt{d_k}}) V$를 수행한다.
이 결과 나온 행렬을 우리는 Attention matrix라고 한다. 이를 $Z$라고 하자.
$Z$의 각 행벡터는 Value matrix의 각 행벡터들과 Score matrix의 각 행벡터 성분들을 가중치로 하는, '가중합' (Weighted sum')이다.
이를 우리는 Attention mechanism, 정확히는 Self-attention mechanism이라고 한다.
이 계산을 한 단계 확장한 걸 우리는 Multi-head Attention이라고 한다.
Multi-head는 결과로 나온 Attention matrix $Z$가 하나가 아닌 여러 개로서, 이들에 대해 concatenation 연산을 수행한다.
각각의 Attention matrix $Z_i$는 위 Self-attention을 통해서 수행되고, 이들을 모두 concatenation한 다음, 새로운 가중치 행렬 $W_o$를 곱하여 크기를 조정해주면, 최종적인 Multi-head Attention matrix가 나오게 된다.
만약 Multi-head에서 head의 개수가 $6$개라면, Attention matrix $6$가 나오게 될 것이므로, Q, K, V를 생성하는 가중치 행렬이 총 $18$ ($3 \times 6$)개가 있고 마지막에 크기를 조정해주는 $W_o$가 $1$개 있으므로 총 $19$개의 가중치 행렬이 있는 것이다.
이것이 Transformer의 가장 기본이자 거의 전부에 해당하는 Attention mechanism이다.
다음 글에서 Trasnformer 모델의 구조에 대해 살펴보도록 하자.
'Deep dive into Deep learning' 카테고리의 다른 글
Deep learning (심화) : Information geometry for Deep Learning (0) | 2023.10.05 |
---|---|
Deep dive into Deep learning Part 25 : Transformer (0) | 2023.06.24 |
Deep dive into Deep learning part 23 : RNN (4) (1) | 2023.06.04 |
Deep dive into Deep learning part 22 : RNN(3) (2) | 2023.05.31 |
Deep dive into Deep learning part 21 : RNN (2) (0) | 2023.05.26 |
댓글