Skip to content

필사 모드: Vision LLM 아키텍처 — 이미지가 언어가 되기까지

한국어
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

들어가며: 왜 비전-언어 모델인가

텍스트만 다루던 LLM이 이미지를 함께 이해하기 시작하면서, 문서 분석, 차트 해석, UI 자동화, 로보틱스 같은 영역이 한꺼번에 열렸습니다. 그런데 LLM은 본질적으로 토큰 시퀀스를 다음 토큰 예측으로 처리하는 모델입니다. 이미지처럼 2차원 픽셀 격자로 이루어진 데이터를, 어떻게 텍스트 토큰과 같은 평면에 올려놓을 수 있을까요.

핵심 아이디어는 단순합니다. 이미지를 작은 조각으로 쪼개고, 각 조각을 벡터로 바꾼 뒤, 그 벡터를 LLM이 다루는 임베딩 공간에 정렬시키는 것입니다. 그렇게 하면 이미지 조각 하나하나가 마치 하나의 단어 토큰처럼 행동하게 됩니다. 이 글에서는 그 변환 과정을 비전 인코더, 프로젝터, LLM 디코더라는 세 부품으로 나누어 깊이 들여다봅니다.

이 구조를 제대로 이해하면, 왜 어떤 모델은 고해상도 문서에 강하고 어떤 모델은 토큰 비용이 폭발하는지, 임의 해상도 처리가 왜 어려운 문제인지가 자연스럽게 보입니다.

텍스트 모델과 무엇이 다른가

순수 텍스트 LLM은 입력이 이미 토큰입니다. 토크나이저가 문자열을 정수 ID 시퀀스로 바꾸고, 임베딩 테이블이 각 ID를 벡터로 매핑하면 끝입니다. 그런데 이미지는 토크나이저가 없습니다. 픽셀을 직접 정수 ID로 매핑할 표가 존재하지 않습니다.

그래서 비전 LLM은 토크나이저 대신 비전 인코더라는 신경망을 둡니다. 이것이 핵심 차이입니다. 텍스트는 조회 테이블로 토큰을 얻지만, 이미지는 학습된 인코더를 통과시켜 연속적인 특징 벡터를 얻습니다. 이 벡터들이 비주얼 토큰 역할을 합니다.

텍스트 경로: 문자열 -> 토크나이저(조회) -> 토큰 ID -> 임베딩 -> 벡터

이미지 경로: 픽셀 -> 비전 인코더(신경망) -> 연속 특징 -> 프로젝터 -> 벡터

두 경로의 끝은 같습니다. 둘 다 LLM이 다룰 수 있는 같은 차원의 벡터 시퀀스로 수렴합니다. 차이는 출발점뿐입니다. 이 관점을 잡고 나면, 비전 LLM이 결국 텍스트 LLM에 이미지 입력 경로를 하나 더 붙인 것임을 알 수 있습니다.

핵심 원리: 세 부품으로 보는 비전 LLM

대부분의 현대 비전-언어 모델(VLM)은 세 개의 구성 요소로 이루어집니다.

1. **비전 인코더(Vision Encoder)**: 보통 ViT 계열. 이미지를 받아 시각적 특징 벡터의 시퀀스로 변환합니다.

2. **비전-언어 프로젝터(Projector/Adapter)**: 비전 인코더의 출력 차원을 LLM의 임베딩 차원으로 맞추고, 의미적으로 정렬합니다. 선형층, MLP, 혹은 Q-Former류 압축 모듈이 쓰입니다.

3. **LLM 디코더**: 텍스트 토큰과 투영된 비주얼 토큰을 한 시퀀스로 받아 다음 토큰을 예측합니다.

전체 데이터 흐름을 그림으로 보면 다음과 같습니다.

[이미지]

|

v

[패치 분할] --> 패치들을 평탄화하여 임베딩

|

v

[ViT 비전 인코더] --> 비주얼 특징 시퀀스

|

v

[프로젝터 / 어댑터] --> LLM 차원으로 투영 (+ 압축)

|

v

[비주얼 토큰] + [텍스트 토큰] --> 하나의 시퀀스로 인터리빙

|

v

[LLM 디코더] --> 자기회귀적으로 텍스트 생성

