참조:https://arxiv.org/pdf/1706.03762.pdf
HISTORY
1. RNN (Recurrent Neural Networks, 1986):
시퀀스 모델링의 초기 형태로 순환 신경망(RNN)이 등장했습니다.
시간적 의존성을 모델링할 수 있어 다양한 응용 분야에서 활용되었으나, 긴 시퀀스를 다루거나 장기 의존성(Long-Term Dependencies)을 처리하는 데 어려움이 있었습니다.
2. LSTM (Long Short-Term Memory, 1997):
LSTM은 RNN의 한계를 극복하기 위해 제안된 모델로, 장기 의존성 모델링이 가능합니다.
주가 예측 및 주기 함수 예측과 같은 시계열 데이터 예측 문제에 적용되며 많은 응용 분야에서 좋은 성과를 얻었습니다.
3. Seq2Seq (Sequence-to-Sequence, NIPS 2014):
LSTM을 활용하여 시퀀스 변환 모델을 탄생시킵니다.
기존의 딥러닝 기술들과 함께 발전하며, 기계 번역 및 자연어 처리 분야에 큰 영향을 미칩니다.
고정된 크기의 context vector를 사용하여 번역을 수행하며, 입력 문장을 고정 크기의 벡터로 압축해야 하는 한계가 있었습니다.
4. Attention (ICLR 2015):
Seq2Seq 모델에 어텐션(Attention) 기법을 도입하여 성능을 향상시킬 수 있음을 보여줍니다.
어텐션 메커니즘을 사용하면 입력 시퀀스 전체에서 정보를 동적으로 추출할 수 있어, 성능을 향상시킬 수 있습니다.
5. Transformer (NIPS 2017):
Transformer는 RNN을 사용하지 않고 어텐션 메커니즘에만 의존하는 아키텍처를 제안합니다.
이 모델의 도입으로 시퀀스 모델링 분야에서 RNN이 더 이상 필요하지 않음을 제시하며 어텐션 메커니즘의 중요성을 강조합니다.
입력 시퀀스 전체에서 정보를 추출할 수 있는 어텐션 기법을 따르는 방식으로 다양한 고성능 모델이 개발되었습니다.
기존 Seq2Seq 모델들의 한계점
Seq2Seq 모델의 주요 문제 중 하나는 입력 소스 문장의 모든 정보를 하나의 고정된 크기의 "context vector"에 압축해야 하기 때문에 성능이 제한되었던 것입니다. 이로 인해 장기 의존성 문제와 입력 문장 길이에 대한 제한이 발생했습니다.
해결 방안으로 "Attention" 메커니즘을 도입한 것은, 모델이 인코더에서 나온 모든 출력을 디코더에 전달하고, 디코더가 매번 필요한 정보에 집중하는 데 도움이 됩니다. 즉, "Attention" 메커니즘은 디코더가 인코더의 모든 출력 중에서 어떤 부분에 주의를 기울여야 하는지 동적으로 결정할 수 있도록 합니다.
이렇게 하면 모델은 더 많은 문맥 정보를 활용하고 장기 의존성 문제를 해결할 수 있으며, 더 유연하게 입력 문장의 길이에 대응할 수 있게 됩니다. Self-Attention은 이러한 목적으로 나왔으며, 인코더와 디코더 모두에서 이를 사용함으로써 모델의 성능을 크게 향상시켰습니다.
1. Model Architecture
Transformer 모델은 인코더 입력은 소스 시퀀스의 입력 임베딩(input embedding)에 위치 정보(positional encoding)을 더해서 만듭니다. RNN(Recurrent Neural Network)은 기본적으로 시퀀스 데이터를 처리하는 모델입니다. 시퀀스 데이터의 각 요소(예: 단어 또는 타임 스텝)가 순차적으로 처리되기 때문에 자연스럽게 포지션 정보가 내재되어 있는 모델입니다. 따라서 RNN에서는 포지션 인코딩을 별도로 필요로 하지 않습니다. 반면에, Transformer 모델은 모든 입력 요소를 병렬로 처리합니다. 각 입력 요소 간의 관계를 모델링하기 위해 Self-Attention 메커니즘을 사용하며, 이로써 병렬 처리가 가능하며 긴 시퀀스도 효과적으로 처리할 수 있습니다. 그러나 Self-Attention 메커니즘은 위치 정보를 고려하지 않기 때문에 위치 정보를 별도로 포지션 인코딩으로 추가해줘야 합니다. Transformer 모델은 임베딩 과정에서포지션 인코딩을 추가하여 위치 정보를 보존하고, 각 입력 토큰의 상대적인 위치를 학습할 수 있도록 합니다.
Transformer 모델의 출력층에서 소프트맥스 함수를 적용하면 모델은 주어진 입력에 대한 각 가능한 타깃 토큰에 대한 확률을 출력합니다. 이것은 다음 토큰 예측 문제에서 매우 중요한 역할을 합니다. 예를 들어, 소스 언어의 어휘가 총 3만개라고 가정하면 이 벡터의 차원수는 3만이 되며 3만 개 요솟값을 모두 더하면 그 합은 1이 됩니다. 이 벡터는 디코더에 입력된 타깃 시퀀스의 다음 토큰 확률 분포를 가리킵니다. 디코더는 현재까지 생성된 번역 문장의 다음 단어가 무엇인지 예측할 때 소프트맥스 함수를 사용하여 가능한 모든 단어에 대한 확률을 계산합니다. 이러한 확률 분포를 활용하여 가장 가능성 높은 다음 단어를 선택하고 예측함으로써 문장을 생성하거나 번역 작업을 수행합니다. 이것은 기계 번역, 텍스트 생성, 언어 모델링과 같은 자연어 처리 작업에서 매우 중요한 구성 요소 중 하나입니다.
소프트맥스(softmax) 함수는 출력 벡터의 모든 요소를 0 이상 1 이하의 범위로 조절하고, 이들 요소의 합을 1로 만드는 함수입니다. 이 함수는 입력 벡터를 확률 분포로 변환하는 데 사용됩니다. |
1-1. Encoder :
인코더는 N=6개의 동일한 레이어(layer)로 구성되어 있습니다. 각 레이어는 두 개의 서브-레이어(sub-layer)로 이루어져 있습니다. 첫 번째 서브-레이어는 멀티헤드 셀프 어텐션 메커니즘을 사용하고, 두 번째는 간단한 위치별 완전 연결(feed-forward) 신경망입니다. 각각의 두 서브-레이어 주위에는 잔여 연결(residual connection)을 사용합니다. 이어서 레이어 정규화(layer normalization)를 수행합니다. 이것은 각 서브-레이어의 출력이 LayerNorm(x + Sublayer(x))가 되도록 하는 것을 의미합니다. 여기서 Sublayer(x)는 서브-레이어 자체에 의해 구현된 함수를 나타냅니다. 이러한 잔여 연결을 용이하게 하기 위해 모델 내의 모든 서브-레이어와 임베딩 레이어는 출력 차원이 dmodel = 512가 되도록 합니다.
- Transformer 모델에서는 각 서브-레이어의 출력이 잔여 연결(Residual Connection) 및 레이어 정규화(Layer Normalization)를 통해 모델이 깊어질수록 그래디언트 소실 및 폭발 문제를 완화하고 학습을 안정화하합니다.
Encoder Self-Attention: 모델이 문맥을 파악하고 각각의 단어가 서로에게 어떠한 연관성을 가지는지 구합니다.
1-2. Decoder :
디코더 역시 N = 6개의 동일한 레이어로 구성됩니다. 디코더는 인코더와 달리 각 두 개의 서브-레이어(Masked Decoder Self-Attention, feed-forward) 외에도, 인코더 스택의 출력에 대한 멀티헤드 어텐션을 수행하는 세 번째 서브-레이어(Encoder Decoder Attention)를 삽입합니다. 인코더와 마찬가지로 각 서브-레이어 주변에 잔여 연결이 적용되며, 이어서 레이어 정규화가 이루어집니다.
Masked Decoder Self-Attention: 과거 시점 입력값을 예측할 때 미래 시점 입력값을 참고하는것을 방지한다.
Encoder Decoder Attention: Q가 디코더에 있고 K,V는 인코더에 있는 경우, 인코더의 출력값과 디코더의 입력값을 이용한다.
2.Self-Attention
2-1. Scaled Dot-Product Attention
Query (Q): 영향을 받는 벡터(물어보는 주체)
Key,(K): 영향을 주는 벡터(물어보는 대상)
Value (V): 주는 영향의 가중치 벡터
스케일드 닷 프로덕트 어텐션(Scaled dot-product Attention)
Self-Attention 메커니즘의 핵심 요소 중 하나로, 입력 시퀀스 내 단어 간의 상호작용과 중요성을 동적으로 학습하는 과정입니다. 이 과정에서 먼저 Query(Q)와 Key(K)를 내적하여 "Attention score"를 계산합니다. 그러나 Query와 Key의 차원이 커질수록 내적 값은 Attention score도 커지므로 모델의 학습에 어려움을 줄 수 있습니다. 이를 해결하기 위해 차원 d_k의 루트만큼을 나누어주는 스케일링 작업을 진행합니다. 그 다음, 정규화를 위해 softmax 활성 함수를 적용하여 각 단어의 상대적 중요성을 나타내는 확률 분포를 얻습니다. 마지막으로, 보정을 위해 지금까지 계산된 score 행렬과 Value(V) 행렬을 내적하여 최종 Attention 행렬을 얻게 됩니다.
공식
예시
"I am a student."라는 문장이 있다고 가정하겠습니다. 여기서 각 단어를 Attention 메커니즘을 사용하기 위해 임베딩을 해주어야 합니다. 위에서 단어 "I"의 임베딩이 [1, 1, 1, 1]이라 했을 때 처음 I의 처음 Query, Key, Value를 각각 Q_I, original, K_I,original, V_I,original라고 합니다. 이 값들은 Self Attention 메커니즘에서 같아야 되기 때문에 모두 [1, 1, 1, 1]로 동일합니다. 이때 각각 학습된 weight 값이 WQ, WK, WV라고 할 때. 이를 위에서 처럼 original값들과 점곱을 해주면 최종적은 Q, K, V값이 도출됩니다.
이 Q, K, V값을 이용해 위에서 설명한 보정 Attention score을 주해주면 위와 같이 1.5라는 값이 나옵니다. 행렬 Q, K는 서로 점곱을 해주고, 여기서 행렬 Q, K, V의 차원은 4이므로 루트 4를 나누어준 것입니다.
이 과정을 "I" 뿐만 아니라 모든 단어간에 Self Attention을 해주면 위 그림과 같은 결과가 나옵니다. 가운데 노란색 부분은 자기 자신에 대한 Attention이므로 당연히 값이 제일 크고, 양쪽 초록색 부분을 보면 이 역시 점수가 높습니다. 따라서 단어 "I"와 "student"사이의 상관관계가 있는 것을 확인할 수 있습니다.
"I am a student."의 Self Attention
도식화
예문: I Love You
1.
2.
3.
Self-Attention 메커니즘의 핵심 아이디어는 Query, Key, Value의 기본값이 동일하게 시작되며, 최종 Query, Key, Value 값은 학습을 통해 결정된다는 것입니다. 이를 "Self" attention이라고 부르는 이유는 주어진 입력 시퀀스 내에서 각 요소(예: 토큰 또는 단어)이 서로간의 관계를 파악하고 서로에게 가중치(weight)를 할당하는 과정이 자기 자신에게 이루어지기 때문입니다.
추가 설명: Query, Key, Value의 초기 값은 같지만, 중간에 학습된 weight W에 의해 최종 Query, Key, Value 값이 달라지는데, 이것이 Self-Attention의 핵심 특성입니다. Query, Key, Value의 초기 출발점은 동일하지만, 모델은 학습을 통해 이러한 값을 조정하며, 각 단어 또는 토큰 간의 관계와 상대적인 중요성을 동적으로 학습합니다.
1. Query, Key, Value의 초기 값은 입력 시퀀스의 각 요소(토큰 또는 단어)로부터 생성됩니다.
2. 이러한 초기 값들은 학습을 통해 변화하며, 입력 시퀀스의 각 요소간의 상호작용을 나타내는 가중치로 변환됩니다.
3. 이 변환된 Query, Key, Value를 사용하여 모델은 입력 시퀀스의 각 요소에 대한 출력을 생성합니다.
차원 d_k의 루트만큼을 나누어주는 스케일링 작업을 하는 이유 1. 큰 값의 내적을 방지: 내적 값이 너무 큰 경우, 소프트맥스 함수를 통과하면 활성화 값이 매우 작아질 수 있습니다. 이로 인해 역전파(backpropagation) 과정에서 기울기가 지나치게 작아지며, 기울기 소실 문제가 발생할 수 있습니다. 2. 안정성과 수렴성 향상: 스케일링 작업을 통해 내적 값을 적절하게 제한함으로써 모델의 안정성을 높이고 수렴 속도를 향상시킵니다. 큰 값의 내적은 학습을 어렵게 만들 수 있으므로 이를 제어하여 모델이 빠르고 안정적으로 수렴하도록 돕습니다. 3. 모델 일반화: 스케일링 작업을 통해 각 단어 간의 상대적 중요성을 조절함으로써 모델이 다양한 입력에 대해 더 잘 일반화되도록 돕습니다. 이는 모델이 다양한 문제와 입력에 대해 높은 성능을 유지하는 데 중요합니다. 4. 고유성 유지: 스케일링은 내적 결과를 조절하면서도 단어 간의 상대적 관계를 유지합니다. 이것은 Self-Attention 메커니즘이 자체적으로 중요한 관계를 학습하고 표현할 수 있도록 합니다. |
2-2. Multi-Head Attention
멀티헤드 어텐션(Multi-Head Attention)
Transformer 모델의 핵심 구성 요소 중 하나로, 모델이 다양한 관점에서 정보를 수집하고 학습하는 데 도움을 주는 메커니즘입니다. 이는 모델의 표현력을 향상시키고, 입력 데이터의 다양한 관계와 패턴을 캡처하는 데 중요한 역할을 합니다. 또한 주어진 입력 벡터를 여러 개의 서로 다른 하위 차원으로 나누고, 각 하위 차원에서 어텐션 메커니즘을 수행합니다. 이렇게 얻은 여러 개의 어텐션 결과를 다시 합쳐서 최종 출력을 생성합니다.
공식
어텐션 d_model의 차원을 가진 벡터를 num_heads로 나누고, 그 나눈 차원을 가지는 Q, K, V 벡터로 바꿔 어텐션을 수행했습니다. 논문 기준으로 512의 차원의 각 단어 벡터를 num_heads인 8로 나누어 64차원의 Q, K, V 벡터로 바꾸어서 어텐션을 수행하였습니다. Transformer 모델은 한 번의 어텐션을 하는 것보다 어텐션을 병렬로 여러번 사용합니다. 그래서 d_model의 차원을 num_heads개로 나누어서 d_model/num_heads의 차원을 갖는 Q, K, V에 대해 num_heads개의 병렬 어텐션을 수행했습니다. 논문에서는 하이퍼파라미터인 num_heads를 8로 정했고, 8개의 병렬 어텐션이 이뤄집니다. 다시 말해 위에서 설명한 어텐션이 8개로 병렬로 이루어지는데, 이때 각각의 어텐션 값 행렬을 어텐션 헤드라고 부릅니다. 이때 가중치 행렬의 값은 8개의 어텐션 헤드마다 전부 다릅니다. 위 그림은 Multi-head Attention 메커니즘을 도식화한 것입니다. 보다시피 head의 수만큼 Attention을 각각 병렬로 나누어 계산을 합니다. .
병렬 어텐션:어텐션을 병렬로 수행하여 다른 시각으로 정보들을 수집하겠다는 의미입니다.예시: 그 동물은 길을 건너지 않았다. 왜냐하면 그것은 너무 피곤하였기 때문이다. 풀이: 단어 '그것'이 쿼리였다고 하면, Q 벡터로부터 다른 단어와의 연고나도를 구하였을 때 첫 번째 어텐션 헤드는 '그것'과 '동물'의 연관도를 높게 본다면, 두 번째 어텐션 헤드는 '그것'과 '피곤하였기 때문이다'의 연관도를 더 높게 볼 수 있습니다. 각 어텐션 헤드는 전부 다른 시각에서 보고 있기 때문입니다. |
병렬 어텐션을 모두 수행하였다면 모든 어텐션 헤드를 연결(concatenate)합니다.
모든 어텐션 헤드를 연결(concatenate):멀티헤드 어텐션의 결과를 조합하여 더 풍부한 정보를 얻고, 모델의 표현력(representation power)을 향상시키기 위함입니다. 이를 통해 모델은 다양한 관점에서의 정보를 종합하여 더 정확한 예측과 효과적인 학습을 수행할 수 있습니다. |
어텐션 헤드 결과에 대한 가중치 행렬을 곱하여 최종 출력을 계산합니다. 이렇게 함으로써 입력 디멘젼과 출력 디멘젼이 같도록 조절됩니다.
Transformer 모델에서 출력 디멘젼과 입력 디멘젼의 크기는 일치해야 합니다.
|
3. Feed-Forward Network
FFN(x) = max(0, xW1 + b1)W2 + b2
멀티 헤드 어텐션의 출력은 입력 단어들에 대응하는 벡터 시퀀스입니다. 이후, 각 벡터를 피드포워드 뉴럴 네트워크에 입력합니다. 피드포워드 뉴럴 네트워크는 신경망의 한 종류로, 입력층 (input layer, x), 은닉층 (hidden layer, ℎ), 출력층 (output layer, y)과 같이 세 개의 계층으로 구성됩니다. 각 계층은 여러 개의 뉴런 (neuron)으로 표현되며, 뉴런은 입력과 가중치를 고려하여 출력을 계산합니다.
피드포워드 뉴럴 네트워크는 입력 데이터를 다양한 계산을 거쳐 출력으로 변환하는 역할을 합니다. 멀티 헤드 어텐션의 각 출력 벡터는 피드포워드 뉴럴 네트워크의 입력으로 사용됩니다. 이것은 각 벡터가 피드포워드 뉴럴 네트워크의 입력층으로 들어가고, 이어서 은닉층을 거쳐 출력층에서 최종 예측을 만들어냅니다. 이 과정에서 가중치와 활성화 함수를 사용하여 입력 정보를 처리하고 출력을 생성합니다.
계산 과정
입력층 뉴런이 각각 [2,1][2,1]이고 그에 해당하는 가중치가 [3,2][3,2], 바이어스(bias)가 1이라고 가정해 보겠습니다. 그러면 은닉층 첫번째 뉴런 값은 2×3+1×2+1=92×3+1×2+1=9가 됩니다. 이 값은 양수이므로 ReLU를 통과해도 그대로 살아납니다.
입력이 동일하고 입력에 대한 가중치가 [2,−3][2,−3]이라면 은닉층 두번째 뉴런 값은 2×2+1×−3+1=22×2+1×−3+1=2가 됩니다. 이 값은 양수이므로 ReLU를 통과해도 그대로 살아남습니다.
입력이 동일하고 입력에 대한 가중치가 [−4,1][−4,1]이라면 은닉층 세번째 뉴런 값은 2×−4+1×1+1=−62×−4+1×1+1=−6이 됩니다. 하지만 이 값은 음수이므로 ReLU를 통과하면서 0이 됩니다.
은닉층 처리를 마치고 이제 출력층을 계산할 차례입니다. 은닉층 뉴런이 각각 [9,2,0][9,2,0]이고 그에 대응하는 가중치가 [−1,1,3][−1,1,3]이라면 출력층 첫번째 뉴런 값은 9×−1+2×1+0×3−1=−89×−1+2×1+0×3−1=−8이 됩니다.
은닉층 뉴런값이 동일하고 그에 대한 가중치가 [1,2,1][1,2,1]이라면 출력층 두번째 뉴런 값은 9×1+2×2+0×1−1=129×1+2×2+0×1−1=12가 됩니다.
RELU함수(활성화 함수) 양수 입력은 그대로 흘려보내되 음수 입력은 모두 0으로 치환해 무시합니다 ![]() |
4. Positional Encoding
논문에서 Positional Encoding에 사인(Sine)과 코사인(Cosine) 함수를 사용하는 이유는 두 가지입니다.
첫째, 위치 벡터 값이 너무 커지지 않습니다. 사인과 코사인 함수는 주기 함수로서, 그 값의 범위가 일정합니다. 일반적으로 이들 함수의 출력 범위는 -1부터 1까지입니다. 이는 위치 벡터 값이 너무 커지지 않도록 해줍니다. 만약 위치 벡터 값이 크다면 이것은 모델이 위치 정보를 과도하게 중요시하고, 다른 정보를 무시하게 할 수 있습니다.
둘째, 다른 위치에 있는 토큰들은 서로 다른 위치 벡터 값을 가져야 합니다. 이는 토큰 간의 상대적인 위치를 나타내는 중요한 역할을 합니다. 그러나 사인과 코사인 함수처럼 주기 함수를 사용하면 위치 벡터 값이 주기적으로 변하기 때문에, 서로 다른 위치의 토큰에 대해 서로 다른 위치 벡터를 얻을 수 있습니다. 이러한 방식으로, 모델은 각 토큰 간의 상대적인 위치를 파악할 수 있게 됩니다.
즉, 사인과 코사인 함수를 사용함으로써 위치 정보를 적절하게 표현하고, 각 토큰 간의 상대적인 위치를 명확하게 구분할 수 있게 됩니다.
위치 정보(또는 순서 정보)를 모델에 제공하는 방법을 선택할 때, 두 가지 주요 접근 방법과 각각의 한계를 고려하고 있습니다.
첫번째, 데이터에 0부터 1까지의 레이블을 부여하는 방법: 첫 번째 단어에는 0, 마지막 단어에는 1과 같은 레이블을 할당합니다. 이 방법의 한계점은 입력의 총 크기를 알 수 없다는 것입니다. 따라서 "delta" 값(단어의 레이블 간 차이)이 일정한 의미를 가지지 않는다는 단점이 있습니다.
두번째, 각 타임 스텝(time-step)에 선형적으로 번호를 할당하는 방법: 각 단어는 단어의 위치에 따라 1, 2, 3과 같이 숫자를 갖습니다. 이 방법은 입력의 크기에 따라 가변적이며 "delta" 값이 일정하게 유지되므로 일반화에 어려움을 겪을 수 있습니다. 모델은 학습 단계에서 보다 작은 값을 가진 입력보다 큰 값을 가진 입력을 처리해야 할 때 문제가 발생할 수 있습니다.
이상적인 위치 인코딩 방법은 다음과 같은 기준을 충족해야 한다
- 각 타임 스텝마다 하나의 고유한 인코딩 값을 출력해야 합니다.
- 서로 다른 길이의 입력 시퀀스에서 두 타임 스텝 간의 거리는 일정해야 합니다.
- 모델에 대한 일반화가 가능해야 합니다. 즉, 더 긴 입력 시퀀스가 주어질 때도 적용될 수 있어야 합니다. 순서 정보를 나타내는 값은 특정 범위 내에 있어야 합니다.
- 하나의 키(key) 값처럼 일정하게 결정되어야 합니다. 다른 입력에서 매번 다른 값이 나와서는 안 됩니다.
Transformer 모델에서 사용된 위치 인코딩 방법은 이러한 기준을 충족합니다. 이 방법은 하나의 숫자가 아니라 "d-dimensional vector"로 특정 위치 정보를 나타내며, 이 벡터는 각 단어에 부여되어 문장 내 위치 정보를 나타냅니다. 또한, 이 인코딩은 모델 내부에서 사용되지 않으며, 단어의 위치 정보를 나타내기 위해 입력을 확장합니다. 이는 모델이 입력 데이터의 크기에 영향을 받지 않도록 합니다.
https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
Transformer Architecture: The Positional Encoding - Amirhossein Kazemnejad's Blog
Transformer architecture was introduced as a novel pure attention-only sequence-to-sequence architecture by Vaswani et al. Its ability for parallelizable training and its general performance improvement made it a popular option among NLP (and recently CV)
kazemnejad.com
5.training
optimizer
논문에서는 Adam optimizer를 사용하고 있으며, 특정한 학습률 스케줄링 전략을 사용하고 있습니다
Adam optimizer
- β1 = 0.9: 모멘텀 하이퍼파라미터
- β2 = 0.98: 이동평균 하이퍼파라미터
- ϵ = 10^(-9): 작은 값으로 분모가 0이 되는 것을 방지하기 위한 작은 상수.
특정한 학습률 스케줄링 전략
Warmup_steps = 4000.
- 까지는 linear하게 learning rate를 증가시키다가, 이후에는 의 inverse square root에 비례하도록 감소시킵니다.
- 초기에는 학습이 잘 되지 않은 상태이므로 learning rate를 빠르게 증가시켜 변화를 크게 주다가, 학습이 꽤 됐을 시점에 learning rate를 천천히 감소시켜 변화를 작게 주기 위해서입니다.
이러한 전략은 모델의 초기화와 안정성을 개선하고, 학습이 고려한 목표로 더 빠르게 수렴하도록 도와줍니다. warmup_steps 이후의 감소는 학습을 안정적으로 유지하고, overshooting을 방지합니다.
의 inverse square root에 비례하도록 감소시킵니다." learning_rate( 학습률 ) = initial_learning_rate / sqrt(step_num) 여기서 initial_learning_rate은 학습률의 초기값이고, step_num은 현재 학습 단계를 나타냅니다. 이렇게 학습률을 설정하면 학습률은 학습 단계가 진행됨에 따라 step_num의 역 제곱근에 비례하여 감소하게 됩니다. 이것은 학습 초기에는 큰 학습률로 빠르게 학습이 진행되고, 나중에는 작은 학습률로 안정적으로 수렴하게 도와줍니다. |
Regularization
Residual Dropout:
- Residual Dropout은 각 서브레이어(sub-layer)의 출력에 드롭아웃(Dropout)을 적용하는 기술입니다.
- 이 드롭아웃은 서브레이어의 출력이 서브레이어 입력에 추가되고 정규화되기 전에 수행됩니다.
- 또한, 임베딩(embeddings)과 위치 인코딩(positional encodings)의 합에도 드롭아웃을 적용하며, 이는 인코더와 디코더 스택 모두에서 이루어집니다.
- "Pdrop = 0.1"로 설정된 드롭아웃 비율을 사용하며, 이는 모델의 출력에 10%의 드롭아웃을 의미합니다.
Residual Dropout은 모델이 더 안정화되고 더 일반화되도록 도와주며, 과적합을 줄이고 모델의 성능을 향상시키는 데 중요한 역할을 합니다.
일반적인 Dropout은 훈련 중에 무작위로 선택한 뉴런(유닛)을 비활성화시키는 기술로, 여러 다른 뉴런의 정보를 학습하고 다양한 입력에 대한 강건한(reliable) 특성을 개발합니다 |
Label Smoothing:
- Label Smoothing은 훈련 중에 사용되는 정규화 기술로, 모델의 출력과 정답 레이블 간의 손실(loss)을 조절하고 부드럽게 만드는 것을 목적으로 합니다.
- Label Smoothing은 모델이 레이블 예측에 너무 확신을 갖지 않도록 돕는 정규화 방법입니다.
- "ϵls = 0.1"로 설정된 label smoothing 값이 사용되며, 이는 레이블 스무딩이 10%의 손실을 추가한다는 것을 나타냅니다.
Label Smoothing은 모델이 정답 레이블에 대해 너무 확신을 가지지 않도록 하며, 모델이 훈련 데이터에 지나치게 적응하지 않게 돕는 역할을 합니다.
6. Why Self-Attention
Self-Attention 레이어와 Recurrent( 순환 ) 및 Convolutional( 합성곱 ) 레이어와의 비교
Computational Complexity (계산 복잡성):
Self-Attention 레이어 는 각 위치 간에 일정 수의 순차적인 연산을 수행하여 계산 복잡성이 상수입니다. 이와는 대조적으로, Recurrent 레이어 는 입력 시퀀스의 길이 n에 비례하여 O(n)의 순차적 연산이 필요하므로 계산 복잡성이 선형으로 증가합니다. Self-Attention 레이어는 주로 입력 시퀀스의 길이 n이 표현 차원 d보다 작을 때 효율적으로 동작하며, 이러한 상황은 자연어 처리 모델에서 흔히 발생합니다.
Parallelization (병렬화):
Self-Attention 레이어 는 각 위치 간에 독립적인 연산을 수행할 수 있어 병렬화가 용이하며, 이로 인해 최소한의 순차적 연산을 필요로 합니다. 이와는 대조적으로, Recurrent 레이어 는 입력 시퀀스의 선후관계를 고려하는 데 순차적인 연산이 필요하므로 병렬화가 어렵습니다.
Path Length (경로 길이):
학습 중에 모델이 두 위치 간의 신호 전달 경로의 길이는 중요한 요소입니다. Self-Attention 레이어 는 모든 위치 간에 고정된 길이의 경로를 가지므로 장거리 의존성을 학습하기에 용이합니다. 반면, Recurrent 레이어 의 경우 입력 길이에 비례하여 경로 길이가 증가합니다. Convolutional 레이어 는 입력과 출력 위치 간의 경로를 늘리기 위해 일반적으로 더 많은 레이어가 필요하며, 이는 모델의 경로 길이를 증가시킵니다.
Interpretable Models (해석 가능한 모델):
Self-Attention 레이어 는 모델을 해석 가능하게 만드는 이점을 가질 수 있습니다. Self-Attention 레이어 메커니즘을 통해 각 위치와 Attention head가 서로 다른 작업을 수행하는 것으로 나타납니다. 이는 모델의 내부 작동을 해석하고 이해하는 데 도움이 됩니다. 또한, Self-Attention 레이어 는 문장의 구문 및 의미 구조와 관련된 정보를 나타내며, 모델의 예측과 의사 결정을 이해하기 쉽게 만들 수 있습니다.
- n= 시퀀스 길이/ d= 표현 차원/ k= 합성곱 커널 크기/ 일반적으로 n<d 이다
위의 표에 볼 수 있듯이 레이어당 복잡성, 순차 연산 수, 그리고 최대 경로 길이 측면에서 Self-Attention 레이어 은 Recurrent 레이어 , Convolutional 레이어 비해 더 적은 순차 연산을 필요로 하며, 이는 계산 복잡성 측면에서 효율적인 구조를 가지고 있다는 것을 나타냅니다.
7. Experiments
1. Machine Translation
영어-독일 및 영어-프랑스 언어 번역 작업에서 다양한 모델들의 BLEU 점수와 훈련 비용(FLOPs)을 보여줍니다. Transformer 모델은 이 두 작업에서 이전 최첨단 모델에 비해 높은 BLEU 점수를 달성하면서도 상대적으로 낮은 훈련 비용을 갖고 있음을 나타냅니다. Transformer 모델은 효율적인 훈련과 뛰어난 성능을 결합하여 이러한 작업에서 우수한 결과를 보이고 있습니다.
2. 모델 변형
Transformer의 다양한 구성 요소의 중요성을 평가하기 위해, 우리는 기본 모델을 다양한 방식으로 변형하고, 영어-독일 번역 작업에서의 성능 변화를 측정했습니다.
(A) 행에서는 attention head의 수와 attention key 및 value 차원을 변경하여 연산 양을 일정하게 유지하면서 모델의 품질을 변화시킨 실험 결과를 보여줍니다. single-head Attention [24.9] 가 가장 좋은 설정(head=16) [25.8] 에 비해 0.9 BLEU 포인트 낮은 성능을 보이지만, 너무 많은 헤드 [25.4] 도 품질 저하에 영향을 미칩니다.
(B) 행에서는 Attention key 크기를 줄이면 모델 품질이 감소하는 것을 관찰하였습니다. 기존의 닷 프로덕트(dot product)와 같은 간단한 호환성 함수로는 모델의 성능을 극대화하기에 충분하지 않을 수 있습니다. 더 정교한 호환성 함수가 유용할 수 있음을 제안합니다. 따라서 더 정교하고 복잡한 호환성 함수가 사용될 때 모델의 품질을 향상시킬 수 있을 것으로 제안하고 있습니다.
(C)와 (D) 행에서는 모델의 크기를 늘릴수록 모델의 품질이 향상되는 것을 관찰하며, 드롭아웃(dropout)이 과적합(overfitting) 방지에 매우 유용하다는 사실을 확인했습니다.
(E) 행에서는 삼각함수 기반의 위치 인코딩 대신 학습된 위치 임베딩을 사용한 결과로, 기본 모델과 거의 동일한 결과를 얻었다고 설명하고 있습니다. 따라서 위치 인코딩 방법을 바꿔도 모델의 성능에 큰 차이가 없습니다
3. 영어 구문 분석
이 연구에서는 Transformer 모델이 다른 작업에도 일반화될 수 있는지를 평가하기 위해 영어 수식 구문 분석(Constituency Parsing)에 대한 실험을 수행했습니다. 이 연구에서는 특별한 도전을 제공합니다. 출력이 강력한 구조 제약 조건을 따르며 입력보다 크게 길다는 특징이 있습니다. 또한, RNN 시퀀스-시퀀스 모델은 작은 데이터 환경에서 최첨단 결과를 달성하지 못했습니다.
Penn Treebank(텍스트 데이터 세트)의 일부인 Wall Street Journal (WSJ)에서 약 4만 개의 훈련 문장을 사용하여 dmodel = 1024인 4층Transformer를 훈련시켰습니다. 또한 약 1700만 개의 문장을 가진 큰 고신뢰도 데이터와 BerkleyParser 코퍼스를 활용한 반지도 학습 환경에서 훈련했습니다. WSJ 전용 환경에서는 16,000 토큰으로 된 어휘를 사용하였으며, 반지도 학습 환경( semi-supervised setting)에서는 32,000 토큰으로 된 어휘를 사용하였습니다.
연구에서는 dropout 을 선택하고 attention 와 residual 에 대한 실험을 소수 진행하였습니다. 또한, learning rates 와 beam size 와 같은 다른 매개변수는 영어-독일어 기본 번역 모델에서 변경되지 않았습니다. 최대 출력 길이를 입력 길이 + 300으로 증가시켰으며, beam size 는 21이었고 α는 0.3으로 설정되었습니다.
결과적으로, 학습에 특화된 튜닝이 없었음에도 불구하고 Transformer모델은 놀랍도록 좋은 성과를 보여주었으며, 기존 모델들 중에서 유일한 예외로 순환 신경망 언어 모델에 밀리지 않고 최상의 성과를 내는 것을 보여줍니다. RNN 기반의 시퀀스-시퀀스 모델과 비교할 때 Transformer는 BerkeleyParser보다 더 나은 성능을 보여주며, WSJ 훈련 세트의 4만 개 문장만을 사용하여 훈련한 경우에도 성능이 우수합니다.
semi-supervised setting: 일반적으로 레이블이 부족한 상황에서 모델을 훈련시키는 방법 중 하나입니다. 이 설정에서 모델은 부분적으로 레이블이 있는 데이터와 부분적으로 레이블이 없는 데이터를 모두 사용하여 학습됩니다 |
beam size: 디코딩 단계에서 사용되는 파라미터 중 하나입니다. 번역 모델은 다양한 다음 단어 선택지를 고려할 수 있으며, "beam size"는 이 선택지의 수를 나타냅니다. 더 큰 beam size는 더 많은 번역 후보를 유지하고 다음 단어를 선택할 때 더 많은 다양성을 가질 수 있지만, 계산 비용이 더 많이 들고 처리 시간이 늘어날 수 있습니다. 따라서 beam size는 번역 품질과 속도 간의 트레이드오프(상충 관계)를 조절하는 데 사용됩니다. |
7. Conclusion
이 연구에서는 Transformer라는 새로운 시퀀스 변환 모델을 제안하였습니다. 이 모델은 기존에 주로 사용되던 Recurrent layers 대신, Attention 메커니즘을 완전히 기반으로 하며, 인코더-디코더 아키텍처에서 사용됩니다. Transformer는 번역 작업을 비롯한 다양한 작업에서 기존의 Recurrent 또는 Convolutional layers 를 사용하는 모델에 비해 빠른 훈련 속도를 제공합니다. 특히 WMT 2014의 영어-독일 번역 및 영어-프랑스 번역 작업에서 우리의 모델은 최고 수준의 성과를 달성하였으며, 영어-독일 번역에서는 이전에 보고된 모든 앙상블 모델을 능가했습니다.
논문의 저자는 Attention메커니즘을 기반으로 하는 모델의 미래에 흥미를 느끼며, 이를 다른 작업에도 확장할 계획입니다. 텍스트 이외의 입력 및 출력 모달리티를 다루는 작업과 이미지, 오디오, 비디오 등과 같이 큰 입력 및 출력을 효율적으로 처리하기 위한 local, restricted attention메커니즘을 연구할 계획입니다. 또한, 생성 과정을 더욱 병렬화하고 순차적이지 않게 만드는 것도 연구의 중요한 목표 중 하나입니다.
앙상블 모델: 여러 개의 다른 모델을 조합하여 하나의 예측을 만드는 머신 러닝 기술입니다. 각 개별 모델은 동일한 작업을 다르게 학습하거나, 다른 데이터 부분 집합에 대해 학습할 수 있습니다. 이러한 다양한 모델의 예측을 조합하여 최종 예측을 수행하므로 앙상블은 단일 모델보다 더 나은 성능을 달성할 수 있습니다. |
local, restricted attention mechanisms: Attention 메커니즘을 제한하여 모델이 입력 데이터의 특정 부분에만 집중을 기울이는 방법을 나타냅니다. 이것은 모델이 전체 입력 데이터를 처리하는 대신 필요한 정보에만 집중을 기울이도록 하는 제한된 Attention 메커니즘입니다. 입력 및 출력의 크기가 매우 큰 데이터에 대해 효율적으로 처리할 수 있도록 설계되었습니다 |
논문을 읽으며. 궁금한 점
Self-Attention Vs Attention
Self-Attention:
단어 간의 관계성 연산 결과를 활용하여 연관성 높은 단어끼리 연결해주기 위해 활용합니다. 즉, Self-Attention은 하나의 시퀀스 내의 요소 간의 관계를 모델링합니다. 입력 시퀀스 내의 각 요소가 서로 어떻게 관련되어 있는지를 파악합니다. 이것은 주로 시퀀스 내에서 장기 의존성을 처리하거나 각 단어의 의미와 관련성을 파악하는 데 사용됩니다. Transformer와 같은 아키텍처에서 self-attention은 입력 시퀀스 내의 각 단어의 관련성을 계산하여 모델이 장기 의존성 및 단어 간의 상호 작용을 파악할 수 있게 합니다.
Self-Attention의 특징
- 장기 의존성 처리:
- "Self-Attention"은 입력 시퀀스 내의 모든 요소 간의 관계를 모델링할 수 있어, 장기 의존성 문제를 효과적으로 처리합니다.
- 각 단어 간의 관련성을 계산하여 모든 정보를 동시에 활용할 수 있기 때문에 초기 정보의 손실이 없습니다.
- 양방향 모델링:
- "Self-Attention"은 입력 시퀀스 내의 모든 단어에 대한 어텐션을 계산하므로 양방향 모델링이 가능합니다.
- 양쪽 방향의 단어에 대한 정보를 활용하여 문장의 의미를 파악하고 장기 의존성을 처리할 수 있습니다.
Attention:
Decoder에서 출력 단어를 예측하는 시점마다 Encoder에서의 전체 입력 문장을 다시 한번 참고하는 것으로 예측하는 단어와 연관이 있는 단어를 좀 더 집중(Attention)하여 보는 것을 뜻합니다. 즉, Attention은 주어진 입력 시퀀스와 다른 시퀀스 간의 관계를 모델링합니다. 이것은 대개 번역, 요약, 질문 응답 및 이미지 캡션 생성과 같은 작업에서 사용됩니다. 입력 시퀀스와 출력 시퀀스 간의 관련성을 계산하고 각 입력 요소에 대한 가중치를 생성하여 출력을 생성합니다. 예를 들어, 번역 작업에서 입력 문장의 각 단어에 대한 가중치를 계산하여 번역 문장의 각 단어를 생성하는 데 사용할 수 있습니다.
Attention의 특징
- Bottleneck 현상 해결
기존 Seq2Seq Model에서 Encoder의 마지막 Time Step의 Hidden State Vector만 활용할 경우 초기 정보가 손실 되는 문제가 발생하였습니다.
이러한 문제를 해결하기 위해 Attention이 등장하게 되었고, Encoder의 모든 Hidden state vector를 구해 Decoder 연산에 활용하게 됩니다.
- Gradient Vanishing 문제 해결
전체 과정을 순차적으로 지나며 학습을 거치는 것이 아니라, Attention Score를 통해 연산한 Attention Output값만을 활용해 학습이 진행되기 때문에 Time Step을 거치지 않고 빠르게 값을 전달해 줄 수 있게 됩니다.
정리
첫번째. Q, K, V 생성:
"Attention"에서 Q는 디코더 셀에서, K와 V는 인코더 셀에서 생성됩니다.
"Self-Attention"에서 Q, K, V는 모두 동일한 임베딩 벡터에서 생성됩니다.
두번째.Time Step:
"Attention"은 이전 레이어에서 반환된 은닉 상태 벡터를 활용하며, 시간 단계(Time Step)에 따라 연산이 진행됩니다.
"Self-Attention"은 단어 단위로 모든 단어에 대한 어텐션 점수를 계산하므로 이전 단어의 연산 결과가 현재 단어의 연산에 영향을 미치지 않기 때문에 시간 단계(Time Step)의 의미가 없습니다.
세 번째. 장기 의존성 및 데이터 보존:
"Attention"은 각 단계에서 은닉 상태 벡터를 다음 레이어로 전달하여 초기 정보가 누락될 수 있습니다.
"Self-Attention"은 각 단어에 대한 어텐션을 통해 모든 단어의 정보를 동시에 활용하므로 초기 정보가 보존되며 장기 의존성을 처리할 수 있습니다.
네 번째. 방향성:
"Attention"은 보통 좌에서 우 또는 우에서 좌로의 단방향 모델로 작동합니다.
"Self-Attention"은 모든 단어에 대한 어텐션을 동시에 계산하므로 양방향 모델로 작동하며 방향성의 제한이 적습니다.
출처:
16-01 트랜스포머(Transformer)
* 이번 챕터는 앞서 설명한 어텐션 메커니즘 챕터에 대한 사전 이해가 필요합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 Attention i…
wikidocs.net
(논문)모델을 훈련하고 사용한 코드:
https://github.com/ tensorflow/tensor2tensor" target="_blank" rel="noopener" data-mce-href="http:// https://github.com/ tensorflow/tensor2tensor">http:// https://github.com/ tensorflow/tensor2tensor
GitHub: Let’s build from here
GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...
github.com
트랜스포머 전체 코드:
https://github.com/ukairia777/tensorflow-transformer
GitHub - ukairia777/tensorflow-transformer: 텐서플로우2로 구현한 트랜스포머 챗봇 구현체 (TensorFlow implement
텐서플로우2로 구현한 트랜스포머 챗봇 구현체 (TensorFlow implementation of 'Attention Is All You Need') - GitHub - ukairia777/tensorflow-transformer: 텐서플로우2로 구현한 트랜스포머 챗봇 구현체 (TensorFlow implementatio
github.com