Git
>> > git diff
>> > git commit - am 'message'
>> > git add
>> > touch . gitignore
>> > git reset
>> > git remote add origin 주소
>> > git merge - - no- ff 브랜치
NLP
Seq2Seq
it takes a sequence of words as input and gives a sequence of words as output
it composed of an encoder and a decoder
Encoder를 지나며 생성된 h o h_o h o 이 Decoder에 들어감
Seq2Seq with attention
Decoder의 첫 hidden state vector인 h 0 h_0 h 0 은 Encoder을 통해 얻고 이와 각 Encoder vector의 내적을 통해 Attention scores를 얻는다. 이후 Softmax연산을 통해 Attention distribution을 만들고 이를 통해 Attention output을 얻는다.
그 후 Decoder의 h t h_t h t 는 x t x_t x t (input data)와 h t − 1 h_{t-1} h t − 1 를 통해 얻는다.
Attention Score
general
concat
Attention의 장점
Attention significantly improves NMT(기계번역) perfomance
It is useful to allow the decoder to focus on particular parts of the source
Attention solves the bottlenect problem (Encoder의 h o h_o h o )
Attention allows the decoder to look directly at source; bypass the bottleneck
Attention helps with vanishing gradient problem
Provides a shortcut to far-away states
shortcut이 없다면 Decoder의 time step과 Encoder의 time step을 거슬러 올라가야 원하는 곳으로 다다를 수 있다.
Attention provides some interpretability
By inspecting attention distribution, we can see what the decoder was focusing on
The network just learned alignment by itself
beam-search
Greedy decoding은 틀린 답을 생성시 뒤로 돌아갈 수 없다.
그렇기에 이를 해결하기 위해 translation y y y 를 최대화하는 lenth T T T 를 찾기 위해 모든 경우의 수를 계산할 수 있다. (exhaustive search)
V V V : vocab size, step t t t 일 때 complexity는 O ( V t ) O(V^t) O ( V t ) 로 매우 높다
Beam Search의 Core idea는 매 time step, k개의 most probable partial translations(hypothese)를 추적한다.
not guaranteed to find a globally optimal solution
much more efficient than exhaustive search
Greedy Decoding에서 END token이 나올 때 까지 디코딩했다면 Beam search decoding에서는 diffrent timesteps에서 END token을 생성할 때 까지 디코딩한다.
Problem with this : longer hypothese have lower scores(-log값을 더하므로)
Fix : Normalize by length (hypothese의 길이만큼 나눠 평균을 취한다.)
BLEU score
Precision = c o r r e c t _ w o r d s l e n g t h _ o f _ p r e d i c t i o n \frac{correct\_words}{length\_of\_prediction} l e n g t h _ o f _ p r e d i c t i o n c o r r e c t _ w o r d s
recall = c o r r e c t _ w o r d s l e n g t h _ o f _ r e f e r e n c e \frac{correct\_words}{length\_of\_reference} l e n g t h _ o f _ r e f e r e n c e c o r r e c t _ w o r d s
F-measure = p r e c i s i o n × r e c a l l 1 2 ( p r e c i s i o n + r e c a l l ) \frac{precision\times recall}{\frac{1}{2}(precision + recall)} 2 1 ( p r e c i s i o n + r e c a l l ) p r e c i s i o n × r e c a l l
78 + 70 2 ( 산술 ) \underset{(산술)}{\frac{78+70}{2}} ( 산 술 ) 2 7 8 + 7 0 ≥ \geq ≥ ( 78 × 70 ) 1 2 ( 기하 ) \underset{(기하)}{(78\times70)^\frac{1}{2}} ( 기 하 ) ( 78 × 70 ) 2 1 ≥ \geq ≥ 1 1 78 + 1 70 2 ( 조화 ) \underset{(조화)}\frac{1}{\frac{\frac{1}{78}+\frac{1}{70}}{2}} ( 조 화 ) 2 7 8 1 + 7 0 1 1
Precision and Recall : no penalty for reordering
기하 평균
reference 길이보다 짧은 prediction을 생성할 경우 min 연산으로 인해 작은 값이 들어가 짧은 prediction에 대한 penalty를 부여 (brevity penalty)
Transformer
Attention is all you need
Long Term Dependency를 해결
time step을 연속적으로 통과하지 않음
연관성을 한번에 계산
Self-Attention 기법을 사용
같은 벡터 내에서 세가지의 역할(q , k , v q,k,v q , k , v )이 공유되는 것이 아닌 W Q , W K , W V W^Q,W^K,W^V W Q , W K , W V 를 통해 다른 벡터로 선형변환 즉 확장 가능
W Q , W K , W V W^Q,W^K,W^V W Q , W K , W V 를 통해 q , k , v q,k,v q , k , v 벡터를 생성
Scaled Dot-Product Attention
q q q 가 여러개인 경우 Q Q Q 로 변경하여 Row-wise softmax 연산을 사용한다.
아래와 같은 연산을 통해 Z Z Z 를 구한다.
d k \sqrt{d_k} d k : K K K (key)벡터의 dimension에 root를 씌운 값
d k d_k d k 가 커지면 q T K q^TK q T K 의 variance 또한 커진다
Some values insside the softmax get large
The softmax gets very peaked
Hence, its gradient gets smaller
So, Scaled by the length of query / key vecotrs