이 구조는 처음부터 끝까지 함께 학습되기도 하고, 비전 인코더를 동결한 채 프로젝터와 LLM만 학습하기도 합니다. 학습 전략은 별도의 글에서 다루고, 여기서는 추론 시 데이터가 어떻게 흐르는지에 집중합니다.

깊이 보기 1: 이미지를 패치에서 토큰으로

패치 분할과 패치 임베딩

ViT의 출발점은 이미지를 고정 크기 패치로 나누는 것입니다. 예를 들어 224 x 224 이미지를 14 x 14 픽셀 패치로 나누면 가로 16개, 세로 16개, 총 256개의 패치가 생깁니다. 각 패치는 픽셀 값을 평탄화한 뒤 선형 투영을 거쳐 하나의 임베딩 벡터가 됩니다.

텐서 shape로 추적하면 다음과 같습니다.

입력 이미지: B x 3 x H x W (배치, 채널, 높이, 너비)

패치 분할 후: B x N_patch x (P*P*3) (P는 패치 한 변의 픽셀 수)

패치 임베딩 후: B x N_patch x D (D는 비전 인코더 hidden dim)

여기서 N_patch는 (H / P) x (W / P)로 계산됩니다. 224 x 224 이미지에 패치 크기 14를 쓰면 N_patch는 256이 됩니다. 이 시점에서 이미지는 이미 시퀀스 형태가 되었고, 그 뒤로는 텍스트 토큰 시퀀스와 동일하게 트랜스포머 레이어를 통과합니다.

위치 정보와 트랜스포머 인코딩

패치를 평탄화하면 2차원 공간 정보가 사라지므로, ViT는 위치 임베딩을 더해 줍니다. 그 후 여러 층의 셀프 어텐션과 FFN을 거치며 각 패치가 주변 패치의 정보를 흡수합니다. 출력은 입력과 같은 길이의 시퀀스이며, 각 위치가 시각적으로 풍부해진 특징 벡터가 됩니다.

ViT 내부 어텐션은 텍스트 트랜스포머와 동일한 스케일드 닷프로덕트 형태입니다.

attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V

여기서 Q, K, V는 패치 특징에서 선형 투영으로 얻은 쿼리, 키, 밸류이고, d_k는 각 헤드의 차원입니다. 멀티헤드로 여러 부분공간에서 동시에 관계를 학습합니다.

비주얼 토큰 개수가 곧 비용

이 단계에서 중요한 직관 하나. 비주얼 토큰의 개수는 이미지 해상도에 비례합니다. 해상도를 두 배로 키우면 패치 수는 약 네 배가 되고, LLM이 처리해야 할 시퀀스 길이도 그만큼 늘어납니다. LLM의 어텐션은 시퀀스 길이에 대해 이차로 비싸지므로, 비주얼 토큰 수를 줄이는 것은 곧 비용과 직결됩니다. 프로젝터가 단순히 차원만 맞추는 게 아니라 토큰을 압축하기도 하는 이유가 여기 있습니다.

깊이 보기 2: 프로젝터 — 비전과 언어를 잇는 다리

비전 인코더의 출력 차원은 LLM의 임베딩 차원과 다를 수 있고, 의미 공간도 정렬되어 있지 않습니다. 프로젝터는 이 간극을 메웁니다. 크게 두 갈래가 있습니다.

선형 / MLP 프로젝터

가장 단순한 방식입니다. 비전 인코더가 내놓은 각 비주얼 특징을 선형층 혹은 2층 MLP로 LLM 차원에 투영합니다. 토큰 개수는 그대로 유지됩니다.

비전 인코더 출력: B x N_v x D_vis

선형/MLP 투영 후: B x N_v x D_llm (토큰 수 N_v 유지, 차원만 D_vis -> D_llm)

- 장점: 구조가 단순하고, 시각 정보를 손실 없이 그대로 전달합니다.

- 단점: 토큰 수가 줄지 않으므로 고해상도에서 시퀀스가 길어지고 비용이 큽니다.

LLaVA 계열이 이 단순 MLP 방식을 대중화했습니다. 구현이 쉽고 성능도 좋아 널리 쓰입니다.

Q-Former류 learnable query 압축

또 다른 갈래는 학습 가능한 쿼리 벡터를 두고, 크로스 어텐션으로 비주얼 특징에서 정보를 끌어와 고정된 개수의 토큰으로 압축하는 방식입니다. BLIP-2의 Q-Former가 대표적입니다.

