Loading the catalog…
Loading the catalog…
📅 Date : 2026.10.04 🏷️ Tags : #Python #AI #MachineLearning #Multimodal #LLaVA #LatentDiffusion #ImageBind 🎯 이번 주 목표 이번 기술블로그에서는 정규세션 내용을 복습하고, 과제를 다시 분석하며, 관련 논문 리뷰 링크를 정리하여 학습을 확장하는 것을 목표로 한다. 📌 Contents 1. 세션 복습 2. 과제 복습 3. 관련 논문 리뷰 링크 4. 이번 주 한 줄 정리 1️⃣ 세션 복습 ✨ 핵심 개념 및 내용 정리 이번 세션에서 가장 중요하다고 생각한 개념을 자신의 언어로 정리해봅시다. 📖 핵심 개념 붙이기 (LLaVA) : 고정된 CLIP vision encoder 출력에 projection 하나만 달아서 LLM 입력 공간으로 옮기고, 이렇게 만든 이미지 토큰을 텍스트 토큰 옆에 이어붙인다. 추론 (Multimodal-CoT) : rationale 생성과 answer 추론을 두 단계로 나누고 두 단계 모두에 vision feature를 넣어서, 작은 모델이 이미지와 맞지 않는 근거를 지어내는 문제를 줄인다. 생성 (Latent Diffusion) : autoencoder로 이미지를 latent로 압축한 다음 그 안에서 diffusion을 돌린다. 텍스트 조건은 매 denoising step마다 cross-attention으로 들어간다. 전이 (ImageBind) : 이미지를 허브로 두고 (이미지, X) 쌍만 대조학습했는데, 한 번도 같이 학습한 적 없는 (오디오, 텍스트) 같은 쌍까지 정렬된다. 📝 내용 정리 지난주 선택 과제였던 Mind the Gap에서 CLIP으로 학습해도 이미지 임베딩과 텍스트 임베딩이 같은 공간 안의 서로 다른 원뿔(cone)에 모여 있다는 걸 봤다. 같은 벡터 공간에 올라가 있어도 두 모달이 완전히 겹치지는 않는다. 이번 주는 그다음 이야기였다. 정렬한 뒤에 함께 추론하고, 생성하고, 더 많은 모달로 넓히는 과정을 논문 네 편으로 따라갔다. 축 논문 핵심 장치 지난주에 배운 부품 Architecture LLaVA projection W 하나 CLIP vision encoder Reasoning Multimodal-CoT 2단계 구조 + gated fusion cross-attention, gated fusion Generation Latent Diffusion latent 공간 + cross-attention 조건 cross-attention Transference ImageBind 이미지 허브 + InfoNCE CLIP, 대조학습 1 LLaVA : LLM에 눈을 다는 가장 단순한 방법 출처: Liu et al., Visual Instruction Tuning (arXiv:2304.08485), Figure 1 CLIP, ViLT, LXMERT 같은 기존 모델은 VQA용, 검색용, 캡셔닝용이 따로 있었고 자유로운 대화나 여러 단계 추론은 하지 못했다. 그렇다고 LLM에 이미지까지 넣어 처음부터 다시 학습하기엔 비용이 너무 크다. 그래서 나온 발상이 이미 잘 학습된 CLIP과 LLM은 그대로 두고 둘을 잇는 부분만 학습하자는 것이었다. 연결 방식은 지난주에 이미 두 가지를 봤다. Flamingo는 고정된 LLM 레이어 사이에 gated cross-attention을 끼워 넣었고, BLIP-2는 Q-Former의 learnable query가 이미지에서 필요한 정보만 압축해서 넘겼다. LLaVA는 여기서 한 단계 더 단순해진다. $$ Z_v = g(X_v), \quad H_v = W \cdot Z_v $$ $g$는 고정된 CLIP ViT-L/14이고 $W$는 학습 가능한 선형 층이다. $Z_v$는 LLM이 아직 못 알아듣는 "비전 언어"이고, $W$를 통과한 $H_v$는 LLM이 단어처럼 다룰 수 있는 이미지 토큰이 된다. 텍스트는 Vicuna 자체의 임베딩 층을 거쳐 $H_q$가 되고, 두 토큰열을 이어붙인 하나의 시퀀스를 LLM이 읽어서 답 $X_a$를 생성한다. 학습 목표는 일반 언어모델과 같은 autoregressive likelihood다. $$ p(X_a \mid X_v, X_{\mathrm{instruct}}) = \prod_{i=1}^{L} p_\theta(x_i \mid X_v, X_{\mathrm{instruct}, \lt i}, X_{a, \lt i}) $$ $W$가 이미지 쪽에만 붙는 이유는 LLM 입장에서 텍스트는 이미 모국어이고 이미지는 외국어이기 때문이다. 번역이 필요한 쪽에만 번역기를 단 셈이다. 공식 코드(llava_arch.py)를 보면 초기 버전은 nn.Linear 하나였고, LLaVA-1.5부터는 Linear → GELU → Linear의 2층 MLP로 바뀌었다. 논문 보고 수치는 합성 멀티모달 instruction 데이터에서 GPT-4 대비 상대 점수 85.1%, ScienceQA fine-tune 시 92.53%(당시 SOTA)였다. 강한 사전학습 encoder와 LLM이 이미 좋은 표현을 갖고 있으니 필요한 건 둘을 잇는 정렬과 instruction 데이터 정도였다는 게 이 논문의 메시지로 읽혔다. 구조가 단순해서 확장하고 재현하기 쉬웠고, 이후 많은 MLLM이 이 형태를 따른다. 2 Multimodal-CoT : 근거를 만들 때도 이미지를 보게 하기 출처: Zhang et al., Multimodal Chain-of-Thought Reasoning in Language Models (arXiv:2302.00923), 공식 레포 그림 언어 모델에서는 "차근차근 생각해보자" 식의 CoT가 잘 통한다. 그런데 이미지가 낀 문제에 1B 미만 모델로 CoT를 그대로 적용하면 이미지를 반영하지 못한 근거(hallucinated rationale)가 나온다. 수업에서 본 자석 예시에서 vision 없이 학습한 baseline은 "한 자석의 S극이 다른 자석의 S극과 가장 가깝다"는 근거를 만들어 repel(B)로 틀렸고, vision feature를 넣자 "N극이 S극과 가장 가깝다"로 바로잡혀 attract(A)를 맞혔다. 잘못된 근거가 오답을 끌고 가는 구조다. 그래서 근거 생성과 정답 추론을 두 단계로 나눈다. $$ R = F(X), \quad X = \lbrace X^{1} {\mathrm{language}}, X {\mathrm{vision}} \rbrace $$ $$ A = F(X'), \quad X^{2} {\mathrm{language}} = X^{1} {\mathrm{language}} \circ R $$ 1단계에서 질문, 선택지, 이미지로 근거 $R$을 만들고, 2단계에서는 원래 질문 뒤에 $R$을 이어붙인 입력과 이미지로 답 $A$를 낸다. 두 단계 모두에 이미지가 들어간다는 점이 중요하다. 모델 안에서 두 모달을 섞는 과정은 encoding, interaction, gated fusion, decoding 네 단계다. $$ H_{\mathrm{language}} = \mathrm{LanguageEncoder}(X_{\mathrm{language}}) $$ $$ H_{\mathrm{vision}} = W_h \cdot \mathrm{VisionExtractor}(X_{\mathrm{vision}}) $$ $$ H^{\mathrm{attn}} {\mathrm{vision}} = \mathrm{Softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V, \quad Q = H {\mathrm{language}}, \quad K = V = H_{\mathrm{vision}} $$ $$ \lambda = \mathrm{Sigmoid}(W_l H_{\mathrm{language}} + W_v H^{\mathrm{attn}}_{\mathrm{vision}}) $$ $$ H_{\mathrm{fuse}} = (1 - \lambda) \cdot H_{\mathrm{language}} + \lambda \cdot H^{\mathrm{attn}}_{\mathrm{vision}} $$ $W_h$로 ViT feature의 차원을 텍스트에 맞추는 부분은 LLaVA의 $W$와 같은 역할이다. cross-attention에서는 텍스트 토큰이 query가 되어 이미지 패치를 훑고, 관련 있는 패치에서 정보를 더 많이 가져온다. 게이트 $\lambda$가 0에 가까우면 텍스트만 쓰는 baseline과 같아지고 1에 가까우면 시각 정보 위주가 되니, 토큰마다 이미지를 얼마나 반영할지 모델이 스스로 정하는 장치로 이해했다. 마지막으로 $H_{\mathrm{fuse}}$가 Transformer decoder로 들어가 근거나 정답을 생성한다. 결과적으로 1B 미만 모델이 ScienceQA에서 91.68%를 기록해 당시 GPT-3.5(75.17%)를 약 16%p 앞섰고, hallucination이 줄고 수렴도 빨라졌다. 모델을 키우는 대신 추론 과정에 구조를 줘서 작은 모델로도 강한 추론을 끌어낸 사례다. 관련 연구로 MLLM의 물체 hallucination을 Yes/No로 재는 POPE, 추론에 필요한 이미지 영역을 스스로 찾아 집중하는 Visual CoT, 이미지를 crop·zoom하는 조작 자체를 추론에 넣는 thinking with images 흐름도 소개됐다. 3 Latent Diffusion : 줄여서 그리고, 다시 키운다 Diffusion은 학습할 때 이미지에 노이즈를 조금씩 더하고 그 노이즈를 한 스텝씩 지우는 법을 배우며, 생성할 때는 순수 노이즈에서 시작해 반복적으로 지워 나간다. $$ L_{DM} = \mathbb{E}_{x, \epsilon \sim \mathcal{N}(0,1), t}\left[ \lVert \epsilon - \epsilon_\theta(x_t, t) \rVert_2^2 \right] $$ 노이즈 낀 이미지 $x_t$와 단계 $t$를 받아 그때 더해진 노이즈 $\epsilon$을 맞히도록 학습한다. 노이즈를 알면 지울 수 있다. 이 식이 어디서 나오는지는 아래 심화 파트에서 DDPM 논문을 따라 유도했다. 문제는 픽셀 공간에서 바로 diffusion을 하면 계산량이 너무 크다는 것이다. 수업 자료 기준으로 당시 선도 모델이 150~1000 V100 GPU-day를 썼다. LDM은 압축과 생성을 명시적으로 분리해서 이 문제를 푼다. 출처: Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models (arXiv:2112.10752), Figure 3 Perceptual compression : 따로 사전학습한 autoencoder의 encoder $\mathcal{E}$가 이미지 $x$를 latent $z$로 줄인다. 사람 눈에 잘 안 띄는 고주파 디테일을 여기서 걷어낸다. 생성 : latent 공간에서 denoising U-Net $\epsilon_\theta$가 노이즈를 반복해서 지워 깨끗한 $z$를 만든다. diffusion은 여기서만 일어나고, 이미지의 의미와 구성을 배우는 데 집중한다. 복원 : 생성이 끝난 $z$를 decoder $\mathcal{D}$가 다시 이미지 $\tilde{x}$로 되돌린다. 손실도 $x$ 자리에 latent가 들어가고 조건 하나가 추가될 뿐 형태는 같다. $$ L_{LDM} = \mathbb{E}_{\mathcal{E}(x), y, \epsilon \sim \mathcal{N}(0,1), t}\left[ \lVert \epsilon - \epsilon_\theta(z_t, t, \tau_\theta(y)) \rVert_2^2 \right] $$ "고양이 그림" 같은 텍스트 조건 $y$는 U-Net이 그대로 읽을 수 없으니 도메인 encoder $\tau_\theta$(텍스트면 Transformer)가 먼저 벡터로 바꾸고, 그 결과를 U-Net 중간층에 cross-attention으로 넣는다. $$ Q = W_Q^{(i)} \cdot \varphi_i(z_t), \quad K = W_K^{(i)} \cdot \tau_\theta(y), \quad V = W_V^{(i)} \cdot \tau_\theta(y) $$ $$ \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d}}\right) \cdot V $$ 여기서 query는 이미지 쪽(U-Net의 중간 표현 $\varphi_i(z_t)$)이고 key와 value가 텍스트 쪽이다. 길이가 다른 두 시퀀스(이미지 위치 N개, 단어 M개)를 자연스럽게 연결할 수 있다는 게 cross-attention을 쓰는 이유다. 조건을 처음 한 번만 주지 않고 매 denoising step마다 참조하는 이유도 수업에서 짚었다. 생성이 여러 스텝에 걸쳐 진행되기 때문에 조건을 처음에만 주면 뒤쪽 스텝이 조건에서 벗어날 수 있다. $\tau_\theta$만 바꿔 끼우면 semantic map, 저해상도 이미지, 클래스 라벨 같은 다른 조건도 같은 U-Net 구조로 받을 수 있다. 수업에서 cross-attention을 "멀티모달 생성 모델의 조종간"이라고 부른 게 이 지점이다. 이해 모델(LLaVA)과 생성 모델(LDM)을 하나로 합치는 흐름으로는 이미지와 텍스트를 모두 토큰으로 바꿔 하나의 Transformer로 처리하는 Chameleon도 소개됐다. 4 ImageBind : 이미지를 허브로 여섯 모달 묶기 출처: Girdhar et al., ImageBind: One Embedding Space To Bind Them All (arXiv:2305.05665), Figure 1 CLIP은 이미지와 텍스트 두 모달을 대조학습으로 정렬했다. 오디오, 깊이(depth), 열화상(thermal), IMU까지 여섯 모달을 정렬하려면 모든 쌍(15개)의 데이터가 필요할 것 같지만, ImageBind는 각 모달을 이미지와만 짝지어 학습한다. 동영상에는 소리와 화면이, 1인칭 영상에는 IMU와 화면이 원래 같이 있으니 따로 라벨링하지 않아도 쌍 데이터를 모을 수 있다. 손실은 각 (이미지, 모달 M) 쌍에 대한 InfoNCE다. $q_i$는 이미지 임베딩, $k_i$는 같은 쌍의 다른 모달 임베딩이다. $$ L_{\mathcal{I}, \mathcal{M}} = -\log \frac{\exp(q_i^{\top} k_i / \tau)}{\exp(q_i^{\top} k_i / \tau) + \sum_{j \ne i} \exp(q_i^{\top} k_j / \tau)} $$ positive 쌍은 가깝게, 배치 안의 나머지는 멀게 만든다. 실제로는 방향을 바꾼 손실까지 더해서 양방향으로 쓴다. $$ L = L_{\mathcal{I}, \mathcal{M}} + L_{\mathcal{M}, \mathcal{I}} $$ 이미지·텍스트 encoder는 OpenCLIP으로 사전학습된 것을 고정하고, 나머지 모달의 encoder만 학습해서 이미 정렬된 이미지 공간에 붙인다. CLIP이 가진 언어-이미지 지식이 새 모달로 그대로 옮겨지는 구조다. 이렇게 하면 (이미지, 오디오)와 (이미지, 텍스트)만 학습했는데도 한 번도 같이 본 적 없는 (오디오, 텍스트)가 정렬되는 emergent alignment가 나타난다. 덕분에 학습하지 않은 조합의 retrieval이 zero-shot으로 되고, 과일 이미지 임베딩에 새소리 임베딩을 더해 과일 사이에 있는 새 사진을 찾는 임베딩 산술도 가능하다. 오디오 임베딩을 CLIP 텍스트 임베딩용 DALL·E 2 decoder에 넣어 소리로 이미지를 만드는 응용도 있었다. 이미지 encoder가 강할수록 emergent 성능이 좋아진다는 점에서 허브의 품질이 전체를 좌우한다. 정리하면 지난주에 배운 encoder, CLIP, cross-attention이 이번 주 모델들의 부품으로 그대로 다시 쓰였다. 🔍 추가적인 공부 및 조사 수업 이후 스스로 찾아보며 이해한 내용이나 새롭게 알게 된 내용을 정리합니다. 새롭게 알게 된 내용 LLaVA의 2단계 학습 : 1단계(feature alignment)에서는 CLIP과 LLM을 모두 고정하고 $W$만 학습한다. 데이터는 CC3M에서 걸러낸 이미지-캡션 쌍 595K개다. 2단계에서는 CLIP만 고정하고 $W$와 LLM을 함께 fine-tune한다(LLaVA-Instruct-158K). 수업의 "연결자만 학습"은 1단계에 해당하는 설명이었다. 공식 코드의 이미지 토큰 처리 : llava_arch.py의 prepare_inputs_labels_for_multimodal을 보면 입력 id 중 IMAGE_TOKEN_INDEX(-200) 위치에서 텍스트를 잘라 그 자리에 이미지 feature를 끼우고 torch.cat으로 붙인다. 이때 이미지 위치의 label은 IGNORE_INDEX(-100)로 채워서 loss를 계산하지 않는다. 이미지 토큰은 읽기만 하는 토큰이다. 이미지 토큰 개수는 패치 개수 : 과제의 ViT-B/32(224px)는 7×7=49개, LLaVA의 ViT-L/14(224px)는 16×16=256개, LLaVA-1.5의 ViT-L/14(336px)는 24×24=576개다. BLIP-2의 Q-Former는 32개 query로 압축하니까, LLaVA의 단순함 뒤에는 시퀀스 길이라는 비용이 있다. latent 압축률 : Stable Diffusion 계열은 downsampling factor 8을 쓴다. 512×512×3(786,432개 값)이 64×64×4(16,384개 값)가 되니 diffusion이 다루는 차원이 48배 줄어든다. InfoNCE와 상호정보량 : CPC 논문에 따르면 InfoNCE를 줄이는 것은 두 표현 사이 상호정보량의 하한을 올리는 것과 연결되고, 그 하한에 log N(N은 positive 1개와 negative를 합친 수)이 들어간다. 대조학습에서 큰 배치를 선호하는 이유 중 하나로 이해했다. 기존 내용과의 비교 또는 심화 내용 수업 내용 추가 조사 내용 LLaVA는 무거운 두 모델을 고정하고 가벼운 연결자만 학습 1단계만 그렇다. 2단계에서는 vision encoder만 고정하고 W와 LLM을 같이 fine-tune한다 연결자는 선형 층 1개, LLaVA-1.5부터 2층 MLP 1024차원(ViT-L)에서 4096차원(7B LLM)으로 보낼 때 선형은 약 420만 개, 2층 MLP는 약 2,100만 개 파라미터. 7B LLM에 비하면 아주 작다 이미지 토큰을 텍스트 사이에 concat 공식 코드는 이미지 위치 label을 -100으로 채워 loss에서 뺀다. loss는 답변 토큰에서만 계산 cross-attention은 QKT를 √d로 나눔 내적의 분산이 d에 비례해서 커지기 때문 (아래 유도 1) diffusion 손실은 노이즈 예측 오차 DDPM에서 ELBO의 각 항을 정리하고 가중치를 뗀 단순화 손실이 그 식이다 (아래 유도 2, 3) ImageBind는 InfoNCE로 정렬 InfoNCE는 상호정보량 하한을 키우는 목적함수다 (아래 유도 4) emergent alignment 과제 숫자로 삼각부등식 bound를 계산해보면 기하학만으로는 보장되지 않는다 (아래 유도 5) 📐 심화 : 공식 자료의 논리를 따라 직접 유도해보기 유도 1. cross-attention에서 √d로 나누는 이유 근거: Vaswani et al., Attention Is All You Need (arXiv:1706.03762), 3.2.1절 각주 $q$, $k$의 각 성분이 서로 독립이고 평균 0, 분산 1이라고 두자. $$ q \cdot k = \sum_{i=1}^{d} q_i k_i $$ $$ \mathbb{E}[q_i k_i] = \mathbb{E}[q_i] \mathbb{E}[k_i] = 0 $$ $$ \mathrm{Var}(q_i k_i) = \mathbb{E}[q_i^2] \mathbb{E}[k_i^2] - (\mathbb{E}[q_i k_i])^2 = 1 \cdot 1 - 0 = 1 $$ 각 항이 독립이므로 분산이 그대로 더해진다. $$ \mathrm{Var}(q \cdot k) = \sum_{i=1}^{d} \mathrm{Var}(q_i k_i) = d $$ $$ \mathrm{Var}\left(\frac{q \cdot k}{\sqrt{d}}\right) = \fra
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[투빅스 6주차 정규세션] 멀티모달 심화. 지난주 멀티모달 기초에서는 이미지와 텍스트를 같은 임베딩 공간으로 옮기는 방법을 배웠다. CLIP처럼 서로 짝인 이미지와 문장은 가깝게, 관계없는 조합은 멀게 만드는 방식이다. 그런데 이미지와 문장의 유사도를 계산할 수 있다고 해서, 모델이 바로 사진을 설명하거나 그 사진을 근거로 추론할 수 있는 것은 아니다. “이 사진과 어울리는 문장이 무엇인가?”와 “사진을 보고 질문에 답하라” 사이에는 아직 해야 할 일이 남아 있다. 이번 세션은 그다음 단계를 다뤘다. 이미지를 LLM에 연결하는 LLaVA, 시각 정보를 근거 생성에 활용하는 Multimodal-CoT, 텍스트 조건으로 이미지를 만드는 Latent Diffusion, 그리고 이미지와의 정렬을 여러 모달로…
Open source[투빅스 6주차 정규세션] 멀티모달 심화. 📅 Date : 2026.09.26 🏷️ Tags : #Python #AI #MultiModal 🎯 이번 주 목표 이번 기술블로그에서는 정규세션 내용을 복습하고, 과제를 다시 분석하며, 관련 논문 리뷰 링크를 정리하여 학습을 확장하는 것을 목표로 한다. 📌 Contents 세션 복습 과제 복습 관련 논문 리뷰 링크 이번 주 한 줄 정리 1️⃣ 세션 복습 ✨ 핵심 개념 및 내용 정리 이번 세션에서 가장 중요하다고 생각한 개념을 자신의 언어로 정리해봅시다. 📖 핵심 개념 여러 모달을 연결한 다음, 그것으로 추론하고 생성하며 더 많은 모달까지 확장하는 것 📝 내용 정리 붙이기(Architecture) MLLM Architecture : 사전학습된 Vision…
Open source[투빅스 6주차 정규세션] 멀티모달 심화. 📅 Date : 2026.10.04 🏷️ Tags : #Python #AI #MachineLearning #Multimodal #LLaVA #LatentDiffusion #ImageBind 🎯 이번 주 목표 이번 기술블로그에서는 정규세션 내용을 복습하고, 과제를 다시 분석하며, 관련 논문 리뷰 링크를 정리하여 학습을 확장하는 것을 목표로 한다. 📌 Contents 1. 세션 복습 2. 과제 복습 3. 관련 논문 리뷰 링크 4. 이번 주 한 줄 정리 1️⃣ 세션 복습 ✨ 핵심 개념 및 내용 정리 이번 세션에서 가장 중요하다고 생각한 개념을 자신의 언어로 정리해봅시다. 📖 핵심 개념 붙이기 (LLaVA) : 고정된 CLIP vision encoder 출력에…
Open source