Sequence Models - 4 week
Transformer Network Intuition
딥러닝에서 흥미로운 발전 중 하나는 트랜스포머 네트워크이다
이 아키텍처는 NLP 세계를 완전히 장악하고 있다
좀 복잡하니 부분 부분 알아보자
시퀀스 task가 복잡해질수록 모델도 복잡해진다
RNN의 장거리 정보 소실을 게이트로 해결하여 GRU, LSTM을 사용한 것처럼 말이다
복잡도는 증가하지만, 여전히 위 모델들은 시퀀스 모델들이다
동일하게 마지막 유닛 계산을 위해 나머지를 모두 계산해야 한다
트랜스포머 모델을 이용하면 전체 문장을 동시에 병렬적으로 연산할 수 있다고 한다
트랜스포머 모델은 어텐션 모델과 CNN을 결합한 느낌이라 한다
CNN에서 단어 픽셀을 단어에 맞춰 병렬로 처리한다
그런데 이때 어텐션을 줘서 처리를 하는 거지..
.
이를 위해 Self-Attention, Mult-head Attention을 알아야 한다
바로 뭔지 배워보자
Self-Attention
트랜스포머를 구성하는 핵심 아이디어라고 한다
CNN 스타일로 병렬 연산을 하기 위해선 input 문장의 각 단어에 대한 어텐션 값을 생성하는 셀프 어텐션을 계산해야 한다
\(A(q,K,V)\)=attention-based vector representation of a word
위 문장엔 단어가 5개니, 해당 A가 5개 필요하다 (각각을 \(A^{<1>, \dots , A^{<5>}}\)라고 하자)
3번째 단어를 먼저 살펴보자
아프리카의 프랑스어? 인 저 단어를 나타내는 방법 중 하나는 해당하는 워드 임베딩을 찾는 것이다
더운 대륙? 휴식지? 두 번째로 큰 대륙?
어떻게 해당 단어를 생각하냐에 따라 다르게 표현할 수 있다
이게 바로 \(A^{<3>}\)가 하는 일로, 맥락을 보고 가장 적절한 표현을 찾는 것이다
실제 계산은 RNN의 어텐션 모델과 유사하다
모든 단어가 쿼리, 키 값 (q, k, v)를 가지고 있다는 차이가 있다
이들은 학습된 행렬로 계산된다
\(q^{<3>} = W^Q \times x^{3}\)
\(k^{<3>} = W^K \times x^{3}\)
\(v^{<3>} = W^V \times x^{3}\)
W는 학습 가능한 파라미터다
각각이 뭔지 직관적으로 알아보자
q는 쿼리로 질문이고, k는 사람이나 행동 같은 느낌이다
"그 단어에서 무슨 일이 일어나고 있는 거지?"인 q와 그 무슨 행동이나 사람인 k를 내적을 계산한다
아프리카를 방문하고 있으니
아프리카에 무슨 일이 일어나는 거지? 에 대한 답이 visite의 key가 되고, 값이 가장 크다
이 표현의 장점은 단어가 고정된 임베딩을 가지지 않는다는 것이다
아프리카가 방문지라는 걸 학습시켜 더 풍부하고 유용한 표현을 계산하게 한다
이 과정을 모든 단어에 시행해주면 된다
분모의 d는 scale로 값이 너무 커지지 않게 해 준다
이를 scaled dot product attention이라고 부른다
Multi-Head Attention
다음 개념은 다중 헤드 어텐션 메커니즘이다
헤드라고 불리는 시퀀스의 self-attention 계산을 살펴보자
위의 연산을 여러 개의 W를 곱하며 반복한다
각 반복을 헤드라 부르며 h = #heads로 숫자를 표기한다
뭔가 conv에서 필터의 수 같은 느낌..?
최종 헤드는, 각 헤드를 합친 것에 W를 곱해 구한다
헤드는 서로 독립이기에 병렬적으로 계산할 수 있다
Transformer Network
자 배운 걸 합친, 트랜스포머 네트워크를 살펴보자
문장의 시작 <SOS>, 문장의 끝 <EOS> 토큰이 추가되어있다
이 인코더를 N번 반복시키는데, 보통 6번 반복시킨다고 한다
이를 Forward NN에 넘겨서 어떤 특징이 있는지 파악하게 만든다
이 블록의 출력을 decoder 블록에 넘겨준다
디코더 블록의 역할은 번역된 문장 출력이다
디코더 블록이 다음에 올 단어를 출력하게 된다
여기에 몇몇 추가사항을 넣어 네트워크를 개선할 수 있다
먼저 입력 단어의 위치를 인코딩하는 것이다
번역에서 단어 방식은 중요하지만, 셀프-어텐션 방식을 생각하면 단어의 위치를 나타내지 않는다
단어가 처음인지 중간인지 마지막인지 정보를 추가로 알려주는 방법이다
이에 positional Encoding이라는 방식을 사용한다
해싱을 하듯 각 단어 별로 다른 인코딩 벡터를 가지도록 만든다
i는 벡터의 인덱싱으로 i를 통해 cos과 sin의 다른 위상을 가리키게 만들어 준다
주기가 돌아 같은 값을 가지더라도, 벡터의 모든 값이 같은 수는 없기에 서로 구분된다
ResNet처럼 Add&norm이라는 걸 넘겨주는 방법도 있다
이전에 배운 배치 노름과 비슷하지만, 차이는 마법이라 생각하고 넘어가자
디코더의 출력에 Linear, Sofmax 레이어를 추가한고 한다
논문을 보다 보면 Masked Multi-Head Attention이란 말이 등장하기도 한다
트랜스포머를 정확한 데이터로 훈련시키는 과정에서 중요하다고 한다
정확한 입력과 정확한 출력 값을 알고 있기에 학습에선 한 단어씩 진행시킬 필요가 없다
즉 반복 과정에서 학습 과정에 좀 부족한 번역이 아니라, 완벽하게 번역된 값을 주며 다음 단어를 예측시킨다
Conclusion and Thank You!
교수님이 남기신 생각이다
딥러닝을 초능력이라 생각하자
새로운 그림, 음악을 만들고
한 언어를 다른 언어로 변환하며
방사선 촬영 이미지로 의료 진달을 내리고
자율 주행 자동차를 만든다
이게 초능력이 아니면 대체 뭐라고 해야 할까
강좌에서 배운 아이디어를 통해 경력을 발전시키고
꿈을 추구하라 하신다
또한 인류를 위해 할 수 있는 한 최선을 다하시라 하신다
인공지능과 딥러닝으로 여러 문제를 해결할 수 있다
이 초능력으로 다른 사람을 위하자고 하신다
SNS에 강좌 다 들은 거도 자랑하라 하셨다!