학습 쿼리: B x N_q x D (N_q는 32 등 고정, 이미지 패치 수와 무관)

비전 특징(키/밸류): B x N_v x D_vis

크로스 어텐션: 쿼리가 비전 특징에서 정보를 흡수

출력: B x N_q x D_llm (N_v -> N_q로 압축됨)

- 장점: 비주얼 토큰을 고정된 작은 수로 압축하므로 LLM 시퀀스가 짧아지고 비용이 절감됩니다.

- 단점: 압축 과정에서 세밀한 시각 정보가 손실될 수 있어, 정밀한 OCR이나 문서 이해에서는 불리할 수 있습니다.

압축형은 자연 이미지 캡셔닝처럼 큰 그림이 중요한 작업에 잘 맞고, 비압축형(MLP)은 작은 글자나 표를 읽어야 하는 문서 작업에 유리한 경향이 있습니다.

깊이 보기 3: 비주얼 토큰을 LLM에 주입하기

프로젝터를 통과한 비주얼 토큰은 이제 LLM의 임베딩 공간 위에 있습니다. 이를 텍스트와 한 시퀀스로 엮는 것을 인터리빙이라 합니다.

인터리빙의 기본 형태

채팅 입력에서 이미지가 들어갈 자리에 특수한 자리표시 토큰을 두고, LLM에 넣기 직전에 그 자리를 비주얼 토큰들로 치환합니다.

원본 시퀀스: [텍스트...] [IMG_PLACEHOLDER] [텍스트...]

치환 후: [텍스트...] [v1][v2]...[vN] [텍스트...]

이렇게 만들어진 통합 시퀀스는 LLM 입장에서는 그냥 하나의 긴 임베딩 시퀀스입니다. 셀프 어텐션이 텍스트 토큰과 비주얼 토큰을 구분 없이 함께 보면서, 질문 텍스트가 이미지의 특정 영역을 가리키도록 학습됩니다.

다중 이미지나 이미지-텍스트 교차 문서도 같은 원리로 처리됩니다. 이미지가 등장하는 순서대로 비주얼 토큰 블록을 끼워 넣으면 됩니다.

멀티 이미지: [텍스트] [img1 토큰들] [텍스트] [img2 토큰들] [텍스트]

인과 마스크와 비주얼 토큰

LLM 디코더는 인과(causal) 마스크를 써서 각 위치가 자기 이전 토큰만 보게 합니다. 비주얼 토큰도 이 마스크 규칙을 따릅니다. 즉 이미지 뒤에 오는 텍스트는 이미지 토큰을 참조할 수 있지만, 이미지 토큰 자체는 보통 그 앞의 컨텍스트만 봅니다. 일부 모델은 이미지 토큰들 사이에 양방향 어텐션을 허용해 한 이미지 내부에서는 모든 패치가 서로를 보게 하기도 합니다. 이는 구현마다 다른 설계 선택입니다.

깊이 보기 4: 임의 해상도 처리

초기 VLM은 입력 이미지를 고정 크기(예: 336 x 336)로 강제 리사이즈했습니다. 그러면 가로로 긴 문서나 작은 글자가 뭉개져 정보가 손실됩니다. 최근 모델은 임의 해상도를 그대로 다루려 합니다.

Qwen2-VL의 naive dynamic resolution

Qwen2-VL은 이미지를 고정 크기로 강제하지 않고, 원본 해상도에 비례하는 수의 비주얼 토큰을 동적으로 생성합니다. 큰 이미지는 더 많은 토큰으로, 작은 이미지는 더 적은 토큰으로 표현됩니다. 덕분에 가로세로 비율과 세밀한 디테일이 보존되어 문서나 차트 이해에 유리합니다.

작은 이미지(예: 448x448): 적은 수의 비주얼 토큰

큰 이미지(예: 1568x1568): 많은 수의 비주얼 토큰

가로로 긴 문서: 원본 비율 유지, 가로 방향 패치 수가 많아짐

실무에서는 최소/최대 토큰 수에 상한을 두어, 너무 큰 이미지가 컨텍스트를 폭발시키지 않도록 조절합니다.

M-RoPE: 멀티모달 회전 위치 인코딩

