Transfermer Network Intuition
[Transformer Network Motivation]
- 갈수록 복잡해진 모델
- 모두 sequential 모델 : input 문장을 한 단어/토큰씩 받아들임 - "as if each unit was like a bottleneck to the flow of information" - 예를 들어, 마지막 unit을 계산하기 위해서는 앞 unit들을 먼저 모두 계산해야 함
- transformer : 전체 sequence에 대한 계산을 병렬(in parallel)로 처리하게 됨
[Transfermor Network Intuition]
- Attention + CNN
- attention based representation과 CNN processing을 합침
- sequential 하게 데이터 처리하는 attention 모델과 parallel 하게 데이터 처리하는 CNN이 대조적으로 보일 수 있음
- attention처럼 단어들의 rich, useful한 representation을 계산하면서, CNN 스타일로 병렬 처리를 하도록
- self-attention & multi-head attention
- self-attention : 단어 5개로 이루어진 문장을 처리한다고 했을 때, 각 단어에 대한 representation을 가지게 됨 ($A^{<1>}$, $A^{<2>}$, $A^{<3>}$, $A^{<4>}$, $A^{<5>}$) -> 병렬적으로 처리하게 될 것임
- multi-head attention : self-attention 에 대한 for-loop - 위와 같은 representation을 여러개 가지게 됨
Self-Attention
[Self-Attention Intuition]
*5개 단어로 이루어진 문장을 예시로 함
- attention-based representation for each word in input sentence
$A(q,K,V)$ = attention-based vector representation for a word
--> $A^{<1>}$, $A^{<2>}$, $A^{<3>}$, $A^{<4>}$, $A^{<5>}$
Jane visite l'Afrique en septembre
-> 맥락에 따라 representation이 다를 수 있음 : 역사적 장소로서의 아프리카? 세계에서 가장 큰 대륙으로서의 아프리카? 여행지로서의 아프리카?
-> $A^{<3>}$: l'Afrique 주위 단어들을 통해서 어떤 의미로 해당 단어를 말하는지 고려하고 가장 적절한 representation으로 나타낸다
-> 지난번에 배웠던 attention 계산방식과 크게 다르지 않으나 - 문장의 모든 단어에 대해 병렬적으로 계산한다는 점이 다름
RNN Attention
$$\alpha^{<t, t'>}=\frac{\exp{(e^{<t, t'>})}}{\sum_{t'=1}^{T_{x}}\exp{(e^{<t, t'>})}}$$
Transformers Attention
$$A(q, K,V) = \sum_{i} \frac{\exp{(q \cdot k^{<i>})}}{\sum_{j}\exp{(q \cdot k^{<j>})}}v^{<i>}$$
- 주요 공통점 : Softmax
- 주요 차이점 : 세번째 단어 l'Afrique 에 대하여 세 개의 vector - query($q^{<3>}$), key($k^{<3>}$), value($v^{<3>}$) 가 있음
[Self-Attention]
"l'Afrique"에서 self-attention representation $A^{<3>}$를 도출하기까지 ...
이것도 기억..
Transformers Attention
$$A(q, K,V) = \sum_{i} \frac{\exp{(q \cdot k^{<i>})}}{\sum_{j}\exp{(q \cdot k^{<j>})}}v^{<i>}$$
- 문장 내 모든 단어에 대해 query, key, value 를 세팅한다
Jane $x^<1>$ -> $q^{<1>}, k^{<1>}, v^{<1>}$
visite $x^<2>$ -> $q^{<2>}, k^{<2>}, v^{<2>}$
l'Afrique $x^<3>$ -> $q^{<3>}, k^{<3>}, v^{<3>}$
en $x^<4>$ -> $q^{<4>}, k^{<4>}, v^{<4>}$
septembre $x^<5>$ -> $q^{<5>}, k^{<5>}, v^{<5>}$
$x^<3>$ 가 l'Afrique 에 대한 word embedding 이고, $q, k, v$ 는 학습되는 matrix임
$$q^{<3>} = W^{Q} \cdot x^{<3>}$$
$$k^{<3>} = W^{K} \cdot x^{<3>}$$
$$v^{<3>} = W^{V} \cdot x^{<3>}$$
$W^{Q}, W^{K}, W^{V}$ 는 각 단어에 대해 query, key, value 를 계산할 수 있게 하는 파라미터
$q^{<3>}$ : destination l'Afrique 에 대한 질문 - "What's happening there?"
$q^{<3>} \cdot k^{<1>}$ : $q^{<3>}$ 와 $k^{<1>}$의 inner product(내적)을 구한다
-> "What's happening in l'Afrique?" 에 대한 대답으로서 Jane 이 얼마나 적합한지 알려준다
$q^{<3>} \cdot k^{<2>}$ : $q^{<3>}$ 와 $k^{<2>}$의 inner product(내적)을 구한다
-> "What's happening in l'Afrique?" 에 대한 대답으로서 visite 가 얼마나 적합한지 알려준다
... 나머지에 대해 동일하게 계산
-> 가장 useful한 representation $A^{<3>}$을 계산하는 데에 가장 필요한 정보가 무엇인지 알아내는 과정
만약 $k^{<1>}$ 가 '사람'을 represent 하고 있고, $k^{<2>}$가 'action'을 represent 하고 있다면,
$q^{<3>} \cdot k^{<2>}$ 가 가장 큰 값을 가지게 될 것임 - "방문하다"라는 말이 "What's happening in l'Afrique?"에 대해 가장 유의미한 맥락을 제공하고 있으므로 - a destination for a visit
$q^{<3>} \cdot k^{<1>}$, $q^{<3>} \cdot k^{<2>}$, $q^{<3>} \cdot k^{<3>}$, $q^{<3>} \cdot k^{<4>}$, $q^{<3>} \cdot k^{<5>}$ 에 대해 softmax 계산
그 다음 각 단어의 value 값과 곱한다
그 다음 다 더한다
최종적으로 이 식을 나타내게 됐음
$$A(q, K,V) = \sum_{i} \frac{\exp{(q \cdot k^{<i>})}}{\sum_{j}\exp{(q \cdot k^{<j>})}}v^{<i>}$$
- 장점 : l'Afrique을 고정된 word embedding으로 표현하지 않고 - visite 의 종착점이라는 의미를 포함함
- 위와 같은 과정을 모든 단어에 대해 실시 - $A^{<1>}$, $A^{<2>}$, $A^{<3>}$, $A^{<4>}$, $A^{<5>}$
$$Attention(Q, K, V) = softmax(\frac{QK^{T}}{ \sqrt{d_{k}}})V$$
- $Q, K, V$ : 모든 단어에 대한 query, key, value 나타낸 matrix
- 뒷부분은 $A(q, K,V) = \sum_{i} \frac{\exp{(q \cdot k^{<i>})}}{\sum_{j}\exp{(q \cdot k^{<j>})}}v^{<i>}$을 vectorized 로 표현한 것
- $\sqrt{d_{k}}$ : explode 하지 않도록 스케일 해줌 --> scaled dot-product attention 이라고 부르기도.
Multi-Head Attention
- basically, self-attention의 거대한 for-loop 이라고 생각하면 됨
- sequence에 대해 각 self-attention 계산하기 = head
각 단어에 대해 query, key, value값이 있고, 여기에 weight matrix 를 곱함으로써 새로운 set of query, key, value 를 계산함
- $W_{1}^{Q}$, $W_{1}^{K}$, $W_{1}^{V}$ -> "What's happening there?" 라는 질문을 하도록 학습됨
- l'Afrique 에 대해서 "What's happening there?"라는 질문에 가장 잘 답변해주는 것은 visite 이므로, visite의 key가 l'Afrique의 query와 inner product(내적)값이 가장 크다
--> 위처럼 l'Afrique에 대한 representation 구한 방식으로 다른 단어들에 대해서도 representation 구하면 됨
--> 해당 sequence 에 대한 representation으로 다섯 개 vector 가 발생함
$$Attention(W_{1}^{Q}Q, W_{1}^{K}K, W_{1}^{V}V)$$
--> 여기까지가 multi-head attention 에서의 첫번째 head 계산! ($W$의 subscript로 표시됨)
위의 계산을 예를 들어 여덟번 수행한다고 하자 (8 heads)
두번째 head 계산
- $W_{2}^{Q}$, $W_{2}^{K}$, $W_{2}^{V}$ matrix 준비, 두번째 질문을 하도록 함 - "When is it happening?"
두번째 head 계산을 stack 해둠
이 두번째 질문에 대해서 l'Afrique의 query는 septembre의 key와 내적값이 제일 클 수 있음
- $W_{3}^{Q}$, $W_{3}^{K}$, $W_{3}^{V}$ matrix 준비, 세번째 질문을 하도록 함 - "Who?"
이 두번째 질문에 대해서 l'Afrique의 query는 Jane의 key와 내적값이 제일 클 수 있음
- head의 개수는 $h$로 나타냄
- 각 head를 각 feature 로 생각할 수 있음
head들의 계산값들을 concatenate 한 후, matrix $W$ 곱함 -> multi-headed attention의 결과값
$$head_{i} = Attention(W_{i}^{Q}Q, W_{i}^{K}K, W_{i}^{V}V)$$
$$MultiHead(Q,K,V) = concat(head_{1} head_{2} \cdots head_{h}) W_{0}$$
for-loop으로 위에서 설명하긴 했는데, 실제로는 병렬적으로 head들을 계산하게 됨 (하나의 head값이 다른 head값에 의존하는 관계가 아니므로)
Transformer Network
[Transformer]
입력 시퀀스의 각 단어 embedding 준비
<SOS> $x^{<1>}$ $x^{<1>}$ ... $x^{<t-1>}$ $x^{<t>}$ <EOS>
Jane visite l'Afrique en septembre
--> encoder block
앞에서 했던 대로 Multi-head attention을 계산 - N번 반복 (논문에서는 6번)
- decoder : 매 step 마다 먼저 translate된 output을 input으로 넣음
- 처음 시작할 때, "<SOS>" 토큰의 입력으로 시작
- 먼저 입력된 <SOS>으로 Q, K, V 를 계산하여 multi-head attention block에 입력
- 첫번째 multi-head attention block의 output으로 Q matrix 를 계산, K와 V는 encoder의 output을 활용한다
-> 처음 입력된 <SOS>로 query를 던지면, context로부터 key와 value를 가져오는 셈
- 그 다음 Feed Forwad NN 에 입력 --> 이러한 과정을 N번 반복
- Feed Forwad NN는 다음 단어를 예측한다 -> Jane 출력
다음 step에서는 "<SOS> Jane" 이 입력 query로 들어간다
반복 ...
[Transformer Details]
- positional encoding of the input
- attention 연산 과정을 살펴보면 단어의 position에 대한 내용이 없음
- 따라서 단어의 position을 encoding 하기 위해 일정한 식을 사용함
Positional Encoding
$$PE_{(pos,2i)} = \sin{(\frac{pos}{10000^{\frac{2i}{d}}})}$$
$$PE_{(pos,2i+1)} = \cos{(\frac{pos}{10000^{\frac{2i}{d}}})}$$
- $d$: 만약에 word embedding이 4차원으로 되어 있다고 해보자. $d=4$
- $pos$: 이와 동일한 차원의 positional embedding $P^{<1>}$를 생성한다. (첫번째 단어 Jane에 대한 거니까 $pos=1$)
- $i$ : encoding의 차원 - 즉 4차원 중에서 첫번째 차원은 $i=0$, 두번째 차원은 $i=1$, 세번째 차원은 $i=2$, 네번째 차원은 $i=3$
--> positinal encoding에 사용되는 세 개의 변수
--> 각 단어에 대해서 unique한 positional vector 생성됨
- 첫번째 단어에 대한 positional vector $P^{<1>}$ 은 $x^{<1>}$에 그대로 더해짐
- encoding block의 output은 "contextual semantic embedding" 그리고 "positioinal encoding information"을 포함한다
- "The outputs of the embedding layer is then d, which in this case is 4, by the maximum length of sequence your model can take." -> 다른 layer (attention 레이어라든지, FFNN 이라든지) 들의 output도 동일한 shape
- 그 외에
- residual connection 있음
- batch norm과 매우 유사한 레이어 사용 -> Add&Norm 레이어
- decoder의 출력 부분에 한번에 한 단어씩 예측하는 softmax, linear 레이어 있음
- masked multi-head attention 있음 : 학습시에만 중요한 역할.
- 학습할 때는 정답 문장이 전부 있으므로 한번에 한 단어씩만 출력할 필요가 없음
- training할 때는 뒷부분을 마스킹해서 실제 예측할 때처럼 훈련을 하게 됨 (앞부분 번역이 완벽하게 됐다고 했을 때 나머지 부분도 정확하게 예측할 수 있는지)
'인공지능 > DLS' 카테고리의 다른 글
[5.3.] Speech Recognition - Audio Data (0) | 2022.08.13 |
---|---|
[5.3.] Various Sequence To Sequence Architectures(2) (0) | 2022.08.13 |
[5.3.] Various Sequence To Sequence Architectures(1) (0) | 2022.08.11 |
[5.2.] Applications Using Word Embeddings (0) | 2022.08.11 |
[5.2.] Learning Word Embeddings: Word2vec & GloVe (0) | 2022.08.09 |