대표적인 기계번역은 어떤 언어(source language)에서 다른 대상 언어(target language)의 단어 시퀀스로 변환하는 과제이다. 여기서 scource language 와 target language의 길이는 다르게 출력되는게 가능하다.
transformer은 seq2seq에 특화된 모델이다. 기계번역 뿐만아니라 다양한 분야에서 사용이 가능하다.
먼저 seq2seq의 구조는 인코더(encoder)와 디코더(decoder) 두 개 파트로 구성된다.
ex) 기계번역에서 인코터가 한국어 문장을 압축해 decoder로 보내면 decoder는 이것을 받아 영어로 번역한다.
아래의 그림은 transformer의 인코터와 디코더의 구조이다.
transformer block - encoder
transformer block - decoder
Attention : 시퀀스 입력에 수행하는 기계학습 방법의 일종. 시퀀스 요소 가운데 테스크 수행에 중요한 요소에 집중하고 그렇지 않은 요소는 무시해 테스크 성능을 올린다.
Self Attention : 멀티 헤드 어텐션이라고도 부른다. 말 그대로 자기 자신에 수행하는 Attention 기법이다. 입력 시퀀스 가운데 테스크 수행에 의미 있는 요소들 위주로 정보를 추출한다.
기존 RNN과 CNN을 통한 문장 변역에서는 문장의 길어길 수록 예전 단어의 정보 손실이 발생한다 이를 극복해서 해당 아래의 그림과 같이 Attention모델은 오래전 단어에 대한 번역 품질이 떨어지는 것을 막을 수 있다.
개별 단어와 전체 입력 스퀀스를 대상으로 Attention 계산을 수행해 문맥 전체를 고려하기 때문에 지역적인 문맥만 보는 CNN대비 강점이 있다. 아울러 모든 경우의 수를 고려하기 떄문에 시퀀스 기링가 길어지더라도 정보를 잊거나 왜곡할 염려가 없다. 이는 RNN의 단점은 극복한 지점
계산 예시)
Self Attention은 쿼리(query), 키(key), 벨류(value) 세 가지 요소가 서로 영향을 주고 받는 구조이다. transformer블록에서는 문장내 각 단어가 vector형태로 입력된다. 여기서 각 단어 벡터는 블록 내에서 쿼리, 키, 벨류 세가지로 변환된다.
Self Attention 모듈 벨류 벡터들을 가중합(weighted sum)하는 방식으로 계산을 마무리하낟.
여기서는 카페에 대해서만 계산 예를 들었지만 이러한 방식으로 나머지 단어들도 셀프 어텐션을 각각 수행한다. 모드 시퀀스를 대상으로 셀프 어텐션 계산이 끝나면 그 결과를 다음 블록으로 넘긴다. transformer모델은 셀프 어텐션을 블록(layer) 수만큼 반복한다.
Transformer에서는 크게 멀티 헤트 어텐션(Self-Attention), 피드포워드 뉴럴 네트워크, 잔차연결 및 레이어 정규화 세 가지 구성 요소를 기본으로 한다.
뉴런들의 계산과정은 선형계층의 연산과 동일하게 된다.
잔차 연결은 동일한 블록 계산이 계속될 때 효과가 있다. 모델이 다양한 관점에서 블록 계산을 수행하게 된다는 말이다. 딥러닝 모델에서 레이어가 많아지면 학습이 어려워 지는 경향이 있다(그래디언트 경로 증가). 잔차 연결은 모델 중간에 블록을 건너 뛰는 경로를 설정함으로써 학습을 용이하게 하는 효과가 있다.
베타와 감마는 학습 과정에서 업데이트되는 가중치이며, 입실론은 분모가 0이 되는 것을 방지해주기 위해 더해주는 고정값(주로 1e-5설정)이다.
레이어 정규화는 미니배치의 인스턴스별로 수행한다. - 배치 크기가 3이면 3개에 대한 평균 분산을 구한 후 위의 식에 적용.