위치 인코딩도 문제입니다. 텍스트는 1차원 순서를 갖지만 이미지는 2차원 격자입니다. Qwen2-VL은 M-RoPE(Multimodal Rotary Position Embedding)를 도입해 위치를 시간, 높이, 너비라는 여러 성분으로 분해합니다. 텍스트 토큰은 이 성분들이 같은 값을 공유하고, 이미지 토큰은 높이와 너비 성분이 2차원 좌표를 반영합니다.

텍스트 토큰: (t, t, t) 세 성분이 같은 위치 인덱스

이미지 토큰: (t, h, w) 높이/너비 성분이 격자 좌표를 반영

이렇게 하면 한 모델 안에서 1차원 텍스트와 2차원 이미지의 위치를 일관되게 표현할 수 있고, 동영상처럼 시간 축이 더해지는 경우로 자연스럽게 확장됩니다.

비교 테이블: 프로젝터 설계 선택

| 항목 | 선형 / MLP 프로젝터 | Q-Former류 압축 |

| --- | --- | --- |

| 토큰 수 | 패치 수 그대로 유지 | 고정된 작은 수로 압축 |

| 시각 정보 보존 | 높음, 손실 거의 없음 | 압축 과정에서 일부 손실 |

| LLM 시퀀스 길이 | 길어짐, 비용 큼 | 짧음, 비용 절감 |

| 문서/OCR 적합성 | 유리 | 상대적으로 불리 |

| 자연 이미지 캡셔닝 | 적합 | 적합 |

| 구현 복잡도 | 낮음 | 높음 |

| 대표 사례 | LLaVA 계열 | BLIP-2 Q-Former |

| 항목 | 고정 해상도 | 임의 해상도(dynamic) |

| --- | --- | --- |

| 입력 처리 | 고정 크기로 리사이즈 | 원본 비율/해상도 보존 |

| 작은 글자/디테일 | 손실 위험 | 잘 보존 |

| 토큰 수 | 일정 | 이미지 크기에 비례, 가변 |

| 문서/차트 이해 | 약함 | 강함 |

| 컨텍스트 비용 | 예측 가능 | 상한 관리 필요 |

깊이 보기 5: 숫자로 따라가는 토큰 예산

추상적인 설명만으로는 비용 감각이 잡히지 않으니, 구체적인 숫자로 한 번 따라가 봅니다. 패치 크기 14, 비전 인코더 hidden dim 1024를 가정합니다.

사례 A: 일반 사진 896 x 896

가로 패치 수 = 896 / 14 = 64

세로 패치 수 = 896 / 14 = 64

비주얼 토큰 수 = 64 x 64 = 4096

사례 B: 가로로 긴 문서 1568 x 784

가로 패치 수 = 1568 / 14 = 112

세로 패치 수 = 784 / 14 = 56

비주얼 토큰 수 = 112 x 56 = 6272

사례 C: 썸네일 224 x 224

가로/세로 패치 수 = 16 x 16

비주얼 토큰 수 = 256

여기서 한 가지가 분명해집니다. 같은 모델이라도 입력 이미지 크기에 따라 비주얼 토큰이 256개에서 6000개 이상까지 출렁입니다. 멀티턴 대화에 이미지 여러 장이 들어가면 컨텍스트의 대부분을 비주얼 토큰이 차지하기도 합니다. 그래서 많은 모델이 2 x 2 패치 병합 같은 다운샘플링을 비전 인코더 뒤에 두어, LLM에 전달되는 토큰 수를 네 분의 일로 줄입니다.

패치 병합(2x2) 예시

비전 인코더 출력: 64 x 64 = 4096 토큰

2x2 병합 후: 32 x 32 = 1024 토큰 (네 개를 하나로 합침)

이 다운샘플링은 디테일을 약간 희생하는 대신 LLM 시퀀스를 크게 줄입니다. 문서처럼 작은 글자가 중요한 경우엔 병합 강도를 낮추고, 일반 사진처럼 큰 그림이 중요하면 더 공격적으로 줄이는 식으로 작업에 맞춰 조절합니다.

깊이 보기 6: ViT 인코더 선택과 사전학습

비전 인코더는 아무 ViT나 쓰는 게 아니라, 보통 대규모 이미지-텍스트 대조 학습으로 사전학습된 인코더를 가져옵니다. 텍스트와 짝지어 학습된 비전 인코더는 이미 언어와 어느 정도 정렬된 시각 표현을 내놓기 때문에, 뒤따르는 프로젝터의 부담이 줄어듭니다.

