본문 바로가기
딥러닝

Transformer 정리

by 방구석 데이터사이언티스트 2022. 10. 10.
728x90
반응형

[Transformer]

 

배경

- 기존의 seq2seq는 context vector에 소스문장 압축

- 병목 현상이 발생

- Attention is all you need -> 기존의 rnn, lstm 등을 사용하지 않고 attention만을 사용한 아키텍처를 사용해보자

 

아키텍처

인코더 

- 입력 :Input Embedding + positional Encoding

rnn은 순차적으로 데이터가 입력되어 위치정보가 포함되어있지만, Transformer는 입력이 한번에 들어가기 때문에 위치정보를 따로 지정해줘야함 

- Layer : Multi head Attention -> add&Norm -> Feed Forward -> add&Norm

- 인코더는 N개의 Layer로 구성

- 각 Layer는 서로 다른 파라미터를 가진다.

- 마지막 인코더 레이어의 출력은 모든 디코더 레이어에 입력으로 들어간다. 

 

디코더

- 입력 :Output Embedding + positional Encoding

- Layer : Masked multi head Attention -> add&Norm -> Multi head Attention -> add&Norm -> Feed Forward -> add&Norm

- 디코더는 N개의 Layer로 구성

- 각 Layer는 서로 다른 파라미터를 가진다.

- 마지막 인코더 레이어의 출력은 모든 디코더 레이어에 입력으로 들어온다. 

 

Transformer에 사용되는 3 가지 Attention

1. Encoder Self Attention

2. Masked Decoder Self Attention

3. Encoderr - Decoder Attention

 

Attention의 원리

입력 : Query, Key, Value

쉽게 생각하면 무엇과 가장 연관이 있는지를 보려는 대상은 Key이다. 즉 query가 어떤 key와 연관이 있는지 가중치를 구하고 value를 곱해 attention 값을 구한다. 

 

multi head attention은 말 그대로 여러 head를 사용하는 것이다. Query, Key, Value를 서로 다른 Linear layer에 태워서 서로 다른 attention 값을 추출하고 head의 개수 만큼 attention 값을 얻을 수 있다. 

마지막으로 head의 개수 만큼 attention 값을 concat 후 Outut Linear layer을 거치게 되면 최종 multi-head attention 값을 구할 수 있다. 

 

Masked Decoder Self Attention의 경우 마스크 행렬을 이용해 특정 단어를 무시하도록 한다. 

마스크 값에 음의 무한대를 넣어 softmax 함수의 출력이 0%에 가까워지도록 한다. 

 

728x90
반응형

댓글