단어를 숫자로 변환하는 과정 → 신경망이 이해할 수 있도록 단어를 고정된 차원의 벡터로 변환하는 단계
🔹 왜 필요한가?
컴퓨터는 텍스트를 직접 이해할 수 없기 때문에, 단어를 **숫자 벡터(임베딩 벡터)**로 변환해야 합니다.
🔹 어떻게 변환하는가?
예를 들어, 문장: "The cat sat on the mat"
단어별로 고정된 차원(예: 512차원)의 벡터로 변환
각 단어는 미리 학습된 벡터(Word2Vec, GloVe, BERT 등)를 가질 수도 있음
결과 예시(각 단어를 512차원의 벡터로 변환)
🔹 특징
✅ 같은 의미의 단어들은 비슷한 벡터값을 가짐 ✅ 고차원 벡터이므로 연산이 가능 (예: king - man + woman ≈ queen) ✅ 트랜스포머에서는 보통 512차원 또는 768차원으로 변환
📌 2. Positional Encoding (위치 인코딩)
트랜스포머는 단어의 순서를 모름 → 단어의 위치 정보를 추가해주는 과정
🔹 왜 필요한가?
트랜스포머는 RNN과 달리 단어를 한 번에(병렬로) 처리하기 때문에, 각 단어가 어떤 순서로 등장했는지 모릅니다. 따라서 위치 정보를 추가하는 Positional Encoding이 필요합니다.
🔹 어떻게 변환하는가?
각 단어 벡터에 사인(sin) & 코사인(cos) 함수 기반의 위치 정보를 더해줍니다.
이렇게 하면? 각 단어의 위치마다 고유한 벡터 값이 생성됨
멀리 있는 단어들의 관계도 학습 가능!
🔹 특징
✅ 같은 단어라도 문장에서 위치가 다르면 다른 벡터값을 가짐 ✅ 순서 정보가 포함되어 문맥을 더 잘 이해할 수 있음 ✅ RNN 없이도 문장의 순서를 반영 가능
📌 3. Self-Attention (셀프 어텐션)
입력 문장의 모든 단어가 서로 얼마나 중요한지를 계산하는 과정
🔹 왜 필요한가?
기존 RNN이나 CNN은 멀리 떨어진 단어들 간의 관계를 잘 반영하지 못함 하지만 Self-Attention을 사용하면 모든 단어들이 서로를 참고할 수 있음!
🔹 어떻게 작동하는가?
1️⃣ 입력 단어 벡터를 Query (Q), Key (K), Value (V)로 변환 2️⃣ Query와 Key의 내적(dot product) → 단어 간 유사도(어텐션 점수) 계산 3️⃣ Softmax를 적용해 가중치(중요도)를 부여 4️⃣ 가중치를 Value에 곱해서 새로운 단어 벡터 생성
예시 (문장: "The cat sat on the mat")
"cat"이 "sat"과 "mat"과 더 관련이 있음
따라서 "cat"의 어텐션 가중치는 "sat"과 "mat"에 더 많이 분배됨
🔹 특징
✅ 멀리 있는 단어도 쉽게 참고 가능 ✅ 병렬 연산이 가능하여 속도가 빠름 ✅ 기존 RNN보다 더 긴 문맥을 학습 가능
📌 4. Residual Connections (잔차 연결)
기존 정보를 유지하면서 새로운 정보를 추가하는 연결 방식
🔹 왜 필요한가?
트랜스포머에서는 여러 층을 쌓아 학습하기 때문에, Gradient Vanishing(기울기 소실) 문제가 발생할 수 있음. 이를 해결하기 위해 **잔차 연결(Residual Connection)**을 사용합니다.
🔹 어떻게 작동하는가?
기존의 정보를 유지하면서 새로운 정보를 더해줍니다.
여기서,
X는 원래 입력값
SubLayer(X)는 Self-Attention 또는 FFN(피드포워드 네트워크)의 결과
LayerNorm은 정규화 과정 (모델이 안정적으로 학습되도록 도움)
참고) FFN(Feed Forward Network)란, attention을 거친 정보를 더 정제하는 과정입니다. attention을 통해 얻은 정보를 더 잘 가공하기 위해, 각 단어 벡터에 **MLP(다층 퍼셉트론, Fully Connected Layer)**를 적용합니다.
📌 왜 필요한가? 어텐션을 거친 정보만으로는 단어 간의 관계만 반영됨FFN을 통해 단어의 의미를 더욱 풍부하게 만듦각 단어 벡터를 독립적으로 변환하여 더 정교한 표현 학습 ✅ 각 단어를 개별적으로 처리하여 모델 성능 향상 ✅ 비선형 변환을 추가하여 더 복잡한 패턴 학습 가능
예시) 원래 정보: "The cat sat on the mat" 새로운 정보: Self-Attention 결과) 원래 정보 + 새로운 정보 → 더 좋은 표현 학습 가능!
🔹 특징 ✅ 원래 정보가 유지되어 Gradient Vanishing 문제 방지 ✅ 학습 속도 향상 & 모델 안정화 ✅ 딥러닝 모델의 성능 향상
🚀 전체 흐름 요약
1️⃣ Word Embedding → 단어를 숫자로 변환 2️⃣ Positional Encoding → 위치 정보를 추가 3️⃣ Self-Attention → 단어 간 관계를 계산 4️⃣ Residual Connection → 원래 정보를 유지하면서 학습
🎯 결론
✅ Word Embedding: 단어를 숫자로 변환 ✅ Positional Encoding: 단어의 순서를 반영 ✅ Self-Attention: 각 단어가 다른 단어들과 얼마나 관련 있는지 계산 ✅ Residual Connection: 기존 정보 유지 + 새로운 정보 추가하여 학습 안정화
<EOS> 토큰이란?
<EOS>(End of Sequence) 토큰은 문장의 끝을 나타내는 특수 토큰입니다. Transformer, RNN, LSTM 등의 자연어 처리(NLP) 모델에서 문장이 끝났음을 표시하는 역할을 합니다.
📌 1. 왜 <EOS> 토큰이 필요할까?
자연어 처리 모델(예: 기계 번역, 텍스트 요약, 챗봇)에서 출력 문장의 길이를 미리 알 수 없기 때문입니다. 따라서 문장의 끝을 명확하게 알려주는 신호가 필요합니다.
✅ 예시: 기계 번역 모델
입력: "Hello, how are you?" 출력: "안녕하세요, 잘 지내세요. <EOS>" → <EOS>를 만나면 출력 종료!
✅ 예시: 텍스트 요약 모델
입력: "오늘 날씨가 매우 좋고, 기온이 따뜻합니다." 출력: "오늘 날씨 좋음. <EOS>" → <EOS>가 없으면 모델이 계속 출력을 반복할 수도 있음.
📌 2. <EOS> 토큰이 사용되는 곳
① 기계 번역 (Machine Translation)
모델이 번역된 문장의 끝을 알도록 사용됨.
② 텍스트 요약 (Text Summarization)
요약된 문장이 끝나는 지점을 나타냄.
③ 문장 생성 (Text Generation)
모델이 언제 출력을 멈출지 결정하는 기준이 됨.
챗봇 대화 생성
📌 3. <EOS> 토큰이 없다면?
<EOS>가 없다면 모델이 언제 출력을 멈춰야 하는지 모름 → 무한 반복 가능!
💡 예시: <EOS> 없는 기계 번역
➡ 모델이 멈추는 신호가 없어서 끝나지 않음.
📌 4. <EOS>와 관련된 다른 특수 토큰
토큰설명
<BOS>
Begin of Sequence (문장의 시작을 나타냄)
<EOS>
End of Sequence (문장의 끝을 나타냄)
<PAD>
Padding Token (고정된 길이를 맞추기 위해 사용)
<UNK>
Unknown Token (사전에 없는 단어를 대체)
✅ 예제 (문장 토큰화)
➡ <EOS> 이후의 <PAD> 토큰은 문장의 길이를 맞추기 위한 것.
📌 5. Transformer에서 <EOS> 사용 방식
Transformer 기반 모델(GPT, BERT, T5 등)에서도 <EOS>는 중요한 역할을 합니다.
✅ Encoder-Decoder 구조 (예: 번역 모델)
Encoder: <EOS>를 만나기 전까지 입력을 인코딩
Decoder: <EOS>를 생성하면 출력을 중단
✅ GPT (문장 생성 모델)
GPT는 <EOS>가 나오기 전까지 새로운 단어를 예측함.
예: "Once upon a time, there was a king. <EOS>" → <EOS> 이후에는 문장을 더 생성하지 않음.
🚀 정리
✔ <EOS> (End of Sequence) 토큰은 문장의 끝을 나타내는 특수 토큰 ✔ NLP 모델(번역, 요약, 챗봇 등)에서 출력 종료 신호 역할 ✔ <EOS>가 없으면 모델이 무한 루프에 빠질 수 있음 ✔ Transformer, RNN, GPT 등 다양한 NLP 모델에서 사용됨
인코딩(Encoding) vs 디코딩(Decoding) 과정 정리
트랜스포머 모델에서 **인코딩(Encoding)**은 입력 문장을 이해하는 과정, **디코딩(Decoding)**은 입력 문장을 바탕으로 새로운 문장을 생성하는 과정입니다.
아래 표를 통해 인코딩과 디코딩의 전체 구조를 같은 형식으로 비교하면서 설명하겠습니다.
📌 1. 트랜스포머 인코딩(Encoding) vs 디코딩(Decoding) 과정 비교표
단계인코딩 과정 (Encoding) 디코딩 과정 (Decoding)
1️⃣ 입력 임베딩 (Input Embedding)
입력 문장(단어)을 고정된 차원의 벡터로 변환
시작 토큰 <BOS>을 벡터로 변환
2️⃣ 위치 인코딩 (Positional Encoding)
단어 순서를 모델이 알 수 있도록 위치 정보 추가
단어 순서를 고려하여 위치 정보 추가
3️⃣ 셀프 어텐션 (Self-Attention)
모든 단어가 서로를 참고하며 의미를 학습
Masked Self-Attention을 사용하여 미래 단어를 보지 않도록 차단
4️⃣ 인코더-디코더 어텐션 (Encoder-Decoder Attention)
❌ 사용되지 않음 (디코더에서만 사용됨)
인코더의 정보를 참고하여 번역/생성 수행
5️⃣ 피드포워드 네트워크 (FFN, Fully Connected Layer)
단어 벡터를 정제하여 더 유용한 정보로 변환
단어 벡터를 정제하여 최종적인 표현 생성
6️⃣ 잔차 연결 & 정규화 (Residual Connection & Normalization)
모델이 안정적으로 학습되도록 원래 정보 유지
모델이 안정적으로 학습되도록 원래 정보 유지
7️⃣ 소프트맥스(Softmax) 및 출력
❌ 인코더의 최종 벡터가 생성됨 (단어 예측 X)
다음 단어를 확률적으로 예측하여 생성
8️⃣ 반복 수행
모든 단어를 한 번에 처리하여 인코더 출력 완성
<EOS>가 나올 때까지 단어를 하나씩 생성
📌 2. 트랜스포머 인코딩(Encoding) 과정
💡 입력 문장을 모델이 이해할 수 있도록 변환하는 과정
1️⃣ 입력 임베딩 (Input Embedding)
단어를 벡터로 변환 (예: 512차원)
"Hello" → [0.12, -0.34, 0.67, ..., 0.89]
2️⃣ 위치 인코딩 (Positional Encoding)
단어 순서를 모델이 이해할 수 있도록 위치 정보 추가
사인/코사인 함수 기반의 벡터 추가
3️⃣ 셀프 어텐션 (Self-Attention)
모든 단어가 서로를 참고하여 문맥을 이해
Query(Q), Key(K), Value(V)를 사용하여 유사도 계산
"Hello"와 "World"가 얼마나 연관되어 있는지 분석
4️⃣ 피드포워드 네트워크 (FFN, Fully Connected Layer)
단어 벡터를 더 정제하여 의미를 강화
비선형 변환 (ReLU 등) 추가
5️⃣ 잔차 연결 & 정규화 (Residual Connection & Normalization)
원래 정보를 유지하면서 새로운 정보를 추가하여 학습 안정화
6️⃣ 최종 인코더 출력 생성
입력 문장이 문맥을 포함한 벡터 표현으로 변환됨
이 벡터는 디코더에서 사용됨
📌 3. 트랜스포머 디코딩(Decoding) 과정
💡 인코더에서 얻은 정보를 바탕으로 새로운 문장을 생성하는 과정
1️⃣ 입력 임베딩 (Input Embedding)
디코더의 입력(출력 문장의 앞부분) <BOS>을 벡터로 변환
2️⃣ 위치 인코딩 (Positional Encoding)
단어 순서를 고려하여 위치 정보 추가
3️⃣ 마스크드(Self) 어텐션 (Masked Self-Attention)
현재까지 예측된 단어만 참고하도록 마스크 적용
"안녕"을 예측할 때 "하세요"는 보지 못하도록 설정
4️⃣ 인코더-디코더 어텐션 (Encoder-Decoder Attention)
인코더에서 나온 정보를 참고하여 번역/생성 진행
"Hello"를 보고 "안녕하세요"를 예측
5️⃣ 피드포워드 네트워크 (FFN, Fully Connected Layer)
단어 벡터를 정제하여 최종적인 표현 생성
6️⃣ 잔차 연결 & 정규화 (Residual Connection & Normalization)
원래 정보를 유지하면서 새로운 정보를 추가하여 학습 안정화
7️⃣ 소프트맥스(Softmax) 및 출력 단어 선택
확률이 가장 높은 단어를 선택하여 예측
"안녕하세요" (95%) 선택
8️⃣ 반복 수행하여 문장 완성
<EOS>가 나올 때까지 반복 수행
최종 출력: "안녕하세요. <EOS>"
📌 4. 인코딩 vs 디코딩의 주요 차이점
구분인코딩(Encoding)디코딩(Decoding)
입력
전체 문장을 한 번에 입력
시작 토큰 <BOS>을 입력
출력
문맥을 포함한 벡터 생성
새로운 문장을 단어 단위로 생성
어텐션
셀프 어텐션(Self-Attention)만 사용
마스크드 어텐션 + 인코더-디코더 어텐션 사용
순서
모든 단어를 동시에 처리
단어를 하나씩 예측하여 생성
소프트맥스 사용 여부
❌ 없음
✅ 단어 생성 시 사용
종료 조건
모든 단어를 한 번에 처리
<EOS> 토큰이 생성될 때까지 반복
📌 5. 트랜스포머의 인코딩 & 디코딩 과정 한눈에 보기
1️⃣ 인코딩 (Encoding)
입력 문장을 벡터로 변환 (임베딩)
위치 정보를 추가하여 순서 반영
셀프 어텐션을 통해 문맥을 학습
피드포워드 네트워크로 의미를 정제
최종 인코더 출력을 생성
2️⃣ 디코딩 (Decoding)
<BOS>에서 시작하여 단어를 하나씩 예측
마스크드 어텐션을 통해 미래 단어 차단
인코더-디코더 어텐션을 통해 입력 문장 참고
소프트맥스를 이용해 가장 적합한 단어 선택
<EOS>가 나올 때까지 반복 수행하여 문장 완성
🚀 결론
✅ 인코딩(Encoding)은 입력 문장을 벡터로 변환하는 과정 ✅ 디코딩(Decoding)은 인코더의 정보를 바탕으로 새로운 문장을 생성하는 과정 ✅ 디코더는 인코더보다 더 복잡한 어텐션 구조를 사용 (Masked Self-Attention + Encoder-Decoder Attention) ✅ 최종적으로 디코더는 <EOS>가 나올 때까지 반복해서 문장을 생성
Encoder-Decoder Attention이란?
Encoder-Decoder Attention은 트랜스포머의 **디코더(Decoder)**에서 사용되는 중요한 어텐션 메커니즘으로, 인코더(Encoder)의 출력을 참고하여 디코더가 새로운 단어를 생성하도록 돕는 역할을 합니다.
➡ 즉, 디코더가 단어를 생성할 때 입력 문장과 어떻게 연관되어 있는지를 학습하는 과정! ➡ 기계 번역, 텍스트 요약, 질문 응답 같은 자연어 처리(NLP) 작업에서 핵심 역할!
📌 1. Encoder-Decoder Attention이 필요한 이유
✅ 단순한 Self-Attention만으로는 부족함
트랜스포머의 **디코더(Decoder)**는 문장을 생성할 때 기존에 생성한 단어들만 참고할 수 있습니다. 하지만, 입력 문장의 정보를 고려하지 않으면 문맥을 반영한 정확한 예측이 어려움
💡 예시 (영어 → 한국어 번역)
예시)영어 -> 한국어 번역
여기서 "앉았다" 다음 단어를 예측할 때, "on the mat"이 중요하지만 디코더는 인코더의 정보를 참고하지 않으면 이를 알 수 없음!
➡ 그래서 Encoder-Decoder Attention을 사용하여 인코더의 정보를 참고하는 것! ➡ 이 과정이 없으면 번역이 문맥과 다르게 이상해질 수 있음!
📌 2. Encoder-Decoder Attention의 동작 방식
💡 Encoder-Decoder Attention은 Self-Attention과 비슷하지만, 중요한 차이점이 있음!
🔹 Self-Attention: 같은 문장 내의 단어들이 서로를 참고 🔹 Encoder-Decoder Attention:인코더(입력 문장)와 디코더(출력 문장)를 연결하는 역할
✅ 입력 문장을 디코더가 참고하여 다음 단어를 생성하도록 도움 ✅ Query(디코더)와 Key/Value(인코더)를 연결하여 문맥을 반영한 출력 생성
📌 3. Encoder-Decoder Attention의 연산 과정
Encoder-Decoder Attention은 Query, Key, Value를 사용하여 동작합니다.
요소 설명
Query (Q)
디코더의 현재 상태
Key (K)
인코더의 출력 벡터
Value (V)
인코더의 출력 벡터 (Key와 동일)
📌 수식 (어텐션 스코어 계산)
1️⃣ Query (Q): 디코더에서 현재까지 생성된 문장을 입력하여 생성 2️⃣ Key (K): 인코더의 출력(입력 문장의 정보를 포함한 벡터) 3️⃣ Value (V): 인코더의 출력 벡터에서 중요한 정보를 가져옴 4️⃣ 어텐션 점수 계산: Query와 Key를 내적하여 유사도 계산 5️⃣ 소프트맥스 적용: 가장 관련 있는 단어에 더 높은 가중치를 부여 6️⃣ 가중치를 적용하여 Value 벡터 조정 7️⃣ 최종 결과: 디코더가 인코더의 정보를 반영하여 더 정확한 단어를 생성
📌 4. Encoder-Decoder Attention의 예제
💡 영어 → 한국어 번역 예제 ("The cat sat on the mat." → "고양이가 매트 위에 앉았다.")
Step 1: 인코더의 출력
여기서X1, X2, X3, X4, X5는 각각 "The", "cat", "sat", "on", "the mat"의 정보가 포함된 벡터
Step 2: 디코더가 단어를 하나씩 생성
1️⃣ "고양이"를 예측할 때 (Query = "<BOS>")
Query가 <BOS> (시작 토큰)일 때,
인코더의 "cat"과 "the"를 가장 중요하게 참고
"고양이" 생성!
2️⃣ "매트"를 예측할 때 (Query = "고양이")
Query가 "고양이"일 때,
인코더의 "mat"과 "on"을 참고
"매트" 생성!
3️⃣ "앉았다"를 예측할 때 (Query = "매트")
Query가 "매트"일 때,
인코더의 "sat"을 가장 중요하게 참고
"앉았다" 생성!
➡ 이 과정이 반복되면서 문장을 완성함!
📌 5. Encoder-Decoder Attention vs Self-Attention
구분 Self-Attention Encoder-Decoder Attention
역할
문장 내 단어 간 관계 학습
인코더 정보 활용하여 단어 생성
Query
디코더 내부에서 생성
디코더에서 생성
Key & Value
디코더 내부에서 생성
인코더에서 생성
사용 위치
인코더 & 디코더 둘 다 사용
디코더에서만 사용
✅ Self-Attention은 같은 문장 내 단어들 간의 관계를 학습 ✅ Encoder-Decoder Attention은 입력 문장과 번역 결과를 연결
📌 6. Encoder-Decoder Attention이 없으면?
입력 문장의 정보를 참고하지 못하면 문장이 엉뚱하게 생성될 가능성이 높음!
💡 잘못된 번역 예시 (Encoder-Decoder Attention 없음)
➡ 번역과 전혀 관련 없는 문장이 생성될 가능성이 있음.
💡 올바른 번역 예시 (Encoder-Decoder Attention 있음)
➡ 입력 문장의 정보를 참고하여 정확한 번역 수행!
📌 7. Encoder-Decoder Attention의 주요 특징
✅ 입력 문장을 참고하여 문맥을 반영한 출력 생성 ✅ 디코더가 입력 문장의 중요한 부분에 집중하도록 도움 ✅ 기계 번역, 텍스트 요약 등에서 필수적으로 사용됨 ✅ 입력 문장이 길어도 특정 단어에 집중하여 더 자연스러운 문장 생성 가능
🚀 결론
✅ Encoder-Decoder Attention은 디코더가 인코더의 정보를 참고하여 단어를 생성하는 과정 ✅ Query(디코더) & Key/Value(인코더)를 사용하여 문맥을 반영 ✅ 기계 번역, 텍스트 요약, 문장 생성 같은 NLP 작업에서 핵심적인 역할 수행 ✅ 입력 문장을 제대로 반영하지 않으면 엉뚱한 출력을 만들 수도 있음