- **대조 사전학습 인코더**: 이미지와 캡션을 같은 공간에 끌어당기도록 학습한 인코더. 의미적으로 풍부한 표현을 줍니다.

- **고해상도 적응**: 문서 작업이 중요하면, 인코더를 고해상도 입력에 맞춰 추가 적응시키는 단계를 둡니다.

- **마지막 층 vs 중간 층**: 어떤 층의 특징을 프로젝터에 넘길지도 선택지입니다. 마지막 층은 의미적이고, 중간 층은 더 세밀한 시각 정보를 담는 경향이 있어, 작업에 따라 조합하기도 합니다.

인코더의 품질이 VLM 전체 성능의 상한을 어느 정도 결정합니다. 인코더가 작은 글자를 구분하지 못하면, 뒤의 LLM이 아무리 똑똑해도 그 정보를 복구할 수 없습니다. 그래서 문서·OCR을 노린다면 인코더 단계의 해상도와 표현력에 특히 신경 써야 합니다.

깊이 보기 7: 다중 이미지와 동영상으로의 확장

단일 이미지를 처리하는 원리는 그대로 다중 이미지와 동영상으로 확장됩니다.

- **다중 이미지**: 각 이미지를 독립적으로 비주얼 토큰으로 만든 뒤, 등장 순서대로 텍스트와 인터리빙합니다. 모델은 어떤 텍스트가 어떤 이미지를 가리키는지 위치로 구분합니다.

- **동영상**: 프레임들을 일정 간격으로 샘플링해 각각을 비주얼 토큰으로 바꾸고, 시간 축 위치 성분을 더해 순서를 부여합니다. M-RoPE의 시간 성분이 여기서 자연스럽게 쓰입니다.

동영상 처리 흐름

[프레임1][프레임2]...[프레임T] --> 각각 비주얼 토큰화

|

v

시간 성분 t=1,2,...,T 부여 --> 프레임 순서 보존

|

v

[질문 텍스트] + [프레임 토큰들] --> LLM 디코더

동영상은 프레임 수에 비례해 토큰이 폭증하므로, 프레임 샘플링 간격과 프레임당 해상도를 함께 조절해 토큰 예산을 관리하는 것이 핵심입니다. 긴 영상일수록 프레임을 듬성듬성 뽑고, 짧고 디테일이 중요한 영상은 촘촘히 뽑는 식의 절충이 필요합니다.

실무 관점: 추론 시 무엇을 신경 쓰나

비전 LLM을 서비스에 올릴 때 가장 먼저 부딪히는 것은 비주얼 토큰 비용입니다. 한 장의 고해상도 문서가 수천 개의 토큰을 차지할 수 있어, 텍스트만 다룰 때보다 컨텍스트가 빠르게 찹니다.

- **토큰 상한 설정**: 임의 해상도 모델은 이미지당 최대 토큰 수를 제한해 컨텍스트와 지연을 통제합니다.

- **해상도-비용 트레이드오프**: 작은 글자를 읽어야 하면 해상도를 올려야 하지만, 그만큼 토큰이 늘어 비용과 지연이 커집니다. 작업 요구사항에 맞춰 균형점을 잡습니다.

- **토큰 프루닝**: 중요도가 낮은 비주얼 토큰을 추론 중 솎아내 시퀀스를 줄이는 연구가 활발합니다. 정보 손실과 속도 사이의 균형이 관건입니다.

- **이미지 전처리 일관성**: 학습 때와 동일한 패치 크기, 정규화, 리사이즈 규칙을 추론에서도 그대로 지켜야 성능 저하를 막을 수 있습니다.

비주얼 토큰은 LLM 디코딩과 함께 KV 캐시를 차지합니다. 따라서 멀티턴 대화에서 같은 이미지를 반복 참조하면 캐시가 누적되어 메모리 압박이 커질 수 있습니다. prefix 캐시 재사용이나 이미지 임베딩 캐싱으로 완화할 수 있습니다.

깊이 보기 11: 서빙 관점의 추가 고려

비전 LLM을 실제로 서빙할 때는 텍스트 LLM 서빙과 다른 몇 가지 디테일이 더해집니다.

