Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
NLP/Transformer

[NLP] Transformer Residual Connection, FFNN, Output Layer 정리

by Tiabet 2025. 2. 19.

https://tiabet0929.tistory.com/83

 

[NLP] Transformer Multi-Head Attention 파이썬으로 정리

https://tiabet0929.tistory.com/77 [NLP] Transformer의 Attention Head 파이썬으로 정리미루고 미루다 다시 한 번 Transformer 구조 정리를 시작하고자 한다. 이번 포스팅에선 Attention Head와 Scaled-dot Product Attention을

tiabet0929.tistory.com

이 포스팅을 작성하고도 시간이 꽤 흘러버렸다. 드디어 Transformer의 마지막 포스팅이 될 것 같다. 이번 포스팅에선 그동안 다루지 않고 남았던 모든 내용들을 다뤄보고자 한다. Residual Connection과 LayerNorm 부분, 그리고 FFNN과 최종적인 Output Layer에 대한 정리다.

 

트랜스포머 아키텍처와 이 포스팅에서 다룰 내용들

 

 

Add & Norm 파트 (Residual Connection + Layer Normalization)

그림을 보면 Multi-Head Attention 레이어와 Feed Forward 레이어 뒤엔 항상 Add & Norm 파트가 있다. 논문을 확인해보면 이는 Residual Connection과 Layer Normalization을 의미하고 있음을 알 수 있다.

 

Residual Connection이란 ResNet이라는 이미지 분류 모델에서 처음 사용된 기법이다. ResNet의 저자들은 어떤 레이어를 거치고 나온 결과를 그 레이어에 들어간 인풋과 더해서 다음 레이어로 넘겨주면 모델이 학습을 더욱 잘하게 된다는 점을 응용, Deep Residual Learning이라는 새로운 학습방법론을 제시했다. 간결하게 설명하자면 Residual Connection은 입력 x와 원하는 값 y가 있을 때, 일반적으로 우리는 아주 복잡한 단계를 거쳐 x에서 y가 된다고 생각하지만, 방향을 바꾸면 어떤 함수 F(x)만 더해주면 y가 나온다고 생각할 수 있다는 것이다. 즉, y=F(x)+x로 이해할 수 있게 된다.

 

이렇게 되면 장점이 몇 가지 있다. 첫째, Input과 Output의 차이가 크지 않을 경우 복잡한 연산을 할 필요가 없으므로 계산이 단순해진다. 다시 말하면 F(x) 가 0에 가까운 경우에 아주 유리하다. 둘째, 신경망 모델이 깊어지다보면 과적합 등의 이유로 성능 저하가 야기되기도 하는데, 계속해서 Input을 Connect 시켜줌으로써 모델의 안정성을 높일 수 있다. 

 

ResNet의 저자들은 신경망층 하나보다 두개 혹은 세개 이후에 Residual Connection을 해주는 것이 좋다고 언급했다. Transformer에서도 이를 착실히 수행했는지 각 Sublayer가 두 개 정도의 깊이를 갖고 있다. Multi-Head Attention의 경우 Query, Key, Value로 Projection할 때 한 층, 마지막에 Output Projection을 할 때 한층. FFNN의 경우 뒤에 설명하겠다.


LayerNormalization 같은 경우는 얼마 전 다른 포스팅에 정리를 해놨으니 참조.
https://tiabet0929.tistory.com/88

 

[딥러닝] Layer Normalization과 Batch Normalization 정리

이번 포스팅에선 Neural Network에서 자주 사용되는 두 정규화 기법인 Layer Normalization과 Batch Normalization에 대해 정리해보고자 한다. 우선 Normalization이 왜 필요한지는 다소 직관적으로 느껴진다. Neura

tiabet0929.tistory.com

 

즉, Transformer의 Add & Norm 파트는 아래 수식으로 정리 가능하다.

 

LayerNorm(x+Sublayer(x))

 

 

Position-wise Feed-Forward Network

