본문 바로가기
NLP

[Transformer] 트랜스포머 동작 원리 1. 인코딩, 디코딩

by 박다소니 2024. 8. 20.

저번에 트랜스포머가 무엇인지 공부한 거에 이어서 리뷰영상을 마저 보며 공부했다.

저번에 이해 안되는 단어들을 풀어적으며... 트랜스포머 동작 원리 알아보기!

 


트랜스포머 동작 원리

 

[입력 값 임베딩]

 

트랜스포머 이전의 임베딩(RNN사용 → 단어 순서대로 들어감 : 위치정보 알 수 있음)

: 네트워크에 넣기 전, 입력 값들을 임베딩 형태로 표현하기 위해 사용하는 레이어

 

트랜스포머

: 위치 정보를 포함하고 있는 임베딩 사용 : Positional Encoding

 

 

[인코더]

 

임베딩이 끝난 이후에 어텐션 진행

 

인코더 파트에서 수행하는 어텐션

: 셀프 어텐션전반적인 입력 문장에 대한 문맥에 대한 정보를 잘 학습하도록 함
: 각각의 단어가 서로에게 어떤 연관성을 가지고 있는지 구하기 위해 사용

 

성능 향상을 위해 잔여학습(Residual Learning)을 사용

→ 전체 네트워크는 기존 정보를 입력받으면서 추가적으로 잔여 된 부분만 학습하도록 만듦
: 전반적인 학습 난이도가 낮고, 따라서 초기에 모델 수렴 속도가 높고, 따라 글로벌 옵티멀을 찾을 확률이 높아짐 → 성능 향상
: 특정 레이어를 건너뛰어서 입력할 수 있도록 만듦

 

어텐션과 정규화 과정을 반복
: 각 레이어는 서로 다른 파라미터를 가짐

 

 

[인코더와 디코더]

 

마지막 인코더 레이어의 출력이 모든 디코더 레이어에 입력됨

입력 값이 들어오고 여러 인코더 레이어를 반복해서 가장 마지막에 나온 출력이 디코더에 들어감

seq2seq에서 어텐션 메커니즘을 사용했을 때와 마찬가지로 디코더 파트에서도 매번 출력할 때마다 입력 소스 문장 중에서 어떤 단어에 가장 많은 초점을 두어야 하는지 알려줘야 하기 때문

디코더는 각 단어 정보를 받고, 이어서 각 단어의 상대적인 위치정보를 알기 위해 포지셔널 인코딩 값을 추가하여 입력을 넣음

 

하나의 디코더 레이어는 두개의 어텐션을 사용

  • 셀프 어텐션 : 각각의 단어들이 서로가 서로에게 어떠한 가중치를 가지는지 구하도록 함→ 문장에 대한 전반적인 표현 학습
  • 인코더-디코더 어텐션 : 인코더에 대한 정보를 어텐션. 즉, 각각의 출력 단어가 인코더의 출력 정보를 받아와 사용할 수 있게 만듦(소스문장에서의 어떤 단어와 연관성이 있는지 알려줌)

 

가장 마지막 디코더에서 나온 출력이 우리가 받는 값

트랜스포머도 인코더와 디코더 구조를 따르지만 RNN을 사용하지 않으며 인코더와 디코더를 다수 사용한다는 특징을 가짐

  • RNN을 사용(LSTM) : 고정된 크기로 사용, 입력 단어의 개수만큼 인코더 레이어를 거쳐서 매번 히든 스테이트를 만듦
  • 트랜스포머 : 입력 단어가 하나로 쭉 연결되어 한번에 입력되고, 한번에 그에 대한 어텐션을 구함. 즉, 위치정보를 한번에 넣어 인코더를 거칠때마다 병렬적으로 출력 값을 구해낼 수 있어 계산복잡도가 낮게 형성됨