- **이미지 전처리 비용**: 디코딩·리사이즈·정규화도 시간을 먹습니다. 큰 이미지가 많으면 전처리가 병목이 될 수 있어, 별도 워커로 분리하거나 캐싱합니다.

- **가변 길이 배치**: 이미지 크기가 제각각이라 요청마다 시퀀스 길이가 다릅니다. 연속 배칭(continuous batching)과 잘 맞춰야 처리량이 나옵니다.

- **비주얼 토큰 KV 캐시**: 같은 이미지를 멀티턴에서 반복 참조하면 그 비주얼 토큰의 KV를 캐싱해 재계산을 피할 수 있습니다.

- **프리필 비중**: 비주얼 토큰은 보통 프리필 단계에서 한꺼번에 처리됩니다. 이미지가 크면 프리필이 길어져 첫 토큰까지의 지연이 늘어납니다.

비전 LLM 서빙 파이프라인

[요청: 이미지 + 텍스트]

|

v

[이미지 전처리] (별도 워커 가능)

|

v

[비전 인코더 + 프로젝터] 프리필에서 비주얼 토큰 생성

|

v

[LLM 프리필 + 디코드] 연속 배칭으로 묶어 처리

|

v

[응답 스트리밍]

핵심은 이미지 경로가 추가됨으로써 프리필 비용과 전처리 비용이 텍스트 전용보다 커진다는 점입니다. 이미지 크기 상한, 전처리 분리, 캐싱이 서빙 효율의 주요 손잡이입니다.

함정과 트러블슈팅

- **해상도 불일치**: 학습 시 본 적 없는 극단적 종횡비나 초고해상도 이미지에서 품질이 급락할 수 있습니다. 입력 크기를 모델이 견디는 범위로 정규화하세요.

- **자리표시 토큰 수 불일치**: 인터리빙 시 자리표시 토큰 개수와 실제 비주얼 토큰 개수가 어긋나면 시퀀스 정렬이 깨집니다. 전처리 파이프라인에서 개수를 반드시 검증해야 합니다.

- **압축 모델의 디테일 손실**: Q-Former류로 토큰을 강하게 압축하면 작은 글자나 표 셀이 뭉개집니다. OCR 정밀도가 중요하면 비압축 또는 고해상도 경로를 고려하세요.

- **위치 인코딩 가정 위반**: 동영상이나 다중 이미지 입력에서 위치 성분 계산이 학습 가정과 어긋나면 공간 추론이 흐트러집니다. 모델이 권장하는 전처리 루틴을 따르는 것이 안전합니다.

- **정규화 통계 불일치**: 비전 인코더가 기대하는 평균/표준편차로 정규화하지 않으면 특징이 왜곡됩니다. 모델 카드의 전처리 사양을 확인하세요.

깊이 보기 7.5: 이미지 전처리의 디테일

비주얼 토큰의 품질은 모델에 들어가기 전 전처리에서 절반이 결정됩니다. 흔히 간과되지만 결과에 큰 영향을 미치는 단계입니다.

- **리사이즈 보간**: 이미지를 패치 격자에 맞추려면 크기를 조정해야 합니다. 보간 방식(이중선형, 이중삼차 등)에 따라 작은 글자의 선명도가 달라집니다.

- **정규화**: 비전 인코더는 특정 평균·표준편차로 정규화된 입력을 기대합니다. 이 통계가 어긋나면 특징이 왜곡되어 성능이 떨어집니다.

- **패딩과 비율**: 정사각형이 아닌 이미지를 다룰 때 패딩으로 채울지, 비율을 유지하며 동적 토큰을 쓸지 선택합니다.

- **색 공간**: RGB 채널 순서나 색 공간이 학습과 다르면 미묘한 오류가 생깁니다.

전처리 체크리스트

[ ] 학습과 동일한 리사이즈 규칙

[ ] 학습과 동일한 정규화 통계 (평균/표준편차)

[ ] 채널 순서 일치 (RGB)

[ ] 패치 크기로 나누어떨어지는 크기

[ ] 종횡비 처리 방식 일치

이 체크리스트 중 하나라도 어긋나면, 모델은 같은 가중치를 쓰고도 학습 때보다 나쁜 결과를 냅니다. 디버깅할 때 모델보다 전처리를 먼저 의심하라는 격언이 비전 LLM에서 특히 유효합니다.

