본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

공부 시작

강의 종료

강의장

학습 인증샷

학습후기

 

 

ch03-17. Transformer

 

등장 배경

RNN / LSTM : 긴 문장을 기억하지 못함

CNN : 국소적인 관계는 잘 학습하지만 문맥을 학습하지 못함

->  Transformer는 모든 단어를 병렬로 동시에 보고 각 단어가 다른 단어들과의 관계를 스스로 학습할 수 있게 함.

 

핵심 구조

[입력 문장] → [인코더 블록] → (중간 표현) → [디코더 블록] → [출력 문장]

 

Encoder

입력받은 문장을 문맥 정보가 담긴 벡터로 변환

 

Decoder

인코더의 출력과 현재까지 생성한 단어를 바탕으로 다음 단어 예측

번역 요약 생성등에 사용됨

 

입력 처리 과정

[토큰] → [임베딩] + [포지셔널 인코딩] → 인코더 입력

 

 

Transformer의 장점

병렬 처리

문맥 이해

범용성

구조 단순


 

이론은 알겠지만 그래서 Transformer가 어떤 의도로 개발되었고 어떻게 작동하는지 아직 모르겠다.

 

Attention은 왜 사용했지?

-> 기존 RNN은 바로 앞 단어만 보고 한 글자씩 처리하기 때문에 느리고 문맥을 이해 못 했다.

Attention을 통해 모든 단어를 동시에 보고 어떤 단어가 중요한지 학습하게 했다.

 

 

Multi-Head Attention은 그냥 Attention이랑 뭐가 다르지?

-> 한 번의 Attention으로는 단면적인 문맥만 학습하는 한계가 있다.

여러 개의 Q, K, V를 만들고 병렬로 Attention을 수행해 다양한 시선으로 문맥을 풍부하게 학습한다

 

 

transformer 학습 시나리오 흐름

 

[입력] → [임베딩 + 위치 정보]  
       → [Q, K, V 만들기]  
       → [모든 단어와 비교해 attention score 계산]  
       → [중요한 단어의 정보를 가중 평균해서 문맥 벡터 생성]  
       → [FeedForward로 고차원 의미 변환]  
       → [반복하면서 깊은 의미 이해]

 


Transformer의 학습 과정은 이해했는데 그래서 실제 추론은 어떻게 하는거지?

어떻게 이 구조 하나로 번역, 요약, 대화, 추천을 할수있지?

 

모델이 문맥을 벡터로 이해한 건 알겠다.

그런데 그 문맥 벡터를 가지고 어떻게 추론하지?

 

-> 문맥 벡터는 "지금 이 위치에서 어떤 단어가 가장 어울리는가"를 표현한 벡터

이 벡터를 Softmax + 선형 변환을 거쳐서 입력에 대해 가장 적절한 단어를 골라내어 출력한다.

 

음,,, 아직도 이해를 못 하겠다.

대화의 경우에는 a 질문에 대해 문맥에 맞는 답변을 문맥 벡터를 참조해서 출력한다. 의 경우에는 이해가 되는데

문맥 벡터를 가지고 어떻게 번역을 하는거지?

 


한국어 문장을 인코딩했다고 치자. 근데 영어 단어는 어디서 나오는 건데? 영어는 입력도 안 했잖아?

 

Transformer의 공통 구조

[입력 시퀀스] → [문맥 벡터 생성 (via Attention)] → [선형 변환 + Softmax] → [출력 선택 or 생성]

 

 

전제: 트랜스포머는 "인코더–디코더" 구조

구성:

  • 인코더: 한국어 문장을 입력받아서 문맥을 요약한 벡터를 만듦
  • 디코더: 영어 문장을 하나씩 생성함.
    → 이때 이전에 생성한 영어 단어들과 인코더의 문맥 벡터를 함께 사용함

학습 시 vs 추론 시의 차이

                         영어가 어떻게 들어오나
학습 시 정답 문장(영어)을 미리 알고 있으니까 → 디코더 입력에 같이 넣어줌
추론 시 단어를 하나씩 생성 → 이전 출력만 입력에 넣고, 다음 단어를 예측

 

f(x)=y일때

그러니까 학습시에 x, y를 둘다 input으로 넣으면

Transformer는 Encoder에서 x는 문맥 벡터로 만들고

그 문맥 벡터와 y를 Decoder에 넣어 그 다음에 나올 정답 토큰을 예측하도록 학습한다.

 

추론할 때 

x만 input으로 넣고

Encoder에서 문맥 벡터를 받은 뒤

첫 단어를 생성한다.

 

그 다음에는 이전에 생성한 단어들을 하나씩 Decoder에 넣으며 다음 단어를 반복해서 예측한다.


Encoder에서 받은 문맥 벡터는 학습시에 만든 문맥 벡터 그대로 사용하는건가?

 

gpt 질문과 답변

학습할 때 만든 문맥 벡터를 추론할 때 다시 쓰는 건가요,
아니면 추론 때 이어서 학습하거나 업데이트하나요?

➡️ 답은 아주 명확해:

추론할 때는 학습할 때 만든 문맥 벡터를 쓰지 않고, 새로 만든다.
추론 도중에는 추가 학습이나 업데이트가 전혀 일어나지 않는다.

 

 

??????

 

✅ 핵심 개념: 트랜스포머의 학습 vs 추론

구분설명
학습(training) 모델 파라미터(=weight)를 수정하며 지식을 습득하는 과정
추론(inference) 학습된 파라미터를 **고정(freeze)**한 상태로 결과만 예측하는 과정

따라서:

  • 학습 때 문맥 벡터는 단지 파라미터를 업데이트하기 위한 중간 계산 결과
  • 추론 때는 **입력 xx**가 들어오면 그걸 기반으로 처음부터 다시 계산
  • 그 과정에서 모델은 학습된 weight를 그대로 사용하고,
    새로운 문장을 위한 문맥 벡터를 새로 만드는 것

그러면 weight(가중치)는 뭐고 context vector(문맥 벡터)는 뭐지?

 

가중치 = 기억(지식)

문맥 벡터 = 이해(상황판단)

 

 

 

 

 

 

아하

Transformer도 일종의 딥러닝 모델이고 따라서 여러 층의 뉴런(레이어)으로 구성된 신경망이다.
이 신경망 내부에서 context vector는 ‘중간 계산 결과물’로 사용된다.

모델은 학습된 파라미터(weight)를 기반으로 입력 문장에서 context vector를 실시간으로 생성하고
이 벡터들을 바탕으로 softmax를 통해 최종 출력(단어, 응답 등)을 추론한다.


진짜 마지막 의문

그러면 추론에서 context vector는 어떻게 사용되는거지

 

context vector는 "지금 이 위치에서 어떤 단어가 가장 어울리는지"를
모델이 판단할 수 있게 해주는 벡터이고,
마지막 출력층에서 softmax를 통해 단어를 선택하는 데 직접 사용된다.

 

학습에서 context vector를 사용하는 방식과 같구나,,,