<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sangjun_moon.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 16 Jun 2026 10:40:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sangjun_moon.log</title>
            <url>https://velog.velcdn.com/images/sangjun_moon/profile/f94ea994-b462-4668-86ce-319394b62287/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sangjun_moon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sangjun_moon" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[SparseVILA: Decoupling Visual Sparsity for Efficient VLM Inference]]></title>
            <link>https://velog.io/@sangjun_moon/SparseVILA-Decoupling-Visual-Sparsity-for-Efficient-VLM-Inference</link>
            <guid>https://velog.io/@sangjun_moon/SparseVILA-Decoupling-Visual-Sparsity-for-Efficient-VLM-Inference</guid>
            <pubDate>Tue, 16 Jun 2026 10:40:23 GMT</pubDate>
            <description><![CDATA[<h1 id="sparsevila-decoupling-visual-sparsity-for-efficient-vlm-inference">SparseVILA: Decoupling Visual Sparsity for Efficient VLM Inference</h1>
<hr>
<h2 id="abstract">Abstract</h2>
<h4 id="1-문제">1. 문제</h4>
<p>VLM은 시각·텍스트 추론 통합으로 빠르게 발전했지만, <strong>이들의 scalability는 inference latency를 지배하는 시각적 토큰 수의 증가로 인해 여전히 제한적</strong>이다.</p>
<h4 id="2-해법--sparsevila">2. 해법 — SparseVILA</h4>
<p>sparsity를 일괄 적용하지 않고 <strong>prefill / decode 단계별로 분산(decouple)</strong> 시킨다.</p>
<p><strong>SparseVILA는 prefill 단계에서 redundant visual tokens를 pruning하고, decoding 단계에서는 query-relevant tokens만을 retrieval함으로써 sparsity를 단계별로 분산시킨다.</strong></p>
<table>
<thead>
<tr>
<th>단계</th>
<th>방식</th>
<th>기준</th>
<th>토큰 처리</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Prefill</strong></td>
<td>query-agnostic pruning</td>
<td>시각적 중복성·salience</td>
<td>실제 삭제</td>
</tr>
<tr>
<td><strong>Decoding</strong></td>
<td>query-aware retrieval</td>
<td>현재 query와의 관련성</td>
<td>삭제 X, 비활성화 (캐시 보존)</td>
</tr>
</tbody></table>
<h4 id="3-핵심-장점--decoupled-design">3. 핵심 장점 — Decoupled Design</h4>
<p><strong>이러한 decoupled design은 주요 prefill pruning 방법들과 대등한 성능을 보이면서도, 시각적 캐시의 대부분을 유지하여 각 conversation round마다 query-aware tokens를 retrieval할 수 있도록 함으로써 multi-turn fidelity를 보존한다.</strong></p>
<ul>
<li>시각적 캐시를 거의 그대로 보존 → round마다 그 query에 맞는 token을 새로 retrieval 가능</li>
<li>기존 query-aware pruning은 한 번 token을 버리면 다음 turn에 복구 불가 → 누적 degradation 발생</li>
<li>SparseVILA는 이 문제를 피하면서 multi-turn 정확도 유지</li>
</ul>
<h2 id="1-introduction">1. Introduction</h2>
<h4 id="1-배경--vlm의-latency-문제">1. 배경 — VLM의 latency 문제</h4>
<p>VLM은 사진·문서·비디오 등 시각적 입력으로 LLM과 상호작용하는 SOTA 대화 도구로 부상했다. 그러나 추가된 visual modality는 <strong>LLM에서 visual token을 처리하는 데 드는 높은 latency·메모리 비용</strong>을 대가로 한다. 따라서 inference 시점의 효율적 배포가 여전히 난제다.</p>
<p>기존 비용 절감 연구들:</p>
<ul>
<li>model pruning (LLM / vision encoder)</li>
<li>KV cache compression</li>
<li>token sparsification</li>
</ul>
<p>이들 다수는 <strong>context(prefill) 단계</strong>에서 큰 절감을 얻는다. 이 단계가 주로 <strong>compute-bound</strong>이기 때문이다.</p>
<h4 id="2-context만으론-부족하다--decoding도-봐야-함">2. context만으론 부족하다 — decoding도 봐야 함</h4>
<p>현실 애플리케이션은 광범위한 generation을 요구한다.</p>
<ul>
<li>image captioning: 수백 토큰</li>
<li>video captioning / 상세 기술: 수천 토큰 이상</li>
</ul>
<p>따라서 <strong>context 단계 최적화만으로는 불충분</strong>하며, context와 <strong>decoding 단계 최적화를 모두</strong> 고려해야 한다. 그 대표적 use case가 <strong>multi-turn conversation</strong>이다.</p>
<h4 id="3-핵심-문제--반복적-pre-filling의-비효율">3. 핵심 문제 — 반복적 pre-filling의 비효율</h4>
<p><strong>실제로 대부분의 benchmark는 본질적으로 multi-round conversation을 지원하며, <span style="color:red">일례로 GQA dataset은 동일한 시각적 입력에 대해 90개가 넘는 질문을 포함하고 있다.</strong></span> 그럼에도 불구하고 대부분의 평가 benchmarks는 single-round evaluation(즉, 반복적인 pre-filling)을 실행하는데, 이는 비현실적일 뿐만 아니라 각 generation round마다 context 단계가 반복되어야 하므로 비효율적이다.</p>
<ul>
<li>같은 이미지인데 round마다 <code>이미지 + 질문</code>을 처음부터 다시 prefill → 변하지 않는 visual token을 반복 처리하는 낭비</li>
<li>현실에서 visual 입력은 수만 개 context token에 달할 수 있음 → 반복 pre-filling은 사용자-VLM 상호작용 속도를 극적으로 저하</li>
</ul>
<h4 id="4-제안--sparsevila">4. 제안 — SparseVILA</h4>
<p><strong>multi-turn 성능을 유지하면서</strong> VLM inference를 가속화하는 새로운 접근.</p>
<ul>
<li><strong>핵심 insight</strong>: prefill 단계의 sparsity를 decoding 단계로 <strong>마이그레이션</strong>하는 <em>decoupled sparsity framework</em></li>
<li>decoding 단계에서 <strong>query-aware retrieval</strong> 활용 → 질문마다 서로 다른 context token subset을 retrieval하여 multi-turn 지원</li>
<li>결과: image-centric benchmark에서 큰 성능 향상, long-context / generation scaling에서 기존 방법 능가</li>
</ul>
<h4 id="보충--context-단계가-반복된다의-의미">보충 — &quot;context 단계가 반복된다&quot;의 의미</h4>
<table>
<thead>
<tr>
<th></th>
<th>single-round (기존 평가)</th>
<th>multi-turn (SparseVILA)</th>
</tr>
</thead>
<tbody><tr>
<td>Turn-1</td>
<td>이미지 + Q1 prefill</td>
<td>이미지 1회 prefill + Q1</td>
</tr>
<tr>
<td>Turn-2</td>
<td><strong>이미지 + Q2 다시 prefill</strong></td>
<td>보존된 visual KV cache 재사용 + Q2 retrieval</td>
</tr>
</tbody></table>
<ul>
<li>이미지 visual token(수천~수만 개)은 turn마다 변하지 않는데도 매 round 다시 prefill되는 게 핵심 낭비</li>
<li>질문 토큰은 수십 개 수준이라 부차적 → 반복되는 진짜 비용은 <strong>이미지 prefill</strong></li>
<li>(참고) 4.1절: 캐시 재사용 시 information leakage 방지를 위해 round 종료 후 이전 질문·답변 KV entry만 제거(partial eviction)하고 이미지 cache는 유지</li>
</ul>
<h2 id="2-preliminaries">2. Preliminaries</h2>
<h3 id="query-agnostic-sparsity">Query-Agnostic Sparsity</h3>
<h4 id="query-agnostic-방법이란">Query-agnostic 방법이란?</h4>
<p><strong>텍스트 입력(query)에 의존하지 않고, 오직 시각적 context(redundancy·salience)만으로 visual token을 pruning하는 방법.</strong></p>
<h4 id="대표-방법">대표 방법</h4>
<ul>
<li><strong>PruMerge</strong>: 최종 레이어 attention score로 정보량 적은 토큰을 클러스터링 후 폐기</li>
<li><strong>VisionZip</strong>: ToMe와 유사한 token merging module로 중복 시각 정보를 압축</li>
</ul>
<h4 id="단점">단점</h4>
<ol>
<li><strong>미세 정보 손실</strong> — fine-grained 시각적 세부 사항을 희생, 특히 high sparsity에서 성능 저하</li>
<li><strong>query 적응 불가</strong> — 입력 query에 맞춰 토큰 선택을 조정할 수 없어, task-relevant 정보가 드물게 분산된 경우 suboptimal</li>
<li><strong>중요 정보 폐기 위험</strong> — 모든 토큰을 일률 처리 → 정확한 추론에 필요한 핵심 정보까지 버릴 수 있음</li>
</ol>
<h3 id="query-aware-sparsity">Query-Aware Sparsity</h3>
<h4 id="query-aware-방법이란">Query-aware 방법이란?</h4>
<p><strong>텍스트 query와 시각적 representation 간의 관계를 명시적으로 모델링하여 visual token을 선택하는 방법.</strong> (= query를 보고 그 질문에 중요한 토큰을 고름)</p>
<h4 id="대표-방법-1">대표 방법</h4>
<ul>
<li><strong>FastV</strong>: 초기 LLM 레이어의 attention map을 salience indicator로 활용 → prefill 단계에서 토큰 pruning</li>
<li><strong>SparseVLM</strong>: query-to-vision attention으로 덜 관련된 시각적 토큰을 폐기</li>
</ul>
<h4 id="단점-1">단점</h4>
<ol>
<li><strong>영구적 정보 손실</strong> — 초기 query 기준 pruning 결정이 후속 질문에 중요한 시각 정보를 영구 제거</li>
<li><strong>multi-turn 성능 저하</strong> — round가 거듭될수록 accuracy 급락, 종종 query-agnostic baseline보다도 낮음</li>
<li><strong>복구 불가</strong> — 일단 정보량 많은 토큰이 제거되면 이후 turn에서 되살릴 수 없음</li>
</ol>
<h4 id="oracle-실험-한계의-근본-원인-입증">Oracle 실험 (한계의 근본 원인 입증)</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5a4a93bd-ee61-47e9-8254-ca88ffd087b6/image.png" alt=""></p>
<ul>
<li><strong>query-aware oracle</strong>: 현재 query뿐 아니라 <strong>ground-truth 응답(정답)</strong>까지 보고, unpruned 모델의 답과 가장 잘 일치하는 token subset을 탐욕적으로 선택 → 현실 불가능한 치트, 모든 query-aware 방법의 <strong>이론적 upper bound</strong></li>
<li>결과: 정답까지 본 oracle조차 연속 round에서 성능 저하 (Fig.2)</li>
<li>시사점: token 선택을 아무리 잘해도 안 됨 → <strong>prefill에서 토큰을 영구 삭제하는 구조 자체가 근본 한계</strong></li>
</ul>
<h2 id="3-sparsevila-best-of-both-worlds">3. SparseVILA: Best of Both Worlds</h2>
<ul>
<li><strong>SparseVILA</strong>: prefill에선 가벼운 <strong>query-agnostic pruning</strong>으로 커버리지 손실 없이 redundancy를 줄이고, 질문을 아는 decode에선 공격적인 <strong>query-aware retrieval</strong>을 적용해 두 방식의 장점을 결합한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/26ed1429-2376-4fd6-9336-31e3a4dc69ac/image.png" alt=""></p>
<ul>
<li><strong>Figure 3</strong>: 현대 VLM은 latency가 decoding에 집중되는 <em>decoding-heavy</em> 프로필이므로, 공격적 sparsity를 decode 단계에 배치하는 이 설계가 실제 latency 구조와 잘 맞는다.</li>
</ul>
<h3 id="31-prefill-phase-query-agnostic-pruning">3.1. Prefill Phase: Query-Agnostic Pruning</h3>
<h4 id="1-기본-아이디어-한-줄">1. 기본 아이디어 (한 줄)</h4>
<p>Prefill 단계에서 텍스트 query에 의존하지 않고 <strong>오직 시각적 redundancy/salience만으로 vision token을 pruning</strong>하여, 시각적 context를 한 번 계산해 여러 대화 turns 내내 안정적으로 재사용함.</p>
<blockquote>
<p>핵심 제약: pruning은 <strong>엄격한 query-agnostic</strong> 상태를 유지해야 함 → 중복 정보는 최소화하되, 향후 queries를 위한 충분한 커버리지는 보존해야 함.</p>
</blockquote>
<h4 id="2-토큰-중요도salience-추정-방식--인코더-유형별">2. 토큰 중요도(Salience) 추정 방식 — 인코더 유형별</h4>
<p>기본 원리: <strong>visual encoder의 self-attention map</strong>에서 토큰 중요도를 직접 추정 → query-independent salience 측정값 확보. attention 시그널을 집계해 각 토큰의 전체 representation 기여도를 정량화하고, <strong>집계 salience가 가장 낮은 토큰을 pruning</strong>함.</p>
<table>
<thead>
<tr>
<th>인코더 유형</th>
<th>예시 모델</th>
<th>Salience 정의 방식</th>
</tr>
</thead>
<tbody><tr>
<td>단일 요약 토큰</td>
<td>CLIP</td>
<td>각 토큰이 <strong>global embedding</strong>(요약 토큰)에 기여하는 attention 값</td>
</tr>
<tr>
<td>다중 요약 토큰</td>
<td>RADIO</td>
<td>여러 요약 토큰들로 향하는 <strong>평균 attention</strong> (동일한 global aggregation 동작을 캡처)</td>
</tr>
<tr>
<td>요약 토큰 없음</td>
<td>SigLIP, QwenVL</td>
<td>모든 토큰에 걸친 <strong>intra-visual attention을 평균화</strong>하여 중요도 추정</td>
</tr>
</tbody></table>
<h4 id="3-커널-efficient-implementation">3. 커널 (Efficient Implementation)</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/80dd14aa-9ccd-4ac2-81bd-20772b6d7622/image.png" alt=""></p>
<ul>
<li><strong>문제</strong>: 비디오 등 long-context 입력에서는 attention 기반 salience 추정이 메모리·latency 집약적임.</li>
<li><strong>해결</strong>: 전체 attention 행렬을 명시적으로 만들지 않고 <strong>softmax 정규화 + salience 축적을 스트리밍</strong>하는 <strong>커스텀 Triton 커널</strong> 구현.</li>
<li><strong>효과</strong>: 수십만 개 토큰 규모에서도 효율적인 salience 계산 가능.</li>
<li><strong>성능 (Figure 5a)</strong>:<ul>
<li>SigLIP 스타일 인코더: <strong>최대 3배</strong> 가속</li>
<li>QwenVL 스타일 인코더: <strong>최대 10배</strong> 가속</li>
</ul>
</li>
<li><strong>의미</strong>: SparseVILA의 확장 가능한(scalable) prefill pruning을 위한 연산 기반(computational foundation)을 형성함.</li>
</ul>
<h3 id="32-decode-phase-query-aware-retrieval">3.2. Decode Phase: Query-Aware Retrieval</h3>
<h4 id="1-기본-아이디어-한-줄-1">1. 기본 아이디어 (한 줄)</h4>
<p>Decode 단계는 <strong>memory-bound</strong> 상황이므로, KV cache에 모든 vision token을 <strong>보존</strong>하되 현재 query에 <strong>관련성 높은 subset만 활성화</strong>하여 attention을 좁힘으로써, context를 영구 폐기하지 않고 효율을 높이고 multi-turn 유연성을 유지함.</p>
<h4 id="2-왜-효율적인가--memory-bound--bandwidth">2. 왜 효율적인가 — Memory-bound + Bandwidth</h4>
<ul>
<li>Decode는 매 토큰 생성 시 FLOPs는 적고 <strong>KV cache 전체를 DRAM→연산기로 읽는 메모리 대역폭이 병목</strong>임.</li>
<li>SparseVILA는 토큰을 <strong>삭제(eviction)하지 않고 비활성화(deactivation)</strong> → 미래 turn 대비.</li>
<li>현재 query에 필요한 subset만 로드 → <strong>읽는 양 감소 → latency 개선</strong>.</li>
<li><strong>Densely packed (연속 메모리 패킹)</strong>: 선택된 KV 항목을 contiguous memory로 모아 <strong>불규칙 sparse access를 방지</strong> → coalesced access로 대역폭 효율까지 확보.</li>
<li>결과: &quot;읽는 양 ↓ + 읽는 패턴 효율 ↑&quot; 두 효과 동시 달성.</li>
</ul>
<h4 id="3-query-aware-token-selection">3. Query-Aware Token Selection</h4>
<ul>
<li><strong>Query embeddings = 현재 turn의 사용자 텍스트 query</strong> (text token).</li>
<li>동작: 텍스트 query를 <strong>Query</strong>, KV cache 내 vision token을 <strong>Key</strong>로 두고 둘 사이 <strong>집계된 attention 강도</strong>를 측정.</li>
<li>점수 높은 토큰 → <strong>활성화(decode에 유지)</strong> / 점수 낮은 토큰 → <strong>cached but deactivated</strong>.</li>
<li>같은 이미지라도 query 내용에 따라 활성화되는 vision subset이 달라짐 = <strong>query-conditioned sparsity</strong>.</li>
<li>구현: prefill의 Triton 커널을 확장, query↔cached vision token 관련성 연산을 스트리밍.<ul>
<li><strong>FlashAttention2 경로와 동시 실행</strong> → naïve 대비 <strong>최대 1.5배 가속 (Figure 5b)</strong>.</li>
</ul>
</li>
<li>선택된 KV 항목은 연속 메모리로 dense packing.</li>
</ul>
<h3 id="33-decoupled-prefilldecode-visual-sparsity">3.3. Decoupled Prefill–Decode Visual Sparsity</h3>
<h4 id="실험-근거-table-1-robovqa">실험 근거 (Table 1, RoboVQA)</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2cc84ef7-088c-41b6-850b-943d92e1577d/image.png" alt=""></p>
<p>동일 E2E speedup 기준으로 비교 시, <strong>sparsity를 decode 쪽으로 재할당</strong>하면 task 성능이 일관되게 향상됨.</p>
<ul>
<li>Prefill은 <strong>context 무결성 유지에 충분한 토큰 보유</strong>.</li>
<li>Decode sparsity가 <strong>지배적 latency 소스를 직접 타겟팅</strong>.</li>
</ul>
<h4 id="4-analysis--retrieval-토큰의-두-기능적-역할">4. Analysis — Retrieval 토큰의 두 기능적 역할</h4>
<p>decoding에서 retrieval되는 토큰은 <strong>query 축 기준</strong>으로 두 종류로 나뉨:</p>
<table>
<thead>
<tr>
<th>역할</th>
<th>동작</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Visual Attention Sinks</strong></td>
<td><strong>queries 전반에 걸쳐 안정적 활성화</strong> (쿼리 바뀌어도 계속 선택)</td>
<td>cross-modal attention을 안정화하는 지속적 attractor / scene 이해의 anchor</td>
</tr>
<tr>
<td><strong>Visual Retrieval Tokens</strong></td>
<td><strong>query 콘텐츠에 따라 동적 변화</strong></td>
<td>task-specific 관련성 캡처</td>
</tr>
</tbody></table>
<blockquote>
<p>※ 분류 기준은 <strong>query 축</strong>(쿼리 바뀔 때 안정 vs 변동)임. &quot;레이어별 차이&quot;는 별개 관찰(4.6/Fig.8: sink는 shallow layer 우세, retrieval은 deep layer에서 emerge).</p>
</blockquote>
<ul>
<li>이 분리 덕분에 SparseVILA는 <strong>효율적·query-adaptive retrieval</strong>을 하면서도 <strong>contextual grounding을 유지</strong>함.</li>
<li>VisionZip, VAR(Visual Attention Redistribution)의 관찰과 일치 (4.6 정성 분석이 뒷받침).</li>
</ul>
<h2 id="4-experiments">4. Experiments</h2>
<h3 id="41-setup">4.1. Setup</h3>
<h4 id="1-multi-turn-평가에서의-정보-누출information-leakage-처리">1. Multi-Turn 평가에서의 정보 누출(information leakage) 처리</h4>
<ul>
<li><strong>문제</strong>: 같은 이미지의 질문들을 multi-turn으로 묶으면, <strong>이전 질문이 다음 질문의 답을 흘릴</strong> 수 있음.<ul>
<li>예 (GQA): Q1 &quot;하늘 앞 사람이 뭐 하나?&quot; → Q2 &quot;그 사람은 무엇 앞에 있나?&quot; → Q1이 Q2 답을 이미 노출 → 모델이 <strong>이미지 없이도</strong> 정답 가능.</li>
</ul>
</li>
<li><strong>해결 — partial KV cache eviction</strong>: 각 라운드 종료 후 <strong>직전 질문·답변(Q&amp;A)에 해당하는 KV 항목만 제거</strong>.</li>
<li><strong>효과</strong>: 시각적 KV cache 재사용의 효율은 유지하면서, turn 간 의도치 않은 context 이월(carryover)은 차단.</li>
</ul>
<blockquote>
<p>한 줄: &quot;이전 turn의 질문·답변 KV만 지워서 누출은 막고, 시각 KV 재사용 이득은 살린다.&quot;</p>
</blockquote>
<h4 id="2-baseline-분류">2. Baseline 분류</h4>
<table>
<thead>
<tr>
<th>범주</th>
<th>정의</th>
<th>포함 방법</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Query-agnostic</strong></td>
<td>텍스트 입력 참조 없이 중복 시각 토큰 pruning</td>
<td>VisionZip, PruMerge, HIRED</td>
</tr>
<tr>
<td><strong>Query-aware</strong></td>
<td>언어 context 기반으로 토큰 선택 적응</td>
<td>FastV, PDrop, SparseVLM</td>
</tr>
</tbody></table>
<h4 id="3-chunked-방식-↔-attention-map-실체화materialize-관계">3. Chunked 방식 ↔ attention map 실체화(materialize) 관계</h4>
<ul>
<li>baseline 대부분은 <strong>attention weights로 salience 추정</strong> → visual encoder에서 메모리·latency 집약적, 긴 context에서 <strong>GPU 한계 초과</strong>.</li>
<li><strong>Chunked 방식 = 전체 attention map을 한 번에 만들지 않고 조각(chunk)으로 나눠 계산</strong>하여 메모리 제약 내에 맞추는 것.<ul>
<li>즉 질문대로, baseline은 (조각 단위로라도) attention map을 <strong>실체화(materialize)</strong>해야 함.</li>
</ul>
</li>
<li><strong>대조 — SparseVILA</strong>: fused Triton 커널로 <strong>전체 attention map 자체를 실체화하지 않고</strong> salience 계산 (Fig.5) → 메모리·속도 우위.</li>
</ul>
<h4 id="4-inference-setting">4. Inference Setting</h4>
<ul>
<li><strong>파이프라인</strong>: TinyChat 기반 최적화.</li>
<li><strong>양자화</strong>:<ul>
<li>Visual encoder → <strong>W8A8</strong> (SmoothQuant)</li>
<li>LLM → <strong>W4A16</strong> (AWQ)</li>
<li>양자화 버전이 vanilla 대비 <strong>E2E 2.4× 가속</strong> (accuracy 저하 무시 가능); 이후 모든 결과는 이 양자화 버전 기준.</li>
</ul>
</li>
<li><strong>하드웨어/디코딩</strong>: 단일 <strong>NVIDIA A6000</strong>, batch size 1, greedy decoding (별도 명시 없으면).</li>
<li><strong>Latency 측정 (E2E)</strong>: visual encoder(E) + LM prefill(P) + decoding(D). E2E = prefill 시간 + 토큰당 decoding 시간.<ul>
<li>multi-turn이므로 라운드별 query의 chunked prefill 비용을 <strong>초기 이미지 prefill로 amortize</strong>.</li>
<li>라운드 수 = 데이터셋 평균 turn 수.</li>
<li>디코딩 길이: <strong>이미지 50 tokens/round</strong>, <strong>비디오 250 tokens/round</strong>, <strong>reasoning(single-turn) 1,500 tokens</strong> (prefill+decode 합).</li>
</ul>
</li>
<li><strong>Sparsity ratio 정책</strong>: LLM 이전 <strong>일정한 prefill sparsity</strong> + 모든 레이어 <strong>균일한 decoding sparsity</strong>.<ul>
<li>layer-wise / head-aware 같은 세부 전략은 추가 최적화 여지 있으나 복잡성·튜닝 overhead 때문에 미채택 → <strong>단순성·일반화 우선</strong>, future work로 남김.</li>
</ul>
</li>
</ul>
<h3 id="42-image-benchmark-results">4.2. Image Benchmark Results</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/81d7d95d-ccef-4700-a3df-e6242225ea1b/image.png" alt=""></p>
<h3 id="43-video-benchmark-results">4.3. Video Benchmark Results</h3>
<h4 id="431-video-understanding">4.3.1. Video Understanding</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3cd6c50f-05da-4507-a438-2e25aac17cff/image.png" alt=""></p>
<h4 id="432-video-captioning">4.3.2. Video Captioning</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/4e8e079e-99e1-4ffc-8159-7c81decaf33f/image.png" alt=""></p>
<h4 id="433-visual-retrieval">4.3.3. Visual Retrieval</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8ca6930f-6723-4460-98f1-dcd07c4ce15e/image.png" alt=""></p>
<h3 id="44-reasoing-benchmark-results">4.4. Reasoing Benchmark Results</h3>
<h4 id="441-video-reasoning">4.4.1. Video Reasoning</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/39a8b496-39af-4d43-b787-7df924befd29/image.png" alt=""></p>
<h4 id="442-physical-reasoning">4.4.2. Physical Reasoning</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/0a2b8470-f902-449c-991c-b9880051450b/image.png" alt=""></p>
<h3 id="45-efficiency-analysis">4.5. Efficiency Analysis</h3>
<h4 id="sparsevila--커널kernel-최적화-3종-정리">SparseVILA — 커널(Kernel) 최적화 3종 정리</h4>
<h5 id="한-줄-요약">한 줄 요약</h5>
<p>SparseVILA는 prefill·decode 두 단계에 걸쳐 <strong>세 종류의 custom 커널</strong>로 inference를 가속함. prefill 쪽 두 개는 <strong>salience(중요도) 계산</strong>을 빠르게 하는 게 목적이고, decode 쪽 하나는 <strong>유효 KV cache를 줄여 메모리 이동 자체</strong>를 줄이는 게 목적임.</p>
<h5 id="3종-커널-비교">3종 커널 비교</h5>
<table>
<thead>
<tr>
<th>커널</th>
<th>단계</th>
<th>최적화 핵심</th>
<th>속도 향상</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Prefill salience</strong> (Fig.5a, query-agnostic)</td>
<td>prefill</td>
<td>전체 attention 행렬을 <strong>미실체화(non-materialized)</strong> — softmax 정규화 + salience 축적을 <strong>streaming</strong>으로 처리</td>
<td>SigLIP <strong>3×</strong> / QwenVL <strong>10×</strong></td>
</tr>
<tr>
<td><strong>Retrieval salience</strong> (Fig.5b, query-aware)</td>
<td>prefill 말미 / decode 직전</td>
<td>query ↔ cached vision token <strong>관련성 계산을 FlashAttention2 경로와 동시 실행</strong></td>
<td>최대 <strong>1.5× (~1.8×)</strong></td>
</tr>
<tr>
<td><strong>Decoding attention</strong> (Fig.7)</td>
<td>decode</td>
<td><strong>유효 KV cache 축소 + 연속 메모리 dense packing</strong> → 메모리 트래픽·decoding FLOPs 동시 감소</td>
<td>video <strong>11.4×</strong> / reasoning <strong>6.8×</strong></td>
</tr>
</tbody></table>
<h5 id="핵심-구분-포인트">핵심 구분 포인트</h5>
<ul>
<li><strong>Prefill 커널의 본질 = &quot;행렬 안 만들기&quot;</strong>: long-context에서 full attention matrix를 명시적으로 만들면 메모리·latency 폭증 → streaming으로 우회.</li>
<li><strong>Decode 커널의 본질 = &quot;읽을 KV를 작게 + 연속으로&quot;</strong>: decode는 <strong>memory-bound</strong>라 병목이 HBM↔연산기 트래픽임. query-aware retrieval로 활성 토큰만 남기고 contiguous로 packing → 읽는 양↓ + 접근 패턴 효율↑ → 곧바로 속도로 직결.</li>
<li>즉 같은 &quot;Triton 커널&quot;이라도 <strong>prefill은 연산량(compute) 줄이기, decode는 메모리 이동(memory traffic) 줄이기</strong>로 목적이 다름.</li>
</ul>
<h4 id="decoding-attention-kernel-efficiency">Decoding Attention Kernel Efficiency</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/fed02e59-d92c-4e5c-9922-ac4e6d05c524/image.png" alt=""></p>
<p>Decoding Attention Kernel Efficiency는 query-aware retrieval로 유효 KV cache가 줄어든 결과, decode attention 커널이 읽는 메모리 트래픽·FLOPs가 감소해서 빨라진 decoding attention 커널 자체의 속도를 측정한 것</p>
<h4 id="empirical-vs-theoretical-latency-analysis">Empirical vs. Theoretical Latency Analysis</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a184dd11-6ed4-4a0f-89fa-dc17b0b86a3b/image.png" alt=""></p>
<p>Empirical vs. Theoretical Latency Analysis는 pruning 메트릭 계산·토큰 재조직화·선택 로직에서 생기는 overhead 때문에 이론적 속도 향상(T)이 실제 실현 속도(E)만큼 나오지 못하는, 그 overhead로 인한 이론↔실제 격차를 측정한 것</p>
<h3 id="46-qualitative-analysis">4.6. Qualitative Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/d5951314-db12-42c1-845f-b81c8a3aee55/image.png" alt=""></p>
<h4 id="sink-vs-retrieval-토큰의-레이어별-출현-fig8--2줄-핵심">Sink vs Retrieval 토큰의 레이어별 출현 (Fig.8) — 2줄 핵심</h4>
<ul>
<li><strong>Sink token = 얕은 레이어(예: Layer 2)</strong>: 쿼리가 바뀌어도 안정적으로 선택됨(IoU 높음, 70%) → 장면 이해의 지속적 앵커(anchor).</li>
<li><strong>Retrieval token = 깊은 레이어(예: Layer 19)</strong>: 쿼리 내용에 따라 선택이 동적으로 바뀜(IoU 낮음, 21%) → query-specific 관련 영역에 집중.</li>
</ul>
<blockquote>
<p>깊이가 깊어질수록 query-specific 추론이 globally-salient 구조(sink)를 점진적으로 오버라이드함. sink는 계속 존재하되 강도가 약해짐.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Rethinking Token Reduction for Large Vision-Language Models]]></title>
            <link>https://velog.io/@sangjun_moon/Rethinking-Token-Reduction-for-Large-Vision-Language-Models</link>
            <guid>https://velog.io/@sangjun_moon/Rethinking-Token-Reduction-for-Large-Vision-Language-Models</guid>
            <pubDate>Wed, 27 May 2026 01:07:08 GMT</pubDate>
            <description><![CDATA[<h1 id="rethinking-token-reduction-for-large-vision-language-models">Rethinking Token Reduction for Large Vision-Language Models</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Rethinking+Token+Reduction+for+Large+Vision-Language+Models&amp;btnG=">MetaCompress</a></p>
<p><a href="https://github.com/MArSha1147/MetaCompress">코드</a></p>
<hr>
<h2 id="abs--1-introduction">Abs. &amp; 1. Introduction</h2>
<h3 id="기존-문제점">기존 문제점</h3>
<h4 id="1-기존-token-reduction은-single-turn-vqa에만-맞춰져-있음">1. 기존 Token Reduction은 Single-Turn VQA에만 맞춰져 있음</h4>
<p>대부분의 token reduction 방법은 &quot;한 번의 질문에 한 번 답하는&quot; single-turn VQA를 전제로 설계되어 있다. 하지만 실제 사용 환경은 하나의 이미지에 대해 여러 턴에 걸쳐 질문하는 <strong>Multi-Turn VQA(MT-VQA)</strong> 가 훨씬 현실적이다. MT-VQA에서는 후속 질문이 이미지의 어떤 영역을 참조할지 미리 알 수 없어서 기존 방법이 직접 적용되기 어렵다.</p>
<h4 id="2-prompt-dependent-방식의-한계">2. Prompt-Dependent 방식의 한계</h4>
<p>FastV 등은 <strong>첫 번째 질문(prompt)과의 attention</strong>을 기준으로 visual token을 선별한다. 이 경우 첫 질문과 관련 없는 영역의 token이 삭제되며, KV cache 구조상 삭제된 token은 이후 턴에서도 복구가 불가능하다. 결과적으로 후속 질문에 필요한 정보가 유실된다.</p>
<h4 id="3-prompt-agnostic-방식의-한계">3. Prompt-Agnostic 방식의 한계</h4>
<p>LLaVA-PruMerge 등은 prompt 없이 이미지 자체의 attention score(예: [CLS] token attention)를 기준으로 token을 줄인다. MT-VQA에 기술적으로 적용 가능하지만, 이 기준은 인간의 직관에서 나온 <strong>휴리스틱</strong>이며 최적성이 보장되지 않는다. 논문 Section 4의 실험에서, 학습으로 찾은 최적 compression이 유지하는 token들이 [CLS] attention이나 prompt attention과 거의 무관함을 실증했다.</p>
<hr>
<h3 id="metacompress의-해결법">MetaCompress의 해결법</h3>
<h4 id="1-token-reduction을-학습-가능한-최적화-문제로-통합">1. Token Reduction을 학습 가능한 최적화 문제로 통합</h4>
<p>기존에 별개로 다뤄지던 token pruning과 merging을 하나의 <strong>compression matrix $P (∈ ℝ^{(m×n)})$</strong> 로 통합한다. 핵심 목표는 &quot;P로 압축한 visual sequence를 사용했을 때, 원본 대비 LLM 응답의 차이가 최소가 되는 P를 찾는 것&quot;이다.</p>
<h4 id="2-휴리스틱을-배제한-학습-기반-접근">2. 휴리스틱을 배제한 학습 기반 접근</h4>
<p>[CLS] attention, prompt attention 등 인간이 설계한 기준 대신, <strong>데이터로부터 직접 최적 압축 전략을 학습</strong>한다. 이를 통해 기존 휴리스틱의 suboptimal 문제를 근본적으로 해소한다.</p>
<h4 id="3-dynamic-resolution에-대응하는-compression-matrix-generator">3. Dynamic Resolution에 대응하는 Compression Matrix Generator</h4>
<p>$P ∈ ℝ^{(m×n)}$에서 n은 입력 visual token의 수인데, 실제 이미지는 해상도가 제각각이다. LLaVA-NeXT나 InternLM-XComposer-2.5 같은 최신 LVLM은 multi-scale vision tower를 사용하기 때문에, 이미지에 따라 visual token 수 n이 달라진다. 이는 곧 <strong>이미지마다 P의 크기 자체가 달라져야 한다</strong>는 뜻이다. 이때 가능한 모든 해상도에 대해 각각의 P를 미리 학습해 놓는 것은 조합이 방대하여 비현실적이고 우아하지도 않다. 이를 해결하기 위해 MetaCompress는 고정된 P를 학습하는 대신, 입력 이미지로부터 <strong>P를 동적으로 생성하는 모듈 $P_{meta}$</strong>를 설계한다. $P_{meta}$는 position embedding, query down-sample projection, key projection, weighted inner product로 구성되며, 어떤 길이의 visual sequence가 들어오더라도 그에 맞는 크기의 P를 자동으로 생성한다.</p>
<h2 id="2-related-work">2. Related Work</h2>
<p>생략</p>
<h2 id="3-preliminaries">3. Preliminaries</h2>
<p>생략</p>
<h2 id="4-which-tokens-to-keep">4. Which Tokens to Keep?</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/20e79b1e-5473-4437-8403-6ee2c1bf44b5/image.png" alt=""></p>
<h4 id="최적-compression-matrix-p의-초기화와-학습">최적 Compression Matrix P의 초기화와 학습</h4>
<p>하나의 이미지-대화 쌍 $(I_{IMG}, I_{TXT})$에 대해, 휴리스틱 없이 <strong>데이터가 직접 알려주는 최적의 압축 행렬 $P^*$</strong>를 찾는 실험이다.</p>
<p><strong>초기화</strong>: $P_{raw} \in \mathbb{R}^{m \times n}$의 각 원소를 가우시안 분포 $\mathcal{N}(0, \sigma_{raw}^2)$에서 독립적으로 샘플링한다. 이 시점에서 $P_{raw}$는 아무런 패턴 없는 랜덤 상태이다.</p>
<p><strong>P 생성</strong>: $P_{raw}$에 행 단위 softmax를 적용하여 $P = \sigma(P_{raw})$를 얻는다. 행 단위로 정규화하는 이유는 $P$의 $i$번째 행이 &quot;압축된 $i$번째 token을 원본 $n$개 token의 어떤 가중합으로 만드는가&quot;를 나타내기 때문이다. 각 행의 가중치 합이 1이 되어야 의미 있는 조합이 된다.</p>
<p><strong>학습 과정 (Figure 1. (a))</strong>:</p>
<ol>
<li>원본 $X_{IMG}$를 LLM에 넣어 응답 분포 $p(y)$를 얻는다 (gradient 없이 고정).</li>
<li>압축된 $\tilde{X}<em>{IMG} = P \cdot X</em>{IMG}$를 LLM에 넣어 응답 분포 $p(\tilde{y})$를 얻는다 (gradient 있음).</li>
<li>두 분포의 차이인 KL divergence $\mathcal{L}<em>{pred} = D</em>{KL}(p(y) | p(\tilde{y}))$를 계산한다.</li>
<li>추가로 $P$의 각 행에 대한 엔트로피 정규화 $\mathcal{L}_{entropy}$를 적용하여 $P$가 sparse해지도록 유도한다.</li>
<li>최종 목표: $P^* = \arg\min_{P_{raw}} \mathcal{L}<em>{pred} + \alpha \cdot \mathcal{L}</em>{entropy}$를 gradient descent로 풀어 $P_{raw}$만 업데이트한다 (LLM 파라미터는 고정).
이를 통해 &quot;이 이미지에서 어떤 token을 남겨야 LLM 응답 차이가 최소가 되는가&quot;의 정답을 데이터로부터 직접 얻는다.</li>
</ol>
<h4 id="학습-결과와-휴리스틱의-비교-figure-1-b-c">학습 결과와 휴리스틱의 비교 (Figure 1. (b), (c))</h4>
<p>학습으로 얻은 $P^*$가 유지한 token들이 기존 휴리스틱 기준과 일치하는지를 검증한다.</p>
<p>$P^<em>$(데이터가 찾은 최적 compression)가 유지한 token들을 분석해보면, [CLS] attention이 높은 token이 일부 포함되어 있긴 함. 하지만 그 비율은 전체 retained token의 약 <strong>1.71%</strong>에 불과함.
이건 결국, 기존 휴리스틱(PruMerge 등)이 &quot;[CLS] attention이 높은 token을 남기자&quot;라는 전략으로 token을 골랐을 때, 실제 최적해인 $P^</em>$의 선택과 98.29%가 불일치한다는 뜻임.</p>
<p>Prompt attention에 대해서도 마찬가지임. $P^*$가 유지한 token들은 prompt attention score와도 뚜렷한 상관을 보이지 않음.</p>
<p>따라서 attention score를 기준으로 token을 선별하는 기존 휴리스틱은, 데이터가 알려주는 최적 선택과 거의 일치하지 않으므로 suboptimal이라는 결론임.</p>
<h2 id="5-method">5. Method</h2>
<h3 id="51-metacompress">5.1. MetaCompress</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/555c84f1-5501-495f-9921-ec0ccebb8fb2/image.png" alt=""></p>
<h4 id="입력">입력</h4>
<ul>
<li>$X_{IMG} \in \mathbb{R}^{n \times d}$: 원본 visual token sequence. $n$은 token 수 (이미지 해상도에 따라 가변), $d$는 embedding 차원 (예: LLaVA-1.5-7b에서 $d = 4096$)</li>
<li>목표: $n$개 token을 $m$개로 압축 ($m \ll n$)</li>
</ul>
<h4 id="step-1-position-embedding-추가">Step 1: Position Embedding 추가</h4>
<p>$X_{IMG}$에 절대 위치 정보를 더한다.</p>
<ul>
<li>$E_{pos} \in \mathbb{R}^{n \times d}$: position embedding</li>
<li>결과: $(X_{IMG} + E_{pos}) \in \mathbb{R}^{n \times d}$</li>
</ul>
<h4 id="step-2-key-생성">Step 2: Key 생성</h4>
<p>$$X_k = (X_{IMG} + E_{pos}) \cdot W_k$$</p>
<ul>
<li>$W_k \in \mathbb{R}^{d \times d_c}$: key projection. $d_c \ll d$로 설정하여 연산 효율화</li>
<li>$X_k \in \mathbb{R}^{n \times d_c}$</li>
<li>차원 흐름: $\mathbb{R}^{n \times d} \cdot \mathbb{R}^{d \times d_c} = \mathbb{R}^{n \times d_c}$</li>
</ul>
<h4 id="step-3-query-생성-down-sampling-포함">Step 3: Query 생성 (Down-sampling 포함)</h4>
<p>$$\tilde{X}<em>q = \text{Pool}(X</em>{IMG} + E_{pos} \mid k, s) \cdot W_q$$</p>
<p><strong>3-1. Fractional Pooling</strong>: 시퀀스 길이를 $n \rightarrow m$으로 줄인다. stride $s = n/m$ (소수점 허용)으로 설정하여 어떤 $n$이든 정확히 $m$개로 줄일 수 있다.</p>
<ul>
<li><p>$\text{Pool}(X_{IMG} + E_{pos} \mid k, s) \in \mathbb{R}^{m \times d}$</p>
</li>
<li><p><em>3-2. Linear Projection*</em>: pooling된 시퀀스를 $d_c$ 차원으로 변환한다.</p>
</li>
<li><p>$W_q \in \mathbb{R}^{d \times d_c}$: query projection</p>
</li>
<li><p>$\tilde{X}_q \in \mathbb{R}^{m \times d_c}$</p>
</li>
<li><p>차원 흐름: $\mathbb{R}^{m \times d} \cdot \mathbb{R}^{d \times d_c} = \mathbb{R}^{m \times d_c}$</p>
</li>
</ul>
<h4 id="step-4-compression-matrix-p-계산">Step 4: Compression Matrix $P$ 계산</h4>
<p>$$P_{raw} = \frac{\tilde{X}_q \cdot \text{diag}(\omega) \cdot X_k^\top}{\sqrt{d_c}}$$</p>
<p>$$P = \sigma(P_{raw})$$</p>
<ul>
<li>$\tilde{X}_q \in \mathbb{R}^{m \times d_c}$, $\text{diag}(\omega) \in \mathbb{R}^{d_c \times d_c}$ (learnable 대각 행렬), $X_k^\top \in \mathbb{R}^{d_c \times n}$</li>
<li>차원 흐름: $\mathbb{R}^{m \times d_c} \cdot \mathbb{R}^{d_c \times d_c} \cdot \mathbb{R}^{d_c \times n} = \mathbb{R}^{m \times n}$</li>
<li>행 단위 softmax 적용하여 $P \in \mathbb{R}^{m \times n}$ (각 행의 합 = 1)</li>
</ul>
<h4 id="step-5-visual-token-압축">Step 5: Visual Token 압축</h4>
<p>$$\tilde{X}<em>{IMG} = P \cdot X</em>{IMG}$$</p>
<ul>
<li>차원 흐름: $\mathbb{R}^{m \times n} \cdot \mathbb{R}^{n \times d} = \mathbb{R}^{m \times d}$</li>
<li>압축된 $\tilde{X}_{IMG} \in \mathbb{R}^{m \times d}$가 LLM decoder에 입력된다.</li>
</ul>
<h4 id="학습-가능한-파라미터-시퀀스-길이-n과-무관한-고정-크기">학습 가능한 파라미터 (시퀀스 길이 $n$과 무관한 고정 크기)</h4>
<table>
<thead>
<tr>
<th>파라미터</th>
<th>차원</th>
<th>역할</th>
</tr>
</thead>
<tbody><tr>
<td>$W_q$</td>
<td>$\mathbb{R}^{d \times d_c}$</td>
<td>Query projection</td>
</tr>
<tr>
<td>$W_k$</td>
<td>$\mathbb{R}^{d \times d_c}$</td>
<td>Key projection</td>
</tr>
<tr>
<td>$\omega$</td>
<td>$\mathbb{R}^{d_c}$</td>
<td>채널별 가중치 (대각 행렬)</td>
</tr>
</tbody></table>
<p>이 세 파라미터는 개별 token의 차원 변환($d \rightarrow d_c$)만 수행하므로 시퀀스 길이 $n$에 의존하지 않는다. $n$의 변화는 fractional pooling의 stride 조절과 inner product 연산이 자동으로 처리한다. 따라서 <strong>어떤 해상도의 이미지가 들어와도 동일한 파라미터로 적절한 크기의 $P$를 생성</strong>할 수 있다.</p>
<h2 id="6-experiments">6. Experiments</h2>
<h4 id="61-실험-설정">6.1. 실험 설정</h4>
<p><strong>벤치마크</strong>: 3개의 MT-VQA 벤치마크에서 평가한다.</p>
<ul>
<li><strong>MT-VQA-v2</strong>: VQA-v2 validation set 기반, 25k개의 3-turn 대화 쌍</li>
<li><strong>MT-GQA</strong>: GQA testdev-balanced set 기반, 4061개의 3-turn 대화</li>
<li><strong>ConvBench</strong>: 577개의 native multi-turn 대화, 3단계 멀티모달 능력 계층 평가</li>
<li><em>LVLM 아키텍처*</em>: 5개 모델에서 일반화 성능을 평가한다.</li>
<li>LLaVA-1.5-7b/13b (single-scale vision tower)</li>
<li>LLaVA-NeXT-7b/13b (multi-scale vision tower)</li>
<li>InternLM-XComposer-2.5-7b (multi-scale vision tower)</li>
<li><em>학습*</em>: MT-GQA training-balanced split과 MT-VQA-v2 training set에서 약 20k 샘플만 사용. ConvBench에서는 MT-VQA-v2에서 학습한 가중치로 평가 (transfer 성능 검증).</li>
</ul>
<p><strong>비교 baseline</strong>:</p>
<ul>
<li><strong>Base</strong>: token reduction 없이 원본 LVLM 그대로 평가</li>
<li><strong>Random</strong>: LLM decoder 입력 전에 visual token을 랜덤으로 제거 (3개 seed 평균)</li>
<li><strong>Sample</strong>: visual sequence에서 등간격 down-sampling</li>
<li><strong>FastV</strong>: prompt attention 기반으로 token 중요도를 측정하여 pruning (prompt-dependent)</li>
<li><strong>PruMerge</strong>: $[\text{CLS}]$ attention 기반으로 pruning + merging (LLaVA-1.5에서만 호환)<h4 id="62-비교-결과-table-1-figure-3">6.2. 비교 결과 (Table 1, Figure 3)</h4>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/db3172d9-d4bf-4db9-b89a-b835fb4d6f15/image.png" alt=""></p>
<p><strong>Table 1 — 90% reduction rate 결과</strong>:</p>
<p>MetaCompress가 모든 LVLM 아키텍처와 모든 벤치마크에서 <strong>일관되게 최고 성능</strong>을 달성한다. 주목할 점들:</p>
<ul>
<li><strong>FastV의 실패</strong>: FastV는 대부분의 설정에서 Random이나 Sample보다도 <strong>성능이 낮다</strong>. 예를 들어 LLaVA-NeXT-7b의 ConvBench에서 FastV Avg = 1.23인 반면 Random Avg = 5.61이다. 이는 Section 4에서 밝힌 &quot;attention 기반 휴리스틱은 suboptimal&quot;이라는 결론과 일치한다.</li>
<li><strong>PruMerge의 한계</strong>: LLaVA-1.5에서는 Sample보다 약간 나은 정도이며, multi-scale vision tower(LLaVA-NeXT, XComposer)와는 호환 불가하다.</li>
<li><strong>MetaCompress의 우위</strong>: ConvBench에서 학습하지 않았음에도 baseline을 큰 폭으로 능가하여 transfer 능력을 입증한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2606f716-4c58-4e30-b646-791264cc4cc8/image.png" alt=""></p>
<p><strong>Figure 3 — Reduction rate 50%~95%에서의 성능 곡선</strong>:</p>
<p>MetaCompress(빨간색)가 모든 reduction rate에서 일관되게 최상위를 유지한다. FastV는 낮은 reduction rate(50%)에서는 상대적으로 선방하지만, reduction rate가 높아질수록 급격히 하락한다. PruMerge는 높은 reduction rate에서 상대적으로 나은 편이지만 MetaCompress에는 미치지 못한다.</p>
<h4 id="63-효율성-결과-table-2">6.3. 효율성 결과 (Table 2)</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8ea2d2ca-f4b5-42db-9ede-a5c409d11c2c/image.png" alt=""></p>
<p><strong>Table 2 — 추론 효율 비교 (90% reduction, MT-GQA)</strong>:</p>
<p>MetaCompress는 가장 효율적인 baseline인 Sample과 <strong>거의 동일한 효율</strong>을 보인다.</p>
<ul>
<li><strong>LLaVA-1.5-7b</strong>: Base 대비 TTFT 232ms → 97.8ms (2.4배 감소), TFLOPs 71.4 → 13.3 (5.4배 감소)</li>
<li><strong>LLaVA-NeXT-7b</strong>: Base 대비 TTFT 484ms → 174ms (2.8배 감소), TFLOPs 95.3 → 12.7 (7.5배 감소)</li>
<li>FastV는 다른 reduction 방법들보다 TTFT와 E2ET 모두 느리고 메모리도 더 사용한다 (중간 attention matrix 계산 때문).</li>
</ul>
<h4 id="64-transfer-결과">6.4. Transfer 결과</h4>
<p>MetaCompress가 특정 학습 데이터셋에 과적합되지 않음을 검증한다.</p>
<ul>
<li><strong>Cross-dataset transfer</strong>: MT-GQA에서 학습 → MT-VQA-v2 평가 (또는 반대)에서도 성능 하락이 적다.</li>
<li><strong>ConvBench transfer</strong>: MT-VQA-v2에서 학습한 가중치로 ConvBench를 평가해도 baseline을 능가한다 (Table 1에서 확인 가능).</li>
<li><strong>Video QA transfer</strong>: 이미지 MT-VQA에서 학습한 가중치로 MT-Video-MME(비디오 QA)를 평가해도 baseline을 능가한다 (Table 8, Supplementary).</li>
</ul>
<h4 id="65-ablation-study-table-3-figure-4">6.5. Ablation Study (Table 3, Figure 4)</h4>
<p>생략</p>
<h4 id="66-시각화-figure-5">6.6. 시각화 (Figure 5)</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5b261ba7-d874-47d4-be2c-6f23c9c32dd5/image.png" alt=""></p>
<p><strong>Figure 5 — LLaVA-NeXT-7b에 대한 추가 시각화</strong>:</p>
<p>Section 4의 Figure 1(b), 1(c)와 동일한 분석을 LLaVA-NeXT-7b에서 수행한 결과이다.</p>
<ul>
<li><strong>(a) Token importance 분포</strong>: FastV 스타일의 token importance로 측정. All Tokens와 Retained Tokens의 분포가 뚜렷하게 다르지 않으며, importance가 높은 token이 특별히 더 많이 유지되지 않았다.</li>
<li><strong>(b) Prompt attention 분포</strong>: Figure 1(c)와 동일한 결론. $P^*$가 유지한 token들이 prompt attention과 무관하게 선택되었다.
이는 Section 4의 결론(attention 기반 휴리스틱은 suboptimal)이 LLaVA-NeXT-7b에서도 동일하게 성립함을 재확인한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Focus, Don’t Prune: Identifying Instruction-Relevant Regions for  Information-Rich Image Understanding]]></title>
            <link>https://velog.io/@sangjun_moon/Focus-Dont-Prune-Identifying-Instruction-Relevant-Regions-for-Information-Rich-Image-Understanding</link>
            <guid>https://velog.io/@sangjun_moon/Focus-Dont-Prune-Identifying-Instruction-Relevant-Regions-for-Information-Rich-Image-Understanding</guid>
            <pubDate>Tue, 19 May 2026 08:01:12 GMT</pubDate>
            <description><![CDATA[<h1 id="focus-dont-prune-identifying-instruction-relevant-regions-for--information-rich-image-understanding">Focus, Don’t Prune: Identifying Instruction-Relevant Regions for  Information-Rich Image Understanding</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Focus%2C+Don%E2%80%99t+Prune%3A+Identifying+Instruction-Relevant+Regions+for++Information-Rich+Image+Understanding&amp;btnG=">PinPoint</a></p>
<p><a href="https://github.com/minckwon/PinPoint">코드</a></p>
<hr>
<h2 id="abstract">Abstract</h2>
<h3 id="pinpoint는-두-단계로-구성됨">PinPoint는 두 단계로 구성됨.</h3>
<h4 id="1단계-region-selection">1단계: Region Selection</h4>
<p>먼저 입력 이미지를 ViT와 프로젝션 레이어에 통과시켜 비전 토큰을 얻음. 이 토큰들을 2D 공간 그리드로 재배열한 뒤, 슬라이딩 윈도우(W×H, stride S)를 적용해서 여러 개의 영역별 특징($R_i$)을 추출함.
그다음 Instruction-Region Alignment이 수행됨. <strong>학습 가능한 가이던스 쿼리($E$)</strong>가 각 영역의 비전 특징과 텍스트 특징에 <strong>각각</strong> scaled dot-product attention을 적용해서 <strong>$E_v$(비전 인식 표현)와 $E_t$(텍스트 인식 표현)를 만들어냄.</strong> 가이던스 쿼리는 두 모달리티를 공통 특징 공간으로 연결하는 매개체 역할을 함. 실제 유사도 비교는 이렇게 생성된 $E_v$와 $E_t$ 사이의 코사인 유사도로 수행되며, 유사도가 높은 순서대로 영역을 랭킹함. 그 후 선택된 영역들의 합산 면적이 전체 이미지의 사전 정의된 비율($r$)을 초과할 때까지 상위 영역을 적응적으로 선택함.</p>
<h4 id="2단계-region-refinement">2단계: Region Refinement</h4>
<p>1단계에서 선택된 영역들만 원본 이미지에서 크롭함. 크롭된 영역을 ViT와 프로젝션 레이어로 다시 인코딩함. 이렇게 하는 이유는 1단계에서 얻은 비전 토큰이 ViT의 글로벌 셀프 어텐션 때문에 무관한 영역의 정보에 오염되어 있기 때문임. 재인코딩을 통해 선택된 영역만의 깨끗하고 세밀한 비전 토큰을 얻을 수 있음. 이 정제된 토큰들은 원본 전체 토큰보다 훨씬 적은 수이면서도 답변에 필요한 정보가 더 밀집되어 있음. 최종적으로 이 토큰들이 텍스트 지시어와 함께 LLM에 입력되어 답변을 생성함.</p>
<h2 id="1-introduction">1. Introduction</h2>
<h3 id="배경-문제">배경 문제</h3>
<p>인포그래픽이나 문서 이미지처럼 <strong>정보가 밀집된 이미지</strong>를 이해하려면 <strong>고해상도 처리</strong>가 필요하고, 이는 <strong>대량의 비전 토큰</strong>을 생성해서 <strong>컴퓨팅 비용이 크게 증가</strong>함.</p>
<h3 id="기존-해결책과-한계">기존 해결책과 한계</h3>
<p>기존 토큰 프루닝 방법들은 LLM 디코딩 레이어의 어텐션 가중치로 토큰 중요도를 추정하고 덜 중요한 토큰을 제거하는 방식인데, 세 가지 문제가 있음.</p>
<p><strong>1. 불완전한 어텐션 맵 문제</strong> 
LLM 디코딩 레이어의 어텐션 가중치 자체가 신뢰할 수 없는 경우가 있어서, 이를 기반으로 프루닝하면 중요한 토큰이 제거되고 환각이 발생할 수 있음.</p>
<p>→ <strong>PinPoint:</strong> LLM 디코딩 레이어의 어텐션 맵을 사용하지 않음. 대신 ViT + Projection 출력인 비전 토큰을 영역 수준으로 묶고, 학습된 가이던스 쿼리를 통해 텍스트와의 유사도를 직접 계산함.</p>
<p><span style="color:red"><strong>🗡️ 공격:</strong> 결국 Region Selection에서 사용하는 비전 토큰도 ViT를 통과한 결과이므로, ViT 내부의 셀프 어텐션 과정을 모두 거친 것임. LLM 어텐션 맵은 회피했지만, ViT 어텐션을 통해 이미 오염된 정보를 기반으로 유사도를 계산하는 것이므로 신호의 신뢰성 문제가 완전히 해결된 것은 아님.</span></p>
<p><strong>2. 의미론적 단편화 문제</strong> 
이미지 속 텍스트 같은 비전 요소는 여러 토큰에 걸쳐 표현되는데, 개별 토큰 단위로 프루닝하면 이 요소들의 전체적인 문맥 의미가 깨질 수 있음.</p>
<p>→ <strong>PinPoint:</strong> 개별 토큰 단위가 아니라 슬라이딩 윈도우 단위로 영역을 선택함. 비전 요소가 여러 토큰에 걸쳐 있어도 윈도우 안에서 통째로 보존되므로 의미론적 단편화 문제를 해결함.</p>
<p><strong>3. 문맥적 얽힘 문제</strong>
ViT의 글로벌 셀프 어텐션 때문에 정답 관련 영역의 비전 토큰이 무관한 정보와 뒤섞이게 됨.</p>
<p>→ <strong>PinPoint:</strong> Region Refinement에서 선택된 영역만 크롭해서 ViT에 다시 통과시킴. 무관한 영역의 토큰이 입력에 없으므로 셀프 어텐션에서 정보가 섞이지 않음.</p>
<p><span style="color:red"><strong>🗡️ 공격:</strong> 크롭할 영역을 결정하는 Region Selection 자체가 전체 이미지를 ViT에 통과시킨 결과를 사용함. 즉 이미 문맥적 얽힘이 발생한 오염된 토큰을 기반으로 영역을 선택하는 것임. Region Refinement가 문맥적 얽힘을 해결하는 건 맞지만, 그 전 단계인 Region Selection이 오염된 정보로 판단하므로 영역 선택 자체의 정확성이 보장되지 않음. Table 4에서 Region Accuracy가 84~98%로 보고되지만, 오염되지 않은 토큰으로 선택했을 때와의 비교가 없어 이 수치가 충분히 높은 것인지 판단할 근거가 부족함.</span></p>
<h3 id="기존-벤치마크의-한계">기존 벤치마크의 한계</h3>
<p>기존 VQA 벤치마크에는 질문-답변 쌍은 있지만, 이미지에서 어떤 영역을 봐야 답을 알 수 있는지에 대한 <strong>위치 정보는 없었음.</strong> Visual CoT [37] 같은 논문에서 정답 위치를 바운딩 박스로 어노테이션한 적은 있지만, 정답이 위치한 단일 바운딩 박스만 표시하는 수준이었음. 
예를 들어 &quot;가장 부유한 경주는 무엇인가?&quot;라는 질문에 대해 &quot;멜버른 컵&quot;이라는 텍스트 위치 하나만 박스로 표시하는 방식임.</p>
<h3 id="pinpoint의-새로운-어노테이션">PinPoint의 새로운 어노테이션</h3>
<p>PinPoint 팀은 기존 벤치마크 위에 질문에 답하기 위해 봐야 하는 이미지 영역의 좌표를 새로 만들어 추가함. 이 어노테이션이 있어야 Region Selection 모듈을 학습시킬 수 있음. 핵심적인 차이는 PinPoint가 정답 영역뿐 아니라 추론에 필요한 근거 영역까지 여러 바운딩 박스로 표시한다는 점임. 같은 예시에서 &quot;멜버른 컵&quot; 위치(<strong>answer bbox</strong>), &quot;가장 부유한 경주&quot;라는 문맥이 담긴 주변 영역(<strong>evidence bbox</strong>), 그리고 이 둘을 모두 포함하는 통합 영역(<strong>encompass bbox</strong>)까지 어노테이션함.</p>
<h2 id="2-related-work">2. Related Work</h2>
<p>생략</p>
<h2 id="3-method">3. Method</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bb3113d6-e7a7-46a3-9dfa-8626eebd67f2/image.png" alt=""></p>
<h3 id="31-region-level-feature-extraction">3.1. Region-Level Feature Extraction</h3>
<p>먼저 입력 <strong>이미지</strong>를 사전 학습된 <strong>ViT</strong>와 <strong>프로젝션 레이어</strong>에 통과시켜 비전 토큰 $V \in \mathbb{R}^{T \times d}$를 얻음.
$T$는 전체 비전 토큰 수, $d$는 임베딩 차원임. </p>
<p>이 토큰들은 LLM에 입력되기 직전 단계의 표현을 사용함.
이 비전 토큰들을 2D 공간 그리드로 <strong>재배열</strong>한 뒤, 크기 $W \times H$, 스트라이드 $S$인 슬라이딩 윈도우를 적용함.</p>
<p>$i$번째 윈도우 내의 모든 토큰을 모아서 영역 수준 표현 $\mathbf{R}<em>i \in \mathbb{R}^{W \times H \times d}$를 만듦. 전체 그리드에 <strong>슬라이딩 윈도우</strong>를 적용하면 영역 컬렉션 $\mathbf{R} = {\mathbf{R}_i}</em>{i=1}^{N_r}$을 얻음. $N_r$은 총 영역 수이며 입력 이미지에 따라 달라짐.</p>
<p>이와 동시에 입력 텍스트(질문)는 <strong>BPE로 토큰화</strong>되고 <strong>임베딩</strong>되어 텍스트 표현 $\mathbf{T} \in \mathbb{R}^{M \times d}$를 형성함. $M$은 텍스트 토큰 수임.</p>
<p>결과적으로 이 단계에서는 이미지 쪽에서 영역별 비전 특징 $\mathbf{R}$, 텍스트 쪽에서 텍스트 임베딩 $\mathbf{T}$를 준비하여 다음 단계인 <strong>Instruction-Region Alignment의 입력으로 제공</strong>함.</p>
<h3 id="32-instruction-region-alignment">3.2. Instruction-Region Alignment</h3>
<h4 id="문제">문제</h4>
<p>3.1에서 얻은 영역 수준 비전 특징 $R_i$와 텍스트 특징 $T$를 직접 비교하는 것은 두 가지 근본적인 문제가 있음.</p>
<p><strong>첫째, CLS 토큰의 부재.</strong>
BERT 같은 인코더 모델에는 CLS 토큰이 있어서 전체 시퀀스의 의미를 하나의 벡터로 요약해줌. 그런데 LLaVA-NeXT 같은 디코더 전용 모델에는 CLS 토큰이 없음. 텍스트 토큰이 $M$개 있으면 $M$개의 개별 토큰 임베딩만 있을 뿐, &quot;이 질문 전체의 의미&quot;를 대표하는 단일 벡터가 없음. 그래서 영역 수준의 비전 특징과 비교하려 할 때, 텍스트 쪽에서 어떤 벡터를 대표로 써야 하는지가 불명확함.</p>
<p><strong>둘째, 서브워드 토큰화와 비전 특징 간의 불일치.</strong>
둘 다 $d$ 차원을 갖지만, 같은 차원이라고 해서 같은 의미 공간에 있는 건 아님. BPE 토큰화는 &quot;retirement&quot;를 &quot;retire&quot; + &quot;ment&quot; 같이 서브워드 단위로 쪼개는데, 이런 서브워드 하나하나의 임베딩은 비전 토큰의 임베딩과 의미적으로 대응되지 않음. 비전 토큰은 이미지의 공간적 패치를, 텍스트 토큰은 언어적 서브워드를 나타내므로 같은 $d$ 차원 공간에 있어도 서로 다른 방식으로 정보를 인코딩하고 있어 직접 유사도를 계산하면 의미 있는 결과를 얻기 어려움.</p>
<h4 id="해결-방법-학습-가능한-가이던스-쿼리">해결 방법: 학습 가능한 가이던스 쿼리</h4>
<p>이 두 문제를 해결하기 위해 학습 가능한 가이던스 쿼리 $E = \lbrace E_1, E_2, \ldots, E_K \rbrace \in \mathbb{R}^{K \times d}$를 도입함. $K$는 쿼리의 개수임. 가이던스 쿼리는 비전과 텍스트 두 모달리티를 연결하는 공통 특징 공간의 매개체 역할을 함.</p>
<h4 id="처리-과정">처리 과정</h4>
<p><strong>1단계: MLP를 통한 특징 변환</strong></p>
<p>두 모달리티 간의 정렬을 용이하게 하기 위해, 영역 수준 비전 특징 $R_i$와 텍스트 특징 $T$를 각각 별도의 MLP 레이어에 통과시켜 $R_i&#39;$와 $T&#39;$를 생성함.</p>
<p><strong>2단계: 가이던스 쿼리를 통한 모달리티 인지 표현 추출</strong></p>
<p>가이던스 쿼리 $E$가 각 모달리티의 변환된 특징과 scaled dot-product attention을 수행함.</p>
<p>비전 쪽: $E$와 $i$번째 영역 비전 특징 $R_i&#39;$ 사이에 어텐션을 적용하여 비전 인지 표현 $E_i^v \in \mathbb{R}^{K \times d}$를 얻음.</p>
<p>$$A_i^v = \text{softmax}\left(\frac{E \cdot R_i&#39;^{\top}}{\sqrt{d_k}}\right), \quad E_i^v = A_i^v \cdot R_i&#39;$$</p>
<p>텍스트 쪽: 동일한 메커니즘으로 $E$와 텍스트 특징 $T&#39;$ 사이에 어텐션을 적용하여 텍스트 인지 표현 $E^t \in \mathbb{R}^{K \times d}$를 얻음.</p>
<p>$$A^t = \text{softmax}\left(\frac{E \cdot T&#39;^{\top}}{\sqrt{d_k}}\right), \quad E^t = A^t \cdot T&#39;$$</p>
<p>여기서 $d_k$는 스케일링 팩터임.</p>
<h3 id="33-selecting-and-refining-instruction-relevant-regions">3.3. Selecting and Refining Instruction-Relevant Regions</h3>
<h4 id="region-selection">Region Selection</h4>
<p>$E_i^v$와 $E^t$ 사이의 코사인 유사도로 후보 영역에 순위를 매기고, 선택된 영역의 합산 면적이 전체 이미지의 비율 $r$을 초과할 때까지 상위 영역을 적응적으로 선택함.</p>
<h4 id="region-refinement">Region Refinement</h4>
<p>선택된 영역만 원본 이미지에서 크롭하여 ViT로 재인코딩함. 글로벌 셀프 어텐션으로 인한 무관한 문맥 오염을 제거하고, 더 적으면서도 답변에 밀집된 깨끗한 비전 토큰을 얻어 LLM에 입력함.</p>
<blockquote>
</blockquote>
<p><span style="color:red"><strong>🗡️ 공격: 크롭하면 전체 이미지에서의 위치 정보를 잃지 않나?</strong></span></p>
<blockquote>
</blockquote>
<p>전체 이미지의 비전 토큰은 순서대로 입력되므로 각 패치가 이미지의 어느 부분인지 알 수 있음. 그런데 크롭된 영역만 재인코딩하면, 해당 내용이 원본 이미지의 초반인지 중반인지 알 수 없게 됨.</p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 1: 내용 정보가 위치 정보보다 중요함</strong></p>
<blockquote>
</blockquote>
<p>크롭된 영역 자체가 질문에 답하기 위한 충분한 시각 정보를 담고 있음. &quot;이 영역이 어디에 있는가&quot;보다 &quot;이 영역 안에 무엇이 있는가&quot;가 답변 생성에 더 중요하며, 실제로 기본 PinPoint만으로도 vanilla 모델(전체 토큰 사용)보다 높은 성능을 보임.</p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 2: &quot;Ours + Global&quot; 변형으로 보완 가능함</strong></p>
<blockquote>
</blockquote>
<p>Table 2에서 재인코딩된 영역 토큰 + 전체 이미지의 저해상도 토큰(글로벌 컨텍스트)을 함께 LLM에 제공하는 설정이 모든 데이터셋에서 가장 높은 성능을 기록함. 위치 맥락이 필요한 경우 이 방식으로 보완할 수 있음.</p>
<blockquote>
</blockquote>
<p><span style="color:red"><strong>🗡️ 재공격: 그러면 &quot;Ours + Global&quot;이 더 좋다는 건, 크롭만으로는 부족하다는 반증 아닌가?</strong></span></p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 3: 트레이드오프의 문제임</strong></p>
<blockquote>
</blockquote>
<p>맞음. 논문 자체도 위치 정보 손실을 인지하고 있음. 다만 &quot;Ours + Global&quot;은 FLOPs가 84.9%로 증가하는 반면, 기본 PinPoint는 65.3%만으로도 vanilla를 초과하는 성능을 달성함. 위치 정보 손실보다 무관한 토큰 제거의 이득이 더 크기 때문에, 효율성과 정확도 간의 트레이드오프에서 합리적인 선택임.</p>
<blockquote>
</blockquote>
<p><span style="color:red"><strong>🗡️ 재공격: Qwen2-VL에서도 M-RoPE 위치 정보 손실이 문제인데, Qwen2.5-VL에서는 더 치명적이지 않나?</strong></span></p>
<blockquote>
</blockquote>
<p>Qwen2-VL의 M-RoPE는 시간·높이·너비 3축으로 위치를 인코딩하는 수준이었음. Qwen2.5-VL은 여기서 더 나아가서, 공간 차원에서 좌표를 정규화 없이 이미지의 실제 크기 스케일로 직접 표현하고, 시간 차원에서도 절대 시간 인코딩을 도입함. 즉 M-RoPE의 위치 정보 의존도가 Qwen2-VL보다 더 높아진 것임. 크롭 후 재인코딩하면 이 강화된 절대 좌표 기반 위치 정보가 크롭 이미지 기준으로 완전히 재생성되므로, Qwen2-VL보다 위치 정보 손실의 영향이 더 클 수 있음. PinPoint 논문에는 Qwen2.5-VL 실험이 없어서 이에 대한 직접적인 반박 근거가 존재하지 않음.</p>
<blockquote>
</blockquote>
<h3 id="34-training-with-contrastive-loss">3.4. Training with Contrastive Loss</h3>
<h4 id="전체-목적">전체 목적</h4>
<p>3.2에서 만든 가이던스 쿼리와 MLP를 잘 학습시켜서, 질문과 관련된 영역의 $E_i^v$와 $E^t$가 가까워지고, 관련 없는 영역의 $E_i^v$와 $E^t$는 멀어지도록 만드는 것임.</p>
<h4 id="포지티브네거티브-정의">포지티브/네거티브 정의</h4>
<p>슬라이딩 윈도우로 나눈 영역들 중에서 GT(정답) 영역의 중심과 가장 가까운 영역이 포지티브($E_{pos}^v$)임. 정답과 관련 없는 영역들이 네거티브($E_{neg}^v$)임.</p>
<h4 id="inter-modal-contrastive-loss-l_inter">Inter-modal Contrastive Loss ($L_{inter}$)</h4>
<p>배치 내 서로 다른 샘플들 간의 정렬을 다룸. 예를 들어 배치에 3개의 샘플이 있다고 하면:</p>
<ul>
<li>샘플A: &quot;미국인 평균 퇴직 저축은?&quot; + 인포그래픽 이미지</li>
<li>샘플B: &quot;개는 어디에 있나요?&quot; + 자연 이미지</li>
<li>샘플C: &quot;매출은 얼마인가?&quot; + 문서 이미지
$L_{v \rightarrow t}$는 샘플A의 포지티브 영역 $E_{pos}^v$가 샘플A의 텍스트 $E^t$와는 가까워지고, 샘플B·C의 텍스트 $\hat{E}^t$와는 멀어지도록 함. $L_{t \rightarrow v}$는 반대 방향으로 같은 작업을 수행함. 즉 서로 맞는 질문-영역 쌍은 당기고, 다른 샘플의 질문-영역 쌍은 밀어내는 대칭적 손실임.</li>
</ul>
<p>$$L_{v \rightarrow t} = -\log \frac{\exp(\text{sim}(E_{pos}^v, E^t) / \tau)}{\sum_{\hat{E}^t} \exp(\text{sim}(E_{pos}^v, \hat{E}^t) / \tau)}$$</p>
<p>$$L_{t \rightarrow v} = -\log \frac{\exp(\text{sim}(E_{pos}^v, E^t) / \tau)}{\sum_{\hat{E}<em>{pos}^v} \exp(\text{sim}(\hat{E}</em>{pos}^v, E^t) / \tau)}$$</p>
<p>$$L_{inter} = L_{v \rightarrow t} + L_{t \rightarrow v}$$</p>
<h4 id="intra-image-contrastive-loss-l_intra">Intra-image Contrastive Loss ($L_{intra}$)</h4>
<p>하나의 이미지 내부에서의 분리를 다룸. 같은 이미지 안에서 질문 $E^t$를 포지티브 영역 $E_{pos}^v$에는 가깝게, 같은 이미지의 다른 네거티브 영역들 $E_{neg}^v$과는 멀어지게 함. Inter가 &quot;이 질문은 저 이미지가 아니라 이 이미지와 매칭된다&quot;를 학습한다면, Intra는 &quot;이 이미지 안에서도 이 영역이 아니라 저 영역이 정답이다&quot;를 학습하는 것임.</p>
<p>$$L_{intra} = -\log \frac{\exp(\text{sim}(E^t, E_{pos}^v) / \tau)}{\sum_{E_{neg}^v} \exp(\text{sim}(E^t, E_{neg}^v) / \tau)}$$</p>
<h4 id="최종-손실">최종 손실</h4>
<p>$$L_{total} = L_{inter} + \lambda L_{intra}$$</p>
<h4 id="학습-범위">학습 범위</h4>
<p>LLM, ViT, 프로젝터는 모두 동결하고, 가이던스 쿼리 $E$와 두 개의 MLP 레이어만 학습함. 전체 파라미터의 1.4%만 학습하면 되므로 매우 효율적임.</p>
<blockquote>
</blockquote>
<p><span style="color:red"><strong>🗡️ 공격: Intra-image contrastive loss만으로 충분하지 않나? 왜 배치 내 다른 샘플 정보까지 써야 하는가?</strong></span></p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 1: Intra만으로는 절대적 정렬 품질을 보장할 수 없음</strong></p>
<blockquote>
</blockquote>
<p>Intra loss는 같은 이미지 내에서 포지티브 영역이 네거티브 영역보다 텍스트에 상대적으로 더 가깝기만 하면 loss가 줄어듦. 예를 들어 포지티브 유사도가 0.3이고 네거티브가 0.1, 0.2이면 순서만 맞으므로 loss는 감소함. 비전-텍스트가 실제로 잘 정렬되어 포지티브가 0.9인 것과 구분하지 못함. 즉 상대적 순서만 맞으면 통과할 수 있어서, 공통 의미 공간에서의 진정한 정렬이 보장되지 않음.</p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 2: Inter loss가 학습 신호를 풍부하게 만듦</strong></p>
<blockquote>
</blockquote>
<p>배치에 샘플 3개가 있을 때, intra만 쓰면 각 이미지 내부에서 3번의 독립적인 비교만 수행됨. Inter를 추가하면 각 텍스트를 배치 내 모든 비전 영역과 비교하므로 $3 \times 3 = 9$개의 비교가 생김. 같은 데이터에서 더 많은 비교 관계가 생기고, 이로 인해 학습 신호가 풍부해짐.</p>
<blockquote>
</blockquote>
<p><span style="color:red"><strong>🗡️ 재공격: 그러면 inter loss만 쓰면 되지 않나? Intra는 왜 필요한가?</strong></span></p>
<blockquote>
</blockquote>
<p><strong>🛡️ 방어 3: 둘은 서로 다른 관점의 학습 신호를 제공함</strong></p>
<blockquote>
</blockquote>
<p>Inter는 &quot;이 텍스트는 이 이미지의 영역과 매칭되고, 다른 이미지의 영역과는 아니다&quot;를 학습함 (이미지 간 구분). Intra는 &quot;같은 이미지 안에서도 이 영역이 정답이고 저 영역은 아니다&quot;를 학습함 (이미지 내 구분). Inter만으로는 같은 이미지 내에서 어떤 영역이 질문과 관련 있는지 세밀하게 구분하기 어렵고, intra만으로는 비전-텍스트 간 절대적 정렬이 부족함. Table 3의 ablation에서도 intra를 추가했을 때 모든 데이터셋에서 ANLS와 Region Accuracy가 일관되게 향상됨을 확인할 수 있음.</p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/32d8b39e-a32e-4a71-b4ed-b2863f469216/image.png" alt=""></p>
<h2 id="4-pinpoint-dataset">4. PinPoint Dataset</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ec0edf8e-6a31-4180-879f-d71d14bd15e6/image.png" alt=""></p>
<h2 id="5-experiments">5. Experiments</h2>
<h3 id="51-datasets">5.1. Datasets</h3>
<ul>
<li><strong>InfoVQA</strong>: 인포그래픽 이미지. 텍스트와 비전 요소가 조밀하게 배치되어 있어 세밀한 멀티모달 추론이 필요함. 가장 도전적인 벤치마크.</li>
<li><strong>SPDocVQA</strong>: 단일 페이지 문서. 문서 수준의 이해와 질의응답을 평가함.</li>
<li><strong>MPDocVQA</strong>: 다중 페이지 문서. 표, 수기 메모, 다이어그램 등 다양한 콘텐츠를 포함하며 페이지 간 추론이 필요함.
LLaVA-NeXT는 다중 페이지를 지원하지 않아 페이지들을 연결해 하나의 이미지로 변환하여 사용함.</li>
<li><strong>GQA</strong>: 자연 이미지. 공간적 관계, 객체 속성, 논리적 추론을 포함하는 질문을 다룸. 원래 데이터셋에 GT 영역이 제공되어 있어 그대로 사용하고, 나머지 세 데이터셋은 PinPoint로 구축한 어노테이션을 사용함.</li>
</ul>
<h3 id="52-implementation-and-evaluation-details">5.2. Implementation and Evaluation Details</h3>
<h4 id="모델-및-하이퍼파라미터">모델 및 하이퍼파라미터</h4>
<ul>
<li>평가 모델: LLaVA-NeXT-Vicuna-7B, Qwen2-VL-7B</li>
<li>윈도우 크기: $10 \times 10$, 스트라이드: $7$, 목표 비율 $r$: $0.6$, 가이던스 쿼리 수 $K$: $100$</li>
<li>학습: 배치 크기 $32$, 학습률 $2e$-$5$, $\lambda = 0.5$, $5$ 에포크</li>
</ul>
<h4 id="평가-지표">평가 지표</h4>
<ul>
<li><strong>ANLS</strong>: OCR 오류나 오타 같은 미세한 차이를 허용하며 예측 정답과 GT 간 유사도를 측정</li>
<li><strong>FLOPs / Latency</strong>: 입력 처리부터 출력 생성까지의 총 컴퓨팅 비용 측정</li>
</ul>
<h4 id="비교-대상">비교 대상</h4>
<ul>
<li><strong>토큰 감소 방법</strong> (효율성 목표): ToMe, PyramidDrop, FastV, SparseVLM</li>
<li><strong>영역 집중 방법</strong> (정확도 목표): ViCrop (rel-attention 변형)</li>
<li><strong>베이스라인</strong>: 랜덤 토큰 샘플링</li>
</ul>
<h3 id="53-quantitative-analysis">5.3. Quantitative Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f50fb98a-89bb-41e4-b665-9baecd0bb290/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5a9a3360-e728-42b1-9011-ad8132e8be5c/image.png" alt=""></p>
<h4 id="ours--global-설정-llava-next-vs-qwen2-vl">&quot;Ours + Global&quot; 설정: LLaVA-NeXT vs Qwen2-VL</h4>
<h5 id="llava-next">LLaVA-NeXT</h5>
<p>LLaVA-NeXT의 AnyRes 모듈은 입력 이미지를 고해상도 패치(최대 6개)와 저해상도 패치(1개, 원본을 축소한 것)로 나눠 각각 ViT로 인코딩함. &quot;Ours + Global&quot;은 PinPoint가 정제한 토큰(크롭 후 재인코딩)에 추가로, 저해상도 토큰(전체 이미지를 축소해서 ViT에 통과시킨 것)을 LLM에 함께 넣는 설정임. 저해상도 토큰은 1개 패치 분량이므로 FLOPs 증가가 상대적으로 제한적임.</p>
<h5 id="qwen2-vl">Qwen2-VL</h5>
<p>Qwen2-VL은 Naive Dynamic Resolution 방식으로 이미지를 한 번만 인코딩하여 가변적 수의 토큰을 생성하므로, 별도의 저해상도 패치가 없음. 따라서 &quot;Ours + Global&quot;을 적용하면 전체 이미지 토큰을 통째로 추가해야 할 가능성이 높아, LLaVA-NeXT보다 FLOPs 증가가 더 클 수 있음.</p>
<p>Table A2에서 Qwen2-VL &quot;Ours + Global&quot;의 ANLS만 보고되어 있고(InfoVQA 0.7560, SPDocVQA 0.9380, MPDocVQA 0.8071, GQA 0.7682), FLOPs/latency는 제공되지 않아 정확한 연산량 증가는 확인 불가함.</p>
<h3 id="54-qualitative-analysis">5.4. Qualitative Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a7a9725e-634f-4a9d-a9f5-a0bcf2a34ace/image.png" alt=""></p>
<p><strong>정답 관련 영역</strong> 내의 토큰을 빈번하게 <strong>가지치기</strong>하며, 이는 흔히 환각을 일으키거나 의미론적으로 일관되지 않은 응답으로 이어짐.</p>
<h3 id="55-effiiency-of-pinpoint-in-training">5.5. Effiiency of PinPoint in Training</h3>
<p>생략</p>
<h3 id="56-ablation-studies">5.6. Ablation Studies</h3>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Each Complexity Deserves a Pruning Policy]]></title>
            <link>https://velog.io/@sangjun_moon/Each-Complexity-Deserves-a-Pruning-Policy</link>
            <guid>https://velog.io/@sangjun_moon/Each-Complexity-Deserves-a-Pruning-Policy</guid>
            <pubDate>Mon, 04 May 2026 03:40:52 GMT</pubDate>
            <description><![CDATA[<h1 id="each-complexity-deserves-a-pruning-policy">Each Complexity Deserves a Pruning Policy</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Each+Complexity+Deserves+a+Pruning+Policy&amp;btnG=">AutoPrune</a></p>
<p><a href="https://github.com/AutoLab-SAI-SJTU/AutoPrune">코드</a></p>
<ul>
<li>축1 (Modality): Image</li>
<li>축2 (압축 메커니즘): Pruning</li>
<li>축3 (학습 필요성): Training-free</li>
<li>축4 (압축 시점): LLM 내부 layer</li>
<li>축5 (Guidance 신호): Cross-modal attention 기반 상호 + 정보량(Mutual Information)</li>
<li>축6 (적응성): Sample/Task-adaptive (상호 정보량에 따라 프루닝 곡선이 동적으로 결정)</li>
<li>축7 (타겟 모델): General VLM + VLA (자율 주행)</li>
</ul>
<hr>
<h2 id="칼">칼</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/aa02758e-4078-4b2d-b180-517c21f0c585/image.png" alt=""></p>
<ul>
<li><strong>FastV의 Figure 4:</strong> 디코딩 과정에서 LLaVA-1.5-7B의 각 레이어별 어텐션 맵을 시각화한 것임. 보려고 한 것은 시각적 토큰이 레이어 깊이에 따라 얼마나 주의를 받는지임. 각 출력 토큰이 시스템 프롬프트, 이미지 토큰, 사용자 인스트럭션, 출력 토큰에 부여하는 어텐션 점수 분포를 레이어별로 계산하여 어텐션 맵으로 나타냄. 이를 통해 얕은 레이어에서는 어텐션이 다양한 토큰 유형에 비교적 고르게 분포하지만, 깊은 레이어에서는 시스템 프롬프트의 특정 앵커 토큰에 어텐션이 집중되고 이미지 토큰에 대한 어텐션은 극도로 희소해진다는 것을 보임.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/d96e54f2-94a3-49b0-be8e-0f9cfb1699c6/image.png" alt=""></p>
<ul>
<li><strong>AutoPrune의 Figure 1:</strong> 교차 모드 주의(cross-modal attention)가 레이어에 따라 어떻게 변화하는지를 작업 복잡도별로 시각화한 것임. 보려고 한 것은 단순한 작업과 복잡한 작업에서 시각-텍스트 간 주의 패턴이 어떻게 다른지임. 텍스트 토큰이 시각적 토큰에 부여하는 교차 모드 어텐션을 레이어 2, 4, 8, 16, 31에서 계산하여 이미지 위에 히트맵으로 나타냄. 이를 통해 단순한 작업(Q1<del>Q3)에서는 초기 레이어에서 주의가 대상 영역에 빠르게 수렴하여 안정적으로 유지되지만, 복잡한 작업(Q4</del>Q6)에서는 주의가 레이어마다 다른 영역으로 이동하며 점진적으로만 정답 영역에 수렴한다는 것을 보임.</li>
</ul>
<hr>
<h2 id="abstract">Abstract</h2>
<p>기존에는 디코더 후반부의 시각적 토큰이 상대적으로 적은 주의를 받는다는 경험적 관찰을 바탕으로, 레이어별로 <strong>미리 정해진 고정 스케줄</strong>에 따라 토큰을 제거하는 <strong>휴리스틱 기반</strong> 프루닝 방식이 주로 사용되었음. </p>
<p>⇒ 입력마다 <strong>다른 복잡도를 반영하지 못하고</strong> 모델의 실제 추론 과정에 맞춰 토큰 제거를 조정할 수 없다는 한계가 있었음.</p>
<p>⇒ <strong>AutoPrune</strong>은 시각적 토큰과 텍스트 토큰 간의 <strong>상호 정보량</strong>을 측정한 뒤, 이 신호를 예산 제약이 적용된 <strong>로지스틱 유지 곡선에 투영</strong>함으로써 <strong>샘플 및 작업의 복잡도에 따라</strong> 프루닝 정책을 <strong>동적으로</strong> 조정함. </p>
<h2 id="1-introduction">1. Introduction</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c20f11a3-3349-4622-91f3-dab4b2a084f9/image.png" alt=""></p>
<p>실험적으로도 <strong>돌출도 패턴</strong>이 이미지와 <strong>쿼리에 따라 크게 달라짐</strong>이 확인되었음. 이에 본 연구는 신경과학에서 영감을 얻어, <strong>단순한 작업</strong>에서는 주의가 초기 레이어에서 <strong>빠르게 수렴</strong>하고 <strong>복잡한 작업</strong>에서는 분산된 주의가 <strong>여러 레이어에 걸쳐 유지</strong>된다는 탐색-활용 패턴이 VLM에서도 동일하게 나타남을 확인했으며, 이를 통해 고정된 프루닝 스케줄로는 다양한 복잡도의 추론 요구를 충족할 수 없음을 보임.</p>
<blockquote>
</blockquote>
<p><strong>돌출도 패턴</strong></p>
<blockquote>
</blockquote>
<p><strong>돌출도(Saliency)</strong>는 각 시각적 토큰이 모델의 추론 과정에서 <strong>얼마나 중요하게 취급되는지</strong>를 나타내는 지표임. 구체적으로는 교차 모드 주의(cross-modal attention)에서 <strong>텍스트 토큰이 특정 시각적 토큰에 얼마나 높은 주의 가중치를 부여하는지</strong>를 의미함. 
돌출도가 높은 토큰은 모델이 답변을 생성하는 데 중요하다고 판단하는 영역에 해당하고, 
낮은 토큰은 상대적으로 불필요한 영역에 해당함.</p>
<blockquote>
</blockquote>
<p><strong>그림 1</strong>에서 복잡한 작업은 오른쪽에 해당하는 Q4~Q6임. </p>
<blockquote>
</blockquote>
<ul>
<li>Q4는 &quot;칠판 위에 걸려 있는 것이 무엇인가?&quot;</li>
<li>Q5는 &quot;가죽 가방이 소파 위에 놓여 있는가?&quot;</li>
<li>Q6는 &quot;냉장고의 노란 스티커 상단에 무엇이 적혀 있는가?&quot;<blockquote>
</blockquote>
이런 복잡한 작업의 특징은 두 가지로 요약할 수 있음. <blockquote>
</blockquote>
첫째, 주의가 초기 레이어에서 넓게 분산된 상태를 유지하며 점진적으로만 감소함. 이는 모델이 정답과 관련된 증거가 어디에 있는지 불확실해하기 때문임. <blockquote>
</blockquote>
둘째, 레이어 간 돌출도 위치가 변동함. 
예컨대 Q4의 경우 모델이 <strong>처음에는 칠판에 주의</strong>를 주다가 중간 레이어에서 <strong>주변 영역으로 시선을 옮기</strong>고, 레이어 16에 이르러서야 실제 정답 영역으로 돌아오는 탐색 과정을 거침. 
즉 복잡한 작업에서는 모델이 여러 후보 영역을 반복적으로 탐색하며 점진적으로 정답을 좁혀가는 패턴을 보임.</li>
</ul>
<p><strong>AutoPrune</strong>은 <strong>초기 레이어에서 시각적 토큰과 텍스트 토큰 간의 상호 정보량을 측정</strong>하여 입력 복잡성을 정량화한 뒤, 이 값을 인간의 탐색-전념-안정화 패턴을 모방한 <strong>로지스틱 유지 곡선에 매핑</strong>함. </p>
<p><strong>상호 정보량이 높으면</strong>(단순한 샘플) 곡선이 초기 레이어에서 급격히 하강하여 <strong>공격적으로 프루닝</strong>하고, 
<strong>낮으면(복잡한 샘플)</strong> 곡선의 하강을 후반 레이어로 지연시켜 <strong>보수적으로 프루닝</strong>함. </p>
<p>이때 곡선의 기울기와 변곡점이 상호 정보량에 의해 선형적으로 조절되며, 곡선을 적분하여 면적이 사용자가 지정한 계산 예산과 일치하도록 스케일링함으로써 고정된 예산 준수를 보장함.</p>
<h2 id="2-related-work">2. Related Work</h2>
<ul>
<li><p><strong>디코더 이전(Pre-decoder) 프루닝</strong>은 시각적 토큰이 LLM에 입력되기 전에 비지도 유사도나 경량 점수를 기반으로 토큰의 부분 집합을 미리 선택하는 방식이며, TopV와 FasterVLM이 대표적임.</p>
</li>
<li><p><strong>디코더 내부(Intra-decoder) 프루닝</strong>은 LLM 레이어를 거치는 추론 과정 중에 미리 설정된 레이어별 스케줄이나 어텐션 통계량을 활용하여 토큰을 점진적으로 제거하는 방식이며, PyramidDrop과 ZipVL이 대표적임.</p>
</li>
</ul>
<blockquote>
</blockquote>
<p><strong>Q:</strong> 디코더 내부(Intra-decoder) 프루닝은 어느 단계에서 수행되는 것인가?</p>
<blockquote>
</blockquote>
<p><strong>A:</strong> decoding(토큰 생성) 단계가 아니라 prefill 단계에서 수행됨. 시각적 토큰이 LLM 디코더의 여러 트랜스포머 레이어를 순차적으로 통과하는 과정 중에, 특정 레이어에서 토큰을 제거하는 방식임.</p>
<h2 id="3-method">3. Method</h2>
<h3 id="31-preliminaries">3.1. Preliminaries</h3>
<p>$$L(\xi, \pi, \rho) = \mathbb{E}<em>{(V,T,y) \sim D} [l(y, f</em>{\theta}(V, T; \xi, \pi, \rho))]$$</p>
<p>$$\min_{\xi, \pi, \rho} L(\xi, \pi, \rho) \quad \text{s.t.} \quad \sum_{i=1}^{L} c_i(\xi, \rho) \le c_{max}$$</p>
<ul>
<li><p><strong>ξ(토큰 할당 정책)</strong>는 각 디코더 레이어에서 몇 개의 시각적 토큰을 유지할지를 결정하는 정책</p>
</li>
<li><p><strong>π(토큰 선택 정책)</strong>는 유지할 토큰으로 결정된 수량 내에서 구체적으로 어떤 토큰을 남길지를 결정하는 정책</p>
</li>
<li><p><strong>ρ(토큰 회생 정책)</strong>는 이전 레이어에서 제거된 토큰을 이후 레이어에서 다시 복원하여 재매핑할지를 결정하는 정책</p>
</li>
</ul>
<p><strong>토큰 프루닝의 목적</strong>은, 전체 계산 비용이 사전에 정한 예산 $c_max$를 초과하지 않도록 하면서 모델의 성능 손실(기대 손실 L)을 최소화하는 것.</p>
<p>즉, 제한된 계산 자원 안에서 불필요한 시각적 토큰을 효과적으로 제거하여 효율성과 정확도를 동시에 확보하는 것이 핵심임.</p>
<h3 id="32-neuroscience-inspiration-and-analysis">3.2. Neuroscience Inspiration and Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f72621c1-2831-49d2-a9a4-bd1699be3be7/image.png" alt=""></p>
<h4 id="작업-샘플-적응형-토큰-수-감소">작업-샘플 적응형 토큰 수 감소:</h4>
<ul>
<li><p><strong>단순한 작업:</strong> 교차 모드 주의가 초기 레이어에서 <strong>빠르게</strong> 대상 영역으로 <strong>수렴</strong>하므로 얕은 깊이에서 공격적인 프루닝이 가능함.</p>
</li>
<li><p><strong>복잡한 작업:</strong> 주의가 넓게 분산된 채 <strong>점진적으로</strong>만 <strong>감소</strong>하므로, 토큰 제거를 더 깊은 레이어까지 미루는 것이 유리함. </p>
</li>
</ul>
<p>이는 입력의 복잡도에 따라 글로벌 토큰 궤적을 동적으로 조절하는 적응형 프루닝 정책의 필요성을 시사함.</p>
<h4 id="레이어-간-돌출도-위치-변동">레이어 간 돌출도 위치 변동:</h4>
<ul>
<li><p><strong>단순한 작업:</strong> 주의가 초기 레이어에서 <strong>수렴</strong>한 뒤 안정적으로 <strong>유지</strong>됨. </p>
</li>
<li><p><strong>복잡한 작업:</strong> <strong>돌출도의 위치</strong>가 레이어마다 <strong>변</strong>화하며, 모델이 여러 후보 영역을 탐색하다가 고차원 특징이 나타나면서 점진적으로 정답 영역으로 수렴함. </p>
</li>
</ul>
<p>따라서 복잡한 작업에서는 이러한 탐색 과정을 지원하기 위해 레이어 전반에 걸쳐 더 많은 토큰을 유지해야 함.</p>
<h3 id="33-complexity-adaptive-pruning">3.3. Complexity-Adaptive Pruning</h3>
<h4 id="복잡도-지표">복잡도 지표:</h4>
<p>상호 정보량(Mutual Information). <strong>초기 레이어</strong>에서 <strong>시각적 토큰</strong>과 <strong>텍스트 토큰</strong> 간의 상호 정보량 I(V,T)를 계산하여 샘플·작업의 복잡도를 정량화함. 어텐션 가중치를 확률로 해석하여 결합 확률과 주변 확률을 추정하고, 이로부터 상호 정보량을 직접 산출함. </p>
<ul>
<li><p>값이 크면 텍스트가 시각적 해석을 강하게 제약하는 단순한 작업이므로 공격적 프루닝이 가능</p>
</li>
<li><p>값이 작으면 대응이 약한 복잡한 작업이므로 보수적으로 토큰을 유지해야 함</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7cb005de-384e-4ae5-9df4-5637d33b69d6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8eeb9774-9532-423a-a9d8-462be0c4d12c/image.png" alt=""></p>
<ul>
<li>$N_v, N_t$: 시각, 텍스트 토큰 수</li>
<li>$\alpha_{j,i}$: 텍스트 토큰 $t_j$에서 시각 토큰 $v_i$로의 attention score</li>
</ul>
<h4 id="프루닝-정책">프루닝 정책:</h4>
<p>로지스틱 유지 함수. 이 상호 정보량 스칼라를 로지스틱(S자형) 유지 곡선에 매핑하여 레이어별 토큰 유지 비율을 결정함. </p>
<ul>
<li><p>단순한 작업에서는 초기 레이어에서 급격히 토큰을 제거</p>
</li>
<li><p>복잡한 작업에서는 후반 레이어까지 토큰 제거를 지연시킴</p>
</li>
</ul>
<p>로지스틱 함수를 선택한 이유는 형태가 단순하고, 하이퍼파라미터 조정만으로 곡선의 형태를 쉽게 변형하여 상호 정보량 지표와 직접 연동할 수 있기 때문임.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/0dee91c3-d1a7-4aea-bbfd-849d5e86572f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/becda679-d586-4b58-adda-4951775fbf06/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/cacc3ec7-a55b-4565-93ab-ac9954e931fc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f1733e34-ee43-4151-9acc-a5d5a38ea8c5/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/fda9034c-d3f9-4eb0-b1c1-9ce77565fdd7/image.png" alt=""></p>
<h4 id="전체-과정">전체 과정</h4>
<p><strong>1단계:</strong> 상호 정보량 계산. 입력 이미지와 텍스트가 들어오면, 초기 레이어의 교차 모드 어텐션 맵에서 시각-텍스트 토큰 간 상호 <strong>정보량 I(V,T)를 계산</strong>함. (식 3, 4 사용)</p>
<p><strong>2단계:</strong> 로지스틱 곡선 생성. 계산된 I(V,T)를 식 (8)에 대입하여 기울기 $k_q$와 변곡점 $x_0^q$를 산출하고, 이 값을 식 (5)에 넣어 해당 입력에 맞는 <strong>로지스틱 유지 곡선을 생성</strong>함.</p>
<p><strong>3단계:</strong> 예산 맞춤 스케일링. 생성된 곡선을 식 (6)으로 적분하여 면적을 구한 뒤, 식 (7)로 곡선을 스케일링하여 <strong>곡선 아래 면적이 사전에 지정된 계산 예산 c_max와 일치하도록 함</strong>.</p>
<p><strong>4단계:</strong> 레이어별 프루닝 실행. 각 레이어를 통과할 때마다 스케일링된 곡선에서 <strong>해당 레이어의 retention ratio를 읽어와 유지할 토큰 수를 정하고, 어텐션 점수가 낮은 토큰부터 제거함.</strong></p>
<h2 id="4-experiments">4. Experiments</h2>
<ul>
<li><p><strong>표 1 (LLaVA-1.5-7B 결과):</strong> 5개 벤치마크(MME, MMB, SQA, GQA, TextVQA)에서 기존 프루닝 방법들과 비교</p>
</li>
<li><p><strong>표 2 (LLaVA-NeXT-7B 결과):</strong> 다른 VLM에 적용하여 일반화 가능성을 검증</p>
</li>
<li><p><strong>표 3 (자율 주행 Senna 모델 결과):</strong> 하이퍼파라미터 변경 없이 VLA 모델에 적용</p>
</li>
</ul>
<h3 id="41-llava-15-7b에서-다양한-기존-방법들">4.1. LLaVA-1.5-7B에서 다양한 기존 방법들</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b544e4e1-011b-4d52-8a87-ee4a2752e59d/image.png" alt=""></p>
<h3 id="42-llava-next-7b">4.2. LLaVA-NeXT-7B</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c5a3ac48-c04e-4c89-9ffa-ad7ee0838a4b/image.png" alt=""></p>
<h3 id="43-자율-주행">4.3. 자율 주행</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/07faee9e-af34-4782-9ec2-05722164f7dd/image.png" alt=""></p>
<p><em>자율 주행은 속도가 성능에 영향을 줄 수 있을 듯. 왜냐하면, 빨리 핸들을 꺾어야 되는데, 전체 토큰으로 추론하면, 느려서 오히려 사고가 나는...</em></p>
<p>⇒ 좋은 접근인데, 그런 걸 평가하는 게 아님.</p>
<h3 id="44-ablation-studies">4.4. Ablation studies</h3>
<p>생략</p>
<h2 id="5-conclusion-and-limitation">5. Conclusion and Limitation</h2>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PACT: Pruning and Clustering-Based Token Reduction for Faster Visual  Language Models]]></title>
            <link>https://velog.io/@sangjun_moon/PACT-Pruning-and-Clustering-Based-Token-Reduction-for-Faster-Visual-Language-Models</link>
            <guid>https://velog.io/@sangjun_moon/PACT-Pruning-and-Clustering-Based-Token-Reduction-for-Faster-Visual-Language-Models</guid>
            <pubDate>Tue, 28 Apr 2026 07:32:39 GMT</pubDate>
            <description><![CDATA[<h1 id="pact-pruning-and-clustering-based-token-reduction-for-faster-visual--language-models">PACT: Pruning and Clustering-Based Token Reduction for Faster Visual  Language Models</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=PACT%3A+Pruning+and+Clustering-Based+Token+Reduction+for+Faster+Visual++Language+Models&amp;btnG=">PACT</a></p>
<p><a href="https://github.com/orailix/PACT">코드</a></p>
<ul>
<li>축1 (Modality): Image VLM + Video</li>
<li>축2 (압축 메커니즘): Pruning + Merging</li>
<li>축3 (학습 필요성): Training-free</li>
<li>축4 (압축 시점): LLM 내부 layer</li>
<li>축5 (Guidance 신호): Key-Query 내적 + Hidden state norm</li>
<li>축6 (적응성): Fixed ratio</li>
<li>축8 (타겟 모델): General VLM</li>
</ul>
<hr>
<h2 id="칼">칼</h2>
<hr>
<h2 id="abstract">Abstract</h2>
<p>FastV는 attention score로 토큰 중요도를 정의함
⇒ FlashAttention과 호환 X
⇒ <strong>PACT: Attention score없이</strong> 토큰 중요도를 정의</p>
<p>FastV는 only pruning
⇒ <strong>PACT: pruning + merging</strong> (by <strong>DBDPC</strong>(Distance Bounded Density Peak Clustering))</p>
<h2 id="1-introduction">1. Introduction</h2>
<ul>
<li><strong>1단계:</strong> EUTI로 중요하지 않은 토큰을 <strong>prune</strong></li>
<li><strong>2단계:</strong> DBDPC로 남은 중요 토큰들을 <strong>클러스터링</strong></li>
<li><strong>3단계:</strong> 1단계에서 제거된 토큰 중 클러스터 센터에 <strong>충분히 가까운 것들을 다시 해당 클러스터에 편입</strong>시켜 정보 손실을 복구</li>
<li><strong>4단계:</strong> 각 클러스터 내 토큰들을 하나의 대표 토큰으로 <strong>merge</strong>하여 최종 토큰 수를 줄임</li>
</ul>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="21-vlm">2.1. VLM</h3>
<ul>
<li><p>LLaVA-OneVision</p>
<ul>
<li>이미지를 384×384 크롭으로 분할</li>
<li>SigLIP으로 인코딩 후 쌍선형 보간법으로 토큰 축소</li>
<li>최대 8,748개 토큰</li>
</ul>
</li>
<li><p>InternVL2</p>
<ul>
<li>이미지를 448×448 타일로 분할 (이미지당 최대 40타일)</li>
<li>InternViT로 처리 후 픽셀 셔플로 토큰 축소</li>
<li>최대 10,240개 토큰</li>
</ul>
</li>
<li><p>Qwen2-VL</p>
<ul>
<li>2D Rotary Positional Embeddings로 동적 해상도 지원</li>
<li>MLP 레이어로 인접 토큰 병합</li>
<li>고해상도 이미지 시 여전히 10,000개 이상 토큰 필요</li>
</ul>
</li>
</ul>
<h3 id="22-visual-token-reduction">2.2. Visual token reduction</h3>
<ul>
<li><p><strong>LLaVA-PruMerge의 병합:</strong> 가지치기로 버려진 토큰의 정보를 유지된 토큰에 흡수시키는 것임. 목적은 프루닝으로 인한 정보 손실 완화임. 유지된 토큰들 사이의 중복은 건드리지 않으므로, 결과적으로 &quot;무관한 토큰 제거&quot;만 수행함.</p>
</li>
<li><p><strong>PACT의 병합:</strong> DBDPC로 유지된 토큰들 중 시각적으로 유사한 것들을 클러스터링한 뒤 하나의 대표 토큰으로 합치는 것임. 목적은 시각적 중복 제거임. 여기에 프루닝(EUTI)까지 결합하므로, &quot;무관한 토큰 제거&quot;와 &quot;중복 토큰 통합&quot;을 동시에 수행함.</p>
</li>
</ul>
<p>정리하면, LLaVA-PruMerge는 프루닝 후 정보 복구를 위해 병합하고, PACT는 프루닝과 별도로 중복 토큰을 줄이기 위해 병합한다는 점에서 근본적으로 다름.</p>
<h2 id="3-method">3. Method</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a545dc05-bb00-4aa9-9a76-2c85545a5359/image.png" alt=""></p>
<table>
<thead>
<tr>
<th>기호</th>
<th>의미</th>
<th>값</th>
</tr>
</thead>
<tbody><tr>
<td>$n$</td>
<td>시각적 토큰 수</td>
<td>4</td>
</tr>
<tr>
<td>$d$</td>
<td>은닉 상태 차원</td>
<td>6</td>
</tr>
<tr>
<td>$n_h$</td>
<td>어텐션 헤드 수</td>
<td>2</td>
</tr>
<tr>
<td>$d_h$</td>
<td>헤드당 차원</td>
<td>3</td>
</tr>
</tbody></table>
<p>참고로 보통 $d = n_h \times d_h$ 이므로, $6 = 2 \times 3$ 으로 딱 맞습니다.</p>
<hr>
<h4 id="1-은닉-상태-h-in-mathbbrn-times-d-→-mathbbr4-times-6">1. 은닉 상태 $H \in \mathbb{R}^{n \times d}$ → $\mathbb{R}^{4 \times 6}$</h4>
<p>이미지를 4개의 패치(토큰)로 나눴다고 생각하면:</p>
<p>$$H = \begin{bmatrix} p_1 \ p_2 \ p_3 \ p_4 \end{bmatrix} = \begin{bmatrix} 0.1 &amp; 0.3 &amp; 0.5 &amp; 0.2 &amp; 0.4 &amp; 0.6 \ 0.2 &amp; 0.1 &amp; 0.4 &amp; 0.3 &amp; 0.5 &amp; 0.1 \ 0.5 &amp; 0.2 &amp; 0.3 &amp; 0.1 &amp; 0.6 &amp; 0.4 \ 0.3 &amp; 0.4 &amp; 0.1 &amp; 0.5 &amp; 0.2 &amp; 0.3 \end{bmatrix}$$</p>
<p>각 행이 하나의 시각적 토큰(이미지 패치)의 표현입니다.</p>
<hr>
<h4 id="2-키-행렬-k-in-mathbbrn-times-n_h-times-d_h-→-mathbbr4-times-2-times-3">2. 키 행렬 $K \in \mathbb{R}^{n \times n_h \times d_h}$ → $\mathbb{R}^{4 \times 2 \times 3}$</h4>
<p>이것은 <strong>3차원 텐서</strong>입니다. 각 토큰($n$=4)마다, 각 헤드($n_h$=2)마다, 3차원($d_h$=3) 벡터가 있습니다.</p>
<p>구조를 직관적으로 보면:</p>
<pre><code>토큰 1:  헤드1 → [0.1, 0.3, 0.5]    헤드2 → [0.2, 0.4, 0.6]
토큰 2:  헤드1 → [0.2, 0.1, 0.4]    헤드2 → [0.3, 0.5, 0.1]
토큰 3:  헤드1 → [0.5, 0.2, 0.3]    헤드2 → [0.1, 0.6, 0.4]
토큰 4:  헤드1 → [0.3, 0.4, 0.1]    헤드2 → [0.5, 0.2, 0.3]</code></pre><hr>
<h4 id="3-아래첨자·위첨자-표기법-k_ij">3. 아래첨자·위첨자 표기법: $k_i^{(j)}$</h4>
<p>$k_i^{(j)}$ = <strong>$i$번째 토큰</strong>, <strong>$j$번째 헤드</strong>의 키 벡터</p>
<p>위 표에서 몇 가지를 꺼내보면:</p>
<p>$$k_1^{(1)} = [0.1,\ 0.3,\ 0.5] \quad \leftarrow \text{토큰 1, 헤드 1}$$</p>
<p>$$k_1^{(2)} = [0.2,\ 0.4,\ 0.6] \quad \leftarrow \text{토큰 1, 헤드 2}$$</p>
<p>$$k_3^{(1)} = [0.5,\ 0.2,\ 0.3] \quad \leftarrow \text{토큰 3, 헤드 1}$$</p>
<p>$$k_4^{(2)} = [0.5,\ 0.2,\ 0.3] \quad \leftarrow \text{토큰 4, 헤드 2}$$</p>
<p>쿼리도 동일한 구조입니다. 예를 들어 $q_2^{(1)}$은 &quot;토큰 2, 헤드 1의 쿼리 벡터&quot;이고 역시 $\mathbb{R}^{3}$ 벡터입니다.</p>
<hr>
<h3 id="31-unimportant-tokens-identification">3.1. Unimportant tokens identification</h3>
<p><strong>토큰 중요도</strong>를 어떤 토큰이 다른 모든 토큰으로부터 받는 <strong>총 어텐션 점수</strong>로 정의하는 것에는 세 가지 주요 단점이 있음.</p>
<ol>
<li><p>현재의 VLMs는 attention score 출력을 지원하지 않는 FlashAttention을 사용.</p>
</li>
<li><p>Attention score는 masking으로 인해 편향이 발생.
Figure 1에서 볼 수 있듯,
(a): 뒤쪽 토큰이 prune
(b): 앞쪽 토큰이 prune</p>
<p>(a)의 경우:
h1이 받는 어텐션: h1→h1, h2→h1, h3→h1, h4→h1 (4개로부터 받음) → 합산 후 4로 나눔
h4가 받는 어텐션: h4→h4 (자기 자신만 h4를 볼 수 있음) → 합산 후 4로 나눔</p>
<p>(b)의 경우:
h1이 받는 어텐션: 4개로부터 받음 → 4로 나눔
h4가 받는 어텐션: 1개로부터 받음 → 1로 나눔</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/65b3e7dd-5359-4fa0-84eb-12a612e1ddcb/image.png" alt=""></p>
<ol start="3">
<li>단일 레이어의 키·쿼리만으로는 전체 모델에 걸친 토큰의 중요도를 포착하기 어려움. <strong>각 레이어마다</strong> 저수준(색상, 엣지)부터 고수준(객체, 의미)까지 <strong>서로 다른 특징에 집중</strong>하기 때문에, 한 레이어의 관점만으로 판단하면 다른 레이어에서 중요한 토큰을 놓칠 수 있음.</li>
</ol>
<h4 id="efficient-unimportant-tokens-identification-euti">Efficient Unimportant Tokens Identification (EUTI)</h4>
<p><strong>Hidden state</strong>의 <strong>norm</strong>이 각 visual token이 network를 통해 얼마나 많은 <strong>정보</strong>를 전달하는지를 반영한다고 가정.</p>
<p>다음 과정을 따라가면 중요한 토큰들, 않은 토큰들을 구분 가능.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/70a201dd-ef6b-4a9c-9171-520ebe7a5231/image.png" alt=""></p>
<blockquote>
<p><strong>예시)</strong></p>
</blockquote>
<h4 id="1-은닉-상태-h-in-mathbbrn-times-d-→-mathbbr4-times-6-1">1. 은닉 상태 $H \in \mathbb{R}^{n \times d}$ → $\mathbb{R}^{4 \times 6}$</h4>
<blockquote>
</blockquote>
<p>이미지를 4개의 패치(토큰)로 나눴다고 생각하면:</p>
<blockquote>
</blockquote>
<p>$$H = \begin{bmatrix} h_1 \ h_2 \ h_3 \ h_4 \end{bmatrix} = \begin{bmatrix} 0.1 &amp; 0.3 &amp; 0.5 &amp; 0.2 &amp; 0.4 &amp; 0.6 \ 0.2 &amp; 0.1 &amp; 0.4 &amp; 0.3 &amp; 0.5 &amp; 0.1 \ 0.5 &amp; 0.2 &amp; 0.3 &amp; 0.1 &amp; 0.6 &amp; 0.4 \ 0.3 &amp; 0.4 &amp; 0.1 &amp; 0.5 &amp; 0.2 &amp; 0.3 \end{bmatrix}$$</p>
<blockquote>
</blockquote>
<p>각 행이 하나의 시각적 토큰(이미지 패치)의 표현입니다.</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="2-키-행렬-k-in-mathbbrn-times-n_h-times-d_h-→-mathbbr4-times-2-times-3-1">2. 키 행렬 $K \in \mathbb{R}^{n \times n_h \times d_h}$ → $\mathbb{R}^{4 \times 2 \times 3}$</h4>
<blockquote>
<blockquote>
</blockquote>
<p>3차원 텐서입니다. 각 토큰($n$=4)마다, 각 헤드($n_h$=2)마다, 3차원($d_h$=3) 벡터가 있습니다.</p>
<blockquote>
</blockquote>
</blockquote>
<pre><code>토큰 1:  헤드1 → [0.1, 0.3, 0.5]    헤드2 → [0.2, 0.4, 0.6]
토큰 2:  헤드1 → [0.2, 0.1, 0.4]    헤드2 → [0.3, 0.5, 0.1]
토큰 3:  헤드1 → [0.5, 0.2, 0.3]    헤드2 → [0.1, 0.6, 0.4]
토큰 4:  헤드1 → [0.3, 0.4, 0.1]    헤드2 → [0.5, 0.2, 0.3]</code></pre><blockquote>
<blockquote>
</blockquote>
</blockquote>
<hr>
<blockquote>
<blockquote>
</blockquote>
</blockquote>
<h4 id="3-아래첨자·위첨자-표기법-k_ij-1">3. 아래첨자·위첨자 표기법: $k_i^{(j)}$</h4>
<blockquote>
<blockquote>
</blockquote>
<p>$k_i^{(j)}$ = <strong>$i$번째 토큰</strong>, <strong>$j$번째 헤드</strong>의 키 벡터</p>
<blockquote>
</blockquote>
<p>$$k_1^{(1)} = [0.1,\ 0.3,\ 0.5] \quad \leftarrow \text{토큰 1, 헤드 1}$$</p>
<blockquote>
</blockquote>
<p>$$k_1^{(2)} = [0.2,\ 0.4,\ 0.6] \quad \leftarrow \text{토큰 1, 헤드 2}$$</p>
<blockquote>
</blockquote>
<p>$$k_3^{(1)} = [0.5,\ 0.2,\ 0.3] \quad \leftarrow \text{토큰 3, 헤드 1}$$</p>
<blockquote>
</blockquote>
<p>$$k_4^{(2)} = [0.5,\ 0.2,\ 0.3] \quad \leftarrow \text{토큰 4, 헤드 2}$$</p>
<blockquote>
</blockquote>
<p>쿼리도 동일한 구조입니다. 예를 들어 $q_2^{(1)}$은 &quot;토큰 2, 헤드 1의 쿼리 벡터&quot;이고 역시 $\mathbb{R}^{3}$ 벡터입니다.</p>
<blockquote>
</blockquote>
</blockquote>
<hr>
<blockquote>
<blockquote>
</blockquote>
</blockquote>
<h4 id="4-쿼리-행렬-q-구체-값">4. 쿼리 행렬 $Q$ 구체 값</h4>
<blockquote>
</blockquote>
<pre><code>토큰 1:  헤드1 → [0.3, 0.1, 0.4]    헤드2 → [0.5, 0.2, 0.1]
토큰 2:  헤드1 → [0.1, 0.5, 0.2]    헤드2 → [0.3, 0.4, 0.3]
토큰 3:  헤드1 → [0.4, 0.3, 0.6]    헤드2 → [0.1, 0.6, 0.5]
토큰 4:  헤드1 → [0.2, 0.1, 0.8]    헤드2 → [0.7, 0.2, 0.1]</code></pre><blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-1-글로벌-쿼리-q_global-계산">단계 1: 글로벌 쿼리 $Q_{global}$ 계산</h4>
<blockquote>
</blockquote>
<p>$$Q_{global} = \frac{1}{n}\sum_{i=1}^{n} Q_i = \frac{1}{4}(Q_1 + Q_2 + Q_3 + Q_4)$$</p>
<blockquote>
</blockquote>
<h5 id="헤드-1">헤드 1</h5>
<blockquote>
</blockquote>
<p>$$q_{global}^{(1)} = \frac{1}{4}\big([0.3, 0.1, 0.4] + [0.1, 0.5, 0.2] + [0.4, 0.3, 0.6] + [0.2, 0.1, 0.8]\big)$$</p>
<blockquote>
</blockquote>
<p>$$= \frac{1}{4}[1.0,\ 1.0,\ 2.0] = [0.25,\ 0.25,\ 0.50]$$</p>
<blockquote>
</blockquote>
<h5 id="헤드-2">헤드 2</h5>
<blockquote>
</blockquote>
<p>$$q_{global}^{(2)} = \frac{1}{4}\big([0.5, 0.2, 0.1] + [0.3, 0.4, 0.3] + [0.1, 0.6, 0.5] + [0.7, 0.2, 0.1]\big)$$</p>
<blockquote>
</blockquote>
<p>$$= \frac{1}{4}[1.6,\ 1.4,\ 1.0] = [0.40,\ 0.35,\ 0.25]$$</p>
<blockquote>
</blockquote>
<h4 id="결과">결과</h4>
<blockquote>
</blockquote>
<p>$$Q_{global} = \begin{cases} \text{헤드 1:} &amp; [0.25,\ 0.25,\ 0.50] \ \text{헤드 2:} &amp; [0.40,\ 0.35,\ 0.25] \end{cases}$$</p>
<blockquote>
<p><strong>의미</strong>: 4개의 토큰이 &quot;전체적으로 어떤 정보를 찾고 있는지&quot;를 평균낸 대표 쿼리입니다.</p>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-2-각-토큰의-중요도-점수-계산-내적">단계 2: 각 토큰의 중요도 점수 계산 (내적)</h4>
<blockquote>
</blockquote>
<p>각 토큰 $i$의 키 벡터 $k_i^{(j)}$와 글로벌 쿼리 $q_{global}^{(j)}$의 <strong>내적</strong>을 헤드별로 구합니다.</p>
<blockquote>
</blockquote>
<h5 id="헤드-1-q_global1--025-025-050">헤드 1: $q_{global}^{(1)} = [0.25,\ 0.25,\ 0.50]$</h5>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>$k_i^{(1)}$</th>
<th>내적 계산</th>
<th>점수</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>[0.1, 0.3, 0.5]</td>
<td>$0.25 \times 0.1 + 0.25 \times 0.3 + 0.50 \times 0.5$</td>
<td><strong>0.350</strong></td>
</tr>
<tr>
<td>2</td>
<td>[0.2, 0.1, 0.4]</td>
<td>$0.25 \times 0.2 + 0.25 \times 0.1 + 0.50 \times 0.4$</td>
<td><strong>0.275</strong></td>
</tr>
<tr>
<td>3</td>
<td>[0.5, 0.2, 0.3]</td>
<td>$0.25 \times 0.5 + 0.25 \times 0.2 + 0.50 \times 0.3$</td>
<td><strong>0.325</strong></td>
</tr>
<tr>
<td>4</td>
<td>[0.3, 0.4, 0.1]</td>
<td>$0.25 \times 0.3 + 0.25 \times 0.4 + 0.50 \times 0.1$</td>
<td><strong>0.225</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h5 id="헤드-2-q_global2--040-035-025">헤드 2: $q_{global}^{(2)} = [0.40,\ 0.35,\ 0.25]$</h5>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>$k_i^{(2)}$</th>
<th>내적 계산</th>
<th>점수</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>[0.2, 0.4, 0.6]</td>
<td>$0.40 \times 0.2 + 0.35 \times 0.4 + 0.25 \times 0.6$</td>
<td><strong>0.370</strong></td>
</tr>
<tr>
<td>2</td>
<td>[0.3, 0.5, 0.1]</td>
<td>$0.40 \times 0.3 + 0.35 \times 0.5 + 0.25 \times 0.1$</td>
<td><strong>0.320</strong></td>
</tr>
<tr>
<td>3</td>
<td>[0.1, 0.6, 0.4]</td>
<td>$0.40 \times 0.1 + 0.35 \times 0.6 + 0.25 \times 0.4$</td>
<td><strong>0.350</strong></td>
</tr>
<tr>
<td>4</td>
<td>[0.5, 0.2, 0.3]</td>
<td>$0.40 \times 0.5 + 0.35 \times 0.2 + 0.25 \times 0.3$</td>
<td><strong>0.345</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h5 id="중요도-점수-요약">중요도 점수 요약</h5>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>헤드 1 점수</th>
<th>헤드 2 점수</th>
</tr>
</thead>
<tbody><tr>
<td>토큰 1</td>
<td><strong>0.350</strong></td>
<td><strong>0.370</strong></td>
</tr>
<tr>
<td>토큰 2</td>
<td>0.275</td>
<td>0.320</td>
</tr>
<tr>
<td>토큰 3</td>
<td>0.325</td>
<td>0.350</td>
</tr>
<tr>
<td>토큰 4</td>
<td>0.225</td>
<td>0.345</td>
</tr>
</tbody></table>
<blockquote>
<p><strong>토큰 1</strong>이 두 헤드 모두에서 가장 높은 점수를 받았습니다. 이는 토큰 1의 키가 &quot;전체 토큰들이 평균적으로 찾고 있는 정보(글로벌 쿼리)&quot;와 가장 잘 부합한다는 뜻입니다.</p>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-3-헤드별-소프트맥스-적용">단계 3: 헤드별 소프트맥스 적용</h4>
<blockquote>
</blockquote>
<p>소프트맥스는 <strong>같은 헤드 내의 4개 토큰</strong> 사이에서 적용합니다.</p>
<blockquote>
</blockquote>
<p>$$\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{k=1}^{4} e^{x_k}}$$</p>
<blockquote>
</blockquote>
<h5 id="헤드-1-내적값-0350-0275-0325-0225">헤드 1: 내적값 [0.350, 0.275, 0.325, 0.225]</h5>
<blockquote>
</blockquote>
<p>$$e^{0.350} = 1.419, \quad e^{0.275} = 1.317, \quad e^{0.325} = 1.384, \quad e^{0.225} = 1.252$$</p>
<blockquote>
</blockquote>
<p>$$\text{합} = 1.419 + 1.317 + 1.384 + 1.252 = 5.372$$</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>$e^{x}$</th>
<th>소프트맥스</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>1.419</td>
<td>$1.419 / 5.372 =$ <strong>0.2642</strong></td>
</tr>
<tr>
<td>2</td>
<td>1.317</td>
<td>$1.317 / 5.372 =$ <strong>0.2452</strong></td>
</tr>
<tr>
<td>3</td>
<td>1.384</td>
<td>$1.384 / 5.372 =$ <strong>0.2577</strong></td>
</tr>
<tr>
<td>4</td>
<td>1.252</td>
<td>$1.252 / 5.372 =$ <strong>0.2330</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h5 id="헤드-2-내적값-0370-0320-0350-0345">헤드 2: 내적값 [0.370, 0.320, 0.350, 0.345]</h5>
<blockquote>
</blockquote>
<p>$$e^{0.370} = 1.448, \quad e^{0.320} = 1.377, \quad e^{0.350} = 1.419, \quad e^{0.345} = 1.412$$</p>
<blockquote>
</blockquote>
<p>$$\text{합} = 1.448 + 1.377 + 1.419 + 1.412 = 5.656$$</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>$e^{x}$</th>
<th>소프트맥스</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>1.448</td>
<td>$1.448 / 5.656 =$ <strong>0.2560</strong></td>
</tr>
<tr>
<td>2</td>
<td>1.377</td>
<td>$1.377 / 5.656 =$ <strong>0.2434</strong></td>
</tr>
<tr>
<td>3</td>
<td>1.419</td>
<td>$1.419 / 5.656 =$ <strong>0.2509</strong></td>
</tr>
<tr>
<td>4</td>
<td>1.412</td>
<td>$1.412 / 5.656 =$ <strong>0.2496</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-4-헤드-간-평균">단계 4: 헤드 간 평균</h4>
<blockquote>
</blockquote>
<p>$$\text{avg}<em>i = \frac{1}{n_h}\sum</em>{j=1}^{n_h} \text{Softmax}(k_i^{(j)} \cdot q_{global}^{(j)})$$</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>헤드 1</th>
<th>헤드 2</th>
<th>평균</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>0.2642</td>
<td>0.2560</td>
<td><strong>0.2601</strong></td>
</tr>
<tr>
<td>2</td>
<td>0.2452</td>
<td>0.2434</td>
<td><strong>0.2443</strong></td>
</tr>
<tr>
<td>3</td>
<td>0.2577</td>
<td>0.2509</td>
<td><strong>0.2543</strong></td>
</tr>
<tr>
<td>4</td>
<td>0.2330</td>
<td>0.2496</td>
<td><strong>0.2413</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-5-은닉-상태-노름-h_i_2-계산">단계 5: 은닉 상태 노름 $|h_i|_2$ 계산</h4>
<blockquote>
</blockquote>
<p>처음에 설정한 $H$에서 각 행의 L2 노름을 구합니다.</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>$h_i$</th>
<th>$|h_i|_2$</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>[0.1, 0.3, 0.5, 0.2, 0.4, 0.6]</td>
<td>$\sqrt{0.01+0.09+0.25+0.04+0.16+0.36} = \sqrt{0.91} =$ <strong>0.954</strong></td>
</tr>
<tr>
<td>2</td>
<td>[0.2, 0.1, 0.4, 0.3, 0.5, 0.1]</td>
<td>$\sqrt{0.04+0.01+0.16+0.09+0.25+0.01} = \sqrt{0.56} =$ <strong>0.748</strong></td>
</tr>
<tr>
<td>3</td>
<td>[0.5, 0.2, 0.3, 0.1, 0.6, 0.4]</td>
<td>$\sqrt{0.25+0.04+0.09+0.01+0.36+0.16} = \sqrt{0.91} =$ <strong>0.954</strong></td>
</tr>
<tr>
<td>4</td>
<td>[0.3, 0.4, 0.1, 0.5, 0.2, 0.3]</td>
<td>$\sqrt{0.09+0.16+0.01+0.25+0.04+0.09} = \sqrt{0.64} =$ <strong>0.800</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-6-최종-중요도-점수-s_i">단계 6: 최종 중요도 점수 $s_i$</h4>
<blockquote>
</blockquote>
<p>$$s_i = \frac{1}{n_h} \sum_{j=1}^{n_h} \text{Softmax} \left( k_i^{(j)} \cdot Q_{global}^{(j)} \right) \cdot |h_i|_2$$</p>
<blockquote>
</blockquote>
<p>즉, $s_i = \text{avg}_i \times |h_i|_2$ 입니다.</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>헤드 평균</th>
<th>× 노름</th>
<th>$s_i$</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>0.2601</td>
<td>× 0.954</td>
<td><strong>0.2481</strong></td>
</tr>
<tr>
<td>2</td>
<td>0.2443</td>
<td>× 0.748</td>
<td><strong>0.1827</strong></td>
</tr>
<tr>
<td>3</td>
<td>0.2543</td>
<td>× 0.954</td>
<td><strong>0.2426</strong></td>
</tr>
<tr>
<td>4</td>
<td>0.2413</td>
<td>× 0.800</td>
<td><strong>0.1930</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<p><strong>점수 순위: 토큰 1 (0.2481) &gt; 토큰 3 (0.2426) &gt; 토큰 4 (0.1930) &gt; 토큰 2 (0.1827)</strong></p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-7-lambda로-중요비중요-토큰-분류">단계 7: $\lambda$로 중요/비중요 토큰 분류</h4>
<blockquote>
</blockquote>
<p>$\lambda$는 &quot;비중요로 간주할 비율&quot;입니다.</p>
<blockquote>
</blockquote>
<p>$$S_{important} = {i \mid s_i \geq \text{Percentile}(s, \lambda)}$$</p>
<blockquote>
</blockquote>
<p>$$S_{unimportant} = {i \mid s_i &lt; \text{Percentile}(s, \lambda)}$$</p>
<blockquote>
</blockquote>
<h5 id="예시-a-lambda--05-하위-50-제거">예시 A: $\lambda = 0.5$ (하위 50% 제거)</h5>
<blockquote>
</blockquote>
<p>점수를 정렬하면: [0.1827, 0.1930, 0.2426, 0.2481]</p>
<blockquote>
</blockquote>
<p>50번째 퍼센타일 = 하위 2개와 상위 2개의 경계 ≈ <strong>0.2178</strong></p>
<blockquote>
</blockquote>
<p>$$S_{important} = {i \mid s_i \geq 0.2178} = {\text{토큰 1},\ \text{토큰 3}}$$</p>
<blockquote>
</blockquote>
<p>$$S_{unimportant} = {i \mid s_i &lt; 0.2178} = {\text{토큰 2},\ \text{토큰 4}}$$</p>
<blockquote>
</blockquote>
<h5 id="예시-b-lambda--025-하위-25만-제거">예시 B: $\lambda = 0.25$ (하위 25%만 제거)</h5>
<blockquote>
</blockquote>
<p>25번째 퍼센타일 ≈ <strong>0.1879</strong> (하위 1개만 걸림)</p>
<blockquote>
</blockquote>
<p>$$S_{important} = {\text{토큰 1},\ \text{토큰 3},\ \text{토큰 4}}$$</p>
<blockquote>
</blockquote>
<p>$$S_{unimportant} = {\text{토큰 2}}$$</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="전체-흐름-요약">전체 흐름 요약</h4>
<blockquote>
</blockquote>
<p>$$\underbrace{\text{내적}}<em>{\text{토큰이 얼마나 &quot;찾는 정보&quot;와 맞는가}} \xrightarrow{\text{softmax}} \underbrace{\text{상대 확률}}</em>{\text{헤드 내 정규화}} \xrightarrow{\text{헤드 평균}} \underbrace{\text{어텐션 중요도}}<em>{\text{헤드 간 종합}} \xrightarrow{\times |h_i|_2} \underbrace{s_i}</em>{\text{표현 크기까지 반영}}$$</p>
<blockquote>
</blockquote>
<hr>
<h3 id="32-clustering-based-merging-of-visual-tokens">3.2. Clustering-based merging of visual tokens</h3>
<p>다음 과정을 따라가면 클러스터 집합을 얻을 수 있음.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/6e881692-882a-4eda-af92-80273e8cc8bd/image.png" alt=""></p>
<ol>
<li>모든 점의 밀도 $\rho$를 계산해서 밀도 순으로 정렬한다.</li>
<li>밀도 1위 → 무조건 첫 번째 중심점.</li>
<li>밀도 2위 → 기존 중심점들과의 최소 거리가 $d_c$보다 큰가? 
 크면 새로운 중심, 
 작으면 그냥 패스(나중에 가장 가까운 중심에 할당됨).</li>
<li>밀도 3위, 4위, ... 같은 방식으로 반복.</li>
<li>중심이 다 정해지면, 중심이 아닌 모든 점을 가장 가까운 중심에 할당.</li>
</ol>
<blockquote>
<p><strong>예시)</strong></p>
</blockquote>
<h4 id="단계-8-dbdpc-입력-준비--k-구성">단계 8: DBDPC 입력 준비 — $K&#39;$ 구성</h4>
<blockquote>
</blockquote>
<p>$$K&#39; = {u_i \in K \mid i \in S_{important}}$$</p>
<blockquote>
</blockquote>
<p>DBDPC는 <strong>하나의 어텐션 헤드</strong>의 키 벡터를 사용합니다. 여기서는 헤드 1을 사용합니다.</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>벡터</th>
<th>원래 토큰</th>
<th>$u_i$ (헤드 1의 키)</th>
</tr>
</thead>
<tbody><tr>
<td>$u_1$</td>
<td>토큰 1</td>
<td>[0.1, 0.3, 0.5]</td>
</tr>
<tr>
<td>$u_2$</td>
<td>토큰 3</td>
<td>[0.5, 0.2, 0.3]</td>
</tr>
<tr>
<td>$u_3$</td>
<td>토큰 4</td>
<td>[0.3, 0.4, 0.1]</td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<p>입력: $q = 3$개 벡터, $d_1 = 3$차원</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-9-거리-행렬-계산">단계 9: 거리 행렬 계산</h4>
<blockquote>
</blockquote>
<p>$$d_{ij} = 1 - \frac{u_i \cdot u_j}{|u_i|_2 |u_j|_2}$$</p>
<blockquote>
</blockquote>
<p>이것은 <strong>코사인 거리</strong>입니다. 값이 0이면 완전히 같은 방향, 1이면 직교, 2이면 정반대 방향입니다.</p>
<blockquote>
</blockquote>
<h5 id="먼저-노름-계산">먼저 노름 계산</h5>
<blockquote>
</blockquote>
<p>$$|u_1| = \sqrt{0.01 + 0.09 + 0.25} = \sqrt{0.35} = 0.5916$$</p>
<blockquote>
</blockquote>
<p>$$|u_2| = \sqrt{0.25 + 0.04 + 0.09} = \sqrt{0.38} = 0.6164$$</p>
<blockquote>
</blockquote>
<p>$$|u_3| = \sqrt{0.09 + 0.16 + 0.01} = \sqrt{0.26} = 0.5099$$</p>
<blockquote>
</blockquote>
<h5 id="d_12-토큰-1-↔-토큰-3">$d_{12}$ (토큰 1 ↔ 토큰 3)</h5>
<blockquote>
</blockquote>
<p>$$u_1 \cdot u_2 = 0.1 \times 0.5 + 0.3 \times 0.2 + 0.5 \times 0.3 = 0.05 + 0.06 + 0.15 = 0.26$$</p>
<blockquote>
</blockquote>
<p>$$d_{12} = 1 - \frac{0.26}{0.5916 \times 0.6164} = 1 - \frac{0.26}{0.3647} = 1 - 0.7128 = \mathbf{0.2872}$$</p>
<blockquote>
</blockquote>
<h5 id="d_13-토큰-1-↔-토큰-4">$d_{13}$ (토큰 1 ↔ 토큰 4)</h5>
<blockquote>
</blockquote>
<p>$$u_1 \cdot u_3 = 0.1 \times 0.3 + 0.3 \times 0.4 + 0.5 \times 0.1 = 0.03 + 0.12 + 0.05 = 0.20$$</p>
<blockquote>
</blockquote>
<p>$$d_{13} = 1 - \frac{0.20}{0.5916 \times 0.5099} = 1 - \frac{0.20}{0.3017} = 1 - 0.6629 = \mathbf{0.3371}$$</p>
<blockquote>
</blockquote>
<h5 id="d_23-토큰-3-↔-토큰-4">$d_{23}$ (토큰 3 ↔ 토큰 4)</h5>
<blockquote>
</blockquote>
<p>$$u_2 \cdot u_3 = 0.5 \times 0.3 + 0.2 \times 0.4 + 0.3 \times 0.1 = 0.15 + 0.08 + 0.03 = 0.26$$</p>
<blockquote>
</blockquote>
<p>$$d_{23} = 1 - \frac{0.26}{0.6164 \times 0.5099} = 1 - \frac{0.26}{0.3143} = 1 - 0.8273 = \mathbf{0.1727}$$</p>
<blockquote>
</blockquote>
<h5 id="거리-행렬-요약">거리 행렬 요약</h5>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th></th>
<th>$u_1$</th>
<th>$u_2$</th>
<th>$u_3$</th>
</tr>
</thead>
<tbody><tr>
<td>$u_1$</td>
<td>0</td>
<td>0.2872</td>
<td>0.3371</td>
</tr>
<tr>
<td>$u_2$</td>
<td>0.2872</td>
<td>0</td>
<td>0.1727</td>
</tr>
<tr>
<td>$u_3$</td>
<td>0.3371</td>
<td>0.1727</td>
<td>0</td>
</tr>
</tbody></table>
<blockquote>
<p>$u_2$와 $u_3$(토큰 3과 토큰 4)가 거리 0.1727로 <strong>가장 가까움</strong></p>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-10-국소-밀도-rho_i-계산">단계 10: 국소 밀도 $\rho_i$ 계산</h4>
<blockquote>
</blockquote>
<p>$$\rho_i = \sum_{j} e^{-d_{ij} / d_n}$$</p>
<blockquote>
</blockquote>
<p>정규화 인자를 $d_n = 0.3$으로 설정합니다.</p>
<blockquote>
</blockquote>
<h5 id="rho_1">$\rho_1$</h5>
<blockquote>
</blockquote>
<p>$$\rho_1 = e^{0} + e^{-0.2872/0.3} + e^{-0.3371/0.3} = 1 + e^{-0.957} + e^{-1.124}$$</p>
<blockquote>
</blockquote>
<p>$$= 1 + 0.384 + 0.325 = \mathbf{1.709}$$</p>
<blockquote>
</blockquote>
<h5 id="rho_2">$\rho_2$</h5>
<blockquote>
</blockquote>
<p>$$\rho_2 = e^{-0.2872/0.3} + e^{0} + e^{-0.1727/0.3} = 0.384 + 1 + e^{-0.576}$$</p>
<blockquote>
</blockquote>
<p>$$= 0.384 + 1 + 0.562 = \mathbf{1.946}$$</p>
<blockquote>
</blockquote>
<h5 id="rho_3">$\rho_3$</h5>
<blockquote>
</blockquote>
<p>$$\rho_3 = e^{-0.3371/0.3} + e^{-0.1727/0.3} + e^{0} = 0.325 + 0.562 + 1$$</p>
<blockquote>
</blockquote>
<p>$$= \mathbf{1.887}$$</p>
<blockquote>
</blockquote>
<h5 id="밀도-순위">밀도 순위</h5>
<blockquote>
</blockquote>
<p>$$\rho_2\ (1.946) &gt; \rho_3\ (1.887) &gt; \rho_1\ (1.709)$$</p>
<blockquote>
<p>$u_2$(토큰 3)가 가장 밀도가 높음 → 주변에 가까운 벡터가 많다는 뜻</p>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-11-클러스터-중심-선택">단계 11: 클러스터 중심 선택</h4>
<blockquote>
</blockquote>
<p>컷오프 거리를 $d_c = 0.25$로 설정합니다.</p>
<blockquote>
</blockquote>
<p><strong>밀도가 높은 순서대로</strong> 처리합니다:</p>
<blockquote>
</blockquote>
<p><strong>① $u_2$ (밀도 1위, $\rho = 1.946$)</strong></p>
<blockquote>
</blockquote>
<p>아직 선택된 중심이 없으므로 → <strong>$u_2$를 첫 번째 클러스터 중심으로 지정</strong></p>
<blockquote>
</blockquote>
<p><strong>② $u_3$ (밀도 2위, $\rho = 1.887$)</strong></p>
<blockquote>
</blockquote>
<p>이미 선택된 중심 $u_2$와의 거리: $d_{23} = 0.1727$</p>
<blockquote>
</blockquote>
<p>$0.1727 &lt; d_c = 0.25$ → 너무 가까움 → <strong>중심으로 지정하지 않음</strong></p>
<blockquote>
</blockquote>
<p><strong>③ $u_1$ (밀도 3위, $\rho = 1.709$)</strong></p>
<blockquote>
</blockquote>
<p>이미 선택된 중심 $u_2$와의 거리: $d_{12} = 0.2872$</p>
<blockquote>
</blockquote>
<p>$0.2872 &gt; d_c = 0.25$ → 충분히 멀음 → <strong>$u_1$을 두 번째 클러스터 중심으로 지정</strong></p>
<blockquote>
</blockquote>
<h5 id="결과-1">결과</h5>
<blockquote>
</blockquote>
<p>$$C_{centers} = {u_2,\ u_1} = {\text{토큰 3},\ \text{토큰 1}}$$</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-12-나머지-벡터-할당">단계 12: 나머지 벡터 할당</h4>
<blockquote>
</blockquote>
<p>중심이 아닌 벡터 $u_3$(토큰 4)를 가장 가까운 중심에 할당합니다.</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>벡터</th>
<th>중심 $u_2$까지 거리</th>
<th>중심 $u_1$까지 거리</th>
<th>할당</th>
</tr>
</thead>
<tbody><tr>
<td>$u_3$ (토큰 4)</td>
<td><strong>0.1727</strong></td>
<td>0.3371</td>
<td><strong>클러스터 A</strong> ($u_2$)</td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h5 id="클러스터링-결과">클러스터링 결과</h5>
<blockquote>
</blockquote>
<p>$$C_{elements} = \begin{cases} \text{클러스터 A (중심: 토큰 3):} &amp; {\text{토큰 3},\ \text{토큰 4}} \ \text{클러스터 B (중심: 토큰 1):} &amp; {\text{토큰 1}} \end{cases}$$</p>
<blockquote>
</blockquote>
<h5 id="보장되는-성질-확인">보장되는 성질 확인</h5>
<blockquote>
</blockquote>
<p><strong>&quot;각 벡터에서 해당 클러스터 중심까지의 거리가 $d_c$ 보다 작다&quot;</strong></p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>벡터</th>
<th>소속 중심</th>
<th>거리</th>
<th>$&lt; d_c = 0.25$?</th>
</tr>
</thead>
<tbody><tr>
<td>$u_3 \to u_2$</td>
<td>토큰 4 → 토큰 3</td>
<td>0.1727</td>
<td>✅</td>
</tr>
<tr>
<td>$u_1 \to$ 자기 자신</td>
<td>토큰 1 → 토큰 1</td>
<td>0</td>
<td>✅</td>
</tr>
<tr>
<td>$u_2 \to$ 자기 자신</td>
<td>토큰 3 → 토큰 3</td>
<td>0</td>
<td>✅</td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h4 id="단계-13-비중요-토큰-복구">단계 13: 비중요 토큰 복구</h4>
<blockquote>
</blockquote>
<p>처음에 비중요($S_{unimportant}$)로 분류되었더라도, 클러스터 중심과 <strong>충분히 가깝다면</strong> 오분류되었을 가능성이 큽니다. 정보 손실을 줄이기 위해 이런 토큰을 해당 클러스터에 다시 추가합니다.</p>
<blockquote>
</blockquote>
<h5 id="복구-조건">복구 조건</h5>
<blockquote>
</blockquote>
<p>계수 $\alpha$에 기반한 임계값을 사용합니다. 비중요 토큰 $u_i$에 대해, 가장 가까운 중심 $s \in C_{centers}$와의 거리 $d_{is}$가 다음을 만족하면 복구합니다:</p>
<blockquote>
</blockquote>
<p>$$S_{added}(s) = {i \in S_{unimportant} \mid s = \arg\min_{s&#39; \in C_{centers}} d_{is&#39;} \text{ and } d_{is} &lt; \alpha \cdot d_c}$$</p>
<blockquote>
</blockquote>
<p>$$C_{elements}(s) \leftarrow C_{elements}(s) \cup S_{added}(s)$$</p>
<blockquote>
</blockquote>
<h5 id="파라미터-설정">파라미터 설정</h5>
<blockquote>
</blockquote>
<p>$$\alpha = 0.8, \quad d_c = 0.25 \quad \Rightarrow \quad \text{임계값} = \alpha \cdot d_c = 0.8 \times 0.25 = 0.20$$</p>
<blockquote>
</blockquote>
<h5 id="비중요-토큰-확인">비중요 토큰 확인</h5>
<blockquote>
</blockquote>
<p>$S_{unimportant} = {\text{토큰 2}}$이므로, 토큰 2의 키 벡터(헤드 1)를 가져옵니다:</p>
<blockquote>
</blockquote>
<p>$$u_{\text{토큰2}} = [0.2,\ 0.1,\ 0.4], \quad |u_{\text{토큰2}}| = \sqrt{0.04 + 0.01 + 0.16} = \sqrt{0.21} = 0.4583$$</p>
<blockquote>
</blockquote>
<h5 id="토큰-2-→-각-클러스터-중심까지-거리-계산">토큰 2 → 각 클러스터 중심까지 거리 계산</h5>
<blockquote>
</blockquote>
<p><strong>중심 $u_2$ (토큰 3) = [0.5, 0.2, 0.3]까지:</strong></p>
<blockquote>
</blockquote>
<p>$$u_{\text{토큰2}} \cdot u_2 = 0.2 \times 0.5 + 0.1 \times 0.2 + 0.4 \times 0.3 = 0.10 + 0.02 + 0.12 = 0.24$$</p>
<blockquote>
</blockquote>
<p>$$d = 1 - \frac{0.24}{0.4583 \times 0.6164} = 1 - \frac{0.24}{0.2825} = 1 - 0.8496 = \mathbf{0.1504}$$</p>
<blockquote>
</blockquote>
<p><strong>중심 $u_1$ (토큰 1) = [0.1, 0.3, 0.5]까지:</strong></p>
<blockquote>
</blockquote>
<p>$$u_{\text{토큰2}} \cdot u_1 = 0.2 \times 0.1 + 0.1 \times 0.3 + 0.4 \times 0.5 = 0.02 + 0.03 + 0.20 = 0.25$$</p>
<blockquote>
</blockquote>
<p>$$d = 1 - \frac{0.25}{0.4583 \times 0.5916} = 1 - \frac{0.25}{0.2712} = 1 - 0.9218 = \mathbf{0.0782}$$</p>
<blockquote>
</blockquote>
<h5 id="판정">판정</h5>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>비중요 토큰</th>
<th>가장 가까운 중심</th>
<th>거리</th>
<th>$&lt; \alpha \cdot d_c = 0.20$?</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td>토큰 2</td>
<td>토큰 1 (중심 $u_1$)</td>
<td><strong>0.0782</strong></td>
<td>✅ ($0.0782 &lt; 0.20$)</td>
<td><strong>복구!</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<p>토큰 2는 중심 $u_1$(토큰 1)과의 거리가 0.0782로, 임계값 0.20보다 작으므로 <strong>클러스터 B에 복구</strong>됩니다.</p>
<blockquote>
</blockquote>
<p>$$S_{added}(u_1) = {\text{토큰 2}}$$</p>
<blockquote>
</blockquote>
<p>$$C_{elements}(u_1) \leftarrow {\text{토큰 1}} \cup {\text{토큰 2}} = {\text{토큰 1},\ \text{토큰 2}}$$</p>
<blockquote>
</blockquote>
<h5 id="복구-후-최종-클러스터">복구 후 최종 클러스터</h5>
<blockquote>
</blockquote>
<p>$$C_{elements} = \begin{cases} \text{클러스터 A (중심: 토큰 3):} &amp; {\text{토큰 3},\ \text{토큰 4}} \ \text{클러스터 B (중심: 토큰 1):} &amp; {\text{토큰 1},\ \text{토큰 2}} \leftarrow \text{토큰 2 복구됨!} \end{cases}$$</p>
<blockquote>
<blockquote>
<p><strong>직관</strong>: 토큰 2는 EUTI 중요도 점수에서는 가장 낮았지만, 실제 키 벡터의 방향이 토큰 1과 매우 유사했습니다(코사인 거리 0.0782). 이는 토큰 2가 토큰 1과 비슷한 시각 정보를 담고 있어서, 단순히 제거하면 정보 손실이 발생할 수 있음을 의미합니다. $\alpha$ 파라미터 덕분에 이런 오분류를 바로잡을 수 있습니다.</p>
</blockquote>
</blockquote>
<h4 id="단계-14-병합--클러스터별-은닉-상태-평균">단계 14: 병합 — 클러스터별 은닉 상태 평균</h4>
<blockquote>
</blockquote>
<p>각 클러스터에 속한 토큰들의 은닉 상태 $h_i$를 평균내서 하나의 대표 벡터로 만듭니다.</p>
<blockquote>
</blockquote>
<h5 id="클러스터-a-토큰-3-토큰-4">클러스터 A: 토큰 3, 토큰 4</h5>
<blockquote>
</blockquote>
<p>$h_3 = [0.5,\ 0.2,\ 0.3,\ 0.1,\ 0.6,\ 0.4]$
$h_4 = [0.3,\ 0.4,\ 0.1,\ 0.5,\ 0.2,\ 0.3]$
$h&#39;_A = \frac{1}{2}(h_3 + h_4) = \frac{1}{2}[0.8,\ 0.6,\ 0.4,\ 0.6,\ 0.8,\ 0.7] = [0.40, 0.30, 0.20, 0.30, 0.40, 0.35]$</p>
<blockquote>
</blockquote>
<h5 id="클러스터-b-토큰-1-토큰-2">클러스터 B: 토큰 1, 토큰 2</h5>
<blockquote>
</blockquote>
<p>$h_1 = [0.1,\ 0.3,\ 0.5,\ 0.2,\ 0.4,\ 0.6]$
$h_2 = [0.2,\ 0.1,\ 0.4,\ 0.3,\ 0.5,\ 0.1]$
$h&#39;_B = \frac{1}{2}(h_1 + h_2) = \frac{1}{2}[0.3,\ 0.4,\ 0.9,\ 0.5,\ 0.9,\ 0.7] = [0.15,\ 0.20,\ 0.45,\ 0.25,\ 0.45,\ 0.35]$</p>
<blockquote>
</blockquote>
<h5 id="최종-결과">최종 결과</h5>
<blockquote>
</blockquote>
<p>$H&#39; = {h&#39;_A,\ h&#39;_B} = \begin{bmatrix} 0.40 &amp; 0.30 &amp; 0.20 &amp; 0.30 &amp; 0.40 &amp; 0.35 \ 0.15 &amp; 0.20 &amp; 0.45 &amp; 0.25 &amp; 0.45 &amp; 0.35 \end{bmatrix}$</p>
<blockquote>
</blockquote>
<h4 id="단계-15-위치-id-position-ids-할당">단계 15: 위치 ID (Position IDs) 할당</h4>
<blockquote>
</blockquote>
<p>병합된 $H&#39;$의 각 벡터에 <strong>위치 ID</strong>를 부여해야 합니다. Rotary embeddings를 사용하는 모델에서는 이 위치 ID가 이미지의 공간 구조나 비디오의 시간 순서를 결정하기 때문에 매우 중요합니다.</p>
<blockquote>
</blockquote>
<h5 id="원래-토큰의-위치-id">원래 토큰의 위치 ID</h5>
<blockquote>
</blockquote>
<p>이미지를 2×2 그리드로 나눴다고 하면, 원래 4개 토큰의 위치 ID는 다음과 같습니다:</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>토큰</th>
<th>위치 ID</th>
<th>이미지 내 위치</th>
</tr>
</thead>
<tbody><tr>
<td>토큰 1</td>
<td>0</td>
<td>좌상단</td>
</tr>
<tr>
<td>토큰 2</td>
<td>1</td>
<td>우상단</td>
</tr>
<tr>
<td>토큰 3</td>
<td>2</td>
<td>좌하단</td>
</tr>
<tr>
<td>토큰 4</td>
<td>3</td>
<td>우하단</td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h5 id="클러스터-중심의-위치-id를-그대로-사용">클러스터 중심의 위치 ID를 그대로 사용</h5>
<blockquote>
</blockquote>
<p>각 클러스터의 대표 벡터에는 <strong>해당 클러스터 중심 토큰의 위치 ID</strong>를 할당합니다.</p>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>병합 벡터</th>
<th>클러스터 중심</th>
<th>중심의 위치 ID</th>
<th>할당되는 위치 ID</th>
</tr>
</thead>
<tbody><tr>
<td>$h&#39;_A$</td>
<td>토큰 3</td>
<td>2</td>
<td><strong>2</strong></td>
</tr>
<tr>
<td>$h&#39;_B$</td>
<td>토큰 1</td>
<td>0</td>
<td><strong>0</strong></td>
</tr>
</tbody></table>
<blockquote>
</blockquote>
<h4 id="비례-어텐션">비례 어텐션</h4>
<p>토큰 병합 시 영향력이 줄어드는 문제를 보상하기 위해, 각 병합 토큰의 클러스터 크기를 가중치로 어텐션 스코어에 반영함. 예를 들어 3개가 합쳐진 토큰은 어텐션을 3배 더 받도록 조정하여, 원래 여러 토큰을 대표하고 있음을 어텐션 메커니즘에 반영함. 텍스트 토큰은 병합되지 않으므로 가중치 1로 영향 없음.</p>
<h4 id="토큰-감소를-위한-레이어-l-선택">토큰 감소를 위한 레이어 L 선택</h4>
<p>레이어 L은 계산 효율을 위해 최대한 초기 레이어를 선택하되, 키 벡터들 간 최대 거리가 충분히 확보되는 가장 이른 레이어를 선택함. 초기 레이어에서는 키들이 너무 유사해 구별이 어려우므로, 특징적 차별성이 확보되는 시점을 찾아야 함.</p>
<ul>
<li><p>공격: 초기 레이어에서 키가 유사하면 오히려 병합이 잘 되는 것 아닌가? 유사한 토큰끼리 합치는 게 목적이니까 더 효율적일 수 있음.</p>
</li>
<li><p>방어: 초기 레이어의 유사성은 토큰들이 실제로 같은 정보를 담고 있어서가 아니라, 아직 셀프 어텐션을 충분히 거치지 않아 키의 표현력이 부족하기 때문임. 이 상태에서 병합하면 실제로는 다른 정보를 가진 토큰들이 잘못 합쳐져 정보 손실이 발생함. 프루닝 역시 중요한 토큰과 불필요한 토큰을 구별할 수 없으므로 정확도가 떨어짐.</p>
</li>
</ul>
<h2 id="4-experiments">4. Experiments</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c109ce11-f21c-4b3a-9255-d743c004242e/image.png" alt=""></p>
<ul>
<li><strong>Table 1:</strong> LLaVA-OneVision-7B에서 동일 성능(98.6% Metric Ratio) 기준으로 각 방법의 감소율, 처리량, GPU 메모리를 비교함. 
PACT가 71.3% 감소율, 225% 속도 향상, 31% 메모리 절감으로 가장 우수함. 
FastV는 어텐션 점수 계산 비용 때문에 오히려 GPU 메모리가 감소 미적용 시보다 높아짐.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5c2628d8-e002-4800-938e-7b57cc41464d/image.png" alt=""></p>
<ul>
<li><strong>Table 2:</strong> LLaVA-OneVision-7B에서 PACT가 대부분의 테스트 데이터셋에서 FastV, VTW, ToME보다 우수한 성능을 보임.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/868e18f5-0f16-4c5f-8ebc-0afb1270dc5a/image.png" alt=""></p>
<ul>
<li><strong>Figure 4:</strong> LLaVA-OneVision-7B에서 PACT, DBDPC, EUTI를 다른 방법들과 다양한 감소율에서 비교함. 
PACT가 DBDPC와 EUTI 각각보다 우수하여 프루닝+클러스터링 결합의 효과를 입증함. 
EUTI는 동일 감소율에서 FastV보다 우수하면서 메모리 오버헤드도 없음.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f0b1d2ed-caf7-4834-822c-f4c84bf2c6cc/image.png" alt=""></p>
<ul>
<li><strong>Figure 5:</strong> LLaVA-1.6-Mistral-7B에서의 비교. PACT가 다른 방법들을 일관되게 능가함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f21dc88b-cb5c-468c-b4c9-13414684f3ac/image.png" alt=""></p>
<ul>
<li><strong>Figure 6:</strong> Qwen2-VL-7B-Instruct에서의 비교. PACT가 일관되게 우수함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c5b28904-3033-40bd-84ee-2aba6f7147a4/image.png" alt=""></p>
<ul>
<li><strong>Figure 7:</strong> InternVL2-8B에서의 비교. PACT가 일관되게 우수함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bb7276b3-9395-49bf-b156-b830da3ae693/image.png" alt=""></p>
<ul>
<li><strong>Figure 8:</strong> DBDPC를 응집형 클러스터링, k-means, DPC, DBSCAN과 비교함. 
DBDPC가 동일 감소율에서 성능 저하가 가장 적고 처리량도 우수함. 
클러스터 내 거리를 임계값으로 제한하는 것의 효과를 입증함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e0673bad-09ad-46f1-adb6-737a0cede5aa/image.png" alt=""></p>
<ul>
<li><strong>Figure 9:</strong> DBDPC와 EUTI의 절제 실험 결과.<ul>
<li>토큰 병합 vs 센터 선택: 감소율 50% 초과 시 병합이 더 우수함</li>
<li>비례 어텐션: 높은 감소율에서 효과적</li>
<li>위치 ID 할당: 클러스터 센터의 위치 ID를 사용하는 것이 가장 중요함 (이미지 구조, 비디오 시간 순서 반영)</li>
<li>클러스터링 입력: 키 벡터가 히든 스테이트보다 코사인 유사도 기반 거리 계산에 적합함</li>
<li>EUTI 절제: 글로벌 쿼리 점수와 히든 스테이트 노름을 결합하는 것이 각각 단독보다 우수하며, 두 지표가 상호 보완적임을 확인함</li>
</ul>
</li>
</ul>
<blockquote>
</blockquote>
<p><strong>Q: 토큰에 위치 ID라는 게 있나? 그냥 순서 정하는 용도 아닌가?</strong>
A: 아님. 위치 ID는 RoPE(Rotary Positional Embedding)의 입력으로 실제 사용되는 값임. RoPE는 위치 ID를 기반으로 Q, K에 회전 변환을 적용하여, 가까운 위치의 토큰끼리 어텐션이 높아지도록 함. 따라서 위치 ID 값 자체가 토큰 간 상대적 거리 정보를 어텐션 계산에 직접 반영함.</p>
<blockquote>
</blockquote>
<p><strong>Q: 그래서 병합 후 위치 ID 할당이 왜 중요한가?</strong>
A: 클러스터 센터의 원래 위치 ID를 유지하면 이미지의 공간 구조가 보존됨. 반면 순차 재할당이나 평균 사용 시 원래의 거리 정보가 손실되어 모델이 토큰 간 관계를 잘못 인식하게 됨. 절제 실험에서도 센터의 원래 위치 ID를 사용하는 것이 가장 우수한 성능을 보임.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8e66b927-0e0d-4249-9b26-038b73c0918e/image.png" alt=""></p>
<ul>
<li><strong>Figure 10:</strong> PACT의 절제 실험 결과.<ul>
<li>프루닝된 토큰 복구(α &gt; 0): 클러스터 센터에 가까운 토큰을 재편입하면 다양한 감소율에서 일관되게 성능이 향상됨. 해당 토큰들이 EUTI에 의해 잘못 분류되었을 가능성을 뒷받침함.</li>
<li>감소 레이어 선택: 레이어 선택이 성능에 영향을 미치며, 논문의 레이어 식별 방식의 효과를 입증함.</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[An Image is Worth 1/2 Tokens After Layer 2: Plug-and-PLay Acceleration for VLLM Inference]]></title>
            <link>https://velog.io/@sangjun_moon/An-Image-is-Worth-12-Tokens-After-Layer-2-Plug-and-PLay-Acceleration-for-VLLM-Inference</link>
            <guid>https://velog.io/@sangjun_moon/An-Image-is-Worth-12-Tokens-After-Layer-2-Plug-and-PLay-Acceleration-for-VLLM-Inference</guid>
            <pubDate>Mon, 27 Apr 2026 08:51:36 GMT</pubDate>
            <description><![CDATA[<h1 id="an-image-is-worth-12-tokens-after-layer-2-plug-and-play-acceleration-for-vllm-inference">An Image is Worth 1/2 Tokens After Layer 2: Plug-and-PLay Acceleration for VLLM Inference</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=An+Image+is+Worth+1%2F2+Tokens+After+Layer+2%3A+Plug-and-PLay+Acceleration+for+VLLM+Inference&amp;btnG=">FastV</a></p>
<p><a href="https://github.com/pkunlp-icler/FastV">코드</a></p>
<ul>
<li>축1 (Modality): Image VLM + Video</li>
<li>축2 (압축 메커니즘): Pruning</li>
<li>축3 (학습 필요성): Training-free</li>
<li>축4 (압축 시점): LLM 내부 layer</li>
<li>축5 (Guidance 신호): Attention</li>
<li>축6 (적응성): Fixed ratio</li>
<li>축8 (타겟 모델): LLaVA / Video LLM / General VLM</li>
</ul>
<hr>
<h2 id="의문점-및-발전-가능성">의문점 및 발전 가능성</h2>
<ol>
<li><p>Table 7의 (c) 랜덤으로 이미지 토큰 50%를 제거한 것임. 근데 생각보다 acc drop이 없는거 같은데?</p>
<p>⇒ 랜덤으로 이미지 토큰 50%를 제거해도 성능 하락이 매우 작습니다. 이것은 오히려 논문의 핵심 발견을 강하게 뒷받침합니다. 깊은 레이어에서 이미지 토큰이 거의 attention을 받지 못한다는 것은, 어떤 이미지 토큰을 제거하든 출력에 미치는 영향이 작다는 뜻이기 때문입니다. 이미지 토큰 대부분이 이미 깊은 레이어에서 불필요하므로, 랜덤으로 골라도 &quot;중요한 토큰&quot;을 제거할 확률 자체가 낮습니다.
또한 K=2라는 점도 중요합니다. 레이어 2까지는 정상적으로 연산이 진행되어 이미지 정보가 anchor 토큰에 이미 집약된 상태입니다. 그 이후에 제거하는 것이므로, 랜덤이든 attention 기반이든 영향이 제한적입니다.</p>
<p>다만 R을 75%나 90%로 올리면 (c)와 (b)의 차이가 더 벌어질 것으로 예상됩니다. 극단적으로 많이 제거할 때는 소수의 중요한 이미지 토큰을 보존하는 것이 중요해지므로, 그때 attention 기반 정렬의 이점이 더 드러납니다.</p>
</li>
<li><p><strong>FastV</strong>의 속도 이점은 <strong>주로 prefill 단계</strong>에서 발생하며, 줄어든 토큰이 디코딩 시 계산량 감소에는 기여하지만 <strong>시간 감소 효과는 작기</strong> 때문에, <strong>Table 4 실험</strong>에서 디코딩을 한 번만 수행하는 A-OKVQA를 선택하여 prefill 절감을 부각시킨 것은 다소 트리키한 평가 설계이다.</p>
</li>
</ol>
<h2 id="칼">칼</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2d38df3d-c27a-4e6a-93ac-b31ee5333fdf/image.png" alt=""></p>
<hr>
<h2 id="abstract">Abstract</h2>
<p>LVLM의 심층 레이어에서 visual tokens에 대한 attention 연산이 비효율적
⇒ <strong>초기 레이어</strong>에서 <strong>adaptive attention pattern을 학습</strong>, <strong>후속 레이어</strong>에서 visual token을 <strong>pruning</strong>해서,
computational efficiency를 최적화하는 <strong>play-and-play 방식 FastV</strong></p>
<h3 id="fastv-한줄-요약">FastV 한줄 요약</h3>
<p>깊은 레이어에서 이미지 토큰이 거의 attention을 받지 못하므로, 얕은 레이어 이후에 attention score가 낮은 이미지 토큰을 제거해도 성능 손실 없이 계산량을 크게 줄일 수 있다</p>
<h2 id="1-introduction">1. Introduction</h2>
<h4 id="아직-충분히-탐구되지-않은-질문">아직 충분히 탐구되지 않은 질문</h4>
<ol>
<li>언어 모델은 이미지를 어떻게 처리하고 해석하나?</li>
<li>LVLM에서 훈련, 추론에 대한 최적화 X</li>
</ol>
<h4 id="문제-발견">문제 발견</h4>
<p>LVLM의 깊은 레이어에서 <strong>이미지 토큰</strong>은 <strong>극히 낮은 attention</strong>을 받는다. 깊은 레이어에서 이미지 토큰의 평균 attention score는 시스템 프롬프트의 0.21%에 불과하며, <strong>얕은 레이어에서는 50%</strong>에 달해 레이어 <strong>깊이에 따라 큰 차이</strong>가 있다.</p>
<h4 id="가설">가설</h4>
<p>얕은 레이어의 self-attention을 통해 <strong>이미지 토큰의 정보가 특정 anchor 토큰(시스템 프롬프트 등 텍스트 토큰)으로 집약</strong>된다. 이미지의 시각 신호가 높은 중복성을 가지기 때문에 이 압축이 가능하다. <strong>깊은 레이어</strong>에서는 모델이 이 <strong>anchor 토큰만 참조</strong>하므로 <strong>이미지 토큰</strong>에 대한 <strong>attention이 급격히 떨어진다</strong>. 결과적으로 이미지 토큰은 출력 생성에 기여 ↓.</p>
<h4 id="해결법fastv">해결법(FastV)</h4>
<p><strong>특정 레이어 K까지는</strong> 정상적으로 연산을 수행하여 <strong>정보 집약이 이루어지게 하고</strong>, 레이어 K에서 각 이미지 토큰이 받은 평균 <strong>attention score를 기준으로 순위</strong>를 매긴 뒤, <strong>하위 R%의 이미지 토큰을 이후 레이어에서 제거</strong>한다.</p>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="21-large-vision-language-model">2.1. Large Vision-Language Model</h3>
<p>생략</p>
<h3 id="22-inference-optimiation-for-llm">2.2. Inference Optimiation for LLM</h3>
<p>Autoregressive 방식의 어려움(attention 연산의 이차 복잡성)의 해결법은 두 가지 범주로 나뉨.</p>
<ol>
<li><p>Attention 모듈의 메모리 소비 최적화
 FlashAttention, vLLM, RingAttention</p>
</li>
<li><p>Attention 연산을 프루닝하여, 계산을 단순화
 StreamingLLM, FastGen</p>
</li>
</ol>
<h4 id="23-token-reduction-for-vlms">2.3. Token Reduction for VLMs</h4>
<p><span style="color:red">이전까지는 ViT 자체에서 토큰을 감소시킴</span></p>
<p><span style="color:red"><strong>FastV</strong>는 <strong>LLM에서 나오는 신호를 활용</strong>하여 visual token을 pruning하는 첫 번째 방법</span></p>
<h2 id="3-inefficient-visual-attention-in-vllms">3. Inefficient Visual Attention in VLLMs</h2>
<h3 id="31-preliminaries">3.1. Preliminaries</h3>
<p>입력 토큰은 네 종류로 구분된다</p>
<ol>
<li>LLM 행동을 제어하는 시스템 프롬프트(sys)</li>
<li>비전 인코더에서 나온 이미지 토큰(img)</li>
<li>질문을 담은 사용자 지시어(ins)</li>
<li>그리고 자기회귀적으로 생성되는 출력 토큰(out)</li>
</ol>
<h3 id="32-experiment-settings">3.2. Experiment Settings</h3>
<p>예시로 이해)</p>
<p>2번째 output 토큰을 생성하는 시점이므로, 이 토큰은 앞에 있는 모든 토큰에 대해 attention을 계산합니다. </p>
<p>앞에 있는 토큰은 sys 3개 + img 4개 + ins 5개 + out 1개(1번째 output) = 총 13개입니다.</p>
<p>hidden dim 10이므로 Q, K 벡터는 각각 10차원이고, Q·K^T로 13개의 score를 구한 뒤 √10으로 나누고 softmax를 취합니다. </p>
<p>softmax 출력이 다음과 같다고 가정합니다:</p>
<ul>
<li>sys₁=0.12, sys₂=0.15, sys₃=0.10, </li>
<li>img₁=0.03, img₂=0.02, img₃=0.01, img₄=0.02</li>
<li>ins₁=0.08, ins₂=0.09, ins₃=0.07, ins₄=0.06, ins₅=0.10, </li>
<li>out₁=0.15</li>
</ul>
<h4 id="α-레이어-j에서-2번째-출력-토큰의-유형별-attention-합">α (레이어 j에서 2번째 출력 토큰의 유형별 attention 합)</h4>
<p>$$α<em>{2,j}^{sys} = 0.12 + 0.15 + 0.10 = 0.37$$
$$α</em>{2,j}^{img} = 0.03 + 0.02 + 0.01 + 0.02 = 0.08$$
$$α<em>{2,j}^{ins} = 0.08 + 0.09 + 0.07 + 0.06 + 0.10 = 0.40$$
$$α</em>{2,j}^{out} = 0.15$$</p>
<p>합계 = 0.37 + 0.08 + 0.40 + 0.15 = 1.0</p>
<h4 id="λ-레이어-j에서-유형별-총-attention-할당량">λ (레이어 j에서 유형별 총 attention 할당량)</h4>
<p>현재까지 output 토큰이 2개 생성되었으므로 n=2입니다. </p>
<p>1번째 output 토큰의 α가 다음과 같았다고 가정합니다:</p>
<p>$$α<em>{1,j}^{sys}=0.35, α</em>{1,j}^{img}=0.10, α<em>{1,j}^{ins}=0.55, α</em>{1,j}^{out}=0.00$$</p>
<p>그러면 수식 3에 따라:</p>
<p>$$λ_j^{sys} = 0.35 + 0.37 = 0.72$$
$$λ_j^{img} = 0.10 + 0.08 = 0.18$$
$$λ_j^{ins} = 0.55 + 0.40 = 0.95$$
$$λ_j^{out} = 0.00 + 0.15 = 0.15$$</p>
<h4 id="ε-레이어-j에서-유형별-attention-efficiency">ε (레이어 j에서 유형별 attention efficiency)</h4>
<p>수식 4에 따라 λ를 각 유형의 토큰 개수로 나눕니다:</p>
<p>$$ε_j^{sys} = 0.72 / 3 = 0.240$$
$$ε_j^{img} = 0.18 / 4 = 0.045$$
$$ε_j^{ins} = 0.95 / 5 = 0.190$$
$$ε_j^{out} = 0.15 / 1 = 0.150$$</p>
<h3 id="33-results">3.3. Results</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/da5a419c-5960-4dd8-b329-0d353ab4ee92/image.png" alt=""></p>
<ol>
<li><p><strong>어텐션 할당량과 효율성 모두 레이어의 깊이에 따라 서로 다른 정도의 불균형을 보입니다.</strong> 
레이어별 평균 어텐션 할당 및 효율성은 그림 3에 표시되어 있습니다. 얕은 레이어에서는 어텐션 할당이 깊은 레이어에 비해 상대적으로 더 균형 잡힌 모습을 보입니다. 얕은 레이어에서 출력 토큰은 이전 출력 토큰들에 어텐션을 집중하는 경향이 있는 반면, 깊은 레이어에서는 시스템 프롬프트에 어텐션을 집중하는 경향이 있습니다.</p>
</li>
<li><p><strong>이미지 토큰은 얕은 레이어와 깊은 레이어 모두에서 가장 낮은 어텐션 효율성을 기록했습니다.</strong> 시스템 프롬프트는 깊은 레이어에서 극도로 높은 어텐션 효율성을 보였는데, 이는 이미지 토큰의 472배에 달하며 전체 어텐션 스코어의 $85%$ 를 차지합니다.</p>
</li>
</ol>
<h3 id="34-insights">3.4. Insights</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/303d999d-75bc-4dd9-b1e4-79fa43f3aa19/image.png" alt=""></p>
<ol>
<li><p>이미지 토큰이 입력 토큰의 대다수를 차지함에도 불구하고, 어텐션은 현저히 적다.</p>
</li>
<li><p>반대로 의미론적 정보가 최소한으로 포함된 시스템 프롬프트가 어텐션 스코의 대부분을 가져감.</p>
</li>
<li><p>얕은 레이어에서는 어텐션 스코어가 서로 다른 토큰들에 걸쳐 비교적 고르게 분포되어 있음을 알 수 있음.</p>
</li>
<li><p>깊은 레이어에서는 시스템 프롬프트 영역에 대부분의 어텐션 스코어를 점유함.</p>
</li>
</ol>
<p>⇒ 소수의 anchor 토큰들이 모든 입력 토큰으로부터 정보를 집계하며, 모델은 깊은 레이어에서 이러한 anchor 토큰들에 어텐션을 집중함.</p>
<h4 id="3장-한-줄-요약">3장 한 줄 요약</h4>
<p>특히 깊은 레이어에서 소수의 anchor 토큰(시스템 토큰)들이 모든 입력 토큰으로부터 정보를 흡수함
(시스템 토큰의 attention score가 큼)</p>
<h2 id="4-fastv">4. FastV</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/28288efd-39b1-4a73-9679-b38a4c932a68/image.png" alt=""></p>
<h3 id="41-dynamically-prune-vision-tokens">4.1. Dynamically Prune Vision Tokens</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b6a1e579-52e4-4c9a-832a-2df93f04e4d9/image.png" alt=""></p>
<p>FastV의 핵심 모듈은 레이어 K에서 <strong>각 이미지 토큰</strong>이 다른 토큰들로부터 받은 <strong>평균 attention score</strong>(위 그림의 빨간 박스처럼 열 단위 평균)를 기준으로 중요도를 매기고, <strong>하위 R%의 이미지 토큰을 이후 레이어에서 제거</strong>하는 것입니다. K=0으로 설정하면 LLM 입력 전에 랜덤으로 제거하는 것도 가능합니다. 별도 학습 없이 어떤 토큰 기반 LVLM에든 바로 적용할 수 있습니다.</p>
<p><strong><span style="color: red">(주의) 위 내용은 오류가 있음</span></strong></p>
<p><span style="color: red">논문을 literally 보면, 위 내용이 맞으나, 코드의 구현이 다름<br>아래 내용이 맞음</span></p>
<h4 id="use_cache-유무에-따른-fastv-pruning-동작-차이">use_cache 유무에 따른 FastV pruning 동작 차이</h4>
<h5 id="use_cachetrue-prune은-prefill-1번만">use_cache=True: Prune은 prefill 1번만</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/0e71d563-3d5e-4de8-b01a-4b3a80fb4521/image.png" alt=""></p>
<ul>
<li><p><strong>Prefill:</strong> layer K에서 ranking 수행 (빨간 박스는 마지막 텍스트 토큰(ins)이 나머지 토큰에 주는 attention인데, 이중 image 토큰에 주는 attention score로 ranking한다는 뜻) → hidden states 슬라이싱 → layer K부터 줄어든 시퀀스로 forward → 그 결과가 KV cache에 저장됨 (layer ≥K의 K/V는 keep된 토큰들 것만 캐시).</p>
</li>
<li><p><strong>Decode step:</strong> prefill에서 이미 image 토큰을 잘라냈고 KV cache도 그 세트만 들고 있으니, 남아있는 캐시만으로 토큰 생성. 별도 pruning 로직이 필요 없음.</p>
</li>
<li><p><strong>효과:</strong> 한 번 정해진 prune 집합이 모든 후속 decode step에 그대로 적용됨. KV cache가 자동으로 줄어든 세트만 들고 있음.</p>
</li>
</ul>
<h5 id="use_cachefalse-매-forward마다-pruning-재계산">use_cache=False: 매 forward마다 pruning 재계산</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/39e64bdc-09eb-482a-85fa-12f6167e07a9/image.png" alt=""></p>
<ul>
<li><p>매 forward = full re-prefill (캐시 없음).</p>
</li>
<li><p>매번 layer K-1의 attention을 다시 보고 → ranking 재계산 → hidden states 다시 슬라이싱.
(e.g. 위 그림에서 현재 생성중인 토큰과 기존 토큰들 + 자기자신 과의 attention score이다. 여기서 image에 해당하는 부분에서 ranking을 하는 것이다.
다음 step에는 ranking의 결과, 즉 순위가 달라져, pruning되야하는 image 토큰 집합이 달라질 수 있다.)</p>
</li>
<li><p>매 step마다 prune되는 image 토큰 집합이 달라질 수 있음 (그 step의 마지막 query 기준이라).</p>
</li>
</ul>
<h5 id="결과적인-차이-정리">결과적인 차이 정리</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/334d2327-7c28-402b-b039-a16fce735117/image.png" alt=""></p>
<h5 id="한-줄-요약">한 줄 요약</h5>
<ul>
<li><p>use_cache=True → &quot;Prefill 시 instruction 끝 토큰의 attention으로 한 번 정하고 끝, 이후 고정&quot;</p>
</li>
<li><p>use_cache=False → &quot;매 forward마다 그 시점의 마지막 query 기준으로 재결정 — 매번 흔들리고 비용도 N배&quot;</p>
</li>
</ul>
<h3 id="42-computing-cost-estimation">4.2. Computing Cost Estimation</h3>
<p>생략</p>
<h3 id="43-comparison-training-with-less-visual-tokens">4.3. Comparison: Training With Less Visual Tokens</h3>
<p>FastV(추론 시 토큰 제거)의 대안으로 학습 시 <strong>인코더 출력에 pooling을 적용</strong>하여 토큰 수를 줄이는 방법이 있으며, 이 둘의 비교는 <strong>섹션 5.4</strong>에서 다룬다.</p>
<h2 id="5-experiment">5. Experiment</h2>
<h3 id="51-evaluation-tasks">5.1. Evaluation Tasks</h3>
<p>생략</p>
<h3 id="52-model-settings">5.2. Model Settings</h3>
<p>생략</p>
<h3 id="53-main-results">5.3. Main Results</h3>
<h4 id="image-understanding">Image Understanding.</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e448c92b-e622-47c0-a955-bddab987fa08/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9eea6ecd-f703-4e80-8c7f-eeeb1a60b7ce/image.png" alt=""></p>
<ul>
<li><strong>Table 1, 5:</strong>
FastV (K=2, R=50%)는 성능 저하 없이 다양한 LVLM에 대해 약 45%의 FLOPs 절감 달성.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/02f3fb01-a252-4906-8b45-419dff3a5821/image.png" alt=""></p>
<ul>
<li><strong>Table 4:</strong>
FastV를 적용한 LLaVA-1.5-13B가 LLaVA-1.5-7B와 비슷한 속도(0.341s vs 0.344s)로 추론하면서도 더 높은 성능(80.5 vs 76.7)을 유지한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/99234f0a-756d-4824-b1ca-2dc0816bb890/image.png" alt=""></p>
<ul>
<li><strong>Table 6:</strong> 40% 이상의 연산량 감소에도, 성능이 오히려 향상되었는데, 비디오는 2048개 토큰을 사용하므로 이미지(576개)보다 중복성이 더 심하기 때문이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c9ddfabe-dd53-496b-89d8-c764e726fc9f/image.png" alt=""></p>
<ul>
<li><strong>Table 2:</strong>
InstructBLIP-Vicuna는 <strong>Q-Former가 이미 토큰을 줄이므로,</strong> 동일 설정에서 LLaVA보다 성능 저하가 약간 크지만, K를 5로 올리면 해소된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/702bbda6-39a0-4fe4-9544-af109b55dd67/image.png" alt=""></p>
<ul>
<li><strong>Table 3:</strong>
Fast(K=2, R=50%) 적용 후에도 대부분의 카테고리에서 점수가 유지되거나 소폭 상승했다.</li>
</ul>
<h3 id="54-ablation-studies">5.4. Ablation Studies</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/4ec58e78-799b-4dad-80ae-5f38d6de6a2b/image.png" alt=""></p>
<ul>
<li><p><strong>Figure 7:</strong></p>
<ul>
<li><p><strong>K가 작을 때:</strong> 
R을 낮추면 성능이 향상됨.</p>
</li>
<li><p><strong>K가 높을 때:</strong>
R을 조정해도 성능 변화가 미미함.</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/37b1f794-10ed-4765-b7a7-e91885d21b34/image.png" alt=""></p>
<ul>
<li><p><strong>Table 7:</strong></p>
<ul>
<li><p>(a) 학습 시 pooling으로 토큰 50% 축소:
성능 하락</p>
</li>
<li><p>(c) 랜덤 프루닝:
성능 하락</p>
</li>
<li><p>(d) 시스템 프롬프트 프루닝:
큰 성능 하락</p>
</li>
<li><p>(e) 시스템 프롬프트 전반부 프루닝:
치명적 성능 붕괴</p>
</li>
<li><p>(f) 지시어 프루닝:
큰 성능 하락</p>
</li>
<li><p>(g) StreamingLLM:
치명적 성능 붕괴 ⇒ 이미지 토큰이 텍스트 토큰과는 다른 방식으로 LLM 내 정보 처리 과정에 기여.</p>
</li>
</ul>
</li>
</ul>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Activation Quantization of Vision Encoders Needs Prefixing Registers]]></title>
            <link>https://velog.io/@sangjun_moon/Activation-Quantization-of-Vision-Encoders-Needs-Prefixing-Registers</link>
            <guid>https://velog.io/@sangjun_moon/Activation-Quantization-of-Vision-Encoders-Needs-Prefixing-Registers</guid>
            <pubDate>Tue, 21 Apr 2026 08:10:31 GMT</pubDate>
            <description><![CDATA[<h1 id="activation-quantization-of-vision-encoders-needs-prefixing-registers">Activation Quantization of Vision Encoders Needs Prefixing Registers</h1>
<p><a href="https://arxiv.org/abs/2510.04547">RegCache</a></p>
<hr>
<h2 id="의문점-및-발전-가능성">의문점 및 발전 가능성</h2>
<ol>
<li>Section 2에서 Outlier control strategy in quantization에서, <blockquote>
</blockquote>
기존 PTQ 방법들은 <strong>outlier가 존재하는 상태에서</strong> 양자화 오류를 줄이는 데 집중하는 반면, </li>
</ol>
<p><strong>RegCache는 outlier 자체</strong>를 사전에 <strong>억제</strong>한다. 작동하는 단계가 다르기 때문에 기존 기법들과 <strong>orthogonal</strong>하게 결합할 수 있다.</p>
<p> 라고 했는데, 그럼 <strong>RegCache 적용 이전, 이후의 outlier의 차이는?</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/dd4623a1-a1c9-4aa4-8d5c-46ce623bc3e3/image.png" alt=""></p>
<ol start="2">
<li><p>작은 vision encoder는 왜 
<img src="https://velog.velcdn.com/images/sangjun_moon/post/e285564a-0a1f-4d65-876e-88e6cc9da814/image.png" alt="">
가 없을까?</p>
</li>
<li><p>SigLIP2의 각 레이어를 하나씩 W8A8로 했을 때, 가장 quantization에 민감한 레이어의 입력 토큰이 특히 큼. 왜그럴까?
<img src="https://velog.velcdn.com/images/sangjun_moon/post/45f29a10-4d88-4019-b767-25ab19d6c0ab/image.png" alt=""></p>
</li>
<li><p>Table 5</p>
<p>Table 2를 보면 저자들도 Naïve 결과는 &quot;excluding the Naïve cases&quot;라고 명시하면서 Best/Average ∆ 계산에서 제외했다.
Naïve quantization은 베이스라인 자체가 너무 낮아서 거기서의 개선은 실질적인 의미가 희석되기 때문인 것 같다.</p>
<p>그런데 Table 5 (다양한 데이터셋에서의 universality 실험)는 오직 Naïve + RegCache 조합만 보고하고 있다. </p>
<p>이게 아쉬운 이유는:</p>
<ul>
<li><p>주장과 실험 설계의 불일치 — Table 5의 목적은 &quot;ImageNet-1k에서 찾은 prefix가 다른 도메인에도 일반화되는가&quot;를 보이는 건데, PTQ4ViT, RepQ-ViT, ERQ 등 실질적인 PTQ 방법들과의 조합에서도 같은 generalization 효과가 나타나는지는 확인이 안 된다.</p>
<p>만약 Table 5에서 RepQ-ViT나 ERQ 같은 강한 PTQ baseline과의 조합도 함께 보고했다면, prefix의 universality 주장이 훨씬 설득력 있게 뒷받침됐을 것 같다.</p>
</li>
</ul>
</li>
</ol>
<h2 id="칼">칼</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/cfe70b18-b3b7-4537-95cf-350e776059c2/image.jpg" alt=""></p>
<hr>
<h2 id="abstract">Abstract</h2>
<p><strong>Outlier로 인해</strong>, 8-bit precision에서도 quantization에 어려움이 있음.</p>
<p><strong>RegCache</strong></p>
<ol>
<li>Training-free</li>
<li>다른 quantization methods 위에 적용할 수 있는 plug-in module</li>
</ol>
<p><strong>RegCache 한줄 요약</strong>
<strong>RegCache</strong>는 <strong>outlier</strong>가 <strong>발생</strong>하기 <strong>쉬우</strong>면서도 <strong>semantically meaningless</strong>한 <strong>prefix tokens</strong>를 vision encoder에 <strong>도입</strong>하여, <strong>다른 tokens에서 outliers가 발생하는 것을 방지</strong>함.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p><strong>Vision encoder</strong>는 edge device에서 단독으로 쓰이거나 VLM의 visual backbone으로 쓰이는데, 모델이 크다 보니 저장 공간과 <strong>추론 비용</strong>이 병목이 된다. 특히 고해상도/비디오에서는 <strong>전체 latency의 ~45%를 차지</strong>할 만큼 부담이 크다.</p>
<p><strong>Vision encoder</strong>는 autoregressive LLM과 달리 <strong>non-autoregressive 방식</strong>이므로 <strong>compute-bound</strong>임.
⇒ Activation과 weight를 <strong>모두 양자화</strong>(예: INT8)하면 실제 <strong>연산 비용을 효과적으로 줄일</strong> 수 있음.</p>
<p>대규모 transformer의 activation 양자화는 일부 채널에 집중되는 outlier 때문에 어렵다. 기존 <strong>outlier-robust 방법</strong>들은 <strong>토큰/채널별</strong>로 <strong>스케일·정밀도</strong>를 <strong>동적으로</strong> 다르게 <strong>할당</strong>해서 정확도는 확보하지만, 그만큼 <strong>런타임 overhead</strong>가 생긴다. 이는 양자화 파라미터를 미리 고정해 하드웨어 효율을 극대화하는 <strong>static quantization의 취지와 충돌</strong>하므로, 그대로 적용하기 어렵다.</p>
<p><strong>LLM에서</strong>는 <strong>의미 없는 토큰</strong>(⟨BOS⟩, ⟨SEP⟩ 등)이 <strong>attention sink 역할</strong>을 하므로, 이를 prefix로 삽입해 <strong>outlier를 흡수</strong>시키는 방법이 있다. 그러나 vision encoder는 애초에 이런 의미 없는 토큰을 포함하도록 설계·학습되지 않아서, <strong>어떤 패치가 그 역할을 할 수 있는지 불분명</strong>하다. 최근 register라는 의미 없는 토큰을 학습 중 도입해 ViT의 interpretability를 높이려는 연구<a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Timothe+%CC%81e+Darcet%2C+Maxime+Oquab%2C+Julien+Mairal%2C+and+Piotr+Bojanowski.+Vision+transformers+need+registers.+In+International+Conference+on+Learning+Representations%2C+2024.+2%2C+3%2C+19%2C+25&amp;btnG=">[11]</a>가 있지만, 아직 일반적인 방식은 아니다.</p>
<h3 id="regcache가-영감-받은-관찰">RegCache가 영감 받은 관찰</h3>
<p><strong>Vision encode</strong>r의 <strong>중간 레이어부터</strong> 특정 토큰들이 다른 토큰들의 큰 activation 값을 <strong>흡수하는 sink token 역할</strong>을 점진적으로 하게 되며, 그 결과 <strong>자기 자신의 activation이</strong> 극단적으로 커져 <strong>outlier로</strong> 나타난다. 이 sink token들은 <strong>어떤 이미지를 넣든</strong> activation 패턴이 <strong>거의 동</strong>일하기 때문에, 미리 추출해두면 테스트 시 아무 입력에나 붙여 쓸 수 있는 <strong>universal register로 활용할 수 있다</strong>.</p>
<p><strong>주의점</strong>
작은 ViT에서는 이런 관찰 <strong>X</strong></p>
<p>⇒ <strong>중간 레이어의 registers를 찾아내어, 이를 precomputed KV cache 형태로 prefixing하여, outlier를 완화</strong></p>
<h3 id="주요-차별점">주요 차별점</h3>
<p><strong>1. Middle-to-final layers insertion</strong>: LLM prefixing 과 달리, 이 토큰들은 초기 레이어가 아닌 중간에서 마지막 레이어 사이에만 삽입됨.</p>
<p><strong>2. Token deletion</strong>: prefix register로 흡수한 뒤에도 남아있는 자여 sink token을 제거해 outlier를 마저 정리</p>
<p><strong>3. Universal Cache</strong>: 내부에서 생성되는 sink tokens 를 외부의 precomputed caches 로 대체하여 activation quantization range 가 팽창하는 것을 방지.</p>
<p><strong>4. Versatility</strong>: 별도의 추가 학습이 필요 없으므로 기존의 PTQ pipelines 에 lightweight on-top module 로 쉽게 통합될 수 있다.</p>
<blockquote>
</blockquote>
<p><strong>Q:</strong> Sink token을 삭제하면 안 되는 거 아닌가? 비정상적으로 크다는 건 outlier를 잘 흡수했다는 뜻 아닌가?</p>
<blockquote>
</blockquote>
<p><strong>A:</strong> 맞다, 기존 sink token이 outlier를 흡수한 건 사실이다. 하지만 두 가지 문제가 있다. 첫째, 그 토큰 자체가 극단적으로 큰 값을 가지므로 여전히 양자화 range를 넓혀야 해서 양자화 관점에서 문제가 해소되지 않는다. <strong>둘째, 이 극단적 activation이 이후 레이어로 전파되면서 후속 블록의 activation도 연쇄적으로 커지는 원인이 된다.</strong> RegCache는 이 기존 sink token을 삭제하고, 미리 계산해둔 깔끔한 universal cache로 교체한다. 흡수 역할은 새 cache가 대신 하되, activation이 폭발적으로 커지지 않도록 관리된 형태로 삽입하는 것이 핵심이다.</p>
<h2 id="2-related-work">2. Related work</h2>
<h3 id="outliers-in-large-scale-transformers">Outliers in large-scale transformers</h3>
<p><strong>참고</strong>
<a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Mingjie+Sun%2C+Xinlei+Chen%2C+J+Zico+Kolter%2C+and+Zhuang+Liu.+Massive+activations+in+large+language+models.+In+Conference+on+Language+Modeling%2C+2024.+2%2C+3%2C+25&amp;btnG=">[46]</a>은 outliers가 LLMs, ViTs 모두에서 self-attention의 softmax operation으로 인해 발생함을 제공함</p>
<p><strong>LLM</strong>에서는 <strong>outlier가</strong> ⟨BOS⟩ 등 <strong>special token에 집중</strong>되지만, <strong>ViT에서는</strong> 배경 패치처럼 정보 없는 토큰에서 나타나며 이미지마다 위치가 달라 <strong>어떤 토큰이 일관되게 outlier를 만드는지 불분명</strong>했다. 본 연구는 이 <strong>outlier 토큰들이 중간 블록에서 나타나고, 이미지나 모델에 관계없이 유사한 feature를 보인다는 것을 발견</strong>했으며, 덕분에 <strong>미리 계산</strong>해두고 PTQ 등에 활용할 수 있게 되었다.</p>
<h3 id="improving-vision-transformers-via-controlling-attention-sink-tokens">Improving vision transformers via controlling attention sink tokens</h3>
<p><strong>문제</strong>: ViT에서 sink token은 attention map의 noise로 작용해 visual performance를 저하시킨다.</p>
<p><strong>기존 해결법</strong>: <a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Timothe+%CC%81e+Darcet%2C+Maxime+Oquab%2C+Julien+Mairal%2C+and+Piotr+Bojanowski.+Vision+transformers+need+registers.+In+International+Conference+on+Learning+Representations%2C+2024.+2%2C+3%2C+19%2C+25&amp;btnG=">[11]</a>은 학습 중 register token을 추가해 sink를 흡수시켰고, <a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Nicholas+Jiang%2C+Amil+Dravid%2C+Alexei+A+Efros%2C+and+Yossi+Gandelsman.+Vision+transformers+don%E2%80%99t+need+trained+registers.+In+Advances+in+neural+information+processing+systems%2C+2025.+2%2C+14%2C+19%2C+20&amp;btnG=">[23]</a>은 추론 시 outlier 채널의 max activation을 별도 토큰으로 옮기는 training-free 방식을 제안했다.</p>
<p><strong>본 연구</strong>: 미리 계산한 precomputed sink token을 외부에서 삽입해, <strong>이미지별 처리 없이</strong> activation dynamic range를 줄여 PTQ 성능을 개선한다</p>
<h3 id="post-training-quantization-for-vision-transformers">Post-training quantization for vision transformers</h3>
<p><strong>초기 방법들</strong>: self-attention에 민감한 블록에 dynamic bitwidth를 할당해 양자화 오류를 완화.</p>
<p><strong>RepQViT, PTQ4ViT</strong>: LayerNorm, softmax, GELU 등에서 발생하는 outlier의 영향을 분리·최소화하는 양자화 scheme 제안.</p>
<p><strong>NoisyQuant</strong>: noise를 주입해 heavy-tailed activation distribution을 재형성.</p>
<p><strong>FIMA-Q</strong>: PTQ를 위한 round-function 최적화 도입.</p>
<p><strong>ERQ</strong>: activation과 weight를 순차적으로 양자화하는 2단계 절차로 양자화 오류 감소.</p>
<h3 id="outlier-control-strategy-in-quantization">Outlier control strategy in quantization</h3>
<p>기존 PTQ 방법들은 <strong>outlier가 존재하는 상태에서</strong> 양자화 오류를 줄이는 데 집중하는 반면, <strong>RegCache는 outlier 자체</strong>를 사전에 <strong>억제</strong>한다. 작동하는 단계가 다르기 때문에 기존 기법들과 <strong>orthogonal</strong>하게 결합할 수 있다.</p>
<h2 id="3-a-closer-look-at-outliers-in-vision-encoders">3. A closer look at outliers in vision encoders</h2>
<h3 id="31-layerwise-quantization-sensitivity-and-outliers">3.1. Layerwise quantization sensitivity and outliers</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/4c8825da-cf00-42cb-8dc6-15c986d58431/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9714afdf-c555-4c8d-a259-57d89e198759/image.png" alt=""></p>
<p>위 Figure 3 에서 볼 수 있듯이,
W8A8 양자화 시 성능이 크게 떨어지는 레이어는 <strong>중간 블록의 MLP projection layer</strong>에 집중되어 있으며, 이 지점은 <strong>activation outlier가 나타나기 시작하는 블록과 정확히 일치</strong>한다. 
⇒
Outlier가 양자화 성능 저하의 주요 원인임을 보여주며, FC2 activation이나 quantization sensitivity를 모니터링하면 RegCache의 prefixing을 적용할 블록을 식별하는 데 활용할 수 있다.</p>
<blockquote>
</blockquote>
<p><strong>공격 1: FC2 input만 모니터링하면 충분한가?</strong></p>
<blockquote>
</blockquote>
<ul>
<li><strong>공격</strong>: Outlier 발생 지점을 FC2 input으로 한정했는데, DINOv2의 경우 QKV, Proj, FC1 등 다른 레이어에서도 심각한 성능 저하가 관찰된다. FC2만 보면 놓치는 부분이 있지 않은가?</li>
<li><strong>방어</strong>: 논문 자체도 FC2 모니터링만을 유일한 방법으로 제시하지 않는다. Quantization sensitivity를 직접 측정하는 것도 prefixing 적용 블록을 식별하는 수단으로 제안하고 있으므로, FC2 모니터링이 불완전하더라도 sensitivity 측정으로 보완할 수 있다.</li>
</ul>
<p>SigLIP<strong>2</strong>는 다른 아키텍처 대비 maximum norm이 현저히 커서 RegCache 적용 시 성능 향상 효과가 더 뚜렷했으며, 이 독특한 동작의 원인 분석은 후속 연구로 남겨두었다.</p>
<h3 id="32-why-the-middle-layers">3.2. Why the middle layers?</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/766a9b9f-bcf9-4444-9abc-90b36e562738/image.png" alt=""></p>
<p><strong>LLM은</strong> ⟨BOS⟩ 등 의미 없는 토큰이 <strong>처음부터 명확해서</strong> 초기 레이어부터 outlier가 나타나지만, 
<strong>vision encoder는</strong> raw patch에서 <strong>의미 없는 토큰을 식별하려면 여러 블록을 거쳐야 하므로</strong> 중간 레이어에서 나타난다는 가설을 세웠다. 
검증으로, 배경을 0으로 만든 <strong>foreground-only 이미지</strong>에서는 의미 없는 패치가 쉽게 식별되어 <strong>outlier가 더 일찍·더 강하게</strong> 나타났다.
또한, register와 함께 학습된 모델은 LLM처럼 초기부터 outlier가 발생하여 가설을 뒷받침했다.</p>
<h3 id="33-universality-of-outlier-tokens">3.3. Universality of outlier tokens</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2df513bb-5fef-47f9-9832-62a08f62b699/image.png" alt=""></p>
<p>중간 레이어의 outlier token들은 이미지 간 cosine similarity가 0.89로 매우 높아(일반 토큰은 0.26), 입력에 무관한 universal한 특성을 가진다. 
⇒ <strong>outlier token은 서로 유사하다.</strong>
⇒ 이는 outlier token을 미리 계산해두고 범용적으로 재사용할 수 있는 근거가 된다.</p>
<p>중간 레이어의 outlier token들은 이미지 간 cosine similarity가 0.89로 매우 높다(일반 토큰은 0.26). </p>
<p>이 높은 유사도의 원인</p>
<ol>
<li><p>outlier가 나타나는 <strong>채널 인덱스가 이미지 간에 일정</strong>함.</p>
</li>
<li><p>해당 채널에서 극단적으로 큰 값을 가짐. </p>
</li>
</ol>
<p>결과적으로 <strong>어떤 이미지를 넣든 outlier 토큰의 모습이 거의 동일하므로, 캘리브레이션 데이터에서 대표 outlier 토큰을 미리 계산해두면 임의의 새 이미지에도 범용적으로 재사용할 수 있다.</strong></p>
<p>(A 이미지의 outlier 토큰을 알고 싶다...
→ 서로 다른 이미지의 outlier 토큰은 서로 비슷하게 생겼네?
→ 그럼 임의의 이미지 I의 outlier 토큰을 미리 찾자
→ I의 outlier 토큰 ≈ A의 outlier 토큰)</p>
<p>이것이 RegCache의 universal cache가 성립하는 근거이다.</p>
<h2 id="4-method">4. Method</h2>
<h4 id="3장-정리">3장 정리</h4>
<ul>
<li><p>Vision encoders의 outliers는 중간 레이어에서 부터 나타남</p>
</li>
<li><p>중간 레이어에서 발견된 sink token는 이미지 전반에 걸쳐 매우 유사함</p>
</li>
</ul>
<p><strong>추가적인</strong> sink tokens를 prefixing하면, <strong>outliers를 완화할 수 있다</strong>는 LLMs에서의 선행연구(<a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Seungwoo+Son%2C+Wonpyo+Park%2C+Woohyun+Han%2C+Kyuyeun+Kim%2C+and+Jaeho+Lee.+Prefixing+attention+sinks+can+mitigate+activation+outliers+for+large+language+model+quantization.+In+Empirical+Methods+in+Natural+Language+Processing%2C+2024.+2%2C+3%2C+5&amp;btnG=">[45]</a>)와 결합.
⇒ &quot;한 이미지에서 추출한 중간 레이어의 sink tokens는 다른 이미지를 처리하는 vision encoder에서 registers로 작동하여, outliers를 완화하는 데 도움을 줄 수 있다.&quot;는 가설</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5a3b49a4-125d-48d0-9637-14ad15cc545d/image.png" alt=""></p>
<p>RegCache는 세 단계로 작동한다. 
먼저 참조 이미지에서 큰 activation을 가진 register candidate token을 선별(<strong>Curating</strong>)하고, 이들의 key-value를 sensitive layer에 캐싱(<strong>Caching</strong>)한 뒤, 기존 내부 sink token을 삭제(<strong>Deleting</strong>)하여 outlier를 제거한다.</p>
<h3 id="41-curating">4.1. Curating</h3>
<p><strong>Pretrained</strong> vision encoder에서 <strong>각 레이어</strong>를 <strong>독립적</strong>으로 <strong>양자화</strong>(함께 쓰일 양자화 기법이 있다면, 그 양자화기법으로 함)하여 가장 큰 정확도 하락을 유발하는 <strong>quantization-sensitive layer를 식별</strong>한다. 그 뒤 참조 이미지 풀에서 해당 레이어(및 최대 3개 앞선 블록)의 $l_\infty \text{ norm}$ 상위 k개 토큰을 선별하여 <strong>register candidate set을 구축</strong>한다.</p>
<blockquote>
</blockquote>
<p><strong>예시</strong>: <strong>SigLIP2-B/16</strong> (12-block)을 <strong>segmentation 태스크</strong>에 <strong>GPTQ로 양자화</strong>해서 배포하는 경우</p>
<blockquote>
</blockquote>
<p><strong>Step 1: Sensitive layer 식별</strong>
배포용 양자화 기법이 GPTQ로 정해져 있으므로, 각 레이어를 독립적으로 GPTQ로 양자화한다. 참조 태스크는 ImageNet-1k classification을 사용한다(최종 태스크가 segmentation이라도, outlier 발생 패턴은 모델 구조에 의해 결정되므로 무관). 측정 결과 block 7의 fc2 layer에서 정확도가 가장 크게 하락 → block 7의 fc2 layer가 sensitive layer.</p>
<blockquote>
</blockquote>
<p><strong>Step 2: Register candidate 선별</strong>
ImageNet 학습셋 50,000장을 모델에 통과시켜, sensitive block(block 7)과 최대 3개 앞선 block(block 4, 5, 6)에서 각각의 입력 시점의 l∞-norm 상위 100개 토큰을 선별한다. 총 4개의 독립적인 candidate set(S₄, S₅, S₆, S₇)이 구축되며, 각 set에 100개씩 총 400개의 candidate token이 확보된다. 이 토큰들은 해당 블록을 통과하기 전 상태이지만, 앞선 블록들을 거치며 이미 sink 역할을 하면서 activation이 극단적으로 커진 상태이므로 outlier에 해당한다.</p>
<h3 id="42-caching">4.2. Caching</h3>
<p>각 candidate set의 토큰들에 대해 양자화되지 않은 원본 모델로 KV cache를 계산하고(sensitive block 앞 블록부터 마지막 블록까지), set별로 평균 내어 register를 구성한다. 이후 register의 복사 횟수 τ를 1~15 범위에서 탐색하여 ImageNet 정확도가 가장 높은 τ*를 선택한다.</p>
<blockquote>
</blockquote>
<p><strong>예시</strong>: <strong>SigLIP2-B/16</strong> (12-block)을 <strong>segmentation 태스크</strong>에 <strong>GPTQ로 양자화</strong>해서 배포하는 경우</p>
<blockquote>
</blockquote>
<p><strong>Step 1: Sensitive layer 식별</strong>
배포용 양자화 기법이 GPTQ로 정해져 있으므로, 각 레이어를 독립적으로 GPTQ로 양자화한다. 참조 태스크는 ImageNet-1k classification을 사용한다(최종 태스크가 segmentation이라도, outlier 발생 패턴은 모델 구조에 의해 결정되므로 무관). 측정 결과 block 7의 fc2 layer에서 정확도가 가장 크게 하락 → block 7의 fc2 layer가 sensitive layer.</p>
<blockquote>
</blockquote>
<p><strong>Step 2: Register candidate 선별</strong>
ImageNet 학습셋 50,000장을 모델에 통과시켜, sensitive block(block 7)과 최대 3개 앞선 block(block 4, 5, 6)에서 각각의 입력 시점의 l∞-norm 상위 100개 토큰을 선별한다. 총 4개의 독립적인 candidate set(S₄, S₅, S₆, S₇)이 구축되며, 각 set에 100개씩 총 400개의 candidate token이 확보된다. 이 토큰들은 해당 블록을 통과하기 전 상태이지만, 앞선 블록들을 거치며 이미 sink 역할을 하면서 activation이 극단적으로 커진 상태이므로 outlier에 해당한다.</p>
<blockquote>
</blockquote>
<p><strong>Step 3: Register 구성 (KV cache 평균화)</strong>
앞서 선별한 4개의 candidate set(S₄, S₅, S₆, S₇)을 실제 사용 가능한 register로 변환한다. 양자화되지 않은 원본 SigLIP2-B/16에 각 candidate 토큰을 통과시켜, 해당 토큰이 자신의 시작 블록부터 block 12까지 각 블록에서 남기는 KV cache를 미리 계산해둔다.</p>
<blockquote>
</blockquote>
<p>S₄의 100개 토큰: 각각 block 4<del>12에서의 KV (토큰당 9쌍) 계산 → 100개의 KV 궤적을 block별로 평균내어 <strong>register R</strong>₄ 구성 (9쌍의 평균 KV 보유)
S₅의 100개 토큰: 각각 block 5</del>12에서의 KV (토큰당 8쌍) 계산 → 평균내어 <strong>register R₅</strong> 구성 (8쌍)
S₆의 100개 토큰: 각각 block 6<del>12에서의 KV (토큰당 7쌍) 계산 → 평균내어 <strong>register R₆</strong> 구성 (7쌍)
S₇의 100개 토큰: 각각 block 7</del>12에서의 KV (토큰당 6쌍) 계산 → 평균내어 <strong>register R₇</strong> 구성 (6쌍)</p>
<blockquote>
</blockquote>
<p>결과적으로 4개의 register(R₄, R₅, R₆, R₇)가 만들어지며, 총 30쌍(9+8+7+6)의 평균 KV cache를 보유하게 된다. 블록별로 삽입될 KV 쌍을 정리하면 다음과 같다:</p>
<blockquote>
</blockquote>
<p>Block 4: S₄의 K₄V₄ (1쌍)
Block 5: S₄의 K₅V₅, S₅의 K₅V₅ (2쌍)
Block 6: S₄의 K₆V₆, S₅의 K₆V₆, S₆의 K₆V₆ (3쌍)
Block 7: S₄의 K₇V₇, S₅의 K₇V₇, S₆의 K₇V₇, S₇의 K₇V₇ (4쌍)
Block 8: S₄의 K₈V₈, S₅의 K₈V₈, S₆의 K₈V₈, S₇의 K₈V₈ (4쌍)
Block 9: S₄의 K₉V₉, S₅의 K₉V₉, S₆의 K₉V₉, S₇의 K₉V₉ (4쌍)
Block 10: S₄의 K₁₀V₁₀, S₅의 K₁₀V₁₀, S₆의 K₁₀V₁₀, S₇의 K₁₀V₁₀ (4쌍)
Block 11: S₄의 K₁₁V₁₁, S₅의 K₁₁V₁₁, S₆의 K₁₁V₁₁, S₇의 K₁₁V₁₁ (4쌍)
Block 12: S₄의 K₁₂V₁₂, S₅의 K₁₂V₁₂, S₆의 K₁₂V₁₂, S₇의 K₁₂V₁₂ (4쌍)</p>
<blockquote>
</blockquote>
<p>이 과정은 한 번만 수행되고 이후 추론 단계에서 재사용되므로, 실시간 오버헤드가 없다.</p>
<blockquote>
</blockquote>
<p><strong>Step 4: 최적 복사 횟수 $\tau^*$</strong>
τ∗ 탐색
구성된 4개의 register를 GPTQ로 양자화된 SigLIP2-B/16에 삽입하되, 복사 횟수를 달리해가며 검증한다. $\tau$값을 바꿔가며 Step 3에서 정리한 블록별 KV 쌍들을 $\tau$번씩 복사해 삽입한 후, 각 설정에서 ImageNet 학습셋 classification 정확도를 측정한다.</p>
<blockquote>
</blockquote>
<ul>
<li>τ=1: Step 3의 KV 쌍들을 그대로 1번씩 삽입 → 정확도 측정</li>
<li>τ=2: 각 KV 쌍을 2번씩 복사해 삽입 (예: Block 4에 K₄V₄가 2개, Block 7에 8개 등) → 정확도 측정</li>
<li>τ=3,4,…,15까지 동일하게 반복<blockquote>
</blockquote>
예컨대 τ=5일 때 정확도가 가장 높다면 $\tau^*$ = 5로 결정. 이때 τ를 무작정 키운다고 정확도가 계속 오르지는 않는다. <blockquote>
</blockquote>
너무 적으면 sink token 대체 효과가 부족하고, 너무 많으면 일반 patch token들의 attention 신호가 register 쪽으로 희석되어 오히려 성능이 떨어지므로, 중간 지점에서 최대값이 나타난다.</li>
</ul>
<h3 id="43-deleting">4.3. Deleting</h3>
<p>테스트 이미지 추론 시, quantization-sensitive block 입력에서 l∞-norm 상위 $\tilde{k}$개의 토큰을 선택해 삭제한다. 이는 내부적으로 새롭게 발생하는 sink token을 제거하여 잔존 outlier를 소거하는 역할을 하며, $\tilde{k}$̃ 값도 참조 태스크로 튜닝된다.</p>
<blockquote>
</blockquote>
<p><strong>예시</strong>: <strong>SigLIP2-B/16</strong> (12-block)을 <strong>segmentation 태스크</strong>에 <strong>GPTQ로 양자화</strong>해서 배포하는 경우</p>
<blockquote>
</blockquote>
<p><strong>Step 1: Sensitive layer 식별</strong>
배포용 양자화 기법이 GPTQ로 정해져 있으므로, 각 레이어를 독립적으로 GPTQ로 양자화한다. 참조 태스크는 ImageNet-1k classification을 사용한다(최종 태스크가 segmentation이라도, outlier 발생 패턴은 모델 구조에 의해 결정되므로 무관). 측정 결과 block 7의 fc2 layer에서 정확도가 가장 크게 하락 → block 7의 fc2 layer가 sensitive layer.</p>
<blockquote>
</blockquote>
<p><strong>Step 2: Register candidate 선별</strong>
ImageNet 학습셋 50,000장을 모델에 통과시켜, sensitive block(block 7)과 최대 3개 앞선 block(block 4, 5, 6)에서 각각의 입력 시점의 l∞-norm 상위 100개 토큰을 선별한다. 총 4개의 독립적인 candidate set(S₄, S₅, S₆, S₇)이 구축되며, 각 set에 100개씩 총 400개의 candidate token이 확보된다. 이 토큰들은 해당 블록을 통과하기 전 상태이지만, 앞선 블록들을 거치며 이미 sink 역할을 하면서 activation이 극단적으로 커진 상태이므로 outlier에 해당한다.</p>
<blockquote>
</blockquote>
<p><strong>Step 3: Register 구성 (KV cache 평균화)</strong>
앞서 선별한 4개의 candidate set(S₄, S₅, S₆, S₇)을 실제 사용 가능한 register로 변환한다. 양자화되지 않은 원본 SigLIP2-B/16에 각 candidate 토큰을 통과시켜, 해당 토큰이 자신의 시작 블록부터 block 12까지 각 블록에서 남기는 KV cache를 미리 계산해둔다.</p>
<blockquote>
</blockquote>
<p>S₄의 100개 토큰: 각각 block 4<del>12에서의 KV (토큰당 9쌍) 계산 → 100개의 KV 궤적을 block별로 평균내어 <strong>register R</strong>₄ 구성 (9쌍의 평균 KV 보유)
S₅의 100개 토큰: 각각 block 5</del>12에서의 KV (토큰당 8쌍) 계산 → 평균내어 <strong>register R₅</strong> 구성 (8쌍)
S₆의 100개 토큰: 각각 block 6<del>12에서의 KV (토큰당 7쌍) 계산 → 평균내어 <strong>register R₆</strong> 구성 (7쌍)
S₇의 100개 토큰: 각각 block 7</del>12에서의 KV (토큰당 6쌍) 계산 → 평균내어 <strong>register R₇</strong> 구성 (6쌍)</p>
<blockquote>
</blockquote>
<p>결과적으로 4개의 register(R₄, R₅, R₆, R₇)가 만들어지며, 총 30쌍(9+8+7+6)의 평균 KV cache를 보유하게 된다. 블록별로 삽입될 KV 쌍을 정리하면 다음과 같다:</p>
<blockquote>
</blockquote>
<p>Block 4: S₄의 K₄V₄ (1쌍)
Block 5: S₄의 K₅V₅, S₅의 K₅V₅ (2쌍)
Block 6: S₄의 K₆V₆, S₅의 K₆V₆, S₆의 K₆V₆ (3쌍)
Block 7: S₄의 K₇V₇, S₅의 K₇V₇, S₆의 K₇V₇, S₇의 K₇V₇ (4쌍)
Block 8: S₄의 K₈V₈, S₅의 K₈V₈, S₆의 K₈V₈, S₇의 K₈V₈ (4쌍)
Block 9: S₄의 K₉V₉, S₅의 K₉V₉, S₆의 K₉V₉, S₇의 K₉V₉ (4쌍)
Block 10: S₄의 K₁₀V₁₀, S₅의 K₁₀V₁₀, S₆의 K₁₀V₁₀, S₇의 K₁₀V₁₀ (4쌍)
Block 11: S₄의 K₁₁V₁₁, S₅의 K₁₁V₁₁, S₆의 K₁₁V₁₁, S₇의 K₁₁V₁₁ (4쌍)
Block 12: S₄의 K₁₂V₁₂, S₅의 K₁₂V₁₂, S₆의 K₁₂V₁₂, S₇의 K₁₂V₁₂ (4쌍)</p>
<blockquote>
</blockquote>
<p>이 과정은 한 번만 수행되고 이후 추론 단계에서 재사용되므로, 실시간 오버헤드가 없다.</p>
<blockquote>
</blockquote>
<p><strong>Step 4: 최적 복사 횟수 $\tau^*$</strong>
τ∗ 탐색
구성된 4개의 register를 GPTQ로 양자화된 SigLIP2-B/16에 삽입하되, 복사 횟수를 달리해가며 검증한다. $\tau$값을 바꿔가며 Step 3에서 정리한 블록별 KV 쌍들을 $\tau$번씩 복사해 삽입한 후, 각 설정에서 ImageNet 학습셋 classification 정확도를 측정한다.</p>
<blockquote>
</blockquote>
<ul>
<li>τ=1: Step 3의 KV 쌍들을 그대로 1번씩 삽입 → 정확도 측정</li>
<li>τ=2: 각 KV 쌍을 2번씩 복사해 삽입 (예: Block 4에 K₄V₄가 2개, Block 7에 8개 등) → 정확도 측정</li>
<li>τ=3,4,…,15까지 동일하게 반복<blockquote>
</blockquote>
예컨대 τ=5일 때 정확도가 가장 높다면 $\tau^*$ = 5로 결정. 이때 τ를 무작정 키운다고 정확도가 계속 오르지는 않는다. <blockquote>
</blockquote>
너무 적으면 sink token 대체 효과가 부족하고, 너무 많으면 일반 patch token들의 attention 신호가 register 쪽으로 희석되어 오히려 성능이 떨어지므로, 중간 지점에서 최대값이 나타난다.<blockquote>
</blockquote>
</li>
<li><em>Step 5: Token Deletion 설정 (k̃ 튜닝)**
남아 있는 sink token을 제거하기 위한 최적의 삭제 개수 k̃를 결정한다. 테스트 이미지가 주어지면 block 7(sensitive block)의 입력에서 197개 토큰 중 l∞-norm이 가장 큰 k̃개를 선택해 해당 블록에서 제거한다. k̃ 값을 {1, 2, ...} 범위에서 변화시키며 ImageNet 학습셋 classification 정확도를 측정하여 최적값을 선택한다. 예컨대 k̃=2일 때 정확도가 가장 높다면 k̃</em>=2로 결정. 이때 k̃가 너무 작으면 잔존 outlier가 남아 양자화 range가 여전히 넓고, 너무 크면 정보 있는 패치까지 지워져 성능이 떨어지므로, 중간 지점에서 최대값이 나타난다.</li>
</ul>
<h3 id="추론-시-outlier-흐름">추론 시 outlier 흐름</h3>
<p><strong>1. Block 1~3</strong>: 아무 처리 없이 일반 forward pass. 아직 outlier가 발생하지 않은 초기 단계이므로 개입 불필요.</p>
<p><strong>2. Block 4~6 (앞선 블록들)</strong>:
이 블록들의 attention에 register KV가 prefix로 삽입된다(block 4에 R₄, block 5에 R₄·R₅, block 6에 R₄·R₅·R₆). <strong><span style="color:red">일반 패치 토큰들이 attention을 계산할 때, 원래는 특정 배경 패치에 attention이 쏠리면서 그 토큰이 sink 역할을 하게 되는데, 이제 prefix로 들어온 register가 그 attention을 대신 흡수한다. 결과적으로 일반 패치 토큰에 outlier가 누적되는 정도가 크게 줄어든다.</span></strong></p>
<p><strong>3. Block 7 (sensitive block)</strong>:</p>
<ul>
<li><p>Attention에는 register KV(R₄·R₅·R₆·R₇)가 prefix로 삽입되어 attention을 흡수</p>
</li>
<li><p>그럼에도 여전히 일부 패치 토큰에 잔존 outlier가 남아있을 수 있으므로, block 7 입력에서 l∞-norm 상위 k̃개의 토큰을 삭제하여 제거</p>
</li>
</ul>
<p>이 두 조치로 block 7의 FC2 입력 activation range가 극적으로 좁아진다(논문 Table 7: SigLIP2의 경우 max token norm 148.20 → 15.16, 약 10배 감소).</p>
<p><strong>4. Block 8~12</strong>: Register만 prefix로 유지된 채 forward 진행. Block 7에서 outlier가 제거된 깔끔한 hidden state가 이후 블록으로 전파된다.</p>
<p><strong>결과:</strong></p>
<ul>
<li><p>Block 7 FC2의 activation dynamic range가 좁아져, GPTQ의 양자화 스케일이 훨씬 촘촘해짐 → 양자화 오차 대폭 감소</p>
</li>
<li><p>4-bit처럼 극저비트에서 효과가 특히 큼(Table 2 기준 SigLIP2 W4A4에서 baseline 대비 최대 +18.42%p 향상)</p>
</li>
<li><p>추가 학습 없이, 추론 시 오버헤드는 1~2% 수준(Table 6)</p>
</li>
<li><p>결국 GPTQ 단독으로 양자화했을 때보다 FP32에 훨씬 가까운 정확도로 segmentation 수행 가능</p>
</li>
</ul>
<h2 id="5-experiments">5. Experiments</h2>
<p><strong>DINOv2</strong>: self-supervised 학습된 특성상 CLIP/SigLIP과 동작이 달라, prefix를 searched layer에만 삽입할 때 더 좋은 결과 → 이 모델만 예외적 처리</p>
<h3 id="52-main-results">5.2. Main results</h3>
<h4 id="imagenet-1k에서-zero-shot-classification-acc">ImageNet-1k에서 zero-shot classification acc.</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9b3f5898-9ab6-4cdc-9793-2ac8280a2aa0/image.png" alt=""></p>
<ol>
<li>4-bit, 6-bit 등 저비트일수록 outlier 영향이 심해져 RegCache의 이점이 더 커진다.</li>
</ol>
<h4 id="ms-coco에서-zero-shot-image-text-retrieval">MS-COCO에서 zero-shot image-text retrieval</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8e0fe633-ed7a-4434-b709-11324bd8c466/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/35566577-7226-4fd1-ab1e-d6aea251df28/image.png" alt=""></p>
<ol>
<li>4-bit, 6-bit 등 저비트일수록 outlier 영향이 심해져 RegCache의 이점이 더 커진다.</li>
</ol>
<h4 id="vlm-performance">VLM performance</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/fd01de0b-149a-4d87-b0b4-3a52cfd819f0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ce25f8fd-7c6c-4254-a980-3a949da9ecc0/image.png" alt=""></p>
<h4 id="prefix-탐색-과정에서-imagenet-1k에-overfit-되어-다른-dataset에서의-generalizability가-떨어지는-지-확인">Prefix 탐색 과정에서 ImageNet-1k에 overfit 되어 다른 dataset에서의 generalizability가 떨어지는 지 확인</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c0984a05-df92-4ac4-b262-f87af1bb7f38/image.png" alt=""></p>
<h5 id="아쉬운-점">아쉬운 점</h5>
<p>Table 2를 보면 저자들도 Naïve 결과는 &quot;excluding the Naïve cases&quot;라고 명시하면서 Best/Average ∆ 계산에서 제외했다.
Naïve quantization은 베이스라인 자체가 너무 낮아서 거기서의 개선은 실질적인 의미가 희석되기 때문인 것 같다.</p>
<p>그런데 Table 5 (다양한 데이터셋에서의 universality 실험)는 오직 Naïve + RegCache 조합만 보고하고 있다. </p>
<p>이게 아쉬운 이유는:</p>
<ul>
<li>주장과 실험 설계의 불일치 — Table 5의 목적은 &quot;ImageNet-1k에서 찾은 prefix가 다른 도메인에도 일반화되는가&quot;를 보이는 건데, PTQ4ViT, RepQ-ViT, ERQ 등 실질적인 PTQ 방법들과의 조합에서도 같은 generalization 효과가 나타나는지는 확인이 안 된다.</li>
</ul>
<p>만약 Table 5에서 RepQ-ViT나 ERQ 같은 강한 PTQ baseline과의 조합도 함께 보고했다면, prefix의 universality 주장이 훨씬 설득력 있게 뒷받침됐을 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Towards Understanding Best Practices for Quantization of Vision-Language Models]]></title>
            <link>https://velog.io/@sangjun_moon/Towards-Understanding-Best-Practices-for-Quantization-of-Vision-Language-Models</link>
            <guid>https://velog.io/@sangjun_moon/Towards-Understanding-Best-Practices-for-Quantization-of-Vision-Language-Models</guid>
            <pubDate>Fri, 17 Apr 2026 03:25:29 GMT</pubDate>
            <description><![CDATA[<h1 id="towards-understanding-best-practices-for-quantization-of-vision-language-models">Towards Understanding Best Practices for Quantization of Vision-Language Models</h1>
<p><a href="https://arxiv.org/abs/2601.15287">VLM Quantization</a>에 대한 내용.</p>
<hr>
<h2 id="abstract">Abstract</h2>
<p>ViT 와 LLM 은 <strong>parameter size의 상당한 차이</strong>에도 불구하고 모델 성능에서 <strong>유사한 중요성</strong>을 보임.</p>
<p>LLM 의 lower-bit quantization은 줄어든 bits per weight(bpw) 에서도 높은 accuracy 를 달성함.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p><strong>MLLMs(Multimodal Large Language Models)</strong>는 multimodal retrieval, captioning, 그리고 question-answering tasks 에서 인상적인 성능을 제공하지만, <strong>모델 크기 및 latency가 너무 큼</strong>.</p>
<blockquote>
</blockquote>
<ul>
<li>Multimodal retrieval:
이미지와 텍스트 간 유사도를 측정하여 주어진 텍스트 쿼리에 가장 관련된 이미지를 찾거나, 반대로 이미지에 맞는 텍스트를 찾는 태스크.</li>
<li>Captioning:
입력 이미지를 설명하는 자연어 문장을 생성하는 태스크.</li>
<li>Question-answering:
이미지와 관련된 질문을 텍스트로 받아 정답을 텍스트로 출력하는 태스크.</li>
</ul>
<p>Weights를 <strong>균일</strong>하게 <strong>quantize</strong>하면, model 성능이 <strong>bit-width 감소</strong>에 따라 어느 정도 <strong>linear한 correlation을 갖고 감소</strong>할 것으로 예상함.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/fb113959-9aa3-4437-bafa-6050cb798312/image.png" alt=""></p>
<p>그러나 Figure 1에서 볼 수 있듯이, 실제로는 <strong>어느 컴포넌트를 양자화</strong>하느냐, 그리고 <strong>어떤 방법</strong>을 선택하느냐에 따라 성능이 크게 달라진다. </p>
<p>좌측 그래프에서 동일한 저비트 구간(4–6 bpw)에서도 GPTQ와 AWQ의 CIDEr 값이 뚜렷하게 갈리며, 우측 그래프에서는 16-bit ViT와 3-bit ViT 간 accuracy 차이는 작은 반면 3-bit LLM은 급격한 성능 저하를 보인다. </p>
<p>또한 LLM 양자화는 ViT 양자화보다 전체 모델 크기(bpw)에 훨씬 큰 영향을 미친다. </p>
<p>결국 모든 컴포넌트가 <strong>정밀도 감소에 동일하게 민감하지 않으며</strong>, 핵심 컴포넌트의 정보 손실을 최소화하는 방향으로 양자화 전략을 설계해야 모델 크기와 태스크 성능 간의 최적 트레이드오프를 달성할 수 있다.</p>
<h3 id="핵심-원칙">핵심 원칙</h3>
<ol>
<li><p>VLM의 구성 요소의 quantization 민감도는 architecture 전반에 걸쳐 상당히 다름.
LLM은 일반적으로 parameter 수에 관계없이, ViT보다 더 높은 precision을 요구함.</p>
</li>
<li><p>GPTQ, AWQ와 같은 SOTA 방법들은 uniform quantization에 비해, 상당히 낮은 bit-width (3.5 - 4.5 bpw)에서도 model 성능을 효과적으로 보존.</p>
</li>
<li><p>Task에 따라 최적의 bit allocation이 다름.
Reasoning task에서는 LLM precision을 크게 하는 것이 좋음. Visual-textual alignment tasks는 더 균형 잡힌 allocation이 좋음.</p>
</li>
<li><p>Quantizaiton 방법의 선택은 VLM 구성 요소의 중요성을 재구성하게 함.
AWQ는 LLM 보존에 집중함. GPTQ는 중요성을 더 고르게 분산시킴.</p>
</li>
</ol>
<blockquote>
</blockquote>
<p><strong>AWQ의 &quot;LLM 보존 집중&quot;과 GPTQ의 &quot;중요성 균등 분산&quot;</strong></p>
<blockquote>
</blockquote>
<p><strong>&quot;AWQ가 LLM 보존에 집중한다&quot;</strong>는 말은 비트폭 할당의 문제가 아닙니다. AWQ와 GPTQ 모두 동일한 비트폭으로 양자화하되, 양자화 오류를 보정하는 방식이 다릅니다. </p>
<blockquote>
</blockquote>
<p>AWQ는 activation 크기가 큰 채널을 salient하다고 판단하는데, <strong>LLM의 대형 가중치 행렬에서 이런 채널이 압도적으로 많이 발견</strong>됩니다. 따라서 <strong>AWQ의 오류 보정 자원이 자연스럽게 LLM 쪽에 집중</strong>되고, 결과적으로 <strong>LLM의 정밀도 손실이 최소화</strong>되는 <strong>반면 ViT는 상대적으로 덜 보호</strong>됩니다.</p>
<blockquote>
</blockquote>
<p><strong>&quot;GPTQ의 중요성 균등 분산&quot;</strong>에서 중요성이란 각 컴포넌트가 최종 성능에 기여하는 정도입니다. GPTQ는 Hessian 기반으로 모든 가중치의 오류를 순차적으로 보정하기 때문에 ViT와 LLM 양쪽의 정밀도가 비교적 고르게 유지되고, 따라서 두 컴포넌트의 성능 기여도가 Table 1의 COCO 결과처럼 50:50에 가깝게 나타납니다.</p>
<ol start="5">
<li>Architectural dependency는 독립적인 구성 요소 평가보다는 전체적인 pipeline analysis를 피요로하는 상호작용 효과를 생성함.</li>
</ol>
<blockquote>
</blockquote>
<p><strong>&quot;Holistic pipeline analysis&quot; 이해</strong></p>
<blockquote>
</blockquote>
<p>구체적으로는, 컴포넌트를 독립적으로 평가할 때 최적으로 보이는 양자화 설정이, 전체 파이프라인에서는 최적이 아닐 수 있다는 뜻입니다. Figure 6에서 ViT와 LLM을 각각 단독으로 저비트 양자화했을 때보다, 둘을 동시에 양자화했을 때 성능 저하가 훨씬 크게 나타나는 것이 그 근거입니다. <strong>ViT의 오류가 Q-Former를 거쳐 LLM으로 전파되는 순차적 구조 때문에, 각 컴포넌트의 오류가 단순히 더해지는 것이 아니라 증폭</strong>됩니다.</p>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="21-vlm">2.1. VLM</h3>
<p>일반적으로 <strong>retrieval과 같은 tasks</strong>를 위해 <strong>이미지와 텍스트의 embeddings를 생성하는 데 집중</strong>하는 이러한 <strong>VLMs</strong>와, 
특정 이미지에 대한 <strong>복잡한 질문에 대한 답변과 같은 언어 출력을 생성</strong>하기 위해 일반적으로 <strong>이미지 및 텍스트 입력을 소비하는 vision large language models (VLLMs)</strong>를 구분함.</p>
<blockquote>
</blockquote>
<p><strong>VLMs와 VLLMs의 차이</strong></p>
<blockquote>
</blockquote>
<p><strong>VLLMs도</strong> 내부적으로는 <strong>이미지와 텍스트를 embedding으로 변환</strong>합니다. 그러나 핵심 차이는 <strong>최종 출력의 형태와 목적에</strong> 있습니다.</p>
<blockquote>
</blockquote>
<p>VLMs는 이미지와 텍스트를 공유 임베딩 공간(shared embedding space) 에 정렬시키는 것이 목표입니다. 즉 출력이 embedding 벡터이며, 이를 이용해 이미지-텍스트 간 유사도를 측정하는 retrieval이 주된 태스크입니다.</p>
<blockquote>
</blockquote>
<p>VLLMs는 embedding 생성이 중<strong>간 과정</strong>일 뿐이고, 최종 출력은 자연어 텍스트입니다. 즉 이미지를 이해한 뒤 그것을 바탕으로 문장을 생성하거나 질문에 답하는 것이 목표입니다.</p>
<blockquote>
</blockquote>
<p>한 줄로 요약하면, VLMs는 &quot;얼마나 비슷한가&quot;를 숫자로 출력하고, VLLMs는 &quot;무엇인가&quot;를 언어로 출력합니다.</p>
<h3 id="22-model-compression">2.2. Model Compression</h3>
<p>생략</p>
<h2 id="3-optimizing-performance">3. Optimizing Performance</h2>
<h3 id="31-building-intuitions">3.1. Building Intuitions</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a951487f-19c1-4c64-a0e7-9a16ba9a8713/image.png" alt=""></p>
<p>위 Algorithm 1을 적용한 결과</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5c10f80a-14e1-4505-b0c7-e16d85bb8dee/image.png" alt=""></p>
<p>⇒ <strong>Layer types</strong>나 <strong>block groups</strong>에 대해 크기-성능 사이에 유의미한 <strong>상관관계</strong>를 <strong>관찰</strong>하지 <strong>못함</strong>.</p>
<h3 id="32-sota-quantization-preliminaries">3.2. SOTA Quantization Preliminaries</h3>
<ul>
<li><strong>AWQ</strong>: 작고 대표적인 calibration set 의 <strong>activation distribution</strong>을 참조하여 <strong>중요한 weight channels</strong> 를 식별하는 LLMs 용 <strong>weight-only PTQ</strong> technique 입니다. 더 큰 <strong>activation magnitudes</strong>를 생성하는 <strong>weights는 더 중요한 features</strong>에 해당하며 더 중요한 것으로 간주됩니다. AWQ 는 <strong>per-channel scaling factor</strong> 를 통해 <strong>단 1% 의 중요한 weights 만 보존</strong>함으로써 quantization error 를 줄입니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8849e83f-ef2b-4efa-bb9d-febb37347701/image.png" alt=""></p>
<ul>
<li><strong>GPTQ</strong>: LLMs 를 위한 또 다른 <strong>weight-only PTQ</strong> technique 이지만, activation 정보 대신 inverse Hessian에서 유도된 근사적인 second-order information 을 활용합니다. <strong><em>weights 가 순차적으로 처리되고 양자화됨</em></strong>에 따라, <strong>남은 양자화되지 않은 weights</strong>는 작은 calibration set 으로 계산된 quantization error 를 보상하도록 <strong>조정</strong>됩니다.</li>
</ul>
<h3 id="33-sota-quantization-benchmark">3.3. SOTA Quantization Benchmark</h3>
<p><strong>Retrieval 평가</strong>: BLIP-2 ViT-g
<strong>Captioning, VQA 평가</strong>: BLIP-2 ViT-g OPT 2.7B
<strong>VQA 평가</strong>: LLaVA 1.5 7B</p>
<p><strong>Calibration set</strong>: 각 데이터셋에서 128개 이미지-텍스트 쌍 무작위 샘플링</p>
<p><strong>평가 데이터셋</strong>: VQAv2 val2014 split 10% (21,435개) /  GQA 전체 Test-Dev split</p>
<p><strong>탐색 공간</strong>: bit widths ∈ {2, 3, 4, 5, 6, 8}</p>
<p>BLIP-2: C ⊆ {ViT, LLM, Q-Former}
LLaVA: C ⊆ {ViT, LLM}</p>
<p>기존과의 차별점: 일반적으로는 LLM만 양자화하지만, 본 연구는 ViT와 Connector까지 양자화 탐색 공간에 포함</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/0a088286-4289-43dc-aabe-c6de1537c926/image.png" alt=""></p>
<p>⇒</p>
<ol>
<li><p>앞선 3.1.의 uniform quantization 보다 더 낮은 bit-width에서 성능이 좋음.</p>
</li>
<li><p><strong>Captioning 및 VQA</strong>: <strong>AWQ가</strong> GPTQ보다 더 낮은 bit-width에서 성능이 <strong>더 가파르게 저하</strong></p>
</li>
<li><p><strong>Retrieval</strong>: <strong>GPTQ가</strong> AWQ보다 더 낮은 bit-width에서 성능이 <strong>더 가파르게 저하</strong></p>
</li>
</ol>
<h3 id="34-component-impact-ablations">3.4. Component Impact Ablations</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/55529c9c-e6ad-4d81-88e6-2c95b7fb8850/image.png" alt=""></p>
<p>⇒</p>
<ol>
<li><p><strong>LLM이 가장 민감</strong>하며, ViT나 Q-Former에 비해 더 일찍 성능이 떨어짐.</p>
</li>
<li><p><strong>Q-Former</strong>는 <strong>민감도</strong>가 <strong>가장 낮지만</strong>, parameter 수도 가장 적음.</p>
</li>
<li><p><strong>ViT</strong>는 GPTQ에서는 큰 성능 저하를 겪지만, <strong>AWQ에서는 상대적으로 적은 저하</strong>를 보임.</p>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b67bc36d-a5c0-4412-9376-9e8717b7a4ad/image.png" alt=""></p>
<p>⇒ </p>
<p>LLM을 ViT보다 낮은 bit-width로 할 때, 7 bpw 근처에서 성능이 완전히 소실 ⇒ <strong>LLM이 성능에 가장 critical 함.</strong></p>
<h2 id="4-component-importance-analysis">4. Component Importance Analysis</h2>
<p><strong>Bit-precision과 성능의 관계</strong>가 <strong>비선형적</strong>이고 <strong>컴포넌트 간 상호작용이 복잡</strong>하여 <strong>선형 모델</strong>(R² &lt; 0.20)로는 컴포넌트 중요도를 <strong>정량화할 수 없다</strong>.</p>
<h3 id="41-setup">4.1. Setup</h3>
<p><strong>비선형적 관계</strong>와 <strong>상호작용 효과</strong>를 효과적으로 포착할 수 있는 <strong>세 가지 보완적인 트리 기반 중요도 분석 기법</strong>들을 한 <strong>Consensus Ranking</strong>으로 <strong>묶음</strong>.</p>
<ol>
<li><p><strong>Random Forest Feature Importance</strong>:
 $$\text{score} = f(\text{vit_bits, qformer_bits, llm_bits})$$</p>
</li>
<li><p><strong>Permutation Feature Importance</strong>: 
 $$I_j = \mathbb{E}<em>{X,y}[L(f, X_j, y)] - \mathbb{E}</em>{X,y}[L(f, X, y)]$$</p>
</li>
<li><p><strong>SHapley Additive exPlanations (SHAP)</strong>:
 $$\phi_j = \sum_{S \subseteq N \setminus {j}} \frac{|S|!(|N| - |S| - 1)!}{|N|!} [f_x(S \cup {j}) - f_x(S)]$$</p>
</li>
</ol>
<p><strong>Consensus Ranking</strong></p>
<p>위 세가지 기법의 결과를 정규화하고, 합산함.
⇒ 각 구성 요소에 대한 <strong>최종 중요도 백분율</strong>을 산출함.</p>
<h3 id="42-results">4.2. Results</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b68f14db-3624-472f-9fc4-649c817b8ba4/image.png" alt=""></p>
<h4 id="quantization-method-dramatically-shifts-component-importance">Quantization method dramatically shifts component importance.</h4>
<p><strong>AWQ</strong>는 <strong>LLM에 중요도가 집중</strong>되는 반면(≥73%), <strong>GPTQ</strong>는 ViT와 LLM 간 중요도를 <strong>균등하게 분산</strong>시킨다.</p>
<h5 id="blip-2-coco-기준">BLIP-2 COCO 기준</h5>
<p><strong>GPTQ</strong>: ViT 50.4% / LLM 47.6% (<strong>균등</strong>)
<strong>AWQ</strong>: ViT 17.1% / LLM 80.5% (<strong>LLM 편중</strong>)</p>
<h5 id="llava-vqa-기준">LLaVA VQA 기준</h5>
<p><strong>GPTQ</strong>: ViT 20<del>28% / LLM 72</del>79% (<strong>상대적 균등</strong>)
<strong>AWQ</strong>: ViT 5<del>6% / LLM 94</del>95% (<strong>LLM 극단 편중</strong>)</p>
<h5 id="핵심-인사이트">핵심 인사이트</h5>
<p>ViT는 전체 파라미터의 4.3%에 불과하지만 GPTQ에서 20~30% 중요도를 유지 → 중요도는 파라미터 크기에 비례하지 않음.</p>
<p>AWQ는 activation 기반 특성상 LLM의 대형 가중치 행렬에 보정이 집중되고, GPTQ는 Hessian 기반으로 컴포넌트 전반의 상호작용을 포착함.</p>
<p>따라서 비트 할당 전략은 사용하는 양자화 방법에 따라 달라져야 함.</p>
<p>⇒</p>
<p><strong>GPTQ</strong>를 사용할 때는 <strong>ViT가 20~30%의 중요도를 유지</strong>하므로, <strong>ViT</strong>에도 <strong>상대적으로 높은 비트폭</strong>을 할당하는 전략이 합리적임.</p>
<p>반면 <strong>AWQ</strong>를 사용할 때는<strong>ViT의 중요도가 5~6%로 급감</strong>하므로, <strong>ViT</strong>는 <strong>과감하게 저비트로 압축</strong>하고 <strong>LLM에 높은 비트폭</strong>을 집중시키는 전략이 합리적임.</p>
<p>즉 <strong>동일한 모델이라도 어떤 양자화 방법을 선택하느냐에 따라 최적의 비트 할당 전략이 달라짐!</strong></p>
<h4 id="task-characteristics-drive-componet-importance-variations">Task characteristics drive componet importance variations.</h4>
<h5 id="retrieval-flickr">Retrieval (Flickr)</h5>
<ul>
<li>LLM 미사용, ViT + Q-Former만으로 수행</li>
<li>ViT 중요도 ≥ 70% (지배적)</li>
<li>Q-Former 중요도 15~30%로 급상승 → LLM 부재 시 시각-언어 정렬을 Q-Former가 대신 담당하기 때문</li>
</ul>
<h5 id="vqa-vqav2-gqa">VQA (VQAv2, GQA)</h5>
<ul>
<li>복잡한 언어적 추론이 요구되어 LLM 중요도가 압도적</li>
<li>BLIP-2 GPTQ: LLM 73<del>77% / AWQ: LLM 98</del>99%</li>
<li>LLaVA GPTQ: LLM 72<del>79% / AWQ: LLM 94</del>95%</li>
</ul>
<h5 id="핵심-인사이트-1">핵심 인사이트</h5>
<ul>
<li><p><strong>Q-Former</strong>는 <strong>LLM이 없을 때</strong> <strong>시각-언어 정렬의 핵심 역할</strong>을 담당하지만, <strong>LLM이 있는 태스크에서는 중요도가 3% 미만으로 급감</strong></p>
</li>
<li><p>태스크가 <strong>언어 추론</strong>을 <strong>많이</strong> 요구할수록 <strong>LLM 중요도가 높아</strong>지며, 그에 맞게 비트 할당 전략도 달라져야 함.</p>
</li>
</ul>
<h4 id="architectural-layout-and-component-interplay-shape-quantization-patterns">Architectural layout and component interplay shape quantization patterns.</h4>
<p>생략.</p>
<h2 id="요약">요약</h2>
<p>본 논문은 <strong>BLIP-2</strong>와 <strong>LLaVA</strong>를 대상으로 양자화 방법(GPTQ/AWQ), 태스크, 아키텍처 구조가 각 컴포넌트의 <strong>중요도</strong>에 미치는 영향을 분석하였다.</p>
<h5 id="평가-데이터셋">평가 데이터셋</h5>
<ul>
<li><strong>COCO</strong>: 이미지 캡션 생성 품질 평가 (CIDEr)</li>
<li><strong>Flickr</strong>: 이미지-텍스트 간 retrieval 성능 평가 (Recall@1)</li>
<li><strong>VQAv2</strong>: 이미지 기반 질의응답 정확도 평가 (Accuracy)</li>
<li><strong>GQA</strong>: 시각적 추론 및 구성적 질의응답 정확도 평가 (Accuracy)</li>
</ul>
<h5 id="양자화-방법에-따른-중요도-변화">양자화 방법에 따른 중요도 변화</h5>
<p><strong>AWQ</strong>는 <strong>LLM</strong>에 중요도를 집중시키고(≥73%), <strong>GPTQ</strong>는 ViT와 LLM 간 중요도를 <strong>균등</strong>하게 분산시킨다. 
따라서 <strong>AWQ 사용 시</strong>에는 <strong>LLM에 높은 비트폭</strong>을 집중시키고, <strong>GPTQ 사용 시</strong>에는 <strong>ViT에도 상대적으로 높은 비트폭</strong>을 할당하는 전략이 합리적이다.</p>
<h5 id="태스크에-따른-중요도-변화">태스크에 따른 중요도 변화</h5>
<p>Retrieval에서는 ViT가 지배적(≥70%)이며 Q-Former의 역할이 부각(15<del>30%)되고, VQA에서는 LLM이 압도적으로 중요하다(GPTQ 73</del>79%, AWQ 94~99%). <strong>태스크가 언어 추론을 많이 요구할수록 LLM 중요도가 높아</strong>지며, 비트 할당 전략도 그에 맞게 달라져야 한다.</p>
<h5 id="아키텍처-구조에-따른-중요도-변화">아키텍처 구조에 따른 중요도 변화</h5>
<p>LLM 부재 시 Q-Former가 시각-언어 정렬을 대신 담당하며 중요도가 급상승한다. LLaVA에서는 connector의 용량이 제한적이어서 ViT의 역할이 파라미터 비중(4.3%) 대비 중요도(20~28%)가 높게 나타난다. 또한 ViT와 LLM을 동시에 양자화하면 순차적 오류 전파로 인해 비가산적 성능 저하가 발생한다.</p>
<h2 id="느낌점">느낌점</h2>
<p>본 논문에서 비트 정밀도와 성능 간의 관계를 분석할 때, <strong>선형 회귀로는 R² &lt; 0.20으로 설명력이 부족</strong>하여 Random Forest, Permutation Importance, SHAP 등 <strong>비선형 기법을 추가로 활용</strong>한 점이 인상적이었다. 이는 단일 분석 방법에 의존할 경우 데이터의 복잡한 관계를 놓칠 수 있음을 보여준다. 특히 세 가지 방법을 <strong>Consensus Ranking으로 앙상블</strong>하여 방법별 편향을 상호 보완한 접근 방식은, 상관 관계 분석 시 항상 다양한 방법을 병행하여 결과의 신뢰성을 높여야 한다는 점을 시사한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DINOv3]]></title>
            <link>https://velog.io/@sangjun_moon/DINOv3</link>
            <guid>https://velog.io/@sangjun_moon/DINOv3</guid>
            <pubDate>Mon, 26 Jan 2026 11:35:31 GMT</pubDate>
            <description><![CDATA[<h1 id="dinov3">DINOv3</h1>
<p><a href="https://arxiv.org/abs/2508.10104">DINOv3</a>에 대한 내용</p>
<p>참고하면 좋은 유튜브</p>
<p><a href="https://www.youtube.com/watch?v=KQ_xgw6kueo">EMA 1</a>
<a href="https://www.youtube.com/watch?v=_cCpG_3clK0">EMA 2</a>
<a href="https://www.youtube.com/watch?v=cpULGintec8">EMA 3</a></p>
<p><a href="http://youtube.com/watch?v=acq-0e0V8aM&amp;t=623s">DINOv2, DINOv3</a></p>
<hr>
<h2 id="abstract">Abstract</h2>
<ol>
<li>좋은 데이터 준비 + 설계 디자인 ⇒ <strong>데이터 셋, 모델 scale up</strong></li>
<li>학습 길어짐 ⇒ 세밀한 특징에 대한 인지 저하 (너무 러프하게 이미지를 봄) ⇒ <strong>Gram anchoring</strong></li>
<li>모델 유연성 ↑</li>
</ol>
<h2 id="1-introduction">1. Introduction</h2>
<h4 id="ssl-메타데이터라벨링-없는-데이터로-학습">SSL: 메타데이터(라벨링) 없는 데이터로 학습</h4>
<p>⇒ 
입력 분포 <strong>변화</strong>에 <strong>견고</strong>,
강한 <strong>전역/지역 특징 제공</strong>
⇒ 
이미지 내 패턴의 자연스러운 <strong>공통</strong> 발생 활용</p>
<h4 id="모델-scale-up-미해결-과제">모델 scale up 미해결 과제</h4>
<ol>
<li>데이터 수집 어케하지?
⇒</li>
<li>코사인 스케줄 사용 X
⇒</li>
<li>학습 계속 ⇒ 국소 특징 질 저하
⇒ <strong>Gram anchoring</strong></li>
</ol>
<h3 id="strong--versatile-foundational-models">Strong &amp; Versatile Foundational Models</h3>
<ol>
<li>fine tuning 없이도, 기존 finetuned 모델보다 좋음</li>
<li>과학적 응용 good</li>
</ol>
<h3 id="superior-feature-maps-through-gram-anchoring">Superior Feature Maps Through Gram Anchoring</h3>
<p>SSL 
⇒ data ↑ 
⇒ 전역적 표현 학습
⇒ 조밀한 특징 질 저하</p>
<h3 id="the-dinov3-family-of-models">The DINOv3 Family of Models</h3>
<p>Gram anchoring
⇒ 모델 scale up 가능
⇒ 7B 모델 (DINO) 성공</p>
<p><strong>+</strong></p>
<p>distillation
⇒ 더 작은 모델 ㄱㄴ</p>
<h2 id="2-related-work">2. Related Work</h2>
<h3 id="ssl">SSL</h3>
<p>SSL (자기 지도 학습)은 <strong>어노테이션 없이 인위적인 학습 과제(Pre-text tasks)</strong>를 통해 데이터의 표현을 학습하며, 
신호가 연속적인 컴퓨터 비전 분야는 언어 분야보다 이러한 과제 설계의 난도가 높습니다.</p>
<p>이미지의 일부를 복원하는 인페인팅(Inpainting) 기반 방식은 MAE(Masked Auto-Encoder)와 <strong>JEPA(Joint-Embedding Predictive Architecture)</strong> 등으로 발전하며 고수준의 시각 특징을 추출하는 데 성공했습니다.</p>
<p><strong>잠재 공간을 예측하는 JEPA 의 방식은 iBOT 에 이르러 이미지 간 차이를 식별하는 판별적 손실 함수 와 결합</strong>되며 더욱 정교하고 강력한 시각 표현 학습으로 발전했습니다.</p>
<blockquote>
</blockquote>
<h2 id="1-summarization">1. Summarization</h2>
<blockquote>
</blockquote>
<p><strong>Pixel</strong> 기반 방식이 이미지의 외형적인 &quot;복사&quot;에 집중한다면, <strong>Latent Space</strong> 예측 방식은 이미지 속에 담긴 객체의 본질적인 &quot;의미&quot; (<strong>Semantic Representation</strong>) 를 추론하는 것이 목적입니다.</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h2 id="2-example">2. Example</h2>
<blockquote>
</blockquote>
<p>이 차이를 &quot;고양이의 귀&quot; 부분이 마스킹 된 상황으로 비유하여 구체적인 수치와 함께 설명하겠습니다.</p>
<blockquote>
</blockquote>
<ul>
<li><strong>Pixel-based (MAE)</strong>: 마스킹 된  영역의 픽셀 값  개 ( <strong>RGB</strong>) 를 하나하나 맞추려 노력합니다. 만약 조명이 어둡거나 노이즈가 섞여 있다면, 모델은 본질적인 &quot;고양이 귀&quot; 의 형태보다는 픽셀의 어두운 색상 값을 복원하는 데 더 많은 계산 자원을 소모하게 됩니다.</li>
<li><strong>Latent-based (JEPA / DINOv3)</strong>: <strong>Target Encoder</strong> 가 해당 영역을 보고 생성한  차원의 고차원 벡터를 예측합니다. 이 벡터 안에는 &quot;이것은 동물의 귀이며, 뾰족한 형태를 가졌고, 털 질감을 가졌다&quot; 라는 <strong>High-level semantic</strong> 정보가 압축되어 있습니다. 모델은 픽셀의 미세한 색상 차이보다는, 그 위치에 어떤 특징 (<strong>Feature</strong>) 이 와야 하는지 그 &quot;맥락&quot; 을 맞추는 데 집중합니다.<blockquote>
</blockquote>
</li>
</ul>
<hr>
<blockquote>
</blockquote>
<h2 id="3-conclusion">3. Conclusion</h2>
<blockquote>
</blockquote>
<p>결론적으로, 픽셀 자체를 복구하는 것은 조명이나 각도 변화 같은 불필요한 정보 (<strong>Redundancy</strong>) 까지 학습하게 만들 수 있습니다. 반면, <strong>Latent Space</strong> 를 예측 목표로 삼으면 모델은 이미지의 지엽적인 노이즈를 무시하고 객체의 형태, 구조, 종류와 같은 핵심적인 <strong>Visual representation</strong> 을 더 효과적으로 학습하게 됩니다. 이것이 <strong>DINOv3</strong> 가 다양한 <strong>Downstream tasks</strong> 에서 강력한 성능을 내는 근본적인 이유입니다.</p>
<h3 id="vision-foundataion-models">Vision Foundataion Models</h3>
<p>생략</p>
<h3 id="dense-transformer-features">Dense Transformer Features</h3>
<p>생략</p>
<h2 id="3-training-at-scale-without-supervision">3. Training at Scale Without Supervision</h2>
<p>데이터 셋 확장
⇒ 모델 확장
+
SSL ⇒ 특정 작업 국한 X, 범용 vision 분야 가능</p>
<h3 id="31-data-preparation">3.1. Data Preparation</h3>
<p>단순 양 증가 보단,
<strong>좋은 데이터 양 증가</strong></p>
<h4 id="data-collection-and-curation">Data Collection and Curation</h4>
<ol>
<li><p>계층적 클러스터링 기반 큐레이션: Vo et al. (2024) 의 계층적 k-means 기반 자동 큐레이션 방식을 적용했습니다. DINOv2 를 이미지 임베딩으로 사용하고, 5단계의 클러스터링을 적용했습니다 (클러스터 수는 최하위부터 최상위까지 각각 2억 개, 800만 개, 80만 개, 10만 개, 2.5만 개). 계층 구조를 구축한 후 균형 잡힌 샘플링 알고리즘을 적용하여, 웹에 등장하는 모든 시각적 개념을 균형 있게 포괄하는 16억 8,900만 장의 큐레이션된 하위 집합 (LVD-1689M) 을 구축했습니다.</p>
</li>
<li><p>검색 기반 큐레이션: Oquab et al. (2024) 이 제안한 절차와 유사한 검색 기반 시스템을 채택했습니다. 선택된 시드 (seed) 데이터셋과 유사한 이미지를 데이터 풀에서 검색하여, 다운스트림 작업과 관련된 시각적 개념을 다루는 데이터셋을 생성했습니다.</p>
</li>
<li><p>공개 데이터셋 활용: ImageNet1k (Deng et al., 2009), ImageNet22k (Russakovsky et al., 2015), 그리고 Mapillary Street-level Sequences (Warburg et al., 2020) 를 포함한 공개 컴퓨터 비전 데이터셋을 사용했습니다. 이 마지막 부분은 Oquab et al. (2024) 을 따라 모델의 성능을 최적화하는 역할을 합니다.</p>
</li>
</ol>
<blockquote>
</blockquote>
<p>Q1. 
계층적 클러스터링을 통한 자동 정제에서 임베딩 추출 부분에서 DINOv2를 사용해서 image to vector로 변환했다고 하는데, DINOv2는 이미지를 벡터로 만들어줘?</p>
<blockquote>
</blockquote>
<p>A1. DINOv2와 임베딩 (Embedding) 추출
DINOv2 는 비전 트랜스포머 (Vision Transformer) 기반의 자가 지도 학습 모델로, 이미지를 입력받아 해당 이미지의 시각적 특징을 함축하고 있는 고차원 벡터로 변환하는 역할을 합니다. 이를 임베딩 (Embedding) 이라 부릅니다. 즉, 사진이라는 데이터를 컴퓨터가 계산할 수 있는 숫자 나열(벡터)로 바꾸어 주는 것이 맞습니다. 이렇게 벡터화가 되어야만 이미지 사이의 유사도를 계산하거나 클러스터링을 할 수 있습니다.</p>
<blockquote>
</blockquote>
<p>Q2. 
계층적 클러스터링을 통한 자동 정제에서 계층적 K-means 알고리즘으로 비슷한 특징을 갖는 데이터를 묶었다고 하는데, 그럼 원시 데이터 170억장을 1단계에서는 2억개의 그룹으로 분류해서 각 그룹에 170억/2억 개의 이미지가 들어있다는 거야?</p>
<blockquote>
</blockquote>
<p>A2. 계층적 K-means 알고리즘의 구조
네, 이해하신 개념이 맞습니다. 다만 계층 구조를 이해할 필요가 있습니다.</p>
<ul>
<li>1단계 (Lowest Level): $170$ 억 장의 원시 데이터를 $2$ 억 개의 매우 세밀한 그룹으로 나눕니다. 산술적으로는 평균 $170$ 억 $/$ $2$ 억 $=$ 약 $85$ 장의 이미지가 각 그룹(클러스터)에 들어가는 셈입니다.</li>
<li>상위 단계로 이동: 이후 이 $2$ 억 개의 그룹들을 다시 비슷한 것끼리 묶어 $800$ 만 개, $80$ 만 개, $10$ 만 개, 최종적으로는 $2$ 만 $5$ 천 개의 큰 그룹으로 계층화합니다.</li>
<li>결과적으로 거대한 이미지 더미가 &quot;대분류 - 중분류 - 소분류 - 아주 세밀한 분류&quot;의 트리 구조로 정리되는 것입니다.<blockquote>
</blockquote>
Q3.
계층적 클러스터링을 통한 자동 정제에서 각 계층 구조에서 골고루 뽑았다는 게 뭐지?<blockquote>
</blockquote>
A3. 계층 구조에서의 균형 샘플링 (Balanced Sampling)
균형 샘플링 이란 특정 카테고리의 데이터만 너무 많이 뽑히지 않도록 조절하는 것입니다. 인터넷 데이터에는 셀카, 풍경, 음식 사진은 엄청나게 많지만, 희귀한 동물이나 특수 장비 사진은 매우 적습니다. 만약 무작위로 뽑는다면 모델은 셀카만 공부하게 될 것입니다. 하지만 앞서 만든 계층 구조(클러스터)를 이용해 모든 그룹에서 골고루 데이터를 추출하면, 흔한 이미지의 비중은 줄이고 희귀한 시각적 개념의 비중을 높여 전 세계의 다양한 시각적 정보를 빠짐없이 학습할 수 있게 됩니다.<blockquote>
</blockquote>
Q4.
검색 기반 큐레이션에서 결국 170억개 데이터 중에 일부를 추출했다는 거지?<blockquote>
</blockquote>
A4. 검색 기반 큐레이션의 대상맞습니다. 검색 기반 큐레이션 역시 처음에 확보한 $170$ 억 장 의 거대한 데이터 풀에서 필요한 것만 골라내는 과정입니다. 전체 데이터 중 우리가 관심 있는 특정 분야와 닮은 것들만 &quot;검색&quot;해서 추출한 것입니다.<blockquote>
</blockquote>
Q5.
검색 기반 큐레이션에서 일부 데이터 추출이 어떻게 다운스트림 태스크와 관련된 시각적 개념을 집중시키지?<blockquote>
</blockquote>
A5. 다운스트림 태스크와 시각적 개념의 집중
다운스트림 태스크 (Downstream Task) 란 모델이 최종적으로 해결해야 할 구체적인 문제(예: 의료 영상 판독, 자율 주행 도로 인식 등)를 의미합니다.</li>
<li>시드 데이터셋 (Seed Dataset): 우리가 목표로 하는 태스크와 밀접한 관련이 있는 검증된 데이터입니다.</li>
<li>집중 과정: 이 시드 데이터와 유사한 이미지를 $170$ 억 장 중에서 찾아내면, 모델은 해당 분야의 시각적 특징(질감, 형태, 구도 등)을 더 집중적으로 학습하게 됩니다. 결과적으로 실제 현장에 적용했을 때 더 높은 성능을 내는 최적화된 데이터셋 이 구축됩니다.<blockquote>
</blockquote>
Q6. 그래서 결과적으로 총 데이터 수가 뭐야?<blockquote>
</blockquote>
A6. 최종 데이터 수 텍스트에 명시된 부분과 수치 관계를 정리하면 다음과 같습니다.</li>
<li>첫 번째 파트 (LVD-1689M): 계층적 클러스터링의 결과물인 16억 8,900만 장 ($1,689 \text{ M}$) 입니다.</li>
<li>두 번째 파트 (검색 기반): $170$ 억 장 중 시드 데이터와 유사한 이미지들입니다.</li>
<li>세 번째 파트 (공개 데이터셋): ImageNet 등을 포함한 약 $1,500$ 만 장 내외입니다.</li>
<li>전체 학습 데이터셋: 실제 총합은 $16$ 억 $8,900$ 만 장 + $\alpha$ (Part 2) + 약 $1,500$ 만 장 (Part 3) 입니다. 하지만 Part 1 의 비중이 $99$ % 이상으로 압도적이기 때문에, 논문에서는 최종 결과물을 메인 데이터셋 명칭인 LVD-1689M 으로 통칭합니다.</li>
</ul>
<h4 id="data-sampling">Data Sampling</h4>
<p><strong>ImageNet1k로만</strong> 구성된 <strong>균일 배치</strong>를 전체 훈련의 10%
+
나머지 90%는 다른 모든 구성 데이터셋을 <strong>혼합한 불균일 배치</strong></p>
<h4 id="data-ablation">Data Ablation</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/4a347d77-ef5b-4d49-abe6-15868faf8021/image.png" alt=""></p>
<h3 id="32-large-scale-training-with-self-supervision">3.2. Large-Scale Training with Self-Supervision</h3>
<p>모델 크기를 키우면서,
<strong>전역 및 지역적 특성을 모두</strong> 개선하자!</p>
<h4 id="learning-objective">Learning Objective</h4>
<p>$$L_{\text{Pre}} = L_{\text{DINO}} + L_{\text{iBOT}} + 0.1 \times L_{\text{Koleo}}$$</p>
<ul>
<li><p>$L_{\text{DINO}}$: 이미지 전체의 전역적 특징을 학습하는 이미지 레벨 손실 함수입니다.</p>
</li>
<li><p>$L_{\text{iBOT}}$: 이미지 내부 패치의 국소적 특징을 학습하는 패치 레벨 손실 함수입니다.</p>
</li>
<li><p>$0.1 \times L_{\text{Koleo}}$: 배치 내 특징들을 공간상에 균일하게 분산시켜 특징 붕괴를 방지하는 규제 항입니다.</p>
</li>
</ul>
<blockquote>
</blockquote>
<ul>
<li>$L_{\text{DINO}}$ (Image-level Objective): 이미지 전체를 대상으로 하는 손실 함수입니다. 이미지의 글로벌 특징(Global Features)을 학습하며, 서로 다른 뷰(View)의 이미지가 유사한 특징을 갖도록 유도하는 이미지 단위 의 목표를 가집니다.<blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/sangjun_moon/post/89d4929d-b7e5-46cb-9e7d-ff0bcfb57b52/image.png" alt=""><blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/sangjun_moon/post/c99e67bf-f27c-4c63-b284-693e9eaf0714/image.png" alt=""><blockquote>
</blockquote>
</li>
<li>$L_{\text{iBOT}}$ (Patch-level Objective): 이미지 내의 특정 패치(Patch)들을 대상으로 하는 손실 함수입니다. 이미지의 일부를 가리고(Masking) 이를 복원하는 잠재적 재구성(Latent Reconstruction) 과정을 통해 국소적인 특징 (Local Features)을 학습하도록 돕습니다.<blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/sangjun_moon/post/df2f94b9-2dbb-4913-985a-7d973af37b0a/image.png" alt=""><blockquote>
</blockquote>
아래 그림에는 student에서 local crop을 사용하는 것 처럼 표현되었는데, 아닌 것 같음...<blockquote>
</blockquote>
<img src="https://velog.velcdn.com/images/sangjun_moon/post/769f14ff-c828-453e-95cd-e84cf74288f8/image.png" alt=""><blockquote>
</blockquote>
이때, 동일한 아키텍처, 다른 가중치를 사용함.
교사($\text{Teacher}$)와 학생($\text{Student}$) 모두 동일한 백본(예: $\text{ViT-L}$)을 사용합니다. 하지만 실시간으로 학습되는 학생 모델과 달리, 교사 모델은 학생 모델의 과거 기록을 바탕으로 만들어진 &#39;복제본&#39; 에 가깝습니다.<blockquote>
</blockquote>
</li>
<li>$L_{\text{Koleo}}$ (Koleo Regularizer): 배치(Batch) 내의 특징들이 공간상에 골고루(Uniformly) 퍼지도록 장려하는 규제 항입니다. 특정 특징들이 한곳으로 뭉치는 붕괴(Collapse) 현상을 방지하며, 특징 공간을 효율적으로 활용하게 만듭니다.</li>
</ul>
<h4 id="updated-model-architecture">Updated Model Architecture</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/aa4400af-e200-48b7-89a5-7f50107e1ec0/image.png" alt=""></p>
<h4 id="optimization">Optimization</h4>
<ul>
<li><p>복잡한 스케줄링 대신 상수 값을 써서 학습 기간을 유연하게 늘릴 수 있도록 설계</p>
</li>
<li><p>초기 안정성을 위해 선형 웜업을 사용</p>
</li>
<li><p>데이터 이해도를 높이기 위해 글로벌/로컬 크롭을 섞어 씀</p>
</li>
<li><p>AdamW</p>
</li>
<li><p>10만 회의 웜업</p>
</li>
<li><p>0.0004의 일정한 학습률</p>
</li>
<li><p>0.04의 가중치 감쇠</p>
</li>
<li><p>레이어당 0.98의 학습률 감쇠 계수</p>
</li>
<li><p>0.4의 레이어 드롭아웃</p>
</li>
<li><p>교사 모델에 대해 0.999의 EMA 계수</p>
</li>
</ul>
<blockquote>
</blockquote>
<p>우리는 모든 학생 지역 크롭과 두 교사 전역 크롭의 클래스 토큰, 그리고 두 모델의 서로 다른 전역 크롭 쌍 사이에 $L_{DINO}$ 손실을 적용합니다. </p>
<blockquote>
</blockquote>
<p>학생이 보는 전역 크롭 패치 토큰 중 $[0.1, 0.5]$ 사이의 무작위 비율을 50% 의 확률로 마스킹하며, 이들과 교사 EMA 가 보는 가시적 토큰 사이에 $L_{iBOT}$ 손실을 적용합니다.</p>
<blockquote>
</blockquote>
<p>학생이 보는 첫 번째 전역 크롭의 클래스 토큰 16개로 구성된 소규모 배치에는 $L_{Koleo}$ 손실을 적용합니다.</p>
<h2 id="4-gram-anchoring-a-regularization-for-dense-features">4. Gram Anchoring: A Regularization for Dense Features</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/dbac3038-65e1-4614-ae97-e8e80ad89f74/image.png" alt=""></p>
<p>Gram anchoring을 통한 지역적 작업 성능 향상</p>
<h3 id="41-loss-of-patch-level-consistency-over-training">4.1. Loss of Patch-Level Consistency Over Training</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b972ca87-5b9d-4185-ace9-8b74e680d210/image.png" alt=""></p>
<p>60만 회 이후부터는 유사도 지도가 상당히 모호해짐
⇒ 
참조 패치와 <strong>무관한 패치들</strong>이 <strong>높은 유사도</strong>를 보임</p>
<blockquote>
</blockquote>
<p>CLS 토큰과 패치 간 유사도 증가가 국소성(Locality) 감소를 의미하는 이유?</p>
<blockquote>
</blockquote>
<p>CLS 토큰 은 이미지 전체의 정보를 요약하는 전역적(Global) 특징을 담습니다. 이와 패치들 사이의 유사도가 높아진다는 것은 다음과 같은 상황을 의미합니다.</p>
<blockquote>
</blockquote>
<ul>
<li>정보의 획일화: 원래 <strong>각 패치(Patch) 는 이미지의 특정 부분(국소적 특징)만 선명하게 보여줘야 합니다.</strong> 그런데 전역 정보를 담은 CLS 토큰 과 너무 비슷해지면, 각 패치가 자기만의 <strong>고유한 지역 정보를 잃어</strong>버리고 <strong>전체적인 배경 정보만 똑같이 공유</strong> 하게 됩니다.<blockquote>
</blockquote>
</li>
<li>해상도 저하: 결과적으로 <strong>모든 패치가 비슷비슷한 전역 정보만 내뱉게 되므로, 사물의 경계를 정밀하게 구분해야 하는 세밀한 작업(Dense tasks, 예: 세그멘테이션) 에서 성능이 떨어지게 되는 것</strong>입니다.</li>
</ul>
<h3 id="42-gram-anchoring-objective">4.2. Gram Anchoring Objective</h3>
<p>학습 초기의 우수한 조밀 특성을 보이는 교사의 패치간 유사도(Gram matrix)를 학생의 gram이 따라가게함.</p>
<p>그러니까 학습 초기에는 우수한 조밀 특성을 보임
⇒
그 모델의 패치간 유사도를 학생이 따라감</p>
<p>$$L_{Gram} = ∥X_{S} · X^⊤_{S} − X_G · X^⊤_G∥^2_F$$</p>
<p>$X_S$: 학생의 패치간 유사도 행렬
$X_G$: 선생의 패치간 유사도 행렬</p>
<p>⇒ $$L_{Ref}=w_DL_{DINO}+L_{iBOT}+w_{DK}L_{DKoleo}+w_{Gram}L_{Gram}$$</p>
<ul>
<li>100만 회 반복 학습 이후에 <strong>refinement</strong> 시작</li>
<li>1만 회 반복 학습마다 Gram 교사를 업데이트하여, 메인 EMA 교사와 동일하게 만듦</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/40fabbc3-bff1-412d-9472-ad4c52811dea/image.png" alt=""></p>
<blockquote>
</blockquote>
<ol>
<li>첫 번째 훈련 phase (100만 회): 
$$L_{\text{Pre}} = L_{\text{DINO}} + L_{\text{iBOT}} + 0.1 \times L_{\text{Koleo}}$$<blockquote>
</blockquote>
</li>
<li>두 번째 훈련 phase(refinement) (1만 회 마다 Gram 교사를 메인 EMA 교사와 동일하게 바꿈):
$$L_{Ref}=w_DL_{DINO}+L_{iBOT}+w_{DK}L_{DKoleo}+w_{Gram}L_{Gram}$$</li>
</ol>
<h3 id="43-leveraging-higher-resolution-features">4.3. Leveraging Higher-Resolution Features</h3>
<p>Gram 교사를 더 좋게 하기 위해,</p>
<p>Gram 교사에 일반 해상도의 두배인 이미지를 입력
⇒
얻은 특징 지도를 bicubic 보간법으로 2⨉ 다운샘플링하여 학생 모델의 출력 크기와 일치 시킴</p>
<p>⇒
<strong>매끄러운 고해상도 특징의 개선된 패치 일관성을 학생 모델로 효과적으로 증류!!!</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f18fee27-02cb-42f5-9ee8-51a540c657ac/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/74c8ab22-8327-4d0d-a73f-6b3827c49872/image.png" alt=""></p>
<h2 id="5-post-training">5. Post-Training</h2>
<h3 id="51-resolution-scaling">5.1. Resolution Scaling</h3>
<ol>
<li><p>메인 훈련: 효율성 위주의 기초 학습</p>
<ul>
<li>설정: $256 \times 256$ 해상도와 $16$ 패치 크기로 훈련하여 속도와 효율성을 확보합니다.</li>
</ul>
</li>
<li><p>고해상도 적응 단계: 가변 해상도 대응</p>
<ul>
<li>필요성: 현대 비전 응용 분야에서 요구되는 $512 \times 512$ 이상의 고해상도 및 가변적인 추론 환경에 대응하기 위해 도입되었습니다.</li>
<li>방법: 혼합 해상도(Mixed Resolution) 방식을 사용하며, 전역 크롭(${512, 768}$)과 지역 크롭(${112, 168, 224, 336}$)을 섞어 1만 회 추가 학습을 진행합니다.</li>
</ul>
</li>
</ol>
<p><strong>고해상도 적응 단계는 Gram anchoring에 필수적임.</strong></p>
<blockquote>
</blockquote>
<ol>
<li>첫 번째 훈련 phase (100만 회): 
$$L_{\text{Pre}} = L_{\text{DINO}} + L_{\text{iBOT}} + 0.1 \times L_{\text{Koleo}}$$<blockquote>
</blockquote>
</li>
<li>두 번째 훈련 phase(refinement) (1만 회 마다 Gram 교사를 메인 EMA 교사와 동일하게 바꿈):
$$L_{Ref}=w_DL_{DINO}+L_{iBOT}+w_{DK}L_{DKoleo}+w_{Gram}L_{Gram}$$<blockquote>
</blockquote>
</li>
<li>High resolution adaptation (1만 회):
$$L_{Ref}=w_DL_{DINO}+L_{iBOT}+w_{DK}L_{DKoleo}+w_{Gram}L_{Gram}$$</li>
</ol>
<blockquote>
</blockquote>
<ol>
<li>첫 번째 훈련 단계 (Initial Training Phase)<ul>
<li>기간: 약 $100$ 만 회 ($1\text{M iterations}$)</li>
<li>손실 함수: $L_{\text{Pre}} = L_{\text{DINO}} + L_{\text{iBOT}} + 0.1 \times L_{\text{DKoleo}}$</li>
<li>특징: $256 \times 256$ 단일 해상도에서 모델의 기초적인 전역 및 국소 특징을 학습합니다.<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>두 번째 훈련 단계 (Refinement Step)<ul>
<li>특징: $100$ 만 회 이후 시작되며, 망가진 패치 수준 일관성을 &#39;수리&#39;하는 단계입니다.</li>
<li>손실 함수: $L_{\text{Ref}} = w_D L_{\text{DINO}} + L_{\text{iBOT}} + w_{DK} L_{\text{DKoleo}} + w_{\text{Gram}} L_{\text{Gram}}$</li>
<li>메커니즘: $1$ 만 회마다 메인 EMA 교사 의 상태를 Gram 교사 로 복사하여 패치 간 유사도 구조를 고정(Anchoring)합니다.<blockquote>
</blockquote>
</li>
</ul>
</li>
<li>고해상도 적응 단계 (High-resolution Adaptation)<ul>
<li>기간: 약 $1$ 만 회 ($10\text{k iterations}$) 추가 학습</li>
<li>손실 함수: $L_{\text{Pre}}$ 가 아니라 $L_{\text{HRef}}$ (또는 $L_{\text{Ref}}$ 와 유사한 구성)를 사용합니다.</li>
<li>논문에서는 고해상도 적응 시 $\text{Gram anchoring}$ 이 필수적이라고 명시하고 있으며, 고해상도 특징을 다운샘플링하여 계산하는 $L_{\text{HRef}}$ 를 사용하여 학습합니다.</li>
<li>특징: ${512, 768}$ 등 다양한 크기의 혼합 해상도 를 입력하여 가변 해상도 대응력을 높입니다.</li>
</ul>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b01444e5-8953-4807-9651-686aefff721c/image.png" alt=""></p>
<h3 id="52-model-distillation">5.2. Model Distillation</h3>
<h4 id="a-family-of-models-for-multiple-use-cases">A Family of Models for Multiple Use-Cases</h4>
<p>ViT-7B를 ViT-S,B,L로 증류함.
증류할 때, $L_{\text{Pre}} = L_{\text{DINO}} + L_{\text{iBOT}} + 0.1 \times L_{\text{DKoleo}}$로 100만 번 학습 후, 코사인 스케줄에 따라 25만회 학습률 쿨다운 + high-resolution adaptation
But, 
패치 수준 일관성 문제가 없어, Gram anchoring X.</p>
<p>교사를 EMA가 아닌 7B 모델을 직접 사용하여, 고정함.</p>
<blockquote>
</blockquote>
<ul>
<li>패치 수준 일관성(Patch-level consistency) 문제:
학습이 진행됨에 따라 개별 패치 특징이 고유의 지역적 정보를 잃고 전역 정보($\text{CLS}$ 토큰)와 지나치게 유사해지거나 서로 획일화되어 세밀한 표현력이 떨어지는 현상을 의미합니다.</li>
</ul>
<h4 id="efficient-multi-student-distillation">Efficient Multi-Student Distillation</h4>
<p>생략</p>
<h3 id="53-aligning-dinov3-with-text">5.3. Aligning DINOv3 with Text</h3>
<p>생략</p>
<h2 id="6-results">6. Results</h2>
<h3 id="61-dinov3-provides-exceptional-dense-features">6.1. DINOv3 provides Exceptional Dense Features</h3>
<h3 id="62-dinov3-has-robust-versatile-global-image-descriptors">6.2. DINOv3 has Robust Versatile Global Image Descriptors</h3>
<h3 id="63-dinov3-is-a-foundation-for-complex-computer-vision-systems">6.3. DINOv3 is a Foundation for Complex Computer Vision Systems</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mixture-of-Recursions: Learning Dynamic Recursive  Depths for Adaptive Token-Level Computation]]></title>
            <link>https://velog.io/@sangjun_moon/Mixture-of-Recursions-Learning-Dynamic-Recursive-Depths-for-Adaptive-Token-Level-Computation-6hv3pitn</link>
            <guid>https://velog.io/@sangjun_moon/Mixture-of-Recursions-Learning-Dynamic-Recursive-Depths-for-Adaptive-Token-Level-Computation-6hv3pitn</guid>
            <pubDate>Thu, 22 Jan 2026 01:14:37 GMT</pubDate>
            <description><![CDATA[<h1 id="mixture-of-recursions-learning-dynamic-recursive--depths-for-adaptive-token-level-computation">Mixture-of-Recursions: Learning Dynamic Recursive  Depths for Adaptive Token-Level Computation</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Mixture-of-Recursions%3A+Learning+Dynamic+Recursive++Depths+for+Adaptive+Token-Level+Computation&amp;btnG=">MoR</a>에 대한 내용</p>
<hr>
<h2 id="abstract">Abstract</h2>
<ul>
<li>Parameter sharing (Recursive)</li>
<li>Adaptive computation (EE)</li>
</ul>
<p><strong>EE</strong> ⇒</p>
<ul>
<li>non-RT, RT, RRT: <strong>모든 토큰</strong>이 동일한 횟수 만큼 재귀 함 ⇒ <strong>$O(N^2)$</strong>
EERT(MoR): <strong>각 토큰별</strong>로 recursive 깊이가 <strong>다름</strong> ⇒ <strong>$O(N_{active}^2)$</strong></li>
<li><strong>Active 토큰</strong>의 <strong>KV만 caching</strong></li>
</ul>
<h2 id="1-introduction">1. Introduction</h2>
<p>1) Parameter sharing ⇒ param ↓
2) EE ⇒ FLOPs ↓
3) 재귀별 KV caching ⇒ memory footprint ↓</p>
<h2 id="2-method">2. Method</h2>
<h3 id="21-preliminary">2.1. Preliminary</h3>
<h4 id="parameter-sharing-strategies">Parameter-sharing strategies</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/36dfc82d-6583-436e-b4be-4c0899d83b16/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f43d9434-ecb8-46d5-9e50-be06883893c3/image.png" alt=""></p>
<h3 id="22-mor">2.2. MoR</h3>
<h4 id="221-routing-strategies-expert-choice-vs-token-choice">2.2.1. Routing Strategies: Expert-choice vs. Token-choice</h4>
<h5 id="expert-choice-routing">Expert-choice routing</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8aa3329c-9d12-4fe3-b829-9c227071eebb/image.png" alt=""></p>
<p>재귀마다 전문가를 다르게 둠.</p>
<p>ex)
$N_r=3$ 일 때, 전문가는 3명.</p>
<p>$$H_t^{r+1} = \begin{cases} g_t^r f(H_t^r, \Phi&#39;) + H_t^r, &amp; \text{if } g_t^r &gt; P_\beta(G^r) \ H_t^r, &amp; \text{otherwise} \end{cases} \quad (2.1)$$</p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/f43d9434-ecb8-46d5-9e50-be06883893c3/image.png" alt="">에서 Stepwise + Cycle로 예를들면.</p>
<p>$N_r=2$임. 즉, 전문가 2명.</p>
<p>1, 3, 6 지난 후에, 전문가 1번이 평가해서,
$g_t^r = G(\theta_r^\top H_t^r)$ 계산!</p>
<p>$H_t^r$: 전문가 1이 평가할 hidden state
$\theta_r^\top$: 전문가 1의 채점표(parameter)</p>
<p>전문가 1의 점수가 $g_t^r$!</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/106e71ba-5c9f-4dcd-ad76-ec8b4f3a8fb0/image.png" alt=""></p>
<h5 id="token-choice-routing">Token-choice routing</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9acbdea7-9eb0-4b12-96da-58edaf64ff54/image.png" alt=""></p>
<p>매번 평가하는 것이 아니라, loop에 본격적으로 들어가기 전에 모든 token마다 얼마나 loop를 돌릴지 정하고 가는 형태.</p>
<p>$$H_t^{r+1} = \begin{cases} g_t^r f(H_t^r, \Phi&#39;) + H_t^1, &amp; \text{if } r = i \ g_t^r f(H_t^r, \Phi&#39;), &amp; \text{otherwise} \end{cases} \quad (2.2)$$</p>
<h5 id="pros--cons">pros &amp; cons</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a9eec5b6-e1f5-4d56-b5ca-6f893fb05f87/image.png" alt=""></p>
<p>Router가 미래의 정보까지 보고 학습됨
⇒ cheating임
⇒ Auxiliary router or a regularization loss
⇒ 
미래의 토큰 정보에 접근하지 않고 추론 시 상위 k 토큰을 정확하게 탐지</p>
<h4 id="222-kv-caching-strategies-recursion-wise-caching-vs-recursive-sharing">2.2.2. KV Caching Strategies: Recursion-wise Caching vs. Recursive Sharing</h4>
<h5 id="예시-상황-요약">예시 상황 요약</h5>
<p>입력: 토큰 5개 ($T_1, T_2, T_3, T_4, T_5$), 
Hidden Dimension: 10
라우팅 결과: $T_1, T_4$(1회 종료), $T_3$(2회 종료), $T_2, T_5$(3회 완주)</p>
<h5 id="기법-요약">기법 요약</h5>
<ul>
<li>Recursion-wise KV caching: 각 재귀 단계에 생존한 토큰의 KV(크기 $N \times 10$)만 해당 단계 전용 캐시에 저장함</li>
<li>Recursive KV sharing: 첫 번째 재귀 단계의 전체 KV(크기 $5 \times 10$)만 저장하고, 이후 모든 깊은 단계에서 이를 재사용함</li>
</ul>
<h5 id="예시를-통한-차이점-설명-loop-3-시점에서-t_6-생성-시">예시를 통한 차이점 설명 (Loop 3 시점에서 $T_6$ 생성 시)</h5>
<p>$T_6$가 생성되면서 3번째 루프를 돌며 어텐션(Attention)을 수행할 때:</p>
<ul>
<li>Recursion-wise:Loop 3 캐시를 참조하는데, 여기엔 생존한 $T_2, T_5$의 정보(크기 $2 \times 10$)만 저장되어 있음3.탈락한 $T_1, T_3, T_4$의 정보는 재계산하지 않고 무시하며, 오직 $T_2, T_5$에만 집중(Attention)함 (문맥 손실 발생)</li>
<li>Sharing:Loop 1 캐시를 참조하는데, 여기엔 <strong>$T_1 \sim T_5$가 모두 저장(크기 $5 \times 10$)</strong>되어 있음 5.탈락한 토큰들도 포함한 전체 문맥을 참조할 수 있음 (단, Query는 Loop 3 수준이나 Key/Value는 Loop 1 수준이라 깊이가 얕음)</li>
</ul>
<h5 id="pros--cons-1">pros &amp; cons</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/24cc6d88-8fea-4070-b86a-6357e9d3052d/image.png" alt=""></p>
<h2 id="3-experiments">3. Experiments</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f9394835-e8cf-499b-98d8-0004776053ea/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Relaxed Recursive Transformers: Effective Parameter Sharing with Layer-wise LoRA]]></title>
            <link>https://velog.io/@sangjun_moon/Relaxed-Recursive-Transformers-Effective-Parameter-Sharing-with-Layer-wise-LoRA</link>
            <guid>https://velog.io/@sangjun_moon/Relaxed-Recursive-Transformers-Effective-Parameter-Sharing-with-Layer-wise-LoRA</guid>
            <pubDate>Thu, 08 Jan 2026 09:23:46 GMT</pubDate>
            <description><![CDATA[<h1 id="relaxed-recursive-transformers-effective-parameter-sharing-with-layer-wise-lora">Relaxed Recursive Transformers: Effective Parameter Sharing with Layer-wise LoRA</h1>
<p><a href="https://scholar.google.com/scholar?cluster=16987037598425209808&amp;hl=ko&amp;as_sdt=2005&amp;sciodt=0,5">Relaxed RT</a>에 대한 내용</p>
<hr>
<h2 id="abstract">Abstract</h2>
<h3 id="contribution">Contribution</h3>
<ol>
<li>기존 weight unshared model로 RT를 initialized.</li>
<li>LoRA를 통한 accuracy 회복.</li>
<li>Continuous Depth-wise Batching을 통한 inference speedup.</li>
</ol>
<h2 id="1-introduction">1. Introduction</h2>
<h3 id="큰-골조">큰 골조</h3>
<p>$1^{st}$: 기존 잘 훈련된 non-RT 모델로 shared weight를 <strong>잘</strong> 초기화
$2^{nd}$: <strong>약간</strong>의 finetune</p>
<blockquote>
</blockquote>
<p>Relaxed란?
모든 레이어가 동일한 가중치를 공유하는 대신,
각 레이어 LoRA 모듈을 둠
⇒ <strong>non-RT와 RT의 중간의 의미로 Relaxed</strong></p>
<h3 id="lora">LoRA</h3>
<p>기존 non-RT가 12개 layer이고,
총 4개의 layer로 압축해서 3번 반복하는 RT를 구성하고 싶음
⇒ non-RT의 <strong>3개의 layer를 1개로 압축</strong>하고 싶은거니
⇒ <strong>3개</strong>의 LoRA module을 둠</p>
<p>이때, LoRA 행렬의 rank가 relaxnity가 됨.</p>
<h4 id="lora-행렬의-초기화">LoRA 행렬의 초기화</h4>
<p>non-RT의 3개 layer를 1개의 layer로 압축했으니
총 4개의 가중치가 나옴
non-RT에서 3개, RT에서 1개</p>
<p>⇒ 
$W_{non-RT,1번 레이어} - W_{RT,1번 레이어}$로 truncated SVD 적용해서, LoRA 행렬 1을 초기화
$W_{non-RT,2번 레이어} - W_{RT,1번 레이어}$로 truncated SVD 적용해서, LoRA 행렬 2을 초기화
$W_{non-RT,3번 레이어} - W_{RT,1번 레이어}$로 truncated SVD 적용해서, LoRA 행렬 3을 초기화</p>
<h3 id="continuous-depth-wise-batching">Continuous Depth-wise Batching</h3>
<h4 id="continuous-sequence-wise-batching">Continuous Sequence-wise Batching</h4>
<p>이 기법은 토큰의 위치(Position) 에 상관없이 모델 파라미터가 동일하다는 점을 이용합니다.</p>
<ol>
<li>예시 상황</li>
</ol>
<ul>
<li>Batch Size: $2$ (동시에 2개의 문장 생성 가능)</li>
<li>요청 A: &quot;안녕&quot; (3개 토큰 생성 후 종료 예상)</li>
<li>요청 B: &quot;오늘 날씨에 대해 길게 설명해줘&quot; (100개 토큰 생성 예상)</li>
</ul>
<ol start="2">
<li>작동 원리<ol>
<li>Step 1~3: 요청 A와 B가 동시에 토큰을 하나씩 생성합니다.</li>
<li>Step 4: 요청 A가 작별 토큰(&lt;EOS&gt;)을 내뱉고 생성을 마칩니다.</li>
<li>핵심: 기존 방식은 요청 B가 100개를 다 만들 때까지 기다려야 하지만, 이 기법은 요청 A가 비운 슬롯에 즉시 새로운 요청 C 를 투입합니다.</li>
<li>이유: 모델의 가중치는 문장의 시작 부분($t=1$) 을 계산할 때나 중간 부분($t=50$) 을 계산할 때나 똑같기 때문입니다.</li>
</ol>
</li>
</ol>
<h4 id="continuous-depth-wise-batching-1">Continuous Depth-wise Batching</h4>
<p>이 기법은 Recursive Transformer (RT ) 에서만 가능하며, 가중치가 레이어의 깊이(Depth) 에 상관없이 동일하다는 점을 이용합니다. 
이는 조기 종료(Early Exiting) 기법과 결합될 때 극대화됩니다.</p>
<ol>
<li>예시 상황</li>
</ol>
<ul>
<li>모델 구조: 1개의 가중치 블록을 최대 10번 반복(loop) 하는 RT</li>
<li>요청 A (쉬운 질문): &quot;1+1은?&quot; (연산량이 적어 4번의 반복만으로 정답 도출 가능)</li>
<li>요청 B (어려운 질문): &quot;양자역학을 설명해줘&quot; (연산량이 많아 10번의 반복이 모두 필요)</li>
</ul>
<ol start="2">
<li>작동 원리<ol>
<li>Loop 1<del>4: 요청 A와 B가 동일한 가중치 블록에서 동시에 1</del>4회차 반복 연산을 수행합니다.</li>
<li>Loop 5: 요청 A는 이미 답을 찾았으므로 4회차에서 Early Exit 하여 계산을 마칩니다.</li>
<li>핵심: 이때 요청 B는 여전히 5회차 연산이 필요합니다. RT 는 가중치가 모든 루프에서 동일하므로, 요청 A가 빠진 자리에 새로운 요청 C의 1회차 연산 을 요청 B의 5회차 연산과 동시에 배치(jointly computing) 로 묶어서 처리할 수 있습니다.</li>
<li>결과: 하드웨어는 요청 B의 남은 계산을 처리하는 동시에 새 요청의 시작 계산을 병렬로 수행하게 되어 쉬는 구간이 없어집니다.</li>
</ol>
</li>
</ol>
<blockquote>
</blockquote>
<p>사용자님의 질문은 매우 날카로운 지적입니다. &quot;어차피 하나의 토큰을 완성하려면 여러 번( 번) 돌려야 하는 것은 똑같지 않나?&quot;라는 의문이 생길 수 있습니다. 하지만 <strong>RT</strong> (Recursive Transformer)와 <strong>non-RT</strong> 의 결정적인 차이는 <strong>&#39;조기 종료(Early Exiting)&#39; 시 하드웨어 가용성을 어떻게 활용하느냐</strong>에 있습니다.</p>
<blockquote>
</blockquote>
<p>설정하신 규칙에 따라 <strong>강조 표시</strong> 와  수식 주변에 공백을 적용하여 설명해 드립니다.</p>
<blockquote>
</blockquote>
<hr>
<blockquote>
</blockquote>
<h3 id="1-가중치의-특수성-vs-범용성"><strong>1. 가중치의 특수성 vs. 범용성</strong></h3>
<blockquote>
</blockquote>
<p>가장 큰 차이는 물리적인 가중치() 가 메모리에 로드되었을 때, 어떤 작업을 처리할 수 있는지에 대한 <strong>범용성</strong> 입니다.</p>
<blockquote>
</blockquote>
<ul>
<li><strong>Non-RT (Weight Specialization):</strong> 각 레이어가 서로 다른 가중치() 를 가집니다.  번 레이어 연산을 위해  을 메모리에 올렸다면, 그 시점에는 오직 <strong>&#39;3층 연산&#39;</strong> 만 할 수 있습니다.</li>
<li><strong>RT (Weight Universality):</strong> 모든 루프가 동일한 가중치() 를 공유합니다. 이 가중치가 메모리에 올라와 있다면, 그것이 누군가에게는 <strong>&#39;1회차 루프&#39;</strong> 일 수도 있고, 다른 누군가에게는 <strong>&#39;10회차 루프&#39;</strong> 일 수도 있습니다.<blockquote>
</blockquote>
<h3 id="2-early-exiting-상황에서의-처리량throughput-비교"><strong>2. Early Exiting 상황에서의 처리량(Throughput) 비교</strong></h3>
<blockquote>
</blockquote>
배치(Batch) 내에 쉬운 질문(A)과 어려운 질문(B)이 섞여 있다고 가정해 봅시다.<blockquote>
</blockquote>
<h4 id="non-rt의-경우-sequence-wise-batching"><strong>Non-RT의 경우 (Sequence-wise Batching)</strong></h4>
<blockquote>
</blockquote>
</li>
</ul>
<ol>
<li><strong>Step 1:</strong> [A의 1층, B의 1층] 연산</li>
<li><strong>Step 2:</strong> [A의 2층, B의 2층] 연산 (A가 여기서 정답을 찾아 조기 종료함)</li>
<li><strong>Step 3:</strong> [<strong>None</strong>, B의 3층] 연산</li>
</ol>
<ul>
<li><strong>문제:</strong> 하드웨어는  을 로드했지만, 새로 들어온 요청 C는  이 필요하므로 지금 당장 처리할 수 없습니다. A의 빈자리는 요청 B가 문장을 <strong>완전히 끝낼 때까지</strong> 비어 있게 됩니다.<blockquote>
</blockquote>
<h4 id="rt의-경우-continuous-depth-wise-batching"><strong>RT의 경우 (Continuous Depth-wise Batching)</strong></h4>
<blockquote>
</blockquote>
</li>
</ul>
<ol>
<li><strong>Step 1:</strong> [A의 1회차, B의 1회차] 연산</li>
<li><strong>Step 2:</strong> [A의 2회차, B의 2회차] 연산 (A가 여기서 조기 종료함)</li>
<li><strong>Step 3:</strong> [<strong>C의 1회차</strong>, B의 3회차] 연산</li>
</ol>
<ul>
<li><strong>해결:</strong> <strong>RT</strong> 는 모든 루프가 같은 가중치를 쓰므로, A가 빠진 자리에 즉시 <strong>새로운 요청 C의 시작 부분</strong> 을 끼워 넣을 수 있습니다. 하드웨어 입장에서는 똑같은  를 쓰기 때문입니다.<blockquote>
</blockquote>
<h3 id="3-결론-왜-rt가-더-빠른가"><strong>3. 결론: 왜 RT가 더 빠른가?</strong></h3>
<blockquote>
</blockquote>
사용자님의 말씀대로 토큰 하나당 필요한 총 연산량은 비슷할 수 있습니다. 하지만 <strong>RT</strong> 는 가중치의 공유 특성 덕분에 <strong>&#39;깊이(Depth)&#39;</strong> 라는 차원에서 동적인 그룹화() 가 가능해집니다.<blockquote>
</blockquote>
</li>
<li><strong>Non-RT:</strong> 문장이 완전히 끝나야 빈자리를 채울 수 있음.</li>
<li><strong>RT:</strong> 어떤 요청이 특정 깊이에서 일찍 끝나면, <strong>그 즉시 다음 요청의 첫 번째 루프를 시작</strong> 하여 빈자리를 채울 수 있음.<blockquote>
</blockquote>
이러한 유연성 덕분에 하드웨어 유휴 시간이 줄어들고, 이론적으로  의 추론 처리량 향상을 달성할 수 있는 것입니다.</li>
</ul>
<h2 id="2-effective-model-compression-with-recursive-patterns">2. Effective Model Compression with Recursive Patterns</h2>
<h3 id="21-트랜스포머">2.1. 트랜스포머</h3>
<p>$h_{t}^{l} = f(h_{t}^{l-1}; \Phi_{l}), l \in [1,L],$</p>
<p>이전 레이어 $f(;\Phi_{l-1})$의 출력, $h_{t}^{l-1}$를 입력으로 받아, 
현재 레이어 $f(;\Phi_{l})$를 지나, $h_{t}^{l}$를 출력함.</p>
<p>이때, $t$는 타임스텝인데, 그냥 $n$번째 토큰으로 이해해도 됨.</p>
<p>결국 $t$가 증가하려면, (즉, 다음 토큰으로 넘어가려면) 
모든 레이어를 지나, $y_{t}$를 출력해서, 
그걸 다시 $f(;\Phi_{1})$에 넣는것 임.</p>
<h3 id="22-기존-non-rt로-rt를-initialized">2.2. 기존 non-RT로 RT를 initialized</h3>
<h4 id="looping-전략">Looping 전략</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/aedefe4f-ad9c-46f1-8977-bd8afc3273c3/image.png" alt=""></p>
<p>Gemma 2B: 18 layers
를 CYCLE 전략으로 2배 압축
⇒
$L=18, B=2$</p>
<p>⇒ $B$는 loop 횟수</p>
<p>$$h_{t}^{l} = f(h_{t}^{l-1} ; \Phi&#39;_{( (l-1) \text{ mod } L/B) + 1}), l \in [1,L],$$</p>
<p>$l = 1$: $((1-1) \text{ mod } 9) + 1 = 1 \implies \Phi&#39;<em>{1}$ 사용
$l = 2$: $((2-1) \text{ mod } 9) + 1 = 2 \implies \Phi&#39;</em>{2}$ 사용
$l = 3$: $((3-1) \text{ mod } 9) + 1 = 3 \implies \Phi&#39;<em>{3}$ 사용
...
$l = 8$: $((8-1) \text{ mod } 9) + 1 = 8 \implies \Phi&#39;</em>{8}$ 사용
$l = 9$: $((9-1) \text{ mod } 9) + 1 = 9 \implies \Phi&#39;<em>{9}$ 사용
$l = 10$: $((10-1) \text{ mod } 9) + 1 = 3 \implies \Phi&#39;</em>{1}$ 사용 <strong>(다시 처음으로)</strong></p>
<p>⇒ <strong>즉, loop 도는 주기에 관한 얘기!</strong></p>
<h4 id="초기화-전략">초기화 전략</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a4a92844-d432-41c6-9990-f9387fc5e3e4/image.png" alt=""></p>
<ul>
<li><p>Stepwise , Average , Lower 초기화 방식 중 <strong>Recursive Transformers</strong> 에는 레이어를 특정 간격으로 추출하는 <strong>Stepwise 방식이 가장 적합</strong>했습니다.</p>
</li>
<li><p>반면 <strong>Relaxed Recursive Transformers</strong> 의 경우에는 가중치 행렬들을 평균 내어 초기화하는 <strong>Average 방식이 가장 높은 성능 회복력</strong>을 보였습니다.</p>
</li>
</ul>
<h3 id="23-relaxed-via-lora">2.3. relaxed via LoRA</h3>
<p>$$h^{l}<em>{t} = f (h^{l-1}</em>{t} ; \Phi&#39;<em>{ ( (l-1) \text{ mod } L/B ) + 1}, \Delta \Phi&#39;</em>{l}), \quad l \in [1, L]$$</p>
<p>$\Delta \Phi&#39;_{l}$: LoRA module 파라미터</p>
<hr>
<p>non-RT의 2개 레이어를 RT에서 1개로 공유해서 쓸 때,
RRT는 해당 1개의 shared layer에서 <strong>2개의 LoRA 모듈</strong>이 필요.
그 2개 모듈은 <strong>각각</strong>의 loop에서 쓰임.</p>
<p>즉,
첫 번째 loop에서, <strong>1번</strong> LoRA 모듈,
두 번째 loop에서, <strong>2번</strong> LoRA 모듈.</p>
<p>첫 번째 루프 (Loop 1): 공유 가중치($W&#39;$) 에 첫 번째 LoRA 모듈을 더해 연산합니다.
$h=W&#39;x + \Delta W&#39;_1x = W&#39;x + B_1A_1x$
($\Delta W&#39;_1 = W_1-W&#39;$)</p>
<p>두 번째 루프 (Loop 2): 동일한 공유 가중치($W&#39;$) 에 두 번째 LoRA 모듈을 더해 연산합니다.
$h=W&#39;x + \Delta W&#39;_2x = W&#39;x + B_2A_2x$
($\Delta W&#39;_2 = W_2-W&#39;$)</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/dff04247-bb22-44d4-a4ac-7855e9b51e5c/image.png" alt=""></p>
<h4 id="lora-rank">LoRA rank</h4>
<p><strong>r ↑</strong> ⇒ <strong>non-RT</strong> 스러움
<strong>r ↓</strong> ⇒ <strong>RT</strong> 스러움</p>
<h3 id="24-continuous-depth-wise-batching으로-infernece-speedup">2.4. Continuous Depth-wise Batching으로 infernece speedup</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3d496389-8f42-49c8-aed9-878e5b35c551/image.png" alt=""></p>
<p>Depth-wise batching은 RT의 특정으로 인해, 더 세밀히 batch control이 가능.</p>
<h2 id="3-experiments">3. Experiments</h2>
<h3 id="31-experimental-setup">3.1. Experimental Setup</h3>
<h4 id="model">model</h4>
<ul>
<li>Gemma 2B</li>
<li>TinyLlama 1.1B</li>
<li>Pythia 1B</li>
</ul>
<p>를2배 압축.</p>
<p>後 SlimPajama로 uptraining.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8180acad-a4c3-4840-9d10-df77acdf9b3c/image.png" alt=""></p>
<h3 id="32-non-recursive-model-baselines">3.2. Non-Recursive Model Baselines</h3>
<h4 id="full-size-model">Full-size model</h4>
<p>Pretrain dataset과 Uptraining dataset이 다르거나,
Pretrain dataset 품질 &gt; Uptraining dataset 품질</p>
<p>⇒ <strong>성능 저하</strong></p>
<p>⇒ Gemma, Pythia는 dataset 품질이 SlimPajama(Uptraining dataset) 품질보다 좋음</p>
<p>⇒ 
non-RT를 SlimPajama로 같은 토큰 만큼 uptraining
vs.
RRT를 SlimPajama로 같은 토큰 만큼 uptraining
으로 비교함.</p>
<h3 id="33-결과">3.3. 결과</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bd1359b0-b485-4485-8638-92996826cb8a/image.png" alt=""></p>
<h3 id="34-rt의-초기화-방법">3.4. RT의 초기화 방법</h3>
<p>Stepwise가 짱임.</p>
<h3 id="35-rrt의-초기화-방법">3.5. RRT의 초기화 방법</h3>
<ul>
<li>Stepwise: Residual ($W_{orig} - W&#39;_{shared}$)이 너무 큼
⇒ LoRA로 매꾸기 힘듦</li>
<li>Average: Residual이 상대적으로 작음
⇒ LoRA로 매꾸기 good</li>
</ul>
<p>Average가 짱임.</p>
<h3 id="36-uptraining--kd">3.6. Uptraining &amp; KD</h3>
<p>생략</p>
<h3 id="37-ee-가능성">3.7 EE 가능성</h3>
<p>가능</p>
<h3 id="38-continuous-depth-wise-batching">3.8. Continuous Depth-wise Batching</h3>
<p>굿.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Early-Exit Deep Neural Network - A Comprehensive Survey]]></title>
            <link>https://velog.io/@sangjun_moon/Early-Exit-Deep-Neural-Network-A-Comprehensive-Survey</link>
            <guid>https://velog.io/@sangjun_moon/Early-Exit-Deep-Neural-Network-A-Comprehensive-Survey</guid>
            <pubDate>Tue, 23 Dec 2025 14:01:01 GMT</pubDate>
            <description><![CDATA[<h1 id="early-exit-deep-neural-network---a-comprehensive-survey">Early-Exit Deep Neural Network - A Comprehensive Survey</h1>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Early-Exit+Deep+Neural+Network+-+A+Comprehensive+Survey&amp;btnG=">EE</a>에 대한 내용</p>
<hr>
<h2 id="abstract">Abstract</h2>
<h3 id="ee-장점">EE 장점</h3>
<ol>
<li>추론 가속화</li>
<li>기울기 소실 문제 완화</li>
<li>overfitting, overthinking 감소</li>
</ol>
<h2 id="1-introduction">1 Introduction</h2>
<p>생략</p>
<h2 id="2-motivation-and-venefits-of-early-exit-dnns">2 Motivation and Venefits of Early-exit DNNs</h2>
<ol>
<li>추론 가속화</li>
<li>vanishing gradient problem 해결</li>
<li>overfitting problem 해결</li>
<li>병렬 구현의 어려움 해결</li>
</ol>
<h3 id="21-speed-up-the-dnn-inference">2.1 Speed Up the DNN Inference</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3122aa49-9753-422c-a691-694087dab25c/image.png" alt=""></p>
<p><strong>쉬운</strong> 입력 ⇒ <strong>초기 layer</strong>에서 추출된 특징을 사용 ⇒ <strong>초기 EE</strong></p>
<p><strong>어려운</strong> 입력 ⇒ <strong>출력 layer</strong>까지 처리 필요</p>
<h3 id="22-an-alternate-solution-to-the-overfitting-challenge-of-dnns">2.2 An Alternate Solution to the Overfitting Challenge of DNNs</h3>
<ul>
<li>EE의 요소 및 방법: 
모든 측면 분기(Side Branches)의 가중 손실(Weighted Losses)을 단일 최적화 문제로 결합하여 공동으로 학습시킵니다.</li>
<li>해결 과제 및 효과: 
각 분기가 상호 정규화 요소(Regularizer)로 작용함으로써 과적합(Overfitting) 문제를 해결하고 모델의 <strong>일반화 성능(Genralization) 및 강건성(Robustness)</strong>을 향상시킵니다.</li>
</ul>
<h3 id="23-rectify-overthinking-issue-of-dnns">2.3 Rectify Overthinking Issue of DNNs</h3>
<p>단순 입력 ⇒ EE ⇒ overthinking <strong>X</strong></p>
<h3 id="24-mitigate-the-vanishing-gradients-problem-of-dnns">2.4 Mitigate the Vanishing Gradients Problem of DNNs</h3>
<p><strong>EEDNN</strong>은 네트워크의 심층부까지 가기 전, <strong>중간 종료 지점을 통해 역전파 경로를 단축</strong>시키고, 하위 레이어에 <strong>즉각적인 판별 목표</strong>를 부여함으로써 기울기가 사라지는 것을 방지하고 학습의 효율성을 극대화합니다.</p>
<h3 id="25-provide-a-multi-tiered-platform-for-training-and-deploying-dnns">2.5 Provide a Multi-tiered Platform for Training and Deploying DNNs</h3>
<p>생략</p>
<h2 id="3-related-works">3. Related Works</h2>
<p>생략</p>
<h2 id="4-early-exit-dnn-architecture">4 Early-Exit DNN-Architecture</h2>
<h3 id="41-conventional-dnn-architecture">4.1 Conventional DNN Architecture</h3>
<p>생략</p>
<h3 id="42-early-exit-dnn-architecture">4.2 Early-exit DNN Architecture</h3>
<p>EE branch: <strong>Conv layer</strong>, <strong>FC layer</strong> 또는 <strong>이들의 조합</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/5746c899-07ec-4f81-b3a7-eb543f4af8ea/image.png" alt=""></p>
<h3 id="43-design-constraints-of-early-exit-dnns">4.3 Design Constraints of Early-exit DNNs</h3>
<h4 id="431-분기-구조">4.3.1 분기 구조</h4>
<ul>
<li>분기마다 동일한 구조 (대다수)<ul>
<li>단일 FC layer (대다수)</li>
<li>Pooling layer</li>
<li>Max-pooling layer</li>
<li>Mixed max-average pooling layer</li>
<li>단일 conv layer + fc layer</li>
<li>여러 conv layer</li>
<li>조합</li>
</ul>
</li>
<li>분기마다 다른 구조<ul>
<li>보통 backbone의 얕은 conv layer는 <strong>고차원 특징(이미지 전체에 대한 특징)</strong>을 출력하는데, 그래서 더 <strong>복잡한 분류기</strong> 필요</li>
</ul>
</li>
</ul>
<h4 id="432-분기-위치-및-개수">4.3.2 분기 위치 및 개수</h4>
<ul>
<li>균등 분기 배치</li>
<li>불균등 분기 배치</li>
</ul>
<h4 id="433-조기종료-정책">4.3.3 조기종료 정책</h4>
<ul>
<li>규칙 기반 정적 종료 정책</li>
<li>학습 기반 동적 종료 정책</li>
</ul>
<h2 id="5-학습">5. 학습</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bcd5bb16-0719-48cf-99cb-7475d5e23c3f/image.png" alt=""></p>
<ul>
<li>Joint : Backbone + side branch 포함 전체를 하나로 통합해 학습</li>
<li>Branch-wise: 각 side branch를 backbone 레이어들과 함께 반복적으로 학습</li>
<li>Separate: side branch를 독립적인 분류기로 취급하여 각각 별도로 학습</li>
<li>2-stage: 먼저 backbone 학습 후 freeze하고, side branch 별도 학습</li>
<li>KD: side branch가 student, backbone의 최종 출력이 teacher</li>
</ul>
<h3 id="51-joint">5.1 Joint</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9aaa830e-6ffe-44cc-9a9e-41b72c6d8228/image.png" alt=""></p>
<h3 id="52-branch-wise">5.2 Branch-wise</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7180ca1a-94d5-4169-8be9-9aca3320b1a0/image.png" alt=""></p>
<p><strong>1단계 (초기 학습)</strong>: 
$L_1, L_2$ (백본 레이어)와 $E_1$ (첫 번째 측면 분기)을 함께 학습시킵니다. 
학습이 완료되면 $L_1, L_2$의 가중치($\theta_1, \theta_2$)를 <strong>고정(Freeze)</strong>합니다. 이제 이 값들은 더 이상 변하지 않습니다.</p>
<p><strong>2단계 (확장 학습)</strong>:
이제 $L_3, L_4$와 $E_2$ (두 번째 측면 분기)를 학습시킬 차례입니다.이때 $L_1, L_2$는 업데이트하지 않고, 여기서 나온 출력값(Feature map)을 $L_3$의 입력으로 그대로 사용합니다.
즉, 오차 역전파($Backpropagation$)가 $E_2 \rightarrow L_4 \rightarrow L_3$까지만 일어나고, $L_2$와 $L_1$으로는 전달되지 않습니다.</p>
<h3 id="53-separate">5.3 Separate</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3cf57af5-7420-4aed-9a76-efd3d6bb11ff/image.png" alt=""></p>
<p>Branch-wise와 달리, <strong>freeze 안함</strong></p>
<h3 id="54-2-stage">5.4 2-stage</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3338b5e2-d884-4e5e-ad9f-023e4e8d0e3a/image.png" alt=""></p>
<p>그림 7에 나타난 바와 같이, 백본 레이어($L_1$에서 $L_n$ 및 $F_E$)가 먼저 학습됩니다. 
그 후 해당 파라미터들은 각 분기를 독립적으로 학습시키는 데 사용됩니다. 
예를 들어, 측면 종료 분기 $E_1$은 고정된 $L_1$과 $L_2$의 파라미터를 사용하여 학습됩니다. 
마찬가지로, 측면 종료 분기 $E_2$는 고정된 $L_1, L_2, L_3, L_4$의 파라미터를 사용하여 학습되며, 이 과정이 모든 분기에 대해 반복됩니다.</p>
<p><strong>backbone이 이미 학습되어 있을 때</strong>, ㅈㄴ 유용.</p>
<h3 id="55-kd">5.5 KD</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8a043345-0111-4002-907b-a0c44aedecb4/image.png" alt=""></p>
<p><strong>최종 출력 레이어가 높은 acc</strong>를 달성했어야, 의미가 있음.</p>
<h3 id="56-hybrid">5.6 Hybrid</h3>
<p>조합해서 사용.</p>
<h2 id="6-inference">6 Inference</h2>
<ul>
<li>규칙 기반 정적 종료 정책</li>
<li>학습 가능 동적 종료 정책</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bd59171f-4ee0-406f-a87c-4239e80d775a/image.png" alt=""></p>
<h3 id="61-규칙-기반-정적-종료-정책">6.1 규칙 기반 정적 종료 정책</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b28a7b20-52d9-4a32-930a-f4ab3520a74f/image.png" alt=""></p>
<ul>
<li>Entropy</li>
<li>Maximum softmax probability</li>
<li>사용자 정의 점수 함수</li>
</ul>
<p>를 통해 confidence score 측정</p>
<p><strong>Threshold vector</strong> $T= [T_1, T_2, ..., T_i, ..., T_{n-1}]$에서 $T_i$는 $i$번째 side branch의 threshold를 나타냄.</p>
<p>즉, 특정 시점의 <strong>threshold 값 보다 confidence scored와 비교해서</strong>, EE! </p>
<h4 id="entropy">Entropy</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/6b6b3851-61c5-4db9-913c-990b7dc81561/image.png" alt="">
인데, 값의 분포가 <strong>skewd</strong> 되어 있을수록, <strong>낮은 엔트로피</strong>(불확실성)를 갖게됨. 
⇒ <strong>$H(p) &lt; Threshold$ 이면 EE!</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ee2b3a1c-bdb4-4b4d-81a6-fbe2cd29abdd/image.png" alt=""></p>
<h4 id="softmax-기반">Softmax 기반</h4>
<p>각 분기의 fc layer 출력 벡터에 softmax 적용한 것
⇒ <strong>$Softmax(v) &lt; Threshold$ 이면 EE!</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2c46adfb-1fd1-4a4b-835b-d70a15db34b5/image.png" alt=""></p>
<h4 id="사용자-정의-점수-함수">사용자 정의 점수 함수</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/24bd1e35-4173-4e9e-ab22-255ec5bfe004/image.png" alt=""></p>
<h3 id="62-학습-가능-동적-종료-정책">6.2 학습 가능 동적 종료 정책</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/91441fc1-8bd6-468a-b694-543b5383867d/image.png" alt=""></p>
<h3 id="63-비교">6.3 비교</h3>
<p><img src="blob:https://velog.io/871fa1ec-7a4d-4cfb-899e-b24d16e07c41" alt="업로드중.."></p>
<ul>
<li><p><strong>엔트로피 비교 및 소프트맥스 확률 비교</strong>와 같은 <strong>정적 방법(Static methods)</strong>은 미리 정의된 임계값에 의존하기 때문에 학습 복잡도와 추론 지연 시간이 낮습니다. 이는 구현이 간단하고 실행 속도가 빠르다는 장점이 있습니다. 그러나 적응력이 부족하기 때문에 다양한 입력 특성에 대한 강건성은 낮게 나타납니다.</p>
</li>
<li><p>반대로 <strong>종료 선택 컨트롤러 및 강화 학습 기술</strong>과 같은 <strong>동적 방법(Dynamic methods)</strong>은 정교한 학습 구성 요소로 인해 학습 복잡도가 높습니다. 하지만 최적의 종료 지점을 학습하고 변화하는 입력과 조건에 적응함으로써 강건성 면에서 탁월합니다. 이러한 동적 방법은 계산 집약적이지만, 더 큰 유연성과 맥락에 기반한 의사 결정을 제공하여 다양한 시나리오에서 최적의 성능을 보장합니다.</p>
</li>
<li><p><strong>맥락 기반 추론 이력 및 목적 함수 기반 추론 방법</strong>은 이력 데이터와 학습된 목적을 활용함으로써 중간 정도의 추론 지연 시간과 높은 강건성 사이의 균형을 맞춥니다.</p>
</li>
</ul>
<p>대부분의 방법은 높은 확장성을 유지하여 다양한 규모에 적응 및 배포가 가능하지만, 동적 접근 방식은 계산 자원 수요가 더 높을 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HRM, TRM experiments]]></title>
            <link>https://velog.io/@sangjun_moon/HRM-TRM-experiments</link>
            <guid>https://velog.io/@sangjun_moon/HRM-TRM-experiments</guid>
            <pubDate>Wed, 19 Nov 2025 01:16:45 GMT</pubDate>
            <description><![CDATA[<h2 id="실험시-주의사항들">실험시 주의사항들</h2>
<ol>
<li><p>H module과 L module이 같나?</p>
<ul>
<li><p>같으면 <strong>TRM</strong></p>
<ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch=trm</strong>
// <strong>.sh</strong> 에서, arch=trm으로 하더라도, <strong>arch.H_layers=T</strong>로 하면, HRM과 같이 됨.</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 0</strong></li>
</ul>
</li>
<li><p>다르면 <strong>HRM</strong></p>
<ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch=hrm</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 4</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>1-step gradient 유무?</p>
<ul>
<li><p>없으면, <strong>TRM</strong></p>
<ul>
<li>세팅: <img src="https://velog.velcdn.com/images/sangjun_moon/post/7625044c-a319-4142-a75c-f3eee05aad50/image.png" alt=""></li>
</ul>
</li>
<li><p>있으면, <strong>HRM</strong></p>
<ul>
<li>세팅:<img src="https://velog.velcdn.com/images/sangjun_moon/post/7f1a6c22-024b-4cd2-bb17-2206394a70e4/image.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li><p>ACT에서 continue_loss가 있나?</p>
<ul>
<li>없으면, <strong>TRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch=trm</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>no_ACT_continue: True</strong></li>
</ul>
</li>
<li>있으면, <strong>HRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch=hrm</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>no_ACT_continue 항목 X</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>Recurrent 횟수</p>
<ul>
<li>T = 3, n = 6 <strong>TRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, *<em>arch.H_cycles=3 arch.L_cycles=6 *</em></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 3, H_layers: 6</strong></li>
</ul>
</li>
<li>T = 2, n = 2 <strong>HRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, *<em>arch.H_cycles=2 arch.L_cycles=2 *</em>
// TRM 논문에서는 T=3, n=3이 optimal이라고 함.</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 2, H_layers: 2</strong></li>
</ul>
</li>
</ul>
</li>
</ol>
<ol start="5">
<li><p>Supervision 횟수</p>
<ul>
<li>$N_{sup} = 16$ 인가?<ul>
<li>세팅: <strong>.sh</strong> 에서, 별다른 세팅 X</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>halt_max_steps: 16</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>Transformer block 수</p>
<ul>
<li>2, <strong>TRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch.L_layers=2</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 0, L_layers: 2</strong></li>
</ul>
</li>
<li>4, <strong>HRM</strong><ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>arch.H_layers=4, arch.L_layers=4</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>H_layers: 4, L_layers: 4</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>Attention-free?</p>
<ul>
<li>O<ul>
<li>세팅: <strong>.sh</strong> 에서, 별다른 세팅 X</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>mlp_t: True</strong></li>
</ul>
</li>
<li>X<ul>
<li>세팅: <strong>.sh</strong> 에서, 별다른 세팅 X</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>mlp_t: False</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>EMA?</p>
<ul>
<li><p>O</p>
<ul>
<li>세팅: <strong>.sh</strong> 에서, <strong>ema=True</strong></li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>ema: true</strong></li>
</ul>
</li>
<li><p>X</p>
<ul>
<li>세팅: <strong>.sh</strong> 에서, 별다른 세팅 X</li>
<li>결과: <strong>all_config.yaml</strong> 에서, <strong>ema: false</strong></li>
</ul>
</li>
</ul>
</li>
<li><p>halt_exploration_prob?</p>
<p> ⇒ ACT에서 최소 세그먼트 수($M_{min}$)(min_halt_steps)는 확률적으로 결정하는데, 그 확률이 halt_exploration_prob임</p>
<p> // sudoku4x4에서, halt_exploration_prob이 0인데, 
 // 그 뜻은 min_halt_steps가 0이라는 뜻이고,
 // halt는 is_last_step 이거나, q_halt_logits &gt; 0 일 때만 한다는 뜻.
 <img src="https://velog.velcdn.com/images/sangjun_moon/post/8405660a-90f7-4b6b-b45c-e2460fb263f1/image.png" alt=""></p>
</li>
</ol>
<h2 id="model-size">Model size</h2>
<p>Model size에 관여하는 부분은 3가지가 있다.</p>
<ol>
<li>H_layers</li>
<li>L_layers</li>
<li>Transformer Block(layer)의 크기</li>
</ol>
<p>Transformer Block 하나의 크기는 
<img src="https://velog.velcdn.com/images/sangjun_moon/post/bf21bb3c-d6c7-405c-aa3b-665ec65ee813/image.png" alt="">로 총 3,407,872개</p>
<ul>
<li><p>HRM은 $H_layers = 4, L_layers = 4$
  ⇒ 대략, $3,407,872 ⨉ 8 = 27,262,976 ≈ 27M$</p>
</li>
<li><p>TRM은 $H_layers = 0, L_layers = 2$
  ⇒ 대략, $3,407,872 ⨉ 2 = 6,815,744 ≈ 7M$</p>
</li>
</ul>
<h2 id="emulated-depth">Emulated Depth</h2>
<p>Default로 </p>
<ul>
<li><p>HRM은 $T=2, N=2, layer=4$
  ⇒ $Emulated Depth=24$</p>
</li>
<li><p>TRM 논문에서 HRM $T=3, N=3, layer=4$이 optimal이라고함
  ⇒ $Emulated Depth=48$</p>
</li>
<li><p>TRM은 $T=3, N=6, layer=2$
  ⇒ $Emulated Depth=42$</p>
</li>
</ul>
<h2 id="실험">실험</h2>
<h3 id="1-h-module-l-module의-size를-다르게-한다면-어떤-것의-size가-큰-것이-좋을까">1. H module, L module의 size를 다르게 한다면, 어떤 것의 size가 큰 것이 좋을까?</h3>
<p>⇒ H module, L module의 size를 다르게 한다는 뜻은, model 구조가 HRM을 따라간다는 뜻</p>
<p>즉, $H_layers ≠ 0$.</p>
<h4 id="hrm_module_with_trm_training-실험">HRM_module_with_TRM_training 실험</h4>
<p>$T=3, N=3, layer=4$로 $Emulated Depth = 48$ 실험임.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2593ab6a-1e56-42f7-b405-c077069e0867/image.png" alt=""></p>
<p><strong>HRM_module_with_TRM_training.sh</strong>
<img src="https://velog.velcdn.com/images/sangjun_moon/post/93b520cc-5bfc-45cd-bb9c-0d08cbc333b4/image.png" alt=""></p>
<p>arch로 사용하는 hrm_module_with_trm_training은 다음과 같이 작성함 (config/arch/<strong>hrm_module_with_trm_training.yaml</strong>)
    <img src="https://velog.velcdn.com/images/sangjun_moon/post/8b0c31f6-e687-4c57-b826-db490da7cbfc/image.png" alt="">
    위 name 에서 사용하는 HrmModuleWithTrmTrainingModel_ACTV1은 다음과 같이 작성함(models/recursive_reasoning/<strong>hrm_module_with_trm_training.py</strong>)
    <img src="https://velog.velcdn.com/images/sangjun_moon/post/68198084-82c7-4c29-8a73-80324836769f/image.png" alt=""><img src="https://velog.velcdn.com/images/sangjun_moon/post/f9326187-bcba-4939-97da-805fcca49551/image.png" alt=""></p>
<p>그 결과 다음과 같은 <strong>all_config.yaml</strong>이 생성 됨
    <img src="https://velog.velcdn.com/images/sangjun_moon/post/1fab491a-f17a-4e87-91db-76d74c95e12b/image.png" alt=""></p>
<p>결과 모델:
    <img src="https://velog.velcdn.com/images/sangjun_moon/post/1dd3e3cd-adb3-4037-939a-950358e23b57/image.png" alt=""></p>
<h4 id="hrm_heavyh_module_with_trm_training-실험">HRM_heavyH_module_with_TRM_training 실험</h4>
<h4 id="hrm_heavyl_module_with_trm_training-실험">HRM_heavyL_module_with_TRM_training 실험</h4>
<h3 id="2-h-module-l-module-중-어느-module이-quantization에-더-강건할까">2. H module, L module 중 어느 module이 quantization에 더 강건할까?</h3>
<h4 id="l-module-quantization">L module quantization</h4>
<p>L_module이 forward pass에서 대다수를 차지한다.</p>
<p>$T=3, N=3, layer=4$로 $Emulated Depth = 48$ 로 예시를 들면,</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2593ab6a-1e56-42f7-b405-c077069e0867/image.png" alt=""></p>
<p>에서 H module 횟수 : L module 횟수 = 1 : 3 임</p>
<p>⇒ L module을 quantization 할 때, H module을 quantization 할 때보다 3배 더 빠를 것임</p>
<h3 id="3-ee">3. EE</h3>
<p><a href="https://velog.io/@sangjun_moon/EEDNN">EE</a>에 대해 참고할 것</p>
<h4 id="고려사항">고려사항</h4>
<p><strong>우선 제일 먼저, H_module 끝 마다 출력되는 hidden state를 뽑아서, 
정답과 얼마나 유사한지 가시화 + 유사도 검사</strong>
즉, overthinking 여부 검사</p>
<p>⇒ 정답과 거의 유사하거나, 유사도가 높으면, EE 가능성 ↑</p>
<p>+</p>
<p><strong>ACT에서 조기 훈련 종료 통계 조사</strong> </p>
<ol>
<li>전체 $N_{sup}=16$ 동안의 inference 시간 대비 중간 분류기(?)로 인한 <strong>overhead 비율 조사</strong></li>
<li>임계값 설정</li>
<li>훈련법 설정</li>
<li>신뢰도 정의</li>
<li>일반화 가능성
 일반적으로 임계값은 dataset-dependent함
 <strong>하지만 내 실험에서는 크게 신경 안써도 ㄱㅊ을 것 같은 이유가 애초에 sudoku가 너무 domain-specific 함</strong>
 만약 다른 일반적인 task에 대해서 모델을 확장한다면,<ol>
<li>임계값 기반 적응: 미지의 도메인에 따라 임계값을 조정함</li>
<li>특징 기반 적응: 모든 계층에서 애초에 도메인 불변 특징을 학습하는 것</li>
</ol>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Less is More: Recursive Reasoning with Tiny Networks]]></title>
            <link>https://velog.io/@sangjun_moon/Less-is-More-Recursive-Reasoning-with-Tiny-Networks</link>
            <guid>https://velog.io/@sangjun_moon/Less-is-More-Recursive-Reasoning-with-Tiny-Networks</guid>
            <pubDate>Thu, 13 Nov 2025 07:42:53 GMT</pubDate>
            <description><![CDATA[<h1 id="less-is-more-recursive-reasoning-with-tiny-networks">Less is More: Recursive Reasoning with Tiny Networks</h1>
<p><a href="https://arxiv.org/abs/2510.04871">TRM</a>에 대한 내용</p>
<hr>
<h2 id="abstract">Abstract</h2>
<p>TRM은 HRM보다 훨씬 더 단순한 <strong>재귀적 추론 접근</strong> 방식으로, 단 <strong>2개의 레이어</strong>만 가진 하나의 초소형 네트워크를 사용하면서도 HRM보다 훨씬 더 높은 일반화 성능을 달성.</p>
<p>HRM: 27M
TRM: 7M</p>
<h2 id="1-introduction">1. Introduction</h2>
<h3 id="hrm">HRM</h3>
<p>1) recursive hierarchical reasoning
2) deep supervision</p>
<h4 id="recursive-hierarchical-reasoning">Recursive hierarchical reasoning</h4>
<p>$f_L$(고빈도)와 $f_H$(저빈도) 두 네트워크가 서로의 잠재 특징($z_L, z_H$)을 입력받아 재귀적으로 작동하며, 이는 뇌의 계층적 처리를 모방</p>
<h4 id="deep-supervision">Deep supervision</h4>
<p>잠재 특징의 계산 그래프를 분리(detach)하여 다음 단계의 입력으로 재사용하고 단계마다 지도(학습)함으로써, 메모리 폭발 없이 매우 깊은 신경망을 흉내 냄</p>
<p>ARC 벤치마크 분석 결과, HRM 모델의 성능 향상은 모델 내부의 재귀적 순환(H/L 모듈) 때문 X</p>
<p>⇒
모델 전체를 여러 번 반복하며 단계마다 지도(학습)하는 &#39;심층 지도(Deep Supervision)&#39; 방식이 거의 모든 성능을 이끌어낸 핵심 요인</p>
<h2 id="2-background">2. Background</h2>
<h3 id="21-structure-and-goal">2.1. Structure and goal</h3>
<ul>
<li><p>HRM은 
입력 임베딩($f_I$), 하위($f_L$) 및 상위($f_H$) 순환 네트워크, 출력 헤드($f_O$)라는 
4개의 학습 가능한 구성요소를 가짐</p>
</li>
<li><p>하위($f_L$) 및 상위($f_H$) 순환 네트워크는 
RMSNorm, 편향 없음, 회전식 임베딩(RoPE), SwiGLU 활성화 함수를 갖춘 
4계층 트랜스포머 아키텍처를 기반으로 함</p>
</li>
</ul>
<h3 id="22-recursion-at-two-different-frequencies">2.2. Recursion at two different frequencies</h3>
<p>$x \leftarrow f_I(\tilde{x})$
$z_L \leftarrow f_L(z_L + z_H + x)$ # 기울기 없음
$z_L \leftarrow f_L(z_L + z_H + x)$ # 기울기 없음
$z_H \leftarrow f_H(z_L + z_H)$ # 기울기 없음
$z_L \leftarrow f_L(z_L + z_H + x)$ # 기울기 없음
$z_L \leftarrow z_L.\text{detach()}$
$z_H \leftarrow z_H.\text{detach()}$
$z_L \leftarrow f_L(z_L + z_H + x)$ <strong># 기울기 있음</strong>
$z_H \leftarrow f_H(z_L + z_H)$ <strong># 기울기 있음</strong>
$\hat{y} \leftarrow \text{argmax}(f_O(z_H))$</p>
<h3 id="23-fixed-point-recursion-with-1-step-gradient-approximation">2.3. Fixed-point recursion with 1-step gradient approximation</h3>
<p>마지막 $f_L$ 및 $f_H$ 단계만 역전파하여 기울기를 근사하는 데 사용. </p>
<p>6개 중 마지막 두 단계의 기울기만 추적하는 것을 정당화하는 데 사용되며, 이는 메모리 요구량을 크게 줄여줌.</p>
<h3 id="24-deep-supervision">2.4. Deep supervision</h3>
<p>유효 깊이(effective depth)를 향상시키기 위해 사용.</p>
<p>⇒ 이전의 잠재 특징($z_H$ 및 $z_L$)을 다음 순전파를 위한 초기화로 재사용</p>
<h3 id="26-deep-supervision-and-1-step-gradient-approximations-replaces-bptt">2.6. Deep supervision and 1-step gradient approximations replaces BPTT</h3>
<ul>
<li><p>심층 지도 + 1단계 기울기 근사 X: 
384계층 전체에 대해 역전파(BPTT)를 한 번에 수행해야 하므로, 메모리 폭발이 일어나고 계산 비용이 엄청나게 비쌈</p>
</li>
<li><p>심층 지도 + 1단계 기울기 근사 O: 
전체 깊이 대신 L_net과 H_net의 마지막 계산 블록에 대해서만 역전파를 N_sup번 반복하므로, 메모리 문제를 해결하고 계산 비용을 획기적으로 줄일 수 있음.</p>
</li>
</ul>
<p>cf) $384 = (#<em>{TransformerBlocks})(n + 1)TN</em>{sup} = 4 \times (2 + 1) \times 2 \times 16 = 384$</p>
<h3 id="27-summary-of-hrm">2.7. Summary of HRM</h3>
<p>생략</p>
<h2 id="3-target-for-improvements-in-hierarchical-reasoning-models">3. Target for improvements in Hierarchical Reasoning Models</h2>
<h3 id="31-implicit-function-theorem-ift-with-1-step-gradient-approximation">3.1. Implicit Function Theorem (IFT) with 1-step gradient approximation</h3>
<p>HRM은 6번의 재귀(recursions) 중 마지막 2번을 통해서만 역전파를 수행함. </p>
<p>저자들은 &#39;암시적 함수 정리(IFT)&#39;와 &#39;1단계 근사(one-step approximation)&#39;를 활용하여 이를 정당화함. </p>
<p>이 정리는 순환 함수가 고정점(fixed point)에 수렴할 때, 그 평형점(equilibrium point)에서 단일 단계로 역전파가 적용될 수 있음을 의미함.</p>
<p>But,
<strong>&quot;고정점(fixed-point)에 도달했다&quot;</strong>라고 주장하며 수학적 &quot;꼼수&quot;(1단계 경사도 근사)를 사용하는데, 
실제로는 고정점에 도달할 때까지 반복 계산을 하는 것이 아니라,
<strong>&quot;단순히 몇 번 순전파&quot;</strong>를 실행하고 멈춤</p>
<h3 id="32-twice-the-forward-passes-with-adaptive-computational-time-act">3.2. Twice the forward passes with Adaptive computational time (ACT)</h3>
<p>Q-러닝 목표는 정지 손실(halting loss)과 계속 손실(continue loss)에 의존한다.</p>
<p>계속 손실은 HRM을 통한 추가적인 순전파(extra forward pass)를 필요로 함.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3d1d978e-bb93-4a93-8450-6b2416441fcc/image.png" alt=""></p>
<p>⇒
이는 ACT가 샘플당 시간을 더 효율적으로 최적화하는 반면, 
최적화 단계(optimization step)당 2번의 순전파가 필요함을 의미</p>
<h3 id="33-hierarchical-interpretation-based-on-complex-biological-arguments">3.3. Hierarchical interpretation based on complex biological arguments</h3>
<p>TBW</p>
<h2 id="4-tiny-recursion-models">4. Tiny Recursion Models</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/14d81287-3af0-47a9-bddd-e8e5786faf7a/image.png" alt=""></p>
<h3 id="41-no-fixed-point-theorem-required">4.1. No fixed-point theorem required</h3>
<p>HRM: 1단계 기울기 근사를 활용하기 위해, $z_L$, $z_H$ 가 고정점에 수렴할 것이라고 가정.</p>
<p>But,
수렴 X</p>
<p>Let, (full recursion process) $=$
$z_L \leftarrow f_L(z_L + z_H + x)$
$...$
$z_L \leftarrow f_L(z_L + z_H + x)$
$z_H \leftarrow f_H(z_L + z_H)$
일 때,</p>
<p><strong>Full recursion process $T$번 중 마지막 $T$번째의 과정만 기울기를 계산해서 backward!!!</strong></p>
<h4 id="hrm-vs-trm">HRM vs. TRM</h4>
<ul>
<li><p>HRM (1단계 근사 방식):
$N_sup$ 루프의 각 단계에서, $T$번의 재귀 중 마지막 1번 재귀의 <strong>&quot;마지막 2개 함수($f_L, f_H$)&quot;</strong>에 대해서만 경사도를 계산.</p>
</li>
<li><p>TRM (전체 역전파 방식):
$N_sup$ 루프의 각 단계에서, $T$번의 재귀 중 마지막 1번 재귀의 <strong>&quot;프로세스 전체($n+1$번의 net 호출)&quot;</strong>에 대해 경사도를 계산.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a413efea-c5c9-4360-ab3f-e7c825cb5895/image.png" alt=""></p>
<h3 id="42-simpler-reinterpretation-of-zh-and-zl">4.2. Simpler reinterpretation of zH and zL</h3>
<ul>
<li><p>HRM:
2개의 latent features 사용(H module, L module)</p>
</li>
<li><p>TRM:
1개의 latent features 사용</p>
</li>
</ul>
<p>그럼 H module의 생성 $z_H$는?
⇒ $y = z_H ← f_H(x, z_L, z_H= y)$</p>
<p>즉, 계층 구조는 필요 X
<strong>단순히 입력 $x$, 제안된 해답 $y$ (이전의 $z_H$), 그리고 잠재 추론 특징 $z$ (이전의 $z_L$)가 있을 뿐</strong></p>
<p>입력 질문 $x$, 현재 해답 $y$, 현재 잠재 추론 $z$가 주어지면, 모델은 재귀적으로 잠재 $z$를 개선
⇒ $z_i = f(x, y, z_{i-1})$</p>
<p>後
현재의 잠재 $z$와 이전 해답 $y$가 주어지면, 모델은 새로운 해답 $y$를 제안
⇒ $y = f(y, z_i)$</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/48b67410-448c-4398-b73c-e2e46b85f5b0/image.png" alt=""></p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a566d2b5-ba66-4139-a5c7-047a57c4fe62/image.png" alt="">
코드를 보면, n loop(L_cycles)에서 net(z, <strong>y+z</strong>) 임을 알 수 있음.</p>
<p>다양한 feature에 대해 실험 해봤는데, 2개 feature가 최적임을 찾음
<strong>※ TRM은 1개의 latent feature를 사용한다의 &#39;feature&#39;와 다른 feature임</strong></p>
<p>1개의 laytent feature라는 것은 H module과 L module이 <strong>같은 가중치</strong>를 쓴다는 거고,
2개의 feature가 최적이라는 것은 <strong>z의 개수 1(y 1개, z 1개 ⇒ 2개 latent feature)</strong>이 최적이라는 뜻</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b72ff856-5145-4576-9d75-5cadd5b14a9e/image.png" alt=""></p>
<h3 id="43-single-network">4.3. Single network</h3>
<p>위와 동일한 내용임.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/cc942eb4-b3bc-4f0d-856a-a11417ed11b8/image.png" alt=""></p>
<h3 id="44-less-is-more">4.4. Less is more</h3>
<p>Model 확장을 위해, layer(Transformer block) 수를 늘려 capacity를 늘리려함</p>
<p>⇒ overfitting</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b22ce2a1-4446-49a9-b860-92de014fc8dc/image.png" alt=""></p>
<p>⇒ <strong>재귀 횟수(n)을 비례적으로 늘리면서 block 수를 줄였을 때</strong>, 일반화 성능 극대화</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e8af35e6-2b7e-46da-9369-32791f52beb2/image.png" alt=""></p>
<p>⇒ $#<em>{TransformerBlock} \leftarrow \frac{#</em>{TransformerBlock}}{2}$</p>
<p>⇒ $n \leftarrow n ⨉ 2$</p>
<h3 id="45-attention-free-architecture-for-tasks-with-small-fixed-context-length">4.5. attention-free architecture for tasks with small fixed context length</h3>
<p>Attention의 경우 $L≫D$ 일 때, $[D, 3D]$ 행렬만으로 전체 시퀀스를 설명할 수 있음.</p>
<p>But,
$L ≤ D$ 일 때, linear layer는 $[L, L]$ 행렬만 필요로 하므로 더 저렴함. (MLP-Mixer)</p>
<p>⇒ 작고, 고정된 context lenght에서 잘 작동</p>
<p>But,</p>
<p>긴 context suboptimal</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/87bade0b-29b9-4186-b3ca-b45ad2dc9de2/image.png" alt=""></p>
<h3 id="46-no-additional-forward-pass-needed-with-act">4.6. No additional forward pass needed with ACT</h3>
<p>HRM의 ACT는 &quot;계속 손실&quot;을 계산하기 위해 비효율적인 2차 순전파가 필요하여 훈련 속도가 느려짐</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3d1d978e-bb93-4a93-8450-6b2416441fcc/image.png" alt=""></p>
<p>⇒ 
TRM은 &quot;계속 손실&quot;을 제거하고 &quot;중단 손실&quot;만 학습함으로써, 비용이 드는 2차 순전파 과정을 없앰</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/010dc1e7-4473-4bbe-9748-aedb0db1976a/image.png" alt=""></p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/66b347f2-bb06-4719-a183-254ca8e09d1c/image.png" alt=""></p>
<h3 id="47-exponential-moving-average-ema">4.7. Exponential Moving Average (EMA)</h3>
<p>생략</p>
<h3 id="48-optimal-the-number-of-recursion">4.8. Optimal the number of recursion</h3>
<p>HRM: $T=3, n=3$이 최적
TRM: $T=3, n=6$이 최적</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c26fa5ed-aeff-4c99-bbdc-7afad1a969df/image.png" alt=""></p>
<p>// full recursion process의 gradient를 backward하기에 <strong>n이 크면 OOM</strong></p>
<h2 id="5-results">5. Results</h2>
<h3 id="setups">Setups</h3>
<h4 id="dataset">Dataset</h4>
<ul>
<li><p>Sudoku-Extreme
Train: 1K
Test: 423K</p>
</li>
<li><p>Maze-Hard
Train: 1K
Test: 1K</p>
</li>
<li><p>ARC-AGI1</p>
</li>
<li><p>ARC-AGI-2</p>
</li>
</ul>
<h4 id="augmentation">Augmentation</h4>
<p>Shuffling, dihedral transformations, color permutation, dihedral-group, translations, flips, reflection 등 많이 함</p>
<h4 id="results">Results</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/dc749662-0878-4166-aada-f7ac47ebf587/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Hierarchical Reasoning Model]]></title>
            <link>https://velog.io/@sangjun_moon/Hierarchical-Reasoning-Model</link>
            <guid>https://velog.io/@sangjun_moon/Hierarchical-Reasoning-Model</guid>
            <pubDate>Mon, 10 Nov 2025 07:29:22 GMT</pubDate>
            <description><![CDATA[<h1 id="hierarchical-reasoning-model">Hierarchical Reasoning Model</h1>
<p><a href="https://arxiv.org/abs/2506.21734">HRM</a>에 대한 내용</p>
<p><a href="https://medium.com/@gedanken.thesis/the-loop-is-back-why-hrm-is-the-most-exciting-ai-architecture-in-years-7b8c4414c0b3">HRM 관련 유용스</a></p>
<hr>
<h2 id="abstract">Abstract</h2>
<p>기존 CoT는 방대한 data 요규량, 높은 latency
⇒ 
인간의 <strong>hierarchical</strong>하고, <strong>multi-timescale</strong>한 처리 과정에서 영감을 받아, <strong>HRM</strong></p>
<p>HRM은 한 번의 forward pass로 interdependent한 recurrent module 2개를 씀.</p>
<ol>
<li>High-level module: 느리고, 추상적인 계획</li>
<li>Low-level module: 빠르고, 상세한 실행</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/6ea0f515-3502-49a1-885a-e68c73687bef/image.png" alt=""></p>
<h2 id="1-introduction">1. Introduction</h2>
<p>Reasoning 이 ㅣ필요한 작업에서, model depth를 증가시키면, 성능 ↑
But, 매우 깊더라도, 성능 최적 X
아래 Figure 2에서 볼 수 있듯, Scaling Depth를 늘려도, 109M 정도 부터 saturate됨.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e8e8c813-1e46-4264-a2de-927635488b06/image.png" alt=""></p>
<p>⇒ <strong>CoT prompting</strong></p>
<blockquote>
</blockquote>
<p>CoT prompting: 복잡한 문제를 간단한 중간 언어 단계로 분해하여 순차적으로 해결.</p>
<blockquote>
</blockquote>
<p>문제점: 단 한 번의 실수로도 전체 추론이 실패할 수 있고, 많은 토큰을 생성하여 느리고 비효율적.</p>
<p>⇒ latent <strong>reasoning</strong>
Latent reasoning은 언어가 인간 의사소통을 위한 도구일 뿐, 생각 그 자체의 기질(substrate)은 아니라는 이해와 일치.
즉, 마지막에 출력만 언어로 하면 되지, 중간 언어 단계(CoT prompting)는 필요없다는 뜻.</p>
<pre><code>⇒ 단순히 층을 쌓는 것
⇒ vanishing gradient 문제

⇒ Recurrent architectures
⇒ early convergence ⇒ 후속 계산 단계를 비활성(inert) 상태로 만듦 + BPTT</code></pre><p>⇒ 층 多 + without BPTT
⇒ <strong>HRM</strong></p>
<ul>
<li>두 개의 coupled된 recurrent module(<strong>H, L</strong> module)</li>
<li>One-step gradient approximation (BPTT 제거)</li>
</ul>
<h2 id="2-hierarchical-reasoning-model">2. Hierarchical Reasoning Model</h2>
<p>Let, input vector $x$, output prediction vector $\hat{y}$</p>
<p>Learnable component, input network $f_I(\cdot; \theta_I)$에 의해, input vectoer $x$는 $\tilde{x}$가 됨.</p>
<p>$\tilde{x} = f_I(x; \theta_I)$</p>
<p>Let, time step $i = 1, \ldots, N \times T$.
( N: $f_L(\cdot; \theta_L)$의 recurrent 횟수,
  T: $f_H(\cdot; \theta_H)$의 순환 주기 )</p>
<p>H module은 해당 사이클(N번의 $f_L(\cdot; \theta_L)$ recurrent)이 끝날 때의 L module의 최종 상태를 사용하여, 사이클당 한 번만 H의 hidden state $z_H$를 update.</p>
<p>$$z_L^i = f_L(z_L^{i-1}, z_H^{i-1}, \tilde{x}; \theta_L) ,$$</p>
<p>$$z_H^i = \begin{cases} f_H(z_H^{i-1}, z_L^i; \theta_H) &amp; \text{if } i \equiv 0 \pmod{T}, \ z_H^{i-1} &amp; \text{otherwise}. \end{cases}$$</p>
<p>전체 $N$번의 사이클($N \times T$의 time step)이 끝난 후, H module의 hidden state $z_H^{N \times T}$을 output network $f_O(\cdot; \theta_O)$에 넣어, $\hat{y}$ 얻음.</p>
<p>$\hat{y}=f_O(z^{NT}_H; \theta_O)$</p>
<p>이 과정 한 번이 forward 한 번임.</p>
<h3 id="hierarchical-convergence">Hierarchical convergence</h3>
<p>표준 RNN의 문제점: 
Hidden state가 너무 빨리 고정점(fixed point)으로 수령하여, 후속 계산이 중단되고 NN의 유효 깊이가 제한.</p>
<p>⇒ 계산 능력을 보존하기 위해 hidden state가 매우 느리게 수렴하도록 NN를 설계.</p>
<p>But,
수렴 속도를 억지로 늦추면, 시스템 전체가 불안정해질 위험 有.</p>
<p>⇒</p>
<ul>
<li><p>H module: 
하위 계산 결과($z_L$)를 통합하여, 전반적인 전략을 지시하고, L module이 새로운 계산을 시작하도록 컨텍스트($z_H$)를 업데이트.</p>
</li>
<li><p>L module: 
H module이 설정한 컨텍스트($z_H$) 내에서 &#39;국소 평형&#39;에 도달할 때까지 집중적인 탐색 또는 정제 계산을 수행.</p>
</li>
</ul>
<p>⇒ Early convergence를 방지 + 표준 RNN($T$ 단계)보다 훨씬 깊은 $NT$ 단계의 향상된 유효 깊이를 안정적으로 확보.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/d856d9e9-e953-4284-9015-92a1b4997358/image.png" alt=""></p>
<p>⇒ HRM이 (표준 RNN처럼 활동성이 급격히 감소하는 것과는 대조적으로) 많은 단계에 걸쳐 높은 계산 활동성(forward residual)을 유지하면서도 + 안정적인 수렴을 누릴 수 있음을 보여줌.</p>
<h3 id="approximate-gradient">Approximate gradient</h3>
<p>RNN은 BPTT를 사용.
BPTT는 forward pass에서 얻은 모든 hidden state를 저장했다가, backward pass 중에 gradient와 결합해야함.</p>
<p>⇒ memory 부담 ↑
<a href="https://m.blog.naver.com/gaussian37/221210061511">BPTT 참고자료</a></p>
<p><em>만약, RNN이 fixed point로 convergence된다면, 그 equilibrium point에서 단일 단계로 backward해서, BPTT 피할 수 있음(왜?...)</em></p>
<p>⇒ 즉, 아래 그림의 빨간 포인트들에서 단일 단계 backward할 수 있다는 뜻.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/235e251f-cc9c-44db-9d44-949bd121d298/image.png" alt=""></p>
<p>⇒ one-step approximation
⇒ 각 module의 마지막 hidden state의 gradient만 사용하고, 다른 hidden state는 상수 취급</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ac6e477c-fca5-4b83-a16c-ba41b6577fe1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a4312b15-f4e9-4bd5-9867-d2f9218cb854/image.png" alt=""></p>
<h3 id="deep-supervision">Deep supervision</h3>
<p>Let, 한 번의 forward pass를 segment.
총 segment 수를 M이라고 한다면, 각 segment $m \in {1, ..., M}$.</p>
<p>Let, segment $m$에서의 최종 H/L module의 hidden  state를 $z^m=(z^{mNT}_H, z^{mNT}_L)$.</p>
<p>⇒ 
$$(z^m, \hat{y}^m) \leftarrow \text{HRM}(z^{m-1}, x; \theta)$$</p>
<p>$$L_m \leftarrow \text{LOSS}(\hat{y}^m, y)$$</p>
<p>$$\theta \leftarrow \text{OPTIMIZERSTEP}(\theta, \nabla_{\theta}L_m)$$</p>
<p>+</p>
<p>Hidden state $z^m$을 다음 segment로 넘길 때 계산 그래프에서 <strong>&#39;분리(detach)&#39;</strong>하여, gradient가 이전 segment로 backpropagation되지 않도록 차단!!!</p>
<p>⇒ H module에 더 빈번한 피드백을 제공 + 메모리 부담 X</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/51dc21d0-eb36-49d9-805a-b0697b2c0c65/image.png" alt=""></p>
<h4 id="approximate-gradient-vs-deep-supervision">&#39;Approximate gradient&#39; vs. &#39;Deep supervision&#39;</h4>
<ul>
<li><p>근사 기울기 (Approximate Gradient): detach로 인해 과거의 계산 기록이 의도적으로 잘린 상태에서, 각 지도 단계(step)마다 계산되는 기울기 값.</p>
</li>
<li><p>심층 지도 (Deep Supervision): detach로 계산 그래프를 분리하며 (순전파 → 손실 계산 → 역전파) 과정을 n_supervision번 반복하는 전체 훈련 기법.</p>
</li>
</ul>
<h3 id="adaptive-computational-time-act">Adaptive computational time (ACT)</h3>
<p>뇌는 과제 복잡성과 잠재적 보상에 따라 학습 시간을 동적으로 조절함.</p>
<p>⇒ Training 中에만 adaptive halting strategy를 HRM에 통합.</p>
<p>⇒ 학습 中 segment 수를 동적으로 조절.</p>
<p>Q-head를 통해, H module의 최종 상태($z_H^{mNT}$)를 사용하여, halt, continue 행동의 Q-value를 예측.</p>
<p>$Q-value = \hat{Q}^m = \sigma(\theta_Q^T z_H^{mNT}) = (\hat{Q}^m_{halt}, \hat{Q}^m_{continue})$</p>
<p>if ((m ≥ $M_{max}$) or (($\hat{Q}<em>{halt}$ &gt; $\hat{Q}</em>{continue}$) and ($m ≥ M_{min}$)))
    ⇒ halt</p>
<p>cf) $M_{max}$: 고정 하이퍼 파라미터, $M_{min}$: 확률적으로 랜덤하게 1 ~ $M_{max}$에서 선택.</p>
<p>⇒ <strong>Q-value를 통해, halt 여부 결정</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/044e0974-762d-4929-81ea-b43ff42fc6c4/image.png" alt=""></p>
<h4 id="q-head-update-과정">Q-head update 과정</h4>
<p>$\hat{G}^m_{halt}$: &quot;halt&quot; action을 선택했을 때의 보상이고,
$\hat{G}^m_{continue}$: &quot;continue&quot; action을 선택했을 때의 미래의 보상임</p>
<p>$BinaryCrossEntropy(\hat{Q}^m, \hat{G}^m)$: &quot;action&quot;에 대한 loss</p>
<p>⇒ <strong>예측($\hat{Q}^m$)이 실제 목표($\hat{G}^m$)와 비슷해 지도록 함!!!</strong></p>
<p>전체 $L_m^{ACT} = \text{LOSS}(\hat{y}^m, y)+BinaryCrossEntropy(\hat{Q}^m, \hat{G}^m)$</p>
<p>cf) 이때, halt action을 했다고 해서, 배치의 모든 샘플이 새로운 샘플로 대체 X ⇒ 해당 샘플만 대체 O</p>
<h2 id="3-results">3. Results</h2>
<h3 id="31-benchmarks">3.1 Benchmarks</h3>
<h4 id="arc-agi-challenge">ARC-AGI Challenge</h4>
<h4 id="sudoku-extreme">Sudoku-Extreme</h4>
<h4 id="maze-hard">Maze-Hard</h4>
<h3 id="32-evaluation-details">3.2 Evaluation Details</h3>
<h3 id="33-visualization-of-intermediate-timesteps">3.3 Visualization of intermediate timesteps</h3>
<h2 id="4-brain-correspondence">4. Brain Correspondence</h2>
<h2 id="5-related-work">5. Related Work</h2>
<h3 id="reasoning-and-algorithm-learning">Reasoning and algorithm learning</h3>
<h3 id="brain-inspired-reasoning-architectures">Brain-inspired reasoning architectures</h3>
<h3 id="hierarchical-memory">Hierarchical memory</h3>
<h2 id="6-discussions">6. Discussions</h2>
<h3 id="turing-completeness-of-hrm">Turing-completeness of HRM</h3>
<h3 id="reinforcement-learning-with-chain-of-thought">Reinforcement learning with chain-of-thought</h3>
<h3 id="linear-attention">Linear attention</h3>
<h2 id="7-conclusion">7. Conclusion</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[RepQ-ViT: Scale Reparameterization for Post-Training Quantization of  Vision Transformers]]></title>
            <link>https://velog.io/@sangjun_moon/RepQ-ViT-Scale-Reparameterization-for-Post-Training-Quantization-of-Vision-Transformers</link>
            <guid>https://velog.io/@sangjun_moon/RepQ-ViT-Scale-Reparameterization-for-Post-Training-Quantization-of-Vision-Transformers</guid>
            <pubDate>Wed, 29 Oct 2025 06:16:34 GMT</pubDate>
            <description><![CDATA[<h1 id="repq-vit-scale-reparameterization-for-post-training-quantization-of--vision-transformers">RepQ-ViT: Scale Reparameterization for Post-Training Quantization of  Vision Transformers</h1>
<hr>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=RepQ-ViT%3A+Scale+Reparameterization+for+Post-Training+Quantization+of++Vision+Transformers&amp;btnG=">RepQ-ViT</a>에 대한 내용</p>
<h2 id="abstract">Abstract</h2>
<p>P1. post-LayerNorm activation의 inter-channel variation
S1. 
Channel-wise Q @ quantization step.
Layer-wise Q @ inference step.</p>
<p>P2. Power-law distribution을 가진 post-Softmax activation
S2.
$log_{\sqrt{2}}$ Q @ quantization step.
$log_2$ Q @ inference step.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p>전통적인 &#39;Q-infernece 종속&#39; paradigm은 유일한 선택일까?
⇒ Q, infernece step을 decoupling</p>
<p>P1. post-LayerNorm activation의 inter-channel variation
S1. 
Channel-wise Q @ quantization step.
Layer-wise Q @ inference step.
⇒
Q step에서 channel-wise Q하고,
I step에서 layer-wise로 reparameterization하여,
LayerNorm의 affine factoer, 다음 layer의 weight를 조정해서 acc ↑</p>
<p>P2. Power-law distribution을 가진 post-Softmax activation
S2.
$log_{\sqrt{2}}$ Q @ quantization step.
$log_2$ Q @ inference step.</p>
<h2 id="2-related-works">2. Related Works</h2>
<p>생략</p>
<h2 id="3-methodology">3. Methodology</h2>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e7bb6623-16ec-42a3-93bd-a7ebb1ff413e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/05b0d9d2-2df1-4692-b3b2-3d6863ceeca5/image.png" alt=""></p>
<h3 id="31-preliminaries">3.1 Preliminaries</h3>
<h4 id="hardware-friendly-quantizers">Hardware-friendly quantizers</h4>
<h5 id="uniform-q">Uniform Q</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9bcc02f8-b40c-41fa-8558-80044afdb379/image.png" alt=""></p>
<h5 id="log_2-q">$log_2$ Q</h5>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/1294d58e-ff4b-48f4-8e7b-1ed64b6a2d1f/image.png" alt=""></p>
<h3 id="32-scale-reparam-for-layernorm-activations">3.2 Scale Reparam for LayerNorm Activations</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3c42ccc3-d9e3-4c7c-bdde-5c1d8392ed00/image.png" alt=""></p>
<p>⇒ 단순히 통일된 Q SF를 적용하는 layer-wise Q는 위와 같은 큰 inter-channel variation에서 acc ↓</p>
<p>⇒ 
Q step:
channe-wise Q ⇒ $s \in \R^D$, $z 
\in \Z^D$를 얻음</p>
<p>I step:
$s, z$를 $\tilde{s} \in \R^1, \tilde{z} \in \Z^1$로 reparam.</p>
<p>이때, $\tilde{s}, \tilde{z}$k는 당연히 미리 계산됨(PTQ니까...)</p>
<p>$\tilde{s} = E[s], \tilde{z} = E[z]$</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/4d850ff8-fc36-4530-aea4-37cc093bb95c/image.png" alt="">
라고 하면,</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/d8901749-20f7-434d-b55f-ae6d5b71d46e/image.png" alt="">
이고,
이러한 연산은 Layernorm의 affine factor를 다음과 같이 조정함으로써 달성 ㄱㄴ.
<img src="https://velog.velcdn.com/images/sangjun_moon/post/cc015c32-0ae5-4e5a-9c98-53013a70720e/image.png" alt=""></p>
<p>위에처럼 하면, $s, z$를 reparam하지만, activation 분포를 <img src="https://velog.velcdn.com/images/sangjun_moon/post/ac403550-fbb4-4faa-aea0-9c60ea30984f/image.png" alt="">
이렇게 이동시킴.</p>
<p>⇒<img src="https://velog.velcdn.com/images/sangjun_moon/post/f86dba3c-b513-4b1d-8730-b5674a703dac/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3137f65d-efa9-4952-80d1-588fd50d8da1/image.png" alt=""></p>
<p>이런 식으로 뒤에 layer의 weight에 오차를 보상하게 함.</p>
<h3 id="33-scale-reparam-for-softmax-activations">3.3 Scale Reparam for Softmax Activations</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/612b4ad8-c0f3-40ed-b63f-19ad8fffa696/image.png" alt=""></p>
<p>FQ-ViT의 $log_2$ Q는 중요한 소수의 attention 값이 큰 부분에 적은 bin을 할당.</p>
<p>⇒ acc ↓</p>
<p>⇒ $log_{\sqrt{2}}$ Q</p>
<p>But
HW frendly X (∵ $log_2$ Q처럼 bit-shifting 연산 X)</p>
<p>⇒
Q step: $log_{\sqrt{2}}$ Q
I step: $log_2$ Q</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3db7f1f5-93d7-4ac9-862f-56514a61fb3d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/95e823fa-2285-42c7-8fb8-b770fa262f3f/image.png" alt=""></p>
<p>⇒</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/81c51db0-3367-474f-b3f8-e464a1d37ec8/image.png" alt=""></p>
<p>s와 비교할 때, reparam된 $\tilde{s}$는 I step에서 dequant 절차 또한 효율적인 bit-shift로 할 수 있게함!
// 물론 $A^{(\Z)}$가 홀수일 때, $\tilde{s}=s \cdot [\sqrt{2}]$ 여서,
// $\hat{A}=2$를 $\lfloor -\frac{A^{(\Z)}}{2}\rfloor$ 만큼 shift하고, $\tilde{s}$를 곱하긴 함.</p>
<p>// 짝수일 떄도, $s$가 FP32이면, fp연산을 하긴 함...</p>
<h2 id="4-experiments">4. Experiments</h2>
<h3 id="42-quantization-results-on-imagenet-dataset">4.2. Quantization Results on ImageNet Dataset</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8a2f3ff0-6453-4b67-989b-baea7efe7677/image.png" alt=""></p>
<h3 id="43-quantization-results-on-coco-dataset">4.3. Quantization Results on COCO Dataset</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7621ab82-0822-41b2-a359-5b1858ee831a/image.png" alt=""></p>
<h3 id="44-ablation-studies">4.4 Ablation Studies</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/376adc7e-d5b2-493d-9643-447d58011ec7/image.png" alt=""></p>
<h3 id="45-efficiency-analysis">4.5 Efficiency Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9fe20a7c-9d87-45a8-bb4a-5373e821846b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[APQ-ViT: Towards Accurate Post-Training Quantization for Vision Transformer]]></title>
            <link>https://velog.io/@sangjun_moon/ARQ-ViT-Towards-Accurate-Post-Training-Quantization-for-Vision-Transformer</link>
            <guid>https://velog.io/@sangjun_moon/ARQ-ViT-Towards-Accurate-Post-Training-Quantization-for-Vision-Transformer</guid>
            <pubDate>Tue, 28 Oct 2025 06:39:19 GMT</pubDate>
            <description><![CDATA[<h1 id="apq-vit-towards-accurate-post-training-quantization-for-vision-transformer">APQ-ViT: Towards Accurate Post-Training Quantization for Vision Transformer</h1>
<hr>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=ARQ-ViT%3A+Towards+Accurate+Post-Training+Quantization+for+Vision+Transformer&amp;btnG=">ARQ-ViT</a>에 대한 내용</p>
<h2 id="abstract">Abstract</h2>
<p>P1. 기존 SF 지표(calibration metric)가 low-bit에 대한 Q 영향을 측정하는데 부정확
S1. 
Block-wise로 Q perturbation을 감지
+
중대한 오차에 대한 집중도를 높이기 위해, 사소한 오차를 무시
⇒ Bottom-elimination Blockwise Calibration</p>
<p>P2. 기존 Q 패러다임이 Softmax의 power-law-distribution에 친화적이지 X
S2.
softmax의 power-law-distribution을 유지하기 위해, Matthew-effect Preserving Quantization 설계</p>
<h2 id="1-introduction">1 Introduction</h2>
<p>S1. Blockwise Bottom-elimination Calibration, BBC는
block-wise하게 Q error를 감지
+
사소한 error에 해당하는 2차 그래디언트를 생략하여, 중대한 오차에 집중</p>
<p>S2. Mattew-effect Preserving Quantization, MPQ는
softmax의 목적에 맞게, 큰 값(중요한 값)에 더 많은 bin 할당</p>
<h2 id="2-related-work">2 Related Work</h2>
<p>생략</p>
<h2 id="3-method">3 Method</h2>
<h3 id="31-preliminaries">3.1 Preliminaries</h3>
<p>PTQ4ViT는 최적의 SF를 결정하기 위해, Hessian guided metric을 사용.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8ac13955-55ee-4d61-9e02-a855a7b5f90b/image.png" alt=""></p>
<p>위 Q로 인한 작업 손실의 기댓값을 최소화하는 SF를 찾아야함.</p>
<p>⇒ $min_\Delta(E[L(\hat{x})]-E[L(x)])$</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/3fbd5bd8-2e3a-4f10-bcbc-7da181f37aea/image.png" alt=""></p>
<p>⇒ ≈ $min_\Delta((\hat{O}-O)^T\bar{H}^{(O)}(\hat{O}-O))$</p>
<p>이후 <img src="https://velog.velcdn.com/images/sangjun_moon/post/e6187698-adeb-4b59-aec3-d44712e40915/image.png" alt="">
구간을 $n$등분한 $\Delta_x$의 search space를 순회하며, ≈ $min_\Delta((\hat{O}-O)^T\bar{H}^{(O)}(\hat{O}-O))$를 만족하는 $\Delta_w, \Delta_a$를 교대 탐색!!!</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/32c6c3c7-0ef8-4420-874c-0dc6133f339a/image.png" alt=""></p>
<h3 id="32-blockwise-bottom-elimination-calibration">3.2 Blockwise Bottom-elimination Calibration</h3>
<p>PTQ4ViT의 hessian guided metric은 low-bit에서, 
layer-wise한 최적화가 block level에서의 Q를 감지할 수 없어, 부정확
+
낮은 비트에서 오차(hessian matrix)가 클 수 밖에 없는데,
dense한 hessian matrix는 
사소한 오차&#39;까지 모두 보려다가, &#39;중대한 오차&#39;에 대한 집중도를 잃음</p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/8d195c47-ecdf-455e-8954-3db5f1d0ef84/image.png" alt=""></p>
<p>4bit에서 인접한 후보 SF들끼리 loss 차이가 큼
+
너무 뾰족 뾰족해서, 최적 찾기 어려움</p>
<p>⇒ Blockwise Bottom-elimination Calibration</p>
<h4 id="1-blockwise하다">1. Blockwise하다?</h4>
<p>어떤 b번째 block의 input/output을 $a^b, O^b$라고 할 때, 
$O^b={w_L^b}^T{w_{L-1}^b}^T...{w_1^b}^Ta^b$ 이다.
또한 $l$번째 layer가 보정될 때, $L$번째부터 $l$번째 layer까지의 복합 레이어로 간주될 수 있고, 그 weight와 activation은 다음과 같음</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/72101a86-c72c-42d7-a815-022574d6312b/image.png" alt=""></p>
<p>weight 보정을 예로들면, $b$번째 block의 $l$번째 layer에 대한 2차 항은 다음과 같음</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/d05627a8-22d5-412b-b932-4c5ddac12115/image.png" alt=""></p>
<p>이때, </p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/09044ab3-da5b-46f0-9a8a-6db4aa66df97/image.png" alt=""></p>
<p>⇒ (7)을 보면, 결국, 어떤 block의 어떤 layer든 해당 block의 2차 정보로 최적의 SF를 결정할 수 있음 ⇒ <strong>Blockwise!!!</strong></p>
<h4 id="2-bottom-elimination">2. Bottom-elimination?</h4>
<p>bit-width ↓ ⇒ Q error ↑ ⇒ &#39;사소한 error&#39; ↑ ⇒ &#39;중대한 error&#39; 관심 ↓</p>
<p>⇒ 최종 출력에 perturbation을 일으키는 큰 error에 더 주목하기 위해, &#39;최하위 제거&#39;메커니즘을 적용한, <strong>sparse hessian matrix!!!</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/530f399e-b98d-4071-816c-76ffd33ab02d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c5b3d88e-cda5-4a44-8ead-3afafb05e280/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/e022d12a-f874-42ae-8437-e34949dbc677/image.png" alt=""></p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/354faf86-e0a8-4e42-94e4-d3f583209e08/image.png" alt=""></p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/61bbe897-0553-4ffe-b613-54ba0078b38f/image.png" alt=""></p>
<h3 id="33-matthew-effect-preserving-quantization">3.3 Matthew-effect Preserving Quantization</h3>
<p>다른 연산들과 달리 softmax의 output distribution은 비대칭적이고 극도로 불균형한 power-law probability distribution을 따름.</p>
<p>이전 많은 연구들 PTQ4ViT(twin-Q), FQ-ViT(log방법)는 모두 낮은 softmax 값(대다수의)에 많은 bin을 부여하고 싶어함.</p>
<p>But
그렇게 되면, softmax의 원래 기능(작은 값은 더 작게, 큰 값은 더 크게(∵exponential function 때문에))을 상실...</p>
<p>⇒ 중요한 큰 값들의 정보 손실...</p>
<p>⇒ Matthew-effect Preserving Quantization, MPQ</p>
<p>이는 양자화 전후의 상호 정보량 최대화를 순수하게 추구하는 대신, 
양자화 과정 동안 소프트맥스 출력의 마태 효과를 유지</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/89d85351-151b-4e62-9385-94628b6f9e73/image.png" alt=""></p>
<p>⇒ 즁요한 값은 더 fine하게 Q (그림 5(d))</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b8b5fdb6-e01f-4d5d-9a8f-ae43dbc96ee6/image.png" alt=""></p>
<h3 id="34-framework-of-apq-vit">3.4 Framework of APQ-ViT</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7e897256-da5f-4d86-929c-3a2b4c577423/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/eaada6de-332c-44ef-82af-56bb92637f5e/image.png" alt=""></p>
<h2 id="4-experiment">4. Experiment</h2>
<h3 id="41-settings">4.1 Settings</h3>
<p>생략</p>
<h3 id="42-ablation-study">4.2 Ablation Study</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/25218ed4-5236-475d-9e02-a3e3558d9ac2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f4465024-a2b9-4680-b8d7-5fbf32a61a9e/image.png" alt=""></p>
<h3 id="43-comparison-on-classification-task">4.3 Comparison on Classification Task</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/694ad054-5cc7-4cd1-923f-3e9a54d1dc85/image.png" alt=""></p>
<h3 id="44-comparison-on-object-detection-task">4.4 Comparison on Object Detection Task</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7674f661-7a87-416c-84e5-17abbe149f4f/image.png" alt=""></p>
<h2 id="5-conclusion">5. Conclusion</h2>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[FQ-ViT: Post-Training Quantization for Fully Quantized Vision Transformer]]></title>
            <link>https://velog.io/@sangjun_moon/FQ-ViT-Post-Training-Quantization-for-Fully-Quantized-Vision-Transformer</link>
            <guid>https://velog.io/@sangjun_moon/FQ-ViT-Post-Training-Quantization-for-Fully-Quantized-Vision-Transformer</guid>
            <pubDate>Tue, 28 Oct 2025 04:40:36 GMT</pubDate>
            <description><![CDATA[<h1 id="fq-vit-post-training-quantization-for-fully-quantized-vision-transformer">FQ-ViT: Post-Training Quantization for Fully Quantized Vision Transformer</h1>
<hr>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=FQ-ViT%3A+Post-Training+Quantization+for+Fully+Quantized+Vision+Transformer&amp;btnG=">FQ-ViT</a>에 대한 내용</p>
<h2 id="abstract">Abstract</h2>
<p>P1. LayerNorm input의 심각한 inter-channel variation ⇒ performance ↓
S1. Power-of-Two Factor</p>
<p>P2. Attention map에서의 extreme skwed distribution ⇒ performance ↓
S2. Log-Int-Softmax</p>
<h2 id="1-introduction">1 Introduction</h2>
<p><a href="https://velog.io/@sangjun_moon/Post-Training-Quantization-for-Vision-Transformer-rlekykik">Post-Training Quantization for Vision Transformer</a>에서 LayerNorm과 Softmax를 Q하는 것은 심각한 acc ↓를 가져옴을 보임.
⇒ Model이 fully Q되지 않아, HW에서 FP 연산 장치를 유지 + resource 소모 ↑ + inference speed ↓</p>
<p>⇒
P1. LayerNorm input에서 significant한 inter-channel variation 발견.
일부 channel의 범위는 median의 40배를 초과
⇒ acc ↓
S1. LayerNorm의 input을 Q하기 위한, PTF</p>
<p>P2. Attention-map 값이 extremely skwed distribution
⇒ 대부분 값 0 ~ 0.01, 소수 높은 attention 값만 1에 가깝
⇒ acc ↓
S2. 대부분의 작은 값에 더 높은 Q 해상도를 제공하기위해, LIS</p>
<h2 id="2-related-work">2 Related Work</h2>
<p>생략</p>
<h2 id="3-proposed-method">3 Proposed Method</h2>
<h3 id="31-preliminary">3.1 Preliminary</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ed09fcf2-bf98-4af7-aa49-07a11868a21d/image.png" alt=""></p>
<h4 id="uniform-quantization">Uniform Quantization</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/15cb0929-225f-430e-95fe-3f97a1de92c0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/0be5d8c7-3d43-4b46-95bc-ea24c75a4e75/image.png" alt=""></p>
<p>⇒ $s, zp$는 $X$의 하한($l$)과 상한($u$)에 의해 결정.</p>
<h4 id="log2-quantization">Log2 Quantization</h4>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/656dc2d4-35c9-4464-b689-ea948a457fb1/image.png" alt=""></p>
<h3 id="32-power-of-two-factor-for-layernorm-quantization">3.2 Power-of-Two Factor for LayerNorm Quantization</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/384f0892-3733-483a-89a2-7bc8fce0157f/image.png" alt=""></p>
<p>LayerNorm은 forward step에서 $μ_X, σ_X$를 계산하여, input $X$를 normalized함. 
이후, affine param $\gamma, \beta$가 nomalized된 input을 재조정.</p>
<p>P1. ViT에서 LayerNorm input의 inter-channel variation이 큼.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/8f57bc7c-1804-484d-baf0-4e9f58eea5e2/image.png" alt=""></p>
<p>⇒ 모든 channel에 동일한 Q param을 적용하는 layer-wise Q는 acc ↓</p>
<p>⇒ Group-wise, Channel-wise Q</p>
<p>But</p>
<p>여전히 FP 영역에서 평균과 분산 계산...</p>
<p>⇒ Channel-wise하게, factor $\alpha$를 도입하는, <strong>PTF</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/493a4167-745a-4d73-8ad5-8b545d07e937/image.png" alt=""></p>
<p>⇒ Channel별 고유한 factor $\alpha$를 갖고,
layer-wise 고유한 $s, zp$를 갖게됨!!!</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/c3e743eb-0fd3-4df8-91f3-b46e98c15481/image.png" alt=""></p>
<p>⇒ 
Infernce시 $s, zp$는 미리 추출될 수 있음
+
LayerNorm input이 Q되서, 평균, 분산이 int 영역에서 계산 됨!!!</p>
<h3 id="33-log-int-softmax-for-softmax-quantization">3.3 Log-Int-Softmax for Softmax Quantization</h3>
<p>P2. Attention map의 상당히 많은 값이 상당히 작은 값에 분포. 1에 가까운 큰 값은 이상치로 소수에 불과.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/da262dbb-91d8-4ac9-a4c7-943c19529f9d/image.png" alt=""></p>
<p>이렇게 많은 값들($10^{-4}$ ~ $10^{-2}$의 값들)에 하나의 구간만 할당하는 uniform Q는 않좋음.</p>
<p>⇒ $log_2$ 방식은 이 값들을 위해, 더 많은 구간을 할당 可能
+
지수 함수 (Softmax의 exp($X$))의 다항식 근사치인 i-exp</p>
<p>⇒ integer-only + fast + low-cost</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/ef800b85-4d11-4ff3-b378-b760b5748a80/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/43296988-797e-4f28-867b-fb01c3052d37/image.png" alt=""></p>
<h2 id="4-experiments">4 Experiments</h2>
<h3 id="41-implementation-details">4.1 Implementation Details</h3>
<ul>
<li>Calibration: ImageNet, COCO에서 1000개 training images</li>
<li>Weight Q: symmetric channel-wise MinMax</li>
<li>Activation Q: asymmetric layer-wise MinMax</li>
<li>PTF의 K = 3</li>
</ul>
<h3 id="42-comparison-with-state-of-the-art-methods">4.2 Comparison with State-of-the-art Methods</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/1fefaadd-523a-4499-81c3-6402654b87bd/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/a37f5b3f-cde2-4fe8-9a15-c8d39788e173/image.png" alt=""></p>
<h3 id="43-ablation-studies">4.3 Ablation Studies</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2fc9ffc2-7f1b-44ec-bf84-fc8489852e80/image.png" alt=""></p>
<p>⇒ Softmax를 낮은 비트로 Q 하려면, LIS 必</p>
<h3 id="44-visualization-of-quantized-attention-map">4.4 Visualization of Quantized Attention Map</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/f63e6625-c068-4251-9d42-3f15313d0944/image.png" alt=""></p>
<p>⇒ Softmax를 낮은 비트로 Q 하려면, LIS 必</p>
<h2 id="5-conclusions">5 Conclusions</h2>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PTQ4ViT]]></title>
            <link>https://velog.io/@sangjun_moon/PTQ4ViT</link>
            <guid>https://velog.io/@sangjun_moon/PTQ4ViT</guid>
            <pubDate>Mon, 27 Oct 2025 00:05:46 GMT</pubDate>
            <description><![CDATA[<h1 id="ptq4vit-post-training-quantization-for-vision--transformers-with-twin-uniform-quantization">PTQ4ViT: Post-Training Quantization for Vision  Transformers with Twin Uniform Quantization</h1>
<hr>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Ptq4vit%3A+Post-training+quantization+for+vision+transformers+with+twin+uniform+quantization&amp;btnG=">PTQ4ViT에 대한 내용</a></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/46303959-a6a8-4c16-95e1-662d64ed75bc/image.png" alt=""></p>
<h2 id="abstract">Abstract.</h2>
<p>Softmax, GeLU 이후 activation의 distribution 
≠ gaussian distribution
+
MSE, cosine distance를 통한, optimal SF 결정은 정확 X</p>
<p>⇒
Twin uniform Q
+
Hessian guided metric을 통한, SF optimizing</p>
<h2 id="1-introduction">1 Introduction</h2>
<p>생소했던 개념들</p>
<ul>
<li>Self-attention module은 global information을 포착</li>
<li>PTQ는 label 없는 calibraion images를 사용</li>
</ul>
<h3 id="문제1-특수-분포-activation">문제1. 특수 분포 activation</h3>
<ol>
<li>Softmax:
Softmax를 거친 값들은 [0, 1] 범위에서 매우 unbalanced된 distribution을 갖음.
대부분 값이 0에 <strong>매우 가까움</strong>.
+
큰 값의 수는 매우 적지만, 이 값들은 두 patch 간 높은 연관성(attention)을 의미. ⇒ 매우 중요한 값
⇒ 이 큰 값을 Q 범위에 포함시키기 위해, 큰 SF 要
⇒ 大多數의 작은 값들이 0으로 Q됨
⇒ Q Error ↑</li>
<li>GeLU:
GeLU를 거친 값들은 asymmetrical한 distribution 갖음.
양수 값들은 분포가 넓음.
+
음수 값들은 skewed됨.</li>
</ol>
<p>⇒ 이런 특수 distribution을 해결하기 위해, Twin uniform Q
이는 값들은 두 범위로 분리하여 각각 Q.</p>
<h3 id="문제2-sf를-결정하는-지표-정확-x">문제2. SF를 결정하는 지표 정확 X</h3>
<p>MSE, Cosine distance, Pearson correlation coefficient등이 있었음.
⇒ local information만 사용
⇒ suboptimal
⇒ <strong>Hessian guided metric</strong></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/82615cbc-ae12-4dc5-8ebe-53e3fe1f9636/image.png" alt=""></p>
<h2 id="2-background-and-related-work">2 Background and Related Work</h2>
<h3 id="21-vision-transformer">2.1 Vision Transformer</h3>
<p>생략</p>
<h3 id="22-quantizationfang-j-shafiee-a-abdel-aziz-h-thorsley-d-georgiadis-g-hassoun-j-post-training-piecewise-linear-quantization-for-deep-neural-networks-in-eccv-2020">2.2 QuantizationFang, J., Shafiee, A., Abdel-Aziz, H., Thorsley, D., Georgiadis, G., Hassoun, J.: Post-training piecewise linear quantization for deep neural networks. In: ECCV (2020)</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/27d4e70a-f05c-4ff8-b072-f1c0d9588a8e/image.png" alt=""></p>
<h2 id="3-method">3 Method</h2>
<h3 id="31-base-ptq-for-vision-transformer">3.1 Base PTQ for Vision Transformer</h3>
<p>생략</p>
<h3 id="32-twin-uniform-quantization">3.2 Twin Uniform Quantization</h3>
<ul>
<li>Softmax 후 활성화 분포: 활성화 분포가 매우 불균형하며(unbalanced), 대부분의 값이 0에 매우 가깝고 소수의 값만이 1에 가깝습니다.</li>
<li>GELU 후 활성화 분포: GELU 함수를 거친 값들은 <strong>높은 비대칭 분포(highly asymmetric distribution)</strong>를 가지며, 무한정한 양수 값들은 범위가 큰 반면 음수 값들은 분포 범위가 매우 작습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/64e06609-922a-4119-82ae-f84f0abb8488/image.png" alt=""></p>
<p>⇒ <strong>Twin uniform Q</strong></p>
<p>Twin uniform Q는 2개의 Q 범위 $R_1, R_2$를 갖음.
각각은 다른 SF $\Delta_{R1}$과 $\Delta_{R2}$에 의해 제어됨.
⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/528a04f3-4999-4957-b7c7-64991890736e/image.png" alt=""></p>
<ul>
<li><p>Softmax 後 값에 대한 범위 설정
작은 $\Delta_{R1}^{softmax}$를 사용하여, $R_1=[0, 2^{k-1}\Delta{R1}^{softmax})$를 잘게 Q.
+
상대적으로 큰 $\Delta_{R2}^{softmax}=\frac{1}{2^{k-1}}$로 고정하여, $R_2=[0, 1]$을 크게 크게 Q. ∵ calibration 영향을 피하기 위해.</p>
</li>
<li><p>GeLU 後 값에 대한 범위 설정
작은 $\Delta_{R1}^{GeLU}=\frac{0.170}{2^{k-1}}$로 고정하여, $R_1=[-2^{k-1}\Delta_{R1}^{GeLU}, 0]$를 잘게 Q. ∵ 음수 전체 범위 $[GeLU_{min}, 0]$를 포괄하려고.
+
상대적으로 큰 $\Delta_{R2}^g$를 사용하여, $R_2=[0, 2^{k-1}\Delta_{R2}^{GeLU}]$를 크게 크게 Q.</p>
</li>
</ul>
<p>⇒ 이제 optimal $\Delta_{R1}^{softmax}, \Delta_{R2}^{GeLU}$만 찾으면 됨.</p>
<p>⇒
![]
(<a href="https://velog.velcdn.com/images/sangjun_moon/post/ecdb6670-ce8c-4f84-8d80-f5bfdd8f274a/image.png">https://velog.velcdn.com/images/sangjun_moon/post/ecdb6670-ce8c-4f84-8d80-f5bfdd8f274a/image.png</a>)</p>
<p>그림4에서, optimal 빨간색 범위만 찾으면 됨!!!</p>
<h3 id="33-hessian-guided-metric">3.3 Hessian Guided Metric</h3>
<p>Optimal SF를 찾기위해, 여러 metric(MSE, Cosine, Pearson, ...)으로 layer-wise + greedy하게 했었음
<img src="https://velog.velcdn.com/images/sangjun_moon/post/2e0ff96b-f0ba-49bf-90b6-119b86875b94/image.png" alt=""></p>
<p>물론 Q 前/後 마지막 layer output 간의 distance ($L = CE(\hat{y}, y)$)를 사용하는 것이 PTQ에서 가장 정확.
But,
forward 너무 많이 해야됨.</p>
<p>⇒ <strong>Hessian Guided Metric</strong></p>
<p>weight $W$를 변수로 취급할 때, Loss의 expectation은 $E[L(W)]$</p>
<p>Q는 weight에 작은 perturbation $\epsilon$을 갖게 함.
⇒ $\hat{W}=W+\epsilon$</p>
<p>⇒ Taylor series expansion을 통해, Q가 Loss에 미치는영향을 분석 可能</p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/7ade00e0-ca49-4b8c-9ab0-5e3552df6500/image.png" alt=""></p>
<p><strong>optimal SF</strong>를 찾아야 함!!!
⇒ $min_{\Delta}(E[L(\hat{W})]-E[L(W)])$을 layer-wise하게 구성해야함.</p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/80628396-11c2-4c93-a972-b4f9a4fc6ef2/image.png" alt=""></p>
<p>∵ $\bar{g}(W)$는 잘 training된 model에서 0을 갖고, $\epsilon = (\hat{O_l}-O_l)$이어서.</p>
<h3 id="34-ptq4vit-framework">3.4 PTQ4ViT Framework</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/733185ff-ea8d-482d-bf6f-09859f54d569/image.png" alt=""></p>
<h4 id="1단계-outputy-및-gradient-수집">1단계: Output($y$) 및 gradient 수집</h4>
<p>1 ~ 6 line</p>
<h4 id="2단계-optimal-sf찾기">2단계: Optimal SF찾기</h4>
<p>7 ~ 14 line</p>
<h4 id="문제점"><em>문제점</em></h4>
<p>10 ~ 13 line에서 특정 layer를 Q하면,
$\epsilon = (\hat{O}^l-O^l)$이 바뀌는데,
그럼 $\bar{H}(W) = diag((\frac{∂L}{∂O_1^l})^2, ..., (\frac{∂L}{∂O^l_{|O_l|}})^2)$ 도 매번 새로 계산해야 되는데, 그렇게 안함...
∵ GPU 메모리 줄이려고...</p>
<h2 id="4-experiments">4 Experiments</h2>
<h3 id="41-experiment-settings">4.1 Experiment Settings</h3>
<ul>
<li>Softmax 後: $\Delta^{softmax}_{R1}$의 탐색 공간은 $[\frac{1}{2^k}, \frac{1}{2^{k+1}}, ..., \frac{1}{2^{k+10}} ]$</li>
<li>$\alpha, beta$, # Round<ul>
<li>BasePTQ<ul>
<li>$\alpha = 0.5, beta = 1.2$, # Round = 1</li>
</ul>
</li>
<li>PTQ4ViT<ul>
<li>$\alpha = 0, beta = 1.2$, # Round = 3</li>
</ul>
</li>
</ul>
</li>
<li>ImageNet</li>
<li>Calibration 32개</li>
</ul>
<h3 id="42-results-on-imagenet-classification-task">4.2 Results on ImageNet Classification Task</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/387d4032-f90e-4cde-a55e-5ed80065fd86/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b015d197-6b90-4328-a626-93838ffb129d/image.png" alt=""></p>
<h3 id="43-ablation-study">4.3 Ablation Study</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/7e1fff9d-62f0-445d-9020-ead7c4adb061/image.png" alt=""></p>
<h2 id="conclusion">Conclusion</h2>
<p>생략</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Post-Training Quantization for Vision Transformer]]></title>
            <link>https://velog.io/@sangjun_moon/Post-Training-Quantization-for-Vision-Transformer-rlekykik</link>
            <guid>https://velog.io/@sangjun_moon/Post-Training-Quantization-for-Vision-Transformer-rlekykik</guid>
            <pubDate>Wed, 22 Oct 2025 05:36:33 GMT</pubDate>
            <description><![CDATA[<h1 id="post-training-quantization-for-vision-transformer">Post-Training Quantization for Vision Transformer</h1>
<hr>
<p><a href="https://scholar.google.com/scholar?hl=ko&amp;as_sdt=0%2C5&amp;q=Post-Training+Quantization+for+Vision+Transformer&amp;btnG=">PTQ for ViT에 대한 내용</a></p>
<h2 id="abstract">Abstract</h2>
<ul>
<li>Attention mechanism 기능을 보존하기 위해,
Q된 attention map의 relative order를 유지하게하는 ranking loss를 최종 Q 목적 함수에 도입</li>
<li>MHA의 Attention map과 MLP의 output feature 간 nuclear norm을 활용하여, MixQ</li>
</ul>
<h2 id="1-introduction">1 Introduction</h2>
<p>이 논문 이전의 PTQ 방법들은 CNN이나 RNN을 위해 설계됨
⇒ transformer의 특징 고려 X</p>
<p>⇒</p>
<ul>
<li>Attention map의 relative order를 유지하기 위해, ranking loss 도입</li>
<li>Attention map과 MLP의 output feature의 sensitivity 측정을 위해, nuclear norm을 사용해서, MixQ</li>
<li>Bias correction을 통한, Q error 보정</li>
</ul>
<h2 id="2-related-works">2 Related Works</h2>
<p>생략</p>
<h2 id="3-methodology">3 Methodology</h2>
<ul>
<li>Linear layer를 위한 similarity-aware quantization + ranking-aware quantization</li>
<li>Accuracy ↑을 위한 bias correction</li>
<li>Nuclear norm을 통한 MixQ</li>
</ul>
<h3 id="31-preliminaries">3.1 Preliminaries</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2916e98f-f58e-45a3-bc44-cb537f3895b2/image.png" alt="">
에서 $X$의 가로 한 줄이 patch 하나에 대한 정보</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/bef54673-4bb3-4b6f-bde2-323b76424a47/image.png" alt="">
에서 $X_lW_l^Q$의 결과 $Q_l$ 또한 가로 한 줄이 patch 하나에 대한 정보</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b6959cd8-14cb-4a1b-a351-dda2d0c57a81/image.png" alt=""></p>
<h3 id="32-ranking-aware-post-training-quantization">3.2 Ranking-Aware Post-Training Quantization</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/767fe73a-b1e7-47f1-bd80-b67617457d5f/image.png" alt="">
는 Q 함수이다.</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/fa0f3391-1087-4a9c-b405-6ec2951cd584/image.png" alt="">
는 Q된 출력이다.</p>
<p>scale factor ($\Delta_W^l, \Delta_X^l$)가 Q 결과에 큰 영향을 미침을 알 수 있다.
∵ 사실상 조절 가능한 것이 $Y$와 $\Delta$이기 때문에...</p>
<p>⇒ Calibration Dataset에서 생성된 weight와 activation에 대한 optimal scale factor를 찾자!!!</p>
<p>Self-attention layer는 전역적 관련성을 계산하는 CNN과 차별화를 갖는 구성 요소임.</p>
<p><strong>Q 後 attention map의 relative order가 변경</strong>되는 것을 empirically 관찰
⇒ 이는 심각한 performance degradation 발생</p>
<blockquote>
</blockquote>
<p>Relative order란?
Attention map의 한 행 내에서, 임의의 두 값 $A_{kp}, A_{kq}$의 대소 관계를 의미</p>
<blockquote>
</blockquote>
<p>Q 後 attention map의 relative order가 변경됬다는 것은
Q 前에는 한 row에 
..., 3.61, 5.234, ..., 4.24, ...
이었는데,
Q 後에는 한 row에
..., 4, 5, ..., 4, ...
가 되면,
$3.61 &lt; 4.24$의 대소 관계가 사라짐</p>
<p>⇒ Ranking Loss 도입
<img src="https://velog.velcdn.com/images/sangjun_moon/post/f86d92c7-8016-4cad-bef7-b614967c4e63/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/2f03157a-b5e2-4d14-87d1-dfa063a7185e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/abf06450-02a2-48bc-8ddb-346ca85eeca9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/6547023b-45c4-42f3-9a12-27443743c3e4/image.png" alt=""></p>
<p>⇒ Ranking Loss function을 통해, Q Attention 값의 쌍별 순서가 원본 attention 값의 순서를 유지하도록 함.</p>
<h4 id="전체-최적화-목표">전체 최적화 목표</h4>
<p>전체 Loss Runction은 다음과 같음
<img src="https://velog.velcdn.com/images/sangjun_moon/post/b1973656-0c4f-489a-90c8-b2752f218349/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/932afed0-1f74-4eee-9765-860463ffdfcb/image.png" alt=""></p>
<p>$\Gamma$는 pearson correlation coefficient로 Q 전/후 텐서의 유사도 측정 지표로 사용됨</p>
<h4 id="alternative-searching-method">Alternative searching method</h4>
<p>위의 식(11)을 해결하기 위해,
weight scale factor 최적화
後
input scale factor 최적화</p>
<h4 id="bias-correcition">Bias Correcition</h4>
<p>Q로 인해 발생하는 오차를 출이기 위해, 최적의 scale factor를 찾고, biased 된 error를 보정</p>
<p>Q errors는 다음과 같아,
<img src="https://velog.velcdn.com/images/sangjun_moon/post/95ab23b2-567a-403d-805e-6054c778fcf5/image.png" alt=""></p>
<p>Q된 한 layer의 출력 $\hat{O}$의 error 기댓값은 다음과 같음
<img src="https://velog.velcdn.com/images/sangjun_moon/post/d24b7360-b0fc-4985-882a-88bbd29eb149/image.png" alt=""></p>
<p>∵ 
<img src="https://velog.velcdn.com/images/sangjun_moon/post/b53f95b3-9fa8-40ad-97a4-36b65ebbc5e2/image.png" alt=""></p>
<p>⇒ $\hat{O}-\mathbb{E}[\hat{O}]$ 를 통해, 보정!!!</p>
<h3 id="33-nuclear-norm-based-mixed-precision-quantization">3.3 Nuclear Norm Based Mixed-Precision Quantization</h3>
<p>MHA, MLP를 MPQ 대상으로 보고,
두 모듈의 sensitivity를 계산하기 위해,
nuclear norm 사용</p>
<p>Nuclear norm이란 SVD의 $\Sigma$ matrix의 tr($\Sigma$)임</p>
<p>즉, 
<img src="https://velog.velcdn.com/images/sangjun_moon/post/3d460c05-2b80-44f7-8a96-e114064395eb/image.png" alt="">임</p>
<p>위 nuclear norm을 
특정 MPQ 설정에서 model 전체에 얼마나 큰 perturbation을 일으키는지 측정하는 
종합 sensitivity indicator $\Omega$에 적용</p>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/b56c8096-0f54-4d40-8041-b02a1e939e63/image.png" alt=""></p>
<p>$tr()$: nuclear norm
$||\hat{X}-X||^2_2$ : Q error의 곱</p>
<p>⇒
<img src="https://velog.velcdn.com/images/sangjun_moon/post/6217e073-3521-433d-8166-4dc1029db8b9/image.png" alt=""></p>
<h2 id="4-exprimental-results">4 Exprimental results</h2>
<p>이태까지 Vit의 PTQ 연구가 없어서, 기존 CNN을 위한 PTQ 기법들과 비교함</p>
<h3 id="41-implementation-details">4.1 Implementation details</h3>
<p>생략</p>
<h3 id="42-results-and-analysis">4.2 Results and Analysis</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/66d4c232-47e1-409c-8774-f327545bbf51/image.png" alt=""></p>
<h3 id="43-ablation-study">4.3 Ablation study</h3>
<p><img src="https://velog.velcdn.com/images/sangjun_moon/post/9d0f32a6-6dea-44eb-90c8-72a99669b387/image.png" alt=""></p>
<h2 id="5-conclusion">5 Conclusion</h2>
<p>생략</p>
]]></description>
        </item>
    </channel>
</rss>