깊이 보기 8: 융합 방식 — 인터리빙 vs 크로스 어텐션

지금까지는 비주얼 토큰을 텍스트와 같은 시퀀스에 끼워 넣는 인터리빙(또는 디코더 융합) 방식을 중심으로 설명했습니다. 그런데 비전과 언어를 섞는 방법은 이것만 있는 게 아닙니다. 크게 두 갈래로 정리할 수 있습니다.

방식 A: 인터리빙(디코더 융합)

비주얼 토큰을 텍스트 토큰과 같은 입력 시퀀스에 삽입

LLM의 셀프 어텐션이 둘을 함께 처리

대표: LLaVA류, Qwen2-VL류

방식 B: 크로스 어텐션 융합

LLM 레이어 사이사이에 크로스 어텐션 블록 삽입

텍스트는 셀프 어텐션, 이미지 정보는 크로스 어텐션으로 주입

대표: 일부 게이티드 크로스 어텐션 구조

- **인터리빙**: 구현이 단순하고 LLM 구조를 거의 그대로 씁니다. 다만 비주얼 토큰이 컨텍스트 길이를 직접 차지합니다.

- **크로스 어텐션**: 비주얼 정보를 별도 경로로 주입하므로 텍스트 시퀀스 길이를 늘리지 않습니다. 대신 LLM 내부에 추가 블록이 들어가 구조가 복잡해집니다.

최근 오픈 모델 다수는 단순함과 강력함을 이유로 인터리빙 방식을 택하는 경향이 있습니다. 하지만 컨텍스트 비용이 큰 고해상도·동영상에서는 크로스 어텐션식 주입의 장점이 재조명되기도 합니다. 정답은 없고, 작업의 토큰 예산과 구현 제약에 따라 달라집니다.

깊이 보기 9: 자주 헷갈리는 개념 정리

- **비주얼 토큰과 텍스트 토큰은 같은 임베딩 공간인가?**: 프로젝터를 통과한 뒤에는 같은 차원의 공간에 있습니다. 그래서 LLM이 둘을 한 시퀀스로 처리할 수 있습니다. 다만 의미적 정렬은 학습으로 만들어집니다.

- **비전 인코더가 곧 OCR인가?**: 아닙니다. 비전 인코더는 시각 특징을 낼 뿐, 글자를 명시적으로 읽지는 않습니다. 글자 읽기 능력은 LLM과 함께 학습 데이터로 길러집니다.

- **토큰을 압축하면 항상 손해인가?**: 작업에 따라 다릅니다. 큰 그림이 중요하면 압축이 효율적이고, 작은 글자가 중요하면 손해입니다.

- **해상도를 올리면 항상 좋은가?**: 디테일은 좋아지지만 토큰과 비용이 늘고, 학습 분포를 벗어나는 초고해상도에서는 오히려 품질이 떨어질 수 있습니다.

- **위치 인코딩이 왜 중요한가?**: 이미지는 2차원 공간 정보가 핵심인데, 토큰으로 평탄화하면 그 정보가 사라집니다. 위치 인코딩이 그 공간 관계를 복원해 줍니다.

이런 개념들을 분명히 해 두면, 새로운 VLM의 기술 보고서를 읽을 때 어떤 설계 선택을 했는지 빠르게 파악할 수 있습니다.

깊이 보기 9.5: 모델 선택을 위한 의사결정 가이드

지금까지 본 설계 축들을 실제 모델 선택에 어떻게 연결할지 정리합니다. 작업 성격에 따라 우선순위가 달라집니다.

작업별 권장 방향

영수증/문서 OCR -> 고해상도 + 비압축(MLP) 프로젝터 + 임의 해상도

일반 이미지 캡셔닝 -> 중간 해상도 + 압축 허용, 비용 효율 우선

차트/표 분석 -> 고해상도 + 구조화 출력 학습된 모델

멀티이미지 추론 -> 토큰 효율(압축 또는 패치 병합) 중시

동영상 이해 -> 프레임 샘플링 + 시간 위치 인코딩 지원

이 가이드는 출발점일 뿐, 실제로는 후보 모델 몇 개를 자신의 데이터로 직접 평가해 보는 것이 가장 확실합니다. 벤치마크 점수는 평균적 경향을 보여줄 뿐, 내 문서·내 이미지에서의 동작은 직접 재 봐야 알 수 있습니다.

