저번 시간에는 간단하게
Transformer가 무엇인지
설명만 하려다
Self-Attention, 키-쿼리-밸류, 임베딩까지 알아보았는데요
이번 시간부터 Transformer를 체계적으로 공부해봅시다!
1. 키-쿼리-밸류(Key-Query-Value) 개념 및 셀프 어텐션(Self-Attention) 메커니즘
2. 임베딩(Embedding) 및 Positional Encoding
3. Multi-Head Attention
4. Layer Normalization
5. Residual Connection
6. 인코더와 디코더 구조
7. Transformer 모델의 학습과 최적화 방법 (학습률 스케줄링, 목표 함수 등)
이제부터 이 순서대로 계속 진행을 해보겠습니다!
먼저 저번 시간 배웠던
임베딩에 대해 기억하시나요?
한번 더 환기하고 가자면
임베딩(Embedding)은
임베딩은 범주형 변수(예: 단어, 문자)를 고정된 크기의 연속 벡터로 변환하는 과정입니다.
자연어 처리에서 단어와 같은 범주형 데이터를 모델이 처리하기 쉽게 만들 수 있으며,
단어 간의 의미적 관계를 나타낼 수 있습니다.
임베딩 레이어는 일반적으로 행렬(임베딩 행렬)로 표현되며,
각 행은 단어의 고유한 정수 ID에 대응하는 벡터를 나타냅니다.
초기에는 임베딩 행렬이 무작위 값으로 채워져 있지만,
모델이 학습되면서 이 행렬은 데이터로부터 의미 정보를 포착하는 벡터로 업데이트 됩니다.
그래서 저희는 저번 시간에 코드로
"I love AI"가
이렇게 값이 변환되는 것을
보았어요!
그 다음
오늘 처음 배우는
Positional Encoding
은 무엇이고,
Transformer에서 어떻게 사용되는지 알아봅시다.
Transformer는 순환(recurrent) 및 합성곱(convolutional) 연산을 사용하지 않기 때문에,
입력 시퀀스의 순서 정보를 주입할 방법이 필요합니다.
쉽게 말해서,
Positional Encoding을 통해 입력 시퀀스의 단어들 사이의 상대적인 위치 정보를
인코딩할 수 있게 되었습니다.
Positional Encoding은 이러한 순서 정보를 제공하는 방법 중 하나로,
고정된 벡터를 각 단어의 임베딩 벡터에 더하여 위치 정보를 포함시키는 방식입니다.
Positional Encoding은 다음과 같은 특징을 갖습니다:
- 각 위치에 대한 고유한 벡터를 생성합니다.
- 위치에 따라 점진적으로 변화하는 값(주기적 함수, 예: 사인 함수, 코사인 함수)을 사용하여 위치 정보를 인코딩합니다.
- 임베딩 벡터와 같은 차원을 가집니다.
Positional Encoding을 생성하기 위해, 다음 공식을 사용합니다:
PE(pos, 2i) = sin(pos / 10000^(2i / d_model))
PE(pos, 2i + 1) = cos(pos / 10000^(2i / d_model))
여기서 pos는 위치, i는 차원 인덱스, d_model은 임베딩 차원입니다.
이렇게 생성된 Positional Encoding 벡터는 입력 시퀀스의 각 단어에 해당하는 임베딩 벡터와 합산되어,
모델이 위치 정보를 활용할 수 있게 됩니다.
여기서 왜 sin, cos을 사용하고 10000이라는 숫자를 사용하는지 의문이 또 드실 텐데요.
10000
- Positional Encoding의 주기성을 설정하는 값입니다.
10000이라는 값은 큰 주기를 갖게 해주어 각 position에 대한 encoding이 독립적인 특성을 가질 수 있도록 도와줍니다.
또한, 이 값이 너무 작으면 인코딩된 위치 값이 서로 겹치게 되고,
너무 크면 인코딩 벡터의 차원이 커질 수 있어 계산 효율성이 떨어집니다.
따라서, 적절한 크기의 값을 설정해주는 것이 중요합니다.
논문에서는 이 값으로 10000을 사용하였습니다.
sin, cos 함수
- sin과 cos 함수를 사용하는 이유는 주기적이고 연속적인 값을 생성하기 위함입니다.
sin 함수와 cos 함수는 주기적인 함수이기 때문에 각 position에 대해 유사도를 측정할 수 있습니다.
또한, sin 함수와 cos 함수를 교차로 사용함으로써 인코딩 벡터의 각 차원이 독립적인 정보를 포함할 수 있게 합니다.
이를 통해 Transformer 모델이 입력 시퀀스의 순서 정보를 학습할 수 있습니다.
위와 같은 이유로 Positional Encoding에서 10000과 sin, cos 함수를 사용합니다. 이를 통해 Transformer 모델은 입력 시퀀스의 위치 정보를 포함하는 벡터를 얻을 수 있으며, 이 정보를 활용해 문장이나 문서의 구조를 이해할 수 있습니다.
충분히 의문이 해소되었나요?
이로 인해 아래와 같은 부분들이 개선되었습니다.
위치 정보 인식
- Transformer의 기본 구조는 위치에 대한 정보를 전혀 포함하지 않습니다.
이는 모델이 문장이나 시퀀스의 구조를 파악하는 데 어려움을 겪을 수 있음을 의미합니다. Positional Encoding을 추가함으로써,
모델은 위치 정보를 인식하고 이를 학습과정에 활용할 수 있게 됩니다.
문장 구조 이해
- Positional Encoding이 적용되면,
Transformer 모델은 문장 내 단어들의 순서와 문맥을 파악하는 데 도움을 받을 수 있습니다.
이를 통해 문장을 더 정확하게 분석하고 처리할 수 있게 됩니다.
시퀀스 간의 관계 학습
- Positional Encoding은 단어들 사이의 상대적 위치를 인코딩하기 때문에,
모델은 시퀀스 내에서 단어 간의 관계를 학습하는 데 도움을 받을 수 있습니다.
이는 문장 내 단어들의 의존 관계를 이해하는 데 큰 도움이 됩니다.
결론적으로,
Positional Encoding을 추가함으로써
Transformer 모델은 입력 시퀀스의 단어들 사이의 상대적 위치 정보를 활용하여 문장 구조와 문맥을 더 정확하게 파악할 수 있게 되어,
전반적인 성능이 향상됩니다.
그래서 Transformer_2에서 알려드린 코드에
이 부분만 추가한다면
입력 시퀀스의 단어들 사이의 상대적인 위치 정보도 추가 할 수 있습니다!
혹시 모르는 부분이 있으면 댓글 주시면 함께 알아봐요!
처음부터 지금까지 배운 것을 정리해보겠습니다.
Transformer: Transformer는 인코더와 디코더로 구성된 구조를 가지며,
자연어 처리 분야에서 뛰어난 성능을 보여주는 모델입니다.
이 모델은 기존의 RNN 및 LSTM에 비해 병렬 처리가 가능하여 학습 속도가 빠르고,
Self-Attention 메커니즘을 통해 문맥 정보를 효과적으로 학습합니다.
Self-Attention: Self-Attention은 입력 시퀀스 내의 각 단어가 다른 단어와 얼마나 관련되어 있는지를 측정하여
문맥 정보를 포착하는 메커니즘입니다.
이를 위해 Query, Key, Value 행렬을 사용하며,
스케일드 닷 프로덕트 어텐션을 계산하여 최종 결과를 얻습니다.
쿼리-키-밸류(Query-Key-Value): 쿼리, 키, 밸류는 Self-Attention 메커니즘에서 사용되는 행렬로,
각각 다른 가중치 행렬을 곱해 생성됩니다.
쿼리와 키의 행렬곱을 통해 어텐션 점수를 계산하고,
이를 밸류 행렬에 적용하여 최종 어텐션 결과를 얻습니다.
임베딩(Embedding): 임베딩은 범주형 변수(예: 단어, 문자)를 고정된 크기의 연속 벡터로 변환하는 과정입니다.
임베딩을 사용하면 단어와 같은 범주형 데이터를 모델이 처리하기 쉽게 만들고,
단어 간의 의미적 관계를 나타낼 수 있습니다.
Positional Encoding: Positional Encoding은 Transformer 모델에 입력 순서 정보를 제공하는 방법입니다.
임베딩 벡터에 위치 정보를 포함한 벡터를 더함으로써,
모델이 입력 시퀀스의 순서를 고려할 수 있게 됩니다.
Positional Encoding은 주로 사인과 코사인 함수를 사용하여 계산되며,
이를 통해 입력 시퀀스의 위치 정보를 학습하게 됩니다.
다음 시간에는
Multi-Head Attention에 대해 알아 보아요!
'AI > Transformer' 카테고리의 다른 글
Transformer_6(기초부터 심화까지) (0) | 2023.06.28 |
---|---|
Transformer_5(기초부터 심화까지) (0) | 2023.06.28 |
Transformer_4(기초부터 심화까지) (0) | 2023.06.28 |
Transformer_2(기초부터 심화까지) (0) | 2023.06.28 |
Transformer_1(기초부터 심화까지) (0) | 2023.06.28 |