일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- qtdesigner
- error
- pyqt
- Inference
- TensorFlow
- keras
- 세계대전
- 블록체인
- 유로화
- 세계사
- 브렉시트
- 딥러닝
- terminal
- Python
- dtype
- itksnap
- img
- 비트코인
- Perceptron
- TF
- DataSet
- Training
- 퍼셉트론
- loss
- opencv
- deeplearning
- numpy
- 유가 급등
- cv2
- TFRecord
Archives
- Today
- Total
활연개랑
[Transformer] BERT와 ViT에서 CLS 토큰이 문장(또는 이미지)을 대표하는 이유 본문
반응형
Transformer 기반 모델에서는 하나의 시퀀스를 하나의 벡터로 요약해야 하는 경우가 많음.
예를 들어:
- 문장 분류: 한 문장을 하나의 벡터로 표현
- 이미지 분류: 한 장의 이미지를 하나의 벡터로 표현
이럴 때 가장 자주 사용되는 방식이 바로 CLS(Classification) 토큰 활용임.
CLS 토큰이란?
- BERT나 ViT 입력 시퀀스의 **맨 앞(0번째)**에 삽입되는 특수 토큰
- 사전 정의된 의미가 없는 "빈칸" 같은 토큰
- 모델이 학습을 통해 이 토큰에 의미를 부여하게 됨
왜 CLS 토큰이 시퀀스를 대표하게 될까?
1. 항상 같은 위치에 존재
- 입력 시 맨 앞에 삽입됨
- 위치 임베딩이 항상 고정됨
- 모델이 예측 대상을 일관되게 학습할 수 있음
2. 의미 없는 토큰 (초기 상태)
- 실제 단어나 이미지 정보가 없음
- → 자기 스스로 의미를 갖지 않음
- → 대신 다른 토큰들로부터 정보를 받는 데 최적화됨
3. Transformer의 Self-Attention 구조
- 모든 토큰이 서로 정보를 주고받음
- 특히 CLS는 모든 토큰과 attention을 수행
- → 문장 전체, 이미지 전체 정보를 종합할 수 있음
BERT에서의 CLS token
- 문장의 첫 토큰으로 입력됨 ([CLS] token)
- 문장 내 모든 단어와 상호작용
- 학습을 통해 자연스럽게 문장의 핵심 정보를 요약하는 벡터로 사용됨
"문장 분류"나 "Next Sentence Prediction" 같은 태스크에서는
바로 이 CLS 벡터를 가지고 예측 수행
ViT에서의 CLS token
- 이미지 패치를 시퀀스로 변환한 뒤, 맨 앞에 CLS 삽입
- 다른 패치들은 구체적인 시각 정보를 담고 있음
- 반면, CLS는 아무 정보도 없음 → 다른 패치들의 정보만 받아들임
- 결국 전체 이미지에 대한 요약 벡터 역할 수행
Summary
CLS 토큰 = "항상 고정된 위치 + 의미 없는 상태 + 전체 정보 수용"
→ 학습 과정에서 자연스럽게 시퀀스(문장/이미지)의 대표 벡터가 됨
특성설명
위치 | 항상 맨 앞, 고정된 위치 |
초기 의미 | 없음 (‘빈칸’) |
역할 | Attention으로 전체 정보를 수용 |
결과 | 시퀀스를 대표하는 벡터로 학습됨 |