판단의 핵심 질문 세 가지를 던져 보세요. 첫째, 작은 글자나 세밀한 디테일이 중요한가. 그렇다면 해상도와 비압축 경로를 우선합니다. 둘째, 한 요청에 이미지가 몇 장이나 들어가는가. 많다면 토큰 효율이 비용을 좌우합니다. 셋째, 출력이 자유 텍스트인가 구조화 형식인가. 구조화가 필요하면 그 형식으로 학습된 모델을 골라야 합니다.

깊이 보기 10: 전체 그림을 다시 그려 보기

마지막으로, 지금까지의 부품을 하나의 큰 그림으로 다시 묶어 봅니다.

[원본 이미지]

| 전처리: 리사이즈/정규화 (학습과 동일)

v

[패치 분할 + 패치 임베딩] B x N_patch x D_vis

| 위치 임베딩 더하기

v

[ViT 비전 인코더: 셀프 어텐션 x L층] B x N_patch x D_vis

| (선택) 2x2 패치 병합으로 다운샘플

v

[프로젝터: MLP 또는 Q-Former] B x N_v x D_llm

| 자리표시 위치에 삽입

v

[통합 시퀀스: 텍스트 + 비주얼 토큰] 인터리빙

| M-RoPE 등 위치 부여, 인과 마스크

v

[LLM 디코더: 셀프 어텐션 x M층]

| 다음 토큰 예측

v

[출력: 텍스트 / 좌표 / 구조화]

이 한 장의 흐름이 비전 LLM의 전부입니다. 각 단계에서 어떤 설계를 택했느냐가 모델의 성격을 결정합니다. 인코더의 해상도, 프로젝터의 압축 여부, 위치 인코딩 방식, 융합 전략 — 이 네 가지 손잡이를 돌려가며 수많은 변종이 만들어집니다.

마치며

비전 LLM의 핵심은 결국 이미지를 토큰으로 바꾸는 변환에 있습니다. ViT가 이미지를 패치 시퀀스로 만들고, 프로젝터가 그것을 LLM의 언어 공간에 정렬하며, 인터리빙이 텍스트와 비주얼 토큰을 한 흐름으로 엮습니다. 여기에 임의 해상도와 M-RoPE 같은 장치가 더해지면서, 모델은 작은 글자가 빼곡한 문서부터 와이드 차트까지 유연하게 다룰 수 있게 되었습니다.

설계 선택은 늘 트레이드오프입니다. 토큰을 압축하면 싸지지만 디테일을 잃고, 해상도를 올리면 잘 읽지만 비용이 커집니다. 자신의 작업이 무엇을 더 중요하게 여기는지 알면, 어떤 구조의 모델을 골라야 할지도 분명해집니다. 다음 글에서는 이 구조를 어떻게 학습시키는지, 입력과 출력을 어떻게 가르치는지를 다룹니다.

참고 자료

- Qwen2-VL: Enhancing Vision-Language Model's Perception (arXiv: 2409.12191) — [arxiv.org/abs/2409.12191](https://arxiv.org/abs/2409.12191)

- Attention Is All You Need (arXiv: 1706.03762) — [arxiv.org/abs/1706.03762](https://arxiv.org/abs/1706.03762)

- FlashAttention: Fast and Memory-Efficient Exact Attention (arXiv: 2205.14135) — [arxiv.org/abs/2205.14135](https://arxiv.org/abs/2205.14135)

- Qwen 공식 저장소 — [github.com/QwenLM](https://github.com/QwenLM)

- Hugging Face Transformers 문서 — [huggingface.co/docs](https://huggingface.co/docs)

- PyTorch 공식 문서 — [pytorch.org](https://pytorch.org)

- vLLM 문서(멀티모달 서빙 포함) — [docs.vllm.ai](https://docs.vllm.ai)

- vLLM 저장소 — [github.com/vllm-project/vllm](https://github.com/vllm-project/vllm)

현재 단락 (1/225)

텍스트만 다루던 LLM이 이미지를 함께 이해하기 시작하면서, 문서 분석, 차트 해석, UI 자동화, 로보틱스 같은 영역이 한꺼번에 열렸습니다. 그런데 LLM은 본질적으로 토큰 시퀀...

작성 글자: 0원문 글자: 10,603작성 단락: 0/225