교차 어텐션
어텐션 attention
- 어텐션: 여러 정보 중 현재 처리에 필요한 정보를 선택하여 결합하는 방법
- 모든 정보를 같은 비중으로 사용하는 대신, 관련성이 높은 정보에 큰 가중치를 부여
- 쿼리(Query), 키(Key), 밸류(Value)를 사용
- 쿼리: 지금 필요한 정보를 찾기 위한 요청
- 키: 각 정보가 무엇과 관련되는지 비교하기 위한 표지
- 밸류: 선택되었을 때 실제로 가져올 내용
검색에 비유하면 쿼리는 검색어, 키는 자료의 색인, 밸류는 검색 결과의 본문에 해당. 쿼리와 각 키의 관련성을 계산한 뒤, 관련성이 높은 밸류를 더 많이 반영
셀프 어텐션과 교차 어텐션
| 구분 | 셀프 어텐션 self-attention | 교차 어텐션 cross-attention |
|---|---|---|
| 정보의 출처 | 하나 | 둘 |
| 쿼리 | 같은 입력에서 생성 | 한 입력에서 생성 |
| 키와 밸류 | 쿼리와 같은 입력에서 생성 | 다른 입력에서 생성 |
| 주요 역할 | 한 입력 내부의 관계 파악 | 서로 다른 두 입력의 관계 연결 |
- 셀프 어텐션: 문장 안의 단어끼리 또는 이미지 특징끼리 관계를 계산
- 교차 어텐션: 이미지와 텍스트처럼 서로 다른 정보 사이의 관계를 계산
교차 어텐션은 두 입력을 단순히 더하는 방식이 아님. 한쪽 입력의 각 위치가 다른 쪽 입력에서 필요한 정보를 선택하도록 학습
텍스트와 이미지 특징의 연결
텍스트 조건부 이미지 생성에서는 프롬프트와 현재 이미지 특징이 서로 다른 형태를 가짐
- 텍스트 인코더: 프롬프트를 문맥이 반영된 토큰 임베딩으로 변환
- U-Net: 현재 역확산 단계의 잡음 이미지 또는 잠재 표현을 여러 해상도의 특징 맵으로 변환
- 교차 어텐션: 각 이미지 위치가 어떤 텍스트 토큰을 얼마나 참고할지 계산
프롬프트 → 텍스트 인코더 → 토큰 임베딩 ──→ 키·밸류
↓
잡음 이미지 → U-Net → 이미지 특징 ─────────→ 쿼리
↓
교차 어텐션
↓
텍스트가 반영된 이미지 특징
U-Net에서의 쿼리, 키, 밸류
| 요소 | 출처 | 역할 |
|---|---|---|
| 쿼리 Q | U-Net의 이미지 특징 | 각 이미지 위치에 어떤 텍스트 정보가 필요한지 질문 |
| 키 K | 텍스트 토큰 임베딩 | 쿼리와 각 토큰의 관련성을 계산 |
| 밸류 V | 텍스트 토큰 임베딩 | 관련성에 따라 이미지 특징에 전달할 의미 정보 |
예를 들어 프롬프트가 빨간 사과가 나무 탁자 위에 놓여 있다라면 이미지의 위치마다 참고하는 토큰의 비중이 달라질 수 있음
- 사과가 형성되는 위치:
빨간,사과토큰의 정보를 더 많이 반영 - 배경 위치:
나무,탁자토큰의 정보를 더 많이 반영 - 관계 표현:
위에같은 토큰을 통해 사물 배치에 관한 정보를 반영
이 설명은 교차 어텐션의 작동 원리를 이해하기 위한 직관. 실제 어텐션 가중치가 사람의 해석과 항상 정확히 일치하는 것은 아님
교차 어텐션의 처리 과정
- 프롬프트를 여러 텍스트 토큰으로 분리
- 텍스트 인코더로 각 토큰의 문맥적 임베딩을 생성
- U-Net의 이미지 특징을 공간 위치별 표현으로 펼침
- 이미지 특징에서 쿼리를, 텍스트 임베딩에서 키와 밸류를 생성
- 각 이미지 위치와 각 텍스트 토큰의 관련성을 계산
- 관련성에 따라 텍스트 정보를 가중합
- 가중합한 텍스트 정보를 이미지 특징에 결합
이 과정은 U-Net의 여러 해상도와 여러 역확산 단계에서 반복될 수 있음. 넓은 범위의 특징에서는 전체 구도와 큰 사물에, 세밀한 특징에서는 질감과 국소적인 묘사에 텍스트 조건이 반영될 수 있음
텍스트 인코더와 교차 어텐션의 차이
| 구성 요소 | 역할 |
|---|---|
| 텍스트 인코더 | 프롬프트의 토큰을 문맥이 반영된 임베딩으로 변환 |
| 교차 어텐션 | 텍스트 임베딩에서 현재 이미지 위치에 필요한 정보를 선택 |
| U-Net | 선택된 텍스트 조건을 반영하여 현재 단계의 잡음을 예측 |
텍스트 인코더만으로는 이미지의 어느 위치에 어떤 단어를 반영할지 결정할 수 없음. 교차 어텐션이 텍스트 표현과 이미지 특징 사이의 연결을 담당
수식으로 보는 교차 어텐션
어텐션 계산
쿼리와 키의 내적으로 관련성 점수를 계산하고, 소프트맥스로 각 밸류의 가중치를 구함
Attention(Q,K,V)=softmax(dkQK⊤)V- QK⊤: 각 이미지 위치와 각 텍스트 토큰의 관련성 점수
- dk: 벡터 차원이 커질 때 내적값이 지나치게 커지는 것을 완화
- 소프트맥스: 토큰별 점수를 합이 1인 가중치로 변환
- 가중합: 관련성이 높은 토큰의 밸류를 더 많이 반영
텐서의 형태
이미지 특징의 공간 위치 수를 N, 텍스트 토큰 수를 M이라고 하면 다음과 같이 표현 가능
| 텐서 | 형태 | 의미 |
|---|---|---|
| Q | N×dk | 이미지 위치별 쿼리 |
| K | M×dk | 텍스트 토큰별 키 |
| V | M×dv | 텍스트 토큰별 밸류 |
| 어텐션 가중치 | N×M | 각 이미지 위치가 각 토큰을 참고하는 비중 |
| 출력 | N×dv | 텍스트 정보가 반영된 이미지 위치별 특징 |
다중 헤드 교차 어텐션
다중 헤드 어텐션은 서로 다른 투영 공간에서 교차 어텐션을 여러 번 계산한 뒤 결과를 결합. 각 헤드는 사물, 속성, 질감, 관계처럼 서로 다른 연결 패턴을 학습할 수 있음
퀴즈
셀프 어텐션과 교차 어텐션을 구분하는 핵심 기준은 무엇입니까?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.