5. Transformer
(1) Transformer 소개
□ 트랜스포머는 시퀀스 데이터를 처리하기 위한 딥러닝 구조로 셀프 어탠션 메커니즘을 중심으로 구성됨. 처음에는 자연어 처리 작업에 주로 사용되었지만 현재는 그 활용 범위가 컴퓨터 비전 분야까지 확장되는 추세임

□ 트랜스포머는 seq2seq 모델처럼 인코더와 디코더 모델을 사용하지만 RNN을 사용하지 않음. 트랜스포머의 구조를 이해하기 위해서는 셀프 어탠션 메커니즘에 대해 이해해야함
(2) Self-Attention
□ 셀프 어텐션 메커니즘은 문맥상 중요한 단어를 찾아낸다는 점에서는 기존의 어텐션 메커니즘과 유사하지만 셀프 어텐션은 이름에서 시사하는 바와 같이 자기 자신에게서 연관성을 찾는 메커니즘으로 입력된 각 단어와 전체 입력 시퀀스 내부 단어들 사이의 연관성을 찾음
□ 셀프 어텐션에서도 문맥상 중요한 단어를 찾아내기 위해 key, value, query 값을 구하지만 어텐션과 다르게 key, value, query 값을 하나의 입력 벡터 시퀀스에 서로 다른 가중치를 곱해서 구함
□ 앞서 구한 key와 qeury 벡터를 곱해 어텐션 스코어를 구한 후 소프트맥스 함수에 넣어 스코어 행렬을 만든 후 그 값을 value와 곱해 셀프 어텐션 출력값을 구함
■ 수식으로 나타내면 다음과 같고 어텐션 스코어를 구할때 Scaled Dot-Product Attention 구조를 사용함
(3) Transformer의 구조

□ 트랜스포머 구조는 크게 인코더의 입력층, 인코더 블록, 디코더 블록, 디코더의 출력층으로 구분할 수 있음.
■ 인코더의 입력층에서는 단어를 입력받고 임베딩을 한 후 그 값이 인코더 블록과 디코더 블록을 지나 디코더의 출력층에서 확률 분포로 출력됨
□ 트랜스포머는 RNN을 사용하지 않으므로 단어의 위치 정보를 추가적으로 제공해야함. 이를 위해 인코더의 입력층에서는 포지셔널 인코딩이라는 과정을 수행.
■ 각 단어의 임베딩 벡터에 단어들의 위치 정보가 담긴 포지셔널 인코딩 값을 더해 순서 정보를 추가함
■ 같은 단어라도 단어의 위치에 따라 트랜스포머에 입력되는 벡터 값이 달라질 수 있음
□ 인코더 록블 내부에는 Multi-Head Attention 층과 Feed-Forward 층이 존재
■ 멀티 헤드 어텐션은 셀프 어텐션을 병렬적으로 수행하는 메커니즘으로 각각의 셀프 어텐션 과정에서 서로 다른 가중치를 가지고 수행함. 그 결과 행렬을 concatenate한 후 가중치를 곱해 출력값을 생성함
■ 피드 포워드 층은 일종의 Fully-Connected 층인데 멀티 헤드 어텐션 층의 출력값을 피드 포워드 층의 뉴런에 넣어 가중치와 편차를 더하고 그 값을 활성화 함수 ReLU 층을 통과시킨후 다시 피드 포워드 층의 뉴런에 넣어 최종 출력값을 구함
이를 보기 쉽게 수식으로 나타내면 멀티 헤드 어텐션 층의 출력값을 X라 할때 X가 피드포워드 층을 지난 값 A는 이고, 활성화 함수층을 지난 값 B는 , 마지막으로 피드 포워드 층을 지난 최종 출력값 C는
□ 인코더와 디코더 블록 내부를 보면 멀티 헤드 어텐션층과 피드 포워드 층이 끝난후 Add & Norm층이 존재하는데 이는 잔차 연결과 정규화 과정임
■ 잔차 연결은 입력값과 입력값을 특정 함수에 넣은 결과물을 더하는 연결 방식으로 수식으로 표현하면 가 됨. 잔차 연결은 CNN(합성곱 신경망)을 활용한 ResNet 구조에서도 모델의 손실 함수를 학습하는데 활용됨. 트랜스포머의 경우 멀티헤드 어텐션이나 피드 포워드 층이 수식의 F 함수 역할을 함
■ 잔차 연결은 특정 층의 입력값과 출력값을 더해주는 연결이기 때문에 트랜스포머의 구조를 살펴보면 특정 층에 입력값이 두 갈래로 나뉘어 Add & Norm 층에서 만나는 것을 확인할 수 있음
■ 정규화 과정은 잔차 연결 계산을 마친 행렬에 대해 평균과 분산을 구하고 그 값을 토대로 정규화를 진행함. 이후 학습가능한 파라미터 와 를 통해 Add & Norm 층의 최종 출력값을 구함.
□ 인코더 블록에서 모든 인코더 층을 지난 출력값은 디코더에 전달되고 디코더 블록에서는 이 출력값을 매 디코더 층에서 사용함
□ 디코더에서도 인코더와 마찬가지로 포지셔널 인코딩을 통해 문장 내에서 단어의 순서 정보가 담긴 임베딩 벡터를 입력값으로 받음.
□ 디코더에는 인코더에는 없는 Masked Multi-Head Attention이란 층이 존재하는데 기존의 멀티 헤드 어텐션에 Look-Ahead Mask를 도입함. 디코더는 학습과정에서 예측해야할 정답을 한번에 입력받는데 이렇게 되면 예측해야하는 시점 이후의 정보가 현재 예측하는 단어에 영향을 미칠 수 있기 때문에 학습이 제대로 이뤄지지 않음. 이를 해결하기 도입된게 룩 어헤드 마스크로 현재 예측하는 단어 이후의 시점의 정보를 마스킹, 즉 가려서 학습할때 영향을 주지 못하도록 한 구조임
■ 멀티 헤드 어텐션 구조에서 어텐션 스코어를 구하고 어텐션 스코어 행렬에 룩 어헤드 마스크를 도입하여 학습을 수행
□ 디코더의 두번째 층인 멀티 헤드 어텐션 층은 인코더의 멀티 헤드 어텐션이 셀프 어텐션 메커니즘인 것과 다르게 인코더와 디코더의 정보를 모두 받음. 인코더로부터 key와 value 행렬을 전달받고 디코더의 첫번째 층으로부터 query 행렬을 받아서 어텐션 스코어를 계산함
□ 이후 피드 포워드 층을 지난 결과값은 소프트맥스 함수를 통해 확률 분포 값이 되어 가장 확률이 높은 단어가 예측됨
'인공지능 > 딥러닝' 카테고리의 다른 글
Triplet Loss란? (1) | 2024.06.03 |
---|---|
Pytorch - Tutorials(파이토치 모델 학습 코드 설명) (1) | 2024.04.09 |
Attention Mechanism (1) | 2024.03.17 |
인공 신경망 종류 (3) Seq2Seq (0) | 2024.03.17 |
인공 신경망의 종류 (2) LSTM (0) | 2024.03.17 |