데이크루 5기

GPT4가 알려주는 Transformer_8(기초부터 심화까지)

2023.05.11 20:41 2,397 Views

Transformer_1 : https://dacon.io/competitions/official/236091/talkboard/408068?page=1&dtype=recent

Transformer_2 : https://dacon.io/competitions/official/236091/talkboard/408069?page=1&dtype=recent

Transformer_3 : https://dacon.io/competitions/official/236091/talkboard/408071?page=1&dtype=recent

Transformer_4 : https://dacon.io/competitions/official/236091/talkboard/408072?page=1&dtype=recent

Transformer_5 : https://dacon.io/competitions/official/236091/talkboard/408075?page=1&dtype=recent

Transformer_6 : https://dacon.io/competitions/official/236091/talkboard/408114

Transformer_7 : https://dacon.io/competitions/official/236091/talkboard/408237?page=2&dtype=recent


안녕하세요

이번 시간엔

Transformer의

Residual Connection

에 대해서 알아 봅시다!


먼저

Residual Connection이란?



이해가 되셨나요?


그렇다면

Residual Connection

의 장점과 단점을 알아 보아요!



이러한 장점과 단점이 있군요


근데 이 전에 대답에서는

Residual Connection이 쉬운 학습에 도움이 된다고 GPT4가 얘기했는데,

이번에는 단점으로 모델의 복잡성이 증가가 된다고 하네요?


학습이 쉽지만 모델의 복잡성이 증가한다?

약간 더 이해가 필요할 것 같아요





저는 모델이 복잡해진다는 의미가

학습이 어렵다와 유의어로 생각하고 있었는데

그게 아니었군요!


혹시 저처럼 생각하신분이 있으신가요?

그렇다면 이번 기회에

제대로 이해하고 가셨겠네요!




Residual Connection

코드를 살펴 봅시다!



제가 이전에 올린 코드들과 다 이어지는데요!


이 class를 간단히 설명드리겠습니다.


이 TransformerBlock 클래스는

Transformer 모델의 기본 구성 요소인 Transformer 블록을 정의합니다.

Transformer 블록은 멀티-헤드 어텐션과 피드 포워드 신경망의

두 개의 주요 부분으로 구성되어 있습니다


MultiHeadAttention은 입력의 서로 다른 부분에 대해 독립적으로 어텐션을 수행하며,

이를 통해 모델이 입력의 다양한 특성을 캡처할 수 있게 합니다.


LayerNormalization은 각 레이어의 출력을 정규화하여 학습을 안정화합니다.


피드 포워드 신경망(ffn)은 두 개의 선형 레이어와 ReLU 활성화 함수로 구성되어 있습니다.


forward 메서드에서는 이러한 요소들이 결합되어 Transformer 블록의 전체 작동을 구현합니다.


먼저, 입력 x는 멀티-헤드 어텐션 레이어를 통과하고, 그 출력(attn_output)은 원래의 입력 x와 합쳐집니다.


이것이 Residual Connection입니다.

그 후, 이 합산 결과는 Layer Normalization을 통과합니다.


다음으로,

이 출력은 피드 포워드 신경망을 통과하고,

그 출력(ffn_output)은 다시 원래의 출력(x)와 합쳐집니다.

이것이 또 다른 Residual Connection입니다.

마지막으로,

이 합산 결과는 두 번째 Layer Normalization 레이어를 통과하고,

그 결과가 반환됩니다.


이렇게 각 Transformer 블록은 입력을 받아서 어텐션을 수행하고,

이를 통해 얻은 정보를 사용하여 원래의 입력에 추가적인 정보를 주입합니다.

이 과정을 통해,

Transformer 블록은 입력 데이터의 다양한 특성을 캡처하고 이해하는 데 도움이 됩니다.




Residual Connection

에 대해서 이해가 잘 되셨나요?

궁금한 부분이 있다면

언제든지 댓글로 질문 부탁드립니다!