본문 바로가기
머신러닝(Machine Learning)

NLP 트랜스포머 코드 스터디 리뷰 (3) transformer.py

by Blaze_블즈 2023. 8. 21.

안녕하세요

블레이즈 테크노트 

블레이즈 입니다. 

 

지난 2개의 포스팅에서

Attention is all you need 논문의 코드 중 

transformer.py 의 앞부분을 살펴봤습니다. 

https://blazetechnote.tistory.com/27

 

NLP 트랜스포머 코드 스터디 리뷰 (1) transformer.py

안녕하세요 블레이즈 테크노트 블레이즈 입니다. 트랜스포머 논문에 대해서는, 제가 지난 여러 포스팅에서 설명했습니다. 어텐션메커니즘1 어텐션메커니즘2 트랜스포머_포지셔널인코딩 트랜스

blazetechnote.tistory.com

https://blazetechnote.tistory.com/28

 

NLP 트랜스포머 코드 스터디 리뷰 (2) transformer.py

안녕하세요 블레이즈 테크노트 블레이즈 입니다. 지난 포스팅에서 Attention is all you need 논문의 코드 중 transformer.py 의 앞부분을 살펴봤습니다. 이번 포스팅에서는 transformer.py의 뒷부분을 살펴보

blazetechnote.tistory.com

 

 

이번 포스팅에서는 transformer.py의 전체 구조를 정리해보도록 하겠습니다. 

원 코드는 아래의 링크를 통해 확인해보세요. 

https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/transformer.py

 


제가 생각했을 때 transformer.py의 큰 구조는 아래 그림과 같습니다. 

 

 

 

기본적으로 transformer.py 는 Transformer 클래스를 잘 정의하는 것에 그 핵심이 있습니다. 

 

그리고 Transformer 클래스 중에서 body() 메서드가 가장 중요하다고 볼 수 있습니다. 

 

body() 자체는 NLP 트랜스포머 코드 스터디 리뷰 (1) transformer.py 에서 자세히 봤습니다. 

이 메소드의 역할을 크게 3단계로 구분지으면 

input 준비, encoder, decoder 입니다. 

 

input 준비는 features에 들어 있는 메타 데이터들을 할당하는 과정입니다. 

 

encoder는 Transformer 클래스 내부의 encode() 메서드를 리턴합니다. 

encode() 메서드는 transformer_layers 모듈의 transformer_encoder를 사용니

더 자세히 알려면 transformer_layers 모듈을 살펴봐야 할 것입니다.

 

 

다음으로 decoder는 Transformer 클래스 내부의 decode() 메서드를 리턴합니다. 

decode() 메서드는 transformer_decoder()를 사용하는데 이 함수는 

인코더 부분과 달리 transformer.py 하단에 정의되어 있습니다. 

 

transformer_prepare_decoder(), transformer_self_attention_layer(),

transformer_decoder_layer(), transformer_decoder() 이렇게 순차적으로 정의가 되어 있는데, 

 

self_attention_layer() 를 decoder_layer()가 사용하고 

decoder_layer()를 decoder()가 사용하는  

위계적 구성으로 되어있습니다. 

 

그리고 self_attention_layer()의 경우 common_attention.multihead_attention() 과

common_layers.layer_preprocess() 를 사용하니 더 자세한 부분은 이 모듈의 코드를 직접 봐야 할 것 같습니다. 

 

전체적인 구조를 한 번에 정리하면 아래의 그림과 같다고 볼 수 있습니다. 

 

앞으로 차근차근

transformer_layers.py와 

common_attention.py, common_layers.py도 리뷰할테니 기다려 주세요!

 

감사합니다. 

 

 

 

 

NLP 트랜스포머 코드 스터디 리뷰 (1) transformer.py

NLP 트랜스포머 코드 스터디 리뷰 (1) transformer.py 

NLP 트랜스포머 코드 스터디 리뷰 (1) transformer.py