간단하지만 빼놓을 수 없는 부분이기도 한 Position-wise Feed-Forward Network이다. 나는 여태 글을 쓰면서 FFNN이라는 약자로 썼는데, 이 포스팅에선 Position-wise라고 표현한 이유를 설명하고 싶다. 우선 우리가 Feed-Forward Network라고 부르는 신경망은 Transformer의 논문에선 dinput이 512, dhidden이 2048, doutput이 512로 이루어져있다. 즉, 인풋으로 sequencelength=n,n512 의 행렬이 들어온다면 n512의 행렬과 $512*2048*의 행렬, 두 행렬의 곱연산이 진행된다. 그런데 이를 시각화해보면

아이패드로 그린 발퀄그림 죄송합니다.

자연스럽게 각 단어가 독립적으로 같은 행렬에 곱해짐을 확인할 수 있다. 따라서 그냥 FFNN이 아닌 앞에 Position-wise라는 말이 붙은 것이다. 얼핏 보면 이런 방식이 각각의 단어가 같은 행렬에 곱해져서 의미보존이 혼잡해지는 것 아닌가 싶지만, hiddensizeinputsize에 비해 아주 크다는 것을 유의해야 한다. 즉, 딥러닝의 세계는 사람이 생각하는 것보다 훨씬 심오해서 어쩔 땐 직관적으로 이해하는 것이 방해될 때도 있다. 잡설을 하나만 더하자면 참 이름을 잘 지은 것 같다. 행렬연산의 당연한 원리를 갖고 이런 굉장히 그럴듯한 이름을 붙이다니.

 

아무튼 PFFN으로 다시 돌아오면,  dinput이 512, dhidden이 2048, doutput이 512라고 했으므로 위의 그림 뒤에 크기가 2048*512인 행렬이 하나 더 있다고 생각하면 된다. 따라서 이는 총 2층의 신경망이라고 볼 수 있으며, 위에서 언급한 Residual Connection에서 ResNet 저자들이 말한 두 층이나 세 층에서 효과적이라고 했던 상황에 부합한다.

 

PFFN의 역할을 짧게 정리하자면 모델의 깊이를 깊게 해줌으로써 학습 능력 강화, 그리고 ReLU같은 비선형 활성화 함수를 사용함으로써 비선형적 표현 확장이라고 할 수 있겠다. 물론 Multi-Head Attention에서도 비선형함수인 Softmax가 사용되긴 하는데, 이것만으론 부족할 수 있기도 해서 이렇게 인공신경망 한 레이어를 추가해준 것이 아닌가 싶다.

 

Output Probabilities

모든 과정이 다 끝나면 최종적으로 결과를 산출하기 위한 Linear Layer가 하나 남았다. 이 부분은 별 다른 게 아니라 그냥 임베딩 레이어라고 생각하면 된다. 

https://tiabet0929.tistory.com/86

 

[LLM] Attention is All You Need 의 Base Transformer 파라미터 수 계산

오랜만에 논문을 다시 읽다가 파라미터 수에 꽂혔다.  여기서 베이스 모델의 파라미터가 65M이라고 나와있길래, 재미삼아 GPT에게 물어봤는데, 당연히 위에 사진만 보여주면 환각 현상 때문에 65

tiabet0929.tistory.com

이 포스팅을 쓸 때도 언급했는데, Transformer는 결국 디코더를 통해 단어 생성이 목표이므로 최종적으로 어떤 단어를 생성할 지 결정하는 단계가 필수적이다. 이때 임베딩 레이어에서 사용된 Vdmodel을 전치한 dmodelV 크기의 Output Linear Layer가 사용된다. 본 논문에선 이를 인풋 임베딩 레이어와 공유한다고 되어있는데, 자세한 설명은 위 포스팅 참조. 이후 Softmax 함수를 활용해 어떤 단어가 가장 높은 확률로 예측되는지 계산, 단어를 생성하게 된다. 이 단계에서도 Beam-Search, Tok-p, Top-k 같은 알고리즘들이 사용될 수 있는데 이는 추후 다른 포스팅으로 정리하겠다.

 

 

쓰고 돌아보니 중간중간 언급하지 않은 것도 있는 것 같은데 (EX : Cross Attention), 이런 부분들은 나중에 따로 포스팅을 하던 수정을 하던 해야겠다.