DL/개념정리

[파이토치 딥러닝 프로젝트] 언어 모델링을 위한 트랜스포머 모델

SanL 2024. 2. 13. 16:29

‣ 해당 블로그는 ⌜실전! 파이토치 딥러닝 프로젝트⌟를 공부하며, 배운것들을 토대로 정리되었음을 알려드립니다.

 


언어 모델링

특정 단어 시퀀스가 주어졌을 때 그 뒤를 따를 단어 또는 단어 시쿼스의 발생 확률을 알아 내는 작업.

 

("French is a beautiful ___" -> 'language' 나 'word' 등이 나올 확률은? ) -> 확률적 통계적 기법을 사용하여 언어를 모델링함으로써 계산 됨.

 

이는 어떤 단어들이 함께 등장하고, 어떤 단어들이 절대 함께 나오지 않는지를 배움으로써 텍스트 말뭉치를 관찰하고 문법을 학습하는 것에서 비롯됐다. 

 

트랜스포머 모델 아키텍처

트랜스포머 모델 아키텍처

위 그림에서 왼쪽은 '인코드', 오른쪽은 '디코더'에 해당하고, 아키텍처가 깊어질수록 인코더와 디코더는 여러번 이어 붙일 수 있다. 위 그림에서는 두개의 인코더, 하나의 디코더로 구성되어있다. 이 인코더 - 디코더 설정은 시퀀스를 입력으로 가져와서 입력 시퀀스에 있는 단어 수만큼의 임베딩을 생성(단어 하나 당 하나의 임베딩). 이러한 임베딩은 지금까지 모델에서 만들어진 예측과 함께 디코더에 제공.

 

⚑ 임베딩 계층 : 시퀀스의 각 입력 단어를 숫자 벡터로 변환하는 전형적인 작업.

⚑ 위치 인코더

: 트랜스포머의 아키텍처에는 순환 계층이 없지만, 시퀀스 작업에서 순환 네트워크보다 성능이 좋다. ' 위치 인코더'을 통해 모델이 학습 순서에 대해 감을 잡을 수 있으며, '특정 패턴을 따르는' 벡터가 입력 단어 임베딩에 추가됨. 이러한 벡터는 모델에서 첫번째 단어 뒤 두번째 단어가 따라 나오는 것을 이해할 수 있게 하는 방식으로 생성

 

트랜스포머 모델의 다양한 요소

<Multi-head Attention>

'여럿의 말이 쇠도 녹인다' 라는 말처럼 이전에는 단 하나의 'Attention'을 통해 학습 시켰으나, 'Attention'을 병렬로 여러 개 사용해 학습을 한다는 것이다. 이렇게 함으로써 더욱 성능이 좋아짐을 볼 수 있었으며, 아래 그림은 Multi-head Attention 메커니즘을 도식화 한것이다.

그림에서 보는 것과 같이 head의 수만큼 Attention을 각각 병렬로 나누어 계산한다. 이렇게 도출된 Attention Value들은 마지막에 concatenate를 통해 하나로 합쳐주고 이는 Attention을 한번 사용할 때와 같은 크기의 결과가 도출된다.

 

 

<Self-Attention>

Self-Attention은 쉽게 말해 '같은 문장 내에서 단어들 간의 관계' 즉, 연관성을 고려하여 Attention을 계산하는 방법이다.

 

<Two self-Attention : Multi-head-Attention>

아래 그림은 두 개의 Self-Attention 유닛으로 구서어된 Multi-head-Attention 구조이다. Self-Attention head를 여러 개 두면 여러 개의 헤드가 시퀀스 단어의 다양한 관점에 집중하도록 도와준다. 이는 합성곱 신경망에서 여러 개의 특징 맵이 다양한 패턴을 학습하는 방법과 유사하다.

 

또한, 디코더 유닛의 마스킹된 Multi-head-Attention Layer은 마스킹이 추가됐다는 점을 제외하면 Multi-head-Attention Layer과 똑같은 방식으로 작동한다. 즉, 시퀀스 처리의 시간 단계 t가 주어지면 t+1에서 n(시퀀스 길이)까지의 모든 단어가 마스킹된다(숨겨짐)

 

훈련하는 동안 디코더에는 두 종류의 입력이 제공된다. 그 중 하나는 최종 인더코에서 쿼리와 키 벡터를 입력으로 받아(마스킹 되지 않은) Multi-head-Attention Layer으로 전달한다. 여기에서 이 쿼리와 키 벡터는 최종 인코더 출력을 행렬로 변환한 것이다. 다른 하나는 이전 시간 단계에서 만들어진 예측을 순차적 입력으로 받아 마스킹된 Multi-head-Attention Layer에 전달한다.

 

(아래와 같은 구조를 가지고 코드를 구현해볼 예정이다.)

추가적으로 'Attention'의 원리와 연산과정을 자세히 살펴보시기를 원하신다면, 해당 블로그 참고

 


 

<Two self-Attention : Multi-head-Attention> 구현 : Pytouch

(위키디피아의 텍스트를 사용)

 

transformer

 

 

 

[Reference]

https://www.blossominkyung.com/deeplearning/transformer-mha

https://codingopera.tistory.com/44