elevne's Study Note
NLP 공부 (5-2: Transformer) 본문
Transformer 모델에서는 Self Attention Layer 이후 Feed-Forward Neural Network를 거치게된다. 이는 Position-wise Feedforward Network라고도 표현되며 한 문장에 있는 단어토큰 벡터 각각에 대해 연산하는 네트워크이다.
Transformer 모델은 Encoder과 Decoder로 분리되어 있긴 하지만 각각 Encoder, Decoder 안에 Hidde Layer을 쌓을 수 있다고 한다. Self Attention을 거치고 나온 결과값들을 FFN의 입력값으로 사용하여 Linear Layer(Dense)를 거치게 하는 것이다. 논문에서는 위 은닉층의 크기를 2048로 지정하여 사용하였고, 모델의 복잡도가 올라가는 것을 고려하여 Skip Connection과 Layer Normalization이 적용되었다고 한다.
Skip Connection
Skip Connection은 ResNet에서도 사용되는 것으로 하나의 단순한 연결 작업인데, 이는 층을 너무 깊이 쌓거나 노드 수를 크게 증가시킬 때 입력 정보가 여러 층을 거치면서 이전 층에 대한 정보손실이 일어나는 것을 방지하기 위해 고안된 방법이다. Skip Connection은 입력값을 타겟값으로 Mapping하는 함수를 구하는 과정에서 타겟값(y)를 입력값(x)의 대변으로 보고, H(x)-x를 찾는 과정을 학습하는 것으로, 네트워크의 입력과 출력이 더해진 것이 다음 층의 입력으로 사용되게 하는 기법이다.
Layer Normalization
또, Normalization이란 데이터의 범위를 사용자가 원하는 범위로 제한하는 것이다. MNIST 실습을 할 때 픽셀 값을 255로 나누어주는 것도 Normalization인 것이다. 이 기법들 중 Layer Normalization은 RNN에 많이 사용되는 기법으로 Batch에 있는 모든 Feature 각각의 평균과 분산을 구하여 각 Hidden Node의 Feature별 평균과 분산이 아닌 Hidden Layer 전체의 평균과 분산으로 Normalize를 진행하는 기법이다. 이와는 다르게 Batch Normalization은 CNN에서 자주 사용되고 미니 배치 샘플의 Feature 별로 평균과 분산을 구해서 표준정규분포로 전환해주는 기법이다.
Position-wise Feedforward Network의 코드는 아래와 같이 구성해볼 수 있다.
def positionwiseFeedforwardNetwork(hidDim, outDim):
return Sequential([
Dense(hidDim, activation="relu"),
Dense(outDim)
])
FFNN = positionwiseFeedforwardNetwork(hidDim, outDim)
layerNormalization = LayerNormalization(epsilon=1e-6)
dropout = Dropout(0.3)
output = FFNN(Self-Attention Output)
output = Dropout(output)
AddandNormOutput = output + Self-Attention Output
단순하게 Dense를 통해 Linear Layer를 ReLU 활성화함수를 활용하여 만들어준 것이다. 밑의 추가 코드를 통해서 Dropout, Layer Normalization, Residual Connection을 간단하게 더 추가해줄 수 있었다. 위 코드가 위 Transformer 모델 구조에서 Feed Forward와 Add & Norm에 해당하는 부분이라고 보면 되겠다.
출처:
https://sonsnotation.blogspot.com/2020/11/10-3-transformer-model.html
'Machine Learning > NLP' 카테고리의 다른 글
BERT 모델에 대해서~ (0) | 2022.11.01 |
---|---|
NLP 공부 (5-3: Transformer) (0) | 2022.10.28 |
NLP 공부 (5-1: Transformer) (0) | 2022.10.23 |
NLP 공부 (4-2: Seq2Seq with Attention) (0) | 2022.10.22 |
NLP 공부 (4-1: Seq2Seq with Attention) (0) | 2022.10.21 |