<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>min-soku.log</title>
        <link>https://velog.io/</link>
        <description>많이 배우고 싶습니다</description>
        <lastBuildDate>Sun, 08 Feb 2026 12:36:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. min-soku.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/min-soku" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Learning to Prune Deep Neural Networks via Layer-wise Optimal Brain Surgeon]]></title>
            <link>https://velog.io/@min-soku/Learning-to-Prune-Deep-Neural-Networks-via-Layer-wise-Optimal-Brain-Surgeon</link>
            <guid>https://velog.io/@min-soku/Learning-to-Prune-Deep-Neural-Networks-via-Layer-wise-Optimal-Brain-Surgeon</guid>
            <pubDate>Sun, 08 Feb 2026 12:36:32 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>임베디드 시스템 분야에서 크기가 작으면서 정확한 모델을 개발하는 방법은 매우 중요해졌다.
이전 연구에서 몇 가지 괜찮은 결과가 나왔지만, 대부분 pre-trained 모델을 크게 압축시키지 못하거나 compression된 모델의 성능을 다시 끌어올리기 위해 re-training과정을 거쳐야 한다.</p>
<p>본 논문에서는 layer별 loss function의 2차 미분(Hessian)을 기반으로 독립적으로 pruning을 수행하는 방법을 제안한다.</p>
<p>본 방법론에서는 pruning 후 최종 발생한 loss가 layer별 loss의 선형 조합에 의해 제한되어 가벼운 재학습만으로도 기존의 정확도를 회복할 수 있음을 입증한다.</p>
<h1 id="introduction">Introduction</h1>
<p>DNN의 크기가 엄청나게 커지면서 많은 수의 파라미터는 메모리와 계산 비용을 많이 들게한다.
연구자들은 DNN 내 redundancy를 파헤치도록 유도하고 있다.
이는, 신경 과학에 따르면 인간의 뇌에는 상당한 중복 뉴런이 존재하며, 기억은 특정 시냅스의 소멸과 관련이 있을 수 있다고 지적하는 것에서 시작된다.</p>
<blockquote>
<p>따라서, 실험을 통해 신중하게 설계된 기준에 따라 파라미터를 잘 잘라내면 예측의 손실이 거의 없이 compress할 수 있다.</p>
</blockquote>
<p>하지만, 최적의 pruning 방법을 찾는 것은 파라미터의 크기 측면에서 봤을 때, pruning을 위한 search space가 기하급수적으로 늘어나기 때문에 NP-hard문제이다.
최근 연구는 최적에 가까운 pruning을 위한 효율적인 알고리즘을 개발하는 데 중점을 두고 있다.</p>
<p>대부분의 기존 방식은 loss, magnitude와 같은 pruning을 위한 파라미터를 선택하는 것이 일반적이다.</p>
<blockquote>
<p><strong>Heuristic하게 설계</strong>되어, pruning 후에도 성능이 유지된다는 보장이 없다.</p>
<blockquote>
<p>Heuristic하다 : 이론적으로 최적임/항상 맞음이 증명된 규칙이 아니라, 경험적 직관·관찰·실험을 바탕으로 “그럴듯하게 잘 되도록” 만든 규칙(기준)</p>
<ul>
<li>Magnitude 기반 pruning은 가중치가 작으면 덜 중요할 것이라는 intuition에서 온 방법이다. 하지만, 작은 가중치도 중요한 역할을 한다는 반례가 있기 때문에 heuristic한 방법이다.</li>
</ul>
</blockquote>
</blockquote>
<p>본 논문에서는 세 가지 목표를 달성하기 위한 새로운 layer-wise pruning을 제안</p>
<ol>
<li><p>각 layer에 대해 pruning 후 파라미터를 매우 compress 할 수 있으며, loss가 작다.</p>
<blockquote>
<p>Taylor 급수를 통해 loss function의 변화를 근사화하고, 2차 도함수를 기반으로 중요하지 않은 가중치를 식별</p>
<blockquote>
<p>모든 파라미터에 대한 hessian 행렬의 역수인 2차 도함수를 계산하는 건 높은 계산 비용 발생하기 때문에, 특정 layer의 파라미터에 대해서만 계산하도록 제한</p>
</blockquote>
</blockquote>
</li>
<li><p>각 layer별 loss 측면에서(layer마다 기존 모델의 출력과 비슷하게 만들도록 하여), pruning된 모델의 성능을 이론적으로 보장</p>
<blockquote>
<p>2차 도함수를 사용하는 layer별 pruning 프레임워크 사용시, pruning 전후로 성능이 약간만 떨어짐을 실증적으로 입증 가능</p>
</blockquote>
</li>
<li><p>모델이 pruning된 후, 원래 성능을 회복하기 위한 가벼운 re-training만 필요.</p>
<blockquote>
<p>2번에서 성능이 약간만 떨어짐을 입증하였기 때문에, 약간의 re-training만 필요함도 입증</p>
</blockquote>
</li>
</ol>
<h1 id="3-layer-wise-optimal-brain-surgeon">3. Layer-wise Optimal Brain Surgeon</h1>
<h2 id="31-problem-statement">3.1 Problem Statement</h2>
<p>N개의 인스턴스로 구성된 training dataset ${(x_j,y_j)}^n_{j=1}$과
L개의 layer로 구성된 신경망이 주어졌을 때, $\theta$는 가중치 $W$의 벡터화를 나타낸다.</p>
<p>신경망의 input : $X=[x_1,...,x_n]\in \R^{d\times n}$
신경망의 output : $Y\in \R^{n\times 1}$</p>
<p>Forward시 : $Y=\sigma (Z)$</p>
<blockquote>
<p>$Z=W^T_lY_{l-1}$</p>
</blockquote>
<h2 id="layer-wise-error">Layer-wise Error</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[Designing Object Detection Models for TinyML: Foundations, Comparative Analysis, Challenges, and Emerging Solutions]]></title>
            <link>https://velog.io/@min-soku/Designing-Object-Detection-Models-for-TinyML-Foundations-Comparative-Analysis-Challenges-and-Emerging-Solutions</link>
            <guid>https://velog.io/@min-soku/Designing-Object-Detection-Models-for-TinyML-Foundations-Comparative-Analysis-Challenges-and-Emerging-Solutions</guid>
            <pubDate>Thu, 08 Jan 2026 12:11:07 GMT</pubDate>
            <description><![CDATA[<h2 id="hardware-aware-nas">Hardware-aware NAS</h2>
<p>최근 NAS의 발전으로 엄격한 하드웨어 기준의 제약 조건도 충족하도록 설계된 Hardware-aware NAS가 등장</p>
<p>주로 task 성능 향상에 초점을 맞춘 기존의 NAS와 다르게 HNAS는 배포 제약 조건을 NAS의 탐색 프로세스에 통합하여 성능과 효율성을 기반으로 최적의 아키텍처를 선택할 수 있다.</p>
<p>이러한 NAS는 MCU와 같은 리소스 제약이 있는 환경에서 중요하다</p>
<ol>
<li><p>Micronets : 계산 복잡도를 제한하여 저전력 장치에서 모델을 실행할 수 있게하는 검색 기법 사용</p>
</li>
<li><p>MCUNet : 2단계 검색 전략</p>
<blockquote>
<p>최적의 작업 성능을 위한 아키텍처 설계 후 MCU 메모리 제한에 맞게 아키텍처를 잘라냄</p>
</blockquote>
</li>
</ol>
<p>최근 연구에서는 VIT기반 지식 증류 전략에 LLM을 NAS에 활용하는 프레임워크 있음
3가지 단계로 진행되는 프레임워크</p>
<ol>
<li>탐색 단계 : LLM이 아키텍처 탐색을 안내</li>
<li>Full training 단계 : 탐색 단계에서 뽑은 최고 후보를 학습해서 성능 올림</li>
<li>KD 단계 : 사전 학습된 ViT teacher가 student 모델에 지식 증류</li>
</ol>
<p>탐색 시간을 12.5일에서 1.5으로 단축시키고, SRAM이 320KB인 MCU에서 배포 가능성을 보임</p>
<blockquote>
<p>결론 : 임베디드 환경에서 HNAS가 유망하고, 향후 연구 방향을 열었다.</p>
</blockquote>
<h1 id="optimizing-object-detection-for-tinyml">Optimizing Object Detection for TinyML</h1>
<p>앞 섹션에서는 다른 컴퓨팅 환경에 맞춰 설계된 객체 탐지 최적화 기법들을 살펴봄</p>
<ul>
<li>클라우드환경</li>
<li>엣지 AI</li>
<li>모바일 AI
<img src="https://velog.velcdn.com/images/min-soku/post/e5380860-82dc-4af8-b386-c7f56513a153/image.png" alt=""></li>
</ul>
<p>각 환경별로 연산 성능과 메모리 자원 수준이 크게 다르다.</p>
<p>클라우드 AI와 다르게 TinyML은 엄격한 제약 하에서 동작하며, 일반적으로 256~512KB메모리와 1MB 수준의 저장공간 정도만 제공되는 경우가 많다.</p>
<p>TinyML을 위한 객체 탐지 모델 최적화는 연산량을 줄이는 것뿐 아니라, 모델이 MCU의 제한된 메모리 안에 실제로 들어가도록 보장해야 한다.</p>
<p>앞 섹션에서 언급된 최적화 기법들을 적용하면, 객체 탐지 모델은 TinyML 환경 배포에 맞게 효과적으로 설계될 수 있지만, YOLO처럼 원래 GPU급 장치의 실시간 탐지를 위해 설계된 전통적인 모델들은 상당한 수정이 필요하다.</p>
<hr>
<p>YOLO는 시간이 지나면서 nano/small과 같이 다양한 축소 버전이 등장했지만, 그럼에도 YOLO 계열의 모델들은 TinyML 응용에 부담이 되는 경우가 많다.</p>
<p>TinyML에서는 SRAM이 activation의 크기를 제한하고, Flash 메모리는 모델의 파라미터 크기를 제한한다.
또한 MCU는 일반 노트북의 CPU에 비해 훨씬 느리다.</p>
<p>모델 pruning은 복잡도를 줄이기 위한 핵심 전략으로 떠올랐다.</p>
<blockquote>
<p>예를 들어, 필터 pruning을 도입해 구조적인 압축을 가능하게 하고, 성능을 크게 해치지 않으면서 추론 지연시간을 줄여 TinyML 객체 탐지에 적합하다고 말한다.</p>
<p>또한, 보조 네트워크(auxiliary network)를 활용한 depth pruning은 개별 필터가 아닌, 레이어 전체를 제거하고, 보조 네트워크가 정확도 손실을 보완하는 방식이다.</p>
</blockquote>
<p>이러한 기법들은 MCU에서도 비교적 성능 저하를 최소화하며 더 정교한 모델을 돌릴 수 있게 한다.</p>
<hr>
<p>계산 제약 외에도 TinyML 객체 탐지는 학습 데이터가 제한적이라 과적합 및 성능 저하 문제가 있는데, 이를 위해 데이터셋 distillation(데이터셋 증류)가 제안된다.</p>
<p>매우 작지만, 정보가 풍부한 학습 데이터를 합성하여, 저메모리 온디바이스 학습을 가능하게 하고, 큰 데이터셋의 의존을 줄인다.</p>
<blockquote>
<p>특히, 연결이 불안정해 클라우드 업데이트를 자주하기 어려운 IoT기반 객체 탐지에 유용하다</p>
</blockquote>
<hr>
<h2 id="mcunet-yolo">MCUNet-YOLO</h2>
<p>MCUNet-YOLO는 MCUNetV1 프레임워크를 기반으로 개발되었다.</p>
<p>MCUNetV1은 자원이 제한된 MCU에서 딥러닝 모델을 배포할 수 있도록 TinyNAS와 TinyEngine(추론 엔진)을 통합해 최적화한다.</p>
<ul>
<li>TinyNAS는 2단계 NAS 방법으로, 모바일과 임베디드 플랫폼의 자원 제약을 만족하도록 설계된 특수학 탐색 공간을 정교화하면서 시작한다.<blockquote>
<p>이 탐색 공간은 “블록 조합”으로 구성할 수 있게 해서 다음을 선택 가능:</p>
<ul>
<li>다양한 CONV 유형(일반/Depthwise separable/Moblie inverted bottleneck)</li>
<li>커널 크기(3x3/5x5)</li>
<li>Skip connection</li>
<li>레이어 수 등</li>
</ul>
</blockquote>
</li>
</ul>
<blockquote>
<p>탐색 공간을 커버하는 방식은</p>
<ul>
<li>입력 해상도 R ={48,64,80,...,224}</li>
<li>채널 scaling 배수 W={0.2,0.3,...,1.0}</li>
</ul>
<p>이 조합으로 108개의 설정을 먼저 커버한 뒤, 각 설정 내에는 엄청나게 많은 네트워크 후보가 존재한다.</p>
</blockquote>
<p>이렇게 방대한 탐색 공간에서 최적 모델을 효율적으로 찾기 위해, ont-shot NAS를 사용한다.</p>
<blockquote>
<p>가능한 모든 서브네트워크를 포함하는 슈퍼넷을 가중치 공유 방식으로 학습하여 각 네트워크의 성능을 빠르게 추정한 후, 진화적 탐색을 통해 정확도와 자원 제약 간 균형이 가장 좋은 모델을 선택한다.</p>
</blockquote>
<hr>
<p>TinyEngine은 MCU용 메모리 efficieny 추론 라이브러리로, 각 후보 네트워크를 평가할 때, TinyEngine을 사용해 메모리 스케줄링을 최적화하고, 최적 피크 메모리 사용량을 측정한다.</p>
<p>일반 엔진은 layer-by-layer로 최적화하는 것과 다르게 TinyEngine은 네트워크 전체 토폴로지 기반으로 최적화한다.</p>
<blockquote>
<p>토폴로지 기반:모델 전체를 노드로 보고 각 중간 activation이 언제 생성되고 언제 마지막으로 사용되는지를 전부 파악한뒤 메모리 스케줄링을 결정(어떤 걸 덮어 씌워도 되고, 어떤 걸 먼저 계산하고,,.. 등)</p>
</blockquote>
<p>이를 통해, 메모리 사용은 최대 3.4% 감소하고, 추론 속도는 1.7~3.3배까지 증가하였다.</p>
<p>이렇게 만들어진 MCUNetV!을 YOLOv2 백본으로 사용하여 ImageNet 분류에서 70.1%의 성능과 객체 탐지에서 51.4%의 성능을 보임</p>
<hr>
<h2 id="mcunetv2">MCUNetv2</h2>
<p>MCUNetv2는 MCU에서 객체 탐지를 더 최적화하기 위해 더 개선하였다.
대표적으로, 패치 기반 추론 전략으로 layer간 메모리 분포 불균형 분제를 해결한다.
일반적인 layer-by-layer 실행은 네트워크 초반부에서 메모리 병목을 유발할 수 있는데, MCUNetv2는 layer를 작은 패치로 나눠 처리한다.</p>
<blockquote>
<p>이를 통해 메모리 요구량을 크게 낮추고, 메모리가 제한된 장치에서도 고해상도 처리를 가능하게 한다.</p>
</blockquote>
<p>패치기반 추론으로 인한 연산 오버헤드를 완화하기 위해, Receptive field를 재분배하는 방법도 제안하여, 초반 layer의 Receptive field를 전략적으로 줄여 입력 패치 크기와 연산 빈도를 낮추고, 후반부에서 Receptive field를 다시 늘려 성능을 유지하여 대규모 객체 탐지에서 높은 성능을 유지한다.</p>
<p>MCUNetv2는 NAS와 추론 스케줄링을 통합하여, 아키텍처 설계와 실행 전략을 동시에 최적화함으로써 MCU의 엄격한 메모리, 지연시간 제약에 대해 효율적인 성능을 제공한다.</p>
<p>MCUNetv2는 ImageNet에서 71.7%로 더 좋은 결과를 보였고, 객체 탐지에서는 YOLOv3의 백본으로 사용되어 68.3%의 성능을 보였다.</p>
<hr>
<h2 id="tinyissimoyolo">TinyissimoYOLO</h2>
<p>TinyissimoYOLO는 MCU의 극단적 자원 제약을 겨냥한 초경량·고효율 객체탐지 모델</p>
<p>설계 특징은 입력 해상도, 탐지 클래스 수, 첫 layer 커널 크기 등을 유연하게 조절가능하여 정확도와 연산량 간 트레이드오프를 하드웨어에 맞게 조정가능하다.</p>
<p>핵심적인 최적화로는 네트워크 전체에 int 8 양자화를 적용하여 32bit 대비 메모리와 모델 크기가 4배 감소하였다.</p>
<p>양자화는 QuantLab 프레임워크를 활용한 QAT를 수행하여
8bit모델이 full-precision 모델에 가까운 정확도를 유지하게 하면서도, 정수 연산만으로 효율적인 배포가 가능하게 한다.</p>
<blockquote>
<p>QuantLab은 full-precision모델을 QAT용 fake-quantized 모델로 변환 후 배포 가능한 integer 모델로 자동 변환하여, 다양한 하드웨어에 쉽게 배포할 수 있게 한다.</p>
</blockquote>
<blockquote>
<p>fake-quantized
학습할 때는 float으로 계싼하지만 양자화된 척 흉내를 내는 것</p>
<blockquote>
<p>학습 중에 정수로 계산은 안하지만, 정수로 바꿨을 때 생길 오차를 미리 겪게 하는 것</p>
</blockquote>
</blockquote>
<p>TinyissimoYOLO는 객체 탐지에서는 56.4%의 성능과 연산량은 55MMac을 자랑하며 초저전력 MCU에서 실시간 객체 탐지에 적합하다.</p>
<hr>
<h2 id="etinynet-ssd">EtinyNet-SSD</h2>
<p>EtinyNet-SSD는 MCU에서 효율적인 객체 탐지를 위해 설계된 모델로</p>
<ul>
<li>DLB</li>
<li>ASQ
로 구성되어 있다</li>
</ul>
<ol>
<li><p>DLB(Depthwise Linear Block)</p>
<blockquote>
<p>Depthwise Conv layer를 linear layer와 자연스럽게 결합하여 모델의 연산량을 크게 줄이면서도 정확도를 유지시킨다.</p>
<blockquote>
<p>이러한 설계 덕분에 네트워크가 가볍고 효율적이어서 MCU 배포에 적합</p>
</blockquote>
</blockquote>
</li>
<li><p>ASQ(Adaptive Scale Quantization)</p>
<blockquote>
<p>입력 데이터에 따라 가중치와 활성화값의 양자화 스케일을 동적으로 조정하는 양자화 기법으로,
양자화된 파라미터의 정밀도를 상황에 맞게 최적화하여 메모리 사용량과 연산 오버헤드를 최소화한다.</p>
</blockquote>
</li>
</ol>
<p>EtinyNet의 백본을 SSD 아키텍처와 결합하여 객체 탐지 성능을 끌어올리며, DLB와 ASQ를 함께 적용하여 MCU 자원 내에서 효율적인 성능 달성</p>
<p>객체 탐지에서 56.4% 성능을 보여준다.</p>
<hr>
<h2 id="xinet-yolov7">XiNet-YOLOv7</h2>
<p>자원이 제한된 장치(MCU 포함)에서의 객체 탐지를 위해
하드웨어 효율을 최우선으로 고려한 YOLOv7 계열 최적화 접근을 제시.</p>
<ol>
<li><p>연산자(operators) 선택을 하드웨어 관점에서 재설계</p>
<blockquote>
<p>표준/Depthwise/Pointwise convolution을 광범위하게 분석해 에너지 효율과 성능이 좋은 연산자 조합을 기반으로 아키텍처를 구성</p>
</blockquote>
</li>
<li><p>HAS(Hardware-Aware Scaling)</p>
<blockquote>
<p>HAS는 RAM, Flash, <strong>연산량(operations)</strong>을 서로 독립적으로 스케일링할 수 있게 해주는 기법.
즉, “모델을 줄인다”가 아니라,
어떤 하드웨어는 RAM이 병목이면 RAM 중심으로,
어떤 하드웨어는 Flash가 병목이면 Flash 중심으로,
어떤 하드웨어는 연산량이 병목이면 MACs 중심으로
각 자원 예산에 맞춰 따로 조절 가능하게 만드는 접근.</p>
</blockquote>
</li>
</ol>
<p>“S / M / L” 세 가지 변형 제공
S: 저전력·저에너지 소비 중심 (XiNet-YOLOv7-S)
L: 더 높은 정확도 중심 (XiNet-YOLOv7-L)
(M은 중간 지점)</p>
<p>S / M / L이 각각 <strong>객체 탐지 성능 54% / 67% / 74.9%</strong>를 달성</p>
<p>TinyML 환경에서 에너지/메모리 사용을 크게 줄이면서도 실시간 OD에 적합함을 강조.</p>
<hr>
<h1 id="open-challenges-and-future-works">Open Challenges and Future Works</h1>
<p>최근 객체 탐지(OD)는 대규모 데이터셋에서 SOTA 성능을 낼 만큼 크게 발전했지만, 이를 임베디드 시스템/TinyML에 배포하는 건 여전히 어렵다. 이유는 메모리, 연산량, 에너지 제약이 너무 강하기 때문이다</p>
<p>한편 Transformer 기반 모델, 생성형 AI, VLM, 하드웨어 인지 최적화 같은 최신 기법들이 새로운 가능성을 열고 있지만, 극한 제약 환경에서 실시간성·효율·적응성을 동시에 만족하려면 추가 연구가 필요하다.</p>
<p>이 절에서는 TinyML/임베디드 OD 배포의 미해결 과제를 정리하고, 해결을 위한 연구 방향을 제안한다.</p>
<h2 id="1-고해상도-이미지-처리">1. 고해상도 이미지 처리</h2>
<ul>
<li>문제</li>
</ul>
<p>해상도를 낮추면 연산은 쉬워지지만 작은/먼 객체 탐지가 어려워짐.</p>
<ul>
<li>미래 방향</li>
</ul>
<p>상황에 따라 해상도를 바꾸는 적응형 해상도 전략(context/task 기반 동적 조절)</p>
<blockquote>
<p>전체 고해상도를 다 처리하지 말고,
특징 수준에서 <strong>관심 영역(ROI)</strong>만 찾아
그 부분만 고해상도로 처리하는 방식(예: ESOD)</p>
</blockquote>
<p>TinyML에서는 “필요한 공간 영역만 켜서” 처리하는 컨텍스트 인지 패치 기반 처리로, MCU에서도 고해상도 처리를 가능하게 하자는 제안</p>
<h2 id="2-에너지-효율">2. 에너지 효율</h2>
<ul>
<li>문제</li>
</ul>
<p>IoT/배터리 장치에서는 전력이 핵심인데, 전통 DNN은 전력 소모가 큼.</p>
<ul>
<li>미래 방향</li>
</ul>
<p>스파이킹 신경망(SNN) 기반의 객체 탐지 모델을 최적화하고, 일반 뉴런과 스파이킹 뉴런을 섞는 하이브리드 구조를 탐색하는 데 초점을 맞춰야 한다.</p>
<blockquote>
<p>SNN
일반적인 신경망은 입력과 feature가 연속적인 실수값으로 매번 계산되지만, SNN은 정보가 0/1과 같은 짧은 이벤트(스파이크)로 전달되어, 뉴런이 이 스파이크를 누적하다가 임계치를 넘으면 스파이크를 다시 전달하는 방식</p>
</blockquote>
<h2 id="3-다양한-환경에서의-강건성">3. 다양한 환경에서의 강건성</h2>
<ul>
<li>문제</li>
</ul>
<p>조명/날씨 변화, 가림(occlusion) 등 현실 조건이 바뀌면 성능이 쉽게 흔들림.</p>
<ul>
<li>미래 방향</li>
</ul>
<ol>
<li>전이학습, 도메인 적응으로 환경 차이를 흡수</li>
<li>강한 데이터 증강으로 현실의 어려운 조건을 학습 중에 시뮬레이션하여 일반화를 강화한다.</li>
</ol>
<h2 id="4-실시간-처리">4. 실시간 처리</h2>
<ul>
<li>문제</li>
</ul>
<p>자율주행/감시 같은 응용은 낮은 latency가 필수.</p>
<ul>
<li>미래 방향</li>
</ul>
<p>인간 뇌 처리방식과 유사한 SN이 빠른 반응에 잠재력이 있어서 SNN을 실시간 객체 탐지에 맞게 최적화한다.</p>
<h2 id="5-데이터셋-한계와-편향">5. 데이터셋 한계와 편향</h2>
<ul>
<li>문제</li>
</ul>
<p>임베디드/TinyML에 특화된 크고 다양한 데이터셋 부족 → 모델 편향/성능 제한.</p>
<ul>
<li>미래 방향</li>
</ul>
<ol>
<li>합성 데이터 생성 + 데이터 증강으로 다양성과 품질 강화</li>
<li>비지도/반지도 학습으로 라벨 의존도를 줄이기</li>
</ol>
<h2 id="6-하드웨어-소프트웨어-공동-설계">6. 하드웨어-소프트웨어 공동 설계</h2>
<ul>
<li>문제</li>
</ul>
<p>임베디드 OD 최적화는 HW와 SW의 결합이 결정적.</p>
<ul>
<li>미래방향</li>
</ul>
<p>LLM을 아키텍처 탐색에 활용하면, 특정 하드웨어에 맞는 구조를 찾는 탐색 비용을 줄이고 더 빨리 효율적인 모델을 찾을 수 있다.</p>
<h2 id="7-ai-가속기-칩">7. AI 가속기 칩</h2>
<ul>
<li>현황</li>
</ul>
<p>MCU에 통합되는 전용 가속기가 객체 탐지 효율을 크게 높이고 있는데 GPU나 TPU와 같은 고전력 장치가 아니라 MCU급 배포에 맞춘 latency가 낮고 저전력인 가속이 포인트이다.</p>
<ul>
<li>미래 방향</li>
</ul>
<p>다양한 가속기에 맞춘 객체 탐지 모델 최적화와 함께 하드웨어의 구성과 메모리 계층 등이 속도와 정확도에 미치는 영향까지 함께 평가해야 한다.</p>
<h2 id="8-하드웨어-인지-공동-설계와-risc-v-기회">8. 하드웨어 인지 공동 설계와 RISC-V 기회</h2>
<ul>
<li>문제 의식</li>
</ul>
<p>임베디드에서 실시간+고효율 객체탐지를 하려면 알고리즘 설계와 하드웨어를 강하게 결합해야 하는데, 
범용적인 알고리즘을 억지로 끼워맞추기보다, 처음부터 하드웨어 제약을 고려한 하드웨어 지향 모델이 중요하다</p>
<ul>
<li>미래 방향</li>
</ul>
<p>연산 효율과 하드웨어 비용을 함께 최적화하는 HNAS가 주목받는다.</p>
<p>RISC-V 같은 오픈소스 ISA는 모듈성/유연성/저비용 커스터마이징을 제공해 임베디드 AI에 유리하다</p>
<blockquote>
<p>ISA는 <strong>Instruction Set Architecture(명령어 집합 구조)</strong>의 약자로 CPU가 “어떤 기계어 명령을 이해하고”, 그 명령이 “어떤 동작을 한다고 약속하는 규칙(표준)</p>
</blockquote>
<p>즉, RISC-V 같은 오픈(표준) ISA는 “CPU가 이해하는 명령어 규칙”을 공개해 둔 거라서, 누구나 그 규칙을 기반으로 자기 목적(예: TinyML)에 맞는 맞춤형 프로세서/가속기를 설계할 수 있게 해준다</p>
<h2 id="9-tinyml을-위한-transformer-기반-객체탐지-설계">9. TinyML을 위한 Transformer 기반 객체탐지 설계</h2>
<ul>
<li>배경</li>
</ul>
<p>Transformer 계열은 여러 비전 과제에서 CNN을 넘어서는 성능을 내면서, <strong>객체탐지(OD)</strong>에도 확산되고 있다</p>
<ul>
<li>문제</li>
</ul>
<p>MCU급 장치에서는 Transformer 기반 탐지기는 연산량/메모리 요구량 때문에 배포가 어렵다.</p>
<p>CNN은 연산이 “국소적(local)”인 반면, Transformer의 self-attention은 입력 크기에 따라 <strong>연산/메모리 비용이 대체로 𝑂(𝑁^2)</strong>로 커져
제한된 SRAM
제한된 전력 예산
에서 비효율적이다</p>
<ul>
<li>연구 방향</li>
</ul>
<ol>
<li>KD(지식 증류)로 Transformer 표현을 압축 모델로 이전</li>
<li>TinyML 친화 Transformer 기법 적용 사례: MCUFormer</li>
<li>모델 구조와 하드웨어 역량 간 <strong>정렬(alignment)</strong>을 맞추는 연구가 필요.</li>
<li>Transformer–CNN 하이브리드, Remote 센싱 OD 등에 적용 및 확장</li>
<li>효율적인 어텐션을 도입하여, 전역적인 특징을 사용하는 것은 유지하되, 메모리 오버헤드는 감소시킨다.</li>
<li>NAS로 TinyML 최적 Transformer 구조 찾기</li>
<li>MCU용 연산 라이브러리 활용</li>
</ol>
<h2 id="10-tinyml-od의-다음-단계-멀티모달-학습--생성형-ai">10. TinyML OD의 다음 단계: 멀티모달 학습 &amp; 생성형 AI</h2>
<p>Transformer를 단순히 “가볍게” 만드는 것 외에도, TinyML OD의 다음 목표는 생성형 AI와 멀티모달 AI를 통해 탐지의 능력을 확장하는 것</p>
<ul>
<li>왜?</li>
</ul>
<p>TinyML 환경은 학습 데이터가 부족하기 쉬워서 작은 탐지기는 쉽게 과적합하거나 일반화가 약해질 수 있음.</p>
<ul>
<li>연구 방향</li>
</ul>
<ol>
<li>생성형 AI로 데이터 품질/다양성 향상</li>
<li>멀티모달 KD : 단순히 모델 크기만 줄이는 distillation이 아니라, VLM/대형 Transformer의 <strong>크로스도메인 지식(텍스트·컨텍스트 추론)</strong>까지 전달하는 방향이 유망</li>
<li>Transformer OD 전용 압축을 TinyML 환경에 맞게 재설계해야 함</li>
<li>제로샷 VLM이 재학습 없이 새로운 클래스도 탐지하는(open-set) 방향을 가능하게 할 수 있으며, TinyML OD를 더 유연하고 확장 가능한 시스템으로 만들 잠재력이 있다고 봄.</li>
</ol>
<hr>
<h1 id="conclusion">Conclusion</h1>
<p>이 논문은 임베디드 환경에서 객체탐지 성능을 높이기 위한</p>
<p>양자화(quantization)</p>
<p>프루닝(pruning)</p>
<p>KD(지식 증류)</p>
<p>NAS
같은 모델 압축/최적화 기법들을 포괄적으로 서베이했다.</p>
<p>또한 소비자 전자기기, IoT, 엣지 컴퓨팅 맥락에서</p>
<p>“정확도를 유지하면서 효율을 올리는 데” 이 기법들이 어떤 효과가 있는지 분석했고,</p>
<p>최적화 성공을 평가하는 핵심 지표들도 정리했으며,</p>
<p>각 방법의 실용적 영향에 대한 비교 인사이트를 제공하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MCUNetV2: Memory-Efficient Patch-based Inference for Tiny Deep Learning]]></title>
            <link>https://velog.io/@min-soku/MCUNetV2-Memory-Efficient-Patch-based-Inference-for-Tiny-Deep-Learning</link>
            <guid>https://velog.io/@min-soku/MCUNetV2-Memory-Efficient-Patch-based-Inference-for-Tiny-Deep-Learning</guid>
            <pubDate>Wed, 17 Dec 2025 18:49:54 GMT</pubDate>
            <description><![CDATA[<h1 id="mcu란">MCU란?</h1>
<blockquote>
<p>유튜브 참고 자료 : <a href="https://youtu.be/dcNk0urQsQM?si=6-rqgMvH7yPFEKrC">https://youtu.be/dcNk0urQsQM?si=6-rqgMvH7yPFEKrC</a>
IBM 블로그 자료 : <a href="https://www.ibm.com/kr-ko/think/topics/microcontroller">https://www.ibm.com/kr-ko/think/topics/microcontroller</a></p>
</blockquote>
<p><strong>MCU(Micro Controller Unit)</strong></p>
<blockquote>
<p>하나의 칩 안에 CPU + 메모리 + 주변 장치가 모두 들어있는 소형 컴퓨터
<img src="https://velog.velcdn.com/images/min-soku/post/d44a6141-d5de-4914-b879-10841eb828f5/image.png" alt="">
이미지 출처 : <a href="https://datacapturecontrol.com/articles/io-devices/microcontrollers/overview">https://datacapturecontrol.com/articles/io-devices/microcontrollers/overview</a></p>
<ul>
<li>작은 컴퓨터를 하나의 칩으로 만든 것으로 생각하면 직관적</li>
</ul>
</blockquote>
<h2 id="mcu-구성-요소">MCU 구성 요소</h2>
<ol>
<li><p>CPU (중앙처리장치)</p>
<blockquote>
<ul>
<li>컴퓨터의 두뇌라고도 불리며, 명령을 실행하고 작업을 제어하는 핵심 구성 요소</li>
</ul>
</blockquote>
</li>
<li><p>메모리</p>
<blockquote>
<ul>
<li>프로그램 메모리와 달리 시스템 전원이 끊기면 손실될 수 있는 임시 데이터를 저장하는 휘발성 메모리(RAM) 
(RAM : 프로그램이 실행될 때 쓰는 작업공간)<blockquote>
<ul>
<li>SRAM : 작지만 빨라야 하는 Cache</li>
<li>DRAM : 크게 많이 필요한 메인 메모리</li>
</ul>
</blockquote>
</li>
<li>전원이 꺼져도 유지되는 프로그램 코드를 저장하는 비휘발성 Flash 메모리가 포함되어 있음</li>
</ul>
</blockquote>
</li>
<li><p>주변 장치</p>
<blockquote>
<ul>
<li>사용 목적에 따라 타이머/카운터(시간 측정, PWM 생성), ADC(아날로그 -&gt; 디지털 변환 센서), I/O 인터페이스, 통신 프로토콜(UART) 등 포함될 수 있음</li>
</ul>
</blockquote>
</li>
</ol>
<h2 id="micro-controller-vs-micro-processor">Micro Controller vs Micro Processor</h2>
<ul>
<li><p><strong>MCU</strong> : CPU + 메모리 + 주변 장치가 한 칩에 다 들어있는 완성형 제어용 컴퓨터</p>
<blockquote>
<p>칩 하나만 있으면 동작 가능 (All-in-one)
<img src="https://velog.velcdn.com/images/min-soku/post/4f90277c-a275-4af8-8164-41c058497d2b/image.png" alt="">
사진 출처 : <a href="https://www.youtube.com/watch?v=dcNk0urQsQM">https://www.youtube.com/watch?v=dcNk0urQsQM</a></p>
</blockquote>
</li>
<li><p><strong>MPU</strong> : 연산만 담당하는 CPU 칩 (메모리, 주변 장치는 외부에 따로 필요)</p>
<blockquote>
<p>시스템 동작에 필요한 장치들은 전부 외부에 있어 보드 전체가 필요(CPU-only)
<img src="https://velog.velcdn.com/images/min-soku/post/2f236e92-23cc-4fb3-a5a0-91fa19fbafee/image.png" alt="">
사진 출처 : <a href="https://www.youtube.com/watch?v=dcNk0urQsQM">https://www.youtube.com/watch?v=dcNk0urQsQM</a></p>
</blockquote>
</li>
</ul>
<h3 id="적용-분야-차이">적용 분야 차이</h3>
<ul>
<li><p><strong>MCU</strong> : &quot;특정하게 정해진 일&quot;을 안정적으로 반복하는 임베디드 시스템의 핵심</p>
<blockquote>
<p>디지털 카메라, 세탁기, 리모컨 등 수행될 작업이 미리 정의되어 있는 장치에서 사용
<img src="https://velog.velcdn.com/images/min-soku/post/329edbd6-7570-4965-8dac-747699e0f599/image.png" alt=""></p>
<blockquote>
<p>사진 출처 : <a href="https://www.youtube.com/watch?v=dcNk0urQsQM">https://www.youtube.com/watch?v=dcNk0urQsQM</a></p>
</blockquote>
<p>MCU는 입력값을 바탕으로 몇 가지 처리를 수행하고 그 결과를 출력함</p>
<blockquote>
<p>여기서 입력은 사용자 입력일 수도 있고, 센서에서 오는 입력일 수도 있음</p>
<ul>
<li>예를 들어, 전자레인지의 경우 출력과 시간을 설정하면 음식이 조리된 상태로 나옴</li>
</ul>
</blockquote>
</blockquote>
</li>
<li><p><strong>MPU</strong> : PC나 노트북과 같이 &quot;범용적인 컴퓨팅&quot; 중심으로 사용</p>
<blockquote>
<p>게임, 웹, 사진 편집, 문서 작업 등 MPU는 기본적으로 작업이 미리 정의되지 않은 복잡한 응용 분야에서 사용</p>
</blockquote>
</li>
</ul>
<h2 id="mcu의-병목-현상">MCU의 병목 현상</h2>
<p>MCU에서의 memory bottleneck은 CPU는 일할 준비가 됐는데, 메모리(Flash/SRAM)에서 데이터, 코드를 가져오거나 저장하는 속도/대역폭이 부족해서 CPU가 기다리는 현상을 말함</p>
<h3 id="주요-원인">주요 원인</h3>
<p><strong>1. Flash 메모리에서 실행할 때 느림</strong></p>
<blockquote>
<ul>
<li>Clock이란 MCU 내부 회로가 한 번 동작하는 박자로, CPU는 클럭에 맞춰 명령어를 한 단계씩 실행하고, 주변 장치도 클럭 기준으로 동작</li>
<li>MCU에서 코드는 보통 Flash 메모리에 있고, CPU는 Flash에서 명령어를 가져오며 실행하는데, Flash 메모리는 SRAM보다 느리다.</li>
</ul>
<p>CPU가 100MHz로 동작한다고 치면, 1사이클이 10ns인데, Flash가 명령어를 내주는데 30ns만큼 걸린다면, CPU는 10ns마다 명령어를 읽고 쓰려는데, Flash에서 30ns가 걸려서 CPU에서 Flash에 접근하기 위해 wait state가 발생하며 CPU가 기다리게 됨</p>
</blockquote>
<p><strong>2. SRAM 용량/대역폭 부족</strong></p>
<blockquote>
<ul>
<li>Buffer란 데이터를 잠깐 저장해두는 임시 공간인데, CPU에서 데이터를 처리하는 속도와 데이터가 들어오는 속도가 완벽하게 같지 않기 때문에, 중간에 잠깐 쌓아둘 통이 필요한데, 이 통이 Buffer이다.</li>
</ul>
<p>MCU의 SRAM은 일반적인 PC에서 사용되는 SRAM보다 용량이 더 작은데, CPU가 다른 작업을 하는 동안 데이터가 계속 들어오면 buffer가 금방 차버려, 데이터가 유실될 수 있음</p>
<blockquote>
<p>작은 buffer로 인해, 데이터를 쪼개서 자주 처리해야 해서, 오버헤드가 늘어남</p>
</blockquote>
</blockquote>
<p><strong>3. CPU가 I/O 복사를 하느라 바쁨</strong></p>
<blockquote>
<ul>
<li>주변(입출력 장치 I/O) 장치로부터 CPU가 처리해야 할 데이터들이 계속 들어오게 되는데, 그 데이터를 RAM에 쌓아야 한다.(MCU에서 말하는 RAM은 주로 SRAM)</li>
</ul>
<p>들어오는 데이터를 RAM에 운반하는 일을 CPU하게 하게 되면, CPU가 할당하는 시간의 대부분이 운반에 사용되어서 CPU가 해야할 계산 작업을 못함</p>
<blockquote>
<p>그래서 등장한 게 DMA이다. 현대 MCU에는 DMA를 지원(너무 작은 MCU는 없을 수도)</p>
<ul>
<li>DMA는 주변장치와 RAM 사이에서 데이터를 운반하는 일을 CPU대신 해주는 하드웨어</li>
</ul>
</blockquote>
</blockquote>
<p><strong>4. 버스/주변 장치가 메모리를 공유해서 충돌</strong></p>
<blockquote>
<ul>
<li>MCU 내부에는 데이터가 다니는 길인 버스가 있는데, CPU가 RAM을 읽고 쓰는 것도 이 버스를 쓰고, DMA가 데이터를 RAM으로 옮기는 것이 이 버스를 사용한다.</li>
</ul>
<p>CPU가 RAM에서 배열을 읽고 쓰는 중에 DMA가 데이터를 RAM에 쓰려고 하면 둘이 같은 버스를 놓고 경쟁하며 한 쪽은 기다려야 하는 상황 발생</p>
</blockquote>
<h1 id="abstract">Abstract</h1>
<p>MCU에서 초소형 딥러닝을 구현하는 것은 제한된 메모리 크기로 인해 어려운 과제이다.
메모리 병목 현상은 CNN 설계의 불균형한 메모리 분포로 인해 발생하는데,
CNN은 초반 layer에서 feature map의 HxW가 아직 크기 때문에 초반 몇 블록은 activation이 매우 커 메모리 사용량이 폭증한다.</p>
<blockquote>
<ul>
<li>CNN에서는 Conv 출력 feature map 자체를 activation이라고 부름<blockquote>
<p>CNN의 activation 메모리 : $Memory ∝ H \times W \times C$</p>
</blockquote>
</li>
</ul>
<ul>
<li>초반 몇 개의 block의 peak memory가 나머지 블록보다 크다<blockquote>
<p>초반 메모리가 더 큰 이유</p>
<ul>
<li>CNN의 activation($H \times W \times C$) 텐서에서 layer가 깊어질수록 $H$와 $W$의 크기가 감소하는 정도가 $C$가 늘어나는 정도보다 크기 때문에 activation memory가 점점 줄어듦</li>
<li>예를 들어 $H,W$를 2배 줄이면 $H \times W$는 4배 감소하지만, C를 2배 늘리면 최종적으로 $H \times W \times C$는 2배 감소하게 된다.</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>이 문제를 해결하기 위해 이 논문에서는 feature map의 작은 공간 영역에서만 작동하고 peak memory를 크게 줄이는 일반적인 패치별 추론 스케줄링을 제안한다.</p>
<p>하지만, 이 방법을 사용하면 패치와 계산 오버헤드가 겹치게 되어, receptive field와 FLOP을 후반 단계로 이동하고 계산 오버헤드를 줄이기 위해 receptive field 재분배를 추가로 제안한다.</p>
<h1 id="introduction">Introduction</h1>
<p>MCU와 같은 초소형 하드웨어에 기반한 IoT 디바이스는 어디에나 사용되고 있다.
이러한 초소형 하드웨어에 딥러닝 모델을 배포하면 인공지능의 대중화를 실현할 수 있으나, 초소형 하드웨어는 모바일 딥러닝과 다르게 메모리의 한계가 존재한다.</p>
<p>일반적인 MCU는 512KB보다 작은 SRAM을 갖고 있어, 대부분의 딥러닝 모델을 배포하기에 너무 작다.
<strong>Pruning이나 Quantization과 같은 model compression은 모델의 매개변수 수와 FLOP을 줄이는 데 초점을 맞출 뿐, 메모리 병목 현상을 해결하지는 못한다.</strong></p>
<blockquote>
<p>하드웨어적인 경량화까진 해결X</p>
</blockquote>
<p>메모리 용량이 부족하면 CNN에서 feature map의 크기가 제한되어 작은 이미지밖에 처리할 수 없다.
이는 image classification과 같은 단순 작업에는 적합할 수 있으나, Object detection과 같은 밀도 높은 reasoning task에는 적합하지 않다.</p>
<blockquote>
<p>Image classification보다 Object detection에서 이미지의 해상도가 accuracy에 매우 민감함을 보여주는 그래프
<img src="https://velog.velcdn.com/images/min-soku/post/7fa0050e-dcdd-4c74-875e-efdeebe940cf/image.png" alt=""></p>
</blockquote>
<p>효율적인 딥러닝 모델 설계를 위해 각 block에서의 메모리 사용량을 분석한 결과, 메모리 사용량 분포가 매우 불균형함을 발견하였다.</p>
<blockquote>
<p>MobileNetV2에서 처음 5개의 block에서만 높은 peak memory(450KB 이상)을 사용하여 전체 네트워크의 메모리 병목 현상이 발생함을 발견하였다.
<img src="https://velog.velcdn.com/images/min-soku/post/fa3253ed-6671-428e-90bb-4db084eb13a9/image.png" alt=""></p>
<ul>
<li>Int 8 양자화 후 측정 </li>
</ul>
<p>나머지 13개의 block에서는 메모리 사용량이 적어 256KB의 MCU 메모리에 쉽게 맞출 수 있었다.</p>
<blockquote>
<p>초기 5개 block에서의 메모리 사용량이 나머지 block보다 8배 이상 더 높다.</p>
<ul>
<li>이 문제를 해결하면 전체 peak memory를 8배까지 줄일 수 있는 최적화에서의 큰 가능성 존재</li>
</ul>
</blockquote>
</blockquote>
<p>본 논문에서는 이러한 문제를 해결하기 위해 MCUNetV2를 제안한다.</p>
<p>먼저 메모리를 많이 사용하는 CNN의 초기 Block에 patch별 실행 순서를 제안한다.
<img src="https://velog.velcdn.com/images/min-soku/post/bb234d50-a79e-471d-8aac-89ea4231f13c/image.png" alt="">
기존의 전체 feature map를 처리하던 방법과 달리 feature map의 작은 공간 영역에서 한 번에 작동한다.</p>
<ul>
<li>작은 patch의 feature만 저장하면 되므로 peak memory를 크게 줄일 수 있어, 더 큰 해상도의 image를 처리할 수 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/8aa5776a-efac-4c72-a0e9-c84a274afb97/image.png" alt=""></li>
</ul>
<hr>
<p>하지만, peak memory가 줄어들면 계산 오버헤드가 발생하는데, 겹치지 않는 output patch를 계산하려면 입력 image patch를 겹쳐야 하므로 계산이 반복적으로 이루어지게 된다.</p>
<p>오버헤드는 초기 block에서 receptive field의 크기와 관계가 있다.</p>
<blockquote>
<p>Receptive field의 크기가 클수록 입력 patch가 더 커져 더 많은 overlap이 발생한다.
<img src="https://velog.velcdn.com/images/min-soku/post/197b9f35-677d-4893-a14e-5882eb19e933/image.png" alt=""></p>
</blockquote>
<p>그래서 계산 오버헤드를 줄이기 위해 receptive field의 재분배를 제안한다.
이렇게 하면 성능에 영향을 주지 않으면서 overlap으로 인한 계산 오버헤드를 줄일 수 있다.</p>
<hr>
<blockquote>
<p><strong>Contribution</strong></p>
<ol>
<li>CNN의 메모리 사용 패턴을 분석하여 불균형한 메모리 분포로 인한 최적화의 가능성을 발견</li>
<li>Patch기반 추론 스케줄링을 제안하여 CNN모델 실행에 필요한 peak memory를 줄이고 계산 오버헤드를 최소화하기 위한 receptive field의 재분배를 함께 제안</li>
</ol>
</blockquote>
<h1 id="2-understanding-the-memory-bottleneck-of-tiny-deep-learning">2. Understanding the Memory Bottleneck of Tiny Deep Learning</h1>
<p>CNN 모델의 메모리 병목 현상을 체계적으로 분석</p>
<h2 id="imbalanced-memory-distribution">Imbalanced memory distribution</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/729ab6b7-2a59-4757-aded-5230900e2c10/image.png" alt=""></p>
<p>위 Figure는 MoblieNetV2의 Block당 peak memory 사용량을 제공한다.
Figure에서 볼 수 있듯이 불균형한 메모리 사용량 분포의 명확한 패턴을 관찰할 수 있다.</p>
<ul>
<li>처음 5개 block은 peak memory가 커서 MCU의 메모리 제약 조건을 초과하는 반면, 나머지 13개 block은 256KB 메모리 제약 조건에 쉽게 맞는다.</li>
<li>세 번째 block은 나머지 block들보다 메모리 사용량이 8배 이상 더 커서 메모리 병목 현상이 발생한다.</li>
</ul>
<blockquote>
<p>이러한 현상이 여러 <strong>CNN 백본에서 공통적으로 나타나는 것을 확인</strong>하였다.</p>
<blockquote>
<p>초반 메모리가 더 큰 이유</p>
<ul>
<li>CNN의 activation($H \times W \times C$) 텐서에서 layer가 깊어질수록 $H$와 $W$의 크기가 감소하는 정도가 $C$가 늘어나는 정도보다 크기 때문에 activation memory가 점점 줄어듦</li>
<li>예를 들어 $H,W$를 2배 줄이면 $H \times W$는 4배 감소하지만, C를 2배 늘리면 최종적으로 $H \times W \times C$는 2배 감소하게 된다.</li>
</ul>
</blockquote>
</blockquote>
<h2 id="challenges-and-opportunities">Challenges and opportunities</h2>
<p>불균형한 메모리 사용 분포는 MCU에서 실행할 수 있는 모델 성능과 이미지 해상도를 크게 제한한다.
초기 메모리의 병목현상으로 인해, 대부분의 block에서 이미 적은 메모리를 사용하고 있음에도 불구하고 전체 모델의 크기를 축소해야한다.</p>
<p>또한, 고해상도 입력으로 인해 초기 peak memory가 커지기 때문에 해상도에 민감한 task(예 : Object detection)을 수행하기 어렵다.</p>
<blockquote>
<ul>
<li>Input channel : 3</li>
<li>Output channel : 32</li>
<li>Stride : 2
MoblieNetV2의 첫 번째 Conv layer를 224 $\times$ 224의 이미지에서 실행하려면 int8로 quantization하더라도 $3 \times 224^2 \times 32 \times 112^2 =539KB$의 메모리가 필요하므로 MCU에 장착할 수 없다.</li>
</ul>
</blockquote>
<p>초기 메모리가 병목되는 부분을 우회할 수 있는 방법을 찾을 수 있다면 전체 모델의 peak memory를 크게 줄일 수 있는 최적화에 대한 가능성을 남길 수 있다.</p>
<h1 id="3-mcunetv2-memory-efficient-patch-based-inference">3. MCUNetV2: Memory-Efficient Patch-based Inference</h1>
<h2 id="31-breaking-the-memory-bottleneck-with-patch-based-inference">3.1 Breaking the Memory Bottleneck with Patch-based Inference</h2>
<p>Patch 기반의 inference로 초기 layer의 메모리 병목 현상 해결을 제안한다.</p>
<p>기존의 딥러닝 inference 프레임워크는 layer-by-layer 실행을 사용한다.</p>
<blockquote>
<p>각 Conv  layer에 대해 inference 라이브러리는 먼저 SRAM에 </p>
<ul>
<li>input activation(입력하는 feature map의 메모리)</li>
<li>output activation(출력되는 feature map의 메모리)의 버퍼를 할당하고, 
전체 layer 계산이 완료된 후 input activation에 대한 버퍼를 해제한다.<blockquote>
<p>다음 layer에서 출력된 activation은 input이 됨</p>
</blockquote>
</li>
</ul>
</blockquote>
<p>하지만, CNN의 초기 block에서 MCU의 SRAM에 layer마다 input과 output에 대한 activation 크기만큼의 버퍼를 할당하는 것은 너무 크다.</p>
<p>patch 기반 inference는 메모리 병목이 일어나는 초기 단계를 patch단위로 실행한다. 이는 전체 feature map의 영역보다 훨씬 작은 영역에서만 모델을 실행하기 때문에 메모리 사용량을 효과적으로 줄일 수 있다.</p>
<p>특정 병목 단계 이후부터는 다시 layer-by-layer 방식으로 실행된다.</p>
<hr>
<blockquote>
<p><strong>Layer-by-layer 방식</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/51e9b3b0-be2c-4e09-a0f5-ad87162a9db4/image.png" alt="">
첫 번째 Conv layer에 대해 input activation과 output activation의 크기가 커서 memory peak가 높다.</p>
</blockquote>
<blockquote>
<p><strong>Patch-by-patch 방식</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/007701c9-7629-4705-b07f-c8eeb3077085/image.png" alt="">
최종 output activation에 대한 버퍼를 할당하고, 이전까지는 전부 patch별로 값을 계산하여, 전체 activation에 대한 memory대신 하나의 patch에서의 activation값만 저장하면 된다.</p>
<blockquote>
<p>어떻게 patch의 메모리를 알고 미리 할당?</p>
<ul>
<li>MCU inference엔진인 TinyEngine은 모델 구조가 정해지면 각 layer내 텐서의 크기를 사전에 미리 계산할 수 있다.</li>
</ul>
</blockquote>
</blockquote>
<h3 id="computation-overhead">Computation overhead</h3>
<p>상당한 메모리 절약은 계산 오버헤드를 대가로 한다.</p>
<blockquote>
<p>Layer-by-layer와 동일한 output을 얻기 위해, Output activation에서 patch를 overlap되지 않게 나누지만, 각 output patch에 대응되는 입력 patch에서는 overlap되는 영역이 생긴다.
<img src="https://velog.velcdn.com/images/min-soku/post/092a4844-3ebc-4308-a31e-572ddacc069e/image.png" alt=""></p>
</blockquote>
<p>이는 kernel size가 1을 초과하는 conv filter가 receptive field를 증가시키는 데 기여하기 때문이다.</p>
<p>이러한 반복 계산은 최적의 하이퍼 파라미터를 선택하더라도, 10~17%의 계산 오버헤드를 증가시킬 수 있으며, 이는 저전력 엣지 디바이스에서 적절하지 않다.</p>
<h2 id="32-reducing-computation-overhead-by-redistributing-the-receptive-field">3.2 Reducing Computation Overhead by Redistributing the Receptive Field</h2>
<p>계산 오버헤드는 patch-by-patch에서 receptive field와 관련있다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/96319970-257d-402f-ac54-0f2b3ddecd4b/image.png" alt=""></p>
<blockquote>
<p>Receptive field가 클수록 output patch를 계산하기 위해 실제로 읽어야 하는 input patch의 크기가 커지기 때문에 input patch간 겹치는 영역이 커지고 계산이 반복된다. </p>
</blockquote>
</blockquote>
<p>계산 오버헤드를 줄이기 위해 CNN의 receptive field를 재분배하는 것을 제안한다.</p>
<ol>
<li>Patch-by-patch 단계의 receptive field 크기를 줄이고</li>
<li>후반 단계의 receptive field 크기를 늘리는 것이다.</li>
</ol>
<p>초반의 receptive field를 줄이면 각 input patch의 크기와 반복 계산을 줄이는 데 도움이 된다.</p>
<p>하지만, 전체 receptive field가 작아지면 일부 task의 성능이 저하될 수 있다.</p>
<hr>
<p>이에 대한 해결 방안으로 기존 MoblieNetV2를 기반으로 하여 아키텍처를 수정하였다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/4245ee29-88cf-4aab-8ad4-0e74d41eea52/image.png" alt=""></p>
<ul>
<li>MB 1 $1 \times 1$커널을 넣어서 채널수는 유지하면서도 주변 픽셀값을 보지 않아 공간적으로 RF를 키우지 않음<blockquote>
<ul>
<li>MB1 1x1에서 1은 블록 내부에서 채널 C를 1 x C로 유지하여 1x1 conv를 수행한다는 뜻</li>
<li>MB6 3×3은 채널 C를 6 x C로 확장하여 3x3 conv를 수행한다는 뜻</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>Patch-by-patch단계에서 더 작은 kernel과 더 적은 block수를 사용하고, 이후 layer-by-layer 단계에서 block수를 늘리며 아키텍처를 수정하였다.</p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/80c41b76-604f-42d1-90f4-5ed09ba31a68/image.png" alt=""></p>
<p>두 아키텍처의 성능을 비교해보았을 때 </p>
<ul>
<li>둘 다 Patch-by-patch로 수행했기 때문에 SRAM peak memory을 8배까지 줄이지만,</li>
<li>Patch-by-patch만 적용한 MoblieNetV2 설계는 Patch-by-patch에서 중복 계산으로 인해 patch-by-patch 단계에서 42%, 전체에서 10%의 계산 오버헤드를 가진다.</li>
<li>MACs(곱셈 + 누적 덧셈 수)에서는 Patch-by-patch만 적용한 MoblieNetV2보다 patch-by-patch 단계에서 연산량이 73M까지 줄어들었다.</li>
<li>Classification accuracy는 거의 동일하며 VOC mAP(객체 검출 벤치마크)는 소폭 상승하였다.</li>
</ul>
<p>Receptive field를 재분배하면 output feature map이 224x224일 때, 4등분 하여 한 patch size가 56x56인데, receptive field의 크기를 줄여 기존 input patch size를 75에서 63까지 줄이면서도 image classification 및 object detection 성능은 동일한 수준으로 유지할 수 있다.</p>
<blockquote>
<p>Input patch size가 75에서 63까지 줄었다는 의미는 Overlap되는 영역의 크기가 줄었다는 의미 : 중복 계산이 줄어듦</p>
</blockquote>
<p>Receptive field 재분배 후 계산 오버헤드는 3%에 불과하며, 메모리 감소의 이점을 고려하면 무시할 수 있는 수준이다.</p>
<h2 id="33-joint-neural-architecture-and-inference-scheduling-search">3.3 Joint Neural Architecture and Inference Scheduling Search</h2>
<p>Receptive field를 재분배하면 최소한의 오버헤드로 메모리 감소의 이점을 누릴 수 있지만, 백본에 따라 전략이 달라질 수 있다.
또한, peak memory가 감소하면 더 큰 입력 해상도를 사용하는 등의 자유를 누릴 수 있다.</p>
<p>하지만, 이러한 선택지가 너무 커지기 때문에 아키텍처와 스케줄링(patch/layer로 어떻게 실행할지)을 자동화된 방식으로 함게 최적화하는 것을 제안한다.</p>
<p>특정 데이터셋과 하드웨어 제약 조건이 주어지면서 최고의 정확도를 달성하는 것이 목표이다.</p>
<blockquote>
<p>최적화 목록</p>
<ol>
<li>Backbone optimization</li>
<li>Inference scheduling optimization</li>
<li>Joint search</li>
</ol>
</blockquote>
<hr>
<h3 id="backbone-optimization">Backbone optimization</h3>
<blockquote>
<p><strong>NAS</strong>
사람이 직접 네트워크 구조를 설계하는 대신, 미리 정해둔 탐색 공간 안에서 여러 구조를 자동으로 평가해서 목표를 가장 잘 만족하는 아키텍처를 찾는 방법</p>
</blockquote>
<p>이 논문에서의 탐색 공간</p>
<p><strong>1. Kernel size $k[l]$(커널 크기)</strong> : 3/5/7</p>
<blockquote>
<p>3x3 / 5x5 / 7x7 커널 중에서 고름</p>
</blockquote>
<p><strong>2. Expansion ratio $e[l]$(확장비)</strong> : 3/4/6</p>
<blockquote>
<p>한 블록 내부에서 채널을 중간에 몇 배로 늘릴지
3이면 C x 3으로 늘어남</p>
</blockquote>
<p><strong>3. Number of blocks $d[l]$(블록 개수)</strong> : 2/3/4</p>
<blockquote>
<p>해상도가 동일한 블록의 개수</p>
<ul>
<li>224xx224가 한 블록에서 112x112로 줄고, 또 어느 지점에서 56x56으로 줄 때, 이 같은 해상도가 동일하게 유지되는 블록의 개수를 의미</li>
</ul>
</blockquote>
<p><strong>4. Per-block width multiplier $w$(블록별 너비 배수)</strong> : 0.5/0.75/1.0</p>
<blockquote>
<p>블록마다 입/출력 채널 수를 다르게 하기 위해 스케일링하는 값</p>
<ul>
<li>0.75면 해당 채널의 입력/출력의 채널 수를 0.75배함
<img src="https://velog.velcdn.com/images/min-soku/post/f33b89f9-bc99-44bf-9dd4-7aa464fcb405/image.png" alt=""></li>
</ul>
</blockquote>
<p><strong>5. Input resolution $r$(입력 해상도)</strong> : 96~256</p>
<blockquote>
<p>입력 이미지를 96x96 ~ 256x256 사이의 해상도로 넣음</p>
</blockquote>
<p>이러한 탐색 공간의 구성은 최종 NAS 성능에 결정적인 영향을 미친다.</p>
<hr>
<h3 id="inference-scheduling-optimization">Inference scheduling optimization</h3>
<p>모델과 하드웨어 제약조건이 주어졌을 때, 그 모델을 MCU에서 어떻게 실행할지 최적의 inference scheduling을 찾아야 한다. </p>
<blockquote>
<p>같은 모델이라도 Layer-by-layer와 Patch-by-patch가 어떻게 스케줄링 되어있는지에 따라 메모리와 오버헤드가 달라지기 때문이다.</p>
</blockquote>
<p>이 논문에서는 TinyEngine 기반으로 이를 확장하였으며, 제약 조건 내에서 가장 좋은 스케줄링을 탐색한다.</p>
<blockquote>
<p>TinyEngine은 MCU에서 모델을 실행할 때, conv, FC, pooling같은 연산을 처리하도록 하는 프레임워크</p>
<blockquote>
<p>기존 TinyEngine은 Layer-by-layer로만 지원</p>
</blockquote>
</blockquote>
<p><strong>1. 패치 개수$p$</strong></p>
<blockquote>
<p>Patch-by-patch의 최종 출력 feature map을 $p$x$p$로 쪼개어 채운다.</p>
<ul>
<li>$p$가 커질수록 peak memory는 더 줄어들지만, 오버헤드가 증가할 수 있다.</li>
</ul>
</blockquote>
<p><strong>2. 앞에서 몇 개의 블록을 patch-by-patch로 실행할지 $n$</strong></p>
<blockquote>
<p>$n$이 커지면 patch로 처리하는 구간이 길어져 메모리를 더 줄일 수 있지만, 그만큼 오버헤드 역시 컺빌 수 있다.</p>
</blockquote>
<p>이 두 변수를 제약 조건을 만족하면서 최적인 값으로 정해야 한다.</p>
<hr>
<h3 id="joint-search">Joint search</h3>
<p>NAS를 통해 최적 아키텍처를 최적화하는 것과 inference scheduling을 통해 최적의 실행 방식을 찾는 것을 따로 실행하면 최적의 결과를 놓칠 수 있으니,
둘을 한 번에 탐색하여 최적화 해야 한다.</p>
<p>앞에서 말했던</p>
<p><strong>1. Backbone 탐색 공간</strong></p>
<blockquote>
<p>$k[l]$: 커널 크기(3/5/7)
$e[l]$: 확장비(3/4/6)
$d[l]$: 스테이지별 블록 수(깊이)
$w[l]$: 블록별 너비 스케일
$r$: 입력 해상도</p>
</blockquote>
<p><strong>2. Scheduling 변수</strong></p>
<blockquote>
<p>$p$: 패치 분할 개수
$n$: 앞에서부터 몇 블록을 patch-by-patch로 실행할지</p>
</blockquote>
<p>이 전체를 한 세트로 제약을 만족시키는 조합을 찾는다.</p>
<p>여기서는 <strong>Evolutionary search(진화적 탐색)</strong>라는 NAS 방법을 사용</p>
<blockquote>
<ol>
<li>Backbone탐색 공간에서 아키텍처 랜덤 샘플링</li>
<li>그 아키텍처에 대해 scheduling 변수에서 제약 조건 내 가능한 모든 조합을 전부 탐색</li>
<li>그중에서 가장 최적을 성능을 보이는 scheduling 변수 선택<blockquote>
<p>이 샘플링에서의 최적인 값들, 평가 결과를 하나의 점수로 나타냄</p>
</blockquote>
</li>
<li>1~3 과정을 계속 반복하면서 가장 높은 점수인 샘플링 조합을 업데이트해감</li>
</ol>
</blockquote>
<h1 id="4--experiments">4 . Experiments</h1>
<p>Experiments에서 저자들이 증명하려는 핵심은 3가지</p>
<ol>
<li><p>기존 네트워크도 patch-based inference로 피크 메모리(SRAM)를 크게 줄일 수 있다</p>
</li>
<li><p>(NAS로) 모델+스케줄을 같이 설계하면, MCU에서 정확도 SOTA를 갱신할 수 있다 (분류/탐지)</p>
</li>
<li><p>patch 기반의 설계/하이퍼파라미터(p, n)가 메모리·오버헤드·정확도에 어떻게 영향을 주는지 분석한다</p>
</li>
</ol>
<h2 id="실험-세팅">실험 세팅</h2>
<p><strong>1. Analytic profiling : 아키텍처만 보고 계산한 메모리</strong></p>
<blockquote>
<p>레이어가 요구하는 메모리를 입력 activation + 출력 activation 합으로 계산</p>
<blockquote>
<p>순수 구조 비교용</p>
</blockquote>
</blockquote>
<p><strong>2. On-device profiling : 실제로 MCU에서 돌렸을 때 측정된 SRAM/Flash</strong></p>
<blockquote>
<p>실제로 MCU에서 실행했을 때는 버퍼 할당과 같은 부가적인 메모리로 인해 analytic과 다름</p>
<blockquote>
<p>현실적인 배포 가능성 확인용</p>
</blockquote>
</blockquote>
<h2 id="실험-데이터셋--배포-환경">실험 데이터셋 &amp; 배포 환경</h2>
<p><strong>데이터셋</strong></p>
<ul>
<li>ImageNet: 표준 분류 벤치마크</li>
<li>Visual Wake Words(VWW): TinyML 현실 앱(사람/존재 감지 등)을 반영</li>
<li>Pascal VOC, WIDER FACE: 해상도에 민감한 detection task에서, patch 기반이 해상도 제약을 풀어주는지 확인</li>
</ul>
<p><strong>환경</strong></p>
<ul>
<li>int8 양자화로 배포</li>
<li>TinyEngine 기반으로 patch inference 지원하도록 확장</li>
<li>서로 SRAM/Flash가 다른 3개 MCU(STM32F412/F746/H743)에서 측정</li>
</ul>
<hr>
<h2 id="41-reducing-peak-memory-of-existing-networks">4.1 Reducing Peak Memory of Existing Networks</h2>
<p>기존에 존재하는 모델을 대상으로 patch-by-patch 방식이 메모리/오버헤드를 얼마나 줄이는지 확인</p>
<p><strong>Analytic profiling 결과</strong></p>
<blockquote>
<ul>
<li>입력 224×224, patch는 4×4
<img src="https://velog.velcdn.com/images/min-soku/post/861bd60a-afa2-41fb-8928-91717321b888/image.png" alt=""><blockquote>
<ul>
<li>피크 메모리 3.7× ~ 8.0× 감소</li>
<li>대신 연산량 오버헤드 8% ~ 17% 증가</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p><strong>On-device 측정 결과</strong></p>
<blockquote>
<ul>
<li>STM32F746(320kB SRAM/1MB Flash)에서,</li>
<li>per-layer vs per-patch(2×2 또는 3×3) 비교</li>
<li>MCU 메모리 한계 때문에 width(w)와 resolution(r)을 줄여서 실험
<img src="https://velog.velcdn.com/images/min-soku/post/8835ffe4-270a-41ac-ab0f-cb4e4411fe88/image.png" alt=""><blockquote>
<ul>
<li>실측 피크 SRAM이 4~6× 감소</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<h2 id="42-mcunetv2-for-tiny-image-classification">4.2 MCUNetV2 for Tiny Image Classification</h2>
<p>NAS로 모델+스케줄을 같이 찾았을 때 MCU에서의 성능 확인</p>
<p><strong>ImageNet on MCU</strong></p>
<blockquote>
<p>실험 환경</p>
<ul>
<li>STM32F412: 256kB SRAM / 1MB Flash (Cortex-M4급)</li>
<li>STM32H743: 512kB SRAM / 2MB Flash (Cortex-M7급)
<img src="https://velog.velcdn.com/images/min-soku/post/8b262b44-0e80-46ff-8227-871d75001fc6/image.png" alt=""><blockquote>
<ul>
<li>256kB/1MB 조건에서 기존 SOTA(MCUNet) 대비 +4.6% Top-1 개선, 피크 SRAM도 더 낮다</li>
<li>512kB/2MB 조건에서 Top-1 71.8%로 SOTA 성능</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<h2 id="43-mcunetv2-for-tiny-object-detection">4.3 MCUNetV2 for Tiny Object Detection</h2>
<p>Detection은 해상도에 민감한데, patch inference가 해상도 제약을 풀어 mAP를 크게 올림을 증명</p>
<p><strong>Pascal VOC detection</strong></p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/f2167569-7b64-4fca-8286-31dae4ecd0c7/image.png" alt=""></p>
<blockquote>
<blockquote>
<ul>
<li>H743(512kB)에서 MCUNetV2-H7 mAP 68.3%, 기존(MCUNet 51.4%) 대비 +16.9%p</li>
<li>F412(256kB)로도 줄여서 mAP 64.6%, +13.2%p 개선</li>
</ul>
</blockquote>
</blockquote>
<ul>
<li>계산량(MACs)은 비슷하거나(256kB 쪽은 172M vs 168M) 큰 차이가 없는데도 mAP가 크게 오르는 이유<blockquote>
<p>patch 기반이 더 큰 입력 해상도 + 더 작은 모델 같은 새로운 조합을 허용해서 탐지에 유리한 구성을 찾을 수 있기 때문</p>
</blockquote>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DLP: Dynamic Layerwise Pruning in Large Language Models]]></title>
            <link>https://velog.io/@min-soku/DLP-Dynamic-Layerwise-Pruning-in-Large-Language-Models</link>
            <guid>https://velog.io/@min-soku/DLP-Dynamic-Layerwise-Pruning-in-Large-Language-Models</guid>
            <pubDate>Tue, 21 Oct 2025 14:37:37 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>주요 Pruning 기법들은 uniform layer-wise pruning에 의존하는데, 이는 높은 sparsity에서 심각한 성능 저하를 일으킨다.</p>
<p>최근에는 다양한 layer의 기여도를 인식하여 non-uniform-layer-wise pruning을 연구하는데, 이는 대부분 사전에 정의된 값에 의존하기 때문에 최적의 성능이 아닐 수 있다.</p>
<p>이러한 한계를 극복하기 위해, Dynamic Layer-wise Pruning(DLP)라는 새로운 방법을 제안한다.</p>
<blockquote>
<p>모델 가중치와 Input activation 정보를 통합하여, 각 layer의 상대적 중요도를 adaptive하게 결정하고 이에 따라 sparsity를 할당한다.</p>
</blockquote>
<h1 id="1-introduction">1. Introduction</h1>
<p>LLM의 파라미터 수를 크게 줄일 수 있는 Pruning은 크게 주목받고 있으며 중복되거나 덜 중요한 파라미터를 제거하여 리소스 활용을 최적화한다.</p>
<p>지금까지의 pruning연구들은 만족스러운 성능을 달성했지만, 모델 내 다양한 layer의 다양한 중요성을 고려하지 않고 모든 layer에 uniform한 sparsity를 할당하였다.</p>
<p>이러한 한계로 인해, 높은 sparsity에서는 성능이 크게 저하된다.</p>
<p>Outlier의 존재에서 영감을 받은 &quot;OWL&quot;은 각 LLM의 layer에 서로 다른 sparsity를 할당한다.
하지만, OWL은 Outlier 선택을 위해 사전에 정의된 기준에 의존하기 때문에 모델의 dynamic한 요구 사항에 대한 적응성이 제한될 뿐만 아니라 최적의 성능을 달성하는 데도 방해가 된다.</p>
<p>위의 문제를 해결하기 위해 각 layer의 중요도를 역으로 계산한 다음, 이를 layer간 상대적 중요도로 변환한다.
또한, 본질적으로 outlier에 더 중점을 둔다. 
Median값은 outlier에 둔감하기 때문에, 가중치에 outlier가 포함되어 있을 때 layer의 중심 경향을 더 정확하게 반영한다.</p>
<p>본 논문에서는 새로운 Layer-wise 방법을 제안한다.
먼저, 동일 layer에서 모델 가중치와 입력 활성화 값의 median 값을 기준으로 각 transformer block의 중요도를 평가하여 모델의 상대적 중요도를 결정한다.
마지막으로 중요도가 높은 layer는 sparsity가 낮아야 한다는 원칙에 따라 각 layer의 sparisty가 할당된다.</p>
<hr>
<p><strong>Contribution</strong></p>
<ol>
<li><p>새로운 layer-wise별 중요도 측정 방법을 제안</p>
<blockquote>
<p>Layer내 요소와 layer간 요소를 종합적으로 고려하여 각 layer의 상대적 중요도를 자동으로 결정</p>
</blockquote>
</li>
<li><p>구조화되지 않은 pruning을 위한 효과적 방법 제안</p>
</li>
<li><p>LLM compression 기법과 통합될 수 있을 뿐만 아니라 PEFT로 확장할 수도 있다.</p>
</li>
</ol>
<h1 id="2-related-work">2. Related work</h1>
<h2 id="21-llm-pruning">2.1 LLM Pruning</h2>
<h2 id="22-layerwise-importance-for-pruning">2.2 Layerwise Importance for Pruning</h2>
<h2 id="23-median-in-pruning">2.3 Median in Pruning</h2>
<h1 id="3-methodology">3. Methodology</h1>
<h2 id="31-problem-definition">3.1 Problem Definition</h2>
<p>Pruning을 위한 일반적인 전략은 task를 여러 하위 문제로 분해하여 계층적인 최적화를 가능하게 하는 것이다.</p>
<p>이렇게 분해된 하위 문제는 L2 loss를 최소화하는 것으로 공식화된다.</p>
<p>L개의 layer로 구성된 신경망이 있을 때</p>
<ul>
<li>가중치 : $W \in \R^{C_{out}\times C_{in}}$</li>
<li>Layer : $l \in 1,2,...,L$</li>
<li>입력 활성화 : $X \in \R^{((N\times L), \ C_{in})}$<blockquote>
<ul>
<li>$N$ : Batch</li>
<li>$L$ : Sequence dim(Token 개수)</li>
</ul>
</blockquote>
</li>
</ul>
<p>각 layer $l$에 대해 l2 loss를 최소화하면서 pruning sparsity를 달성하는 것이 목표</p>
<blockquote>
<blockquote>
<p>$argmin_{\hat{w}^l}||W^lX^l-\hat{W}^lX^l||^2_2$</p>
</blockquote>
<ul>
<li>$W^l$ : $l$번째 layer의 가중치</li>
<li>$X^l$ : $l$번째 layer의 입력</li>
<li>$||\cdot||^2_2$ : l2 norm </li>
</ul>
</blockquote>
<h2 id="32-preliminary">3.2 Preliminary</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[Variance-Based Pruning for Accelerating and Compressing Trained Networks]]></title>
            <link>https://velog.io/@min-soku/Variance-Based-Pruning-for-Accelerating-and-Compressing-Trained-Networks</link>
            <guid>https://velog.io/@min-soku/Variance-Based-Pruning-for-Accelerating-and-Compressing-Trained-Networks</guid>
            <pubDate>Sat, 18 Oct 2025 13:31:07 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>Structured pruning은 계산 비용 및 메모리 사용을 줄일 수 있지만, structured하게 잘라내어졌기 때문에 Retrain이 필요하여 cost가 많이 드는 경우가 많다.</p>
<p>이를 해결하기 위해, One-shot structured pruning 방법인 variance based pruning을 도입하였다.</p>
<h1 id="1-introduction">1. Introduction</h1>
<p>Vision/Text transformer는 CV와 NLP에서 가장 보편적으로 사용되는 아키텍처이지만, training/storage/inference라는 세 가지 주요 영역에서 상당한 cost를 요구한다.</p>
<p>이 세 가지 주요 영역에서의 문제를 동시에 해결하는 건 어렵다</p>
<p>예를 들어 training cost문제를 해결하기 위해 Pre-trained 모델을 사용한다고 해도, Stroage/Inference 문제를 해결할 수 없다.</p>
<p>이를 해결하기 위해 Pruning이라는 방법이 존재한다.</p>
<ul>
<li><p><strong>Unstructured pruning은 pre-trained 모델에서 아주 높은 accuracy를 유지할 수 있지만, 이는 이론적인 성능일 뿐, 실제 속도 향상으로 전환시키기는 어렵다.</strong></p>
</li>
<li><p><strong>Structured pruning은 inference와 memory의 cost를 모두 줄일 수 있지만, 넓은 범위의 pruning으로 인해 손실된 accuracy를 회복하기 위해 retrain이 필요하여 추가적인 cost가 필요하다.</strong></p>
</li>
<li><p><strong>Token pruning과 같은 동적 pruning 방식은 모델의 아키텍처를 수정하지 않고, 모델에서 처리하는 feature의 개수를 동적으로 줄이며 pruning 후 accuracy 하락을 최소화하지만, 리소스가 제한된 하드웨어에서는 한계가 존재한다.</strong></p>
</li>
</ul>
<hr>
<p>본 논문에서는 최소한의 fine-tuning으로 속도 향상과 메모리 절약을 제공하는 Variance based strucutured pruning을 소개한다.</p>
<blockquote>
<p>다양한 아키텍처에 배포할 수 있도록 transformer block 내 MLP layer에만 pruning을 수행한다.</p>
</blockquote>
<ol>
<li><p>Welford&#39;s algorithm을 사용하여 layer내 활성화 값의 통계를 활용한다.</p>
</li>
<li><p>이 통계를 이용하여 영향력이 가장 작은 가중치를 식별 후 제거한다.</p>
</li>
<li><p>제거된 뉴런의 평균 활성화 값을 사용하여 평균 기여도를 계산한 후, 출력 layer의 bias에 재분배함으로써 보상을 주어 accuracy 저하를 완화한다.</p>
</li>
</ol>
<h1 id="2-related-work">2. Related work</h1>
<h2 id="21-transformer-architectures">2.1 Transformer Architectures</h2>
<p>Transformer 아키텍처가 NLP에 처음 도입된 후 CV에 도입되고 나서는 대부분의 CNN은 ViT로 대체되고 있다.</p>
<p>Transformer 아키텍처를 기밥으로 한 모델들은 좋은 성능을 보여주며 발전하였지만, inference 속도와 memory 요구 사항에 상당한 영향을 미치는 MLP layer로 인해 계산 비용이 매우 높다.</p>
<h2 id="22-model-compression">2.2 Model compression</h2>
<p>대규모 모델의 cost를 줄이기 위한 model comperssion은 모델의 다양한 구성 요소를 compress하는 데 중점을 둔다.</p>
<p>Pruning은 네트워크 내 중복된 구조를 식별하고 제거하는 데 중점을 둔다.</p>
<blockquote>
<p>Structured pruning은 전체 뉴런, layer, filter를 제거하여 하드웨어에서 직접적인 계산 비용을 줄일 수 있는 작은 크기의 행렬로 만든다.</p>
</blockquote>
<p>이러한 Structured pruning으로 인한 구조에 직접적인 수정은 성능에 상당한 영향을 미치게 되어, accuracy 회복을 위한 반복적인 retrain 비용을 필요로 한다.</p>
<p>이에 대한 대안으로 Dynamic pruning이 있는데, 이는 inference 중에 feature의 하위 집합만 동적으로 처리하거나, feature 간 결합을 통해 비용을 절감하는 방식이다.
하지만 이러한 방법은 memory 사용량은 줄일 수 없다.</p>
<h2 id="23-our-approach">2.3 Our Approach</h2>
<p>본 논문에서는 Variance가 낮은 활성화 뉴런을 제거함으로써 structured pruning의 장점과 dynamic pruning의 장점을 결합하여 아이디어를 구축하였다.</p>
<p>NLP와 CV 모두에 대해 training된 transformer에서의 MLP layer 내 뉴런이 전체 feature에 대한 상당한 기여를 보인다는 사실에 기반하여 variance based structured pruning을 MLP layer에 적용하는 방법을 제공한다.</p>
<p>MLP 계층이 계산 비용에 크게 기여하는 transformer와 같은 아키텍처에서 특히 유용하다.</p>
<h1 id="3-method">3. Method</h1>
<p><strong>1. Activation statics computation</strong> : Welford&#39;s algorithm
<strong>2. Variance based pruning</strong> : 가장 낮은 활성화 분산을 기준으로 pruning
<strong>3. Mean-shift compenstation</strong> : Pruning될 뉴런의 평균 활성화가 output bias에 다시 추가된다.</p>
<h2 id="31-step-1-activation-statistics-computation">3.1 Step 1: Activation Statistics Computation</h2>
<p>본 논문의 method는 간단하면서 범용적으로 사용될 수 있는 방법을 목적으로 하기 때문에, MLP layer만 pruning한다..</p>
<p>이를 위해서는 <strong>input과 output의 dimesion을 일관되게 유지하여 나머지 모듈과 통합되도록 하기 위해, intput/output layer는 그대로 유지하면서 hidden layer를 pruning해야 한다.</strong></p>
<p>따라서, Input vector $x \in \R^{D_{in}}$을 output vector $y \in \R^{D_{out}}$에 매핑하는 $D_{hid}$ 차원의 single hidden layer를 가진 MLP를 목표로 한다.</p>
<blockquote>
<p><strong>MLP 구조</strong></p>
<ul>
<li>$h=\sigma(W_1x+b_1)$<blockquote>
<ul>
<li>$W_1\in\R^{D_{hid}\times D_{in}}$</li>
<li>$b_1 \in \R^{D_{hid}}$</li>
</ul>
</blockquote>
</li>
</ul>
<ul>
<li>$y= W_2h+b_2$<blockquote>
<ul>
<li>$W_2\in\R^{D_{out}\times D_{hid}}$</li>
<li>$b_2 \in \R^{D_{out}}$</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>이 MLP layer에서 입력 $x$를 받아 만들어진 hidden layer의 활성화 값$h$에 대해 평균과 분산을 모아 평균 벡터/분산 벡터를 만든다.
<img src="https://velog.velcdn.com/images/min-soku/post/0c775aa9-1c3e-40bf-8ce3-8c0f7d131574/image.png" alt=""></p>
<p>이러한 통계를 계산하기 위해 모든 batch에 대한 활성화 값 $h$를 저장하고 iterative하게 들어오는 data를 효율적으로 계산하기 위한 Welford&#39;s algorithm을 사용하여 평균 $\mu$와 열별 (현재 값 - 평균)의 누적합 $m_2$을 계산한다.</p>
<p>총 N개의 data sample이 주어졌을 때, j번째 샘플의 활성화 값은 $h^{(j)} \in \R^{D_{hid}}$이다.</p>
<p>Welford&#39;s algorithm은 j번째 샘플을 관찰한 후 평균 $\mu$와 누적합 $m_2$를 업데이트하여 수치적으로 안정적인 계산을 보장한다.</p>
<blockquote>
<ul>
<li>평균 update : $\mu^{(j)} = \frac{j-1}{j},\mu^{(j-1)} + \frac{1}{j},h^{(j)}$</li>
<li>누적합 update : $m_2^{(j)} = m_2^{(j-1)} + \big(h^{(j)} - \mu^{(j-1)}\big)\odot\big(h^{(j)} - \mu^{(j)}\big)$</li>
</ul>
</blockquote>
<p>N개의 sample이 모두 처리되면 분산을 계산할 수 있게 된다.</p>
<blockquote>
<ul>
<li>$\sigma^2=\frac{m_2^{(N)}}{N-1}$</li>
</ul>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/02be21de-64dc-48bb-aacf-54f7e564faab/image.png" alt=""></p>
<h2 id="32-step-2-variance-based-pruning">3.2 Step 2: Variance-Based Pruning</h2>
<p>Welford&#39;s algorithm으로 구한 분산 벡터 $\sigma^2 \in \R^{D_{hid}}$를 사용하여 분산 값인 $\sigma^2_i$를 기준으로 순위를 매긴다.</p>
<blockquote>
<p><strong>&lt;분산의 의미&gt;</strong>
직관적으로, 활성화값이 평균 $\mu_i$에서 거의 벗어나지 않는다면 해당 뉴런은 네트워크의 표현력에 덜 기여하는 것이다.</p>
<ul>
<li><strong>분산이 작으면 네트워크에 덜 기여한다. -&gt; 잘라내도 손실이 적다</strong></li>
</ul>
</blockquote>
<p>모든 layer에서 분산이 가장 작은 뉴런을 찾기 위해 모든 hidden layer에 대해 분산을 구해 pruning을 결정한다.</p>
<p>Sparsity$p \in (0,1)$가 주어지면 Global하게 score 집합 $S=$를 형성하고 이중에서 가장 작은 score를 가진 $p$%의 뉴런을 선택해 pruning을 수행한다.</p>
<blockquote>
<p>Layer별 고정 비율이 아닌 전 layer를 통틀어 작은 분산 순으로 잘라낸다.</p>
<ul>
<li>$S ;=; \bigcup_{l \in \mathcal{L}}
\left{ \sigma^{2}<em>{l,i} ;\middle|; i = 1, \ldots, D</em>{\mathrm{hid}}^{(l)} \right}$
<img src="https://velog.velcdn.com/images/min-soku/post/8f133e15-32f6-45e7-8f83-b8ba8a9c5f44/image.png" alt=""></li>
</ul>
</blockquote>
<h2 id="33-step-3-mean-shift-compensation">3.3 Step 3: Mean-Shift Compensation</h2>
<p>Pruning 후 출력을 최대한 보존하기 위해, pruning될 활성화값 $h_i$을 평균값으로 대체한다.</p>
<p>평균값은 분산이 0 = 편차가 작을 수록 분산이 작다</p>
<blockquote>
<ul>
<li>기존 출력 = Pruning에서 살아남은 뉴런의 output + Pruning 대상 뉴런 output + bias<blockquote>
<p>$\begin{aligned}
y
&amp;= W_2,h + b_2 \
&amp;= W_{2,D_{hid-P}},h_{D_{hid-P}} ;+; W_{2,P},h_P ;+; b_2,
\quad \end{aligned}$
($P$: Pruning될 집합, $D_{hid-P}$: Pruning 후 집합)
<img src="https://velog.velcdn.com/images/min-soku/post/1edf145d-8ac3-4178-93c9-0711dd7e7e2b/image.png" alt=""></p>
</blockquote>
</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>Pruning 대상 뉴런을 평균값으로 대체한 값을 bias에 흡수</li>
</ul>
<blockquote>
<p>$\begin{aligned}
\tilde{y}
&amp;= W_{2,D_{hid-P}},h_{D_{hid-P}} ;+; W_{2,P},\mu_P ;+; b_2 \
&amp;= W_{2,D_{hid-P}},h_{D_{hid-P}} ;+; b_2&#39;, 
\qquad b_2&#39; := b_2 + W_{2,P},\mu_P .
\end{aligned}
$</p>
</blockquote>
</blockquote>
<blockquote>
<ul>
<li>실제 pruning 후 값</li>
</ul>
<blockquote>
<p>$
y&#39; = W_{2,K},h_K + b_2&#39; .
$</p>
</blockquote>
<ul>
<li>출력 오차</li>
</ul>
<blockquote>
<p>$\Delta y ;=; y - y&#39; ;=; W_{2,P},\bigl(h_P - \mu_P\bigr)$
<img src="https://velog.velcdn.com/images/min-soku/post/9b658ed3-1676-4228-9823-f34563aa528b/image.png" alt=""></p>
</blockquote>
</blockquote>
<ul>
<li>왜 평균 + 편차?<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/b1eac68b-31bf-4a11-a531-d7529ed43d01/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<blockquote>
<ul>
<li>평균제곱오차</li>
</ul>
<blockquote>
<ul>
<li>$
\mathbb{E},|\Delta y|<em>2^2
;=; \sum</em>{i\in P} \sigma_i^2 ;\bigl| W_2[:,,i] \bigr|_2^2$</li>
</ul>
</blockquote>
<p>평균으로 대체했을 때의 최소 MSE가 분산이다</p>
</blockquote>
<p><strong>Pruning할 뉴런을 평균으로 바꿨다고 본 뒤에, 그 해당 뉴런의 기여를 bias에 흡수하면, 남는 오차는 분산만큼이고, 그래서 분산이 가장 작은 뉴런부터 자르는 게 이론적으로 합리적이다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[A Simple and Effective Pruning Approach for Large Language Models]]></title>
            <link>https://velog.io/@min-soku/A-Simple-and-Effective-Pruning-Approach-for-Large-Language-Models</link>
            <guid>https://velog.io/@min-soku/A-Simple-and-Effective-Pruning-Approach-for-Large-Language-Models</guid>
            <pubDate>Mon, 06 Oct 2025 13:26:32 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>LLM의 규모가 커짐에 따라 성능을 유지하면서 크기는 줄이는 pruning이 방법으로 떠오르고 있다.
그러나, 기존 pruning들은 수십억개의 파라미터를 가진 LLM에는 거의 적합하지 않는 retrain을 하거나, 2차 gradient에 의존하는 등의 계산 비용이 크다는 문제가 있다.</p>
<p>본 논문에서는 pre-train된 LLM에서 sparsity를 유도하도록 설계된 효과적인 pruning방법인 Wanda를 소개한다.</p>
<blockquote>
<p>이 접근 방식은 Input activation에 가중치를 곱하여 중요도를 측정해 pruning한다.</p>
</blockquote>
<p>Wanda는 retrain이나 weight update가 필요하지 않으며, pruning된 LLM을 그대로 사용할 수 있다.</p>
<h1 id="1-introduction">1. Introduction</h1>
<p>LLM은 NLP분야에서 놀라운 성능을 보여주고 있지만, 수식억 개의 파라미터가 포함되기 때문에 상당한 리소스를 필요로 한다.</p>
<p>LLM의 대중화를 위해 높은 계산 비용을 완화하고자 하는 노력이 지금까지 있어왔지만, 지금까지 주목할만한 대부분의 방법은 Quantization에 집중되어 왔다.</p>
<p>Pruning은 모델 내 특정 가중치를 제거하여 모델의 크기를 줄이는 것으로 Model compression에 있어서 상대적으로 덜 주목되어 왔다.</p>
<p>기존의 pruning방법을 살펴보면 그 이유를 알 수 있다.</p>
<ol>
<li>Pruning 후 retrain</li>
<li>Iterative한 과정</li>
<li>Randomly한 초기화<blockquote>
<p>이러한 방법들은 엄청난 양의 리소스를 요구하며 비효율적이다.</p>
</blockquote>
</li>
</ol>
<p>본 논문에서는 Wanda(Weight and Activation)라는 간단하고 효과적인 접근 방식을 도입하여 이 문제를 해결한다.</p>
<p>이 기법은 가중치를 update할 필요없이 LLM높은 수준의 spasity를 갖게 한다.</p>
<blockquote>
<p>Input activation으로 기존의 Weight magnitude 기반의 pruning metric을 보강하는 것이 가중치의 importance를 평가하는 데 매우 효과적임을 발견하였다.</p>
</blockquote>
<h1 id="2-preliminaries">2. Preliminaries</h1>
<h2 id="magnitude-pruning">Magnitude pruning</h2>
<p>신경망의 sparsity를 유도하기 위한 표준 pruning기법으로, 개별 weight의 크기에 따라 제거하며, 특정 임계값 이하의 weight를 가진 weight는 제거된다.</p>
<p>이 임계값은 local(layer-wise)로 비교되거나 global하게 비교되어 결정된다.</p>
<p>매우 단순한 method임에도 높은 sparsity를 갖게 하기 위해 사용되어 왔으며, 현재도 pruning의 강력한 기준 접근법으로 사용되고 있다.</p>
<h2 id="emergent-large-magnitude-features">Emergent Large Magnitude Features</h2>
<p>Transformer 기반의 LLM에서 큰 규모의 특징이 관찰되었다.</p>
<blockquote>
<p>LLM이 특정 규모(약 6B)에 도달하면 일부 hidden state의 일부 feature들만 유난히 큰 magnitude의 특징들이 나타난다는 것이다.</p>
<ul>
<li>이는 단순한 outlier가 아닌, 모델의 언어 예측 성능에 매우 중요한 역할을 하는 핵심 특징들임이 밝혀졌다.</li>
</ul>
</blockquote>
<h1 id="3-wanda--pruning-by-weights-and-activations">3. Wanda : Pruning by Weights And Activations</h1>
<p><img src="https://velog.velcdn.com/images/min-soku/post/1f03d467-3a49-44a4-a25f-d44caa0b35dc/image.png" alt=""></p>
<h2 id="a-motivating-example">A Motivating Example</h2>
<ul>
<li><p>2개의 Input과 weight가 있는 뉴런이 있다고 가정</p>
<blockquote>
<p>$y=w_1x_1+w_2x_2$</p>
</blockquote>
</li>
<li><p>이제 출력의 변화를 최소화하면서 제거할 weight를 하나만 선택하는 것을 목표라 가정</p>
<blockquote>
<p>Input feature인 $x_1$과 $x_2$의 크기가 비슷한 경우 magnitude pruning에 따라 $w_1$을 제거하는 것이 좋은 전략이 될 수 있다</p>
</blockquote>
</li>
</ul>
<p>하지만, LLM에서 관찰된 바와 같이, 두 Input feature의 크기가 매우 다를 수 있다.
이 경우 가중치 $w_1$을 제거하는 것보다 가중치 $w_2$를 제거해야 한다.</p>
<blockquote>
<p>이 예시는 뉴런의 output을 결정하는 데 가중치 크기만큼이나 중요한 역할을 할 수 있는 Input activation을 고려하지 않는다는 weight magnitude pruning의 한계를 보여준다.</p>
</blockquote>
<p>따라서, LLM을 pruning할 때, 내부에서 새롭게 발견되는 큰 크기의 feature들을 고려할 때, Weight magnitude의 단순성을 유지하면서 이러한 한계를 처리할 수 있도록 설계된 pruning metric을 제안한다.</p>
<h2 id="pruning-metric">Pruning metric</h2>
<p>가중치 W의 모양($C_{out},C_{in}$)을 가진 linear layer를 생각해본다.
LLM의 경우, 이 linear layer는 ($N\times L, C_{in}$) 형태의 Input activation $X$를 받으며, $N, L$은 각각 batch, sequence 차원을 의미한다.</p>
<p>각 개별 weight에 대해 weight의 크기와 해당 Input activation의 곱으로 importance를 평가할 것을 제안한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Know “No” Better:  A Data-Driven Approach for Enhancing Negation Awareness in CLIP]]></title>
            <link>https://velog.io/@min-soku/Know-No-Better-A-Data-Driven-Approach-for-Enhancing-Negation-Awareness-in-CLIP</link>
            <guid>https://velog.io/@min-soku/Know-No-Better-A-Data-Driven-Approach-for-Enhancing-Negation-Awareness-in-CLIP</guid>
            <pubDate>Mon, 06 Oct 2025 12:14:09 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>CLIP은 Vision, Language를 연결하는 멀티 모달의 이해 능력을 크게 발전시켰지만, 부정적인 의미를 파악하지 못한다는 문제점이 존재한다.</p>
<p>이러한 문제의 원인을 파악한 결과, 부정적인 내용의 데이터의 부족으로 training된 것이 원인으로 추정된다.</p>
<p>이를 해결하기 위해 LLM을 이용하여 부정적인 내용을 포함하는 data generation파이프 라인을 도입하여 CLIP을 fine-tuning하는 NegationCLIP을 개발하였다.</p>
<p>또한 부정적인 표현의 이해에 대한 평가를 위한 벤치마크인  NegRefCOCOg를 제안한다.</p>
<h1 id="1-introduction">1. Introduction</h1>
<p>최근 VLM의 발전은 멀티모달 task에서 주목할 만한 성능을 달성하였다.
특히, CLIP은 영향력있는 모델로 떠오르며 CLIP을 base로 하는 후속 모델들의 기반이 되었다.</p>
<p>그러나, 이러한 후속 모델들은 CLIP encoder의 기능에 제약을 받기 때문에 CLIP의 robustness가 더욱 강조된다.</p>
<p>하지만, CLIP에는 부정적인 의미를 이해하지 못한다는 내재적인 한계가 존재하였으며 이를 정확하게 처리하려는 연구가 진행되었지만, 여전히 해결되지 못했다.</p>
<p><strong>따라서, CLIP이 안정적으로 동작하기 위해서는 부정 표현에 대한 정확한 이해가 필수적이다.</strong></p>
<p>본 논문의 실험에서는 CLIP이 부정적인 내용의 프롬프트의 이미를 이해하지 못하는 경우가 많다는 사실을 발견하였다. </p>
<blockquote>
<p>CLIP의 pre-training data에 부정적인 내용이 포함된 caption이 제대로 표현되지 않았거나, Image와 Caption이 제대로 align되어 있지 않고 존재하여 모델의 부정표현 이해 능력을 저해하는 것으로 나타났다.</p>
</blockquote>
<p>이러한 data의 한계를 완화하기 위해 LLM과 MLLM을 활용하여 부정적인 의미의 Caption 생성하고 Image와 정확하게 align되도록 두 가지 data generation 파이프라인을 제안한다.</p>
<ol>
<li>문맥과 관련된 object의 부재에 따라 부정 표현을 생성</li>
<li>Object의 존재 여부에 따라 부정 표현의 다양성을 확장</li>
</ol>
<blockquote>
<p><strong>Contribution</strong></p>
<ol>
<li>CLIP의 부정 표현 이해 능력의 한계가 pre-training data의 한계에서 비롯되었음을 찾아내었다.</li>
<li>LLM과 MLLM을 활용하여  Image 속 맥락에 맞는 부정 표현을 generate하는 파이프라인을 개발하여 training data의 품질을 개선하였다.</li>
<li>VLM의 부정 표현 이해 능력을 측정하기 위한 벤치마크인 NegRefCOCOg를 제안</li>
<li>NegationCLIP이라는 이름의 부정 인식이 개선된 CLIP은 VLM의 task 전반에서 탁월한 성능을 발휘한다.</li>
</ol>
</blockquote>
<h1 id="2-negation--a-critical-challenge-for-clip">2. Negation : A Critical Challenge for CLIP</h1>
<p>CLIP이 부정 표현 이해에 한계가 있음을 실험을 통해 입증하고, 이러한 한계의 원인을 파악한다.</p>
<h2 id="21-case-study--exposing-the-negation-issue">2.1 Case Study : Exposing the Negation Issue</h2>
<p>CLIP의 부정 표현 처리 능력을 평가하기 위해 얼굴 Image에 대한 40개의 binary속성이 포함된 CelebA dataset을 이용하여 이진 분류 실험을 수행하였다.</p>
<blockquote>
<p>예를 들어, ‘안경’ 속성의 경우 안경을 쓴 사람의 사진과 안경을 쓰지 않은 사람의 사진과 같은 프롬프트를 생성하여 이미지가 주어졌을 때, 두 가지 중 올바른 프롬프트를 이미지와 일치시키는 정확도를 측정한다.</p>
</blockquote>
<ul>
<li>실험 결과
무작위로 추측해도 50%는 나오는 이진 분류 작업임에도 60.8%라는 정확도를 얻었으며, 이는 상당히 낮은 수치이다.</li>
</ul>
<blockquote>
<p>실험 결과를 통해 부정 표현 이해에서 CLIP의 Robustness를 강화하기 위한 개선의 필요성을 강조</p>
</blockquote>
<h2 id="22-root-cause--limited-negation-in-training-data">2.2 Root Cause : Limited Negation in Training Data</h2>
<p>이러한 문제의 원인을 CLIP의 pre-training data의 관점에서 접근하였다.</p>
<p>부정 표현의 존재 여부와 품질을 조사하기 위해 OpenCLIP과 같은 공개 CLIP모델에 널리 사용되는 dataset인 LAION-400M을 분석하였다.
<img src="https://velog.velcdn.com/images/min-soku/post/55b58f53-e776-45ff-ab1f-6745513fccb2/image.png" alt="">
연구 결과에 따르면 LAION-400M의 caption중 약 0.704%만이 부정 표현 용어를 포함하고 있는 것으로 나타났으며, 전체 단어 수에서 차지하는 비율은 0.083%에 불과하다는 결과를 얻었다.
<img src="https://velog.velcdn.com/images/min-soku/post/56646a30-6710-4c3b-8298-4eb50cac3a4b/image.png" alt="">
또한, Caption의 부정 표현이 있더라도 Image의 시각적인 맥락과 일치하지 않는 경우가 많아 학습할 수 있는 의미있는 정보를 제공하지 못한다.
이는 VLM의 training에 사용되는 Image-Text pair 데이터의 특성때문일 수 있다.</p>
<blockquote>
<p>Image에 대한 caption은 자연스럽게 Image의 내용을 설명하는 데 초점을 맞추는 데 , 없는 것을 명시하기 보단 보이는 것을 설명하는 데 초점을 맞추기 때문에 부정 표현에 대한 노출이 적을 수밖에 없다.</p>
</blockquote>
<h1 id="3-negation-inclusive-data-generation">3. Negation-Inclusive Data Generation</h1>
<p>LLM과 MLLM을 사용하는 2가지의 Date generation 파이프라인을 설명한 다음 NegRefCOCOg 벤치마크를 제안한다.</p>
<h2 id="31-generating-negation-from-object-absence">3.1 Generating Negation from Object Absence</h2>
<p>기존의 잘 align된 Image-Caption dataset을 활용하여 새로운 주석을 추가할 필요 없이 활용도를 극대화한다.</p>
<blockquote>
<p>Object가 Image에 존재할 것 같지만 실제로는 존재하지 않는 그럴듯한 Object를 기반으로 부정 표현을 자연스럽게 통합시켜 기존의 Caption을 보강한다.</p>
<blockquote>
<p>Object가 Image에 존재 여부는 MLLM을 통해 정확하게 판단할 수 있다.</p>
</blockquote>
</blockquote>
<p>이 파이프라인의 접근 방식은 </p>
<ol>
<li>LLM을 사용하여 그럴듯한 Object를 식별하고 해당 Image의 caption을 제공한 뒤에<ol start="2">
<li>MLLM을 이용하여 Image에 그럴듯한 object가 없는지 확인한다.</li>
</ol>
</li>
<li>Object가 없음이 확인된 경우, LLM을 사용하여 Caption을 보강하며 부정 표현이 없었던 경우 자연스럽게 부정 표현을 통합함으로써 training data를 보강한다.
<img src="https://velog.velcdn.com/images/min-soku/post/683dbfcf-d3ed-4a3a-ae68-20383f2ae351/image.png" alt=""></li>
</ol>
<blockquote>
<p><strong>1. Caption에서 그럴듯한 object추출하기</strong>
각각의 Image-caption pair data에 대해, 먼저 Caption만 LLM에 제공하여 caption에 언급되지는 않았지만 Image에 존재할 가능성이 있는 그럴듯한 object를 식별한다.</p>
</blockquote>
<blockquote>
<p><strong>2. MLLM으로 object의 존재 여부 확인</strong>
1번 과정은 Image를 고려하지 않기 때문에 식별한 그럴듯한 object가 실제로 Image에 존재할 가능성이 있다.
이러한 object의 존재 여부를 확인하기 위해 MLLM에 Image를 제공하고 식별된 object의 존재 여부를 묻는다.</p>
</blockquote>
<blockquote>
<p><strong>3. 부정 표현으로 caption 보강</strong>
MLLM이 없다고 판단한 object의 경우, LLM을 사용하여 누락된 object에 대한 정보를 부정 표현으로 추가하여 기존의 caption을 보강한다.</p>
</blockquote>
<h2 id="32-expanding-diversity-of-negation">3.2 Expanding Diversity of Negation</h2>
<p>위의 파이프라인은 효과적이지만 object와 관련된 부정표현으로만 제한된다.
Data를 더욱 풍부하게 하기 위해 VQA(Visual Question Answering) dataset에서 가져온 data를 활용하는 보조 파이프라인을 사용한다.</p>
<blockquote>
<p>다양한 Question-Answer pair를 활용하여 부정 표현의 다양성을 도입한다.</p>
</blockquote>
<p>이러한 pair는 object의 존재뿐만 아니라 수행 중인 task 및 object가 가진 속성과 같은 측면을 포함하므로, 더 광범위한 Image에 부정 표현을 통합할 수 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/e362ace3-c205-4130-9049-8e41a97401f5/image.png" alt=""></p>
<blockquote>
<p><strong>1. “No” data 선택</strong>
VQA dataset에서 답변이 ”No”인 Image-Question-Answer를 식별한다.</p>
</blockquote>
<blockquote>
<p><strong>2. 부정 표현으로 caption 보강</strong>
선택한 각 Image와 원본 caption에 대해 LLM을 사용하여 question과 해당 answer에 따라 부정 표현으로 caption을 보강한다.</p>
</blockquote>
<h2 id="33-negrefcocog-benchmark-proposal">3.3 NegRefCOCOg Benchmark Proposal</h2>
<p>기존의 부정 표현을 위한 벤치마크인 VALSE는 “No”만을 유일한 부정 표현으로 삼고 object의 존재 여부에만 초점을 맞추고 있기 때문에 NegRefCOCOg를 제안하여 이러한 한계를 해결한다.
<img src="https://velog.velcdn.com/images/min-soku/post/af78255e-8ced-47d0-888c-757d42368e1b/image.png" alt=""></p>
<blockquote>
<p>“No”, “Not”, “Without”과 같은 다양한 부정 표현을 포함하고 있으며, object의 존재 외에도 동작과 속성을 포함하고 있다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[CLIPLoss and Norm-Based Data Selection Methods for Multimodal Contrastive Learning]]></title>
            <link>https://velog.io/@min-soku/CLIPLoss-and-Norm-Based-Data-Selection-Methods-for-Multimodal-Contrastive-Learning</link>
            <guid>https://velog.io/@min-soku/CLIPLoss-and-Norm-Based-Data-Selection-Methods-for-Multimodal-Contrastive-Learning</guid>
            <pubDate>Wed, 10 Sep 2025 13:47:15 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>CLIP 같은 비전-언어 모델 학습에서 웹 데이터는 잡음이 많아, 좋은 데이터만 골라내는 데이터 선택(data selection) 이 매우 중요하다.</p>
<ul>
<li>기존 연구</li>
</ul>
<ol>
<li><p>CLIP 외부 모델을 활용하는 방법</p>
</li>
<li><p>새로운 CLIP 스타일 모델을 학습하는 방법</p>
</li>
<li><p>특정 모델 특성에 의존하지 않고, 모든 CLIP 임베딩에 적용 가능한 더 나은 지표 개발</p>
<blockquote>
<p>하지만 (3)은 아직 충분히 연구되지 않음.</p>
</blockquote>
</li>
</ol>
<ul>
<li>제안 기법</li>
</ul>
<ol>
<li><p>s-CLIPLoss: CLIPScore를 개선한 품질 측정 지표 (대조 샘플까지 고려)</p>
</li>
<li><p>NormSim: 다운스트림 과제 데이터와의 유사성을 측정하는 노름 기반 지표.</p>
</li>
</ol>
<h1 id="1-introduction">1. Introduction</h1>
<p>웹에서 수집한 data로부터 대규모 Vision-Language dataset을 구성하는 것은 VLM의 pre-training에서 일반적인 방식이다.</p>
<p>하지만, 웹 기반 data의 품질이 아직까지도 중요한 문제점으로 남아 있다.</p>
<blockquote>
<p>연구 결과, 어떤 모델이나 학습 기법을 사용하더라도, dataset의 선택이 성능에 상당한 영향을 미친다는 것이 밝혀졌다.</p>
</blockquote>
<hr>
<p>기존의 data selection 방법들은 크게 세 가지 접근 방법으로 나뉜다.</p>
<ol>
<li><p>CLIPScore 같은 기존의 CLIP 모델을 활용</p>
<blockquote>
<p>Image와 Text embedding 간 cosine similarity를 계산하여 맞지 않는 데이터를 제거</p>
</blockquote>
</li>
<li><p>외부 모델을 활용</p>
<blockquote>
<p>OCR모델로 텍스트만 있는 이미지를 제거하거나, 영어가 아닌 data를 제거</p>
</blockquote>
</li>
<li><p>새로운 CLIP 스타일 모델 학습</p>
<blockquote>
<p>높은 품질의 data로 새로운 CLIP모델을 학습하여, 원래 CLIP보다 data filtering을 더 잘하게 만들었지만, 모델 자체의 성능은 낮다.</p>
</blockquote>
</li>
</ol>
<hr>
<p>이러한 이전의 연구들은 CLIPScore같은 전통적인 지표만 사용하여 embedding을 비효율적으로 사용해왔다.</p>
<p>본 논문에서는 주어진 기존의 CLIP embedding을 더 효과적으로 활용하는 filtering 방법을 제안한다.</p>
<blockquote>
<p>CLIP뿐만 아니라 다른 외부 모델에서도 결합이 가능한 방법 제안</p>
</blockquote>
<p><strong>Contribution</strong>
CLIPScore의 대안으로 surrogate-CLIPLoss(s-CLIPLoss)제안
또한 task에 대한 사전 지식이 있을 경우 활용할 수 있는 p-norm Similarity score 제안</p>
<p><strong>1. s-CLIPLoss</strong>
기존 방법은 multimodal data의 품질을 image와 text간 cosine similarity로만 평가하였지만, text 속에 &quot;image&quot;라는 단어가 포함되면 어떠한 image와도 높은 similarity를 갖게되는 등의 문제점이 있다.</p>
<blockquote>
<p>CLIP의 학습 방식에서 착안하여 s-CLIPLoss는 해당 image와 짝지어진 text와의 similarty만 보는 것이 아니라 다른 샘플들과의 유사도도 고려하여 normalize한다.</p>
<blockquote>
<ul>
<li>&quot;image&quot; 같은 흔한 단어는 모든 이미지와 높은 점수를 주지만, 대조 샘플들과도 다 높게 나오기 때문에 정규화하면 실제 점수는 낮아진다.</li>
<li>한 이미지-텍스트 쌍이 진짜로 잘 맞으려면,정답 쌍과는 높은 유사도를 가져야 하고, 다른 대조 샘플들과는 낮은 유사도를 가져야 한다.</li>
</ul>
</blockquote>
</blockquote>
<p><strong>2. NormSim</strong>
만약 목표 task와 동일한 분포에서 뽑은 data에 접근할 수 있다면, 이 지식을 data filtering에 활용하는 NormSim지표를 제안</p>
<h1 id="2-problem-setup">2. Problem Setup</h1>
<h2 id="data-filtering-on-multimodal-dataset">Data Filtering on Multimodal Dataset</h2>
<p>Training data $D_{train}={x^v,x^l}$이 주어져 있을 때, 우리의 목표는 $D_{train}$에서 부분집합 $S$를 찾아내어 CLIP모델을 학습했을 때, 특정 task에서 zero-shot accuracy를 최대화하는 것이다.</p>
<h2 id="clip-score-and-embedding">CLIP score and embedding</h2>
<p>최근 연구들은 OpenAI의 CLIP모델을 교사 모델로 사용하여 data의 품질 점수를 얻는다.</p>
<p>이 기본 CLIP 모델을 $\bar{f}^{vl}$로 나타낼 때, 임의의 data $x^{vl}$에 대해, 이 모델은 정규화된 단위 벡터 $\bar{f}^{vl}(x^{vl})$을 출력한다.</p>
<p>널리 사용되는 filtering 지표인 CLIPScore는 $&lt;\bar{f}^{v}(x^v),\bar{f}^{l}(x^l)&gt;\in[-1,1]$로 정의된다.</p>
<h1 id="3-data-filtering-strategy">3. Data Filtering Strategy</h1>
<h2 id="31-s-cliploss-a-better-metric-than-clipscore">3.1 s-CLIPLoss: A Better Metric than CLIPScore</h2>
<p>기존 CLIPScore의 문제는 단순히 image-text embedding간의 cosine similarity만 계산하여 편향된 단어가 포함된 경우에 취약하다.</p>
<blockquote>
<p>텍스트에 “image”라는 단어만 있어도, 거의 모든 이미지와 높은 점수를 얻게 됨 → 잘못된 고득점</p>
<ul>
<li>즉, 데이터가 진짜 잘 맞는 쌍인지, 아니면 그냥 흔한 단어 때문에 점수가 높아진 건지 구분을 못 한다.</li>
</ul>
</blockquote>
<p>s-CLIPLoss는 CLIP의 학습 방식에서 착안한다.</p>
<blockquote>
<p><strong>CLIP loss(CLIP의 학습 방식)</strong></p>
<blockquote>
<p>$\ell_{B^*}(x_i^{vl}) = -\frac{1}{2} \left[
\log \frac{\exp\left(\bar f_v(x_i^v)^\top \bar f_l(x_i^l) / \tau\right)}{\sum_{j=1}^N \exp\left(\bar f_v(x_i^v)^\top \bar f_l(x_j^l) / \tau\right)}+\log \frac{\exp\left(\bar f_v(x_i^v)^\top \bar f_l(x_i^l) / \tau\right)}{\sum_{j=1}^N \exp\left(\bar f_v(x_j^v)^\top \bar f_l(x_i^l) / \tau\right)}
\right]$</p>
</blockquote>
<ul>
<li>$B^*$ : 무작위로 뽑힌 batch</li>
<li>$f_v(x_i^v)$ : Image encoder 출력</li>
<li>$f_l(x_i^l)$ : Text encoder 출력</li>
<li>첫 번째 log 항 : Image to text 매칭</li>
<li>두 번째 log 항 : Text to image 매칭</li>
</ul>
<blockquote>
<p>CLIP을 학습할 때는 positive pair뿐만 아니라, negative pair도 고려하여 positive pair와는 높은 similarity를 가져야 하고, negative pair와는 낮은 similarity를 가져야 한다.</p>
</blockquote>
</blockquote>
<p>s-CLIPLoss는 CLIPScore를 그대로 쓰지 않고, negative sample들과 비교했을 때, 상대적으로 얼마나 높은 점수를 얻었는지를 반영한다.</p>
<p><strong>수식적으로는 CLIPScore에 정규화 항을 추가한 형태이다.</strong></p>
<ul>
<li>CLIPScore = “이 쌍이 얼마나 비슷한가?”</li>
<li>s-CLIPLoss = “이 쌍이 다른 후보들과 비교했을 때 특별히 얼마나 비슷한가?”</li>
</ul>
<blockquote>
<p><strong>s-CLIPLoss</strong>
CLIPScore에 정규화 항을 더한 형태로 사용한다.</p>
<blockquote>
<p>$\tau \cdot \ell_{B^<em>}(x_i^{vl}) = -CLIPScore(x_i^{vl}) + R^</em>$</p>
</blockquote>
<ul>
<li>$R^*$ : Negative sample들과의 비교를 포함하는 정규화 항</li>
</ul>
<blockquote>
<p>$\tau \cdot \ell_{B^<em>}(x_i^{vl}) 
= -CLIPScore(x_i^{vl}) + \frac{\tau}{2} \left[
\log \left( \sum_{j \in B^</em>} \exp \left( \frac{\bar f_v(x_i^v)^\top \bar f_l(x_j^l)}{\tau} \right) \right)
+\log \left( \sum_{j \in B^*} \exp \left( \frac{\bar f_v(x_j^v)^\top \bar f_l(x_i^l)}{\tau} \right) \right)
\right]
$</p>
</blockquote>
<ul>
<li>첫 번째 항은 단순 Cosine similarity(CLIPScore)</li>
<li>두 번째 항은 같은 batch 안에 있는 다른 sample들과 비교하는 정규화 항</li>
</ul>
</blockquote>
<p>하지만, 실제로는 OpenAI의 CLIP 모델의 training dataset과 실제 batch를 어떻게 분할하였는지는 접근할 수 없기 때문에, 우리가 학습시킬 모델의 training data에서 무작위로 K개의 batch를 선택하여 CLIP Loss($\ell_{B^*}(x_i^{vl})$)를 계산한 후 평균을 내어 정규화 항을 근사한다.</p>
<blockquote>
<p>$s\text{-}CLIPLoss(x_i^{vl}) := \frac{1}{K} \sum_{k=1}^K \ell_{B_k}(x_i^{vl})
\approx \tau \cdot \ell_{B^<em>}(x_i^{vl}) =-CLIPScore(x_i^{vl}) + R^</em>$</p>
</blockquote>
<hr>
<p><strong>Motivation behind s-CLIPLoss</strong></p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/988548a2-e2f9-4159-a437-0b4592a47cf3/image.png" alt=""></p>
<blockquote>
<p>오른쪽 image에서 “Image”나 “Photo”라는 단어를 포함한 텍스트는 거의 모든 시각적 콘텐츠와 쉽게 매칭될 수 있다. 
마찬가지로 “verloopring” 이미지는 매우 단순한 특징만을 가지고 있어서 “white”, “empty”, “circle”과 같은 많은 단어들과 매칭될 수 있다.</p>
<ul>
<li>따라서 CLIPScore가 높게 나오더라도(높은 절대값), 상대적인 s-CLIPLoss는 낮게 나온다.</li>
</ul>
</blockquote>
<p>정규화 항 값이 높다는 것은 이미지 임베딩, 텍스트 임베딩, 혹은 둘 다가 대응되는 정답 쌍 외에도 여러 대조 쌍과 쉽게 매칭될 수 있다는 것을 의미</p>
<h2 id="32-normsim-a-new-training-target-similarity-metric">3.2 NormSim: A New Training-Target Similarity Metric</h2>
<p>s-CLIPLoss는 data의 품질만 고려한다.(&quot;이 image-text 쌍이 진짜 잘 맞는가?&quot;)</p>
<p>하지만, 실제 task에서는 이 data가 내 task에 도움이 되는가?가 더 중요하다.</p>
<p>그래서 등장한 기법이 NormSim이다.</p>
<blockquote>
<p>단순히 품질만 보는 것이 아닌, training data와 target data가 얼마나 유사한지 측정한다.</p>
<ul>
<li>Training data  : CLIP과 같은 멀티 모달을 학습할 때 사용하는 대규모 dataset</li>
<li>Target data : 실제로 성능을 내고 싶은 task의 data 분포를 대표하는 작은 subset</li>
</ul>
</blockquote>
<p><strong>NormSim</strong>
각 training 샘플 $x^{vl}$과 target dataset $X_{target}$사이의 similarity를 p-norm으로 계산한다.</p>
<blockquote>
<ol>
<li>Training 샘플 $x^v$와 target dataset 안 모든 샘플 $x_t$의 cosine similarity를 계산</li>
<li>각 similarity를 제곱한 뒤 모두 합산</li>
<li>1/p 거듭제곱으로 p-norm 값으로 정규화</li>
</ol>
<ul>
<li>Training 샘플이 target dataset 전체오 얼마나 비슷한지 측정하는 지표</li>
</ul>
<blockquote>
<p>$NormSim_p(X_{\text{target}}, x) := 
\left| \bar f_v(X_{\text{target}})^\top \bar f_v(x^v) \right|<em>p
= \left( \sum</em>{x_t \in X_{\text{target}}} 
\left| \left\langle \bar f_v(x_t^v), \bar f_v(x^v) \right\rangle \right|^p 
\right)^{1/p}$</p>
</blockquote>
<ul>
<li>$x^v$ : Training data에서 선택된 image 샘플</li>
<li>$\bar f_v(x^v)$ : Image 샘플 $x^v$의 임베딩 벡터</li>
<li>$\bar f_v(x_t^v)$ : Target dataset 안의 image $x_t$의 임베딩</li>
<li>$p$ : p-norm의 종류 (2 or $\infin$)</li>
</ul>
</blockquote>
<hr>
<p><strong>&lt;p-norm의 2가지 경우&gt;</strong></p>
<p><strong>1. $p=2$ : 평균적 similarity</strong></p>
<blockquote>
<blockquote>
<p>$NormSim_2(x_t, x_i)=\left( \sum_{x_t \in X_{\text{target}}} \left\langle \bar f_v(x_t^v), \bar f_v(x^v) \right\rangle^2 
\right)^{1/2}$</p>
</blockquote>
<ul>
<li>전체 target data의 분포와 전체적으로 얼마나 aligned 되어 있는지 측정</li>
<li>목적 : Data가 target 분포의 주성분과 잘 맞는지를 본다</li>
</ul>
</blockquote>
<p><strong>2. $p=\infin$ : 최고 similarity</strong></p>
<blockquote>
<blockquote>
<p>$NormSim_{\infin}(x_t, x_i)=max_{x_t \in X_{\text{target}}} 
 \bar f_v(x_t^v), \bar f_v(x^v) )$</p>
</blockquote>
<ul>
<li>Target data 중 하나라도 매우 비슷하면 선택</li>
<li>목적 : 이 샘플은 적어도 하나의 target data와 잘 맞으면 다</li>
</ul>
</blockquote>
<hr>
<p> <strong>Necessity of using vision-only information</strong>
 이 방법에서는 text embedding 대신 image embedding($x^v)$만 사용한다.</p>
<p>그 이유는 크롤링을 통해 얻는 text는 너무 짧고 모호하기 때문에 data의 분포를 잘 설명하지 못한다.</p>
<p>하지만 image 임베딩은 target 분포를 더 잘 반영한다.</p>
<p><strong>Generality of NormSim in choosing teacher model</strong>
NormSim 방법에서는 image embedding만 사용하기 때문에 굳이 CLIP만을 사용할 필요가 없다.</p>
<p>다른 pre-trained된 모델의 embedding을 사용할 수 있다.</p>
<p><strong>Theoretical justification</strong>
기존의 방법들은 다양성을 강제로 확보하기 위해 target 주변의 sample들을 고르지만 NormSim은 다양성을 강제로 고려하지 않고도 p=2인 경우 최족의 similarity를 보여주며 noise가 많은 data에서도 효과적이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Filter Images First, Generate Instructions Later:  Pre-Instruction Data Selection for Visual Instruction Tuning]]></title>
            <link>https://velog.io/@min-soku/Data-Filtering-Networks</link>
            <guid>https://velog.io/@min-soku/Data-Filtering-Networks</guid>
            <pubDate>Tue, 09 Sep 2025 14:00:12 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>LVLM의 tuning에는 대규모 image-text pair의 데이터셋이 필요하며, 이는 비용이 많이 든다.</p>
<p>최근 Visual instruction Tuning(VIT) data selection 연구는 고품질의 소수의 image-text pair의 데이터만을 골라내어 전체 training과 유사한 성능을 유지하면서, 실행시간을 줄이는 데 초점을 맞추고 있다.</p>
<blockquote>
<p>VIT란, VLM에게 image에 대한 사람의 지시를 이해하고 따르는 능력을 학습시키는 과정</p>
<ul>
<li>V-L task에 대해 general한 능력을 갖게하는 과정</li>
</ul>
</blockquote>
<p>하지만, 여기에서의 문제는, text가 붙지 않은 이미지(Label이 없는 image)에서 text를 생성하는 비용이 매우 높다는 것이다.</p>
<blockquote>
<p>현재 대부분의 VIT 데이터셋은 사람의 수작업 주석이나, GPT API같은 유로 서비스에 의존해서 비용이 높다.</p>
<blockquote>
<p>기존 Data selection 방식은 image-text pair가 만들어진 뒤 그 중 일부를 고르는 방식</p>
<ul>
<li>애초에 image-text pair를 만들 때의 주석 처리 비용이 크다.</li>
</ul>
</blockquote>
</blockquote>
<p>이를 해결하기 이해, Pre-Instruction Data Selection, PreSel)이라는 Data selection 방법을 제안한다.</p>
<p>가장 유익한 Label이 없는 image를 선별하고, 선택된 image에 대해서만 instruction을 생성한다.</p>
<blockquote>
<p>주석을 만들기 전에 image 자체를 먼저 선별하고, 선택된 이미지에 대해서만 주석 생성</p>
</blockquote>
<h1 id="1-introduction">1. Introduction</h1>
<p>LVLM은 멀티모달 task에서 좋은 성능을 보여주고 있는데, Visual Instruction Tuning은 LVLM을 training할 때 핵심 단계로, 모델이 지시를 따르고 다양한 task 전반적으로 general하게 수행할 수 있게 한다.</p>
<p>이때, 지시는 다양한 vision-language task에서 사용하는 지시들을 포함하고 있다.</p>
<blockquote>
<p>여기서 말하는 지시는 <strong>단순한 image에 대한 caption이 아니라, 모델이 task를 수행할 수 있게 설계된 text 프롬프트</strong></p>
<blockquote>
<p>예)</p>
<ul>
<li>“이 이미지에서 개의 수를 세어라” (counting)</li>
<li>“사진 속 음식은 무엇인가?” (VQA)</li>
<li>“이 장면을 설명하라” (captioning)</li>
</ul>
</blockquote>
</blockquote>
<p>또한, 일반적인 VIT data들은 label이 없는 image와 그 image에 대해서 사람이 직접 주석처리하거나, GPT API를 통해 만들어낸 지시문으로 이루어진 image-text instruction pair로 이루어져 있다.</p>
<hr>
<p><strong>그러나, 현재 VIT 과정에는 2가지 핵심 문제가 존재</strong></p>
<ol>
<li><p>다양한 task에서 온 instruction들을 결합한 data에서는 data간 중복이 발생해 학습 시간이 크게 늘어나면서, 늘어난 시간에 비해 성능이 비례하지 않는다.</p>
</li>
<li><p>고품질의 instruction을 생성하는 데 비용이 매우 높다.</p>
<blockquote>
<p>GPT-4같은 서비스로 image에 대해 instruction을 만들면 API비용이 매우 많이 들고, 품질을 보장하기 위해선 사람의 개입이 자주 필요하다.</p>
</blockquote>
</li>
</ol>
<p>그래서, 최근에는 정보량이 높은 고품질의 image-instruction만 selection해서 LVLM을 tuning하여 데이터 중복 문제를 해결하고 학습 시간 문제를 해결하려 했지만, </p>
<p><strong>1. 대규모 VIT dataset을 위해 instruction을 생성하는 높은 비용 문제는 간과되어 왔다.</strong>
<strong>2. 또한, 이러한 방법들은 이미 image-instruction pair의 데이터셋이 준비되어 있다는 것을 가정하여, selection 알고리즘을 수행하는 것이다.</strong></p>
<hr>
<p>따라서, 이를 해결하기 위해 이런 질문을 제기한다.</p>
<blockquote>
<p><strong>여러 vision-language task에서 수집된 image가 주어졌을 때, instruction 생성 이전에 LVLM fine-tuning에 가장 영향력있는 image를 어떻게 고를 것인가?</strong></p>
</blockquote>
<p>본 논문에서는 Pre-Instruction data Selection이라는 새로운 접근 방법을 제안</p>
<ol>
<li>Task 중요도 측정</li>
<li>Task별 cluster기반 selection</li>
</ol>
<p><strong>Contribution</strong></p>
<ul>
<li><p>Pre-Instruction data Selection을 처음으로 도입하여, 학습 시간뿐 아니라 instruction 생성 비용까지 줄일 수 있다.</p>
</li>
<li><p>Instruction 생성 비용의 15%만 사용해도 전체 VIT dataset으로 fine-tuning한 LVLM과 거의 비슷한 성능을 보였다.</p>
</li>
</ul>
<h1 id="2-related-work">2. Related Work</h1>
<h2 id="vision-instruction-tuning">Vision Instruction Tuning</h2>
<p>Instruction tuning은 LLM이 instruction을 따르고 general한 task에서 수행할 수 있도록 하는 training 단계이다.</p>
<p>이러한 자연어 처리 영역에서 multimodal을 위한 training으로 확장되며 LVLM을 위한 Vision Instruction Tuning으로 확장하고 있다.</p>
<p>이를 위해 대규모 VIT dataset이 필요한데, 이러한 VIT dataset을 만들기 위한 작업은 대부분 GPT모델을 사용하며 이는 비용이 많이 든다.</p>
<h2 id="data-selection-for-visual-instruction-tuning">Data Selection for Visual Instruction Tuning</h2>
<p>높은 training cost로 인해 최근 연구에서는 data에 효율적인 instruction tuning을 수행하고 있다.</p>
<p>최근 몇 가지 연구들에서 VIT를 위한 data selection이 수행되고 있는데, 이 연구들은 모두 전체 training cost를 증가시켜 data selection을 하는 목적에 모순된다.</p>
<h1 id="3-methodology">3. Methodology</h1>
<p>먼저 VIT를 위한 Pre-Instruction data Selection를 공식화하였다.</p>
<p><strong>&lt;</strong> <strong>Problem Formulation</strong> <strong>&gt;</strong></p>
<p>Label이 없는 image들의 집합 $D$가 있다고 가정</p>
<blockquote>
<p>이 image들은 다양한 dataset에서 모여 $M$개의 서로 다른 vision task 집합 ${T_i}^M_{i=1}$을 구성</p>
</blockquote>
<p>여기서 $D=\cup^M_{i=1}T_i$이고, $D$안의 샘플의 개수는 $|D|$라 한다.
각 task $T_i$는 Label이 없는 image들의 집합으로 이루어진다. $T_i={I^i_a}^{|T_i|}_{a=1}$</p>
<blockquote>
<p>여기서 task는 image에 대해 겹칠 수 있음에 유의해야 한다.</p>
</blockquote>
<p>Label이 없는 image $I$가 task $T_i$에 속한다면, 그에 해당하는 text instruction $Y$는 $Y=F_i(I)$로 생성된다.</p>
<blockquote>
<p>$F_i$는 task $T_i$의 instruction 생성 과정</p>
</blockquote>
<hr>
<p>Pre-instruction Data Selection의 목표는, Label이 없는 image 집합 $D$에서 높은 가치가 있는 작은 부분 집합 $D_s \subset D$을 고른 뒤, 이 작은 집합에 대해서만 instruction을 생성하는 것이다.</p>
<p>이후 $(I_a,Y_a)^{|D_s|}_{a=1}$과 같은 image-text instruction pair로 LVLM을 fine-tuning하면, 모델의 instruction 이해 능력을 크게 향상시키고, 전체 dataset으로 tuning한 경우와 유사한 성능을 얻을 수 있다.</p>
<h2 id="31-task-importance-estimation">3.1. Task-Importance Estimation</h2>
<p>최종 선택 집합 $D_s$에 각 task별 샘플을 얼마나 배분할지 결정하는 것은 매우 중요하다</p>
<p>단순히 각 task에 사용 가능한 이미지 수에 비례해서 배분하면 task마다 중복되는 학습 능력이 다르기 때문에, 최적 이하의 성능으로 이어질 수 있다.</p>
<blockquote>
<p>어떤 task는 유사한 task를 통한 학습만으로도 충분히 수행될 수 있어, 직접적으로 많은 샘플을 뽑을 필요가 적다.</p>
</blockquote>
<hr>
<p>먼저 전체 VIT dataset $D$에서 무작위로(전체 5%) 소량만 선택한 작은 집합 $D_{ref}$으로 LVLM을 1epoch 만큼만 fine-tuning하여 기본적인 instruction을 따를 수 있는 능력만을 갖추도록 한다.</p>
<p>이 fine-tuning된 모델을 reference model이라 부른다.</p>
<p>이 reference model이 $D_{ref}$에서 내는 loss를 활용하여, task에 샘플을 배분하기 위한 중요도 측정 점수인 Instruction Relevance Score를 정의한다.</p>
<hr>
<p><strong>IRS 정의</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/518f37c1-4acc-4231-8c4a-b7eb22669214/image.png" alt=""></p>
<p>위 그림처럼 $D_{ref}$내 각 VIT에는 (I,Q,R)의 삼중항으로 표현된다.</p>
<ul>
<li>I : Image</li>
<li>Q : 사람이 만든 텍스트 질문</li>
<li>R : GPT가 생성한 응답</li>
</ul>
<p>IRS는 reference model의 다음 token에 대한 예측 손실(CE Loss)를 비교하여 계산된다.</p>
<blockquote>
<p><strong>1. I와 Q만을 이용하여 R을 예측할 때의 Loss</strong></p>
<blockquote>
<p>$L_{R|Q,I}=-\frac{1}{t^R}\sum^{|t^R|}<em>{j=1}logP_\theta(t^R_j|I,Q,t^T</em>{&lt;j})$</p>
</blockquote>
<ul>
<li>$t^R$ : GPT가 생성한 응답 R을 tokenization한 것</li>
<li>$|t^R|$ : 토큰 개수</li>
<li>$t^T_{&lt;j}$ : Referenece모델이 j번째(현재) 전까지 예측한 답변 토큰</li>
<li>$t^R_j$ : GPT가 생성한 j번째 정답 응답</li>
</ul>
<p>: 모델이 예측한 j번째 토큰과 GPT가 생성한 j번째 정답 토큰 간 CELoss계산</p>
<p>즉, 이미지와 질문을 조건으로 줄 때, 모델이 GPT가 만든 정답 응답을 얼마나 잘 재현했는가를 나타내는 값이다.</p>
</blockquote>
<blockquote>
<p><strong>2. Q없이 I만을 이용하여 R을 예측할 때의 Loss</strong></p>
<blockquote>
<p>$L_{R|I}=-\frac{1}{t^R}\sum^{|t^R|}<em>{j=1}logP_\theta(t^R_j|I,t^T</em>{&lt;j})$</p>
</blockquote>
</blockquote>
<blockquote>
<p><strong>3. IRS 정의</strong></p>
<blockquote>
<p>$IRS=\frac{L_{R|Q,I}}{L_{R|I}}$</p>
</blockquote>
<ul>
<li><p>높은 IRS : Q를 추가해도 R을 생성하는 데 도움이 되지 않는다
=&gt; 질문 Q의 필요성이 낮음</p>
</li>
<li><p>낮은 IRS : 모델이 Q가 있을 때 R을 훨씬 잘 생성한다.
=&gt; 질문 Q가 중요한 역할을 한다.</p>
</li>
</ul>
<p>: IRS는 특정 task가 얼마나 instruction에 의존하는지를 보여준다.</p>
</blockquote>
<hr>
<p><strong>과제 중요도 계산</strong></p>
<p>각 task $T_i$의 IRS 평균은 다음과 같이 정의한다.</p>
<blockquote>
<blockquote>
<p>$s(T_i)=\frac{1}{|D^i_{ref}|}\sum_{I\in T_i}IRS(I,Y)$</p>
</blockquote>
<ul>
<li>$T_i$ : i번째 task</li>
<li>$D^i_{ref}$ : $D_{ref}$중 task $T_i$에 속하는 샘플 모음</li>
<li>$|D^i_{ref}|$ : $D_{ref}$중 task $T_i$에 속하는 샘플의 개수</li>
<li>$IRS(I,Y)$ : Image와 Y(Q,R쌍)에서 Y가 얼마나 중요한지에 대한 score</li>
</ul>
<p>: Task $T_i$에 속한 샘플들의 IRS를 전부 평균낸 값이 $s(T_i)$이다</p>
<ul>
<li><p>낮은 $s(T_i)$ : 해당 task가 중요하다 </p>
</li>
<li><p>높은 $s(T_i)$ : 해당 task가 덜 중요하다</p>
</li>
</ul>
</blockquote>
<p>최종적으로 각 task의 상대적 비율은 softmax 형태로 정하여 이를 기반으로 task별 샘플링 예산을 배정한다.</p>
<blockquote>
<blockquote>
<p>$w(T_i)=\frac{exp(-s(T_i)/\tau)}{\sum^M_{j=1}exp(-s(T_j)/\tau)}$</p>
</blockquote>
<ul>
<li>$w(T_i)$ : 최종적으로 task $T_i$가 전체 샘플에서 차지하는 비율(샘플링 예산)</li>
</ul>
</blockquote>
<hr>
<p><img src="https://velog.velcdn.com/images/min-soku/post/aa6398e6-5eca-42f4-a6e2-735650b7884e/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/66eb4e80-6bb4-4da0-b68e-a01f770c96ee/image.png" alt=""></p>
<h2 id="32-task-wise-cluster-based-selection">3.2. Task-wise Cluster-based Selection</h2>
<p>$D_{ref}$를 통해 task별 상대적 비율을 정했으니, 이제 <strong>각 task 내부에서 instruction 생성을 위한 정보량이 높은 label이 없는 image들을 선택하는 단계</strong>에 집중한다.</p>
<p>과제 $T_i$에 속한 label이 없는 image들에 대해서, pre-trained된 경량 vision encoder(DINOv2)를 이용하여 visual feature를 추출한다.</p>
<blockquote>
<p>입력 이미지에 대해, transformer 층의 [CLS]토큰에서 feature vector $v_I$를 얻는다.</p>
</blockquote>
<p>이렇게 얻은 $T_i$의 feature vector $v_I$들을 k-mean 알고리즘으로 $C$개의 cluster ${A^i_c}^C_{c=1}$로 묶는다.</p>
<blockquote>
<p>$C=\frac{|T_i|}{100}$으로 설정</p>
</blockquote>
<hr>
<p><strong>Cluster별 샘플 수 결정</strong></p>
<p>Task $T_i$의 $c$번째 cluster에서 샘플을 선택할 때는, cluster의 상대적 크기 $|A^i_c|$와 task의 중요도 가중치 $w(T_i)$를 모두 고려한다.</p>
<p>구체적으로, 다음과 같이 선택할 샘플의 수 $n_c$를 정한다.</p>
<blockquote>
<blockquote>
<p>$n_c=\lfloor \frac{w(T_i)\cdot |A^i_c|}{|T_i|}\cdot|D_s| \rfloor$</p>
</blockquote>
<ul>
<li>$n_c$ : task $T_i$의 $c$번째 cluster에서 선택할 샘플의 개수</li>
<li>$w(T_i)$ : task $T_i$의 중요도</li>
<li>$|A^i_c|$ : $T_i$에서 $c$번째 cluster에 속한 image의 수</li>
<li>$|T_i|$ : task $T_i$의 전체 image 수</li>
<li>$|D_s|$ : 최종적으로 뽑을 전체 샘플의 수
: 중요한 task는 전체에서 더 많이 샘플링되고, 그 안에서도 클러스터의 크기 비율에 맞게 뽑혀서 다양성 유지</li>
</ul>
</blockquote>
<hr>
<p><strong>Cluster 내부 선택</strong></p>
<p>각 cluster의 내부에서는, Neighbor Centrality(NC) 점수를 기준으로 가장 대표적인 $n_c$개의 image를 고른다.</p>
<blockquote>
<blockquote>
<p>$s_{nc}=\frac{1}{k}\sum_{I_a\in kNN(I)}sim(v_i,v_{I_a})$</p>
</blockquote>
<ul>
<li>$kNN(I)$ : Image I의 feature space에서 k개의 최근접 이웃</li>
<li>$sim$ : Cosine similarity</li>
</ul>
<p>: 즉, $s_nc$가 높다는 것은 해당 iamge가 주변 이웃들과 매우 유사하다는 뜻이고, 이는 그 이미지가 대표적 샘플일 가능성이 높음을 의미한다.</p>
</blockquote>
<hr>
<p>최종적으로 모든 task에서 선택된 image를 모아 최종적인 $D_s$를 구성한다.</p>
<p>이 $D_s$에 대해서만 instruction을 생성하고, 이를 사용해 LVLM을 fine-tuning한다
<img src="https://velog.velcdn.com/images/min-soku/post/4ade385a-6807-48e0-ae02-31d63b9d8a7f/image.png" alt=""></p>
<h1 id="4-experiments">4. Experiments</h1>
<p>실험은 LLaVA-1.5-7B모델을 대상으로 수행되었음</p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/9a29a533-0f00-4546-980d-c87e4001281e/image.png" alt=""></p>
<blockquote>
<ul>
<li>Dataset : LLaVA-1.5 dataset</li>
<li>Method: 비교하는 모델/방법</li>
</ul>
</blockquote>
<ul>
<li>Req. Inst. (Required Instructions): 각 방법이 지시문을 생성해야 하는 데이터 비율<blockquote>
<blockquote>
<ul>
<li>100% → 전체 데이터에 대해 지시문 필요</li>
<li>15% → 데이터의 15%만 지시문 생성</li>
</ul>
</blockquote>
<ul>
<li>Sel. Inst. (Selected Instructions): 실제 지시문 개수 (샘플 수)</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>&lt;다른 기법&gt;</strong>
공통적으로 Sel. Inst. = 93K (전체의 15%)만 사용함</p>
<p>하지만, 지시문을 생성하는 비율은 전체 (100%)에 대해 생성함</p>
<p><strong>&lt;</strong> <strong>PreSel</strong> <strong>&gt;</strong>
데이터의 15%만 지시문 생성하면서도, 다른 selection 방법보다 consistently 더 높은 점수 기록</p>
<ul>
<li><strong>비용 절감(지시문 생성량 85%↓) + 성능 유지/개선</strong></li>
</ul>
<h2 id="presel-is-robust-across-varying-task-diversities">PreSel is robust across varying task diversities</h2>
<ul>
<li><p>LLaVA-1.5 데이터셋은 약 10개의 과제(task)만 포함 → 과제 수가 비교적 적음.</p>
</li>
<li><p>Vision-Flan 데이터셋은 무려 191개 시각 과제를 포함 → 훨씬 더 다양하고 복잡한 태스크 구성을 가짐.</p>
</li>
</ul>
<p>따라서 연구팀은 LLaVA-1.5-7B모델에서 Vision-Flan에서도 실험해 PreSel이 과제 다양성이 커져도 잘 작동하는지 검증함.</p>
<p><strong>&lt;실험 결과&gt;</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/daa6fc2f-9bd4-4f28-bcb2-cdc11eaa3490/image.png" alt=""></p>
<p>PreSel은 Vision-Flan 실험에서 전체 데이터(100%)를 사용한 LLaVA 모델보다 성능이 약간 더 높음.</p>
<p>이때 PreSel은 전체 데이터 중 15%만 지시문을 생성했음에도 불구하고 성능 손실이 없고, 오히려 더 나음.</p>
<blockquote>
<p>따라서 PreSel은 과제 수가 적든 많든(VQA·OCR·캡셔닝 몇 개 수준부터 191개까지), 성능 저하 없이 적용 가능하다는 게 확인됨</p>
<ul>
<li>PreSel은 과제 다양성이 큰 데이터셋에서도 강건하게 작동</li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Sparse High Rank Adapters]]></title>
            <link>https://velog.io/@min-soku/Sparse-High-Rank-Adapters</link>
            <guid>https://velog.io/@min-soku/Sparse-High-Rank-Adapters</guid>
            <pubDate>Thu, 14 Aug 2025 14:57:01 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>생성형 AI research에서 LoRA 기법이 크게 주목받고 있다.
LoRA의 주요 장점은 </p>
<ul>
<li>pre-training된 모델과 결합할 수 있어서 inference 오버헤드는 피할 수 있다.</li>
</ul>
<p>하지만,</p>
<ul>
<li>adaptor를 빠르게 교체하기 어렵고</li>
<li>Base 가중치와 결합하지 않을 경우, adapter의 빠른 교체가 가능하지만, inference에서 latency가 발생한다.</li>
</ul>
<p>이러한 문제를 해결하기 위해 <strong>Sparse High Rank Adapters(SHiRA)</strong>를 제안한다.</p>
<blockquote>
<ul>
<li>Inference시 오버헤드 없음</li>
</ul>
</blockquote>
<ul>
<li>빠른 Adapter 교체 가능</li>
</ul>
<p>SHiRA는 전체 가중치 중 1~2%만 직접 조정하고, 나머지는 그대로 두어 sparse한 adapter를 생성한다.</p>
<h1 id="1-introduction">1. Introduction</h1>
<p>LoRA는 대규모 generation 모델을 efficient하게 tuning하기 위해 확립된 기법이다.
LoRA는 fine-tuning과정에서 매우 적은 메모리를 사용하지만 성능이 우수하다.</p>
<p><strong>&lt;LoRA의 한계&gt;</strong></p>
<ol>
<li><p>대규모 모델 배포 문제</p>
<blockquote>
<p>LoRA 파라미터를 pre-training된 가중치에 결합하면 전체 가중치 행렬이 변경되는데, 대규모 모델을 on-device에 배포할 경우, inference 시 많은 가중치를 변경해야 한다.</p>
<blockquote>
<p>저장가능한 메모리가 매우 작아, 모든 layer의 가중치를 한 번에 불러올 수 없어, LoRA의 각 layer 별로 가중치를 불러오고 수정하는 과정을 반복하는 과정에서 latency가 발생한다.</p>
</blockquote>
</blockquote>
</li>
<li><p>빠른 adpater 교체의 어려움</p>
<blockquote>
<p>메모리가 제한된 환경에서는 모든 가중치를 한 번에 저장할 수 없기 때문에, Adapter의 교체가 필요한 경우에, latency가 크게 증가한다.</p>
<blockquote>
<p>다른 adapter 사용 시, 기존 adapter를 해제하여 base 모델의 가중치로 다시 돌린 뒤, 다른 adapter를 적용해야 하기 때문에 latency 발생</p>
</blockquote>
</blockquote>
</li>
<li><p>Unfuse 모드의 성능 저하(결합하지 않고 Inference)</p>
<blockquote>
<p>Tuning된 LoRA의 가중치를 base weight에 결합하지 않고 inference시에 inference 경로에 LoRA 연산이 추가되기 때문에 base모델 대비 30%의 latency가 발생한다.</p>
</blockquote>
</li>
<li><p>개념 손실</p>
<blockquote>
<p>여러 개의 Adaptor를 단순히 합산해서 사용할 경우, 각 adaptor가 학습한 개념이 서로 간섭하여 일부가 손실되는 현상이 발생할 수 있다.
LoRA는 가중치 전체에 대해 tuning하기 때문에, 서로 다른 adaptor간 수정하는 영역이 크게 겹치게 된다.</p>
</blockquote>
</li>
<li><p>High rank adapter의 가능성</p>
<blockquote>
<p>&quot;Damjan Kalajdzievski. A rank stabilization scaling factor for fine-tuning with lora. arXiv preprint arXiv:2312.03732, 2023.&quot;에서 High rank adapter가 Low rank adapter보다 더 높은 표현력을 가지며, 올바른 scaling을 적용하면 성능이 훨씬 좋아질 수 있다고 보고했다.</p>
<blockquote>
<p>LoRA는 구조적으로 rank가 낮기 때문에, 복잡한 개념이나 다양한 스타일을 동시에 학습/표현하는 데 한계가 존재한다.</p>
</blockquote>
</blockquote>
</li>
</ol>
<p>따라서, 이 논문에서는 다음과 같은 주요 문제를 다룬다.</p>
<ol>
<li>Base 가중치에 결합된 adapter에 대한 빠른 전환을 어떻게 수행할 수 있는가?</li>
<li>여러 개의 adapter를 결합할 때, 개념 손실을 줄일 방법은 없는가?</li>
<li>Training/Inference 비용을 크게 늘리지 않고도, 표현력이 높은 high rank adapter를 만들 수 있는가?</li>
</ol>
<p><strong>SHiRA</strong>는 위의 세 문제를 해결한다.</p>
<blockquote>
<p><strong>핵심 Contribution</strong></p>
<ul>
<li>Pre-training된 가중치의 1~2%만 tuning해도 LoRA보다 뛰어난 성능을 발휘하는 매우 sparse하지만 high rank의 adapter</li>
<li>LoRA처럼 모든 가중치를 수정하지 않아 inference 시 교체할 파라미터의 수가 적어 빠른 속도의 adapter 교체 가능</li>
<li>높은 spasity 덕분에 여러 개의 adapter 결합 시 수정되는 위치의 중복 확률이 낮아져 개념 손실 감소</li>
<li>SHiRA는 LoRA만큼 빠르게 training하면서도 GPU 메모리를 더 적게 사용한다.</li>
</ul>
</blockquote>
<h1 id="2-background-and-related-work">2. Background and Related Work</h1>
<h2 id="21-background-edge-deployment-challenges-for-lora">2.1 Background: Edge Deployment Challenges for LoRA</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/92d490b0-60bb-4f4f-8eee-2cb6ea5df78a/image.png" alt=""></p>
<p>LoRA의 기본 배포 옵션은 세 가지가 존재한다.</p>
<ol>
<li><p>Adapter를 base model과 결합한 뒤 device에 배포</p>
<blockquote>
<p>이 방법은 base model과 비교했을 때, 가중치 행렬의 상당 부분이 변경되기 때문에 DRAM의 트래픽이 증가하여 Adapter의 빠른 전환이 어렵다</p>
<ul>
<li>사전에 LoRA 가중치를 결합해 두면 실행 속도는 빠를 수 있지만, Adapter를 변경할 때, 전체 가중치 행렬을 다시 수정해야 해서 DRAM의 전송량이 커지고 전환 속도가 느려진다.</li>
</ul>
</blockquote>
</li>
<li><p>Adapter를 결합하지 않은 상태로 유지</p>
<blockquote>
<p>이 방법은 base model에 결합하지 않았기 때문에, adapter의 빠른 전환이 가능하지만, inference 시 base model의 가중치 + LoRA의 가중치로 추가 연산이 생겨 latency가 증가한다.</p>
</blockquote>
</li>
<li><p>Hugging face/Diffusers 파이프라인 사용</p>
<blockquote>
<ul>
<li>load -&gt; fuse -&gt; inference -&gt; unfuse -&gt; unload</li>
</ul>
<ol>
<li>먼저, LoRA의 저랭크 행렬 A, B 가중치를 로드한 뒤,
$W_{new}=W+AB$의 형태로 가중치를 결합하여 inference에 사용한다.</li>
<li>이후, adapter를 교체할 때, $W=W_{new}-AB$로 되돌린 뒤, 기존 LoRA 가중치를 unload하고 새 adapter를 load하여 $W_{new}=W+AB$의 형태로 다시 가중치를 결합한다.</li>
</ol>
<p>이 방법은 loading과 fuse를 매번 수행해야 하는데, 메모리가 제한된 환경에서 모든 가중치를 한 번에 load할 수 없어 layer단위로 처리해야 하고, 그만큼 latency가 증가하게 된다.</p>
</blockquote>
</li>
</ol>
<p>즉, 기존 LoRA는 Adapter의 빠른 전환, 낮은 latency, 적은 메모리 사용을 동시에 만족시키기 어렵다는 문제가 존재한다.</p>
<h2 id="22-related-work">2.2 Related Work</h2>
<h3 id="lora-its-variants-and-sparse-adapters">LoRA, its variants, and sparse adapters</h3>
<p>다양한 LoRA의 변형들인 저랭크 학습 방법(DoRA, VERA,..)들이 존재하지만, SHiRA의 핵심 차이점은 <strong>training/inference 비용을 늘리지 않으면서도 high rank의 adapter</strong>라는 점이다.</p>
<p>또한, 기존 방법들의 경우, 최종적으로 결합된 adapter는 pre-training된 가중치 행렬의 모든 요소를 업데이트하기 때문에 빠른 전환이 불가능하다.</p>
<hr>
<p>일부 LoRA 변형 adapter들은 sparsity와 low rank adaptation을 결합하는 접근을 시도했었다.</p>
<ol>
<li><p>Sparse-adapters</p>
<blockquote>
<p>Unstructured pruning 기법을 이용해 adapter를 잘라내어 효율성을 높임</p>
</blockquote>
</li>
<li><p>SoRA</p>
<blockquote>
<p>LoRA의 up/down projection(기존 차원-&gt;r / r-&gt; 기존 차원) layer에서 요소들을 gating(proj 행렬의 특정 요소에 대해, 얼마나 중요한지를 판단하는 gate 값을 두고 중요도가 낮은 특정 차원은 0으로 만듦)하고, inference 시 0의 값을 잘라내는 adaptive rank 방법 제안</p>
</blockquote>
</li>
<li><p>RoSA</p>
<blockquote>
<p>Low rank adapter에 일부 High rank 특성을 결합한 방법으로, SoRA의 방법(gating)에 특정 차원은 rank를 높이는 방향의 조정이 들어간 방법이다.</p>
</blockquote>
</li>
</ol>
<p>하지만, 이 방법들은 모두 LoRA와 결합한 방법이기 때문에, 결합된 adapter의 가중치는 pre-training된 가중치 전체를 덮어쓰게 된다.</p>
<h3 id="partial-finetuning">Partial Finetuning</h3>
<p>SHiRA는 LoRA 이전에 제안되었던 부분적 미세조정(partial fine-tuning) 기법과 연관이 있다.
Partial fine-tuning은 고정된 sparse mask나 학습된 mask를 이용하여 fine-tuning한다.</p>
<p>LoRA 기반 방법과 비교했을 때, partial fine-tuning의 가장 큰 한계점은 <strong>높은 GPU 메모리 소비</strong>로, 대규모 generation 모델에 적용하기 어렵다. 
LoRA의 성공의 이유 중 하나는 이를 해결했다는 점이다.</p>
<blockquote>
<p>SHiRA는 LoRA만큼 efficient하게 training하면서도, 이전의 partial fine-tuning보다 훨씬 더 적은 메모리를 사용하는 adapter를 제안한다.</p>
</blockquote>
<hr>
<p>또 다른 주목할 만한 연구로는 partial fine-tuning을 LLM에 확장하였으며, LoRA와 비슷한 속도와 메모리를 제공한 &quot;SpIEL&quot;이 있다.</p>
<ul>
<li><p><strong>SpIEL vs SHiRA</strong></p>
<ol>
<li><p>SpIEL은 dynamic mask를 사용하지만 SHiRA는 static mask를 사용한다.</p>
<blockquote>
<p>SpIEL의 dynamic mask를 사용하기 위해서는 GPU용 custom linear layer 커널을 설치해야 하지만, SHiRA의 static mask는 custom 커널을 설치할 필요 없이, pytorch에서 직접 작동한다.</p>
<blockquote>
<p>SHiRA의 가장 큰 장점은 training/inference가 쉽다는 점이다</p>
</blockquote>
</blockquote>
</li>
<li><p>SpIEL에서 다루지 않았던 multi adapter 결합에 대한 속성을 분석한다.</p>
</li>
<li><p>SpIEL은 Language task에 대해서만 다루지만 SHiRA는 Vision/Language task 모두에 대해 다룬다.</p>
</li>
</ol>
</li>
</ul>
<h3 id="multi-adapter-fusion">Multi-Adapter Fusion</h3>
<p>기존의 multi adapter 결합 방법은 개념 손실을 방지하는 데 중점을 둔다.
하지만, 이러한 방법은 기본적인 LoRA를 그대로 사용한 다음, 간단한 후처리를 수행하거나 약간의 변형을 만든다.</p>
<p>SHiRA는 여러 개념들이 자연스럽게 서로 간섭하지 않도록, 개념 손실 문제에 대한 새로은 adapter를 도입하였다.</p>
<blockquote>
<p>이러한 기술을 사용하여 adapter를 추가로 후처리할 수 있기 때문에 SHiRA는 이전의 multi adapter 결합과 다르다.</p>
</blockquote>
<h1 id="3-proposed-approach">3. Proposed Approach</h1>
<h2 id="31-sparse-high-rank-adapters-shira">3.1 Sparse High Rank Adapters (SHiRA)</h2>
<p>SHiRA는 pre-training된 모델에서 매우 sparse하게 trainable parameter를 활용한다.</p>
<blockquote>
<p>LoRA처럼 forward과정에서 새로운 가중치 행렬을 추가하지 않고, 기존 가중치의 일부만 training할 수 있도록 masking하여 학습한다.
<img src="https://velog.velcdn.com/images/min-soku/post/5368fac4-50bb-4a46-ad8b-6f302c423db6/image.png" alt=""></p>
</blockquote>
<p>이를 위해, 매우 sparse한 형태(98~99% sparsity)의 mask $M을 생성한다.</p>
<blockquote>
<blockquote>
<p>$M\in \R^{n\times m}={0,1}^{n\times m}$</p>
</blockquote>
<ul>
<li>$n, m$ : SHiRA를 적용하는 모듈의 가중치의 input/output dimension
<img src="https://velog.velcdn.com/images/min-soku/post/622adf63-bcef-494d-abaa-6e58f96aa45f/image.png" alt="">
$n\times m$크기의 가중치 행렬에 0,1의 binary mask를 생성하는 것이다.</li>
</ul>
</blockquote>
<p>이렇게 만들어진 mask $M$은 Hadamard 곱셉을 사용하여 backpropagation 과정에서 Gradient를 masking하는 데 사용된다.
<img src="https://velog.velcdn.com/images/min-soku/post/873ab908-80c9-43ab-b2a4-8aa22b3f3453/image.png" alt=""></p>
<p>따라서, training 중에 업데이트되는 파라미터는 거의 없으며, adapter는 sparse한 가중치로만 구성된다.</p>
<ul>
<li><strong>&lt;SHiRA의 mask를 만드는 기법&gt;</strong></li>
</ul>
<ol>
<li>SHiRA-Struct<blockquote>
<p>특정 행/열만 trainable하게 structured 형태로 생성한다</p>
</blockquote>
</li>
<li>SHiRA-Rand<blockquote>
<p>1~2%의 파라미터를 random하게 trainable하게 설정한다.</p>
</blockquote>
</li>
<li>SHiRA-WM<blockquote>
<p>각 layer에 대한 weight magnitude을 기준으로 top-k만 trainable하게 설정한다.</p>
</blockquote>
</li>
<li>SHiRA-Grad<blockquote>
<p>작은 calibration set에서 gradient를 수집하여 가장 크기가 큰 1~2%만 trainable하게 설정한다.</p>
</blockquote>
</li>
<li>SHiRA-SNIP<blockquote>
<p>Pruning 기법인 SNIP을 사용하여 weight magnitude와 gradient를 결합한 방법이다.</p>
</blockquote>
</li>
</ol>
<h2 id="32-rapid-adapter-switching-multi-adapter-fusion-and-high-rank">3.2 Rapid Adapter Switching, Multi-Adapter Fusion, and High Rank</h2>
<p>SHiRA 학습 과정에서 변경되는 가중치는 매우 적기 때문에, 이를 추출하여 trainable 가중치의 값과 해당 인덱스를 저장할 수 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/1e815469-3916-43d6-83d7-c9d7716a935c/image.png" alt="">
따라서, SHiRA는 LoRA와 모델 크기는 비슷하지만, inference 시 pre-training된 가중치의 일부만 덮어쓴다.</p>
<p>반면, LoRA는 </p>
<blockquote>
<p>$W_{new}=W+AB$</p>
</blockquote>
<p>의 형태로 가중치를 결합하여 pre-training된 가중치 전체를 수정한다.</p>
<p>SHiRA의 경우, 전체 결합을 할 필요가 없고, 수정된 값만 pre-training된 가중치 행렬의 올바른 인덱스에 덮어쓰면 되기 때문에
리소스가 제한된 장치에서 빠른 adapter 전환이 가능하다.</p>
<hr>
<p>SHiRA에서 multi adapter 결합을 한다면,
두 개의 adapter $A_1,A_2$가 sparse mask $M_1,M_2$를 가질 때
다음과 같은 질문을 할 수 있다.</p>
<ol>
<li><p>Sparsity가 multi adapter 환경에서 adapter간 상호 간섭에 미치는 영향은 무엇인가?</p>
<blockquote>
<p>서로 간섭하지 않는 adapter를 만드는 것은 개념 손실을 피하기 위해 필수적이다</p>
</blockquote>
</li>
<li><p>Inference 시 adapter간 간섭이 거의 없도록, SHiRA 가중치를 만드는 mask를 설계할 수 있는가?</p>
<blockquote>
<p>이론적으로, SHiRA-Struct 방법은 orthogonal하게 adapter를 만들 수 있다.</p>
</blockquote>
</li>
</ol>
<h1 id="4-theoretical-insights-for-shira">4. Theoretical Insights for SHiRA</h1>
<h2 id="41-rank-vs-sparsity">4.1 Rank vs. Sparsity</h2>
<h3 id="lemma-41">Lemma 4.1</h3>
<p>SHiRA의 매개변수 복잡도와 학습 복잡도는 adapter에서 0이 아닌 원소의 개수와 동일하다.</p>
<blockquote>
<p>SHiRA에서 학습해야 하는 건 sparse matrix의 1의 위치 값이다.
이 값들의 개수를 $L_0 norm(||\Delta W||_0)$으로 세면, 매개변수의 수가 된다.</p>
<blockquote>
<p>$L_0 norm(||\Delta W||_0)$은 0이 아닌 원소의 개수를 세는 연산으로 학습해야 하는 파라미터 수는 $||\Delta W||_0$가 되는 것이다.</p>
</blockquote>
<ul>
<li><strong>왜 $||\Delta W||_0$가 학습 복잡도인가?</strong><blockquote>
<p>학습 복잡도는 얼마나 많은 파라미터를 학습하느냐에 비례하는데, SHiRA는 0이 아닌 파라미터의 개수가 적기 때문에, Dense 방식보다 훨씬 더 적은 연산과 데이터로 학습이 가능하다.</p>
</blockquote>
</li>
</ul>
</blockquote>
<h3 id="lemma-42">Lemma 4.2</h3>
<blockquote>
<p>희소 SHiRA 행렬을, LoRA처럼 저랭크 행렬로 근사했을 때 오차가 얼마나 되나?를 증명</p>
</blockquote>
<p>Sparsity 비율을 지정하면, LoRA는 SHiRA의 r-랭크 근사가 되며, 근사 오차는 SHiRA adapter의 $r+1$번째 특이값의 제곱($σ^2_{r+1}$)으로 제한된다.</p>
<blockquote>
<p>SHiRA adapter가 $m\times n$의 행렬일 때, 이 행렬을 SVD하면</p>
<blockquote>
<p>$\Delta W=U\Sigma V^T$
$\Sigma$ : 특잇값($σ_1,σ_2,...)$</p>
</blockquote>
<p>LoRA는 rank r이므로 $\Sigma$의 특잇값에서 $σ_1$~ $σ_r$까지만 써서 근사한다.</p>
<blockquote>
<p><strong>Eckart–Young theorem</strong>
임의의 행렬을 rank r로 근사할 때, 상위 r개의 특이값만 남기는 것이 가장 좋다.</p>
<ul>
<li>그렇다면, 근사한 값의 오차(Frobenius norm)는 상위 r개의 특이값 이후인 $σ_{r+1}$부터 특이값에 의해 결정된다.<blockquote>
<p>$Error\leqσ^2_{r+1}$</p>
</blockquote>
</li>
</ul>
<p>논문에서 말하는 오차 상한(근사 오차)가 바로 이것으로 SHiRA의 $r+1$번째 특이값의 제곱이 된다.</p>
</blockquote>
</blockquote>
<p>즉, SHiRA 행렬을 LoRA가 r-rank로 근사할 수 있고, 그 오차가 SHiRA 행렬을 SVD했을 때, $r+1$번째 특이값 제곱에 의해 제한된다.</p>
<p>따라서, 크기가 $m\times n$인 임의의 r랭크 LoRA adapter는, 0이 아닌 원소의 개수가 $r(m\times n)$개인 SHiRA adapter의 근사로 볼 수 있다.</p>
<blockquote>
<p>SHiRA = 희소 행렬
LoRA = 희소성은 없지만 랭크 제한된 행렬
LoRA는 SVD를 통한 &quot;압축 버전&quot;이어서 SHiRA를 근사할 수 있음</p>
</blockquote>
<h3 id="lemma-43">Lemma 4.3</h3>
<p>SHiRA scaling factor는 adapter의 rank와 무관하며, 1로 설정할 수 있다.
(LoRA에서는 rank가 커질수록 $\alpha$를 조정해야 안정적인 학습이 가능하지만 SHiRA는 필요없음)</p>
<blockquote>
<p>LoRA의 업데이트 식은 다음과 같다.</p>
<blockquote>
<p>$Y_{out}=(W+\alpha_rBA)X_{in}+b$</p>
<ul>
<li>$\alpha_r =\frac{\alpha}{r}$ : scaling factor</li>
</ul>
</blockquote>
<p>LoRA에서 $\alpha$를 조정하는 이유는 rank r이 커질수록 $BA$의 값이 커질 수 있어 gradient가 폭발 위험이 있다.
그래서 $\alpha_r =\frac{\alpha}{r}$로 줄여서 안정화 시킨다.</p>
<hr>
<p>하지만, SHiRA의 업데이트 식은 다음과 같다.</p>
<blockquote>
<p>$Y_{out}=(W+S)X_{in}+b$</p>
<ul>
<li>$S$ : sparse matrix</li>
</ul>
</blockquote>
<p>$S$에서 0이 아닌 위치의 가중치 값은 base 가중치 $W$에서 해당 값으로 초기화 된다
즉, 원래 $W$에서 일부 위치만 학습하는데, 이런 초기화는 fine-tuning시 업데이트가 안정적으로 유지되게 한다.</p>
<p>결과적으로 rank와 무관하게 학습 안정성을 확보하게 된다.</p>
</blockquote>
<p>즉, LoRA에서는 $Y_{out}=(W+\alpha_rBA)X_{in}+b$으로, 출력값($Y_{out}$)이 $r$에 비례하기 때문에 r이 크면 scaling이 필요하지만,</p>
<p>SHiRA는 $Y_{out}=(W+S)X_{in}+b$으로, 출력값($Y_{out}$)이 sparse matrix $S$에 의해 결정되기 때문에 rank가 아닌, 0이 아닌 가중치의 개수에 비례하게 된다.</p>
<h2 id="42-adapter-weight-orthogonality-in-multi-adapter-fusion">4.2 Adapter Weight Orthogonality in Multi-Adapter Fusion</h2>
<p>SHiRA와 LoRA의 adapter 설계가 multi adpater 결합에서 어떤 성질을 갖는지 이론/실험적인 통찰 제공</p>
<h3 id="lemma-44">Lemma 4.4</h3>
<p>두 개의 adapter $\Delta W_1, \Delta W_2$가 있을 때, 한 adapter가 다른 adapter의 null space에 속한다면, 두 adapter는 직교하기 때문에 서로 간섭 없이 효율적으로 결합될 수 있음을 의미한다.</p>
<blockquote>
<p><strong>$A_1^TA_2=0$</strong></p>
<p>한 adapter가 다른 adapter의 null space에 속한다는 의미로 두 adapter의 sparse 행렬간 내적이 0으로, 완전히 orthogonal하다</p>
</blockquote>
<blockquote>
<p><strong>비선형 활성화 함수의 멱급수 전개(power series expansion)</strong></p>
<blockquote>
<p>ex) $f(x)=a_0+a_1x+a_2x^2+...$이러한 수식을 멱급수라 한다.</p>
</blockquote>
<p>이 멱급수 전개는 adapter 가중치 행렬들의 곱이 있는 항들을 포함한다.</p>
<p>그러나 각 adapter가 서로의 null space에 있으므로, adapter 곱을 포함하는 모든 항은 0이 된다.</p>
<blockquote>
<p><strong>ex)</strong></p>
<p>입력 $x$에 대해, 두 개의 adapter $\Delta_1, \Delta_2$가 있다고 할 때, forward과정에서 입력이 지나갈 때는 이렇게 전개된다.</p>
<p>$x&#39;=f(x+\Delta W_1x+\Delta W_2x)$</p>
<p>이를 멱급수로 전개해보면</p>
<p>$f(x+\Delta W_1x+\Delta W_2x)=a_0+a_1(x+\Delta W_1x+\Delta W_2x)+a_2(x+\Delta W_1x+\Delta W_2x)^2$</p>
<p>이를 전개하게 되면 $a_1(\Delta W_1\Delta W_2)x$와 같이 고차항에서는 $\Delta W_1, \Delta W_2$의 곱이 포함되게 된다.</p>
<p>결국, 선형 항인 $a_1\Delta W_1x$와 $a_1\Delta W_2x$에서만 각각 $\Delta W_1, \Delta W_2$가 나오게 되며 독립적이게 된다.</p>
</blockquote>
<ul>
<li>즉, 여러 adapter를 합쳐도 forward과정에서 결국 각 adapter가 독립적으로 간섭하지 않음이 증명된다.</li>
</ul>
</blockquote>
<p>위 두 증명으로 adapter들은 곱셈적으로 간섭하지 않는다.</p>
<hr>
<p>두 adapter의 orthogonality를 측정하는 지표</p>
<p><strong>1. 어댑터 가중치 직교성 크기 (AWOM, Adapter Weight Orthogonality Magnitude)</strong></p>
<blockquote>
<blockquote>
<p>$AWOM(A_1,A_2)=||A^T_1A_2||_2$</p>
</blockquote>
<p>AWOM은 두 sparse adapter의 가중치 $A_1, A_2\in \R^{n\times m}$에 대해 곱 $A_1^TA_2$의 $l_2$ Normalization으로 정의된다.</p>
<p>AWOM은 $A_1^TA_2$가 영행렬에서 얼마나 멀리 떨어져 있는지를 측정한다.</p>
<ul>
<li>즉, 얼마나 간섭(직교 위반)이 강한가를 수치로 측정한 지표</li>
</ul>
</blockquote>
<p><strong>2. 어댑터 가중치 직교성 비율 (AWOR, Adapter Weight Orthogonality Ratio)</strong></p>
<blockquote>
<p>AWOR은 $A_1^TA_2$의 sparse ratio로 정의된다.</p>
<blockquote>
<p>$AWOR=1-\frac{||A^T_1A_2||_0}{m^2}$</p>
</blockquote>
<ul>
<li>$m^2$ : $A_1^TA_2$의 원소 개수</li>
<li>$||\cdot||_0$ :  0이 아닌 원소의 개수를 세는 $L_0$ Normalization이다.</li>
<li>$||A^T_1A_2||_0$ : 두 어댑터가 겹쳐서 non-zero 값을 만든 좌표 수</li>
</ul>
</blockquote>
<p>AWOM과 AWOR은 두 어댑터 가중치 간 직교성 정도를 나타내는 척도로 사용할 수 있다.</p>
<h3 id="lemma-45">Lemma 4.5</h3>
<p>SHiRA-Struct 어댑터는 매우 희소한(non-overlapping) 마스크 덕분에 서로 다른 어댑터 간 내적 $A_1^TA_2$가 거의 0에 수렴하여, LoRA보다 훨씬 강한 직교성(orthogonality) 을 가진다. </p>
<p>이는 어댑터들이 모델에 추가될 때 표현이 서로 간섭(interference)하지 않고 분리된(disentangled) 표현을 학습할 수 있게 만든다. 따라서 여러 어댑터를 동시에 쓸 때 융합(fusion)이 안정적이며, Dense 또는 희소 LoRA보다 AWOR(직교성 지표) 가 높다. 
<img src="https://velog.velcdn.com/images/min-soku/post/926abfcd-c74f-4051-8636-ee2644933900/image.png" alt=""></p>
<p>다만, SHiRA-Struct는 rank-1+대각(diagonal) 구조라 개별 어댑터의 표현력은 제한적이어서, 단일 어댑터 성능과 다중 어댑터 융합 간의 트레이드오프가 존재</p>
<h1 id="5-experiments">5. Experiments</h1>
]]></description>
        </item>
        <item>
            <title><![CDATA[Rethinking Pruning for Vision-Language Models: Strategies for Effective Sparsity and Performance Restoration]]></title>
            <link>https://velog.io/@min-soku/Rethinking-Pruning-for-Vision-Language-Models-Strategies-for-Effective-Sparsity-and-Performance-Restoration</link>
            <guid>https://velog.io/@min-soku/Rethinking-Pruning-for-Vision-Language-Models-Strategies-for-Effective-Sparsity-and-Performance-Restoration</guid>
            <pubDate>Thu, 10 Jul 2025 10:06:41 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>VLM은 여러 모달리티의 정보를 통합하여 다양한 과제에서 좋은 성능을 보여주었지만, 대규모 VLM을 리소스가 제한된 환경에 배포하는 것은 어려운 과제이다.</p>
<p>Pruning 후 Fine-tuning을 하는 것이 잠재적인 해결책이 될 수 있지만, VLM과 같은 멀티 모달에 대해서는 충분하게 연구되지 않았다.</p>
<p>또한, LoRA 기반 fine-tuning은 희소 모델의 성능 복원을 목표로 하지만, <strong>희소 패턴이 파괴</strong>된다는 문제점이 있다.</p>
<p>이를 해결하기 위해, LoRA 가중치에 직접 sparse mask를 적용하는 SparseLoRA기법을 제안한다.</p>
<h1 id="introduction">Introduction</h1>
<p>모델의 크기가 계속해서 커짐에 따라 계산량 및 메모리가 증가하여 리소스가 제한된 환경에서의 적용이 제한된다.</p>
<p>성능을 유지하면서 모델 크기를 줄이는 Pruning과 fine-tuning은 리소스가 제한된 환경에서의 실제 배포를 가능하게 하는 가능성을 제시한다.</p>
<p>Pruning 후 fine-tuning은 비전과 언어 모델의 효율성을 크게 향상시켰지만, VLM에 대해서는 상대적으로 덜 연구되었으며, 두 가지 질문을 제기한다.</p>
<ol>
<li><p>모달리티 별 sparsity를 어떻게 분배해야 하는가?</p>
<blockquote>
<p>Vision 모델과 Language 모델에 다양한 sparsity 비율을 조합한 결과, 두 모델에 동일한 비율의 sparsity를 적용하는 방식이 거의 최적의 성능을 보였으나, <strong>sparsity가 높아질수록 성능 저하가 심각해져, pruning 후 성능 복원의 중요성이 강조</strong>되었다.</p>
</blockquote>
</li>
<li><p>Pruning된 VLM의 성능을 어떻게 복원할 것인가?</p>
<blockquote>
<p>PEFT 기법인 LoRA는 sparse 모델의 성능 복원을 위해 제안되었으나, <strong>dense한 LoRA 모듈을 sparse한 모델에 병합하면, sparse 패턴이 파괴</strong>되고, 병합하지 않으면 Latency가 발생하는 문제에 지면한다.</p>
</blockquote>
</li>
</ol>
<p>이러한 LoRA의 비호환성 문제를 해결하기 위해, LoRA 가중치에 binary mask를 직접 적용하는 SparseLoRA fine-tuning 기법을 제안한다.</p>
<h1 id="related-work">Related Work</h1>
<h2 id="vision-language-models">Vision-Language Models</h2>
<p>VLM은 이미지와 텍스트를 사용하는 다양한 Cross modal 작업에서 뛰어난 성능을 보였다.</p>
<p>이러한 모델은 일반적으로 pre-training된 vision, language 능력을 갖고 있기 때문에 <strong>가능한 작은 모듈(예 : BLIP2의 Q-former)만 fine-tuning</strong>하여 가능한 fine-tuning 과정에서의 높은 training cost와 catastrophic forgetting 문제를 피한다.</p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/e6c88a39-7cee-4e18-883c-15bb56e2e2d3/image.png" alt=""></p>
<blockquote>
<p><strong>Catastrophic forgetting</strong></p>
<blockquote>
<p>모델이 fine-tuning 과정에서 기존에 학습했던 지식을 잃어버리는 현상</p>
</blockquote>
<p>각 weight 들이 해당 task를 학습할 때 정확히 어떤 correlation이 있는지 모르는 딥러닝에서, fine-tuning 시 weight를 섣부르게 바꾸면 기존 task를 망각</p>
</blockquote>
<h2 id="model-pruning-for-large-language-models">Model pruning for Large Language Models</h2>
<p>대규모 Vision 모델 또는 LLM은 높은 성능을 보여주지만, 방대한 크기의 파라미터는 실제 배포에 어려움을 준다.</p>
<p>이를 해결하기 위해, 모델 pruning 기법이 도입되었다.</p>
<p>Pruning의 주요 목표는 pruning 전후의 모델 간 성능 차이를 최소화하면서, 모델의 크기를 줄이는 것이다.</p>
<p>Pruning에서 중요한 파라미터를 식별하기 위한 지표에는 Weight magnitude, Gradient, Activation과 같이 다양한 지표가 제안되었다.</p>
<p>그러나, fine-tuning 없이 pruning을 하면 성능이 저하되는 경우가 많다.</p>
<p>다른 논문에서는 Reconstruction errors-based metric을 활용하여 원본 모델과 sparse 모델 간 불균형과 sparse 모델의 성능 복구를 수행한다.</p>
<blockquote>
<p><strong>Reconstruction errors-based metric</strong></p>
<p>원본 모델의 출력과 sparse 모델의 출력의 차이를 직접 계산하여, 출력 값의 차이가 큰 파라미터부터 제거하는 방식</p>
</blockquote>
<h1 id="preliminary-study">Preliminary Study</h1>
<p>VLM은 모달리티별 foundation model과 이들을 align을 담당하는 크로스-모달 인터페이스(예: Q-former)로 구성된다.
다른 VLM pruning 논문(Ecoflap)을 따라, 본 논문 역시 가벼운 Q-former는 그대로 두고 Vision 모델과 Language 모델만 pruning 대상으로 삼는다.</p>
<ul>
<li>Pruning 기법 : Wanda</li>
</ul>
<blockquote>
<p><strong>모달리티별 sparsity 비율 분배</strong></p>
<p>Vision 모델의 sparsity 비율(sv)과 Language 모델의 sparsity 비율(sl)의 합 sv+sl을 고정한 뒤, 두 비율의 분포만 조정한다.
<img src="https://velog.velcdn.com/images/min-soku/post/ae014eac-dfef-4828-b1ca-05580c8de1e4/image.png" alt=""></p>
<blockquote>
<ul>
<li>그림에 따르면, sl(Language sparsity)가 70%이상일 때, VLM이 붕괴하는 반면 Vision 모델에 부과된 sparsity는 상대적으로 덜 민감했다.</li>
<li>sv+sl을 일정하게 유지할 때 <strong>두 모달리티에 동일한 비율의 sparsity를 적용하는 방식이 최적의 성능</strong>을 낸다.</li>
</ul>
</blockquote>
</blockquote>
<blockquote>
<p><strong>서로 다른 sparsity가 VLM 성능에 미치는 영향</strong></p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/df090aee-cbcc-4bb9-b0ce-f2bd86dc46cf/image.png" alt=""></p>
<p>세 가지 전략으로 VLM을 pruning하였음</p>
<ul>
<li>V + L : Vision 모델과 Language 모델 모두 동일한 sparsity로 pruning </li>
<li>Vision : Vision 모델만 pruning</li>
<li>Language : Language 모델만 pruning</li>
</ul>
</blockquote>
<h1 id="methodology">Methodology</h1>
<p><img src="https://velog.velcdn.com/images/min-soku/post/0969c8db-680a-46a7-be9e-de84f39bd0e9/image.png" alt=""></p>
<h2 id="pruning-with-few-samples">Pruning with few samples</h2>
<p>모델 pruning은 미리 정의된 중요도 지표 $S$를 사용해 중요도가 낮은 가중치를 식별하며, 일반적으로 pruning 전,후 모델 간 재구성 오차(Magnitude, Gradient, Activation)를 측정한다.</p>
<p>Gradient나 Activation을 계산하려면 소량의 Calinbration dataset이 필요하다.</p>
<p>중요도 지표 $S$와 데이터셋 $D_p$를 이용해 원본 가중치 $W_o$에 점수를 부여하고, 상위 s%를 제외한 가중치에 대해 binary mask $M$을 생성하여 제거한다.</p>
<blockquote>
<blockquote>
<p>$Score  = S(W_o,D_p)$
$M=(Score &gt; \tau),\quad W=W_o\odot M$</p>
</blockquote>
<ul>
<li>$\tau$는 $Score$의 pruning 임계값</li>
<li>$W$는 masking된 가중치</li>
</ul>
</blockquote>
<h2 id="sparse-lora-finetuning">Sparse LoRA finetuning</h2>
<p>VLM은 Vision 모델과 Language 모델을 모두 포함하므로 전체 모델을 fine-tuning 하는 것은 비효율적이다.
따라서, LoRA를 사용한다.</p>
<blockquote>
<p>$W=W+\Delta W,\quad \Delta W=BA$
<img src="https://velog.velcdn.com/images/min-soku/post/8bdd3265-99ff-49e3-8b16-fd9f88a71eb4/image.png" alt=""></p>
</blockquote>
<p>하지만, $\Delta W$가 dense하기 때문에, 병합 시 sparse 패턴이 파괴되고, 병합하지 않으면 LoRA 모듈로 인해 추론 Latency가 발생한다.</p>
<p>이를 해결하기 위해 SparseLoRA는 $\Delta W$에도 mask $M$을 적용하여</p>
<blockquote>
<p>$\hat{W}=W+(BA\odot M)$
<img src="https://velog.velcdn.com/images/min-soku/post/7d18541f-1bf8-4ad6-bdc9-40676762505f/image.png" alt=""></p>
</blockquote>
<p>로 업데이트한다. 이렇게 하면 제거된 위치의 가중치가 Backpropagation을 통해 업데이트되지 않아 sparse 패턴이 유지된다.</p>
<blockquote>
<p>A와 B의 최적화</p>
<ul>
<li>$B=B+\eta (\frac{\delta L}{\delta \hat{W}}\odot M)A^T$</li>
<li>$A=A+\eta B^T(\frac{\delta L}{\delta \hat{W}}\odot M)$</li>
</ul>
</blockquote>
<p>VLM은 Vision, Language 모달 외에, 이를 align하는 Q-former를 포함하기 때문에, Q-former에도 LoRA 모듈을 삽입하여 최소한의 계산 비용으로 크로스 모달 성능을 향상시킨다.</p>
<h2 id="finetuning-objectives">Finetuning Objectives</h2>
<p>Pruning된 VLM의 성능을 회복하기 위해, 두 가지 fine-tuning objective(loss)를 도입한다.</p>
<ol>
<li><p>Task loss</p>
<blockquote>
<p>Pruning 후 Task에 대해 손실을 최소화하며 VLM을 계속 fine-tuning하여 과제별 성능을 복원한다.</p>
</blockquote>
</li>
<li><p>Distillation loss</p>
<blockquote>
<p>원본 모델의 지식을 pruning된 모델로 이전하기 위해, 두 모델의 출력 값의 분포 간 KL divergence를 제약한다.</p>
<blockquote>
<p>$L_{distill}=D_{KL}(logits(\hat{W})||logits(W_0))$</p>
</blockquote>
<ul>
<li>$D_{KL}$ : KL divergence distance</li>
</ul>
<blockquote>
<p>KL divergence는 두 확률 분포 $P$(교사)와 $Q$(학생) 사이의 차이를 측정하는 값</p>
<ul>
<li>$D_{KL}(P_{student}||P_{teacher})=\Sigma_iP(i)log\frac{P_{student}(i)}{P_{teacher}(i)}$
작게 만들수록 학생 분포 $P_{student}$가 교사 분포 $P_{teacher}$에 가까워진다.</li>
</ul>
</blockquote>
<ul>
<li>$logits(\hat{W})$ : SparseLoRA로 pruning된 모델의 출력 로짓(값)</li>
<li>$logits(W_0)$ : 원본 가중치 $W_0$를 가진 모델의 출력 로짓(값)</li>
</ul>
</blockquote>
</li>
</ol>
<p>최종적으로, 두 손실을 가중 합한 전체 최적화 loss function은 다음과 같다.</p>
<blockquote>
<p>$L=\lambda L_{task}+(1-\lambda)L_{distill}$</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[A Survey of Quantization Methods for Efficient  Neural Network Inference]]></title>
            <link>https://velog.io/@min-soku/A-Survey-of-Quantization-Methods-for-Efficient-Neural-Network-Inference</link>
            <guid>https://velog.io/@min-soku/A-Survey-of-Quantization-Methods-for-Efficient-Neural-Network-Inference</guid>
            <pubDate>Wed, 09 Jul 2025 12:35:31 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>양자화는 연속적인 실수 값의 집합인 신경망의 가중치 및 활성화 값을 이산 값으로 변환하여, 사용 비트 수를 줄이면서도 연산 정확도를 최대한 유지하는 기법이다.</p>
<blockquote>
<p>메모리 용량이나 연산 능력이 제한된 환경에서 필수적인 기술</p>
</blockquote>
<p>부동소수점 표현(float32, float16)에서 4비트 이하의 고정 정수 표현으로 전환할 경우, 이론상 메모리 사용과 지연 시간을 최대 16배까지 줄일 수 있으며, 이러한 효율성 개선은 배터리 수명 연장, 실시간 처리, 비용 절감 등 다양한 이점이 있다.</p>
<h1 id="introduction">Introduction</h1>
<p>지금까지 Overparameterized된 모델을 통해 다양한 문제에 대한 신경망의 정확도가 크게 향상되었다.
그러나, 과도하게 큰 신경망 모델은 그 크기 때문에 자원의 제약이 있는 환경에 배포하기가 어렵다.</p>
<p>효율적이고 실시간으로 동작하면서도 최적의 정확도를 유지하려면, 신경망 모델의 설계, 학습, 배포 방식을 고려해야 한다.</p>
<p>현재까지 많은 연구가 Latency, 메모리 사용량, 에너지 소비 등을 줄이면서도 정확도와 일반화 성능을 최적화하는 데 초점을 맞춰왔다.</p>
<blockquote>
<p><strong>1. 효율적인 신경망 모델 아키텍처 설계</strong></p>
<ul>
<li>아키텍처를 최적화 하는 연구</li>
<li>초기에는 수작업 탐색을 통해 새로운 최적 모듈을 찾아으나, 최근에는 AutoML, NAS를 통해 모델 크기, 깊이, 넓이 제약 하에서 최적 아키텍처를 자동으로 탐색</li>
</ul>
</blockquote>
<blockquote>
<p><strong>2. 신경망 아키텍처와 하드웨어의 공동 설계</strong></p>
<ul>
<li>신경망의 Latency와 에너지 오버헤드는 하드웨어에 따라 다르므로, 특정 하드웨어에 최적화된 아키텍처를 함계 설계하는 연구 활발</li>
</ul>
</blockquote>
<blockquote>
<p><strong>3. Pruning</strong></p>
<ul>
<li>중요도가 낮은 뉴런, 파라미터를 제거해 sparsity를 높이는 방법이다.</li>
<li>Unstructured pruning은 임의 위치의 파라미터를 제거해 모델의 일반화 성능에 거의 영향을 주지 않으면서 높은 희소율을 달성하지만, 희소 행렬 연산으로 인해 메모리를 많이 사용하여 가속이 어렵다.</li>
<li>Structured pruning은 모듈 단위로 제거해 밀집 연산은 유지하지만, 과도한 pruning 시 정확도 저하가 크다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>4. Knowledge distillation</strong></p>
<ul>
<li>고성능 대형 모델(teacher)가 생성한 soft label(확률 분포)를, 소형 모델(student) 학습에 활용</li>
<li>단독 distillation으로는 높은 compression이 어렵지만, 양자화, pruning과 결합하면 성능 저하 없이 compression을 크게 늘릴 수 있다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>5. Quantization</strong></p>
<ul>
<li>부동소수점 표현에서 8비트 이하의 저정밀 정수 표현으로 전환하면, 학습과 추론 모두에서 메모리, 지연 시간을 크게 줄일 수 있다.</li>
<li>특히 반정밀도(half-precision), 혼합 정밀도(mixed-precision) 학습의 도입은 AI 가속기 처리량을 획기적으로 향상시켰으나, 8비트 이하로 내리려면 섬세한 튜닝이 필요해 최근 연구는 주로 추론에 집중된다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>6. 뇌과학 관점의 Quantization</strong></p>
<ul>
<li>인간의 뇌가 연속값이 아닌 불연속(양자화) 신호로 저장한다는 연구가 있으며, 이는 noise에 강하고 자원 효율이 높다는 장점 때문이다.</li>
</ul>
</blockquote>
<h2 id="개념-정리">개념 정리</h2>
<h3 id="fp-int">FP, INT</h3>
<p>Floating point(FP)와 int(정수)형 표현의 큰 차이는 숫자를 내부에서 어떻게 표현하고 연산하느냐이다.</p>
<p>부동소수점(FP)는 아주 크거나 작은 수를 지수, 가수 조합으로 표현
정수(INT)는 소수점 없이 고정된 정밀도로 정수 범위만큼 표현</p>
<p>부동소수점(FP)는 부호(Sign), 지수(Exponent), 가수(Fraction)으로 구성되어 있다.</p>
<ul>
<li><p>부호 : 값이 양수인지(0), 음수인지(1)를 나타낸다.</p>
<blockquote>
<p>ex) 0 10000001 ... -&gt; 양수 / 1 10000001 ... -&gt; 음수</p>
</blockquote>
</li>
<li><p>지수 : Exponetial(스케일)을 의미하며, 보통 $2^k$에서 $k$를 의미한다.</p>
<blockquote>
<p>예를 들어, 314.0을 FP로 표현한다면 $3.14\times 10^2$가 되며, 여기서 지수(Exponential)은 2가 되고, 가수(유효 숫자)는 3.14가 된다.</p>
</blockquote>
</li>
<li><p>가수 : 1.xxxx 형태의 소수부(유효 숫자)를 저장한다.</p>
<blockquote>
<p>FP 표기법은 유효숫자 $\times$ 지수 표기로 생각하면 됨</p>
<ul>
<li>$314.0 \approx 1.xxxx(가수) \times 2^8(지수)$</li>
</ul>
</blockquote>
</li>
</ul>
<blockquote>
<p><strong>FP32</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/a9d26d73-2696-4f27-be3b-cf2f3affcb96/image.png" alt=""></p>
<ul>
<li>비트 수 : 32bit(부호 1비트 + 지수 8비트 + 가수 23비트)</li>
<li>정밀도 : 약 7자리 십진수</li>
</ul>
</blockquote>
<blockquote>
<p><strong>FP16</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/50d74644-33d0-4005-82f2-92626dd24467/image.png" alt=""></p>
<ul>
<li>비트 수 : 16bit(부호 1비트 + 지수 5비트 + 가수 10비트)</li>
<li>정밀도 : 약 3~4자리 십진수</li>
</ul>
</blockquote>
<blockquote>
<p><strong>INT8</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/36abf852-817d-4258-ae0d-52b6082447cb/image.png" alt=""></p>
<ul>
<li>비트 수 : 8bit(부호 1비트 + 값 7비트)</li>
<li>정밀도 : 정수 단위</li>
</ul>
</blockquote>
<h3 id="메모리-절약">메모리 절약</h3>
<p>같은 개수의 숫자를 저장할 때</p>
<ul>
<li>FP32 : 4바이트(32비트)</li>
<li>FP16 : 2바이트(16비트)</li>
<li>INT16 : 2바이트(16비트)</li>
<li>INT8 : 1바이트(8비트)<blockquote>
<p>메모리 측면에서는 FP16과 INT16 둘 다 2바이트로 같은 개수의 값을 저장할 때 차이가 없고, 표현 방식의 차이만 존재한다.</p>
</blockquote>
</li>
</ul>
<p>예를 들어, 파라미터 1억 개를 저장하면
FP32는 4바이트 x 1e8 = 약 400MB
INT8은 1바이트 x 1e8 = 약 100MB (1/4 크기)</p>
<blockquote>
<p>따라서, 비트 수가 적을수록 메모리 사용량이 줄어든다.</p>
</blockquote>
<h3 id="연산-속도-원리">연산 속도 원리</h3>
<blockquote>
<p><strong>1. 하드웨어 복잡도</strong></p>
<blockquote>
<p><strong>FP 연산</strong></p>
<ul>
<li>덧셈, 곱셈 시 지수부 정렬, 가수 정규화, 오버플로우/언더플로우 검사 등이 필요</li>
<li>논리적으로 복잡하여 더 많은 사이클과 더 큰 전력을 소모한다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>INT 연산</strong></p>
<ul>
<li>비트가 단순하여 덧셈, 곱셈만 수행한다</li>
<li>회로가 단순하고 빠르다</li>
</ul>
</blockquote>
</blockquote>
<blockquote>
<p><strong>2. SIMD 최적화</strong></p>
<ul>
<li>INT형 연산은 CPU/GPU에서 한 번에 더 많은 요소를 병렬 처리 가능하여 한 사이클에 더 많은 연산을 처리할 수 있다.</li>
</ul>
</blockquote>
<blockquote>
<p><strong>3. 메모리 대역폭</strong></p>
<ul>
<li>전송 데이터량이 줄어들어 메모리 병목 상황에서 이득이고, 이동이 빠르다.</li>
</ul>
</blockquote>
<h3 id="정확도-vs-효율성-trade-off">정확도 vs 효율성 Trade-off</h3>
<ul>
<li>FP32 : 가장 넓은 범위의 높은 정밀도</li>
<li>FP16 : FP32 대비 2배 빠르고 메모리는 절반이나, 지수, 가수 비트가 줄어들어 아주 작은 값 구분이 어려움</li>
<li>INT8 : FP16 대비 2배 빠르고 메모리는 절반이나, 정밀도는 소수점 단위를 모두 버려 근사치가 크게 어긋날 수 있다.</li>
</ul>
<h1 id="general-history-of-quantization">General History of Quantization</h1>
<p><img src="https://velog.velcdn.com/images/min-soku/post/93ac97ba-affb-4688-be46-d735efd02f6e/image.png" alt=""></p>
<p><strong>1. 초기 수치 근사 기법으로서의 양자화</strong></p>
<p>양자화는 크기가 무한하거나 연속적인 값을 유한한 범위의 정수나 이산 값으로 근사할 때 사용된다.
19세기 중반부터 수치 적분 등을 위해 이산화를 이용했으며, 반올림 오차가 적분 결과에 미치는 영향을 연구했다.
즉, 반올림과 절단은 모두 양자화의 전형적 사례로, 컴퓨터가 등장하기 전에도 수치 해법에서 중요한 요소였다.</p>
<p><strong>2. 정보 이론과 통신에서의 양자화 발전</strong></p>
<p>1928년 정보 이론을 발표하면서, 양자화는 부호화 이론의 핵심으로 떠올랐다.
Shannon은 가변 비트 길이를 서서 효율적으로 부호를 할당하는 가변률 양자화 개념을 도입했다.
1959년에는 왜곡률과 비트율 간의 최적 절충을 다루는 왜곡률 함수와 벡터 양자화가 제안되었으며, 이후 다양한 통신 시스템과 신호 처리에 응용되었다.</p>
<p><strong>3. 수치해석 관점에서의 양자화</strong></p>
<p>수치해석에서는 연속 문제를 유한 비트로 다룰 때 발생하는 반올림 오차와 절단 오차가 알고리즘의 정확도와 안정성에 큰 영향을 준다.</p>
<p>이 두 오차는 문제의 조건수에 의해 서로 연관되며, 높은 조건수는 작은 입력 오차가 큰 출력 오차로 증폭될 수 있음을 의미한다.</p>
<blockquote>
<p>양자화는 초기 수치 근사 → 정보 이론/통신의 부호화 → 수치해석의 안정성 분석의 흐름으로 발전해 왔으며, 각 분야에서 요구하는 성능에 맞춰 다양한 이론과 기법이 정립되었다.</p>
</blockquote>
<h2 id="quantization-in-neural-nets">Quantization in Neural Nets</h2>
<p>위 주제에 관해 많은 수의 논문이 발표되었으며, 많은 사람들이 최근의 신경망 양자화 연구가 과거 연구와 어떻게 다른지 궁금해한다.</p>
<p><strong>1. 계산 집약적인 신경망 inference, training 환경</strong></p>
<p>전통적인 신호 처리나 수치해석에서는 계산량이 한정적이거나, 오프라인으로 처리하는 경우가 많았지만,
신경망은 inference와 training 모두 초대형 행렬 연산을 수백만 번 수행하므로, 메모리 대역폭과 연산량이 곧 실시간 성능과 직결된다.</p>
<blockquote>
<p>값을 얼마나 효율적으로 표현하느냐가 신경망 전체 속도, 전력 효율을 크게 좌우한다.</p>
</blockquote>
<p><strong>2. Over-paramerization으로 인한 자유도</strong></p>
<p>대부분의 현대 신경망은 수천만~수억 개의 파라미터를 갖고 있어, 원래 모델은 정확도를 조금 희생해도 파라미터를 줄이거나 비트폭을 낮춰도 성능이 크게 떨어지지 않는다.</p>
<blockquote>
<p>이러한 과파라미터 구조 덕분에, 8비트, 4비트 같은 공격적인 양자화도 가능해졌고, 정확도나 복잡도 같은 지표를 잘 유지할 수 있다.</p>
</blockquote>
<p><strong>3. 순방향 오차 중심의 평가</strong></p>
<p>전통적인 양자화 연구는 주로 신호 왜곡을 수치적으로 제어하면서 정확한 계산과 이산 계산 간 차이를 최소화하는 데 초점이 맞춰져 있었다.
하지만, 신경망 양자화에서는 이산화된 모델이 실제로 얼마나 잘 분류, 생성하느냐가 관심사이다.</p>
<p><strong>4. 계층별 영향도를 활용한 혼합 정밀도(mixed-precision)</strong></p>
<p><strong>신경망 내부에서도 각 layer가 loss에 기여하는 정도는 다르다.
이를 활용해 중요한 layer는 8비트, 덜 민감한 layer는 4비트처럼 layer-wise로 다른 비트폭을 사용하는 mixed-precision 전략이 효과적이다.</strong></p>
<p>위 4가지가 과거 연구와 달리 신경망 양자화가 갖고있는 고유한 차별점이다.</p>
<h1 id="basic-concepts-of-quantization">Basic Concepts of Quantization</h1>
<h2 id="a-problem-setup-and-notations">A. Problem Setup and Notations</h2>
<p>$L$개의 layer를 가진 신경망(Neural Network)이 각 layer마다 학습 가능한 파라미터 ${W_1,W_2,..,W_L}$를 가지며, 이들의 전체 조합을 $\theta$라 칭한다.</p>
<p>Supervised learning에서 최적화해야 할 empirical risk minimization(경험적 위험 최소화)은 다음과 같다.</p>
<blockquote>
<blockquote>
<p>$L(\theta)=\frac{1}{N}\Sigma^N_{i=1}l(x_i,y_i;\theta)$</p>
</blockquote>
<ul>
<li>Train data ${(x_i,y_i)}^N_{i=1}$에 대해 평균 loss $L(\theta)$를 최소화하도록 $\theta$를 학습</li>
<li>Loss function $l(⋅)$은 task에 따라 MSE, Cross Entropy 등 사용<blockquote>
<ul>
<li>$(x_i,y_i)$는 입력 데이터와 그에 대응하는 정답 label(Supervised learning)</li>
<li>$N$ : 전체 데이터 포인트 수</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>또한, $i$번째 layer의 input hidden activation을 $h_i$, output hidden activation을 $a_i$로 정의해 둔다.</p>
<p>현대의 Neural network는 크고 복잡하며, 32비트 부동소수점으로 pre-training된 모델 파라미터 $\theta$를 갖고 있기 때문에 메모리, 연산량 측면에서 부담이 크다.</p>
<p><strong>Quantization</strong>의 목표는 이 파라미터 $\theta$뿐만 아니라, 중간 activation 값들($h_i,a_i$)까지도 최소한의 정확도 손실만을 남기면서 저비트로 바꾸어 모델 경랼화 및 추론 속도를 향상시키는 것이다.</p>
<blockquote>
<p>이를 위해, floating point 값을 양자화된 int값으로 mapping시켜주는 Quantizaton operator(양자화 연산자)를 정의해야 한다.</p>
</blockquote>
<p>이 과정에서 모델의 accuracy가 크게 떨어지지 않도록 하는 것이 관건이다.</p>
<h2 id="b-uniform-quantization">B. Uniform Quantization</h2>
<p>먼저, Neural network의 가중치와 활성화 값을 유한한 값의 집합으로 Quantization할 수 있는 양자화 함수를 정의해야 한다.(Quantization operator/function)</p>
<p>이 함수는 Floating point값을 받아서 더 낮은 정밀도의 범위(Int)로 매핑한다.</p>
<p>널리 사용되는 Quantization function은 다음과 같다.</p>
<blockquote>
<blockquote>
<p>$Q(r)=Int(r/s)-Z$</p>
</blockquote>
<ul>
<li>$Q(r)$ : Quantization operator, 양자화된 정수 값</li>
<li>$Int$ : 정수로 변환하는 함수(반올림 함수 등)</li>
<li>$r$ : 실수(Floating point) 입력값(가중치, 활성화 값)</li>
<li>$S$ : 실수 값의 scaling 인자</li>
<li>$Z$  :정수(Int)형 zero point<blockquote>
<p><strong>Zero point?</strong></p>
<p>실수 $r$을 정수로 바꾸는 데 있어서, 0이 어떤 정수로 매핑되어야 할지를 지정해 주는 값</p>
<ul>
<li>$Z=0$이면 중심이 0으로 대칭 양자화
<img src="https://velog.velcdn.com/images/min-soku/post/d0cdcc84-00af-42c5-9a20-9ac8ce94abcf/image.png" alt=""></li>
<li>$Z≠ 0$이면 중심을 살짝 옮겨서 비대칭 양자화
<img src="https://velog.velcdn.com/images/min-soku/post/9a8eef83-c531-4e42-8eca-b3812f808335/image.png" alt=""></li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>이 함수는 실수 $r$을 정수 값으로 매핑하는 함수이다.</p>
<blockquote>
<p>이러한 Quantization 방식은 <strong>Uniform Quantization(균등 양자화)</strong>라고 불린다.
<img src="https://velog.velcdn.com/images/min-soku/post/492f7e70-b3d4-43d1-895e-c4197f225726/image.png" alt="">
양자화된 값이 균등한 간격으로 배치되기 때문이다.</p>
<blockquote>
<p><strong>균등한 간격?</strong></p>
<p>양자화된 값들 사이의 간격이 모두 일정한 상태로, 변환 전 실수 값들을 균들한 간격으로 변환시킨 경우 나타난다.</p>
</blockquote>
</blockquote>
<p>한편, 비균등 양자화(Non-uniform Quantization) 방법도 존재하는데, 이 경우 양자화된 값들이 균등하게 배치되지 않을 수 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/f895a9f5-b827-42c1-a816-5e50ce245ac8/image.png" alt=""></p>
<hr style="border: 1px solid black; height:0; margin:0px 0;"/>

<p>양자화된 값 $Q(r)$로부터 다시 실수 $r$로 복원하는 것도 가능한데, 이를 <strong>비양쟈화(Dequantization)</strong>이라고 한다.</p>
<blockquote>
<blockquote>
<p>$\tilde{r}=S(Q(r)+Z)$</p>
</blockquote>
<ul>
<li>$Q(r)$ : Quantization operator, 양자화된 정수 값</li>
<li>$Z$  :정수(Int)형 zero point</li>
<li>$S$ : 정수를 다시 실수로 늘려주는 scaling 인자</li>
<li>$\tilde{r}$ : 양자화된 값을 기반으로 다시 실수로 바꾼 실수 값</li>
</ul>
<p>여기서 복원된 실수 $r$은 반올림 연산으로 인해 원래 값 $r$과 정확히 일치하지 않을 수 있다.</p>
</blockquote>
<h2 id="c-symmetric-and-asymmetric-quantization">C. Symmetric and Asymmetric Quantization</h2>
<p>Uniform Quantization에서 중요한 요소 중 하나는 $Q(r)=Int(r/s)-Z$의 scaling 인자 $S$의 선택이다.</p>
<p>이 scaling 인자 $S$는 주어진 실수 값 $r$의 범위를 여러 개의 구간으로 나누는 역할을 한다.</p>
<blockquote>
<blockquote>
<p>$S=\frac{\beta-\alpha}{2^b-1}$</p>
</blockquote>
<ul>
<li>[$\alpha,\beta$] : 클리핑 범위로, 실수 값이 너무 넓게 퍼져 있으면, 정수로 표현할 때 오차가 커지기 때문에 실수 값을 일정한 범위 안으로 잘라내는(cliping) 작업 수행</li>
<li>$b$ : 양자화 비트 수(bit width)로, INT8이면 $b$=8, 총 256개의 정수 </li>
</ul>
</blockquote>
<p><strong>따라서, Scaling 인자 $S$를 정의하려면 먼저 Cliping range [$\alpha, \beta$]를 정해야 한다.</strong></p>
<blockquote>
<p>이 Cliping range를 선택하는 과정을 Calibration이라고 부른다.</p>
</blockquote>
<p>간단한 선택 방법은 값의 최소/최댓값을 이용하여 Cliping range를 설정하는 것이다.</p>
<ul>
<li>$\alpha=r_{min}$</li>
<li>$\beta=r_{max}$</li>
</ul>
<p>이러한 방식은 <strong>비대칭 양자화(Asytmmetric quantization)</strong> 접근법에 해당한다.</p>
<p>왜냐하면, 이 Cliping range는 원점 0을 중심으로 대칭적이지 않기 때문이다.</p>
<blockquote>
<p>즉, $-\alpha ≠ \beta$인 경우이다
<img src="https://velog.velcdn.com/images/min-soku/post/590c4097-85f6-4bee-9df5-fc69b6283328/image.png" alt=""></p>
</blockquote>
<p>반면, $-\alpha = \beta$로 대칭적인 cliping range를 설정하여 <strong>대칭 양자화(Symmetric Quantization)</strong> 방식을 사용할 수도 있다.</p>
<blockquote>
<p>입력 값의 최댓값과 최솟값의 절댓값 중 더 큰 값을 기준으로 $-\alpha = \beta=max(|r_{max}|,|r_{min}|)$으로 설정한다.
<img src="https://velog.velcdn.com/images/min-soku/post/90626224-62ad-4cdd-ad68-17ac8c2dc802/image.png" alt=""></p>
</blockquote>
<p>비대칭 양자화는 대칭 양자화에 비해 더 좁은 Cliping range를 얻는 경우가 많다. 이는 특히 가중치나 활성화값이 비대칭적일 때 유리하다.</p>
<blockquote>
<p><strong>대칭 vs 비대칭 cliping range</strong></p>
<p>예를 들어, 실수 값이 [0,5]에 몰려 있는데 대칭 양자화의 경우 cliping range가 [-5,5]로 10의 범위 폭을 갖지만, 비대칭의 경우 [0,5]로 범위 폭이 절반으로 줄어든다.</p>
<blockquote>
<p>실제 데이터 분포에 맞게 필요한 만큼의 범위만 쓰기 때문에 비대칭이 더 효율적</p>
</blockquote>
<p><strong>좁은 Cliping range가 왜 중요?</strong></p>
<p>양자화에서는 Cliping range가 좁을수록, 정해진 비트 수로 더 촘촘하게 값들을 표현할 수 있다. 
즉, 정수 하나당 더 정밀한 실수값 표현이 가능하다</p>
</blockquote>
<p>한편, 대칭 양자화를 사용하면 $Q(r)=Int(r/s)-Z$의 수식을 더 단순화할 수 있다.
이 경우, Zero point $Z$는 0으로 설정된다.</p>
<blockquote>
<p>$Q(r)=Int(r/s)$</p>
</blockquote>
<p>여기서, Scaling 인자 $S$를 설정하는 방식은 두 가지가 있다.</p>
<ul>
<li><p>Full range 대칭 양자화</p>
<blockquote>
<blockquote>
<p>$S=\frac{2max(|r|)}{2^b-1}$</p>
</blockquote>
<ul>
<li>$-max(|r|)(128)  + max(|r|)(127) = 255$</li>
</ul>
<p>INT8 범위 [-128,127]을 모두 사용(반올림 모드 필요)</p>
</blockquote>
</li>
<li><p>Restricted range 대칭 양자화</p>
<blockquote>
<blockquote>
<p>$S=\frac{max(|r|)}{2^{b-1}-1}$</p>
</blockquote>
<ul>
<li>max(|r|) = 127</li>
</ul>
<p>[-127,127] 범위만 사용</p>
</blockquote>
</li>
</ul>
<p>Full range 대칭 양자화를 사용하는 방법은 더 정확하며, 실제로 대칭 양자화는 구현이 간단하고 Zero point를 0으로 둘 수 있어 많이 사용된다.</p>
<blockquote>
<p><strong>Full 이랑 Restricted는 딱 1차이밖에 안 나는데, 기술적 관점에서 큰 차이?</strong></p>
<p>INT8의 경우 -128~127의 범위를 갖기에 비대칭 구조를 띈다.
그래서, -128은 딱 하나뿐인 &quot;특이한 값&quot;이 된다.</p>
<p>주로 -128은 에러 표시, 패딩, 마스킹 등 특정 용도를 갖고 사용하게 되는데 이로 인해, 성밀도은 높일 수 있지만 -128이란 값으로 인해 버그나 오버플로우가 생길 수 있다.</p>
<p>이 오류는 심각할 수 있기에 대부분 -127까지의 restricted range를 사용한다.</p>
</blockquote>
<p>반면, 비대칭 양자화는 Zero point가 0이 아니기 때문에 offset이 발생한다.</p>
<h3 id="최소최댓값-사용에-대한-논의점">최소/최댓값 사용에 대한 논의점</h3>
<p>대칭 및 비대칭 양자화 모두에서 값의 min/max를 사용하는 방식은 매우 일반적이지만, 이 방식은 <strong>활성화 값 내의 outlier(이상치)에 민감하다는 단점이 있다.</strong></p>
<p>이상치는 범위를 불필요하게 넓게 만들고, 결과적으로 양자화의 해상도를 떨어뜨릴 수 있다.</p>
<p>해결 방법</p>
<ul>
<li><p>Percentile(분위율) 사용</p>
<blockquote>
<p>가장 큰 값이나 가장 작은 값 대신, i번째로 큰 값을 $\beta$, i번째로 작은 값을 $\alpha$로 사용하는 방식이다.</p>
</blockquote>
</li>
<li><p>KL divergence</p>
<blockquote>
<p>실수 값과 양자화 값 사이의 정보 손실을 최소화하도록 $\alpha$와 $\beta$를 선택하는 것이다.</p>
</blockquote>
</li>
</ul>
<h2 id="d-range-calibration-algorithms-static-vs-dynamic-quantization">D. Range Calibration Algorithms: Static vs Dynamic Quantization</h2>
<p>$[\alpha, \beta]$의 clipping range를 결정하기 위한 방법을 보았는데, 그렇다면 clipping range를 언제 결정되느냐도 중요한 논의점이다.</p>
<p>대부분의 경우 가중치는 inference에서 고정되어 있기 때문에 정적인 계산이 가능하지만, activation의 경우 input data에 따라 다르다.</p>
<p>따라서, activation을 정량화하는 방법은 Dynamic/Static 두 가지 접근 방식이 존재한다.</p>
<h3 id="dynamic-quantization">Dynamic quantization</h3>
<p>Clipping range가 runtime 중에 각 activation에 대해 동적으로 계산된다.</p>
<blockquote>
<p>실시간으로 activation에 대한 통계를 계산해야 하기 때문에 오버헤드가 매우 높다</p>
</blockquote>
<p>각 input에 대한 activation이 정확히 계산되기 때문에 정확도가 높은 경우가 많다.</p>
<h3 id="static-quantization">Static quantization</h3>
<p>Clipping range가 미리 계산되어 inference 중에 정적으로 유지된다.</p>
<blockquote>
<p>계산 오버헤드가 추가되지 않지만, dynamic에 비해 정확도가 떨어진다.</p>
</blockquote>
<p>clipping range를 사전 계산하기 위해 사용되는 방법 중 하나는 <strong>Calibration data를 이용하여 일반적인 activation 범위를 계산하는 것이다.</strong></p>
<p>또 하나는 training 중에 clipping range와 가중치를 공동으로 최적화하는 방법이다.</p>
<h2 id="e-quantization-granularity">E. Quantization Granularity</h2>
<p>CLipping range 계산에서 또 한 가지의 논의점은 어떻게 세분화시켜 계산할지에 대한 논의이다.</p>
<h3 id="layerwise-quantization">Layerwise Quantization</h3>
<p>한 layer 내 모든 가중치를 고려하여 clipping range를 결정한다.</p>
<p>해당 layer의 모든 parameter에 대해 통계를 검토한 다음 모든 parameter에 대해 동일한 clipping range를 사용한다.</p>
<blockquote>
<p>구현이 매우 간단하지만, 각 parameter의 range가 다양할 수 있기 때문에 정확도가 최적이 아닌 경우가 많다.</p>
</blockquote>
<h3 id="groupwise-quantization">Groupwise Quantization</h3>
<p>Layer 내에서 여러 채널을 grouping하여 clipping range를 계산한다.</p>
<p>layer내 parameter의 분포가 매우 다양한 경우에 유용하다.</p>
<blockquote>
<p>다양한 scaling factor를 고려해야 하는 추가 비용이 발생한다.</p>
</blockquote>
<h3 id="channelwise-quantization">Channelwise Quantization</h3>
<p>각각의 채널에 대해 전용 scaling factor가 할당한다.
채널마다 전용 scaling이 되기 때문에 정확도가 높아진다.</p>
<h2 id="f-non-uniform-quantization">F. Non-Uniform Quantization</h2>
<p>양자화된 값들의 간격이 비균일하게 되는 양자화 방법이다.</p>
<blockquote>
<p>$Q(r)=X_i,\ if\ r \in [\Delta_i, \Delta_{i+1}).$</p>
<ul>
<li>$Q(r)=X_i$ : 양자화된 값 $X_i$<blockquote>
<ul>
<li>실수 $r$이 어떤 구간 $[\Delta_i, \Delta_{i+1})$안에 들어가면, 그 구간에 대응하는 대표값 $X_i$로 projection(매핑)한다.</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<p>Non-uniform quantization은 중요한 값 영역에 더 집중하거나, 적절한 범위를 찾아 분포를 더 잘 포착할 수 있기 때문에 더 높은 정확도를 달성할 수 있다. </p>
<p>Non-uniform quantization에서의 최적화 문제</p>
<blockquote>
<p>$min_Q||Q(r)-r||^2$</p>
<blockquote>
<p>원래 텐서와 양자화된 텐서 사이의 최소화하도록 최적화</p>
</blockquote>
</blockquote>
<h2 id="g-fine-tuning-methods">G. Fine-tuning Methods</h2>
<p>Pre-trained 모델이 주어졌을 때, quantization은 FP로 학습된 모델의 파라미터에 perturbation을 주어 학습에서 수렴된 지점에서 멀어질 수 있다.</p>
<p>양자화 후에 파라미터를 조정해야 하는 경우, 모델을 재훈련하거나 <strong>QAT(Quantization Aware Training)라고 하는 training 중에 quantization을 하며 조정하는 방법</strong> 또는 <strong>재훈련 없이 quantization을 수행하는 PTQ(Post Training Quantization)</strong>을 수행한다.</p>
<h3 id="quantization-aware-training">Quantization-Aware Training</h3>
<p>Training 중 forward/backward를 quantized 모델로 수행(Fake quantization)
하지만, 파라미터 업데이트 자체는 FP로 하고, 업데이트 후 다시 양자화로 투영시켜 forward/backward 수행</p>
<blockquote>
<p>Weight를 진짜 INT8로 저장해서 학습하면 업데이트가 너무 거칠거나 불안정</p>
</blockquote>
<ol>
<li><p>실제 학습 파라미터는 FP32/16으로 유지</p>
</li>
<li><p>Forward/backward에서는 quantized weight 사용</p>
<blockquote>
<ul>
<li>Forward에 쓰는 값은 $\hat{w}=Q(w)$(Fake quant)</li>
</ul>
</blockquote>
</li>
<li><p>업데이트는 FP에 적용</p>
<blockquote>
<ul>
<li>Gradient는 $\frac{\partial L}{\partial w}$형태로 FP weight에 적용</li>
<li>업데이트 후 다시 $Q(\cdot)$로 forward용 fake quant weight 만들기</li>
</ul>
</blockquote>
</li>
</ol>
<p>QAT에서는 forward는 fake quant로 양자화 효과를 시뮬레이션,
Gradient 누적과 업데이트는 FP로 해서 학습 안정화</p>
<blockquote>
<p>양자화된 값으로 Gradient를 구하고 저장할 경우, 너무 작은 값은 0으로 떨어져서 큰 오차가 발생하게 됨</p>
</blockquote>
<h4 id="ste">STE</h4>
<p>Quantization은 구간별로 대표값 mapping이기 때문에 구간별로 출력이 일정한 계단함수이다.</p>
<blockquote>
<p>대부분 구간에서 미분이 0이 되고, 경계에서는 미분이 정의되지 않음</p>
</blockquote>
<p>STE는 Forward시에 진짜 양자화(rounding)로 값이 뭉개지게 만들고, backward에서는 rounding을 없는 셈치고 기울기를 1로 근사해서 gradient를 통과시킨다.
<img src="https://velog.velcdn.com/images/min-soku/post/10ae1b5a-06df-4db8-a7d5-10324c432f05/image.png" alt=""></p>
<p>QAT는 STE의 근사에도 불구하고 잘 작동하지만, 모델을 재훈련하는 데 드는 계산 비용이 크다는 단점이 있다.</p>
<h3 id="post-training-quantization">Post-Training Quantization</h3>
<p>비용이 많이 드는 QAT 방법의 대안으로 fine-tuning없이 양자화 후 약간의 가중치 조정을 수행하는 PTQ가 있다.</p>
<p>재학습을 위해 충분한 양의 training data가 필요한 QAT와 다르게, PTQ는 데이터가 제한적이거나 label이 없는 상황에서도 적용할 수 있다는 추가적인 장점이 있다.</p>
<p>하지만 QAT에 비해 정확도가 떨어지는 단점이 존재하지만, PTQ의 정확도 저하를 완화하기 위해 양자화 후 가중치 값의 편향을 보정하는 등의 대안이 존재한다.</p>
<h3 id="zero-shot-quantization">Zero-shot Quantization</h3>
<p>양자화를 잘하기 위해 필요한 조건</p>
<ol>
<li><p>Activation range를 알아야 함</p>
<blockquote>
<p>Activation이 어느 범위로 나오는지 알아야 clipping range와 scale을 정할 수 있는데, 이는 calibration 데이터가 필요함</p>
</blockquote>
</li>
<li><p>Fine-tuning</p>
<blockquote>
<p>양자화로 떨어진 성능 복구</p>
</blockquote>
</li>
</ol>
<p>하지만, 실제로는 dataset에 접근이 안 될 수 있다.</p>
<p>Dataset없이도 quantization을 하기 위해 나온 ZSQ</p>
<p><strong>1. Level 1 : 데이터 없음 + Fine-tuning도 없음</strong></p>
<blockquote>
<p>완전 바로 양자화(빠르고 쉽지만, 정확도 회복 어려움)</p>
</blockquote>
<p><strong>2. Level 2 : 데이터 없음 + Fine-tuning은 함</strong></p>
<blockquote>
<p>데이터는 없지만, 어떤 방식으로든 학습/최적화를 해서 정확도 회복</p>
</blockquote>
<h2 id="h-stochastic-quantization">H. Stochastic Quantization</h2>
<p>Inference에서 양자화는 보통 같은 입력 $x$에 대해 항상 같은 양자화 결과 $Q(x)$가 나오는 round-to-nearest같은 deterministic(결정적) rounding이 기본이다.</p>
<p>하지만, 학습에서는 확률적으로 위/아래로 rounding해서 모델이 더 탐색할 수 있게 만들자는 접근의 stochastic quantization이 나옴</p>
<p>Deterministic quant에서는 작은 업데이트가 있어도 업데이트가 양자화 격자 간격보다 좁아 round결과가 그대로인 경우가 존재한다.</p>
<p>Stochastic quant에서는 작은 변화도 확률적으로 반영되어 정체된 학습이 완화될 수 있다.</p>
<h1 id="advanced-concepts--quantization-below-8bits">Advanced Concepts : Quantization Below 8bits</h1>
<h2 id="a-simulated-and-integer-only-qunatization">A. Simulated and Integer-only Qunatization</h2>
<p>양자화된 모델을 배포하는 데는 Fake-quant(Simulated)와 Integer-only quant라는 일반적인 접근 방식 존재</p>
<p>Fake-quant에서는 모델 파라미터는 low-precision로 저장되지만, 연산은 FP로 수행된다. Fake-quant로는 빠르고 효율적인 low-precision의 이점을 충분히 누릴 수 없다.</p>
<blockquote>
<p>Quant와 Dequant를 반복해야 함</p>
</blockquote>
<p>그러나 Integer-only quant에서는 모든 연산이 low-precision으로 수행되어 효율적인 정수 연산으로 inference가 가능하다.</p>
<blockquote>
<p>Dequant없음
<img src="https://velog.velcdn.com/images/min-soku/post/7a7d0605-0da5-466c-b495-27676c1234bb/image.png" alt=""></p>
</blockquote>
<p>하지만, 많은 연산들이 FP에 친화적으로 설계되어 있어 어려운 부분이 많음</p>
<h2 id="b-mixed-precision-quantization">B. Mixed-Precision Quantization</h2>
<p>Low-precision quant를 사용할수록 hardware의 성능이 향상되지만, 매우 낮은 precision으로 양자화할 경우 정확도가 크게 저하될 수 있다.</p>
<p>Mixed-precision양자화로 이 문제 해결 가능</p>
<blockquote>
<p>각 layer가 서로 다른 bit의 precision으로 quantization된다.</p>
</blockquote>
<p>이 bit설정을 선택하기 위한 search space가 layer 수에 따라 기하급수적으로 증가한다는 문제가 있어, RL기반 방법, NAS 기반 방법으로 다양한 방법이 제안되었다.</p>
<h2 id="c-hardware-aware-quantization">C. Hardware aware Quantization</h2>
<p>양자화의 목표 중 하나는 inference의 latency 개선이다.
하지만, 특정 layer, 연산을 양자화한다고 모든 hardware에서 동일한 속도 향상이 이뤄지는 것은 아니다.</p>
<p>양자화의 이점은 hardware에 따라 달라지며, 여러 요소가 속도 향상에 영향을 미친다.</p>
<blockquote>
<p>양자화를 통해 최적의 이점을 얻기 위해서는 이러한 사실을 고려하는 것이 중요하다.</p>
</blockquote>
<h2 id="d-distillation-assisted-quantization">D. Distillation-Assisted Quantization</h2>
<p>Distillation을 통해 양자화의 정확도를 높일 수 있다.</p>
<blockquote>
<p>정확도가 높은 대형 모델을 teacher로 사용하여 소형 student 모델의 학습을 돕는 방법</p>
</blockquote>
<p>Student 모델을 학습하는 동안, teacher 모델이 생성한 soft label을 학습하도록 하며, 전체 loss function은 student 모델 자체의 loss + distillation loss가 통합된다.</p>
<h2 id="e-extreme-quantization">E. Extreme Quantization</h2>
<p>1 bit 양자화는 메모리 요구량을 32배로 줄이는 극단적인 양자화 방법이다.
메모리 이점 외에도 binary/ternary 연산은 비트 단위 연산을 통해 효율적으로 계산할 수 있으며, 상당한 연산 가속을 달성할 수 잇다.</p>
<p>Binary connect는 가중치를 +1, -1로 제한하는 방법으로, 이 방식에서는 이진화 효과를 시뮬레이션하기 위해 forward/backward에서만 이진화된다.
그런 다음, STE를 사용하여 gradient를 전파하여 훈련한다.</p>
<p>이러한 극단적인 양자화는 ImageNet classification과 같은 복잡한 작업에서 심각한 정확도 저하를 초래하며, 이를 위한 여러 가지 해결책이 제안되었다.</p>
<p>하지만, 극단적인 양자화는 CV 작업에서 많은 CNN 모델의 크기, latency를 대폭 줄이는 데 성공하며, 덜 중요한 작업에서는 허용될 수 있다.</p>
<h2 id="f-vector-quantization">F. Vector Quantization</h2>
<p>Quantization은 작은 손실만을 초래하는 low-precision 표현을 찾는 것이 목표이다.
고전적인 양자화에서는 가중치를 여러 그룹으로 클러스터링하여, 각 그룹의 중심을 양자화된 값으로 사용한다.
k-means clustering을 사용하면 정확도 저하 없이 모델 크기를 최대 8배까지 줄일 수 있는 것으로 밝혀졌다.</p>
<h1 id="quantization-and-hardware-processors">Quantization and Hardware Processors</h1>
<p>양자화는 모델 크기를 줄일 뿐만 아니라 정밀도가 낮은 로직이 있는 하드웨어의 경우 더 빠른 속도를 구현하고, 더 낮은 전력을 필요로 하기 때문에, IoT 및 엣지 디바이스 배포에 중요하다.</p>
<p>엣지 디바이스는 컴퓨팅 리소스 제약이 엄격한 경우가 많다.</p>
<p>STM32의 경우 MCU 제품으로 일부 ARM Cortex-M 코어에는 FP유닛이 포함되어 있지 않기 때문에 배포하기 전에 먼저 모델을 정량화해야 한다.</p>
<p>지난 몇 년동안 엣지 디바이스의 컴퓨팅 성능이 크게 향성되어 이전에는 서버에서만 사용할 수 있었는 모델을 배포하고 추론할 수 있게되었다.</p>
<p>low-precision 로직 및 전역 가속기와 결합된 양자화는 이러한 엣지 디바이스의 진화에 중요한 원동력이었다.
<img src="https://velog.velcdn.com/images/min-soku/post/c4522abe-7a28-48fd-9455-3a27a2da3c45/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LoRA 논문 리뷰]]></title>
            <link>https://velog.io/@min-soku/LoRA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0</link>
            <guid>https://velog.io/@min-soku/LoRA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0</guid>
            <pubDate>Wed, 09 Jul 2025 11:46:23 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/min-soku/post/6a7798a4-9036-4dd2-8434-22907b70fe4d/image.png" alt=""></p>
<h1 id="1-lora-low-rank-adaptation-of-large-language-models">1. Lora: Low-rank adaptation of large language models</h1>
<h2 id="--instruction">- Instruction</h2>
<p>자연어 처리에서 많은 Task들은 하나의 대규모로 pre-trained 된 언어 모델을 여러 downstream task에 적용시키는 데 의존한다. (하나의 Foundation 모델을 fine-tuning)</p>
<p>이러한 Adaptation은 일반적으로 Pre-trained된 모델의 모든 파라미터를 업데이트하는 fine-tuning을 통해 수행된다.</p>
<blockquote>
<p>Fine-tuning의 주요 단점은 전체 파라미터에 대해 Gradient를 구하고 Optimizing하는 과정이 포함된다.</p>
<ul>
<li>모델의 크기가 클 수록 fine-tuning시 많은 파라미터를 학습 시켜야 하기 때문에, 시간, 비용 모든 측면에서 비효율적이다.</li>
</ul>
</blockquote>
<p>이러한 단점으로 인해, 많은 연구자들이 일부 파라미터만 조정하거나 새로운 task를 위한 외부 모듈을 학습하여 운영 효율성을 크게 향상시켰지만, 이 방식들도 모델의 Depth를 확장하거나 사용가능한 sequence 길이를 줄임으로써 Inference latency를 발생시키는 trade-off가 존재하였다.</p>
<blockquote>
<p>연구진들은 저차원의 Intrinsic rank(내재적인 계수)를 이용해 fine-tuning하는 방법론인 Low-Rank Adaptation(LoRA)를 제시하였다.</p>
<blockquote>
<p><strong>Fine-tuning 시, pre-training된 모델의 weight는 업데이트하지 않고(Freeze), LoRA의 rank decomposition matrices의 weight들만 업데이트</strong></p>
</blockquote>
</blockquote>
<h2 id="--method">- Method</h2>
<p>Pre-training된 가중치 행렬 $W_0\in\R^{d\times k}$의 경우</p>
<blockquote>
<p>$W_0+\Delta W=W^0+BA,\quad where;B\in\R^{d\times k},;A\in\R^{r\times k},;r\ll min(d,k)$</p>
</blockquote>
<p>로 표현하여 업데이트를 제한한다.</p>
<p>여기서 $r$은 rank이다. </p>
<p><strong>학습하는 동안 $W_0$은 고정</strong>되고 Gradient 업데이트를 받지 않고, <strong>A와 B는 학습 가능한 파라미터를 포함</strong>한다.</p>
<p>기존의 $h=W_0x$였던 경우, LoRA를 도입한 forward pass는 다음과 같다.</p>
<p>&lt;LoRA에서의 Forward pass&gt;</p>
<blockquote>
<p>$h=W_0x+\Delta x = W_0 x + BA$</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/8087847d-667b-41d8-bad6-cda243834859/image.png" alt=""></p>
<h2 id="--code">- Code</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[Everybody Prune Now: Structured Pruning of LLMs with Only Forward Passes]]></title>
            <link>https://velog.io/@min-soku/Everybody-Prune-Now-Structured-Pruning-of-LLMs-with-Only-Forward-Passes</link>
            <guid>https://velog.io/@min-soku/Everybody-Prune-Now-Structured-Pruning-of-LLMs-with-Only-Forward-Passes</guid>
            <pubDate>Sun, 25 May 2025 16:12:18 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>Structured pruning은 더 작고 빠른 LLM을 만들기 위한 경량화 방법이다.</p>
<p>기존 Pruning 방법들은 대부분 Backpropagation을 필요로 하기 때문에, Backpropagation을 위해 gradient 계산 비용과 메모리 사용량이 크게 증가한다는 단점이 존재한다.</p>
<p>본 논문에서는 새로운 Structured pruning 기법을 소개한다.</p>
<blockquote>
<ul>
<li><strong>Bonsai</strong><blockquote>
<p><strong>Gradient를 사용하지 않고, 오직 forward pass만을 이용하여 pruning을 수행하여 메모리와 계산 비용을 획기적으로 줄이면서 높은 수준의 pruning 성능을 달성한다.</strong></p>
</blockquote>
</li>
</ul>
</blockquote>
<p>Perturbation 기반 pruning을 통해 다양한 하드웨어 환경에서 대규모 모델을 효율적으로 compress할 수 있게 한다.</p>
<p>기존의 Structured pruning 기법들과 다르게 Bonsai는 더 적은 자원으로 더 나은 compression 성능을 보이며 semi-structured pruning보다 2배 빠른 모델을 생성한다.</p>
<h2 id="structured-pruning">Structured pruning</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/a54c41a2-7a9d-42be-8e00-0d595df64210/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/51fe43c6-44aa-4beb-995d-d2e686d6100c/image.png" alt=""></p>
<blockquote>
<p>모델의 전체 구조 단위를 제거하는 방식
예를 들어, 전체 뉴런, 채널, layer, filter, Attention head 등을 모듈 전체를 제거하는 방식이다.</p>
</blockquote>
<p>제거된 구조 단위가 크고 규칙직이기 때문에 실제 하드웨어에서의 계산에서 빠지기 때문에 속도 향상과 메모리 절감이 가능하지만, 
모델의 구조 자체가 변경되기 때문에 잘못 제거 시에 성능이 급락할 수 있기 때문에 재학습이나 재배치가 필요하다</p>
<h2 id="semi-structured-pruning">Semi-structured pruning</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/064409c8-b648-45c5-b82e-fe091febf32d/image.png" alt=""></p>
<blockquote>
<p>Structured와 Unstructured pruning의 중간 형태로, 작은 block이나 pattern 단위로 부분적으로 가중치를 제거하면서도, 일정한 제거 규칙을 유지한다.</p>
</blockquote>
<p>대표적으로 2:4 pruning은 각 layer의 weight 행렬은 크기 4로 묶어서, 그룹 내 가중치에 특정 기준으로 중요도 점수를 매겨 상위 2개의 가중치만 남기고 masking하는 방식이다.</p>
<p>Unstructured 형태이지 Structured와 같은 규칙성을 갖기 때문에 Structured보다 높은 sparsity를 달성할 수 있다.</p>
<p>모든 block이 동일한 N:M 패턴을 가지므로 하드웨어 가속시에서 연산 라이브러리를 효율적으로 설계할 수 있다.</p>
<h2 id="unstructured-pruning">Unstructured pruning</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/467716ce-fbd3-4a6f-bb1c-bf03222e3476/image.png" alt=""></p>
<blockquote>
<p>Unstructured pruning은 신경망의 개별 파라미터 단위로 중요도가 낮은 가중치를 masking하여 0으로 만드는 방식으로, 어느 위치든 상관 없이 전체 파라미터 중 중요도 기준에 따라 임계값 이하의 weight를 제거한다.</p>
</blockquote>
<p>동일한 sparsity에서 Structured pruning보다 더 많은 가중치를 제거할 수 있어, 모델 크기를 크게 줄이면서도 모델의 구조를 유지할 수 있다.</p>
<p>제거할 위치를 개별적으로 선택하기 때문에, 모델의 중요한 연결은 그대로 남기고 불필요한 연결만 정밀하게 제거할 수 있지만, 
파라미터가 불규칙적으로 분포해 있기 때문에, 벡터/행렬 사속기에 최적화된 연산 스케줄링이 어렵고 sparse matrix 연산을 빠르게 처리하기 위한 특수 라이브러리나 하드웨어가 필요하다.</p>
<h1 id="intruduction">Intruduction</h1>
<p>LLM이 지속적으로 커지면서, 이를 실행하고 배포하는 데 필요한 연산 자원도 급격하게 늘어나고 있다.
이런 모델의 크기와 연산 부담을 줄이기 위해 Structured pruning이 사용되어 왔는데, 기존의 Structured pruning은 Gradient를 계산하는 backpropagation에 의존하기 때문에 메모리와 연산 비용이 크게 증가한다.</p>
<blockquote>
<p>Forward pass 도중 각 layer마다 입력/출력 값을 저장해 두어야 Backpropagation에서 그 값을 이용하여 gradient를 계산할 수 있는데, 이 저장된 Activation 값이 모델 크기와 동일하거나 그 이상의 메모리를 차지하기 때문에 메모리 사용량이 최소 2배로 뛸 수 밖에 없다</p>
</blockquote>
<p>Backpropagation은 Forward pass에 비해 최소 2배 이상의 메모리를 소모하며, Optimizer인 AdamW를 이용한 Optimizing(Gradient descent 파라미터 업데이트)은 3배 이상의 메모리를 요구한다.</p>
<blockquote>
<p>결과적으로 Forward pass의 Activation 메모리/연산량과 Optimizer의 메모리/연산량이 합쳐져서, backpropagation을 필요로 하는 structured pruning은 메모리 사용량과 연산량이 모두 크게 증가하게 된다.</p>
</blockquote>
<p>이러한 한계를 해결하기 위해, 본 논문에서는 Bonsai라는 새로운 Structured pruning 기법을 제안한다.</p>
<p>Bonsai는 전체 pruning 과정을 오직 Forward pass만으로 수행하여, Backpropagation으로 인한 메모리/연산 부담을 제거함으로써 기존 방법으로는 불가능했던 대형 모델의 pruning을 가능하게 한다.</p>
<blockquote>
<p>Bonsai는 Structured/Unstructured의 기존 방법들보다 더 우수한 성능을 보여준다.</p>
</blockquote>
<p>Bonsai에서는 Structured pruning을 위해 모듈의 중요도를 측정할 때, Gradient를 계산하지 않기 때문에 Forward pass기반의 Perturbative라는 evaluation을 도입하여 모듈의 중요도를 측정한다.</p>
<blockquote>
<p>Perturbative</p>
<blockquote>
<p>각 모듈을 삭제한 모델을 하나씩 만들어, 그 성능 저하를 측정하여 모듈에 대한 중요도를 측정하는 방법</p>
</blockquote>
</blockquote>
<ul>
<li><strong>모델에 1000개의 모듈이 있으면, 1000번의 Forward pass가 필요한데, LLM 수준에서는 비용이 너무 크다</strong></li>
</ul>
<h3 id="bonsai의-아이디어">Bonsai의 아이디어</h3>
<h4 id="1-undetermined-regression-문제로의-재구성">1. Undetermined regression 문제로의 재구성</h4>
<ol>
<li><p>랜덤 sub-model 샘플링</p>
<blockquote>
<p>여러 모듈을 한꺼번에 랜덤하게 지운 sub model을 적은 개수로만 만들어서 그 성능을 측정한다.</p>
</blockquote>
</li>
<li><p>Regression 문제로 변환</p>
<blockquote>
<p>이 적은 개수의 sub model의 성능 저하 결과를 어떤 모듈이 얼마나 중요했는지를 예측하기 위한 데이터로 삼는다.</p>
</blockquote>
</li>
<li><p>Underdetermined 문제</p>
<blockquote>
<p>관측치(랜덤 sub model 개수) &lt; 전체 모듈 개수 일 때도, Regression 기법을 사용하면 최소한의 sub model 평가로도 중요도를 합리적으로 추정할 수 있다</p>
</blockquote>
</li>
</ol>
<h4 id="2-사전-정보-활용">2. 사전 정보 활용</h4>
<ol>
<li><p>먼저 Unstructured pruning 기법을 활용해 절댓값이 작은 weight들을 미리 파악한다.</p>
<blockquote>
<p>이 절댓값 기반 중요도는 대략 &quot;이 모듈은 덜 중요할 것 같다&quot;는 단서를 준다.</p>
</blockquote>
</li>
<li><p>우선 순위 샘플링</p>
<blockquote>
<p>sun model을 만들 때, &quot;덜 중요할 것 같은&quot; 모듈은 더 자주 뽑아서 지워보고, &quot;아마 중요할 것 같은&quot; 모듈은 조금 덜 자주 뽑는다.</p>
</blockquote>
</li>
</ol>
<h4 id="3-global-모듈-제거">3. Global 모듈 제거</h4>
<p>이전의 Gradient-free 방법들은 1개 layer씩 그 안에서만 중요도를 계산해서 제거하는 방법을 반복했는데, 이러면 초기 layer에서 너무 많이 잘라버려서 뒷부분 layer를 제거할 기회가 사라지는 등의 전체 모델 균형이 깨질 수 있다.</p>
<ol>
<li>모델 전체를 한 번에 본다.<blockquote>
<p>Regression을 통해 추정된 중요도를 전부 모아서 어떤 layer든 전체 중요도 기준으로 낮은 모듈부터 제거한다.</p>
</blockquote>
</li>
</ol>
<h1 id="methodology">Methodology</h1>
<h2 id="21-background-on-pruning-problem-definition-and-notation-setup">2.1 Background on Pruning, Problem Definition and Notation Setup</h2>
<p>파라미터 $\theta \in \R^D$로 정의된 LLM($M_\theta$)과, 이 모델이 특정 task에서 얼마나 잘 동작하는지를 측정하는 함수 $U$(Accuracy, Perplexity..등)가 주어졌다고 가정한다.</p>
<p><strong>메모리 제약 하에서 $M_\theta$의 Inference가 가능하도록</strong> 크기는 더 작고 속도는 더 빠르면서도 $U$관점에서 성능이 우수한 모델을 얻기 위해 pruning을 적용한다.</p>
<blockquote>
<p>Structured pruning은 모델을 이루는 작은 단위들을 모듈 단위로 제거한다는 의미이다.</p>
</blockquote>
<ol>
<li><p>$M_\theta$(LLM)를 $m={m_1,...,m_N}$이라는 $N$개의 모듈 집합으로 보고</p>
</li>
<li><p>각 모듈 $m_i$는 $s_i$개의 파라미터를 포함하여, $\sum_is_i=D$가 되도록 정의한다.</p>
<blockquote>
<ul>
<li>$s_i$는 모듈의 파라미터 수</li>
<li>$D$는 모델 전체 파라미터 수</li>
</ul>
</blockquote>
</li>
<li><p>sub model $\tilde{\mathbf{m}} \subseteq \mathbf{m}$(sub model을 구성할 모듈$m_i$의 집합)을 선택하면 $\tilde{\mathbf{m}}$에 포함되지 않은 모듈을 제거하여 새로운 모델 $M_{|\tilde{\mathbf{m}}|}$을 생성한다.</p>
</li>
<li><p>희소도(Sparsity) 제약</p>
</li>
</ol>
<ul>
<li>목표 희소도 ($p$)가 주어지면, 전체 파라미터의 $p$비율만큼 제거하면서도 $U$를 최대화하는 조합 최적화로 표현된다. <blockquote>
<p>$\mathbf{m}^* = \arg\max_{\tilde{\mathbf{m}} \in \mathcal{F}<em>p}U\left(M</em>{|\tilde{\mathbf{m}}|}\right)$</p>
</blockquote>
</li>
<li>이 조건을 만족하는 서브모델의 집합:  <blockquote>
<p>$$
\mathcal{F}<em>p = \left{
  \tilde{\mathbf{m}} \subseteq \mathbf{m}
  ;\middle|;
  \sum</em>{m_j \in \tilde{\mathbf{m}}} s_j \le (1 - p) D
\right}
$$</p>
</blockquote>
</li>
</ul>
<p>기존의 Structured pruning 기법들은 제거할 모듈을 구할 때 gradient-based로 풀고자 하지만,
메모리 제약으로 인해 Backpropagation(gradient 계산)이 불가능한 환경에서는 이러한 방법을 사용할 수 없다.</p>
<h2 id="22-estimating-module-relevance-with-only-forward-passes">2.2 Estimating module relevance with only forward passes</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/7d44ecb4-449e-43e6-9ed6-5832e4417b55/image.png" alt=""></p>
<p>메모리 부담이 너무 카서 Forward pass만 가능한 모델을 pruning할 때, </p>
<blockquote>
<p>$\mathbf{m}^* = \arg\max_{\tilde{\mathbf{m}} \in \mathcal{F}<em>p}U\left(M</em>{|\tilde{\mathbf{m}}|}\right)$</p>
</blockquote>
<p> 이 수식을 gradient 기반이 아니라 평가 함수 $U$를 기반으로 최적의 pruned model을 찾아야 한다.</p>
<p> 하지만, 모델의 크기가 큰 LLM에서 <strong>고려할 수 있는 모든 sub model의 집합 $\mathcal{F}_p$를 전부 탐색하는 것은 조합의 크기가 너무 커서 불가능</strong>하다.</p>
<p>이를 해결하기 위해, 훨씬 작은 수 $n \ll |\mathcal{F}_p|$번의 평가만 수행하여, 모델 $M$의 각 모듈이 평가 함수 $U$에 기여하는 정도를 추정할 데이터를 모은다.</p>
<blockquote>
<p><strong>Sampling을 통해 n개의 sub model을 만들고, 각 sub model에 대해 
회귀식을 풀어 각 모듈에 대한 중요도 점수 $\beta_i$를 구한다.</strong></p>
</blockquote>
<p>모델 내 $N$개의 모듈($\beta_i$)에 대한 중요도 점수를 sampling을 해 $\beta={\beta_i}^N_{i=1}$로 추정했다고 하면</p>
<p>이 식에 대한 근사 해는 다음과 같다.</p>
<blockquote>
<blockquote>
<p>$\mathbf{m}^* \approx \mathbf{m^{approx}= \arg\max_{\tilde{\mathbf{m}} \in \mathcal{F}<em>p}\sum</em>{j \in \tilde{\mathbf{m}}}\beta_j}$</p>
</blockquote>
<p>$\arg\max_{\tilde{\mathbf{m}} \in \mathcal{F}<em>p}\sum</em>{j \in \tilde{\mathbf{m}}}\beta_j$ : <strong>모든 sub model(모듈 집합) $\mathcal{F}<em>p$ 내에서, 모듈(j) 중요도 점수 ($\beta_j$)의 합($\sum</em>{j \in \tilde{\mathbf{m}}}\beta_j$)이 가장 큰 sub model $\tilde{m}$을 찾아 근사 해로 선택한다</strong></p>
</blockquote>
<ul>
<li>$\beta_j$ : sub model 내 모듈 j가 평가 함수 $U$에 기여하는 정도를 나타내는 수</li>
<li>$\beta_j$가 클수록 꼭 남겨야 할 중요 모듈이므로, 가장 중요한 모듈들의 집합을 만들려면, $\beta$의 합이 최대인 집합을 찾으면 된다<blockquote>
<p><strong>하지만 $\mathcal{F}_p$의 크기는 지수적으로 크기 때문에 모든 sub model에 대해 중요도 점수의 합을 구하는 건 불가능하다</strong></p>
<blockquote>
<p>$\mathcal{F}_p$ 내에서, 중요도 점수의 합($\sum\beta_j$)이 가장 커지는 sub model을 찾기 위해 <strong>Greedy search</strong>를 이용한다.</p>
<ul>
<li><strong>Samplling을 통해 구한 모델 내 모듈 중요도 점수 ($\beta_j$)를 내림차순 정렬하여 sparsity 제약을 만족하는 한에서 차례대로 중요도가 높은 모듈부터 선택하여 sub model의 근사 해를 만든다.</strong></li>
</ul>
</blockquote>
</blockquote>
</li>
</ul>
<h3 id="모듈별-중요도-점수-beta_i">모듈별 중요도 점수 $\beta_i$</h3>
<h4 id="1-데이터-수집">1. 데이터 수집</h4>
<ol>
<li>서브 모델 생성</li>
</ol>
<ul>
<li>전체 모듈 집합 $m$에서, $|\mathcal{F}_p|$ 중 아주 작은 수 $n \ll |\mathcal{F}_p|$개의 부분 집합 $\tilde{m}_1,..., \tilde{m}_n$을 샘플링한다</li>
</ul>
<ol start="2">
<li>성능 측정</li>
</ol>
<ul>
<li>각 서브 모델 모듈 집합 $\tilde{m}<em>k$에 대해 $\tilde{m}_k$에 속하지 않는 모듈들을 제거한 가상의 모델 $M</em>{|\tilde{m}<em>k|}$을 Forward pass만 이용해 task를 실행하여 성능 $U_k=U(M</em>{|\tilde{m}_k|})$을 기록한다.</li>
</ul>
<ol start="3">
<li>데이터셋 구성
n개의 모듈 부분 집합에 대해 모두 가상의 모델을 만들어 성능을 측정해 기록하여 데이터셋을 구성한다<blockquote>
<p>$\mathcal{D}={(\tilde{m}<em>k, U_k)}^n</em>{k=1}$</p>
</blockquote>
</li>
</ol>
<h4 id="2-이진-마스크-alpha_tildem">2. 이진 마스크 $\alpha_{\tilde{m}}$</h4>
<p>각 sub model에 대해 이진 마스크로 표현한다</p>
<blockquote>
<p>$$(\alpha_{\tilde{\mathbf{m}}_k})_i =\begin{cases}1, &amp; i \in \tilde{\mathbf{m}}_k(모듈 m_i가 sub model에 포함됨(남김),\0, &amp; 모듈 m_i가 sub model에 포함되지 않음(제거됨)\end{cases}$$</p>
</blockquote>
<p>예) $N$ = 5일 때, $\tilde{m}<em>k = {m_1, m_3, m_5}$이면 $\alpha</em>{\tilde{\mathbf{m}}_k} = [1,0,1,0,1]^T$</p>
<h4 id="3-회귀-문제">3. 회귀 문제</h4>
<blockquote>
<p>$$\hat\beta= \arg\min_{\beta\in\mathbb{R}^N}\frac{1}{n}\sum_{k=1}^n \bigl(U_k - \beta^T \alpha_{\tilde{\mathbf{m}}_k}\bigr)^2
  ;+;\gamma,|\beta|$$</p>
</blockquote>
<ol>
<li>n개의 sub model들을 평가해 성능 $U_k$와 이진 마스크 $\alpha_k$를 얻음</li>
<li>$\beta$를 찾으면 $\beta^T \alpha_k$와 $U_k$가 근사해지겠지 라는 가정하에 회귀</li>
<li>회귀를 통해 각 모듈 i에 대해 얼마나 성능에 기여하는지를 나타내는 $\hat\beta_i$를 획득한다. 이후, 이 값으로 greedy하게 선택하여 근사해를 함</li>
</ol>
<ul>
<li><p>(A) 평균 제곱 오차($\frac{1}{n}\sum_{k=1}^n \bigl(U_k - \beta^T \alpha_{\tilde{\mathbf{m}}_k}\bigr)^2$)</p>
<blockquote>
<p>각 sub model의 관측 값 $U_k$와 예측 값 $\beta^T \alpha_k$ 차이의 제곱을 평균</p>
<blockquote>
<p>예시)
<img src="https://velog.velcdn.com/images/min-soku/post/4cb37b27-d2d2-4e0a-b268-ecdebcccc6f4/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/7cebe8cc-1963-467b-b531-a446d3cc605b/image.png" alt=""></p>
</blockquote>
<ul>
<li>관측값 (0.75, 0.4, 0.9)와 예측 값 ($\beta_1+\beta_3$, $\beta_2$, $\beta_1+\beta_2+\beta_3$)의 차이를 제곱해 더한 뒤 평균을 낸다</li>
<li>이 값이 작을수록 선형 모델이 관측 데이터를 잘 따라간다는 뜻</li>
</ul>
</blockquote>
</li>
<li><p>(B) 정규화($\gamma,|\beta|$)</p>
<blockquote>
<p>Ridge 회귀를 사용하며, $\beta$값이 너무 커지지 않게 과적합을 방지한다.</p>
<ul>
<li>정규화 없이 풀면 실제로는 관측치의 개수가 모듈의 개수보다 훨씬 적게되어 단순 최소 제곱만 사용하게 되면 매우 불안정하거나 해가 무수히 많아진다</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>Ridge 회귀를 통해 얻은 $\hat\beta$를 이용하여 $m^{approx}$를 구함</strong></p>
<h2 id="23-selecting-sub-models-for-evaluation">2.3 Selecting sub-models for evaluation</h2>
<p>그렇다면, 중요한 은 $n \ll |\mathcal{F}_p|$개의 sub model을 어떻게 골라 평가에 사용할지(Sampling)을 결정하는 일이다.</p>
<p>하지만, 단순한 방법인 Uniform sampling은 최적이 아님이 보여진다.</p>
<blockquote>
<p>Uniform sampling : 모든 모듈이 뽑힐 확률이 균등</p>
<p>어떤 모듈 $m_i$가 성능 지표 $U$에서 중요하다 해도, 관측치가 전체 모듈 개수보다 작기 때문에(n&lt;N) 해당 모듈이 sub model 목록에 단 한 번도 포함되지 않을 수 있다.</p>
<blockquote>
<p>만약 모듈 $m_i$가 뽑힌 n개의 sub model 목록에서 전부 빠진 모듈이 되면, 회귀를 통해 얻는 $\hat\beta_i=0$이 되어버리기에, $m^{approx}$는 최적의 sub model이 아니게 될 것이다.</p>
</blockquote>
</blockquote>
<p>따라서, <strong>정보에 기반한 Sampling이 필요</strong>하다.</p>
<p>각 모듈 $m_i$에 대해, sub model sampling시에 그 모듈이 포함될 확률을 prior score(각 모듈이 얼마나 유용할지)$p_i$에 비례하도록 설정한다.</p>
<blockquote>
<p>$p_i$는 pruning 논문들에서 제안된 여러 지표(weight magnitude, activation magnitude) 등으로 정의할 수 있다.</p>
</blockquote>
<p>예를 들어, activation magnitude를 prior로 삼는다면, 여러 입력 샘플 $x_b$에 대해 각 layer 출력의 절댓값을 평균 내어 prior로 둔다.</p>
<blockquote>
<blockquote>
<p>$\hat\alpha_i=\frac{1}{B}\sum^B_{b=1}|\sigma(W^T_{[i,:]}x_b)|$</p>
</blockquote>
<ul>
<li>$\frac{1}{B}\sum^B_{b=1}$ : B개의 입력 샘플에 대한 평균</li>
<li>$|\sigma(W^T_{[i,:]}x_b)|$ : Layer별 활성화 값</li>
</ul>
</blockquote>
<p>이렇게 하면 성능이 높을 것 같은 모듈이 샘플링될 확률이 커지므로, $\beta$ 추정의 정확도가 올라간다</p>
<blockquote>
<p><strong>$p_i$계산은 원본 모델 $M_{\theta}$에 대해 한 번만 forward해도 가능하기 때문에, 메모리 효율성도 유지된다.</strong></p>
</blockquote>
<p>효율을 더 높이기 위해, 각 Layer당 prior 순위로 가장 하위 2p 비율의 모듈만 prune 대상으로 삼고, 나머지 상위 1-2p 비율은 고정해 두는 기법을 쓴다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/f4c4f3f4-200d-4e3b-aacd-1105dd73c13c/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/3654467e-e9e0-49fd-8408-fcfbfab005e0/image.png" alt=""></p>
<blockquote>
<p>즉, p=0.2라면, 전체 모듈의 20%를 pruning하는 것인데 하위 40% 중에서 어떤 20%를 pruning할지에 대한 조합만 sampling하여 sub model을 만들어 회귀에 사용</p>
</blockquote>
</blockquote>
<h2 id="24-iterated-pruning">2.4 Iterated Pruning</h2>
<p>한 번에 파라미터를 제거하면, pruning 후에 모델 성능이 크게 떨어지거나, 잘못된 모듈을 제거할 위험이 크다.</p>
<blockquote>
<p>작은 비율 $p_{iter}$씩 여러 단계로 나눠서 제거하면, 각 단계마다 prior와 $\beta$를 재추정하며 더 안정적인 pruning이 가능하다.</p>
</blockquote>
<p>이에 따라, 목표 sparsity보다 작은 1회당 pruning 비율 $p_{iter}&lt;p$를 정의하고 $iter=p/p_{iter}$단계만큼 반복 수행한다.</p>
<p>각 단계마다 평가할 sub model 개수도 $n_{iter}=n/iter$개로 나누어, 한 번에 $n_{iter}$개의 sub model을 탐색한다.
<img src="https://velog.velcdn.com/images/min-soku/post/9667f8c7-48f6-49bb-90d6-44d0f2f419b4/image.png" alt=""></p>
<p>추정된 $\beta^*$를 내림차순 정렬한 뒤, 가장 작은 $\beta_i$들만 골라 pruning한다.</p>
<blockquote>
<p>iter만큼 반복하면서 한 단계당 소량씩 pruning을 진행하며, 반복이 끝나면, 목표 sparsity를 만족하는 최종 pruned model이 완성된다.</p>
</blockquote>
<h1 id="3-experimental-details-and-main-results">3. Experimental Details and Main Results</h1>
<ul>
<li>실험 대상 및 환경<blockquote>
<p>약 7B 파라미터급 LLM(LLaMA-1/2-7B, Phi-2 3B)을 대상으로, Attention head와 MLP 차원을 모듈 단위로 Structured pruning</p>
</blockquote>
</li>
</ul>
<h2 id="31-bonsai-is-competitive-with-other-forward-pass-only-structured-pruning-methods">3.1 Bonsai is competitive with other forward pass-only, structured pruning methods</h2>
<p>Forward-only structured pruning과 비교</p>
<ul>
<li>대상 : LLaMA-2-7B</li>
<li>Sparsity : 50%</li>
<li>Dataset : Wikitext-2, C4
<img src="https://velog.velcdn.com/images/min-soku/post/9a8c9867-de99-448b-bde8-153a8881925e/image.png" alt=""></li>
</ul>
<p>FLAP보다 더 낮은 Perplexity를 달성</p>
<blockquote>
<p>Perplexity : 모델이 테스트 데이터 분포를 얼마나 “혼란스러워” 하는지 나타내는 척도</p>
<blockquote>
<ul>
<li>PPL이 낮으면 모델이 거의 완벽하게 다음 결과를 예측</li>
<li>PPL이 높으면 모델이 예측에 많은 혼란을 겪고, 가능한 결과 후보가 많음</li>
</ul>
</blockquote>
</blockquote>
<h2 id="32-introducing-post-pruning-adaptation-ppa">3.2 Introducing Post-Pruning Adaptation (PPA)</h2>
<blockquote>
<p>Pruning 후, student 모델을 fine-tuning하거나 LoRA+distillation을 적용해 성능을 회복</p>
</blockquote>
<h3 id="321-bonsai-is-competitive-with-semi-structured-pruning-methods">3.2.1 Bonsai is competitive with semi-structured pruning methods</h3>
<p>Semi-structured Wanda (2:4)와 비교</p>
<ul>
<li>대상 : LLaMA-2-7B</li>
<li>Sparsity : 50%</li>
<li>Dataset : Wikitext-2
<img src="https://velog.velcdn.com/images/min-soku/post/b9681d2d-89ae-4f45-9ec5-329d48b193ef/image.png" alt="">
Wanda는 PPA 시 속도가 크게 저하되지만, Bonsai는 속도를 유지하면서 PPL(Perplexity)<img src="https://velog.velcdn.com/images/min-soku/post/1160bffe-4162-41d5-b6fc-eec665372a52/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/726ca3ce-bdb7-4f59-a383-5dd1f13bd789/image.png" alt="">
도 유사수준으로 회복</li>
</ul>
<h3 id="322-bonsai-is-competitive-with-gradient-based-structured-pruning">3.2.2 Bonsai is competitive with gradient based structured pruning</h3>
<p>Gradient-based Structured Pruning 비교</p>
<ul>
<li>대상 : LLaMA-1-7B</li>
<li>Sparsity : 50%</li>
<li>Dataset : Wikitext-2 + BoolQ, HellaSwag, WinoGrande, ARC-e, ARC-c
<img src="https://velog.velcdn.com/images/min-soku/post/8c021374-4d76-4a0e-835e-3c571efb5b83/image.png" alt=""><blockquote>
<p>gradient 없이 forward만으로도, 기존 gradient-based 기법들을 능가</p>
</blockquote>
</li>
</ul>
<h3 id="323-bonsai-can-produce-compressed-models-with-strong-zero-shot-abilities">3.2.3 Bonsai can produce compressed models with strong zero-shot abilities</h3>
<p>Zero-shot 성능을 PPA가 아닌 fine-tuning으로 비교</p>
<ul>
<li>대상 : Phi-2 (3B)</li>
<li>Sparsity : 35%</li>
<li>Dataset : C4 100K<img src="https://velog.velcdn.com/images/min-soku/post/e5999eed-c3b4-4305-9fe4-e4cba0099926/image.png" alt=""><blockquote>
<p>fine-tuning을 통해, 작지만 경쟁력 있는 제로-/few-shot 성능 확보</p>
</blockquote>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[A Survey on Deep Neural Network Pruning:  Taxonomy, Comparison, Analysis, and  Recommendations]]></title>
            <link>https://velog.io/@min-soku/A-Survey-on-Deep-Neural-Network-Pruning-Taxonomy-Comparison-Analysis-and-Recommendations</link>
            <guid>https://velog.io/@min-soku/A-Survey-on-Deep-Neural-Network-Pruning-Taxonomy-Comparison-Analysis-and-Recommendations</guid>
            <pubDate>Wed, 09 Apr 2025 18:30:55 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>최근의 LLM은 막대한 모델 크기를 가지며, 이로 인해 상당한 계산 비용과 저장 공간을 필요로 한다.</p>
<p>모델을 리소스가 제한된 환경에서 배포하고 추론 속도를 높이기 위해 Model compression의 한 방법으로서 Pruning 기법을 탐구하였다.</p>
<blockquote>
<p>2020-2024까지 3000편 이상의 Pruning 관련 논문이 나왔으나, Pruning의 최신 동향을 포괄적으로 Review하는 논문은 부족하다.</p>
</blockquote>
<p>이 문제를 해결하기 위해 <strong>이 논문에서는 Pruning에 관한 기존 연구들을 종합적으로 정리하고, 비교 분석한 결과를 제공</strong>하고자 한다.</p>
<p>논문은 Pruning 방법은 4가지 주요 관점에서 분류하여 비교하였다.</p>
<ol>
<li>보편적/특정 가속</li>
<li>Pruning 시점</li>
<li>Pruning 방법</li>
<li>다른 Compression 방법과의 융합</li>
</ol>
<p>그런 다음, Pruning을 위한 8가지의 대비되는 설정에 대한 비교 분석을 제공한다.</p>
<ol>
<li>Structured vs Unstructured</li>
<li>One-shot vs Iterative</li>
<li>Data-free vs Data driven</li>
<li>Initialized vs Pre-trained</li>
</ol>
<p>연구 결과를 바탕으로, 각 상황에 맞는 Pruning 기법 선택에 대한 기반을 마련한다.</p>
<h1 id="1-introduction">1. Introduction</h1>
<p><img src="https://velog.velcdn.com/images/min-soku/post/4c29d570-bcc0-47cf-831a-64167ac14a26/image.png" alt=""></p>
<p>지난 수년간, DNN(Deep Nueral Network)은 다양한 분야와 응용에서 놀라운 성과를 거두고 있지만, 그 성능은 모델의 파라미터 수와 계산 비용에 크게 의존한다.</p>
<blockquote>
<ul>
<li>ResNet-50 : 2,300만개</li>
<li>BERTBASE : 1억 1000만개</li>
<li>GPT-3 : 1,750억개</li>
<li>GPT-4 :  이들보다 더 많은 파라미터 수를 포함</li>
</ul>
</blockquote>
<p>이처럼 신경망의 크기가 계속해서 커지는 추세는 앞으로도 지속될 것으로 예상되는데, DNN의 파라미터 수가 많아질수록 입력 데이터를 처리하는 데 필요한 계산 비용과 저장 공간 또한 증가하게 된다.</p>
<p>이로 인해, 높은 Training 및 Inference 비용은 리소스가 제한된 장치에 모델을 배포하는 데 큰 도전 과제가 된다.</p>
<blockquote>
<p>자율 주행같은 분야에서는 같은 높은 정확도, 효율적인 자원 사용, 빠른 실시간 응답이 요구된다</p>
</blockquote>
<p>최근 LLM의 인기로 인해, 신경망의 크기를 Compression하는 연구에 대한 관심을 증가하고 있으며, 연구자들은 <strong>다양한 Compression 기법 중에서도 Pruning이 원래의 DNN과 비교하여 유사하거나 더 나은 성능을 유지하면서 Inference 시 메모리 공간과 계산 비용을 절약할 수 있는 효과적인 방법임을 입증</strong>하였다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/694d3c11-029f-4558-bf06-5c1557959f99/image.png" alt=""></p>
<blockquote>
<p>2015년 이후 Pruning 관련 논문의 수가 현저하게 증가하여 전체 Model compression 논문의 절반 이상을 차지하고 있다.</p>
</blockquote>
</blockquote>
<p>Pruning 연구는 (Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding)논문의 등장 이후 Pruning의 잠재력이 인식되기 시작하면서 많은 관심을 받게 되었다.</p>
<blockquote>
<ul>
<li>Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding(Song Han, ICLR, 2016)</li>
</ul>
<blockquote>
<p><a href="https://arxiv.org/abs/1510.00149">https://arxiv.org/abs/1510.00149</a></p>
</blockquote>
<p>Pruning(Magnitude) -&gt; Quantization(2bit) -&gt; Huffman coding 순서의 Compression 단계를 제안</p>
</blockquote>
<p>그러나, 기존의 여러 리뷰 논문들은 Pruning, Quantization, Distillation과 같은 Compression 기법을 함께 다루면서 Pruning 자체에 대해서는 간략하게만 설명하는 경우가 많다.</p>
<blockquote>
<p>예를 들어, Structured pruning에만 집중하여 Unstructured, Semi-structured pruning에 대해서는 언급하지 않는다.</p>
</blockquote>
<p>본 논문에서는 DNN pruning에 대한 포괄적인 리뷰를 제공하는 것을 목표로 하여, 대표적인 pruning 기법들을 리뷰하고, pruning 기법들이 어떻게 작동하는지를 분석하여 다양한 요구 사항에 맞게 적절한 pruning 기법을 선택을 할 수 있도록 제시한다.</p>
<blockquote>
<ol>
<li>포괄적 리뷰 : DNN pruning 기법에 대한 가장 포괄적인 리뷰를 제공</li>
</ol>
<ol start="2">
<li>비교 실험 및 분석 : pruning의 여덟 가지의 대비되는 설정에 대한 비교 및 분석 실험을 수행하고, 결과에 대한 논의를 제공</li>
</ol>
<ol start="3">
<li>풍부한 자료 수집 : 다양한 pruning 응용 분야를 요약하고, 각 응용 분야에 대한 벤치마크 데이터셋, 네트워크 및 평가 기준을 제공하여 여러가지 Neural network pruning 기법을 활용할 수 있도록 지원</li>
</ol>
<ol start="4">
<li>권고사항 및 향후 연구 방향 : 다양한 요구 사항에 적한한 pruning 기법 선택에 관한 유용하 권고안을 제시하고, 미래 연구 방향을 전망한다.</li>
</ol>
</blockquote>
<h1 id="2-taxonomy">2. Taxonomy</h1>
<p>DNN을 pruning할 때 고려해야 할 세 가지 핵심 질문이 있다.</p>
<p><strong>1. 신경망 pruning을 통해 Universal한 acceleration(보편적 가속)을 달성할 것인가, 아니면 Specific한 acceleration(특정 가속)을 달성할 것인가?</strong></p>
<blockquote>
<p>Universal acceleration은 특수한 HW/SW의 지원 없이 독립적으로 동작하는 반면, Specific acceleration 특수한 HW/SW에 의존한다.</p>
</blockquote>
<p>Acceleration이 특정 HW/SW에 의존하는지 여부와 관련된다.
일반적으로 pruning은 Structured, Unstructured, Semi-structured로 나뉜다.</p>
<p>Structured pruning만이 특정 HW/SW 없이도 보편적인 신경망 accelaration을 달성할 수 있다.</p>
<p>반면, Unstructured, Semi-structured pruning은 특수한 HW/SW의 지원이 필요로 한다.</p>
<p>Pruning의 주된 목표는 Acceleration이기에 이 질문은 가장 근본적이면서 가장 관심을 많이 갖는 측면을 다룬다.</p>
<p><strong>2. 신경망을 언제 pruning할 것인가?</strong></p>
<blockquote>
<p>정적 Pruning를 수행할 때 Training 전(PBT, Pruning Before Training), Training 중(PDT, Pruning During Training), Training 후(PAT, Pruning After Training) 중에 어느 시점에 pruning을 적용할 것인지, 혹은 Dynamic pruning을 수행할 것인지 관건이다.</p>
</blockquote>
<p>정적 pruning을 수행할 때, pruning과 신경망 training 간 배치를 어떻게 할 것인가 하는 점이다.</p>
<p>즉, 신경망은 Trainig 전/중/후 중 언제 pruning을 적용할 것인지를 결정해야 한다.</p>
<p>동적 pruning의 경우, 각 입력 데이터에 대해 런타임에 pruning이 수행된다.</p>
<p><strong>3. 특정 기준(Criteria)을 기반으로 pruning할 것인가, 아니면 Learn to prune 방식을 적용할 것인가?</strong></p>
<p>신경망을 특정 기준으로 기반으로 pruning할 것인지, 혹은 training을 통해 pruning을 수행할 것인지에 대한 것이다.</p>
<p>특정 기준이란, 각 가중치의 중요도를 측정하는 score 함수를 말한다.
일반적으로 가장 많이 사용되는 기준으로는 Magnitude(가중치 크기), Norm, Loss change(손실 변화율) 등이 있다.</p>
<p>반면에, Sparsity regularization training이나, Dynamic sparse training 등을 통해 training 방식으로 pruning을 수행하는 방법도 존재한다.</p>
<blockquote>
<p>신경망이 자체적으로 어떤 가중치를 제거해야 하는지를 학습하도록 하는 방식</p>
</blockquote>
<p>기준을 기반으로 pruning을 하든, Training을 기반으로 pruning을 하든 궁극적으로는 어떤 가중치를 제거해야 할지를 결정하는 것이 pruning의 목적이다.</p>
<h1 id="3-specific-or-universal-speedup">3. Specific or universal speedup</h1>
<p>Unstructured, Semi-structured, Structured pruning에 대해 다룬다</p>
<h2 id="31-unstructured-pruning">3.1 Unstructured pruning</h2>
<p>Unstructured pruning은 가중치 단위(Weight-wise)pruning이라고도 불리며, 가장 미세한 수준의 pruning이다.</p>
<p>가중치 $W = {w_0,w_1,..,w_K}$와 입력 $x_i$, 출력 $y_i$쌍으로 구성된 데이터셋 $D={(x_i,y_i)}^N_{i=1}$, 그리고 $K$보다 작은 0이 아닌 가중치의 총 개수 $k$가 주어졌을 때, Unstructured pruning은 다음과 같이 표현할 수 있다.</p>
<blockquote>
<blockquote>
<p>$\min_{W}L(W;D)=\min_{W}\frac{1}{N} \sum_{i=1}^N \ell\bigl(W;,(x_i, y_i)\bigr)$
$,\text{subject to}\quad |W|_0 ,\leq, k.$</p>
</blockquote>
<ul>
<li>$\frac{1}{N}\sum_{i=1}^N \ell\bigl(W;,(x_i, y_i)\bigr)$ : 데이터셋 $D$에 대해 가중치 $W$의 평균  Loss
($\ell\bigl(W;,(x_i, y_i)\bigr)$은 개별 샘플에 대해 모델이 처리한 예측값과 $y_i$간의 loss를 구하는 loss function)<blockquote>
<p>1~$N$번째까지의 샘플 데이터에 대한 loss 평균</p>
</blockquote>
</li>
</ul>
<ul>
<li>$\min_{W}L(W;D)$ : 데이터셋 $D$를 기반으로 전체 가중치 $W$에 대해 전체 손실 $L$을 최소화하는 문제</li>
<li>$\text{subject to}\quad |W|_0 ,\leq, k.$ : 가중치 $W$에 포함된 0이 아닌 가중치의 수가 최대 $k$개 이하여야 한다는 sparsity를 의미</li>
</ul>
</blockquote>
<p>하지만, <strong>실제 사용에서, 소형, 중형 모델의 경우 Unstructured pruning은 보통 가중치를 직접 0으로 설정하지 않고, 해당 가중치와 대응되는 Mask $M$을 0으로 만든다.</strong>
각 가중치에 Binary mask를 적용하는 것으로 간주한다.</p>
<blockquote>
<blockquote>
<p>$
min_{w,m}L(W \odot M;,D) 
=min_{W,M}\frac{1}{N} \sum_{i=1}^N \ell\bigl(W \odot M;,(x_i, y_i)\bigr)$
$,\text{subject to}\quad |M|_0 ,\leq, k.$</p>
</blockquote>
<ul>
<li>$M$ : 가중치 $W$에 직접 0을 할당하는 대신, 마스크 $M$을 도입한다.
$\odot$기호는 Hadamard 곱을 의미하며, $W \odot M$은 개별 가중치 $w$에 대응하는 마스크 행렬의 원소 $m$을 곱한 결과를 나타낸다.<blockquote>
<p>$m=0$이면 대응하는 해당 가중치가 제거됨
$m=1$이면 대응하는 해당 가중치 유지</p>
</blockquote>
</li>
</ul>
<ul>
<li>$\text{subject to}\quad |M|_0 ,\leq, k.$ : 마스크 $M$에서 0이 아닌 원소의 수가 최대 $k$개 이하여야 한다는 조건으로, 전체적으로 $k$개의 가중치만이 선택되어 활성화된다.
<img src="https://velog.velcdn.com/images/min-soku/post/c4f223c6-7650-40c0-9b72-7988713546ac/image.png" alt=""></li>
</ul>
</blockquote>
<p>LLM과 같은 대형 모델은 파라미터가 너무 많아 일일이 Mask를 관리하기 어렵기 때문에, pruning할 가중치를 바로 0으로 만드는 방법을 흔히 사용한다.</p>
<p>Unstructured pruning은 신경망 내 어느 위치의 가중치든 제거할 수 있기에 높은 유연성을 지니고 sparsity가 높아도 정확도를 잘 유지할 수 있는 경우가 많지만, 
<strong>제거된 가중치들이 불규칙하게 분포하기 때문에 실제 Acceleration을 위한 특수한 SW/HW의 지원을 요구</strong>하게 된다.
따라서, Unstructured pruning을 Specific speedup 방식으로 분류한다.</p>
<h2 id="32-structured-pruning">3.2 Structured pruning</h2>
<p>Pruning 비율과 신경망 $S={s_1,s_2,..,s_L}$이 주어졌을 때, $s_i$는 $i$번째 Layer의 채널, 필터, 뉴런, 어텐션 헤드와 같은 모듈의 집합이 될 수 있다.</p>
<p>Structured pruning은 각 Layer에서 모듈의 집합 $s_i$의 하위 집합인 $s&#39;_i⊆s_i$들을 Pruning 비율에 맞게 선택하여, 전체적으로 $S&#39;={s&#39;_1,s&#39;_2,...,s&#39;_L}$를 구성한다.
<img src="https://velog.velcdn.com/images/min-soku/post/c799803d-d743-452d-bc15-320a3710c1d5/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/626d22db-85b7-4cbf-a4e8-875a2f78e35f/image.png" alt=""></p>
<p>Structured pruning은 특정 구조 단위로 제거하기 때문에, pruning 후에도 모델의 구조가 규칙적이므로 별도의 HW/SW를 필요로 하지 않고, 직접적으로 모델의 추론 속도를 높이고 크기를 줄일 수 있다.</p>
<h2 id="33-semi-structured-pruning">3.3 Semi-structured pruning</h2>
<p>Structured pruning의 유연성을 높이되, 구조적인 규칙성을 유지하면서 pruning 비율이 높을 때 발생하는 Accuracy 저하를 완화하기 위해, Semi-structured pruning을 도입하였다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/fc881a04-deb1-40a0-b7ef-2261ba6d4390/image.png" alt=""></p>
<blockquote>
<ul>
<li>Pattern-wise pruning
모듈의 내부를 일정 규칙에 따라 나누고, 그 중 일부를 pruning하는 방법으로, 완전히 Structured하거나 Unstructured하지 않으면서, 규칙성을 지닌 Sparsity를 확보할 수 있다.</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>2:4 pruning
그림에 나타난 행렬 [1.23, 0, 0, 0.42],[0, 0, 1.08, 0] 처럼 연속된 4개의 값 중 최소 2개를 0으로 설정해야 한다는 규칙이다.
이 규칙을 따르면 각 행렬 내 sparse한 pattern이 생기고, 해당 pattern을 HW/SW가 효율적으로 처리할 수 있다.</li>
</ul>
</blockquote>
<p>Semi-structured pruning은 규칙성이 존재하기 때문에, 반드시 HW지원이 필요한 것은 아니지만 규칙적인 Pattern의 장점을 활용하기 위해 HW/SW의 지원이 있으면 연산 속도가 더욱 향상된다.</p>
</blockquote>
<h1 id="4-when-to-prune">4. When to prune</h1>
<p>정적 pruning에 대한 세 가지 Pipeline과 동적 pruning을 설명한다.</p>
<h2 id="41-pruning-before-training">4.1 Pruning Before Training</h2>
<p>학습 전 Pruning은 무작위로 초기화된 가중치를 활용하여 신경망을 pruning하는 기법들로 구성된다.</p>
<blockquote>
<p>PBT의 주요 목적은 Pre-training과정을 제거하는 것이다.</p>
</blockquote>
<p>신경망을 $f(x;W_0)$이라 정의할 때, $M$은 초기 가중치 $W_0$을 pruning하기 위한 마스크이다.</p>
<p><strong>PBT에서는 학습 전 초기 가중치에 대해 pruning 후 신경망 $f(x;W_0 \odot M&#39;)$은 $t$의 Epoch의 training을 거쳐 $f(x;W_t \odot M&#39;)$로 수렴하게 된다</strong>
($M&#39;$은 pruning을 적용시킨 Mask)</p>
<blockquote>
<p>PBT 방식은 보통 두 단계로 진행된다.
<img src="https://velog.velcdn.com/images/min-soku/post/f80e6ff5-f2d1-4385-93c7-667ae9550b3b/image.png" alt=""></p>
<blockquote>
<p>1단계 : 학습되지 않은(무작위로 초기화된) Dense한 신경망을 특정 기준에 따라 pruning 한다.</p>
</blockquote>
<blockquote>
<p>2단계 : 1단계에서 생성된 특정한 sparse한 구조(패턴)가 고정된 채로 신경망을 높은 성능이 나올 때까지 Training하여 수렴시킨다.</p>
</blockquote>
</blockquote>
<p>학습되지 않은 Dense한 신경망을 pruning하는 방법들</p>
<p><strong>1. Single-shot Network Pruning (SNIP)</strong></p>
<blockquote>
<p>SNIP는 아직 학습되지 않은, 무작위로 초기화된 신경망에서, 각 가중치를 제거했을 때 Loss에 미치는 영향을 계산하여 그 영향이 가장 작은 가중치들을 pruning하는 방식이다.</p>
</blockquote>
<p>실험 결과, Pruning이 신경망이 입력의 변화를 균일하게 전달하는 특성인 동적 Dynamical isometry에 손상을 줄 수 있음을 발견하여, 데이터에 의존하지 않는 Orthogonal initialization 방법을 제안하였다.</p>
<p><strong>2. Gradient Signal Preservation (GraSP)</strong></p>
<blockquote>
<p>Pruning 후 Gradient의 크기를 측정하여, Training 시 Gradient flow에 큰 영향을 미치지 않는 가중치를 pruning한다.</p>
</blockquote>
<p>학습 과정에서 중요한 정보가 손실되지 않도록 하는 방법이다.</p>
<p><strong>3. Iterative Synaptic Flow Pruning (SynFlow)</strong></p>
<blockquote>
<p>데이터 없이, Training 전에 단순히 초기화된 신경망 내의 각 layer 간 상호 작용을 고려하면서 점진적으로 pruning하여 효과적인 서브 네트워크를 식별한다.</p>
<p>한 Layer에서 모든 가중치가 pruning되어 해당 Layer가 완전히 사라지는 상황을 방지하면서, 점진적인 pruning을 통해 전체 신경망의 구조를 안정화시키는 데 기여한다.</p>
</blockquote>
<hr>
<p>일부 연구에서는 개별 가중치에 대한 세밀한 평가 지표보다는, 각 Layer별로 정해진 sparsity 비율을 유지하는 것이 모델의 성능에 더 중요할 수 있다고 주장한다.</p>
<p><strong>1. Smart-ratio</strong></p>
<blockquote>
<p>특정 데이터를 사용하지 않고, 단순히 각 Layer에서 일정 비율의 가중치만 남기도록 pruning한다.</p>
</blockquote>
<p><strong>2. Edge-popup</strong></p>
<blockquote>
<p>Pre-training없이 초기화된 신경망에서도 충분히 Width, Depth을 늘리면 학습된 신경망과 유사한 성능을 내는 서브 네트워크가 존재할 수 있기에, 무작위 초기화된 상태에서 효과적인 부분을 선택하는 방법을 제시</p>
</blockquote>
<p><strong>3. Dual Lottery Ticket Hypothesis</strong></p>
<blockquote>
<p>서브네트워크와 가중치를 모두 무작위로 선택한 후, 고정된 Sparse한 구조에서 남은 가중치들을 점진적으로 학습</p>
</blockquote>
<p>그러나, 같은 pruning 비율을 적용했을 때, Training 중/후에 pruning을 수행한 신경망이 Training 전에 pruning한 신경망보다 성능이 우수하다는 사실을 발견하였다.</p>
<h2 id="42-pruning-during-training">4.2 Pruning During Training</h2>
<p>Training 중 pruning은 보통 무작위로 초기화된 dense한 신경망 $f(x;W_0)$을 모델로 받아, Training 과정에서 가중치 $W$와 마스크 $M$을 함께 업데이트하면서 신경망을 Training하고 pruning을 수행한다.</p>
<blockquote>
<p>이러한 동적 접근은 Training 중 마스크를 변경함으로써 $t$번의 Epoch 후에 pruning된 서브 네트워크 $f(x;W_t \odot M_t)$을 생성한다.</p>
</blockquote>
<p>많은 PDT 기법들은 추가적인 train이나 fine-tuning없이 서브네트워크를 직접 얻는다. 
<img src="https://velog.velcdn.com/images/min-soku/post/41eddb07-04e7-4fcd-a026-8952d6283771/image.png" alt="">
PDT는 PBT,PAT에 비해 복잡한 동적 프로세스를 갖기 때문에 상대적으로 연구가 덜 이루어져 왔다.</p>
<p>기존의 선행 연구들을 네 가지 범주로 요약한다.</p>
<ol>
<li>Sparsity Regularization based Methods</li>
<li>Dynamic Sparse Training based Methods</li>
<li>Score-based Methods</li>
<li>Differentiable Pruning based methods</li>
</ol>
<h3 id="421-sparsity-regularization-based-methods">4.2.1 Sparsity Regularization based Methods</h3>
<p>Sparsity Regularization은 Dense한 신경망에서 시작하여, Loss function에 sparse 제약(페널티항)을 부과하고 Training 중에 일부 가중치나 해당 가중치의 마스크를 0으로 만들어 낸다.</p>
<blockquote>
<p>Training 과정에서 자연스럽게 불필요한 가중치들을 제거하여 모델을 압축하고, 효율적인 Sparse 신경망을 만드는 것을 목표로 한다.</p>
</blockquote>
<p>하지만, 가중치에 정규화된 파라미터를 곱해 가중치의 기여도를 0에 가깝게 만드는 방법이므로, 메모리 측면에서는 단순히 0에 수렴하는 파라미터를 곱하여 가중치값을 줄이기 때문에 전체 신경망의 파라미터 수나 메모리 사용량을 직접적으로 줄이지는 않는다.
<strong>1. Structured Sparsity Learning (SSL)</strong></p>
<blockquote>
<p>Group LASSO 정규화를 사용해 전체 신경망에서 특정 모듈 단위의 가중치들을 동시에 0으로 만드는 방법을 제안</p>
</blockquote>
<p>신경망의 구조적인 Sparsity를 학습하게 하여 효율적인 모델 압축 효과를 기대할 수 있지만, 희소성 정규화 항의 Gradient를 모든 가중치에 대해 계산해야 하므로 계산 비용이 많다는 단점이 존재한다.</p>
<blockquote>
<p>모델 학습 시 Loss function은 일반 데이터에 대한 loss항과 정규화 항(페널티 항)으로 구성된다.</p>
<blockquote>
<p>$L_{total}=L_{data}+ \lambda L_{regularization}$</p>
</blockquote>
<p>정규화 항은 가중치 값들이 너무 크지 않게 하거나 희소성을 유도하는 역할을 한다.
($L_{total}$이 감소하는 방향으로 업데이트 -&gt; 정규화항의 불필요한 가중치가 0에 수렴해짐)</p>
<p>정규화 항도 전체 Loss function에 포함된 항목이므로 
<strong>학습 과정에서 경사 하강법을 사용하여 Loss function의 미분값을 계산해, 가중치를 업데이트하기 위해서는 모델에 있는 모들 가중치에 대해 정규화 항의 기울기(기여도)를 계산해야 한다.</strong></p>
</blockquote>
<p><strong>2. MorphNet</strong>
Batch normalization layer의 파라미터를 재활용하여 그 파라미터에 희소성 정규화를 적용한다.</p>
<blockquote>
<p>Batch normalization layer의 파라미터는 각 채널의 출력에 곱해져 그 채널이 얼마나 중요한지 결정하는 척도를 나타낸다.</p>
</blockquote>
<p>이 파라미터에 희소성 정규화를 적용하면 불필요한 채널의 파라미터를 0에 가깝게 만들어 모델 구조를 복잡하지 않으면서도 pruning 효과를 얻을 수 있다.</p>
<blockquote>
<p>정규화 항은 가중치 값들이 너무 크지 않게 하거나 희소성을 유도하는 역할을 한다.
($L_{total}$이 감소하는 방향으로 업데이트 -&gt; 정규화항의 불필요한 파라미터가 0에 수렴해짐)</p>
</blockquote>
<p>이를 통해 BN layer가 있는 모델에서는 희소성 학습을 효율적으로 수행할 수 있지만, 일부 신경망에서는 BN layer가 없기 때문에 적용에 한계가 있을 수 있다.</p>
<p><strong>3. Sparse Structure Selection (SSS)</strong></p>
<blockquote>
<p>CNN 내부의 미세 구조에 별도의 scaling factor를 도입하여, 이 scaling factor에 희소성 정규화를 적용하여, 해당 미세 구조의 출력을 0에 가깝게 만듦으로 pruning을 수행한다.</p>
</blockquote>
<p>가중치 자체를 0으로 만드는 것이 아니라, 출력 자체를 0에 가깝게 만들어 성능 손실을 최소화하면서 pruning을 진행할 수 있다.</p>
<blockquote>
<p>정규화 항은 가중치 값들이 너무 크지 않게 하거나 희소성을 유도하는 역할을 한다.
($L_{total}$이 감소하는 방향으로 업데이트 -&gt; 정규화항의 불필요한 Scaling factor가 0에 수렴해짐)</p>
</blockquote>
<p><strong>4. Factorized Convolutional Filter</strong></p>
<blockquote>
<p>Convolution filter마다 하나의 binary 스케일러 값을 할당하여 해당 filter의 출력 기여도를 조절한다. </p>
</blockquote>
<p>filter마다 할당된 스케일러에 희소성 정규화를 적용하면, 불필요하거나 중요도가 낮은 filter의 스케일러 값이 0에 가깝게 만들어지며 해당 filter의 출력이 실질적으로 pruning되는 효과를 준다.</p>
<p>Convolution filter의 가중치와 함께, 각 filter에 할당된 binary scalar도 전체 신경망의 Loss를 최소화하는 방향으로 학습한다.</p>
<h3 id="422-dynamic-sparse-training-based-method">4.2.2 Dynamic Sparse Training based Method</h3>
<p>Dynamic Sparse Training 기반 방법은 Dense한 신경망 대신 무작위로 초기화된 Sparse 네트워크를 사용한다. Training 도중 pruning와 regrow 과정을 반복하여 최적의 sparse한 신경망 구조를 동적으로 탐색한다.</p>
<h4 id="기본-아이디어">기본 아이디어</h4>
<ul>
<li><p><strong>Sparse한 신경망으로 시작한다:</strong><br>완전한 Dense 네트워크 대신 무작위로 sparse 네트워크를 초기 모델로 사용한다.</p>
</li>
<li><p><strong>Pruning와 Regrow를 반복한다:</strong><br>Training 과정에서 중요하지 않은 가중치를 제거(prune)하고, 같은 수의 새로운 가중치를 추가(regrow)한다. 이를 통해 네트워크 구조를 지속적으로 최적화한다.</p>
</li>
</ul>
<blockquote>
<p><strong>기존의 Pruning과의 차이점</strong></p>
<ul>
<li>기존 pruning은 모든 가중치가 있는 Dense한 신경망을 학습한 다음에 필요없는 가중치를 prune한다.</li>
</ul>
<ul>
<li>Dynamic Sparse Training은 처음부터 일부 가중치가 이미 0인 sparse한 네트워크로 학습하며, <strong>학습이 진행되는 동안 계속해서 중요하지 않은 가중치를 pruning을 하고 제거된 가중치 수만큼 새로운 가중치를 regrow시키며, 점점 더 좋은 sparse 구조로 발전한다.</strong></li>
</ul>
</blockquote>
<h4 id="주요-방법-및-예시">주요 방법 및 예시</h4>
<ol>
<li><p><strong>Sparse Evolutionary Training (SET)</strong>  </p>
<ul>
<li>네트워크 내에서 가장 작은 양의 값과 가장 큰 음의 값을 가진 가중치를 제거한다.  </li>
<li>제거된 가중치 대신 무작위로 새 가중치를 추가한다.</li>
</ul>
</li>
<li><p><strong>Dynamic Sparse Reparameterization (DSR)</strong>  </p>
<ul>
<li>고정된 Pruning 비율 대신 동적으로 조절되는 임계값을 사용한다.  </li>
<li>Layer 내부는 물론 Layer 간에도 가중치 재분배를 고려한다.</li>
</ul>
</li>
<li><p><strong>FreeTickets</strong>  </p>
<ul>
<li>FreeTickets는 여러 Sparse 네트워크를 앙상블하여 성능을 개선한다.  </li>
<li>단일 네트워크가 아니라, 다양한 방식으로 얻어진 희소 서브네트워크들을 결합해 더 나은 성능을 낸다.</li>
</ul>
</li>
<li><p><strong>Gradual Pruning with zero-cost Neuroregeneration (GraNet)</strong></p>
<ul>
<li>가중치 크기(절댓값이 작은 가중치) 기준으로 pruning를 하고, 기울기(gradient)가 큰 위치에 새로운 가중치를 regrow시킨다</li>
</ul>
</li>
</ol>
<h4 id="그래디언트-흐름의-개선">그래디언트 흐름의 개선</h4>
<ul>
<li>초기 sparse 네트워크에서는 그래디언트 흐름이 원활하지 않다.  </li>
<li>동적 pruning와 regrow 과정을 반복함으로써 학습이 진행될수록 그래디언트 흐름이 개선된다.</li>
</ul>
<blockquote>
<p>요약</p>
</blockquote>
<ul>
<li><strong>sparse 네트워크로 시작한다</strong><br>Dense 네트워크 대신 무작위 sparse 네트워크를 초기 모델로 사용한다.</li>
<li><strong>동적 pruning–regrow 과정을 반복한다</strong><br>학습 도중 중요하지 않은 가중치를 제거하고, 동일 수의 가중치를 재성장시켜 sparse 구조를 최적화한다.</li>
<li><strong>그래디언트 흐름을 개선한다</strong><br>동적 과정을 통해 초기 희소 네트워크의 한계를 극복하고 모델의 성능을 향상시킨다.</li>
</ul>
<hr>
<p>이와 같이 Dynamic Sparse Training based Method은 학습 과정 중에 모델의 희소 구조를 동적으로 최적화하여 최종 성능과 계산 효율성을 동시에 향상시키도록 설계된다.</p>
<h3 id="423-score-based-methods">4.2.3 Score-based Methods</h3>
<p>Training 도중, 모델의 각 구성 요소(예, 필터 혹은 채널)의 중요도를 점수로 산출하여, 중요도가 낮은 요소들을 제거한다. 이때 산출된 점수를 기준으로 Pruning을 진행한다.</p>
<h4 id="주요-아이디어">주요 아이디어</h4>
<ul>
<li><p><strong>중요도 점수를 산출한다:</strong><br>각 필터나 채널의 중요도를 $(l_2)$ 노름, 기하학적 중앙값, 스케일링 팩터 등으로 계산한다.</p>
</li>
<li><p><strong>낮은 점수를 가진 요소를 제거한다:</strong><br>사전에 정해진 pruning 비율에 따라, 점수가 낮은 필터나 채널을 0으로 만들어 제거한다.</p>
</li>
<li><p><strong>지속적인 학습 중 복원한다:</strong><br>제거된 필터나 채널은 이후 역전파 과정에서 업데이트되어 어느 정도 회복될 수 있도록 한다.</p>
</li>
</ul>
<h4 id="주요-방법-예시">주요 방법 예시</h4>
<ol>
<li><p><strong>Soft Filter Pruning (SFP)</strong>  </p>
<ul>
<li>필터의 $(l_2)$ 노름을 이용해 중요도를 산출한다.  </li>
<li>중요도가 낮은 필터의 가중치를 0으로 설정한다.  </li>
<li>제거된 필터는 한 Epoch 내에서 0으로 고정되지 않고, 이후 학습 중에 업데이트될 수 있다.</li>
</ul>
</li>
<li><p><strong>Filter Pruning via Geometric Median (FPGM)</strong>  </p>
<ul>
<li><p>동일 레이어 내의 필터들 중 기하학적 중앙값에 가까운 필터를 식별한다.</p>
<blockquote>
<ul>
<li>동일 레이어 내의 모든 필터를 하나의 벡터(예: 필터의 가중치 값들이 하나의 벡터로 표현됨)라고 생각</li>
<li>필터 벡터들의 기하학적 중앙값은 모든 필터로부터 평균적으로 가장 가까운 위치에 있는 &quot;대표&quot; 벡터</li>
</ul>
</blockquote>
</li>
<li><p>중앙값에 가까운 필터를 제거하여 중복되는 정보를 줄인다.</p>
<blockquote>
<ul>
<li>동일 레이어 내에서 여러 필터가 유사한 특징을 추출한다면, 이들 중 중앙값과 거의 유사한(거리상으로 가장 가까운) 필터는 다른 필터들과 중복된 역할을 하는 것으로 판단</li>
<li>중앙값에 가까운 필터는 이미 다른 필터들이 공통적으로 가지고 있는 특성을 대표하기 때문에, 제거해도 전체적으로 중요한 정보가 크게 손실되지 않는다</li>
</ul>
</blockquote>
</li>
</ul>
</li>
<li><p><strong>Network Slimming</strong>  </p>
<ul>
<li>각 채널(또는 필터)에 스케일링 팩터를 도입한다.  </li>
<li>스케일링 팩터에 희소성 정규화를 적용하여 값이 작아지도록 유도한다.  </li>
<li>스케일링 팩터의 값을 해당 채널의 중요도로 사용하고, 중요도가 낮은 채널은 출력에 기여하지 않게 한다.</li>
</ul>
</li>
</ol>
<blockquote>
<p>전체적인 설명</p>
</blockquote>
<ul>
<li>모델은 학습 도중 각 구성 요소의 중요도를 정량적으로 평가한다.  </li>
<li>평가된 점수에 따라, 미리 정해진 pruning 비율에 맞춰 중요도가 낮은 요소를 제거한다.  </li>
<li>제거된 요소는 학습 과정에서 다시 업데이트되어, 가지치기로 인한 성능 저하를 최소화한다.  </li>
<li>이러한 점수 기반 방법은 pruning을 위한 기준을 명확하게 하고, 불필요한 구성 요소를 효과적으로 제거하여 모델 압축과 경량화를 동시에 달성한다.</li>
</ul>
<hr>
<p>이와 같이, 점수 기반 방법은 학습 중 각 구성 요소의 기여도를 점수로 평가하고, 그 점수에 따라 가지치기를 진행하여 최종 모델의 효율성과 성능을 최적화한다.</p>
<h3 id="424-differentiable-pruning-based-methods">4.2.4 Differentiable Pruning based methods</h3>
<p>미분 가능 pruning 기반 방법은 전통적인 pruning가 0 또는 1과 같이 이진적으로 결정되는 반면, pruning 결정을 연속적인 값(soft mask)으로 표현하여, 경사 하강법과 같은 미분 기반 최적화 기법으로 End-to-end 학습할 수 있도록 한다.</p>
<h4 id="동작-원리">동작 원리</h4>
<ul>
<li><p><strong>소프트 마스크 사용:</strong><br>pruning 결정을 0 또는 1처럼 단정짓지 않고, 0과 1 사이의 연속적인 값으로 표현한다. 이를 통해 pruning 비율이나 채널 유지 확률 등을 미분 가능한 형태로 모델링한다.</p>
</li>
<li><p><strong>연속적 최적화:</strong><br>소프트 마스크에 대한 손실 항(예: 희소성 정규화 항)을 전체 손실 함수에 포함시켜, 역전파로 해당 항의 기울기를 계산하고, 마스크 값과 가중치를 동시에 업데이트한다.</p>
</li>
<li><p><strong>모델 통합 최적화:</strong><br>pruning 결정을 모델의 다른 파라미터와 함께 한 번에 최적화하므로, 데이터 손실과 압축 효과(희소성)가 동시에 고려된다.</p>
</li>
</ul>
<h4 id="주요-구현-기법">주요 구현 기법</h4>
<ol>
<li><p><strong>Differentiable Sparsity Allocation (DSA)</strong>  </p>
<ul>
<li>각 레이어별 pruning 비율을 미분 가능하게 설정한다.  </li>
<li>이 비율에 따라 확률 분포에서 소프트 마스크를 샘플링하여, pruning 결정을 부드럽게 적용한다.  </li>
<li>산출된 기울기를 통해 레이어별 민감도를 평가하며, pruning 비율을 최적화한다.</li>
</ul>
</li>
<li><p><strong>미분 가능 마코프 프로세스 기반 방법</strong>  </p>
<ul>
<li>각 채널을 하나의 상태(state)로 보고, 이전 채널의 유지 여부에 따라 상태 전이를 구성하여 채널의 유지 확률을 결정한다.  </li>
<li>이 과정은 미분 가능한 형태로 설계되어, 학습 도중 채널 유지 확률을 최적화한다.</li>
</ul>
</li>
<li><p><strong>추가 파라미터 없는 소프트 마스크 생성 방식</strong>  </p>
<ul>
<li>별도의 추가 학습 파라미터를 도입하지 않고, 네트워크 내부에서 바로 0과 1 사이의 연속적인 값을 가지는 소프트 마스크를 생성하여 pruning을 수행한다.  </li>
<li>이 방식은 CNN과 트랜스포머 모델 모두에 적용 가능하며, 학습 과정 중 자연스럽게 업데이트된다.</li>
</ul>
</li>
</ol>
<h4 id="장점-및-효과">장점 및 효과</h4>
<ul>
<li><p><strong>End-to-end 학습 가능:</strong><br>pruning 결정과 관련된 모든 변수(예: 마스크와 가중치)가 하나의 손실 함수로 통합되어 함께 최적화된다.</p>
</li>
<li><p><strong>유연한 pruning 결정:</strong><br>소프트 마스크를 사용함으로써, 중요한 부분은 유지하고 덜 중요한 부분은 점진적으로 제거하는 방향으로 학습이 진행된다.</p>
</li>
<li><p><strong>모델 압축과 성능 최적화 동시 달성:</strong><br>데이터 손실 최소화와 희소성(모델 압축) 효과를 동시에 고려하여, 불필요한 파라미터를 줄이면서도 모델 성능의 저하를 최소화한다.</p>
</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong>
미분 가능 prunign 기반 방법은 가지치기 결정을 단순히 0 또는 1과 같은 이진적 선택이 아니라, 부드럽게(soft하게) 결정함으로써, 전체 모델 학습 과정에 자연스럽게 통합한다. 이를 통해 모델은 불필요한 파라미터를 줄이면서, 성능을 유지하거나 향상시키는 방향으로 최적화된다.</p>
</blockquote>
<h2 id="43-pruning-after-training">4.3 Pruning After Training</h2>
<p>PAT는 Dense 네트워크를 먼저 학습한 후, 불필요한 가중치나 구조를 제거하는 방식이다.</p>
<h4 id="주요-과정">주요 과정</h4>
<ol>
<li><p><strong>사전 학습(Pre-train)</strong>  </p>
<ul>
<li>무작위로 초기화된 dense 네트워크 $f(x; W_0)$를 학습하여, $f(x; W_t)$로 수렴시킨다.</li>
<li>사전 학습된 모델은 학습 데이터에 대해 좋은 성능을 보인다.</li>
</ul>
</li>
<li><p><strong>가지치기(Prune)</strong>  </p>
<ul>
<li>학습된 네트워크에서 성능에 미치는 영향이 가장 작은 가중치(또는 필터, 뉴런 등)를 선택하여 제거한다.</li>
<li>가지치기 후 생성된 네트워크는 $f(x; W&#39;_t \odot M&#39;)$와 같이 표현된다.  <ul>
<li>여기서 $W&#39;_t$는 pruning 후의 가중치, $M&#39;$는 pruning를 표현하는 마스크이다.</li>
</ul>
</li>
<li>pruning 한 번에 수행할 수도 있고, 여러 번 반복하면서 점진적으로 sparsity를 높인다.</li>
</ul>
</li>
<li><p><strong>재학습 또는 미세 조정(Retrain or Fine-tune)</strong>  </p>
<ul>
<li>pruning 후의 네트워크를 다시 학습하거나 fine-tuning하여, 제거에 따른 성능 저하를 복구한다.</li>
<li>이 과정은 두 가지 방식으로 진행된다.<blockquote>
<ul>
<li>남은 가중치만을 사용하여 처음부터 다시 학습한다<blockquote>
<p>$f(x; W_0 \odot M&#39;&#39;)$  </p>
</blockquote>
</li>
<li>혹은 pruning 후의 모델 $f(x; W_t \odot M&#39;&#39;)$를 fine-tuning한다.</li>
</ul>
</blockquote>
</li>
<li>여기서 $M&#39;&#39;$는 최종 pruning 결과를 나타내는 마스크이다.</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>PAT는 dense 네트워크를 사전 학습한 후, 성능에 영향이 적은 부분을 제거하여 희소 네트워크로 만든다.</li>
<li>제거 후에는 남은 가중치들만을 사용해, 모델을 처음부터 다시 학습하거나 미세 조정하여 최종 성능을 복구한다.</li>
<li>이 과정을 통해 모델의 파라미터 수와 연산량을 줄여 경량화 및 추론 효율을 높인다.</li>
</ul>
<hr>
<p>이와 같이, PAT 방식은 사전 학습된 모델을 기반으로 불필요한 요소를 제거하고, 최종적으로 압축된 모델로 성능을 유지하거나 개선하는 방법이다.</p>
<h3 id="431-lth-and-its-variants">4.3.1 LTH and its Variants</h3>
<ul>
<li><p><strong>LTH는</strong> 사전 학습된(Pre-trained) 모델에서 상대적으로 중요도가 낮은 가중치를 제거(프루닝)하고, 남은 가중치를 <strong>초기화 시점(original initialization)</strong>으로 되돌려 다시 학습했을 때, 원래 모델과 비슷한 혹은 더 나은 성능을 낼 수 있는 작은 서브네트워크(Winning Ticket)가 존재한다는 가설</p>
<blockquote>
<p>큰 네트워크 안에 이미 “좋은 초기화”를 가진 작은 네트워크가 숨어있으며, 이를 찾기만 해도 강력한 성능을 유지할 수 있다는 점을 시사</p>
</blockquote>
</li>
<li><p><strong>당첨 티켓</strong>은 전체 네트워크에서 불필요한 부분을 제거한 상태에서도 원래의 학습된 성능과 유사한 결과를 낼 수 있다.</p>
</li>
</ul>
<h4 id="2-주요-변형-및-후속-연구">2. 주요 변형 및 후속 연구</h4>
<p><strong>(1) 더 강력한 LTH 가설</strong></p>
<ul>
<li>일부 연구에서는 기존 LTH보다 더 강력한 가설을 제시한다.</li>
<li>예를 들어, <strong>Multi-Prize LTH</strong>는 극단적인 양자화 환경에서도 Winning Ticket을 찾을 수 있음을 보이기 위해 Multi-Prize Tickets (MPTs) 알고리즘을 제안</li>
</ul>
<p><strong>(2) 전이성(Transferability) 연구</strong></p>
<ul>
<li>한 데이터셋에서 찾은 당첨 티켓이 다른 데이터셋에서도 유효할 수 있음을 보인다.</li>
<li>당첨 티켓이 특정 환경에 국한되지 않고 범용적인 특성을 지닐 수 있다고 설명한다.</li>
</ul>
<p><strong>(3) 다른 문맥으로의 확장</strong></p>
<ul>
<li>LTH는 이미지 분류뿐만 아니라 GAN, VAE, GNN, Transformer 등 다양한 신경망 모델에 확장하여 적용한다.</li>
<li>예를 들어, <strong>Graph Lottery Ticket (GLT)</strong>라는 방식이 제안되거나, NLP 모델인 BERT에서도 당첨 티켓이 발견된다.</li>
</ul>
<h3 id="lth가-성공하는-이유-분석">LTH가 성공하는 이유 분석</h3>
<ul>
<li><strong>재학습성 (relearnability)</strong>이 당첨 티켓이 성공할 수 있는 중요한 요인으로 작용한다.</li>
</ul>
<p><strong>(5) LTH에 대한 의문과 재검토</strong></p>
<ul>
<li>최근 연구들은 당첨 티켓의 성능이 학습 조건(학습률, 에폭, 네트워크 규모 등)에 크게 의존함을 지적한다.</li>
<li>이에 따라 LTH가 항상 성립하는 것은 아니며, 특정 조건 하에서만 유효할 수 있다고 주장한다.</li>
</ul>
<blockquote>
<p><strong>전체 요약</strong></p>
</blockquote>
<ul>
<li><strong>LTH는</strong> 조밀한 네트워크 내에 초기화된 상태로부터 다시 학습해도 성능을 유지할 수 있는 희소 서브네트워크(당첨 티켓)가 존재한다고 주장한다.</li>
<li>이 가설에 기반해 다양한 신경망 모델에서 당첨 티켓을 찾으려는 연구들이 진행된다.</li>
<li>후속 연구들은 LTH의 전이성, 이론적 타당성, 확장 가능성 등을 탐구하며, 때로는 LTH가 특정 학습 조건에 따라 달라질 수 있음을 제시한다.</li>
</ul>
<hr>
<p>이와 같이 LTH와 그 변형들에 관한 연구는, 학습된 조밀한 모델 안에 효율적인 희소 서브네트워크가 존재한다는 아이디어를 바탕으로, 다양한 접근법으로 이를 증명하고 응용하려는 노력을 보여준다.</p>
<h3 id="432-other-score-based-methods">4.3.2 Other score-based Methods</h3>
<ul>
<li>모델의 각 구성 요소(가중치, 필터, 또는 레이어)의 중요도를 <strong>점수</strong>로 산출한다.</li>
<li>산출된 점수를 기준으로, 중요도가 낮은 요소를 제거하여 모델 압축과 경량화를 달성한다.</li>
<li>이때 점수 산출 방법으로는 <strong>노름(norm)</strong>, <strong>테일러 근사(Taylor Approximation)</strong>, <strong>출력 영향 평가</strong> 등이 있다.</li>
</ul>
<h4 id="주요-평가-기준-및-방법">주요 평가 기준 및 방법</h4>
<p><strong>(1) 노름 (Norm) 기반 평가</strong></p>
<ul>
<li><strong>핵심 아이디어:</strong><br>각 가중치의 <strong>절댓값</strong>이나 필터의 전체 <strong>L2 노름</strong>을 이용하여 중요도를 측정한다.</li>
<li><strong>실행 방식:</strong>  <ul>
<li>가중치의 크기가 작으면 모델에 미치는 영향이 작다고 판단하고, 해당 가중치를 제거 대상으로 선택한다.</li>
</ul>
</li>
<li><strong>예시:</strong><br>Han 등은 각 가중치의 절댓값 크기를 기준으로 중요도를 산출하여 가지치기를 수행한다.</li>
</ul>
<p><strong>(2) 테일러 근사 (Taylor Approximation) 기반 평가</strong></p>
<ul>
<li><strong>핵심 아이디어:</strong><br>특정 구성 요소(가중치, 필터 등)를 제거했을 때, 전체 손실 함수가 얼마나 변화하는지를 1차 또는 2차 테일러 근사로 추정한다.</li>
<li><strong>실행 방식:</strong>  <ul>
<li>손실 변화가 작은 구성 요소를 제거하면, 모델 성능에 미치는 영향이 적다고 판단한다.</li>
</ul>
</li>
<li><strong>예시:</strong>  <ul>
<li>Nonnenmacher 등은 2차 테일러 근사를 통해 손실 변화를 예측하는 SOSP 방식을 제안한다.  </li>
<li>Ma 등은 LLM에서 1차 테일러 근사를 통해 가지치기 기준을 마련한다.</li>
</ul>
</li>
</ul>
<p><strong>(3) 출력 영향 (Output Impact) 평가</strong></p>
<ul>
<li><strong>핵심 아이디어:</strong><br>특정 레이어 또는 블록이 모델의 출력에 미치는 영향을 평가한다.</li>
<li><strong>실행 방식:</strong>  <ul>
<li>예를 들어, 어떤 레이어를 제거했을 때 모델의 <strong>perplexity(PPL)</strong>나 중간 출력에 변화가 작다면, 해당 레이어의 중요도가 낮다고 판단한다.</li>
</ul>
</li>
<li><strong>예시:</strong>  <ul>
<li>Men 등은 <strong>Block Influence (BI)</strong>를 도입하여, 레이어가 히든 스테이트에 미치는 영향도를 측정한다.  </li>
<li>Kim 등은 LLM에서 레이어 제거 시 PPL의 변화를 보고 중요도를 평가한다.</li>
</ul>
</li>
</ul>
<p><strong>(4) 단계적 가지치기 및 점수 기반 업데이트</strong></p>
<ul>
<li><strong>핵심 아이디어:</strong><br>학습 과정에서 매 반복마다 누적된 마스크 기울기를 활용하여, 점진적으로 가지치기를 진행한다.</li>
<li><strong>실행 방식:</strong>  <ul>
<li>여러 단계를 거치며 점진적으로 중요도가 낮은 구성 요소들을 제거한다.</li>
</ul>
</li>
<li><strong>예시:</strong><br>Shi 등은 이러한 방식으로, 큰 멀티모달 모델을 단계적으로 가지치기하는 UPop 방법을 제안한다.</li>
</ul>
<blockquote>
<p>종합 정리</p>
</blockquote>
<ul>
<li><strong>목표:</strong><br>각 가중치, 필터 또는 레이어의 중요도를 정량적으로 평가하여, 불필요한 중복이나 기여도가 낮은 요소를 선택적으로 제거한다.</li>
<li><strong>평가 기준:</strong>  <ul>
<li><strong>노름:</strong> 가중치의 크기를 기준으로 평가한다.  </li>
<li><strong>테일러 근사:</strong> 구성 요소를 제거했을 때의 손실 변화를 추정한다.  </li>
<li><strong>출력 영향:</strong> 레이어 또는 블록이 모델 출력에 미치는 영향을 측정한다.</li>
</ul>
</li>
<li><strong>효과:</strong><br>점수 기반 가지치기를 통해, 모델의 파라미터 수와 연산량을 효과적으로 줄이면서도 성능 저하를 최소화할 수 있다.</li>
</ul>
<hr>
<p>이와 같이 기타 점수 기반 가지치기 방법은 여러 평가 기준(노름, 테일러 근사, 출력 영향 등)을 활용하여, 모델의 불필요한 구성 요소를 효율적으로 제거하는 전략을 사용한다.</p>
<h3 id="433-sparsity-regularization-based-methods">4.3.3 Sparsity Regularization based Methods</h3>
<p>Sparsity Regularization는 학습 과정에서 불필요한 가중치나 채널, 필터를 0에 가깝게 만들어서, 모델을 압축(경량화)하는 데 기여한다.</p>
<h4 id="주요-아이디어-1">주요 아이디어</h4>
<ul>
<li><p><strong>희소성 정규화의 목적</strong>  </p>
<ul>
<li>모델 내 불필요한(중요도가 낮은) 부분의 값을 0으로 만들도록 유도한다.</li>
<li>이를 통해 모델의 연산량과 메모리 사용량을 줄이고, 과적합(overfitting)을 방지한다.</li>
</ul>
</li>
<li><p><strong>정규화 항 적용 방식</strong>  </p>
<ul>
<li>손실 함수에 L1 정규화나 그룹 라쏘(Group Lasso) 같은 희소성 정규화 항을 추가한다.</li>
<li>예를 들어, 전체 손실 함수는  $L_{\text{total}} = L_{\text{data}} + \lambda \sum_i |w_i|$<br>와 같이 구성되며, $\lambda$는 정규화 강도를 조절한다.</li>
</ul>
</li>
</ul>
<h4 id="대표적인-방법들">대표적인 방법들</h4>
<ol>
<li><p><strong>2단계 알고리즘</strong>  </p>
<ul>
<li><strong>단계 1:</strong> 사전 학습된 CNN 모델의 각 채널에 대해 별도의 스칼라 마스크(즉, scaling factor)를 연결한다.  </li>
<li><strong>단계 2:</strong> LASSO 회귀를 이용하여, 여러 채널들 중 중복되는 정보(즉, 비슷한 역할을 하는 채널)를 식별하고 제거한다.  <blockquote>
<p>L1정규화로 스칼라 마스크를 0으로 만듦</p>
</blockquote>
</li>
<li><strong>추가 처리:</strong> 제거되지 않은 채널의 출력은 선형 최소제곱법을 통해 재구성한다.<blockquote>
<p>모델의 예측값과 실제 관측값 사이의 차이(잔차)의 제곱합을 최소화</p>
</blockquote>
</li>
</ul>
</li>
<li><p><strong>에너지 제약 압축 (Energy-Constrained Compression, ECC)</strong>  </p>
<ul>
<li><p>이중선형(bilinear) 회귀 함수를 사용하여 에너지 소비 모델을 구축한다.  </p>
<blockquote>
<p>이중선형 회귀함수는 두 개의 입력 벡터(또는 변수 집합) 사이의 상호작용을 선형 방식으로 모델링하여 예측 값을 산출하는 함수</p>
<blockquote>
<p>$y=x^TAz$</p>
</blockquote>
<p>$x$와 $z$는 각각의 입력 벡터로 이중선형 회귀함수는 $x$에 대해서도 선형적이고, $z$에 대해서도 선형적이다.</p>
<ul>
<li>주로 서로 다른 두 변수 집합(예: 이미지의 특징 벡터와 텍스트의 임베딩)의 상호작용을 분석하고자 할 때 사용</li>
</ul>
</blockquote>
</li>
<li><p>에너지 소비 측면에서 효율적인 모델을 만들도록 희소성을 유도한다.</p>
</li>
</ul>
</li>
<li><p><strong>성능 최대화를 통한 네트워크 가지치기 (Network Pruning via Performance Maximization, NPPM)</strong>  </p>
<ul>
<li>성능 예측 네트워크를 학습하여, 이 네트워크가 모델 정확도의 대리 지표(proxy)로 사용된다.  </li>
<li>정규화 페널티에 기반해 서브네트워크를 탐색하고, 가지치기할 후보를 결정한다.</li>
</ul>
</li>
<li><p><strong>DepGraph</strong>  </p>
<ul>
<li>CNN, RNN, GNN, 트랜스포머 등 다양한 네트워크 구조에서, 각 구성 요소 간의 종속성(의존관계)을 분석한다.  </li>
<li>이 정보를 바탕으로, 희소성 정규화를 적용한 구조적 가지치기를 수행한다.</li>
</ul>
</li>
<li><p><strong>$l_0$ 정규화 기반 접근</strong></p>
<ul>
<li>$l_0$ 정규화를 사용하여, 대형 언어 모델(LLM)에 대해 파라미터의 개수는 최소-모델 성능은 최대(min-max)로하는 목표 함수를 설정한다.</li>
</ul>
</li>
</ol>
<blockquote>
<p>$l_0$ 정규화는 전체 파라미터 중 0이 아닌 요소의 개수를 최소화하도록 하는 방법으로 $l_0$정규화항은 미분이 불가능하기 때문에 근사 기법을 사용하여 학습한다.</p>
</blockquote>
<ul>
<li>가중치와 가지치기 마스크를 공동 최적화하여, 목표 아키텍처에 맞는 가지치기 마스크를 효율적으로 학습한다.</li>
</ul>
<ol start="6">
<li><strong>노름 기반 방법과 희소성 정규화 결합</strong>  <ul>
<li>가중치나 필터의 노름(norm) 등과 희소성 정규화를 결합하여, 중요도가 높은 요소를 선택하고 덜 중요한 요소를 제거한다.</li>
</ul>
</li>
</ol>
<blockquote>
<p>전체적인 의의</p>
</blockquote>
<ul>
<li><strong>모델 압축 및 경량화:</strong><br>불필요한 부분을 제거함으로써, 모델의 파라미터 수와 연산량을 줄여 경량화한다.</li>
<li><strong>일반화 성능 향상:</strong><br>불필요한 가중치를 줄이면 모델이 과적합되는 것을 방지하여, 새로운 데이터에 대한 일반화 성능을 개선한다. </li>
<li><strong>효율적인 가지치기:</strong><br>다양한 기법들을 통해 모델 내 중요한 정보와 그렇지 않은 정보를 구분하며, 성능 저하 없이 가지치기를 수행하도록 한다.</li>
</ul>
<hr>
<p>이와 같이, 희소성 정규화 기반 방법들은 모델 학습 중 정규화 항을 통해 불필요한 파라미터를 자연스럽게 0에 가깝게 만듦으로써, 가지치기를 효과적으로 수행하고 모델 압축 및 경량화를 달성한다.</p>
<h3 id="434-pruning-in-early-training">4.3.4 Pruning in Early Training</h3>
<ul>
<li>전통적인 pruning는 모델을 완전히 학습한 후에 pruning를 수행한다.</li>
<li>학습 초기에 pruning 방법은 전체 학습 전에, 몇 개의 Epoch만 학습한 후에 유망한 서브네트워크(당첨 티켓)를 식별한다.</li>
</ul>
<h4 id="핵심-아이디어">핵심 아이디어</h4>
<ol>
<li><p><strong>Early-Bird 티켓 발견</strong>  </p>
<ul>
<li>모델을 초기 몇 epoch만 학습하여, 전체 모델과 유사한 성능을 내는 서브네트워크(당첨 티켓)를 식별한다.</li>
<li>초기 단계에서는 비용이 적은 학습 기법(예: 얼리 스토핑, 저정밀도 학습, 높은 학습률 등)을 활용한다.</li>
</ul>
</li>
<li><p><strong>EarlyBERT 적용</strong>  </p>
<ul>
<li>BERT와 같은 복잡한 모델에서도 학습 초기에 구조적 당첨 티켓을 찾아낸다.</li>
<li>이를 통해 모델의 중요한 구조를 빠르게 파악한다.</li>
</ul>
</li>
<li><p><strong>대규모 모델에서도 효과 확인</strong>  </p>
<ul>
<li>ResNet-50, Inception-v3와 같이 복잡한 모델을 대상으로도, 학습 초기 단계에서 안정적인 서브네트워크가 존재함을 실험적으로 확인한다.</li>
<li>이는 학습 초기에 이미 모델의 중요한 구조가 나타남을 시사한다.</li>
</ul>
</li>
</ol>
<h4 id="효과-및-의의">효과 및 의의</h4>
<ul>
<li><p><strong>학습 시간 단축:</strong><br>전체 학습 전에 유망한 서브네트워크를 식별하므로, 최종적으로 모델을 전부 학습하는 데 걸리는 시간을 단축할 수 있다.</p>
</li>
<li><p><strong>효율적인 모델 압축:</strong><br>학습 초기에 pruning를 수행하여, 모델의 불필요한 부분을 빠르게 제거하고, 효율적인 네트워크 구조를 구성한다.</p>
</li>
<li><p><strong>성능 유지 및 개선:</strong><br>초기 단계의 서브네트워크를 활용하여, pruning로 인한 정보 손실 없이 모델의 성능을 유지하거나 개선할 수 있다.</p>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>학습 초기에 가지치기는 전체 학습 전 몇 Epoch만 학습하여, 모델 내 유망한 서브네트워크(당첨 티켓)를 빠르게 식별한다.</li>
<li>Early-Bird 티켓과 EarlyBERT 기법 등이 이를 지원하며, 대규모 모델에서도 초기 단계에 유망한 서브네트워크가 존재함을 확인한다.</li>
<li>이 방법은 학습 비용을 줄이고, 모델을 효율적으로 압축하여 경량화 및 추론 효율성을 높인다.</li>
</ul>
<hr>
<p>이와 같이, 학습 초기에 가지치기는 전체 학습 전에 모델의 중요한 구조를 찾아내어, 불필요한 부분을 제거하고 효율적인 서브네트워크를 구성하는 방법이다. 추가로 궁금한 점이 있으면 말씀해 주세요.</p>
<h3 id="post-training-pruning">Post-Training Pruning</h3>
<ul>
<li><p>사전 학습된 모델에 대해 retrain 없이 pruning를 수행한다.  </p>
</li>
<li><p>보상 기법이나 재구성 기법을 통해 pruning로 인한 성능 저하를 보완한다.  </p>
<blockquote>
<p>보상기법은 pruning으로 인해 발생하는 성능 저하를 보완하는 기법으로 fine-tuning도 보상 기법 중 하나이다.</p>
</blockquote>
</li>
<li><p>특히, 수십억 개의 파라미터를 가진 대형 모델에서 재학습 비용을 크게 줄일 수 있다.</p>
<blockquote>
<ul>
<li>Retraining은 모델의 파라미터 전체를 완전히 처음부터 다시 학습시키는 과정</li>
<li>Fine-tuning은 이미 학습된 모델의 파라미터를 약간만 수정하여 pruning 후 성능을 회복시키는 과정</li>
</ul>
</blockquote>
</li>
</ul>
<h4 id="주요-구성-요소">주요 구성 요소</h4>
<ol>
<li><p><strong>재학습 없이 pruning를 진행한다</strong>  </p>
<ul>
<li>전통적인 Pretrain–Prune–Retrain 방식 대신에, 사전 학습된 모델에 직접 가지치기를 적용한다.</li>
</ul>
</li>
<li><p><strong>보상 기법(Compensation Mechanisms)을 사용한다</strong>  </p>
<ul>
<li>pruning로 인한 성능 저하를 보완하기 위해, 보상 기법이나 재구성 기법을 도입한다.</li>
<li>예를 들어, 피셔(Fisher) 기반 마스크 탐색, 재배치, 튜닝 기법을 활용하여 모델의 성능을 복구한다.</li>
</ul>
</li>
<li><p><strong>SparseGPT와 Wanda를 사용한 Unstructured pruning</strong>  </p>
<ul>
<li><strong>SparseGPT</strong>는 근사적 희소성 재구성 문제(approximate sparsity reconstruction)를 통해 학습 없이 최소 50% 이상의 가지치기를 달성한다.</li>
<li><strong>Wanda</strong>는 Weight magnitude와 Input norm을 활용하여 추가적인 가중치 업데이트 없이 pruning을 수행한다.</li>
</ul>
</li>
<li><p><strong>SliceGPT를 사용한 Structured pruning</strong>  </p>
<ul>
<li>정방행렬 변환과 주성분 분석(PCA)을 적용하여 LLM의 가중치 행렬에서 열과 행을 제거한다.</li>
<li>이를 통해 더 체계적인 구조적 가지치기를 구현한다.</li>
</ul>
</li>
<li><p><strong>FLAP를 통한 성능 복구</strong>  </p>
<ul>
<li>변동(fluctuation) 지표를 도입하고, 편향 보상 메커니즘을 사용하여 가지치기 후의 성능 저하를 보완한다.</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>효과</strong></p>
</blockquote>
<ul>
<li><strong>재학습 비용을 크게 줄인다:</strong><br>전체 모델을 retraining하지 않고 pruning를 수행하므로, 대형 모델에서도 빠르고 효율적으로 압축할 수 있다.</li>
<li><strong>정확도 손실을 최소화한다:</strong><br>보상 및 재구성 기법을 적용하여, pruning로 인한 모델 성능 저하를 거의 없게 한다. </li>
<li><strong>모델 압축을 효율적으로 달성한다:</strong><br>불필요한 파라미터를 제거하여, 모델의 연산량과 메모리 사용량을 줄이고 경량화한다.</li>
</ul>
<hr>
<p>이와 같이, 학습 후 pruning은 pre-training된 모델에 대해 retrain 없이 pruning을 적용하고, 여러 보상 및 재구성 기법을 통해 성능 손실 없이 모델을 경량화하는 방법이다.</p>
<h2 id="44-run-time-pruning">4.4 Run-time Pruning</h2>
<ul>
<li><strong>런타임 pruning는</strong> 추론 시, 각 입력마다 불필요한 계산을 동적으로 생략하여 전체 연산량을 줄인다.</li>
<li><strong>목표는</strong> 입력의 복잡도에 맞춰 최적의 계산 경로(서브네트워크)를 선택함으로써, 효율적이고 빠른 추론을 달성하는 데 있다.</li>
</ul>
<h4 id="주요-아이디어-2">주요 아이디어</h4>
<ol>
<li><p><strong>입력의 다양성을 인지한다:</strong>  </p>
<ul>
<li>모든 입력이 동일한 계산을 요구하지 않음을 인식한다.</li>
<li>간단한 입력은 불필요한 연산을 줄여도 무방하며, 복잡한 입력은 추가 계산이 필요하다.</li>
</ul>
</li>
<li><p><strong>동적 경로 선택을 수행한다:</strong>  </p>
<ul>
<li>모델이 입력 데이터와 현재 특징 맵을 기반으로, 압축된 경로(서브네트워크)의 일부만 선택하도록 한다.</li>
<li>이를 통해, 입력마다 최적의 계산 경로를 동적으로 구성한다.</li>
</ul>
</li>
<li><p><strong>채널 중요도를 사전에 계산한다:</strong>  </p>
<ul>
<li>입력 데이터를 통해 각 채널의 중요도를 미리 평가한다.</li>
<li>추론 시, 중요도가 임계값보다 낮은 채널은 계산에서 건너뛴다.</li>
</ul>
</li>
<li><p><strong>중간 활성화 정보를 활용한다:</strong>  </p>
<ul>
<li>중간 결과의 일부 합 등 정보를 통해, 실시간으로 계산할 채널을 선택적으로 건너뛰는 전략을 사용한다.</li>
</ul>
</li>
<li><p><strong>자기지도 대조학습 및 DynaTran 기법을 적용한다:</strong>  </p>
<ul>
<li>대조학습 기반으로 각 채널이나 서브네트워크의 중요도를 평가하여, 실시간 pruning을 수행한다.</li>
<li>트랜스포머에서는 입력 행렬의 크기와 활성화 값을 분석해, 불필요한 계산을 건너뛰어 효율을 높인다.</li>
</ul>
</li>
</ol>
<h4 id="효과">효과</h4>
<ul>
<li><p><strong>연산 효율을 향상시킨다:</strong><br>불필요한 계산을 생략함으로써 전체 추론 속도를 개선한다.</p>
</li>
<li><p><strong>동적 최적화를 가능하게 한다:</strong><br>각 입력의 복잡도에 따라 계산 경로를 조절하여, 자원 사용 및 에너지 소비를 줄인다.</p>
</li>
<li><p><strong>자원 절약에 기여한다:</strong><br>GPU나 CPU에서 불필요한 연산이 줄어들어, 전반적인 시스템 효율성이 증가한다.</p>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>런타임 가지치기는 입력마다 계산해야 하는 부분을 동적으로 결정한다.</li>
<li>여러 접근법(런타임 라우팅, 채널 중요도 평가, 중간 결과 활용, 대조학습, DynaTran 등)을 통해, 최적의 서브네트워크를 실시간으로 선택한다.</li>
<li>이를 통해 단순한 입력은 불필요한 연산을 줄이고, 복잡한 입력에는 필요한 연산을 제공하여, 전체 추론 속도와 효율성을 크게 향상시킨다.</li>
</ul>
<hr>
<p>이와 같이, 런타임 가지치기는 모델이 각 입력마다 동적으로 계산 경로를 최적화하여, 빠르고 효율적인 추론을 가능하게 한다. 추가로 궁금한 점이 있으면 말씀해 주세요.</p>
<h1 id="5-pruning-criteira">5. Pruning Criteira</h1>
<p>파라미터의 중요도를 평가하기 위해 사용되는 Pruning 기준을 요약한다.</p>
<ul>
<li>Magnitude</li>
<li>Norm</li>
<li>Saliency/Sensitivity</li>
<li>Loss change</li>
</ul>
<h2 id="51-magnitude-based-pruning">5.1 Magnitude-based Pruning</h2>
<ul>
<li><p><strong>가중치 크기를 기준으로 한다:</strong><br>각 가중치(또는 필터)의 절댓값이나 L2 노름이 작으면, 해당 가중치가 모델 출력에 미치는 영향이 작다고 가정한다.</p>
</li>
<li><p><strong>작은 가중치를 제거한다:</strong><br>중요하지 않은(작은) 가중치는 모델에 큰 기여를 하지 않으므로, 제거하여 모델을 압축한다.</p>
</li>
</ul>
<h4 id="가지치기-결정-방식">가지치기 결정 방식</h4>
<p><strong>(1) 임계값 기반 선택</strong></p>
<ul>
<li>각 가중치 $w_i$에 대해,<br>$m_i =
\begin{cases}
1 &amp; \text{if } |w_i| \geq a \
0 &amp; \text{if } |w_i| &lt; a
\end{cases}$
와 같이 정의한다.  </li>
<li>$a$라는 임계값을 설정하여, $|w_i|$가 (a)보다 작으면 $m_i$를 0으로 하여 제거한다.</li>
</ul>
<p><strong>(2) 입력과 결합한 평가 (Wanda 방식)</strong></p>
<ul>
<li>가중치 $w_{ij}$에 대해, 해당 가중치의 중요도를 입력 $x_j$의 L2 노름과 결합하여 계산한다.  </li>
<li>점수 $s_{ij}$는 다음과 같이 정의한다:  <blockquote>
<p>$
s_{ij} = |w_{ij}| \cdot |x_j|_2
$</p>
</blockquote>
</li>
<li>$s_{ij}$ 값이 낮으면, 해당 가중치의 기여도가 작다고 판단하여 제거 대상으로 선택한다.</li>
</ul>
<h4 id="3-왜-사용한다">3. 왜 사용한다?</h4>
<ul>
<li><p><strong>모델 단순화:</strong><br>불필요한 가중치를 제거하여 모델의 파라미터 수와 연산량을 줄인다.</p>
</li>
<li><p><strong>과적합 방지:</strong><br>중요하지 않은 파라미터가 제거되면, 모델이 학습 데이터에 과도하게 맞춰지는 것을 방지한다.</p>
</li>
<li><p><strong>효율적 학습:</strong><br>중요한 가중치들만 남겨 모델을 경량화하고, 향후 추론 효율성과 일반화 성능을 높인다.</p>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>크기 기반 가지치기는 <strong>가중치의 크기를 측정하여</strong> 임계값보다 작은 가중치를 제거한다.</li>
<li>단순히 가중치의 절댓값이나 L2 노름을 사용하며, Wanda와 같이 입력 정보까지 결합하여 정교하게 평가할 수도 있다.</li>
<li>이를 통해 모델의 불필요한 파라미터를 줄여, 경량화와 연산 효율성을 극대화한다.</li>
</ul>
<hr>
<p>이와 같이, 크기 기반 가지치기는 가중치의 크기를 평가하여 중요하지 않은 가중치를 제거하는 방식으로 모델을 압축하고 간결하게 만든다.</p>
<h2 id="52-l_p-norm">5.2 $l_p$ Norm</h2>
<ul>
<li><strong>$l_p$ 노름은</strong> 모델의 가중치나 필터의 “크기” 또는 “세기”를 측정하는 방법이다.</li>
<li>보통 $l_p$ 노름을 계산하면, 필터 내의 모든 가중치의 제곱(또는 p제곱)을 더하고, 그 합의 p제곱근을 구한다.</li>
<li>이는 각 필터의 전체적인 활성 정도를 나타내며, 값이 크면 해당 필터가 중요한 정보를 담고 있다고 판단한다.</li>
</ul>
<h2 id="수식-설명">수식 설명</h2>
<ul>
<li><p>예를 들어, 한 필터 $F_{i,j}$에 대한 $l_p$ 노름은 다음과 같이 계산된다:</p>
<p>$
|F_{i,j}|<em>p =
\Biggl(
\sum</em>{n=1}^{c_{\text{in}}^{(i)}}
\sum_{k1=1}^{k^{(i)}}
\sum_{k2=1}^{k^{(i)}}
\bigl|F_{i,j}(n, k1, k2)\bigr|^p
\Biggr)^{\tfrac{1}{p}},
$</p>
<p>여기서:</p>
<ul>
<li>$c_{\text{in}}^{(i)}$는 해당 레이어 $i$의 입력 채널 수이다.</li>
<li>$k^{(i)}$는 레이어 (i)의 커널(필터) 크기를 의미한다.</li>
<li>$F_{i,j}(n, k1, k2)$는 필터 $F_{i,j}$의 특정 위치에서의 가중치 값을 나타낸다.</li>
</ul>
</li>
</ul>
<h2 id="가지치기-기준으로서의-활용">가지치기 기준으로서의 활용</h2>
<ul>
<li><p><strong>중요도 평가:</strong>  </p>
<ul>
<li>$l_p$ 노름 값이 <strong>크면</strong>, 해당 필터의 가중치들이 전체적으로 큰 값들을 가지며, 중요한 정보를 학습하는 데 기여한다고 판단한다.</li>
<li>반대로, $l_p$ 노름 값이 <strong>작으면</strong>, 그 필터가 모델 출력에 미치는 영향이 작다고 보고, 가지치기 대상으로 선정된다.</li>
</ul>
</li>
<li><p><strong>희소성 정규화와의 결합:</strong>  </p>
<ul>
<li>$l_p$ 노름 기반 평가와 희소성 정규화(L1 정규화 등)를 결합하면, 중요하지 않은 필터들을 효과적으로 0에 가깝게 만드는 방식으로 모델을 압축할 수 있다.</li>
<li>이를 통해 모델은 불필요한 파라미터를 줄이고, 경량화 및 효율적인 계산이 가능해진다.</li>
</ul>
</li>
</ul>
<blockquote>
<p>**요약</p>
</blockquote>
<ul>
<li>$l_p$ 노름은 필터나 가중치의 전체 크기를 측정하는 지표로 사용된다.</li>
<li>계산된 $l_p$ 노름 값이 작으면, 해당 필터가 모델 출력에 기여하는 정도가 낮다고 간주한다.</li>
<li>가지치기에서는 이러한 $l_p$ 노름을 기준으로, 중요도가 낮은 필터들을 제거하여 모델을 압축한다.</li>
<li>또한, 희소성 정규화 기법과 결합하여 모델의 불필요한 정보를 효과적으로 줄인다.</li>
</ul>
<hr>
<p>이와 같이, $l_p$ 노름을 활용하면 각 필터의 “크기”를 정량적으로 측정하여, 상대적으로 작은 값을 가진 필터들을 가지치기 대상으로 선택할 수 있다. </p>
<h2 id="53-sensitivity-andor-saliency">5.3 Sensitivity and/or Saliency</h2>
<h4 id="감도sensitivity">감도(Sensitivity)</h4>
<ul>
<li><p><strong>의미</strong><br>어떤 가중치(또는 필터, 뉴런)를 제거했을 때 손실(오차)이 얼마나 변화하는지를 측정한다.  </p>
<ul>
<li>즉, 한 가중치를 제거했을 때 전체 모델의 성능이 급격히 떨어진다면, 그 가중치는 <strong>감도가 높다</strong>라고 판단한다.</li>
</ul>
</li>
<li><p><strong>예시</strong><br>LeCun 등은 가중치 살리언시를 제거 후 손실의 변화량으로 정의한다.  </p>
<ul>
<li>예를 들어, 만약$w_j$라는 가중치를 제거했을 때 손실이 많이 증가한다면, $w_j$는 중요한 역할을 한다고 평가한다.</li>
</ul>
</li>
</ul>
<h4 id="살리언시saliency">살리언시(Saliency)</h4>
<ul>
<li><p><strong>의미</strong><br>가중치나 채널이 모델 출력에 기여하는 정도, 즉 “중요도”를 나타내는 척도이다.</p>
</li>
<li><p><strong>예시</strong>  </p>
<ul>
<li><p>가중치의 미분값, 즉 <strong>그래디언트(gradient)</strong>의 크기를 활용해 “연결 감도(connection sensitivity)”를 계산한다.</p>
<blockquote>
<p>$s_j(W; D)=\frac{|g_j(W; D)|}{\sum_{k=1}^M |g_k(W; D)|}$</p>
</blockquote>
<p>여기서 $s_j$는 가중치 $w_j$의 감도 또는 살리언시를 의미하며, $g_j(W; D)$는 마스크에 관해 $\mathcal{L}(W \odot M)$를 미분한 값이다.</p>
</li>
<li><p>이 값이 높으면, 해당 가중치가 모델 출력에 큰 영향을 준다고 판단한다.</p>
</li>
</ul>
</li>
</ul>
<h4 id="bnbatch-normalization에서의-채널-saliency">BN(Batch Normalization)에서의 채널 Saliency</h4>
<ul>
<li><p><strong>방법</strong><br>Zhao 등은 배치 정규화(BN) 레이어의 Scale factor $\gamma$와 이동 항 $\beta$를 결합하여, 이를 채널 saliency로 해석한다.</p>
</li>
<li><p><strong>수식</strong>  </p>
<blockquote>
<p>$x_{\text{out}}= \gamma \cdot BN(x)+ \tilde{\beta},$</p>
</blockquote>
<p>여기서 $\tilde{\beta} = \gamma \cdot \beta$로 정의된다.</p>
</li>
<li><p><strong>의미</strong>  </p>
<ul>
<li>$\gamma$ 값만 단순히 사용하는 대신, $\gamma$와 $\beta$의 조합 혹은 분포를 참고하여, 각 채널의 출력 기여도가 낮은 채널을 판단한다.</li>
<li>중요하지 않은 채널은 Saliency 값이 낮게 측정되어 가지치기 대상으로 선정된다.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>감도/살리언시 기준을 사용한다:</strong>  <ul>
<li>각 가중치 또는 채널이 제거되었을 때 손실이 어떻게 변화하는지, 즉 모델 성능에 미치는 영향을 평가하여, 중요도를 정량화한다.</li>
</ul>
</li>
<li><strong>Pruning 대상 결정에 활용한다:</strong>  <ul>
<li>감도나 살리언시 값이 낮은(제거해도 성능에 미치는 영향이 작은) 부분은 가지치기하여, 모델의 불필요한 파라미터를 줄인다.  </li>
</ul>
</li>
<li><strong>모델 압축 및 경량화를 달성한다:</strong>  <ul>
<li>중요하지 않은 구성 요소를 제거함으로써, 모델 크기와 연산량을 줄이고, 효율성을 높인다.</li>
</ul>
</li>
</ul>
<hr>
<p>요약하면, 감도와 살리언시는 가지치기에서 각 가중치나 채널이 모델 성능에 얼마나 중요한지를 수치로 나타내는 척도이다.  </p>
<ul>
<li>감도는 해당 요소를 제거했을 때 손실 함수가 얼마나 변하는지로 측정하며,  </li>
<li>살리언시는 그래디언트와 같은 정보를 기반으로 해당 요소의 중요도를 정량화한다.<br>이러한 척도를 활용해 중요도가 낮은 부분은 제거함으로써, 모델 압축과 효율화를 달성한다.</li>
</ul>
<h2 id="54-loss-change">5.4 Loss change</h2>
<p>손실 변화 기반 Pruning은, 특정 가중치나 필터를 제거했을 때 전체 손실 함수가 얼마나 변하는지를 측정하여 그 요소의 중요도를 평가한다. 손실 변화가 작으면 해당 요소의 제거가 모델 성능에 미치는 영향이 적다고 판단하여 가지치기 대상으로 선정한다.</p>
<h4 id="1차-테일러-전개를-통한-손실-변화-추정">1차 테일러 전개를 통한 손실 변화 추정</h4>
<ul>
<li><p><strong>기본 원리</strong>  </p>
<ul>
<li>가중치 $W$에 미세한 변화 $\Delta W$를 주었을 때 손실 $L(W)$가 어떻게 변하는지를 1차 테일러 전개를 통해 근사한다.</li>
</ul>
</li>
<li><p><strong>수식:</strong>  </p>
<blockquote>
<p>$
\Delta L = L(W + \Delta W) - L(W) \approx \nabla_W L \cdot \Delta W$</p>
</blockquote>
</li>
<li><p><strong>의미</strong>  </p>
<ul>
<li><p>$\nabla_W L$은 가중치 (W)에 대한 손실 함수의 기울기(gradient)이다.  </p>
<blockquote>
<p>손실 함수 $L$가 가중치 $W$에 대해 얼마나 민감하게 변하는지를 알려주는 값</p>
<blockquote>
<p>가중치를 조금 바꿨을 때 손실이 얼마나 변하는지</p>
</blockquote>
</blockquote>
</li>
<li><p>만약 특정 가중치를 제거하는 변화 $\Delta W$에 대해, $\nabla_W L \cdot \Delta W$의 절댓값이 작다면, 해당 가중치가 제거되어도 손실이 크게 증가하지 않으므로 중요도가 낮다고 판단하여 제거한다.</p>
</li>
</ul>
</li>
</ul>
<h4 id="2차-테일러-전개를-통한-손실-변화-추정">2차 테일러 전개를 통한 손실 변화 추정</h4>
<ul>
<li><p><strong>기본 원리</strong>  </p>
<ul>
<li>1차 항에 더해, 가중치 변화에 따른 2차 미분(헤시안, $H$) 항까지 고려하여 손실 변화를 보다 정밀하게 추정한다.</li>
</ul>
</li>
<li><p><strong>수식</strong>  </p>
<blockquote>
<p>$
L(W + \Delta W) - L(W) \approx \nabla_W L \cdot \Delta W + \tfrac{1}{2} \Delta W^T H \Delta W.
$</p>
</blockquote>
</li>
<li><p><strong>설명</strong>  </p>
<ul>
<li>여기서 $H$는 손실 함수 $L$의 2차 미분(헤시안) 행렬이다. <blockquote>
<p>헤시안 행렬 $H$는 손실 함수의 곡률(즉, 기울기의 변화율)을 나타낸다</p>
<blockquote>
<p>2차 항을 포함하면, 가중치 변경으로 인한 손실 변화량을 보다 정밀하게 예측</p>
</blockquote>
</blockquote>
</li>
<li>$\Delta W$는 제거하고자 하는 가중치에 해당하는 변화 벡터이다.  </li>
<li>2차 테일러 전개를 사용하면, 1차 근사보다 더 정확하게 가중치 제거에 따른 손실 증가량을 예측할 수 있다.</li>
</ul>
</li>
</ul>
<h4 id="1차-tayler-vs-2차-tayler">1차 Tayler vs 2차 Tayler</h4>
<p>1차 테일러 근사는 가중치 변경의 &quot;즉각적인&quot; 효과만 반영한다.
하지만 실제로는 가중치 사이의 상호작용으로 인해 비선형 효과가 발생할 수 있는데, 2차 항을 포함하면 이런 비선형 효과도 고려할 수 있다</p>
<ul>
<li><p>1차 테일러 전개는 모델의 손실 함수가 작은 변화에 대해 직선적인 변화를 보인다고 가정</p>
<blockquote>
<p>만약 특정 가중치를 아주 소량만 바꾼다고 생각하면, 이 변화는 가중치의 기울기(gradient)에 비례하여 손실 함수가 변화한다고 보는 것</p>
<blockquote>
<p>즉, 가중치 하나의 영향이 곧바로 그 가중치의 기울기에 의해 결정된다고 보는 것</p>
</blockquote>
</blockquote>
</li>
<li><p>2차 테일러 전개에서는 실제로는 각 가중치들이 서로 상호작용하며 모델의 성능에 영향을 미치는 것을 고려한다</p>
<blockquote>
<p>신경망 내에서는 여러 가중치가 복합적으로 작용하여 출력에 영향을 미친다</p>
<blockquote>
<p>1차 근사는 개별 가중치의 변화가 독립적이라고 가정하지만, 실제로는 가중치들이 서로 영향을 주기 때문에 이들의 변화가 단순 선형 반응을 넘어서게 된다</p>
</blockquote>
</blockquote>
</li>
</ul>
<h4 id="가지치기-기준으로의-활용">가지치기 기준으로의 활용</h4>
<ul>
<li><p><strong>중요도 평가:</strong>  </p>
<ul>
<li>각 가중치나 필터를 제거했을 때의 손실 변화$(\Delta L)$를 계산하여, 그 값이 작으면 해당 요소가 모델에 중요하지 않다고 판단한다.</li>
</ul>
</li>
<li><p><strong>선택 및 제거:</strong>  </p>
<ul>
<li>손실 변화가 작게 측정된 요소들을 가지치기 대상으로 선택하여 제거한다.</li>
</ul>
</li>
<li><p><strong>모델 압축:</strong>  </p>
<ul>
<li>이러한 과정을 통해 불필요한 요소들을 제거하고, 모델의 파라미터 수와 연산량을 줄여 경량화한다.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>1차 테일러 전개</strong>는 간단하게 변화량을 예측하여 빠르게 중요도를 평가한다.  </li>
<li><strong>2차 테일러 전개</strong>는 헤시안 항까지 고려하여 보다 정밀하게 손실 변화를 측정한다.  </li>
<li>두 방법을 통해, 제거 후 손실 변화가 적은 요소를 선택하여 가지치기하면 모델 성능을 크게 저하시키지 않고 모델을 압축할 수 있다.</li>
</ul>
<hr>
<p>이와 같이, 손실 변화 기준은 가중치나 필터를 제거했을 때 모델 손실이 얼마나 변화하는지를 측정하여, 중요도가 낮은 요소를 제거함으로써 모델을 압축하는 데 사용된다. </p>
<h1 id="6-learn-to-prune">6. Learn to Prune</h1>
<ul>
<li><strong>pruning 학습:</strong><br>네트워크가 스스로 pruning을 수행하도록 만드는 여러 방법들을 연구한다.    <ul>
<li>희소성 정규화 기반 가지치기  </li>
<li>메타 학습 기반 가지치기  </li>
<li>그래프 신경망(GNN) 기반 가지치기  </li>
<li>강화 학습(RL) 기반 가지치기 등</li>
</ul>
</li>
</ul>
<hr>
<h1 id="61-희소성-정규화-기반-가지치기-sparsity-regularization-based-pruning">6.1 희소성 정규화 기반 가지치기 (Sparsity Regularization based Pruning)</h1>
<ul>
<li><strong>희소성 정규화란:</strong><br>학습 과정에서 모델의 가중치 혹은 가지치기 마스크 등에서 불필요한(중요하지 않은) 값들을 0에 가깝게 유도하여, 모델을 희소한(sparse) 상태로 만든다.  </li>
<li><strong>목표</strong><br>모델 내 불필요한 요소들을 제거하여, 모델의 파라미터 수와 연산 비용을 줄이고 경량화한다.</li>
</ul>
<h4 id="수식">수식</h4>
<ul>
<li><p><strong>최적화 문제를 설정:</strong><br>모델의 전체 손실은 데이터 손실과 희소성 정규화 항으로 구성된다.</p>
<blockquote>
<blockquote>
<p>$\min_{W, M} ; \mathcal{L}(W, M) = \mathcal{L}\bigl(W \odot M\bigr) + \lambda, R(\cdot)$</p>
</blockquote>
<ul>
<li>$\mathcal{L}(W \odot M)$: 가지치기가 반영된 모델의 데이터 손실  </li>
<li>$R(\cdot)$: 구조적 희소성을 강제하는 정규화 항  </li>
<li>$\lambda$: 정규화 강도를 조절하는 하이퍼파라미터</li>
</ul>
</blockquote>
</li>
<li><p><strong>스케일링 팩터 활용한다:</strong><br>각 채널 또는 필터에 스케일링 팩터(예: BN 레이어의 $\gamma$ 또는 별도로 도입한 스칼라)를 부여하고, 이 값에 L1 정규화 같은 희소성 정규화를 적용하여, 중요하지 않은 채널의 스케일링 값이 0에 가깝게 된다.  </p>
<ul>
<li>결과적으로, 해당 채널은 출력에 거의 기여하지 않게 되어 pruning 효과를 얻는다.</li>
</ul>
</li>
</ul>
<h4 id="예시">예시</h4>
<ol>
<li><p><strong>단계 1:</strong>  </p>
<ul>
<li>사전 학습된 CNN 모델의 각 채널에 대해 별도의 스칼라 마스크(즉, 스케일링 팩터, $\alpha$ 등)를 연결한다.</li>
</ul>
</li>
<li><p><strong>단계 2:</strong>  </p>
<ul>
<li><p>LASSO 회귀를 활용하여, 여러 채널 중 중복되는 정보 또는 비슷한 역할을 하는 채널을 식별한다.  </p>
<blockquote>
<blockquote>
<p>$Loss=L_{data}+\lambda \sum_i|\alpha_i|$</p>
</blockquote>
<p>만약 두 개 이상의 채널이 비슷한 정보(동일한 특징)를 추출할 경우,해당 특징을 &quot;대표&quot;할 수 있는 채널만 남기고, 나머지 채널의 $\alpha_i$값은 줄어들어 0에 가까워진다.</p>
</blockquote>
</li>
<li><p>이때 L1 정규화와 유사한 방식으로 스칼라 마스크의 값을 0에 가깝게 만들어, 중요하지 않은 채널을 제거 대상으로 결정한다.</p>
</li>
</ul>
</li>
<li><p><strong>추가 처리:</strong>  </p>
<ul>
<li>제거되지 않은 채널의 출력은 선형 최소제곱법을 사용해 재구성하여, 가지치기로 인한 정보 손실을 보완한다.</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>효과</strong></p>
</blockquote>
<ul>
<li><strong>모델 압축을 달성한다:</strong><br>불필요한 가중치와 채널을 제거하여 전체 모델의 파라미터 수와 연산량을 줄인다.</li>
<li><strong>성능 유지 및 개선:</strong><br>중요한 요소는 유지하면서, 제거 대상은 0에 가깝게 만들어 성능 저하를 최소화한다.</li>
<li><strong>효율적인 최적화를 가능하게 한다:</strong><br>가중치와 가지치기 마스크를 동시에 최적화하여, 목표로 하는 희소한 모델 구조를 효과적으로 학습한다.</li>
</ul>
<hr>
<p>이와 같이, &quot;희소성 정규화 기반 가지치기&quot; 방법은 모델 학습 중에 정규화 항을 추가하여 중요하지 않은 가중치나 채널(또는 스칼라 마스크)을 0에 가깝게 만들고, 이를 통해 불필요한 부분을 제거하여 모델을 경량화하고 효율적으로 압축한다.</p>
<h2 id="62-meta-learning-based-pruning">6.2 Meta-Learning based Pruning</h2>
<ul>
<li>메타 학습 기반 가지치기는, pruning 작업 자체를 <strong>학습하도록 만든다</strong>.</li>
<li>이 방식은 모델을 가지치기할 때, 단순히 규칙이나 손실 기반으로 제거할 대상을 결정하는 대신, 메타 네트워크를 학습시켜 <strong>pruning된 네트워크의 가중치를 예측</strong>하도록 한다.</li>
</ul>
<h4 id="pruningnet의-역할">PruningNet의 역할</h4>
<ul>
<li><strong>PruningNet</strong>은 메타 네트워크로, 다양한 가지치기 설정(예: 레이어별 채널 수 등)을 인코딩한 벡터를 입력으로 받아, 해당 가지치기 설정에 맞는 새로운 가중치 $W$를 생성한다.</li>
<li>입력으로 사용되는 네트워크 인코딩 벡터는 $(v_1, v_2, \ldots, v_L)$ 형태이며, 여기서 $v_i$는 $i$번째 레이어에서 남기고자 하는 채널 수 등과 같은 정보를 포함한다.<blockquote>
<p>메타 네트워크를 사용하면 pruning 대상(채널이나 필터)를 결정할 때 후보가 매우 많은데 여러 가지 설정 중에서 최적의 pruning 구조를 찾아낼 수 있다</p>
</blockquote>
</li>
</ul>
<h4 id="메타-학습-기반-가지치기의-구체적-과정">메타 학습 기반 가지치기의 구체적 과정</h4>
<ol>
<li><p><strong>메타 네트워크 학습:</strong>  </p>
<ul>
<li>PruningNet을 학습하여, 다양한 가지치기 설정에 따른 가지치기된 네트워크의 가중치를 예측할 수 있도록 한다.</li>
<li>학습된 PruningNet은 주어진 네트워크 인코딩 벡터를 입력받으면, 그에 상응하는 pruning된 네트워크의 가중치를 출력한다.<blockquote>
<p>여러 레이어에 대해 남길 채널 수나 구조 정보를 입력받으면, 
그 입력을 바탕으로, 어떤 채널을 남기고 어떤 채널은 제거할지, 그리고 제거된 후 남은 네트워크의 가중치를 어떻게 조정할지를 예측한다</p>
</blockquote>
</li>
</ul>
</li>
<li><p><strong>네트워크 인코딩 벡터 탐색:</strong>  </p>
<ul>
<li>pruning 후보로 고려되는 다양한 네트워크 인코딩 벡터의 탐색 공간은 매우 크다.</li>
<li>따라서, PruningNet을 통해 직접 모든 후보를 평가하기는 어렵고, 이를 <strong>진화적 탐색(evolutionary search)</strong>과 같은 방법을 사용하여 효율적으로 탐색한다.</li>
<li>이를 통해 제약 조건 하에서 최적의 pruning 설정과 해당 가중치를 찾는다.</li>
</ul>
</li>
</ol>
<h4 id="기대-효과-및-장점">기대 효과 및 장점</h4>
<ul>
<li><strong>자동 가지치기:</strong>  <ul>
<li>PruningNet을 통해 pruning할 네트워크의 가중치를 예측하므로, 수동으로 pruning 비율 등을 설정할 필요 없이, <strong>자동으로 pruning된 네트워크를 생성</strong>할 수 있다.</li>
</ul>
</li>
<li><strong>유연성 증대:</strong>  <ul>
<li>다양한 pruning 설정(예: 각 레이어별 남길 채널 수 등)을 메타 네트워크의 입력으로 사용하여, 복잡한 모델에서도 최적의 pruning를 수행한다.</li>
</ul>
</li>
<li><strong>효율적 탐색:</strong>  <ul>
<li>진화적 탐색을 사용해, 방대한 후보 공간에서 <strong>효율적으로 최적의 가지치기 설정을 찾는다.</strong></li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>메타 학습 기반 pruning는, 메타 네트워크(PruningNet)를 학습시켜, 주어진 가지치기 설정에 맞는 네트워크 가중치를 예측한다.</li>
<li>네트워크 인코딩 벡터를 통해 가지치기 정보를 전달하고, 진화적 탐색 등으로 최적의 설정을 찾는다.</li>
<li>이를 통해, pruning 과정이 자동화되고 모델의 경량화와 성능 유지가 동시에 달성된다.</li>
</ul>
<hr>
<p>이와 같이 메타 학습 기반 pruning는, pruning 작업을 별도의 규칙이나 손실 함수 대신 메타 네트워크가 예측하도록 함으로써, 더 유연하고 자동화된 가지치기를 가능하게 한다. </p>
<h2 id="63-graph-neural-network-based-pruning">6.3 Graph Neural Network based Pruning</h2>
<ul>
<li><p><strong>네트워크를 그래프로 본다:</strong>  </p>
<ul>
<li>임의의 신경망은 노드와 엣지로 구성된 그래프로 표현할 수 있다.</li>
<li>각 레이어나 구성 요소(예: 채널, 필터 등)를 노드로 보고, 이들 간의 관계를 엣지로 연결한다고 생각한다.</li>
</ul>
</li>
<li><p><strong>그래프 어그리게이터 $G$를 사용한다:</strong>  </p>
<ul>
<li>그래프 어그리게이터는 각 노드에 대해 고차원 특징(embedding features)을 추출하는 역할을 한다.</li>
<li>입력으로 각 노드의 임베딩 $b_i$를 받아, 전체 네트워크에 걸친 정보를 집합적으로 처리하여, 각 레이어에 대한 요약 정보를 $n_i$로 만든다.<blockquote>
<p>전체 신경망의 각 레이어나 채널을 하나의 노드로 보고, 이 노드들로부터 중요한 특징(임베딩, 집계 정보 등)을 추출</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h4 id="가지치기된-네트워크-생성-과정">가지치기된 네트워크 생성 과정</h4>
<ol>
<li><p><strong>노드 임베딩 추출:</strong>  </p>
<ul>
<li><p>각 레이어에 대응하는 임베딩 특성 $b_1, b_2, \ldots, b_L$를 사용한다.</p>
</li>
<li><p>그래프 어그리게이터 $G$는 이 임베딩들을 입력받아,  </p>
<blockquote>
<p>$
(n_1, n_2, \ldots, n_L) = G(b_1, b_2, \ldots, b_L \mid \theta_G)
$</p>
</blockquote>
<p>와 같이 각 레이어별 요약 정보를 산출한다.</p>
</li>
</ul>
</li>
<li><p><strong>FC 레이어를 통해 가중치 생성:</strong>  </p>
<ul>
<li>각 요약 정보 $n_i$에 대해, 해당 레이어의 완전연결(FC) 레이어 $FC_i$가 작동한다.</li>
<li>이를 통해, 가지치기된 네트워크의 가중치 $w^{(i)}$를 아래와 같이 생성한다:<blockquote>
<blockquote>
<p>$w^{(i)} = FC_i(n_i \mid \theta_i)$</p>
</blockquote>
</blockquote>
<ul>
<li>여기서 $\theta_i$는 $i$-번째 FC 레이어의 가중치이다.<blockquote>
<p>FC 레이어는 &quot;요약 정보&quot;를 입력받아, 해당 레이어에서 중요한 부분은 남기고 불필요한 부분은 제거한, 최종적인 가중치 집합을 결정</p>
<ul>
<li>추출된 추상적 특징을 구체적인 가중치 값으로 매핑하여, 최종 모델에 적용</li>
</ul>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Pruned Network 완전 학습:</strong>  </p>
<ul>
<li>위 과정을 통해 생성된 가지치기된 네트워크(“Pruned Network”)는 이후 완전히 학습된다.</li>
</ul>
</li>
<li><p><strong>강화 학습을 통한 최적 탐색:</strong>  </p>
<ul>
<li>계산 제약 조건 하에서 최적의 가지치기 구조를 찾기 위해, 강화 학습(RL) 방법을 사용하여 가지치기된 네트워크의 구성(예: 어떤 채널을 남길지 등)을 탐색한다.</li>
<li>이 과정에서 그래프 어그리게이터와 FC 레이어의 가중치는 업데이트되지 않고 고정된 상태로 유지된다.</li>
</ul>
</li>
</ol>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>네트워크를 그래프로 해석한다:</strong>  <ul>
<li>신경망의 각 구성 요소를 노드로 보고, 이들 간의 관계를 통해 전체 모델을 그래프로 표현한다. </li>
</ul>
</li>
<li><strong>그래프 어그리게이터 $G$와 FC 레이어를 사용하여 가지치기된 가중치를 생성한다:</strong>  <ul>
<li>$G$는 각 노드(레이어)의 임베딩 특징을 집계하여, 요약 정보를 생성한다.</li>
<li>각 FC 레이어는 이 요약 정보를 바탕으로, 해당 레이어에 적용할 가지치기된 가중치를 생성한다. </li>
</ul>
</li>
<li><strong>강화 학습을 통해 최적의 가지치기 구조를 탐색한다:</strong>  <ul>
<li>계산 제약 하에서 최적의 모델 구조를 찾기 위해, 강화 학습 기법을 적용하여 가지치기된 네트워크의 구성을 결정한다.</li>
</ul>
</li>
</ul>
<p>결과적으로, Graph Neural Network 기반 가지치기 방법은 신경망 전체를 그래프로 보고, 그래프 어그리게이터와 FC 레이어를 통해 가지치기된 네트워크를 생성한 후, 강화 학습을 통해 최적의 구조를 탐색하여 모델을 경량화한다. </p>
<hr>
<p>이와 같이, 이 방법은 기존의 가지치기 방식과 달리 네트워크의 구조적 관계를 고려하여 효과적으로 불필요한 구성 요소를 제거한다. </p>
<h2 id="64-reinforment-learning-based-pruning">6.4 Reinforment Learning based Pruning</h2>
<ul>
<li><p><strong>강화 학습이란:</strong><br>에이전트가 환경과 상호작용하며 어떤 행동을 선택하고, 그에 따른 보상을 받아 최적의 정책을 학습하는 방법이다.</p>
</li>
<li><p><strong>pruning에서의 강화 학습:</strong>  </p>
<ul>
<li>신경망의 각 레이어(또는 구성 요소)에 대해 어떤 pruning(제거할 가중치 또는 채널)를 적용할지 결정하는 문제를 강화 학습으로 해결한다.</li>
<li>에이전트는 각 레이어의 상태를 관찰한 후, 특정 행동(예: 얼마만큼 가지치기를 할지)을 선택한다.</li>
<li>이렇게 선택된 행동들이 모델의 최종 성능과 계산 복잡도에 미치는 영향을 평가하여 최적의 가지치기 정책을 찾는다.</li>
</ul>
</li>
</ul>
<h4 id="보상-함수reward-function">보상 함수(Reward Function)</h4>
<blockquote>
<p>강화 학습에서 보상 함수는 에이전트의 선택(행동)이 얼마나 좋은지를 평가하는 기준이다</p>
</blockquote>
<p>에이전트는 보상 함수를 최대화하도록 정책을 학습한다.</p>
<ul>
<li><p><strong>목표:</strong><br>가지치기를 통해 모델의 <strong>오류(Error)</strong>를 최소화하면서, 동시에 <strong>계산 복잡도(FLOPs)</strong>나 <strong>파라미터 수</strong>를 줄이는 것을 목표로 한다.</p>
</li>
<li><p><strong>보상 함수 정의:</strong><br>에이전트가 선택한 pruning 행동의 결과에 따라 보상이 주어지며, 보상 함수는 다음과 같이 구성된다:</p>
<blockquote>
<p>$R_{\text{FLOPs}} = -\text{Error} \cdot \log(\text{FLOPs})$
$R_{\text{Param}} = -\text{Error} \cdot \log(#\text{Param}).$</p>
</blockquote>
<ul>
<li>이 보상 함수는, 에러(오류)가 낮아지면서 동시에 계산 복잡도(또는 파라미터 수)가 줄어드는 행동을 에이전트가 선택하도록 유도한다.<blockquote>
<p>에이전트는 단순히 가지치기를 많이 해서 모델을 작게 만드는 것(계산 복잡도 감소)만을 목표로 하지 않고, 모델 성능(정확도)도 유지하도록 학습</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h4 id="강화-학습-알고리즘-적용">강화 학습 알고리즘 적용</h4>
<ul>
<li><p><strong>알고리즘 사용:</strong>  </p>
<ul>
<li>예를 들어, <strong>딥 결정론적 정책 경사법(DDPG)</strong>과 같은 강화 학습 알고리즘을 사용하여, 각 레이어에 대해 가지치기 정책을 학습한다.</li>
</ul>
</li>
<li><p><strong>에이전트의 역할:</strong>  </p>
<ul>
<li>에이전트는 각 레이어의 상태(예: 현재 레이어의 가중치 분포, 중요도 등)를 관찰한 후, 어떤 pruning 행동을 취할지를 결정한다.</li>
<li>한 레이어에서의 결정이 끝나면, 에이전트는 다음 레이어로 이동해 또 다른 가지치기 행동을 선택하고, 이를 모든 레이어에 적용할 때까지 반복한다.</li>
</ul>
</li>
</ul>
<h4 id="전체-과정-흐름">전체 과정 흐름</h4>
<p><strong>1. 에이전트 결정:</strong></p>
<blockquote>
<ul>
<li>각 레이어의 상태를 보고, 가지치기 행동(어느 정도 요소를 제거할지)을 결정한다.</li>
</ul>
</blockquote>
<p><strong>2. 보상 함수 평가:</strong></p>
<blockquote>
<ul>
<li>결정된 행동으로 인한 결과(모델의 예측 에러와 계산 복잡도 변화)를 보상 함수가 평가한다.</li>
<li>이 평가 결과를 바탕으로, 에이전트는 정책을 갱신(학습)하여 다음 번 행동을 조정한다.</li>
</ul>
</blockquote>
<p><strong>3. 최적의 가지치기 구조 도출:</strong></p>
<blockquote>
<ul>
<li>반복 학습을 통해, 에이전트는 장기적으로 모델의 오류를 최소화하면서도 계산 비용을 줄이는(모델을 압축하는) 최적의 가지치기 정책을 습득한다.</li>
</ul>
</blockquote>
<h4 id="전체적인-효과">전체적인 효과</h4>
<ul>
<li><p><strong>효율적인 모델 압축:</strong><br>강화 학습을 통해 최적의 가지치기 구조를 자동으로 탐색하므로, 가지치기 후에도 모델의 오류는 최소화되면서 계산 복잡도와 파라미터 수를 줄일 수 있다.</p>
</li>
<li><p><strong>재학습 비용 감소:</strong><br>모델 전체를 재학습하지 않고도, 최적화된 가지치기 정책에 따라 모델을 압축할 수 있다.</p>
</li>
<li><p><strong>동적 최적화:</strong><br>입력 데이터와 네트워크 상태에 따라 가지치기 정책을 동적으로 결정함으로써, 다양한 모델 구성에 효과적으로 대응할 수 있다.</p>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li>강화 학습 기반 가지치기는 에이전트가 각 레이어에서 최적의 가지치기 행동을 결정하도록 학습시키며,</li>
<li>보상 함수는 모델의 오류와 계산 복잡도(또는 파라미터 수)를 결합하여, 에러를 최소화하면서도 모델 압축 효과를 극대화하는 방향으로 유도한다.</li>
<li>이를 통해, 모델을 효율적으로 압축하고 재학습 비용을 크게 줄일 수 있다.</li>
</ul>
<hr>
<p>이와 같이, 강화 학습 기반 가지치기는 에이전트가 각 레이어에서 가지치기 정책을 자동으로 선택하도록 하여, 전체 모델의 성능 저하 없이 경량화와 계산 효율성을 달성할 수 있도록 설계된다. </p>
<h1 id="7-a-comprehensive-comparative-analysis">7. A comprehensive Comparative Analysis</h1>
<p>흔히 사용되는 모델을 대상으로 몇몇 pruning 방법을 비교한다</p>
<h2 id="71-unstructured-vs-structured-pruning">7.1 Unstructured vs. Structured Pruning</h2>
<h4 id="unstructured-pruning">Unstructured Pruning</h4>
<ul>
<li><p><strong>어떻게 제거하나:</strong>  </p>
<ul>
<li>모델 내 어디든, 가중치 단위로 개별적으로(remove weights anywhere) 제거한다.</li>
<li>즉, 중요도가 낮은 특정 가중치들만 골라서 0으로 만든다(마스크를 씌워 제거).</li>
</ul>
</li>
<li><p><strong>장점:</strong>  </p>
<ul>
<li>높은 제거 비율(Prune Ratio)에서도 정확도 손실을 작게 유지할 수 있는 경우가 많다.  </li>
<li>세밀하게(개별 가중치 단위) 조정하므로, 비구조적 방식이 높은 유연성을 가진다.</li>
</ul>
</li>
<li><p><strong>단점:</strong>  </p>
<ul>
<li>가중치가 불규칙하게 제거되므로, 실제 하드웨어 가속(실제로 연산량과 메모리 사용을 줄이는 것)을 위해서는 특별한 라이브러리나 지원이 필요하다.  </li>
<li>구조적으로는 여전히 &quot;밀집된(dense) 형태&quot;라서, 기본 연산에서 직접적인 속도 향상을 얻기 어렵다.</li>
</ul>
</li>
</ul>
<h4 id="structured-pruning">Structured Pruning</h4>
<ul>
<li><p><strong>어떻게 제거하나:</strong>  </p>
<ul>
<li>필터나 채널 등, 모델 내 <strong>완전한 구조 단위</strong>(entire filters or channels)를 제거한다.</li>
<li>예: CNN에서 특정 필터(또는 채널) 전체를 통째로 없앤다.</li>
</ul>
</li>
<li><p><strong>장점:</strong>  </p>
<ul>
<li>제거 후 모델이 규칙적인(좁아진, reduced) 형태가 되므로, 하드웨어나 딥러닝 라이브러리에서 자연스럽게 속도 향상을 누릴 수 있다.  </li>
<li>추가 라이브러리 지원 없이도 연산량이 직접적으로 줄어든다.</li>
</ul>
</li>
<li><p><strong>단점:</strong>  </p>
<ul>
<li>동일한 가지치기 비율에서, 비구조적 가지치기 대비 정확도 손실이 좀 더 크게 나타날 수 있다.  </li>
<li>채널이나 필터 단위를 통째로 제거하므로, 정밀한(세밀한) 가지치기가 어렵다.</li>
</ul>
</li>
</ul>
<h2 id="3-핵심-비교-포인트">3. 핵심 비교 포인트</h2>
<ol>
<li><p><strong>정확도 변화:</strong>  </p>
<ul>
<li>비구조적 가지치기는 미세 조정이 가능해서, 높은 제거 비율에서도 정확도를 더 잘 유지하는 편이다.  </li>
<li>구조적 가지치기는 채널이나 필터 단위로 제거되어, 같은 비율에서 정확도 손실이 클 수 있다.</li>
</ul>
</li>
<li><p><strong>실제 가속 효과:</strong>  </p>
<ul>
<li>비구조적 가지치기는 불규칙한 희소성(irregular sparsity)이 생겨, 기본 라이브러리나 하드웨어에서 직접 속도 향상이 작다.  </li>
<li>구조적 가지치기는 필터나 채널 단위로 제거되므로, 실제 연산량(FLOPs)이 효과적으로 줄어든다.</li>
</ul>
</li>
</ol>
<hr>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>Unstructured Pruning:</strong>  <ul>
<li>가중치를 선택적으로 제거 → 정확도 유지에 유리하지만, 실제 연산 가속에 특별 지원 필요.</li>
</ul>
</li>
<li><strong>Structured Pruning:</strong>  <ul>
<li>채널/필터 등 완전한 구조 단위로 제거 → 실제 계산량 감소 효과가 큼, 그러나 높은 비율에서 정확도 손실이 클 수 있다.</li>
</ul>
</li>
</ul>
<h2 id="72-one-shot-vs-iterative-pruning">7.2 One-shot vs. Iterative pruning</h2>
<p>pruning을 한 번에 수행하는 원샷(one-shot) 방식과, 여러 번 반복하는 점진적(iterative) 방식의 차이에 대해 설명한다.</p>
<h4 id="원샷-가지치기-one-shot-pruning">원샷 가지치기 (One-shot Pruning)</h4>
<ul>
<li><strong>원칙:</strong>  <ul>
<li>네트워크의 모든 가중치(또는 필터, 채널 등)에 대해 한 번만 점수를 계산하고, 그 점수를 기준으로 목표 pruning 비율에 도달하도록 한 번에 제거한다.</li>
</ul>
</li>
<li><strong>장점:</strong>  <ul>
<li>계산 비용이 적고, 가지치기 과정이 단순하다.</li>
<li>빠르게 모델 압축을 시도할 수 있다.</li>
</ul>
</li>
<li><strong>단점:</strong>  <ul>
<li>초기 점수 계산 시, 아직 가중치의 진정한 중요도가 명확하게 드러나지 않을 수 있다.</li>
<li>중요한 가중치라도 초기에는 낮게 평가될 위험이 있다.</li>
<li>일부 연구에서는 원샷 가지치기가 초기 레이어의 “붕괴(early layer collapse)” 현상을 일으켜, 모델 정확도가 크게 떨어질 수 있다고 지적한다.<blockquote>
<p><strong>Layer collapse</strong>
모델의 특정 레이어(특히 초반 레이어)에서 너무 많은 가중치나 뉴런이 한꺼번에 제거되어, 해당 레이어의 출력이 급격히 감소하거나 아예 0에 가까워지는 현상</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h4 id="점진적-가지치기-iterative-pruning">점진적 가지치기 (Iterative Pruning)</h4>
<ul>
<li><strong>원칙:</strong>  <ul>
<li>가지치기를 여러 단계로 나누어 수행한다.</li>
<li>각 단계마다 가중치의 점수를 계산하고, 일부만 제거한 후, 짧은 시간 동안 재학습(또는 fine-tuning)을 거친 후 다시 점수를 업데이트하고 추가로 제거한다.</li>
</ul>
</li>
<li><strong>장점:</strong>  <ul>
<li>가지치기를 여러 번 반복하면서 점차적으로 모델을 압축하므로, 중요한 가중치들이 시간이 지나면서 제대로 평가된다.</li>
<li>단계별 재학습을 통해 모델이 가지치기로 인한 성능 저하를 보완할 수 있다.</li>
<li>결과적으로, 점진적 가지치기는 높은 가지치기 비율에서도 전체 성능을 유지하거나 더 좋은 성능을 얻을 가능성이 높다.</li>
</ul>
</li>
<li><strong>단점:</strong>  <ul>
<li>가지치기-재학습 과정을 여러 번 반복하기 때문에 계산 비용과 시간이 많이 소요된다.</li>
</ul>
</li>
</ul>
<h4 id="비교-및-결론">비교 및 결론</h4>
<ul>
<li><p><strong>계산 비용:</strong>  </p>
<ul>
<li>원샷 가지치기는 한 번에 이루어지므로 계산 비용이 낮지만, 점진적 가지치기는 여러 단계를 거치기 때문에 계산 비용이 높다.</li>
</ul>
</li>
<li><p><strong>성능 유지:</strong>  </p>
<ul>
<li>원샷 가지치기는 초기 점수에 의존하므로 잘못된 제거로 인해 성능이 크게 떨어질 수 있다.</li>
<li>점진적 가지치기는 반복적인 재학습을 통해 중요한 가중치와 덜 중요한 가중치를 보다 정확하게 구분하므로, 전체 성능을 더 잘 유지할 수 있다.</li>
</ul>
</li>
<li><p><strong>실험 결과:</strong>  </p>
<ul>
<li>일부 연구에서는 CIFAR-10, VGG-16, ResNet-32 등의 모델에서 원샷과 점진적 가지치기를 비교했으며, 특정 상황에서는 두 방식이 유사한 성능을 보이기도 하지만, WikiText2와 같이 대규모 데이터셋에서는 점진적 가지치기가 전반적으로 더 우수한 성능을 나타낸다고 보고된다.</li>
<li>그림 7 (a–c)는 점진적 가지치기가 더 나은 성능을 보이는 경우를, 그림 7 (d)는 원샷 가지치기의 결과를 시사한다.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>원샷 가지치기:</strong>  <ul>
<li>한 번 점수를 계산하고 한 번에 제거한다.</li>
<li>빠르고 간단하지만, 초기 점수의 부정확성으로 성능에 문제가 생길 수 있다. </li>
</ul>
</li>
<li><strong>점진적 가지치기:</strong>  <ul>
<li>여러 단계에 걸쳐 점수 계산, 가지치기, 재학습을 반복한다.</li>
<li>계산 비용은 높으나, 중요한 가중치를 보다 신중하게 선택하여 모델 성능을 유지하거나 개선한다.</li>
</ul>
</li>
</ul>
<p>따라서, 어느 방식이 적합한지는 모델의 규모, 계산 자원, 그리고 요구하는 최종 성능에 따라 달라진다. </p>
<hr>
<p>이와 같이, 원샷 가지치기와 점진적 가지치기의 차이는 한 번에 모든 것을 처리하는지, 여러 번 반복하면서 점진적으로 최적의 구조를 찾아가는지에 달려있으며, 각 방식은 장단점이 존재한다. </p>
<h2 id="73-data-free-vs-data-driven-pruning">7.3 Data-free vs. Data-driven Pruning</h2>
<h4 id="가지치기-방식의-분류">가지치기 방식의 분류</h4>
<ul>
<li><p><strong>Data-free Pruning:</strong>  </p>
<ul>
<li><strong>의미:</strong><br>가지치기 과정에서 학습 데이터나 실제 입력 데이터를 사용하지 않고, 오직 모델의 초기화된 가중치나 구조 정보만을 기반으로 가지치기를 수행한다.  </li>
<li><strong>예시:</strong><br>SynFlow, 랜덤 방식, 크기 기반 방식 등이 이에 해당한다.</li>
</ul>
</li>
<li><p><strong>Data-driven Pruning:</strong>  </p>
<ul>
<li><strong>의미:</strong><br>가지치기 과정에서 실제 학습 데이터를 사용하여, 가중치나 필터의 중요도(점수)를 평가하고 가지치기를 수행한다.  </li>
<li><strong>예시:</strong><br>SNIP, GraSP, Wanda, LLM-Pruner, LoRA Pruner 등은 데이터를 활용해 가지치기 후보를 결정한다.</li>
</ul>
</li>
</ul>
<h4 id="data-driven-pruning의-필요성">Data-driven Pruning의 필요성</h4>
<ul>
<li>좋은 서브네트워크를 찾기 위해서는, 일반적으로 실제 데이터에 의한 평가가 중요하다고 여겨진다.</li>
<li>대부분의 가지치기 연구는 데이터를 활용해 모델을 평가하고 가지치기 결정을 내리는 <strong>데이터-driven 방식</strong>을 사용한다.</li>
<li>그러나 데이터-프리 방식 역시 일부 연구에서 사용되며, 반드시 데이터에 의존하지 않아도 어느 정도 효과를 낼 수 있음을 보여준다.</li>
</ul>
<h2 id="3-실험-비교">3. 실험 비교</h2>
<ul>
<li><p><strong>PBT 방식:</strong>  </p>
<ul>
<li>PBT(Pruning Before Training)를 적용할 때, SynFlow와 SNIP와 같은 방법을 사용해 CIFAR-10/100 및 ImageNet에서 VGG-16, ResNet-32/50 모델을 가지치기한다.  </li>
<li>실험 결과, <strong>SynFlow와 SNIP는 유사한 수준의 가지치기 효과를 보이며, SynFlow가 GraSP보다 상당히 우수한 성능을 보인다.</strong>  </li>
<li>이는 PBT 방식의 효과가 반드시 데이터 사용 여부에 전적으로 의존하지 않을 수 있음을 시사한다.
<img src="https://velog.velcdn.com/images/min-soku/post/0255a7c0-4f7e-4246-88ce-945cf83a762c/image.png" alt=""></li>
</ul>
</li>
<li><p><strong>PAT 방식:</strong>  </p>
<ul>
<li>PAT(Pruning After Training)를 적용할 때는, 랜덤이나 L1/L2-노름 기반 방식 같은 데이터-프리 가지치기 방법과 Wanda, LLM-Pruner, LoRA Pruner 같은 데이터-드리븐 가지치기 방법을 비교한다.  </li>
<li>실험 결과(표 8 참조), 데이터-드리븐 방식이 대체로 데이터-프리 방식보다 더 좋은 성능(예: 높은 정확도, 낮은 펄플렉서티 등)을 보인다.
<img src="https://velog.velcdn.com/images/min-soku/post/44e51ddf-e0d9-418a-8038-95df5f4fb7f5/image.png" alt=""></li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li><strong>데이터 사용의 효과:</strong>  <ul>
<li>데이터-드리븐 가지치기는 실제 데이터를 활용해 모델의 성능에 미치는 영향을 구체적으로 평가할 수 있으므로, 가지치기 후에도 모델 성능 유지가 상대적으로 용이하다.</li>
</ul>
</li>
<li><strong>데이터-프리 방식의 장점:</strong>  <ul>
<li>데이터에 의존하지 않기 때문에, 학습 데이터가 제한적이거나 모델 초기 단계에서 빠르게 가지치기를 수행해야 하는 경우 유리할 수 있다.</li>
</ul>
</li>
<li><strong>선택 기준:</strong>  <ul>
<li>어느 방식을 사용할지는 모델의 특성, 사용 가능한 데이터의 양, 가지치기 후 성능 유지에 대한 요구 등에 따라 달라진다.</li>
<li>실험 결과에 따르면, 특히 PAT 방식에서는 데이터-드리븐 가지치기가 전반적으로 더 우수한 성능을 보인다고 시사한다.</li>
</ul>
</li>
</ul>
<hr>
<p>이와 같이, &quot;Data-free vs. Data-driven Pruning&quot; 섹션은 pruning 방법을 데이터 사용 여부에 따라 구분하고, 각각의 방식이 가지는 장단점과 실험적 결과를 설명한다. 데이터-드리븐 가지치기는 실제 데이터를 사용해 모델의 중요도를 평가하므로, 성능 유지 측면에서 유리한 반면, 데이터-프리 가지치기는 데이터에 의존하지 않아 빠른 처리가 가능하다는 점을 강조한다.</p>
<h2 id="74-pruning-on-initialized-vs-pre-trained-weights">7.4 Pruning on Initialized vs. Pre-trained Weights</h2>
<h3 id="무작위-초기화된-가중치-기반-프루닝-initialization-based-pruning">무작위 초기화된 가중치 기반 프루닝 (Initialization-based Pruning)</h3>
<p><strong>작동 원리</strong></p>
<ul>
<li><strong>과정</strong>:  <ul>
<li>모델의 학습 전 단계에서, 모든 가중치가 무작위로 초기화된 상태에서 프루닝 기법(예: SNIP, GraSP, SynFlow)을 적용합니다.</li>
<li>프루닝 대상이 되는 가중치(또는 연결)는 미리 정의된 기준(예: 기울기, 손실 변화 등)에 따라 선택됩니다.<blockquote>
<p>초기화 단계에서 중요한 서브네트워크(Winning Ticket)가 이미 존재할 수 있음을 가정하고 데이터 없이, 또는 최소한의 데이터 정보만을 사용하여 프루닝을 수행한다</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<ul>
<li><strong>프루닝 후 처리</strong>:  <ul>
<li>선택된 가중치는 제거되거나, 가중치의 역할이 0인 마스크 형태로 유지됩니다.</li>
<li>프루닝 후에는 프루닝된 서브네트워크를 별도의 학습 단계에서 다시 학습(fine-tuning)하거나, 처음부터 다시 학습시키는 경우도 있습니다.</li>
</ul>
</li>
</ul>
<h4 id="특징-및-장점">특징 및 장점</h4>
<ul>
<li><p><strong>강인성(Robustness)</strong>:  </p>
<ul>
<li>프루닝 후 마스크의 위치를 섞거나, 가중치를 재초기화하는 등의 조작(ablations)을 가해도 서브네트워크의 성능이 크게 떨어지지 않는 경우가 많습니다.  </li>
<li>이는 무작위 초기화 시에 가중치 분포가 상대적으로 균일하게 유지되며, 프루닝 과정에서 제거되는 가중치들이 전체적인 구조에 미치는 영향이 작기 때문입니다.<blockquote>
<p>pruning 후 생성된 구조적 패턴 자체가 이후 학습에서 중요한 역할을 하기 때문에, 개별 가중치의 초기 값은 상대적으로 덜 중요하게 됩니다</p>
</blockquote>
</li>
</ul>
</li>
<li><p><strong>복잡도 감소</strong>:  </p>
<ul>
<li>학습 전에 바로 불필요한 가중치를 제거하므로, 전체 모델 구조가 간소화되어 학습 과정에 필요한 연산량이 줄어들 수 있습니다.</li>
</ul>
</li>
</ul>
<h4 id="단점-및-고려-사항">단점 및 고려 사항</h4>
<ul>
<li><strong>초기 학습 성능 한계</strong>:  <ul>
<li>사전 학습 단계 없이 프루닝을 진행하기 때문에, 원래 학습된 네트워크보다 최적의 성능에 도달하는 데 추가적인 학습 노력이 필요할 수 있습니다.</li>
</ul>
</li>
<li><strong>예측 가능성 부족</strong>:  <ul>
<li>무작위 초기화 기반 방법은 동일한 환경이라 하더라도 여러 번 반복 시 결과가 다르게 나타날 가능성이 있으며, 일관된 성능 보장이 어려울 수 있습니다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="사전-학습된-가중치-기반-프루닝-pre-trained-weight-based-pruning">사전 학습된 가중치 기반 프루닝 (Pre-trained Weight-based Pruning)</h3>
<h4 id="작동-원리">작동 원리</h4>
<ul>
<li><p><strong>과정</strong>:  </p>
<ul>
<li>이미 학습된, 즉 데이터에 대해 최적화된 모델의 가중치를 활용하여 프루닝을 진행합니다.</li>
<li>예를 들어, Lottery Ticket Hypothesis(LTH)에서는 학습된 네트워크에서 중요도가 낮은 가중치를 제거하고, 남은 가중치를 유지하여 동일한 초기화로 재학습하는 전략을 취합니다.</li>
</ul>
</li>
<li><p><strong>프루닝 후 처리</strong>:  </p>
<ul>
<li>프루닝된 모델은 보통 재학습(fine-tuning)을 거치며, 이 과정에서 사전 학습된 가중치에 담긴 정보를 최대한 보존하려고 합니다.</li>
</ul>
</li>
</ul>
<h4 id="특징-및-장점-1">특징 및 장점</h4>
<ul>
<li><p><strong>학습된 정보 활용</strong>:  </p>
<ul>
<li>사전 학습을 통해 이미 데이터의 패턴과 특징이 잘 반영되어 있는 가중치 정보를 활용하기 때문에, 초기 모델보다 높은 성능을 기대할 수 있습니다.</li>
<li>특히, 가중치의 “위치” 정보(어떤 부분에 위치하는지가 중요한 정보)가 중요한 역할을 합니다.</li>
</ul>
</li>
<li><p><strong>정밀한 프루닝</strong>:  </p>
<ul>
<li>가중치의 중요도를 평가하는 기준(예: 가중치 절대값, 기울기, 손실 변화)을 보다 정교하게 적용할 수 있어, 보다 미세한 프루닝이 가능해집니다.</li>
</ul>
</li>
</ul>
<h4 id="단점-및-고려-사항-1">단점 및 고려 사항</h4>
<ul>
<li><p><strong>민감도 문제</strong>:  </p>
<ul>
<li>사전 학습된 가중치에는 이미 최적화된 정보가 담겨 있기 때문에, 프루닝 과정에서 가중치의 위치나 값이 변경되면 전체 모델 성능에 큰 영향을 줄 수 있습니다.</li>
<li>Qiu와 Suda에서는 가중치를 “위치”와 “정확한 값” 두 가지 관점에서 분석하며, 특히 “위치” 정보가 변경되면 성능 저하를 불러올 수 있다고 분석합니다.</li>
</ul>
</li>
<li><p><strong>프루닝 후 재학습 비용</strong>:  </p>
<ul>
<li>사전 학습된 상태에서 프루닝한 후, 해당 정보에 맞춰 모델을 재조정해야 하므로 재학습 비용이 증가할 수 있습니다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="모델-유형에-따른-적용-차이">모델 유형에 따른 적용 차이</h3>
<h4 id="cnn-convolutional-neural-networks">CNN (Convolutional Neural Networks)</h4>
<ul>
<li><p><strong>무작위 초기화 기반 프루닝</strong>:  </p>
<ul>
<li>CNN에서는 무작위 초기화된 가중치로 프루닝을 수행해도 어느 정도 강인한 서브네트워크가 도출될 수 있음.</li>
<li>가중치 분포가 비교적 균일하며, 불필요한 가중치를 제거하더라도 구조적 안정성이 유지됨.</li>
</ul>
</li>
<li><p><strong>사전 학습 기반 프루닝</strong>:  </p>
<ul>
<li>CNN에서도 사전 학습된 가중치를 활용하면 좋은 성능을 얻을 수 있으나, 가중치의 재배치나 변화에 민감해질 수 있음.</li>
</ul>
</li>
</ul>
<h4 id="트랜스포머transformers">트랜스포머(Transformers)</h4>
<ul>
<li><p><strong>필수적인 사전 학습</strong>:  </p>
<ul>
<li>트랜스포머 모델은 대개 자기지도 학습(self-supervised learning) 단계를 거쳐야 하는데, 이는 모델의 성능 향상을 위해 필수적입니다.</li>
<li>따라서 트랜스포머의 프루닝은 보통 사전 학습된 모델을 대상으로 진행합니다.</li>
</ul>
</li>
<li><p><strong>실험 결과</strong>:  </p>
<ul>
<li>일부 연구 결과(PBT 방식, 예: GraSP [56])에서는 사전 학습된 가중치를 사용했어도 항상 Top-1 정확도가 향상되지는 않았습니다.</li>
<li>반면, PAT 방식(PAT: 사전 학습 후 프루닝; 예: WDPruning [159])에서는 사전 학습이 성능 개선에 더 큰 기여를 하는 것으로 나타났습니다.</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<p><strong>요약</strong></p>
</blockquote>
<ul>
<li><strong>무작위 초기화 기반 프루닝</strong><ul>
<li><strong>장점</strong>:  <ul>
<li>프루닝 후 다양한 변화(마스크 재배치, 가중치 재초기화 등)에 대해 강인함  </li>
<li>모델 구조가 간소화되어 학습과 추론 효율이 개선될 가능성이 있음</li>
</ul>
</li>
<li><strong>단점</strong>:  <ul>
<li>초기 학습 단계에서 최적 성능 달성까지 추가 학습 필요  </li>
<li>결과의 일관성이 다소 낮을 수 있음<blockquote>
</blockquote>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>사전 학습된 가중치 기반 프루닝</strong><ul>
<li><strong>장점</strong>:  <ul>
<li>이미 최적화된 가중치 정보를 활용하여 보다 정밀한 프루닝 가능  </li>
<li>데이터에서 학습된 유용한 패턴을 보존할 수 있음</li>
</ul>
</li>
<li><strong>단점</strong>:  <ul>
<li>가중치의 위치나 값 변화에 민감하여, 프루닝 후 재학습이나 조정 비용 증가  </li>
<li>민감한 가중치 정보 손실 시 전체 모델 성능 저하 우려</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong>
프루닝 기법 선택은 모델의 구조(CNN vs. 트랜스포머), 학습 상태(초기화 vs. 사전 학습), 그리고 프루닝 후 재학습 과정에 따라 달라집니다.  </p>
</blockquote>
<ul>
<li><strong>무작위 초기화 기반 방식</strong>은 강인성 측면에서 유리하지만, 초기 성능 면에서 한계가 있을 수 있습니다.  </li>
<li><strong>사전 학습 기반 방식</strong>은 정밀한 프루닝을 가능하게 하지만, 변화에 민감하여 재학습 비용이 증가할 수 있습니다.<blockquote>
</blockquote>
따라서, 각각의 프루닝 기법은 적용 대상 모델의 특성과 최종 목표(예: 추론 시간, 모델 경량화, 성능 유지 등)를 고려하여 선택해야 합니다.</li>
</ul>
<h2 id="75-global-vs-local-pruning">7.5 Global vs. Local Pruning</h2>
<h3 id="global-pruning">Global Pruning</h3>
<h4 id="정의-및-작동-원리">정의 및 작동 원리</h4>
<ul>
<li><p><strong>정의</strong>:  
네트워크 전체에서 모든 레이어의 가중치나 구조 요소를 하나의 통합된 기준으로 평가하여, 중요도가 낮은 요소부터 순서대로 제거하는 방식입니다.</p>
</li>
<li><p><strong>작동 원리</strong>:  </p>
<ul>
<li>전체 네트워크의 각 요소(가중치, 채널 등)에 대해 중요도(예: 가중치 절대값, 기울기, 손실 변화 등)를 산출함  </li>
<li>레이어별로 개별 비율을 미리 정하지 않고, 전체 순위를 매겨 가장 중요도가 낮은 요소들을 제거함  </li>
<li>이 과정에서 각 레이어 간 가중치의 스케일 차이를 고려하여 정규화 등의 추가 처리가 필요할 수 있음</li>
</ul>
</li>
</ul>
<h4 id="장점-및-단점">장점 및 단점</h4>
<ul>
<li><p><strong>장점</strong>:  </p>
<ul>
<li><strong>유연성</strong>: 전체 네트워크를 고려하여, 불필요한 요소가 많은 레이어에서는 더 많은 프루닝을 적용할 수 있음  </li>
<li><strong>구조 최적화</strong>: 네트워크 전반의 중복이나 불필요한 부분을 집중적으로 제거하여, 효율적인 구조를 도출할 수 있음</li>
</ul>
</li>
<li><p><strong>단점</strong>:  </p>
<ul>
<li><strong>스케일 문제</strong>: 네트워크 내 레이어마다 가중치 분포가 상이할 경우, 단순 비교 시 일부 레이어의 큰 값이 중요도를 왜곡할 위험이 있음  </li>
<li><strong>정규화 필요성</strong>: 레이어 간 스케일 차이를 보정하기 위한 정규화 기법이 추가로 요구됨</li>
</ul>
</li>
</ul>
<hr>
<h3 id="local-pruning">Local Pruning</h3>
<h4 id="정의-및-작동-원리-1">정의 및 작동 원리</h4>
<ul>
<li><p><strong>정의</strong>:  
각 레이어별로 미리 정해진 고정 프루닝 비율(예: 해당 레이어에서 30%의 가중치를 제거)을 적용하는 방식입니다.</p>
</li>
<li><p><strong>작동 원리</strong>:  </p>
<ul>
<li>개별 레이어 내에서 가중치나 필터의 중요도를 산출하고, 해당 레이어 내에서 사전에 설정한 제거 비율에 따라 낮은 중요도를 가진 요소를 제거함  </li>
<li>레이어 단위로 프루닝이 이루어지므로, 전체 네트워크의 통합적 평가보다는 각 레이어 내부의 상대적인 중요도에 초점을 맞춤</li>
</ul>
</li>
</ul>
<h4 id="장점-및-단점-1">장점 및 단점</h4>
<ul>
<li><p><strong>장점</strong>:  </p>
<ul>
<li><strong>구현의 단순성</strong>: 각 레이어에 동일한 비율을 적용하므로 알고리즘이 직관적이고, 적용하기 쉬움  </li>
<li><strong>스케일 문제 완화</strong>: 각 레이어 내부에서 처리되기 때문에 레이어 간 가중치 크기 차이의 영향을 상대적으로 줄일 수 있음</li>
</ul>
</li>
<li><p><strong>단점</strong>:  </p>
<ul>
<li><strong>비효율적 프루닝 가능성</strong>: 모든 레이어에 동일한 비율을 적용하면, 실제로 더 많이 제거해도 되는 레이어와 그렇지 않은 레이어의 차이를 반영하지 못할 수 있음  </li>
<li><strong>최적의 성능 미보장</strong>: 사전에 정해진 고정 비율이 네트워크의 최적 구조를 보장하지 않을 수 있음</li>
</ul>
</li>
</ul>
<hr>
<h3 id="대규모-언어-모델llm에서의-적용-이슈">대규모 언어 모델(LLM)에서의 적용 이슈</h3>
<ul>
<li><p><strong>LLM의 특성</strong>:  </p>
<ul>
<li>LLM은 수십억 개 이상의 파라미터를 가지며, 각 레이어 간에 가중치 크기(스케일)나 분포의 차이가 매우 큰 경우가 많습니다.</li>
</ul>
</li>
<li><p><strong>Global Pruning의 문제점</strong>:  </p>
<ul>
<li>네트워크 전체에서 중요도를 산출할 때, 일부 레이어의 가중치 값이 다른 레이어보다 월등히 크면 그 요소들이 과도하게 중요하게 평가될 위험이 있음</li>
<li>스케일 차이를 보정하기 위한 정규화가 필요함</li>
</ul>
</li>
<li><p><strong>Local Pruning의 한계</strong>:  </p>
<ul>
<li>모든 레이어에 고정된 비율을 적용하면, 레이어별 기여도 차이를 고려하지 못해 최적의 서브네트워크 구조를 얻기 어려울 수 있음</li>
<li>일부 레이어에서는 너무 많이 제거되거나, 반대로 필요 이상으로 유지되어 전체 성능에 부정적 영향을 줄 가능성이 있음</li>
</ul>
</li>
<li><p><strong>연구 동향</strong>:  </p>
<ul>
<li>최근 연구에서는 Global Pruning 기반 기법(SparseLLM 등)이 LLM의 레이어별 스케일 차이를 보다 잘 처리할 수 있는 방법으로 제안되고 있음</li>
<li>기존에는 주로 Local Pruning 방식이 사용되었으나, 이러한 한계를 극복하기 위한 새로운 접근법이 주목받고 있음</li>
</ul>
</li>
</ul>
<hr>
<h3 id="종합-비교-및-결론">종합 비교 및 결론</h3>
<ul>
<li><p><strong>Global Pruning</strong>  </p>
<ul>
<li><strong>장점</strong>:  <ul>
<li>네트워크 전체를 고려해 불필요한 요소를 집중적으로 제거할 수 있음  </li>
<li>각 레이어의 프루닝 정도를 자동으로 결정하여 유연한 구조 최적화가 가능함  </li>
</ul>
</li>
<li><strong>단점</strong>:  <ul>
<li>레이어 간 가중치 스케일 차이가 큰 경우, 중요도 평가에 왜곡이 발생할 수 있음  </li>
<li>추가적인 스케일 보정 및 정규화 기법이 필요함</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Local Pruning</strong>  </p>
<ul>
<li><strong>장점</strong>:  <ul>
<li>구현이 단순하며, 레이어 내부의 상대적 중요도를 기준으로 프루닝 적용 가능  </li>
<li>레이어 간 스케일 차이 문제를 상대적으로 회피할 수 있음</li>
</ul>
</li>
<li><strong>단점</strong>:  <ul>
<li>모든 레이어에 동일한 비율을 적용함으로써, 실제 최적 구조와 맞지 않을 수 있음  </li>
<li>고정된 프루닝 비율이 전체 네트워크의 성능 최적화를 보장하지 못할 수 있음</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>결론</strong>:  
  모델이나 데이터의 특성에 따라 Global Pruning과 Local Pruning은 각각 장단점을 보임.  </p>
</blockquote>
<ul>
<li><strong>대규모 언어 모델(LLM)</strong>에서는 레이어 간 가중치 스케일 차이가 크므로, Global Pruning 방식이 유리할 수 있으며, 이를 보완하기 위한 정규화 및 혼합 방식 연구가 진행되고 있다.  </li>
<li>프루닝 기법 선택은 모델 구조, 목표(경량화, 추론 속도 개선 등), 그리고 데이터 특성을 종합적으로 고려하여 결정해야 한다.</li>
</ul>
<hr>
<p>이와 같이 Global과 Local Pruning은 각각 고유의 장점과 단점을 가지며, 특히 LLM과 같이 대규모 모델에서는 두 방식의 특성을 충분히 고려한 최적의 프루닝 전략을 선택하는 것이 중요하다.</p>
<h2 id="76-training-from-scratch-vs-fine-tuning">7.6 Training from Scratch vs. Fine-tuning</h2>
<ul>
<li>프루닝(pruning) 후 모델의 성능을 회복하기 위하여 두 가지 주요 재학습 전략을 사용한다.  </li>
<li>해당 전략은 프루닝된 서브네트워크를 처음부터 학습하는 것(Training from Scratch)과 사전 학습된 가중치를 기반으로 재조정(파인튜닝, Fine-tuning)하는 것이다.  </li>
<li>또한, Weight Rewinding 기법을 사용하여 초기 학습 단계의 가중치를 다시 불러와 재학습하는 절충안도 존재한다.</li>
</ul>
<hr>
<h3 id="training-from-scratch">Training from Scratch</h3>
<h4 id="정의">정의</h4>
<ul>
<li>프루닝된 서브네트워크를 완전히 무작위 초기화한 후 처음부터 재학습한다.</li>
</ul>
<h4 id="특징-및-결과">특징 및 결과</h4>
<ul>
<li>무작위 초기화 후 재학습함으로써, 일부 연구에서는 사전 학습된 모델과 유사한 성능을 달성할 수 있다(예를 들어, Liu 등 [110]에서 ResNet, VGG 등이 그러하다).  </li>
<li>그러나 특정 연구에서는 Training from Scratch 방법이 프루닝 후 성능이 낮아진다고 보고한다(Li 등 [63] 등).  </li>
<li>프루닝 기법, 모델 아키텍처, 데이터셋 등에 따라 결과가 달라진다.</li>
</ul>
<hr>
<h3 id="fine-tuning">Fine-tuning</h3>
<h4 id="정의-1">정의</h4>
<ul>
<li>사전 학습된 모델의 가중치를 재사용하여 프루닝된 모델을 추가로 학습시킴으로써 성능을 회복한다.</li>
</ul>
<h4 id="특징-및-결과-1">특징 및 결과</h4>
<ul>
<li>Fine-tuning 방식은 대형 모델이나 복잡한 데이터셋(예: ImageNet)에서 높은 성능을 유지하는 데 유리하다.  </li>
<li>이미 사전 학습된 모델이 데이터에서 학습된 유용한 패턴을 보유하므로, 프루닝 후 빠르고 안정적인 성능 회복이 가능하다.  </li>
<li>재학습 과정에 추가 비용과 시간이 소요된다.</li>
</ul>
<hr>
<h3 id="weight-rewinding-절충안">Weight Rewinding (절충안)</h3>
<h4 id="정의-2">정의</h4>
<ul>
<li>프루닝 후 완전히 무작위로 초기화하는 대신, 초기 학습 시점의 특정 가중치(시드)를 다시 불러와서 재학습하는 방법이다.</li>
</ul>
<h4 id="특징-및-결과-2">특징 및 결과</h4>
<ul>
<li>초기 학습 단계에서의 정보를 부분적으로 보존한다.  </li>
<li>Fine-tuning 방식보다 높은 성능을 달성할 수 있는 경우가 있으며, 최신 연구에서는 이 기법으로 최종 정확도를 개선한다고 보고한다</li>
</ul>
<hr>
<h3 id="실험-결과-및-종합-비교">실험 결과 및 종합 비교</h3>
<ul>
<li><p>여러 모델(예: ResNet-152, DeiT-Tiny)과 데이터셋(CIFAR-100, ImageNet)에서 실험한 결과, Fine-tuning 방식이 Training from Scratch 방식보다 대체로 높은 정확도를 보인다.  </p>
</li>
<li><p>모델의 크기, 데이터셋의 복잡성, 프루닝 기법 등에 따라 상황이 달라진다.  </p>
<ul>
<li>작은 모델이나 특정 상황에서는 Training from Scratch이 유리할 수 있다.  </li>
<li>대형 모델 및 복잡한 데이터셋에서는 Fine-tuning 방식이 우세한 결과를 나타낸다.</li>
</ul>
</li>
<li><p>종합 비교 표는 다음과 같다.</p>
</li>
</ul>
<table>
<thead>
<tr>
<th>항목</th>
<th>Training from Scratch</th>
<th>Fine-tuning</th>
<th>Weight Rewinding</th>
</tr>
</thead>
<tbody><tr>
<td><strong>정의</strong></td>
<td>무작위 초기화 후 완전 재학습한다</td>
<td>사전 학습된 가중치로 재조정한다</td>
<td>초기 학습 시점의 가중치를 불러와 재학습한다</td>
</tr>
<tr>
<td><strong>장점</strong></td>
<td>일부 연구에서 사전 학습과 유사한 성능을 낸다</td>
<td>대형 모델/복잡 데이터셋에서 성능 회복에 유리하다</td>
<td>초기 정보를 보존하여 성능 개선 가능하다</td>
</tr>
<tr>
<td><strong>단점</strong></td>
<td>특정 상황에서는 성능 저하가 발생할 수 있다</td>
<td>재학습 비용과 시간이 추가로 소요된다</td>
<td>구현 및 관리가 다소 복잡할 수 있다</td>
</tr>
</tbody></table>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>프루닝 후 성능 회복 방법은 모델 아키텍처, 데이터셋의 크기 및 특성, 그리고 프루닝 기법에 따라 달라진다.  </li>
<li>대형 모델 및 복잡한 데이터셋에서는 Fine-tuning 방식이 일반적으로 우세하다.  </li>
<li>Weight Rewinding과 같은 절충 기법은 두 방식의 장점을 조합하여 최적의 성능을 얻을 수 있도록 한다.  </li>
<li>최종 선택은 실험과 검증을 통해 결정한다.</li>
</ul>
<h2 id="77-original-task-vs-transfer-pruning">7.7 Original Task vs. Transfer Pruning</h2>
<ul>
<li>전이 학습(Transfer Learning)은 기존에 학습된 모델을 재사용하여 새로운 작업에서 빠르게 학습하고 높은 성능을 달성한다.</li>
<li>프루닝된 모델을 전이 학습에 활용하거나, 프루닝 과정을 전이 시점에 맞추어 조정하는 것을 Transfer Pruning이라 한다.</li>
<li>본 내용은 원래 작업(Original Task) 기준으로 프루닝할 것인지, 아니면 전이 작업(Target Task)에 맞춰 프루닝할 것인지를 비교한다.</li>
</ul>
<hr>
<h3 id="transfer-pruning의-개념">Transfer Pruning의 개념</h3>
<ul>
<li>Transfer Pruning은 원래 작업에서 모델을 프루닝하여 서브네트워크를 찾은 후, 이를 새로운 작업에 전이한다.</li>
<li>두 가지 주요 유형으로 구분한다.<ul>
<li><strong>Task Transfer Pruning</strong><br>원래 데이터셋에서 프루닝한 서브네트워크를 새로운 데이터셋이나 과제에 전이한다.</li>
<li><strong>Architecture Transfer Pruning</strong><br>한 네트워크(예: ResNet-9)에서 찾은 프루닝 티켓(서브네트워크)을 동일 계열의 다른 모델(예: ResNet-50, ResNet-18)로 전이한다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="task-transfer-pruning">Task Transfer Pruning</h3>
<ul>
<li>원래 데이터셋에서 학습한 모델을 프루닝하여 서브네트워크를 도출한 후, 이를 다른 데이터셋(새 과제)에 전이한다.</li>
<li>연구에서는 원래 작업에서 높은 정확도를 달성한 서브네트워크라도, 전이 시에 성능 차이가 발생할 수 있음을 보고한다.</li>
<li>예를 들어, ImageNet이나 Places365에서 높은 정확도를 보이는 서브네트워크가 CIFAR-10 또는 CIFAR-100와 같은 작은 데이터셋에 전이되었을 때 성능 변화가 나타난다.</li>
<li>LLM(대규모 언어 모델) 분야에서는 프루닝된 모델을 다운스트림 과제에 직접 맞춰 프루닝할 때 성능이 더 크게 향상된다고 보고한다.</li>
</ul>
<hr>
<h3 id="architecture-transfer-pruning">Architecture Transfer Pruning</h3>
<ul>
<li>한 네트워크 아키텍처에서 찾은 서브네트워크를 동일 계열이지만 다른 구조(깊거나 얕은 모델)로 전이한다.</li>
<li>이를 통해 작은 네트워크에서 빠르게 찾은 프루닝 티켓(Winning Ticket)을 더 복잡한 모델로 손쉽게 옮길 수 있다.</li>
<li>예를 들어, ETTs(Elastic Ticket Transformations) 기법은 작은 네트워크에서 발견한 티켓을 더 큰 네트워크로 매핑한다.</li>
<li>이 방법은 전체 모델 학습 비용을 줄이고, 전이 시 자원 소모를 절감한다.<blockquote>
<p>작은 모델에서 프루닝을 통해 효율적인 서브네트워크를 빠르게 탐색한다.
찾아낸 서브네트워크를 더 크거나 다른 크기의 네트워크로 전이하여, 전반적인 모델 학습과 압축 비용을 절감</p>
</blockquote>
</li>
</ul>
<hr>
<h3 id="핵심-요약">핵심 요약</h3>
<ul>
<li><p><strong>Transfer Pruning의 목적</strong>  </p>
<ul>
<li>프루닝된 서브네트워크를 재활용하여 새로운 작업에서도 빠른 학습과 높은 성능을 달성한다.</li>
</ul>
</li>
<li><p><strong>Task Transfer Pruning</strong>  </p>
<ul>
<li>원래 데이터셋에서 프루닝한 서브네트워크를 새로운 작업으로 전이한다.</li>
<li>데이터셋 크기, 클래스 수 등의 차이에 따라 전이 성능에 영향을 미친다.</li>
</ul>
</li>
<li><p><strong>Architecture Transfer Pruning</strong>  </p>
<ul>
<li>한 아키텍처에서 찾은 프루닝 티켓을 다른 아키텍처로 전이한다.</li>
<li>네트워크의 구조적 확장성을 고려하여 티켓 매핑 방법을 고안한다.</li>
</ul>
</li>
<li><p><strong>주의사항</strong>  </p>
<ul>
<li>원래 작업에서 얻은 높은 성능이 전이 시에도 그대로 유지된다고 보장하지 않는다.</li>
<li>특히 LLM과 같은 대규모 모델에서는 전이 대상 작업에 맞추어 프루닝하는 것이 성능 향상에 결정적 역할을 할 수 있다.</li>
<li>아키텍처 전이 시, 단순히 레이어 개수나 깊이만 달라지면 가중치 및 구조 매핑 방법을 세심하게 고려해야 한다.</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>Transfer Pruning은 프루닝된 서브네트워크를 새로운 작업이나 다른 아키텍처에 전이함으로써 학습 비용을 절감하고 빠른 전이를 가능하게 한다.</li>
<li>원래 작업(Original Task) 기준 프루닝과 전이 학습 대상(Transfer Task)에 맞춘 프루닝 간에는 성능 차이가 발생할 수 있으며, 특히 LLM에서는 새로운 과제에 맞추어 프루닝하는 것이 유리하다.</li>
<li>전이 프루닝 기법은 기존 연구들을 토대로 계속해서 개선되고 있으며, 다양한 모델 및 데이터셋에 대해 최적의 방법을 실험적으로 검증한다.</li>
</ul>
<h2 id="78-static-vs-dynamic-pruning">7.8 Static vs. Dynamic Pruning</h2>
<ul>
<li><strong>Static Pruning</strong>은 학습 전, 중 또는 후에 한 번(또는 반복적으로) 중요도가 낮은 가중치나 채널 등을 제거하여 모델의 최종 구조를 고정한다.</li>
<li><strong>Dynamic Pruning</strong>은 런타임(실행 시점)에서 입력 데이터의 특성에 따라 계산 경로를 동적으로 선택하여, 불필요한 연산을 건너뛴다.</li>
</ul>
<hr>
<h3 id="static-pruning">Static Pruning</h3>
<h4 id="정의-3">정의</h4>
<ul>
<li>Static Pruning은 모델을 학습하기 전, 중 또는 후에 프루닝을 수행하여, 제거된 부분은 복원하지 않고 고정된 경량 모델을 생성한다.</li>
</ul>
<h4 id="특징">특징</h4>
<ul>
<li>프루닝 시 결정된 마스크(제거 여부)가 고정된다.</li>
<li>최종 모델 구조가 경량화되어 배포 및 추론 단계에서 그대로 사용된다.</li>
<li>필요에 따라 프루닝 후 재학습(예, fine-tuning)을 진행한다.</li>
</ul>
<h4 id="장단점">장단점</h4>
<ul>
<li><p><strong>장점</strong>:  </p>
<ul>
<li>모델 구조를 간소화하며, 배포가 용이하다.</li>
<li>최종 추론 시 추가적인 동적 연산 없이 고정된 모델을 사용할 수 있다.</li>
</ul>
</li>
<li><p><strong>단점</strong>:  </p>
<ul>
<li>한 번 결정된 프루닝 결과를 변경할 수 없으므로, 입력에 따른 유연성이 부족하다.</li>
<li>프루닝 후 재학습을 통해 성능 회복이 필요하다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="dynamic-pruning">Dynamic Pruning</h3>
<h4 id="정의-4">정의</h4>
<ul>
<li>Dynamic Pruning은 런타임에서 입력 데이터나 중간 피처의 특성을 기반으로, 매번 중요도가 낮은 부분은 계산하지 않고 건너뛴다.</li>
</ul>
<h4 id="특징-1">특징</h4>
<ul>
<li><p>모델 파라미터는 모두 유지하되, 필요 없는 경로는 실행 시 동적으로 비활성화한다.</p>
</li>
<li><p>입력마다 계산해야 할 경로가 달라진다.</p>
</li>
<li><p>사전에 결정된 고정된 프루닝 마스크가 없으므로, 재학습 없이도 입력별로 유연하게 작동한다.</p>
<blockquote>
<ul>
<li>동적 프루닝은 네트워크 내의 일부 가중치나 채널을 영구적으로 제거하는 것이 아니라, 실행 시점에 선택적으로 비활성화하거나 계산에서 건너뛴다</li>
<li>즉, 프루닝을 적용해도 네트워크의 아키텍처(레이어 구성, 연결 구조 등)는 그대로 유지된다</li>
</ul>
</blockquote>
<h4 id="장단점-1">장단점</h4>
</li>
<li><p><strong>장점</strong>:  </p>
<ul>
<li>입력별로 세밀하게 연산량을 조절할 수 있다.</li>
<li>모델 구조를 변경하지 않고도 동적으로 계산 비용을 줄일 수 있다.</li>
</ul>
</li>
<li><p><strong>단점</strong>:  </p>
<ul>
<li>런타임에서 추가적인 제어 로직이 필요하다.</li>
<li>하드웨어 최적화 및 구현이 다소 복잡할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="종합-비교">종합 비교</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>Static Pruning</th>
<th>Dynamic Pruning</th>
</tr>
</thead>
<tbody><tr>
<td><strong>프루닝 시점</strong></td>
<td>학습 전/중/후에 한 번 고정된 프루닝을 수행한다.</td>
<td>런타임에서 입력에 따라 동적으로 프루닝한다.</td>
</tr>
<tr>
<td><strong>모델 구조</strong></td>
<td>최종 모델 구조가 경량화되어 고정된다.</td>
<td>모델 구조는 그대로 유지하면서 계산 경로만 동적으로 선택된다.</td>
</tr>
<tr>
<td><strong>재학습 여부</strong></td>
<td>필요 시 프루닝 후 재학습(fine-tuning)을 진행한다.</td>
<td>일반적으로 런타임 제어만 수행하며 재학습 과정은 없다.</td>
</tr>
<tr>
<td><strong>장점</strong></td>
<td>모델 경량화 및 배포가 용이하다.</td>
<td>입력 특성에 따른 유연한 계산량 조절이 가능하다.</td>
</tr>
<tr>
<td><strong>단점</strong></td>
<td>입력에 따른 유연성이 부족하다.</td>
<td>추가 로직 구현 및 하드웨어 최적화가 어려울 수 있다.</td>
</tr>
</tbody></table>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>Static Pruning은 프루닝 후 고정된 경량 모델을 생성하여 배포나 추론 환경에서 효율적으로 활용한다.</li>
<li>Dynamic Pruning은 런타임에서 입력에 따라 동적으로 불필요한 연산을 건너뛰어, 같은 모델 구조 내에서 계산 비용을 줄인다.</li>
<li>적용 환경과 요구 사항에 따라 두 방식 중 적절한 방법을 선택하거나, 필요에 따라 혼합하여 활용한다.</li>
</ul>
<h2 id="79-layer-wise-weight-density-analysis">7.9 Layer-wise Weight Density Analysis</h2>
<ul>
<li>레이어별 가중치 밀도는 각 레이어가 모델 전체 가중치 중 어느 정도의 비율을 유지하는지를 나타낸다.</li>
<li>연구에서는 프루닝 후 각 레이어마다 서로 다른 가중치 밀도가 남게 된다고 보고한다.</li>
<li>이는 전체 프루닝 비율과는 별개로, 모델의 구조와 프루닝 기법 간의 상호 작용으로 발생한다.</li>
</ul>
<hr>
<h3 id="레이어별-가중치-밀도-차이가-발생하는-원인">레이어별 가중치 밀도 차이가 발생하는 원인</h3>
<ul>
<li><p><strong>구조적 특성과 프루닝 기법의 상호 작용</strong>  </p>
<ul>
<li>네트워크의 각 레이어는 고유한 역할과 기능을 수행한다.</li>
<li>프루닝 기법에 따라, 어떤 레이어는 가중치가 많이 남고, 어떤 레이어는 많이 제거된다.</li>
</ul>
</li>
<li><p><strong>Ambient 레이어 vs. Critical 레이어</strong>  </p>
<ul>
<li>Ambient 레이어는 가중치 변경에 상대적으로 민감도가 낮아, 프루닝을 진행해도 성능에 큰 영향을 주지 않는다.</li>
<li>Critical 레이어는 아주 소량의 가중치 손실에도 전체 성능에 큰 영향을 주므로, 프루닝 비율을 낮게 유지한다.</li>
</ul>
</li>
<li><p><strong>초기화 기반 프루닝의 경우</strong>  </p>
<ul>
<li>초기 무작위 가중치 분포로 인해, 레이어별로 남는 가중치 밀도가 일정하지 않게 나타난다.</li>
<li>이로 인해 레이어마다 가중치 밀도의 비균일성이 발생한다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="프루닝-전략에-따른-접근-방식">프루닝 전략에 따른 접근 방식</h3>
<ul>
<li><p><strong>Non-uniform (비균일) 프루닝</strong>  </p>
<ul>
<li>각 레이어의 중요도와 역할을 고려하여 서로 다른 프루닝 비율을 적용한다.</li>
<li>중요한 레이어에는 낮은 프루닝 비율을 적용하고, 덜 중요한 레이어에는 높은 프루닝 비율을 적용한다.</li>
</ul>
</li>
<li><p><strong>Uniform (균일) 프루닝</strong>  </p>
<ul>
<li>모든 레이어에 동일한 프루닝 비율을 적용한다.</li>
<li>구현은 단순하지만, 레이어별 중요도 차이를 반영하지 못한다.</li>
</ul>
</li>
<li><p>연구에서는 비균일 프루닝 방식을 통해 모델 성능을 극대화할 수 있음을 보고한다.</p>
</li>
</ul>
<hr>
<h3 id="실제-적용-사례">실제 적용 사례</h3>
<ul>
<li><p><strong>CNN의 경우</strong>  </p>
<ul>
<li>초기 레이어는 특징을 넓게 추출하는 역할을 하며, 이후 레이어는 추출한 특징을 종합하여 분류를 수행한다.</li>
<li>이러한 구조적 특성에 따라, 각 레이어에서 최적의 가중치 밀도는 달라진다.</li>
</ul>
</li>
<li><p><strong>Vision Transformer(ViT) 및 대규모 언어 모델(LLMs) 경우</strong>  </p>
<ul>
<li>각 레이어의 역할과 스케일 차이가 크므로, 프루닝 기법을 적용할 때 레이어별로 다른 비율을 적용하는 것이 효과적이다.</li>
<li>연구에서는 단순한 Uniform 프루닝보다, Non-uniform 프루닝이 성능을 개선한다고 보고한다.</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>레이어별 가중치 밀도는 프루닝 기법과 모델 구조에 따라 비균일하게 나타난다.</li>
<li>Critical 레이어와 Ambient 레이어의 특성을 고려하여, 레이어별로 최적의 프루닝 비율을 설정해야 한다.</li>
<li>비균일 프루닝 전략을 사용하면, 전체 모델 성능을 더욱 효율적으로 유지할 수 있다.</li>
<li>이러한 분석은 다양한 모델(CNN, ViT, LLM 등)에서 프루닝 기법을 적용할 때 중요한 참고 자료가 된다.</li>
</ul>
<h2 id="710-pruning-with-different-levels-of-supervision">7.10 Pruning with Different Levels of Supervision</h2>
<ul>
<li>신경망 프루닝은 학습 과정에서 사용하는 감독(supervision) 수준에 따라 여러 방식으로 진행된다.</li>
<li>프루닝은 다음 네 가지 감독 수준으로 구분한다.<ul>
<li><strong>Supervised Pruning</strong>을 수행한다.</li>
<li><strong>Semi-supervised Pruning</strong>을 수행한다.</li>
<li><strong>Self-supervised Pruning</strong>을 수행한다.</li>
<li><strong>Unsupervised Pruning</strong>을 수행한다.</li>
</ul>
</li>
<li>일반적으로 Supervised Pruning이 가장 많이 사용되지만, 대규모 데이터셋에서는 라벨 비용 문제로 한계가 발생한다.</li>
</ul>
<hr>
<h3 id="supervised-pruning">Supervised Pruning</h3>
<ul>
<li>모든 데이터에 라벨이 존재하는 상황에서 학습 후 프루닝을 수행한다.</li>
<li>라벨 정보를 이용하여 가중치의 중요도를 평가하고, 낮은 중요도의 가중치를 제거한다.</li>
<li>이 방식은 정확하고 풍부한 라벨 정보가 필요하다.</li>
<li>다만, 라벨링 비용이 크며 대규모 데이터셋에서는 확장성이 떨어진다.</li>
</ul>
<hr>
<h3 id="semi-supervised-pruning">Semi-supervised Pruning</h3>
<ul>
<li>일부 데이터에만 라벨이 존재하는 상황에서 프루닝을 수행한다.</li>
<li>라벨이 있는 데이터에서 얻은 정보를 다른 비라벨 데이터에 확장하여 학습한다.</li>
<li>라벨 전부를 요구하지 않으므로 라벨링 비용을 절감할 수 있다.</li>
<li>Semi-supervised 학습 기법과 함께 적용하여 프루닝 성능을 보완한다.</li>
</ul>
<hr>
<h3 id="self-supervised-pruning">Self-supervised Pruning</h3>
<ul>
<li>라벨이 없는 데이터에서 자체적인 학습 목표를 설정하여 모델을 학습한 후 프루닝을 수행한다.</li>
<li>대조 학습(contrastive learning)이나 생성 모델(generative learning) 등으로 학습한 후, 해당 모델을 프루닝한다.</li>
<li>라벨이 전혀 필요하지 않으므로 대규모 무라벨 데이터에 대해 효과적으로 확장할 수 있다.</li>
<li>다만, Self-supervision으로 학습된 모델은 Supervised 방식만큼의 성능 향상을 보장하지 않을 수 있다.</li>
</ul>
<hr>
<h3 id="unsupervised-pruning">Unsupervised Pruning</h3>
<ul>
<li>라벨 정보 없이 데이터의 구조나 분포를 기반으로 모델을 학습하고 프루닝한다.</li>
<li>라벨이 없으므로 추가적인 라벨링 비용이 발생하지 않는다.</li>
<li>Unsupervised Pruning은 모델의 성능을 유지하기 어렵다는 한계가 있으며, 원래 모델의 정확도를 그대로 유지하는 데 어려움을 겪는다.</li>
</ul>
<hr>
<h3 id="추가-사례-및-논의">추가 사례 및 논의</h3>
<ul>
<li>프루닝 라운드마다 다른 감독 방식을 사용할 수 있다.</li>
<li>Self-supervised 또는 Semi-supervised 방식과 Supervised Pruning을 결합하여 성능을 향상시키는 연구가 진행된다.</li>
<li>예를 들어, ImageNet에서 IMP(Iterative Magnitude Pruning)를 적용하면서 자기지도 학습 기법(CLR, MoCo 등)을 같이 사용하는 연구가 있다.</li>
<li>일부 연구에서는 자가 지도 방식의 프루닝 모델을 음성 인식 등 다른 영역에 전이하여 프루닝 효과를 분석한다.</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>Supervised Pruning이 가장 일반적으로 사용되나, 대규모 데이터셋에서는 라벨 비용 문제로 어려움을 겪는다.</li>
<li>Semi-supervised, Self-supervised, Unsupervised Pruning을 통해 라벨 의존성을 줄이려는 노력을 한다.</li>
<li>실제 적용에서는 데이터의 라벨 상태와 비용, 모델 특성 등을 고려하여 적절한 감독 수준의 프루닝 방식을 선택한다.</li>
<li>다양한 감독 수준의 프루닝 기법을 혼합하여 최적의 성능과 비용 효율을 달성한다.</li>
</ul>
<h1 id="8-fusion-of-pruning-and-other-compression-techniques">8 FUSION OF PRUNING AND OTHER COMPRESSION TECHNIQUES</h1>
<ul>
<li>여러 신경망 압축 기법들이 상호보완적으로 작동한다.</li>
<li>프루닝과 함께 양자화, 텐서 분해, 지식 증류, 네트워크 아키텍처 검색(NAS) 등을 결합하여<br>모델 크기를 크게 줄이고 연산 효율을 극대화한다.</li>
<li>이러한 융합 기법을 통해 단일 기법만 사용할 때보다 더 높은 압축률과 성능을 달성한다.</li>
</ul>
<hr>
<h2 id="프루닝--양자화-quantization">프루닝 &amp; 양자화 (Quantization)</h2>
<ul>
<li><strong>양자화</strong>는 모델의 가중치와 활성화 값을 표현하는 비트 수를 줄인다.</li>
<li>프루닝 후 남은 가중치를 낮은 비트 수로 표현하여 모델 크기와 메모리 사용량을 줄인다.</li>
<li>예를 들어, Han 등은 먼저 프루닝을 수행한 후 가중치를 양자화하여 모델 압축과 가속화를 동시에 달성한다.</li>
<li>일부 접근은 파인튜닝 단계에서 프루닝과 양자화를 함께 수행한다.</li>
</ul>
<hr>
<h2 id="프루닝--텐서-분해-tensor-decomposition">프루닝 &amp; 텐서 분해 (Tensor Decomposition)</h2>
<ul>
<li><p><strong>텐서 분해</strong>는 합성곱 연산 등을 저랭크 텐서나 행렬로 분해하여 파라미터 수를 줄인다.</p>
<blockquote>
<p>합성곱 계층의 가중치는 보통 4차원 텐서로 구성된다.
4차원 텐서는 많은 파라미터를 포함하므로, 직접 사용하면 모델의 크기와 연산 비용이 매우 크다.</p>
</blockquote>
</li>
<li><p>프루닝과는 달리, 텐서 분해는 모델의 내부 구조를 재구성한다.</p>
<blockquote>
<p>원래 4차원 텐서를 두 개 또는 세 개의 작은 행렬 곱으로 대체하며 분해된 저랭크 텐서나 행렬은 원래의 텐서를 근사하도록 구성한다.</p>
</blockquote>
</li>
<li><p>두 기법을 결합하면, 불필요한 가중치를 제거하는 프루닝과 저랭크 구조 활용을 통해 압축 효과를 극대화한다.</p>
<blockquote>
<p>원래 4차원 텐서를 두 개 또는 세 개의 작은 행렬 곱으로 대체하여, 메모리 사용량과 계산량을 절감</p>
</blockquote>
</li>
<li><p>예를 들어, 일부 연구는 필터 프루닝과 텐서 분해를 동시에 적용하여, CNN 모델의 효율성을 높인다.</p>
</li>
</ul>
<hr>
<h2 id="프루닝--지식-증류-knowledge-distillation">프루닝 &amp; 지식 증류 (Knowledge Distillation)</h2>
<ul>
<li><strong>지식 증류</strong>는 크고 성능이 우수한 Teacher 모델의 지식을 더 작은 Student 모델로 전수한다.</li>
<li>프루닝을 단독으로 사용하면 모델 성능이 떨어질 수 있는데,<br>KD를 함께 사용함으로써 프루닝으로 인한 성능 손실을 보완하고 Student 모델이 Teacher의 지식을 흡수하도록 한다.</li>
<li>특히, Transformer나 BERT와 같은 모델에서 프루닝과 KD를 함께 적용하면 성능 회복에 큰 도움이 된다.</li>
</ul>
<hr>
<h2 id="프루닝--복합-압축-기법-multi-compression-techniques">프루닝 &amp; 복합 압축 기법 (Multi-compression Techniques)</h2>
<ul>
<li>일부 연구에서는 프루닝, 양자화, 지식 증류 등의 여러 기법을 동시에 결합한다.</li>
<li>복합 압축 기법은 단일 기법만 사용할 때보다 더 높은 압축률과 효율성을 달성한다.</li>
<li>예를 들어, GAN 압축을 위해 프루닝, 양자화, KD를 동시에 적용하거나, 이미지 변환 작업에 프루닝, NAS, KD를 결합하는 연구들이 있다.</li>
<li>이와 같이, 서로 다른 압축 기법 간의 상호보완적 특성을 활용하여 최적의 압축 성능을 도모한다.</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>프루닝과 다른 압축 기법의 융합은 모델 압축률과 연산 효율성을 크게 향상시킨다.</li>
<li>각 기법은 서로 상호보완적인 역할을 하므로, 단일 기법보다 결합했을 때 보다 뛰어난 성능을 발휘한다.</li>
<li>실제 적용 시에는 모델 구조, 대상 작업, 하드웨어 제약 등을 고려하여 적절한 압축 기법들을 혼합하여 최적의 결과를 얻는다.</li>
</ul>
<h1 id="9-suggestions-and-future-directions">9 SUGGESTIONS AND FUTURE DIRECTIONS</h1>
<ul>
<li>프루닝 기법은 여러 가지 방법이 존재한다.  </li>
<li>특정 기법이 항상 최고라고 단정할 수 없으며, 응용 환경과 하드웨어/소프트웨어 리소스, 모델의 특성에 따라 적합한 방법을 선택한다.  </li>
<li>다양한 상황에서 프루닝 기법을 선택할 때 참고할 만한 지침을 제공한다.</li>
</ul>
<h2 id="하드웨어-및-소프트웨어-지원이-부족한-경우">하드웨어 및 소프트웨어 지원이 부족한 경우</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>특수 하드웨어(예: FPGA, ASIC)가 없고, 스파스 연산을 지원하는 라이브러리가 없는 경우에는 <strong>구조적 프루닝</strong>을 사용한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>비구조적 프루닝은 스파스 행렬 연산을 위한 전용 라이브러리나 하드웨어 지원이 필요하다.  </li>
<li>구조적 프루닝은 필터나 채널 단위로 제거하여, 일반 하드웨어에서 효율적으로 가속할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="계산-자원이-충분한-경우와-pat-방식-고려">계산 자원이 충분한 경우와 PAT 방식 고려</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>프루닝 단계에서 계산 자원이 충분하다면, 반복적인 <strong>Pruning After Training (PAT)</strong> 방식을 사용한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>PAT 방식은 여러 번의 프루닝-재학습 과정을 거쳐 성능 저하를 점진적으로 줄인다.  </li>
<li>반면 계산 자원이 제한적이라면, 원-샷(One-shot) 방식의 Pruning Before Training (PBT)이나 프루닝 후 즉시 추론 단계에 적용할 수 있는 기법을 선택한다.</li>
</ul>
</li>
<li><strong>예시</strong>:  <ul>
<li>대형 언어 모델(LLM)에도 원-샷 방식의 프루닝 기법이 적합할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="감독-학습supervised이-가능한-경우">감독 학습(supervised)이 가능한 경우</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>성능 목표가 명확한 작업이라면, 라벨이 풍부한 데이터셋을 이용한 <strong>감독 학습 기반 프루닝</strong>을 사용한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>감독 학습 방식은 정확한 라벨 정보를 활용하여 가중치 중요도를 평가하고 프루닝하므로, 해당 작업의 성능 회복에 유리하다.</li>
<li>반면, 라벨이 없는 도메인이나 초기화 단계에서는 <strong>자기지도(self-supervised)</strong> 또는 <strong>Data-free</strong> 방식이 더 적합할 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="메모리-사용량-최적화">메모리 사용량 최적화</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>프루닝 과정에서 메모리 사용량을 최소화하려면, 입력 배치 크기나 입력 형태(shape)를 신중하게 설정한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>입력 크기나 형태가 변경되면, 실제 연산과 메모리 사용량에 큰 영향을 줄 수 있다.  </li>
<li>작업에 따라 최적의 입력 환경을 구성하여, 프루닝된 모델의 성능 및 효율성을 향상시킨다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="네트워크-축소-방향-고려">네트워크 축소 방향 고려</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>네트워크를 여러 차원(깊이, 너비 등)에서 축소해야 할 경우, 레이어별 프루닝, 채널 프루닝 등 다양한 기법을 종합적으로 고려한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>단순히 전체 파라미터 수만 줄이는 것이 아니라, 레이어별, 채널별 분포 및 중요도를 고려하여 프루닝을 수행한다.  </li>
<li>양자화나 지식 증류와 같은 추가 압축 기법을 병행하면, 전체 모델 크기와 메모리 사용량을 더욱 줄일 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="속도와-정확도-균형-맞추기">속도와 정확도 균형 맞추기</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>속도와 정확도 사이의 균형을 원한다면, 사전 학습된 모델을 사용하고 프루닝 후 파인튜닝을 여러 에폭 동안 진행한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>프루닝된 모델을 충분히 재학습(파인튜닝)하면, 원래 모델의 성능을 최대한 회복할 수 있다.  </li>
<li>또한, 지식 증류(KD), 네트워크 아키텍처 검색(NAS) 등 다른 기법과 결합하여 최적의 정확도와 속도 향상을 동시에 달성한다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="메모리-제약-상황-대응">메모리 제약 상황 대응</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>전체 프루닝 또는 추론 단계에서 dense 형태의 모델을 저장할 메모리가 부족할 경우, 중간 레이어나 부분 연산에서 계산 및 메모리 사용량을 줄인다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>입력 크기를 조절하거나, 프루닝된 모델의 특정 부분에서 압축 기법을 사용하여 전체 메모리 사용량을 최적화한다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="잔차-연결과-학습률-조절">잔차 연결과 학습률 조절</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>서브네트워크가 잔차 연결을 포함하는 경우, 낮은 학습률로도 높은 정확도를 달성할 수 있다.  </li>
<li>잔차 연결이 없는 네트워크인 경우, 더 높은 학습률 또는 긴 학습 에폭이 필요하다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>Ma 등은 잔차 연결이 있는 서브네트워크가 상대적으로 작은 학습률에서도 좋은 성능을 낼 수 있음을 보고한다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="대규모-사전-학습과-flops-최적화">대규모 사전 학습과 FLOPs 최적화</h2>
<ul>
<li><strong>권장 사항</strong>:  <ul>
<li>대규모 사전 학습의 효과를 극대화하려면, 모델의 핵심 파라미터보다 실제 연산량(FLOPs)을 최소화하는 데 집중한다.</li>
</ul>
</li>
<li><strong>설명</strong>:  <ul>
<li>동적 스파스 접근법 등을 통해 적은 FLOPs로 모델 용량을 유지하고, 사전 학습이나 추론 시 연산량을 줄여 전체 성능을 높일 수 있다.</li>
</ul>
</li>
</ul>
<hr>
<blockquote>
<p><strong>결론</strong></p>
</blockquote>
<ul>
<li>프루닝 기법 선택은 응용 환경과 모델 특성, 데이터 라벨링 상태, 하드웨어 자원 등을 종합적으로 고려하여 결정한다.</li>
<li>여러 추천 사항들은 프루닝 과정 및 후속 학습(파인튜닝)에서 성능과 효율성을 극대화하기 위한 방향을 제시한다.</li>
<li>실제 환경에서는 위의 권장 사항들을 바탕으로 다양한 기법들을 조합하거나 혼합하여 최적의 결과를 달성한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[ECoFLaP: EFFICIENT COARSE-TO-FINE LAYER-WISE  PRUNING FOR VISION-LANGUAGE MODELS]]></title>
            <link>https://velog.io/@min-soku/ECoFLaP-EFFICIENT-COARSE-TO-FINE-LAYER-WISE-PRUNING-FOR-VISION-LANGUAGE-MODELS</link>
            <guid>https://velog.io/@min-soku/ECoFLaP-EFFICIENT-COARSE-TO-FINE-LAYER-WISE-PRUNING-FOR-VISION-LANGUAGE-MODELS</guid>
            <pubDate>Sun, 16 Mar 2025 08:29:16 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/min-soku/post/19e06a52-c61d-4dfc-bc32-a165fd152fed/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<p>대규모 비전-언어 모델(LVLM)은 image와 text의 풍부한 정보를 통합하여 종합적으로 이해할 수 있고, 이를 통해 multi-modal 다운스트림 작업에서 주목할 만한 발전을 이루어냈다.</p>
<p>하지만, <strong>LVLM은 크기가 매우 크고 연산량이 많아서, 배포 시 막대한 계산 비용과 에너지 소모로 인해 어려움을 겪는다</strong></p>
<blockquote>
<ul>
<li><p>VLM은 기본적인 Image, Text를 함께 이해하고 처리하는 모델로 Image classification, Image captioning, VQA등 기본적인 Vision-language task에 활용된다.</p>
</li>
<li><p>LVLM은 VLM의 확장 개념으로 LLM과 결합되어 있어, 더 복잡한 Vision-language 문제를 해결한다. 
예를 들어, 단순 Image captioning을 넘어서, 이미지에 대한 심층적인 질문에 답하거나, 이미지 속 맥락을 바탕으로 글을 쓸 수 있다.</p>
</li>
</ul>
</blockquote>
<ul>
<li>기존 Pruning 방법<blockquote>
<p><strong>Global pruning</strong> </p>
<ul>
<li>전체 모델의 중요도를 계산하기 위해 Hessian metrix 같은 복잡한 계산이 필요하여, 대규모 모델에서는 계산 비용이 너무 크다<blockquote>
<p><strong>가중치를 전역적으로 고려?</strong>
모델의 모든 layer에 있는 가중치를 한데 모아, 모델 전체의 관점에서 모델 전체 성능에 얼마나 기여하는지 평가 </p>
</blockquote>
</li>
</ul>
</blockquote>
</li>
<li><blockquote>
<p>Layer별로 희소성이 균일하지 않아 전체 모델의 연산 효율성이 균일하지 않다.</p>
<p><strong>Layer-wise pruning</strong></p>
<ul>
<li>각 layer 내에서만 병렬적으로 가중치의 중요도를 평가하여 Pruning하는 방법은 계산 비용은 적지만, 모델 전체의 관점에서 본 중요도는 반영하지 못해 최적의 Compression 효과를 내지 못한다.<blockquote>
<p><strong>가중치를 각 layer별로 고려?</strong>
모델의 각 layer마다 따로 가중치의 중요도를 평가하고, 해당 layer 내부에서만 중요도를 비교하여 일정 비율의 가중치를 제거</p>
</blockquote>
</li>
</ul>
</blockquote>
</li>
</ul>
<p>이러한 한계를 극복하기 위해 본 논문에서는 2단계로 이루어진 Efficient Coarse-to-Fine Layer Wise Pruning(ECoFLaP)을 제안한다.</p>
<blockquote>
<p>기존의 Pruning 방식은 계산 비용, 최종 모델 성능에 영향을 주기 때문에, 연구에서는 이 두 pruning 방식의 장점을 결합하여 보다 Efficient한 pruning 방법을 제안하고자 함</p>
</blockquote>
<h1 id="introduction">Introduction</h1>
<p>최근 Deep learning 모델들은 현실 세계의 어려운 문제들을 학습하는 데 필요한 용량을 확보하기 위해 매우 크고 복잡해지며 발전해왔다.
이런 <strong>대규모 모델은 엄청난 계산량과 메모리를 요구하기 때문에 Resource가 제한된 환경에서의 활용에 한계를 초래</strong>한다.</p>
<p>이에 대한 해결책으로, 모델의 성능은 유지하면서 Neural network의 크기를 줄이는 전략인 Model compression이 주목받고 있다.</p>
<p>&lt;대표적인 Model compression 기법&gt;</p>
<ul>
<li>Pruning(불필요한 가중치 제거)</li>
<li>Quantization(숫자의 정밀도를 낮춤)</li>
<li>Layer drop(일부 계층을 생략)</li>
<li>Token merging(입력 데이터의 일부를 합침)</li>
</ul>
<p>본 논문에서는 이 기법들 중에서, <strong>Large Vision-Language Model에서 높은 Compression rate에서도 성능을 잘 유지할 수 있는 잠재력을 가진 Unstructured pruning에 대해 연구</strong>한다.</p>
<p><strong>&lt;기존 Pruning 기법의 한계&gt;</strong></p>
<p>대부분의 Pruning 기법은 Single modal(Vision, Language)모델에 적용되어 왔으며, VLM과 같은 <strong>multi-modal에서의 Efficient한 Pruning은 구조적인 복잡성과 서로 다른 modality간 데이터 특성의 차이 때문에 충분히 연구되지 않았다.</strong></p>
<p>VLM은 Image encoder와 Text encoder처럼 modality별로 특화된 서브 모듈을 결합하여 구성하는데,
이러한 모듈화로 인해 서로 다른 modality에 대응하는 모듈들 간에 가중치와 기울기 분포가 불균형해져, 통합된 방식으로 pruning하기가 어려워진다.</p>
<blockquote>
<p>즉, 어떤 modal 모듈의 가중치는 크기가 크거나 기울기가 극단적으로 작을 수 있고, 다른 모달 모듈은 그 반대일 수 있다.</p>
</blockquote>
<p>이러한 분포의 불균형으로 인해, 모델 전체를 통합적으로 보면서 어떤 가중치를 제거해야 하는지를 결정하기가 어려워진다.</p>
<p><strong>&lt;제안 기법 : EcoFLaP&gt;</strong>
기존의 Global pruning이나 Layer-wise pruning의 한계를 극복하고자 이 논문에서는 EcoFLaP이라는 기법을 제안하였다.</p>
<ol>
<li><p>먼저, 모델 전체 수준에서 가중치의 중요도를 Coarse(거칠게)하게 추정해 각 Layer별 희소성 비율을 결정하고</p>
<blockquote>
<p>이때, global한 saliency(중요도)점수를 계산하기 위해, 1차 또는 2차 기울기를 직접 계산하면 메모리나 연산량이 매우 늘어나기 때문에 단순한 forward(순전파) 연산만으로 근사 기울기를 계산하는 0차 기법을 사용한다.</p>
<blockquote>
<ul>
<li>1차 기울기 : 손실 함수의 변화율</li>
<li>2차 기울기 :  1차 기울기의 변화율</li>
</ul>
</blockquote>
</blockquote>
</li>
<li><p>그 다음, 산출된 희소성 비율에 기반하여 실제로 layer별로 가중치를 Fine(정밀)하게 제거한다.</p>
<blockquote>
<p>global하게 saliency를 평가하여 층마다 다른 희소성 비율을 설정하기에 기존의 layer-wise pruning의 한계를 극복한다.</p>
</blockquote>
</li>
</ol>
<p><strong>&lt;성능&gt;</strong>
다양한 모델들과 여러 데이터셋을 적용하여 검증한 결과, 높은 Sparsity에서도 <strong>기존의 Pruning 기법들보다 높은 성능</strong>을 보여주었고, 
0차 기울기를 사용하여 중요도를 계산했을 때, 1차 기울기로 계산할 때보다 <strong>GPU 메모리를 최대 40%까지 줄일 수 있었다.</strong></p>
<blockquote>
<p>즉, ECoFLaP은 모델의 &#39;Global한 정보&#39;와 &#39;Layer별 정보&#39;를 모두 고려하는 2단계 Pruning 기법으로 효율적이면서 좋은 성능을 보인다.</p>
</blockquote>
<h1 id="related-work">Related work</h1>
<h2 id="model-pruning-for-transformers">Model pruning for transformers</h2>
<p>효율적인 모델 학습을 위한 Pruning 기법은 오랫동안 연구되어 왔으며, transformer 기반 모델이 점점 커짐에 따라 더욱 주목받고 있다.</p>
<p>&lt;Pruning 기법&gt;</p>
<ul>
<li><p>Structured pruning</p>
<blockquote>
<p>모델의 모듈 단위로 한 번에 제거하여 모델의 성능은 다소 희생하면서도 추론 속도와 처리량을 가속화하는 데 초점을 맞춘 pruning 기법</p>
</blockquote>
</li>
<li><p>Unstructured pruning</p>
<blockquote>
<p>개별 가중치를 대상으로 중요도에 따라 AI 가속 소프트웨어나 Sparse metrix 계산 기법을 활용하여, 높은 sparsity에서도 모델 성능을 유지하는 데 유리</p>
</blockquote>
</li>
</ul>
<p>최근에는 각 Layer별로 가중치를 sparse하게 만드는 SparseGPT, Wanda같은 pruning 기법들이 제안되었으나, 
이런 <strong>최신 pruning 기법들은 모든 Layer에 동일한 Pruning 비율을 적용하여 각 Layer가 갖는 특성이나 중요도를 충분히 반영하지 못해 Compression 효율이나 성능 면에서 한계</strong>가 있다.</p>
<blockquote>
<p>이 논문에서는 큰 계산비용을 필요로 하는 전역적인 gradient 계산 없이 각 Layer마다 적절한 sparsity를 동적으로 결정하는 접근법을 제안하여, 기존 방법들의 한계를 극복하고자 한다.</p>
</blockquote>
<h2 id="transformers-for-vision-language-multimodal-learning">Transformers for vision-language multimodal learning</h2>
<p>최근 Transformer 기반의 Vision-language multimodal은 Image와 Text를 동시에 처리할 수 있도록 발전하면서 Classification, Retrieval, few-shot learning, VQA, image/video generation 등 다양한 task에서 좋은 성과를 보여준다.</p>
<p>이러한 Transformer는 Pre-training된 Single-modal을 활용하여, multimodal 모델을 구성할 수 있게 해주며, 이 과정에서 비용이 많이 드는 재학습 과정 없이도 효과적인 multimodal 학습이 가능해졌다.</p>
<blockquote>
<p>multimodal을 처음부터 학습하려면, 계산 비용과 많은 리소스를 부담해야 하는데, 이미 각각의 modality에 대해 학습된 모델들을 결합하면, 기존에 학습된 지식을 그대로 활용할 수 있다.</p>
<blockquote>
<p>전체 모델을 재학습하는 것이 아닌, 결합된 모델을 task에 맞게
fine-tuning한다.</p>
</blockquote>
</blockquote>
<h1 id="background-layer-wise-pruning-for-vision-language-models">BACKGROUND: LAYER-WISE PRUNING FOR VISION-LANGUAGE MODELS</h1>
<h2 id="preliminaries-a-framework-for-vision-language-models">PRELIMINARIES: A FRAMEWORK FOR VISION-LANGUAGE MODELS</h2>
<p>본 논문에서는 대표적인 Vision-Language model인 BLIP, BLIP2를 기반으로 Pruning 기법을 사용한다.</p>
<p>BLIP 계열 모델에서는 <strong>Vision encoder와 LLM을 Pre-trained된 상태로 가져와 Frozen</strong>한다.(가중치 업데이트X)</p>
<blockquote>
<p>즉, 두 모델은 Fine-tuning하지 않고, Q-former라는 작은 모듈만 학습하여 계산 비용과 학습 시간을 크게 절약한다.</p>
</blockquote>
<h3 id="blip-architecture">BLIP Architecture</h3>
<p><img src="https://velog.velcdn.com/images/min-soku/post/c697c18f-7e96-47ff-9d9c-86a5bd3651d2/image.png" alt="">
<strong>Vision encoder($f_v$)</strong>
Pre-training된 ViT를 사용해, Input image($x^v$)에서 image feature를 추출한다.</p>
<blockquote>
<p>가중치 : {$W^i_v,|,1\leq\ i \leq\ M$} ($M$은 Vision encoder layer 개수)</p>
</blockquote>
<p><strong>Language model($f_l$)</strong>
Pre-training된 LLM을 사용하여 Text를 생성한다.</p>
<blockquote>
<p>가중치 : {$W^i_l,|,1\leq\ i \leq\ N$} ($N$은 LLM의 layer 개수)</p>
</blockquote>
<p><strong>Q-former($f_q$)</strong>
BLIP에서 사용하는 가벼운 module로, <strong>Vision encoder에서 나온 image feature를 받아서, LLM이 이해할 수 있는 형태로 변환</strong>한다.</p>
<blockquote>
<p>$W_q$라는 별도의 가중치 집합을 가지며, Vision, Language 모델 사이를 연결하는 중개자 역할을 한다.</p>
</blockquote>
<h3 id="learning-process">Learning process</h3>
<blockquote>
<p>Input data : Image($x^v$), Text($x^l$)</p>
</blockquote>
<ol>
<li><p>Vision encoder($f_v$)가 image($x^v$)를 받아 visual feature를 추출한다.
<img src="https://velog.velcdn.com/images/min-soku/post/5b401d1a-fead-4ed4-8025-6557cd309f97/image.png" alt=""></p>
</li>
<li><p>Q-former($f_q$)는 이 visual feature를 받아, &quot;$o^v$&quot;라는 align된 embedding을 생성한다.</p>
<blockquote>
<ul>
<li>$o^v = f_q(f_v(x^v;W_v)&quot;W_q)$<blockquote>
<ul>
<li>$f_v(x^v;W_v)$ : Vision encoder</li>
</ul>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/min-soku/post/6539e85c-e25f-4139-acec-529bc0aeca90/image.png" alt=""></p>
</blockquote>
</li>
</ol>
<ol start="3">
<li>LLM($f_l$)은 최종적으로 [$o^v, x^l$]을 받아 결과를 출력한다.
<img src="https://velog.velcdn.com/images/min-soku/post/e3cf12dd-9eba-495d-8fd0-b7ecbe2dbcad/image.png" alt=""><blockquote>
<p>Q-Former가 핵심적인 연결 고리로 작동함으로써, 거대 비전·언어 모델을 별도의 재학습 없이 효과적으로 결합한다.</p>
</blockquote>
</li>
</ol>
<h2 id="challenges-in-pruning-vision-language-models">CHALLENGES IN PRUNING VISION-LANGUAGE MODELS</h2>
<h3 id="global-pruning의-접근과-한계">Global pruning의 접근과 한계</h3>
<p>global pruning은 모델 전체 가중치 중, Loss function의 변화량를 최소화하면서 제거할 수 있는 최적의 가중치를 찾아내는 것이 핵심이다.</p>
<blockquote>
<p>각 가중치가 Loss function에 미치는 영향을 2차 미분을 이용하여 구한 다음, 영향이 적은 가중치를 pruning</p>
</blockquote>
<blockquote>
<p><strong>테일러 전개</strong>
가중치 w에 대한 Loss function L(w)가 있을 때, w의 값이 조금이라도 변하면 L(w)가 변하고, <strong>실제 Loss function의 형태는 매우 복잡하기 때문에 Loss function의 값을 근사화하기 위해 테일러 전개를 사용</strong>한다.</p>
<blockquote>
<p>테일러 전개를 통해, 가중치를 조금 변경했을 때 손실 함수가 어떻게 변하는지 근사</p>
</blockquote>
</blockquote>
<blockquote>
<p>Pruning에서 특정 가중치 $w_i$를 제거했을 때 손실이 얼마나 증가하는 지를 추정할 때, 보통 gradient(1차 미분)에 대해서는 가중치의 기여도가 이미 반영되어 있다고 가정하고, 손실값의 변화량인 2차 항에 집중한다.</p>
<blockquote>
<p>신경망이 충분히 학습된 후에는, 손실 함수의 기울기가 거의 0에 가까워져 1차 항의 기여가 무시할 수 있을 정도이기에 <strong>Loss function의 주된 영향은 2차 항이 차지</strong>하게 된다.</p>
</blockquote>
</blockquote>
<p>Hessian에 기반하여, 모델의 i번째 파라미터의 중요도는 $\frac{W^2_i}{2\cdot[H^{-1}]_{ii}}$ 공식을 이용해 측정한다.</p>
<blockquote>
<p>$\Delta{L}\approx\frac{W^2_i}{2\cdot[H^{-1}]_{ii}}$</p>
</blockquote>
<p>$\frac{W^2_i}{2\cdot[H^{-1}]_{ii}}$은 i번째 가중치를 제거했을 때 모델의 손실의 변화량을 헤시안을 이용해 추정하는 공식으로, $w_i$가 클수록 분자가 커지고 분모가 작아져, 손실 함수의 변화량이 커져 매우 중요한 가중치로 해석할 수 있다.</p>
<blockquote>
<p>역헤시안($H^{-1}$)에서 대각 원소 ($[H^{-1}]_{ii}$)값을 이용하여, 어떤 가중치를 제거했을 때, 모델의 손실 정도를 추정한다.</p>
<blockquote>
<p><strong>Hessian</strong>
Loss function $L(w)$를 각 가중치 $w_i$에 대해 2차 미분(gradient의 변화량)을 구한 결과들을 모아놓은 행렬</p>
</blockquote>
<blockquote>
<p><strong>역헤시안</strong>
Hessian 행렬의 역행렬로 2차 미분 정보를 반대로 해석할 수 있게 한다. </p>
</blockquote>
</blockquote>
<ul>
<li>$[H^{-1}]_{ii}$는 역헤시안의 대각 위치에 있는 값으로, i번째 가중치가 손실에 끼치는 변화량을 반영한 값으로 볼 수 있다.</li>
</ul>
<p>역헤시안을 계산하는 것은 모델 전체 모든 가중치에 대해 2차 미분 연산이 필요하며, LVLM은 파라미터 수가 방대하기 때문에, 메모리와 계산량 측면에서 LVLM에서는 적용이 매우 어렵다.</p>
<blockquote>
<p>헤시안 행렬은 모든 파라미터에 대한 2차 미분값을 포함하기 때문에 행렬의 크기가 매우 커져 상당한 메모리 자원이 필요하게 되고, 각 파라미터에 대해 2차 미분 값을 구하는 것은 엄청난 양의 연산을 요구하게 된다.</p>
</blockquote>
<h3 id="layer-wise-pruning의-한계">Layer-wise pruning의 한계</h3>
<p>Layer-wise pruning은 한 층씩 순차적으로 가중치의 중요도를 계산해 제거하는 방식으로, <strong>한 layer 내 가중치들만 대상으로 중요도를 평가</strong>하기 때문에 전체 가중치들의 중요도를 한 번에 평가하는 global pruning과 다르게 계산 비용이 훨씬 적고 메모리 부담도 적다.</p>
<p>Vision-language model은 image encoder와 text encoder가 결합된 형태로, modal별로 가중치, 기울기 분포가 크게 다른데 Local-wise는 각 layer 내부만을 보고 가중치를 pruning하기 때문에, 다른 modal과의 상호작용이나 전역적인 중요도를 반영하기 어렵다.</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/2066b969-9d3b-41ee-ae07-cc3caa2e2efb/image.png" alt="">
Vision 모듈과 Language 모듈로 구성된 LVLM의 가중치 크기와 기울기 차이를 보여준다.</p>
<blockquote>
<p>Vision-Language 모델 내부에서 모듈별로 가중치 크기 분포와 기울기 스케일이 다름을 보여준다.</p>
</blockquote>
<ul>
<li>(a)에서 0~200 layer의 가중치 크기는 작지만, (b)에서 기울기의 크기가 매우 큼</li>
</ul>
</blockquote>
<h1 id="ecoflap--efficient-coarse-to-fine-layer-wise-pruning">ECoFLaP : EFFICIENT COARSE-TO-FINE LAYER-WISE PRUNING</h1>
<p>위에서 언급했듯이, LVLM에 Layer-wise pruning을 적용하는 데에는 크게 세 가지 문제가 있다.</p>
<ol>
<li>서로 다른 modality 간 구조의 불균형</li>
<li>매우 큰 모델 규모</li>
<li>전역적인 정보의 부족</li>
</ol>
<blockquote>
<p>이러한 중요한 문제들을 해결하기 위해, ECoFLaP을 제안한다.</p>
</blockquote>
<p>BLIP 계열의 multimodal 아키텍처를 pruning하는 데 초점을 맞춘다.</p>
<p>BLIP 모델에서 Vision 및 Language 모듈을 compression하되, Q-former는 그대로 유지한다.</p>
<blockquote>
<p>Q-former는 전체 모델에서 약 5% 정도의 파라미터만을 차지하는 가벼운 구조이기 때문이다.</p>
</blockquote>
<h2 id="the-framework-of-coarse-to-fine-layer-wise-pruning">THE FRAMEWORK OF COARSE-TO-FINE LAYER-WISE PRUNING</h2>
<p>pruning 시, 가중치의 중요도를 평가하기 위한 multimodal 데이터
$D = {(x^v_k,x^l_v)}^K_{k=1}$이 있다고 가정한다.</p>
<blockquote>
<p>이 데이터는 training 데이터보다 훨씬 소량이다.</p>
</blockquote>
<h3 id="layer-wise-pruning">Layer-wise pruning</h3>
<p><img src="https://velog.velcdn.com/images/min-soku/post/3e3bc6e1-8b43-40be-ae16-8d4b6a99d480/image.png" alt="">
$i$번째 layer의 pruning된 가중치는 $\hat{W}_i$로 나타낸다.</p>
<blockquote>
<blockquote>
<p>$\hat{W}<em>i,=,argmaxS(W_i,|,\hat{W}</em>{i-1},D,L_i)\quad s.t.\frac{\hat{W}_i}{W_i}=p_i.$</p>
</blockquote>
<ul>
<li>$S(\cdot)$ : 가중치의 중요도를 계산하는 스코어 함수
즉, $S(\cdot)$가 높아지도록 $\hat{W}_i$를 선택한다</li>
<li>$\hat{W}_{i-1}$ : 이전 layer의 pruning된 가중치
(이전 layer의 pruning 결과가 현재 layer에 영향을 줄 수 있어 참고하는 경우가 존재)</li>
<li>$L_i$ : 해당 layer에서의 간단한 loss function으로 가중치 중요도 계산 시 사용</li>
<li>$p_i$ : $i$번째 layer의 sparsity로, $\frac{\hat{W}_i}{W_i}=p_i$가 되도록 하는 제약 조건이다</li>
</ul>
</blockquote>
<p><strong>Layer-wise pruning에서는 모든 layer에 동일한 $p_i$값을 적용</strong>하는 것으로 전체 모델의 sparsity가 50%라면, 모든 layer가 동일하게 50%의 가중치를 pruning한다는 것을 의미한다.</p>
<p><strong>이는 각 layer, 각 module의 중요도가 다를 수 있다는 점을 반영하지 못한다.</strong></p>
<h3 id="efficient-coarse-to-fine-layer-wise-pruning-ecoflap">Efficient Coarse-to-Fine Layer-wise Pruning (ECoFLaP)</h3>
<p>본 논문에서 제안하는 Efficient Coarse-to-Fine Layer-wise Pruning (ECoFLaP) 기법은, Vision-Language 모델의 각 layer에 대해 전역적인 중요도를 활용하여 최적의 sparsity를 추정한 뒤, 실제 pruning을 layer-wise하게 수행한다.
<img src="https://velog.velcdn.com/images/min-soku/post/9554cde3-d99d-4233-a92c-8c6da63eb3e5/image.png" alt=""></p>
<h4 id="기존의-직관적-접근법">기존의 직관적 접근법</h4>
<p>전체 모델의 가중치($W$)에 대해 목표 sparsity p%를 달성하도록 global loss function($L$)에 기반하여 global pruning을 수행한다.</p>
<blockquote>
<p>$\hat{W},=,argmaxS(W,|,D,L),\quad \vert\hat{W}\vert=(1-p)\vert{W}\vert$</p>
</blockquote>
<p>여기서 얻은 $\hat{W}$를 통해 layer별 sparsity $\frac{\hat{W}_i}{W_i}$를 추정한다.</p>
<p>이 방법은 모델 전체에 대한 gradient 계산과 argmax 연산이 필요해, 대규모 모델이 적용하기에는 연산량과 메모리 비용이 매우 크다.</p>
<h4 id="ecoflap">ECoFLaP</h4>
<p>ECoFLaP에서는 전역적인 중요도 정보를 효율적으로 계산하면서 각 layer별 sparsity를 산출할 수 있다.</p>
<h4 id="전역-중요도-점수를-이용해-sparsity-비율-산출coarse-단계">전역 중요도 점수를 이용해 sparsity 비율 산출(Coarse 단계)</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/dbe2def2-5bc3-40c4-8149-f8818bacfc58/image.png" alt=""></p>
<p>먼저, 전체 모델의 가중치 $W$에 대해, 주어진 데이터 $D$와 전역 loss function $L$을 이용해 각 가중치가 모델 성능에 얼마나 기여하는지 평가한다.</p>
<blockquote>
<blockquote>
<p>$s=S(W|D,L)$</p>
</blockquote>
<ul>
<li>$s$ : 모든 가중치에 대한 중요도 점수</li>
</ul>
</blockquote>
<p><strong>모델 전체 가중치에 대한 중요도 점수를 계산하면 결국 ECoFLaP도 계산비용이 큰 게 아닌가?</strong></p>
<blockquote>
<p>ECoFLaP에서는 0차 기울기를 사용하여 계산하기 때문에 계산 비용이 작다</p>
</blockquote>
<p><strong>1. 목표 sparsity $p$에 따라 남겨야 하는 파라미터 수 $N_{select}$계산</strong> </p>
<blockquote>
<blockquote>
<p>$N_{select}=(1-p)\cdot\vert{W}\vert$</p>
</blockquote>
<ul>
<li>$\vert{W}\vert$ : 전체 가중치 수</li>
</ul>
</blockquote>
<p><strong>2. 각 layer 별 점수 정규화와 sparsity 비율 $p_i$ 결정</strong>
각 layer $i$에 대한 중요도 점수 $s_i$는 전체 모델에 대해 계산된 전역 중요도 점수인 $s=S(W|D,L)$에서 각 layer에 속한 가중치들의 점수의 합이다.</p>
<blockquote>
<blockquote>
<p>$s_i=\sum_{w\in{W_i}}S(w)$</p>
</blockquote>
<ul>
<li>$W_i$ : i번째 layer의 가중치</li>
</ul>
</blockquote>
<p><strong>&lt;정규화&gt;</strong>
각 layer $i$에 대한 점수 $s_i$를 전체 가중치 점수 $\sum s$로 나눠, <strong>해당 layer가 전체 중요도에서 차지하는 비중</strong>을 구한다.</p>
<blockquote>
<p>$normalize(s_i,s) = \frac{s_i}{\sum s}$</p>
</blockquote>
<p><strong>&lt;layer별 sparsity 비율&gt;</strong>
각 layer $i$가 남겨야 하는 전체 파라미터 수 $N_{select}$ 중에서 몇 개의 파라미터를 유지해야 하는지를, 해당 layer의 파라미터 수 $\vert{W_i}\vert$를 기준으로 할당한다.</p>
<blockquote>
<blockquote>
<p>$p_i=1-\frac{normalize(s_i,s)\times N_{select}}{\vert{W_i}\vert}$</p>
</blockquote>
<ul>
<li>$normalize(s_i,s)$($i$번째 layer가 전체 중요도에서 차지하는 비중)이 낮으면 $p_i$($i$번째 layer의 sparsity)가 커져 많이 pruning되고,
높으면 $p_i$가 낮아져 해당 layer는 적게 pruning된다.</li>
</ul>
</blockquote>
<p>이렇게 함으로써, 전체 모델의 전역적인 중요도 정보를 반영하여, 각 layer마다 다른 sparsity 비율을 동적으로 결정할 수 있다.</p>
<blockquote>
<p>$s=S(W|D,L)$에서 데이터셋 $D$에 따라 $s$가 바뀌기 때문에 동적으로 sparsity가 결정된다.</p>
</blockquote>
<h4 id="산출된-sparsity-비율로-layer별-pruningfine-단계">산출된 sparsity 비율로 layer별 pruning(Fine 단계)</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/a9e58840-ae86-4cdc-bc71-42ad8b8e0a33/image.png" alt=""></p>
<p>Coarse단계에서 구한 layer별 sparsity 비율을 적용하여, 모델을 layer-wise하게 pruning한다.</p>
<blockquote>
<blockquote>
<p>$\hat{W_i},=,argmaxS(W_i,|,D,L),\quad \vert\hat{W_i}\vert=(1-p_i)\vert{W_i}\vert$</p>
</blockquote>
<ul>
<li>$L$ : Wanda 기법 활용<blockquote>
<p>각 가중치의 입력 활성값과 가중치 크기를 곱해 중요도 점수를 계산하여 중요도가 낮은 가중치부터 선택적으로 제거</p>
</blockquote>
</li>
</ul>
<p>복잡한 기울기 계산에 의존하지 않고, 단순한 forward 연산에서 구할 수 있는 입력 활성값과 가중치 정보를 활용하기 때문에 계산 비용이 크게 줄어든다.</p>
</blockquote>
<p><strong>layer collapse 방지</strong></p>
<blockquote>
<p>전역 정보를 그대로 반영했을 때, 어떤 layer는 중요도가 낮게 평가되어 모든 가중치를 제거해버리는 경우가 발생할 수 있다.</p>
<blockquote>
<ul>
<li>$p_{max}$ 하이퍼파라미터 도입</li>
</ul>
<p>각 layer가 가질 수 있는 최대 sparsity(일정 sparsity 이상으로 제거되면 안 된다)를 제한하여, 해당 layer의 최소한의 파라미터를 보존한다.</p>
</blockquote>
<p>$p_{max}$를 $normalize(s_i,s) = \frac{s_i}{\sum s}$에 반영하려면, 최대 sparsity를 만족하기 위해 <strong>각 layer에 필요한 최소 파라미터를 미리 할당하고, $N_{select}$에서 빼 준 뒤 알고리즘을 시작</strong>한다.</p>
</blockquote>
<h2 id="zeroth-order-global-information">ZEROTH-ORDER GLOBAL INFORMATION</h2>
<p>기존에는 가중치의 중요도를 평가하기 위해서는 backpropagation을 통한 1차 gradient구해 &quot;가중치의 크기 x 기울기&quot;의 형태로 사용했다.</p>
<p>하지만, 파라미터가 수십~수천억 개에 달하는 모델에서는 backpropagation을 통해 모든 파라미터의 gradient를 구하는 것만으로도 메모리, 계산 비용이 매우 크다.</p>
<h3 id="forward-forward-algorithm">Forward-forward Algorithm</h3>
<p>이 논문에서 사용하는 Forward-forward 알고리즘은 <strong>backpropagation 없이도 가중치가 loss function에 얼마나 기여하는지 근사적으로 계산할 수 있는 방법이다.</strong></p>
<blockquote>
<p>이를 0차(zeroth-order) 근사라고 부르는 이유는, 1차 미분을 직접 계산하지 않고, 오직 forward(활성화 값)연산의 결과만으로 근사하기 때문이다.</p>
</blockquote>
<p>단순히 가중치에 gaussian noise를 더하거나 빼면서 Forward 연산만 수행하여, 그 차이를 통해 가중치의 중요도를 추정한다.
<img src="https://velog.velcdn.com/images/min-soku/post/45f8e17e-f655-416f-a9b8-1fd73a65a4e5/image.png" alt=""></p>
<blockquote>
<blockquote>
<ul>
<li>$\vert\vert{\Delta_wL(W;D)}\vert\vert_2 = E_{d<del>D}[E_{z</del>N_{(0,1)}}[\vert{\frac{L(W+\epsilon z,d)-L(W-\epsilon z,d)}{2\epsilon}}\vert]]$ 
0차 기울기 벡터의 L2 norm -&gt; 가중치의 중요도</li>
</ul>
<p>($\Delta_wL\approx\frac{L_1-L_2}{2\epsilon}$) - 0차 기울기 벡터</p>
</blockquote>
<ul>
<li>$\epsilon$ : 작은 스케일의 noise 크기</li>
<li>$z$ : 정규분포 $N_{(0,1)}$에서 추출된 noise 벡터<blockquote>
<p>$z$는 &quot;한 번의&quot; 측정으로 가중치 공간에서 더 다양한 방향을 살펴보기 위한 장치</p>
</blockquote>
</li>
</ul>
<ul>
<li>$L_1,,(L(W+\epsilon z,d))$ : 가중치 $W$에 작은 noise $\epsilon z$를 <strong>더한</strong> 상태로 한 번 forward 연산했을 때의 loss</li>
<li>$L_2,,(L(W-\epsilon z,d))$ : 가중치 $W$에 작은 noise $\epsilon z$를 <strong>뺀</strong> 상태로 한 번 forward 연산했을 때의 loss</li>
</ul>
</blockquote>
<p>Forward-forward Algorithm을 통해 구한 $L_1,,L_2$를 통해 Zeroth-order gradient를 구하는 수식이다.</p>
<h4 id="finite-difference유한-차분-근사">Finite difference(유한 차분) 근사</h4>
<p>1차원 함수 $f(x)$로부터 도함수 $f&#39;(x)$를 구할 때 근사하여 구하는 방식이다.</p>
<blockquote>
<p>$f&#39;(x)\approx\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon}$</p>
</blockquote>
<p>위와 같이 가중치 $W$에 $\epsilon z$를 더하거나 빼서 $\Delta_wL\approx\frac{L_1-L_2}{2\epsilon}$(0차 기울기 벡터)로 근사한 뒤 L2 Norm을 이용하면, 1차 gradient를 구하지 않아도 &#39;w가 조금 변했을 때 손실이 얼마나 바뀌는지&#39;를 이용해 기울기를 추정할 수 있다.</p>
<blockquote>
<p><strong>L2 Norm을 사용하는 이유?</strong>
Layer별로 그 0차 근사 기울기 벡터($\Delta_wL$)를 전부 다루는 대신, <strong>벡터의 크기(노름)</strong>만 사용하면, 
“이 레이어가 전체 손실에 얼마나 민감하게 작용하는지”를 하나의 숫자로 압축하여 Layer별 “중요도 점수&quot;로 사용한다.</p>
</blockquote>
<p>기존의 backpropagation에서는 활성화값과 gradient를 모두 저장하고 계산해야 하지만, 이 방식은 forward 연산만하면 되기 때문에 메모리와 연산량을 크게 줄일 수 있다.</p>
<p><strong>이 방식으로 모델 전체에 대해 forward 연산을 하며 가중치의 중요도를 추정하면, global한 중요도를 알 수 있다.</strong></p>
<blockquote>
<p>이 global한 중요도를 각 layer별 sparsity에 활용한다.</p>
</blockquote>
<h1 id="experiments">Experiments</h1>
<p><strong>Architecture</strong></p>
<ul>
<li>BLIP : ViT + BERT</li>
<li>BLIP2 : EVA-ViT + FlanT5</li>
</ul>
<p><strong>Dataset</strong></p>
<ul>
<li>VQAv2, OK-VQA, GQA : VQA task</li>
<li>NoCaps, COCO captions : Image captioning task</li>
<li>Flickr30k : Image-text retrieval task</li>
</ul>
<p><strong>Pruner</strong></p>
<ul>
<li>Global Magnitude Pruning : 전역적으로 모든 가중치의 크기를 보고, 작은 것부터 제거하는 전통적 글로벌 프루닝 기법</li>
<li>Gradient-based Pruning : 1차 역전파 기울기(기울기 × 가중치 크기)를 이용해 중요도를 계산하고, 여러 번 반복(iterative)하며 3단계로 목표 희소성에 도달하는 방식</li>
<li>SparseGPT : 헤시안 근사 정보를 활용하여 각 층에서 가중치를 제거. GPT 등 대규모 언어 모델에 적용되는 방식</li>
<li>Wanda : 가중치 크기 × 입력 활성값(norm)을 이용해 로컬 중요도를 측정하고, 동일한 층별 프루닝 비율로 가중치를 제거</li>
<li>UPop : 비전-언어 모델을 프루닝과 재학습을 동시에 진행하는 “통합(progressive) 프루닝” 방식</li>
</ul>
<p><img src="https://velog.velcdn.com/images/min-soku/post/656345ec-e3e3-4c65-99cb-a859eb5dc60f/image.png" alt=""></p>
<ul>
<li>ECoFLaP이 Gradient-based Pruning, SparseGPT, Wanda, Global Magnitude Pruning보다 전반적으로 높은 성능을 보임</li>
<li>메모리 사용량 측면에서도, 0차 기울기 방식을 활용할 경우 기존 기울기 기반 방법 대비 훨씬 적게 듦</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[REMOTE SENSING VISION-LANGUAGE FOUNDATION  MODELS WITHOUT ANNOTATIONS VIA GROUND REMOTE ALIGNMENT]]></title>
            <link>https://velog.io/@min-soku/REMOTE-SENSING-VISION-LANGUAGE-FOUNDATION-MODELS-WITHOUT-ANNOTATIONS-VIA-GROUND-REMOTE-ALIGNMENT</link>
            <guid>https://velog.io/@min-soku/REMOTE-SENSING-VISION-LANGUAGE-FOUNDATION-MODELS-WITHOUT-ANNOTATIONS-VIA-GROUND-REMOTE-ALIGNMENT</guid>
            <pubDate>Tue, 18 Feb 2025 12:13:31 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<blockquote>
<p>이 논문에서는 text 주석 없이 Remote sensing 이미지를 위한 VLM을 training하는 새로운 방법을 제안함</p>
</blockquote>
<p>기존에는 image-text pair쌍이 있어야 training이 가능했지만, <strong>Remote sensing 이미지는 text 설명이 거의 없다는 한계가 있었다.</strong></p>
<p><strong>&lt;핵심 아이디어&gt;</strong></p>
<ul>
<li>Remote sensing 이미지와 text를 직접 alignment하는 대신, <strong>인터넷에서 얻은 지상 이미지를 중간 매개체로 사용한다.</strong><blockquote>
<p>Remote sensing 이미지와 동일한 위치에서 촬영된 지상 사진을 수집하여, 이를 CLIP의 Image encoder와 alignment하도록 training한다.</p>
<blockquote>
<p>즉, Remote sensing 이미지 &lt;-&gt; 지상 이미지 &lt;-&gt; Text의 연결을 활용하여, Remote sensing 이미지와 간접적으로 Align한다</p>
<ul>
<li>지상 이미지는 Text 설명이 있기 때문이다</li>
</ul>
</blockquote>
</blockquote>
</li>
</ul>
<p>이렇게 학습된 VLM은 text 주석 없이 학습되었음에도 기존의 Supervised learning VLM보다 성능이 뛰어남</p>
<h1 id="instruction">Instruction</h1>
<p>지구는 Remote sensor에 의해 지속적으로 촬영되고 있으며, 이러한 관측된 이미지는 다양한 지구상의 사건을 모니터링하는 데 활용되고 있다.</p>
<p>이러한 Remote sensing 이미지로부터 자동으로 정보를 추출하는 분석 모델이 개발되었으나, 이러한 모델들은 대부분 Specific한 task에 특화되어 있으며, 미리 정의된 개념만을 인식할 수 있다. 또한, AI 전문가가 아닌 사람들에게 접근성이 떨어진다는 단점이 있다.</p>
<p>기존의 VLM은 인터넷에서 수집한 대량의 image-text pair를 활용하여 training되어 Open-vocabulary recognition 능력을 갖추었다.</p>
<p>Remote sensing 데이터를 통해서도 이런 능력을 적용할 수 있다면 매우 유용할 것이다.
<strong>그러나, Open-vocabulary recognition 능력을 갖춘 VLM을 구축하기 위해서는 방대한 양의 image-text pair 데이터가 필요하다.</strong></p>
<blockquote>
<p>이러한 데이터 수집은 Remote sensing에서 매우 어렵다</p>
<blockquote>
<ol>
<li>Remote sensing 이미지는 Remote sensor에 의해 자동으로 생성되므로, 인간의 개입이 거의 없고 text 주석도 존재하지 않는다.</li>
<li>기존 연구에서 사람이 직접 text를 추가하려고 했으나, 비용이 많이 들고 전문 지식이 필요하다.</li>
</ol>
<ul>
<li>그 결과, Remote sensing을 위한 데이터셋은 인터넷 데이터셋 대비 4만배 더 적다.</li>
</ul>
</blockquote>
</blockquote>
<p>이러한 도전 과제로 인해 논문에서는 <strong>Text 주석 없이 Remote sensing 이미지를 위한 VLM을 구축하는 것</strong>을 핵심으로 다룬다.</p>
<blockquote>
<p>이 논문에서는 Remote sensing 이미지와 text를 직접 연결하는 대신, 지상 이미지를 매개체로 사용하는 방법을 제안한다.</p>
</blockquote>
<p><strong>&lt;핵심 아이디어 - GRAFT&gt;</strong></p>
<ol>
<li>Remote sensing 이미지는 지구의 특정 지역을 촬영한다.</li>
<li>같은 위치를 사람들이 카메라로 촬영한 사진이 인터넷에 존재할 가능성이 크다.</li>
<li>이 지상 이미지와 Remote sensing 이미지를 연결하여, 간접적으로 t언어와 align 시킨다.<blockquote>
<p>즉, Remote sensing 이미지 &lt;-&gt; 지상 이미지 &lt;-&gt; 언어 관계를 활용</p>
</blockquote>
</li>
</ol>
<ul>
<li><strong>GRAFT 학습 방식</strong></li>
</ul>
<ol>
<li><p>인터넷에서 지리적 tag가 포함된 지상 이미지를 수집한다.</p>
</li>
<li><p>해당 지리적 tag를 사용하여, 같은 위치의 Remote sensing 이미지를 찾는다.</p>
</li>
<li><p>이 Remote sensing - 지상 이미지 쌍을 사용하여, Remote sensing 이미지의 특징을 CLIP의 pre-training된 Image encoder를 활용하여 Alignment한다.</p>
<blockquote>
<p>지상 이미지에는 해당 text가 존재한다. 이 지상 이미지를 매개체로 활용하여, Remote sensing 이미지와 언어를 연결할 수 있다.</p>
<blockquote>
<p><strong>즉, Remote sensing 이미지가 직접 text와 Align하지 않아도, 같은 위치의 지상 이미지가 CLIP을 통해 언어와 정렬되므로, 위성 이미지도 자연스럽게 언어와 연결될 수 있다.</strong></p>
</blockquote>
</blockquote>
</li>
<li><p>이를 통해 Text 없이도 Remote sensing 이미지가 언어와 정렬되도록 학습된다.</p>
</li>
</ol>
<p>또한, Remote sensing 이미지는 지상 이미지보다 훨씬 넓은 물리적 공간을 포함하기 때문에 Text-to-patch retrieval 모델을 추가로 개발한다.</p>
<blockquote>
<ul>
<li>지상 이미지는 호수의 일부만 포함할 수 있지만, Remote sensing 이미지는 전체 호수를 포함할 수 있다.</li>
</ul>
<p>지상 이미지의 지리적 tag를 활용하여 Remotes sensing 이미지 내에서 해당 위치의 픽셀을 찾아내는 방법을 제안한다.</p>
</blockquote>
<p>이를 통해 text 기반으로 remote sensing 이미지에서 특정 영역을 식별하거나, text-image 기반 segmentation을 수행할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/4854cd10-599b-42af-bea1-1e4a0e65cad5/image.png" alt=""></p>
<h1 id="relate-work">Relate work</h1>
<h2 id="foundation-models-for-remote-sensing-images">Foundation Models for Remote Sensing Images</h2>
<p>최근 인터넷 Image를 통한 Foundation model의 성공에서 영감을 받아 Remote sensing image를 통한 Foundation model을 연구하는 작업이 시작되었다.
이러한 모델들은 이후에 세부 task 수행을 위한 Fine-tuning이 가능하다.</p>
<p>Foundation model 중 일부는 supervised learning 방식으로 training되며, 다른 model들은 unsupervised learning 기법을 사용한다.</p>
<p>이러한 모델들은 Image encoder로서 효과적이지만. Open-vocabulary recognition을 수행할 수 없다.
Open-vocabulary recognition이 가능하다면 비전문가들도 retrieval이나 QA같은 자연어 인터페이스를 통해 Remote sensing 이미지를 쉽게 분석할 수 있다.</p>
<h2 id="vision-and-language-models-in-remote-sensing">Vision-and-Language Models in Remote sensing</h2>
<p>이전 연구에서는 Remote sensing 이미지의 Caption 생성 또는 Retrieval을 위한 VLM을 구축해왔다.</p>
<p>그러나, 이러한 모델들은 기존 인터넷 데이터셋 기반 VLM보다 훨씬 적은 데이터로 훈련되었다.</p>
<blockquote>
<ol>
<li>인터넷 이미지의 경우, Crowdsourcing을 통해 자동 생성된 Caption이 포함되는 경우가 많다.</li>
<li>Remote sensing 이미지는 자동으로 생성되므로 Caption이 없으며, 직접 수집하려면 많은 비용과 노력이 필요하다.</li>
</ol>
</blockquote>
<p><strong>&lt;최근 연구&gt;</strong></p>
<ol>
<li><p>인터넷에서 대규모 image-texrt pair를 필터링하여, Remote sensing 이미지와 matching하는 방법을 제안하였으나, 다양한 출처에서 수집된 데이터로 인해 데이터 consistency가 부족한 문제가 존재한다.</p>
</li>
<li><p>기존 인터넷 이미지를 기반으로 한 모델을 활용하여 fine-tuning하는 접근 방식이 연구되었으나, 이러한 방법은 근본적으로 한계가 있다.</p>
</li>
</ol>
<p><strong>이러한 문제를 해결하기 위해, 지상 이미지를 매개체로 활용하는 GRAFT를 제안한다.</strong></p>
<h2 id="multi-modality-for-better-recognition">Multi-modality for better recognition</h2>
<p>Remote sensing 이미지가 촬영된 같은 위치의 지상 이미지를 활용한다.</p>
<p>여러 modality를 결합하는 방식은 다양한 분야에서 성공을 거두었다.</p>
<ol>
<li>text와 image를 함께 활용하는 방식은 인터넷 image 분석에서 성과를 보임</li>
<li>Remote sensing 분야에서는 다중 스펙트럼 이미지 또는 레이더 센서를 활용하여 위성이 포착한 환경을 보다 정확하게 이해할 수 있다</li>
<li>또한, 지리적인 위치 추정을 위한 지상 이미지 modality를 활용하여 Remote sensing 이미지와 지상 이미지를 &quot;명시적으로&quot; 연결할 수 있는 모델을 구축하는 것을 목표로 하였음</li>
</ol>
<p><strong>이 논문에서는 이러한 연구들과는 다른 접근 방식을 제안</strong></p>
<blockquote>
<p><strong>지상 이미지를 매개체로 사용하여 Remote sensing 이미지와 언어를 연결하는 방식을 제시한다</strong></p>
</blockquote>
<h1 id="training-vlm-without-textual-annotations">Training VLM without Textual Annotations</h1>
<p><img src="https://velog.velcdn.com/images/min-soku/post/fd159656-8f6b-40b1-b615-9b43112df532/image.png" alt=""></p>
<blockquote>
<ul>
<li>이미지 수준의 VLM을 GRAFT로 학습(왼쪽)</li>
<li>픽셀 수준의 VLM을 GRAFT로 학습(오른쪽)</li>
</ul>
</blockquote>
<h2 id="graft--ground-remote-alignment-for-training-vlms">GRAFT : Ground Remote Alignment For Training VLMs</h2>
<p>이 논문에서는 두 가지 수준에서 작동하는 VLM을 구축한다.</p>
<ul>
<li>이미지 수준</li>
<li>픽셀 수준</li>
</ul>
<blockquote>
<p><strong>이미지 수준 모델</strong></p>
<ul>
<li>위성 이미지를 전체적으로 이해해야 하는 작업 수행</li>
</ul>
<p>ex) Text-image retrieval, Zero-shot image classification</p>
</blockquote>
<blockquote>
<p><strong>픽셀 수준 모델</strong></p>
<ul>
<li>정확한 위치가 필요한 경우 사용</li>
</ul>
<p>ex) Zero-shot segmentation, VQA</p>
</blockquote>
<p>기존의 VLM은 Image-text pair를 공통된 representation 공간으로 매핑한다.</p>
<p>이 논문에서 목표로 하는 VLM을 구축하기 위해, Remote sensing 이미지를 이 공통된 representation 공간으로 매핑할 수 있는 Feature extractor(특징 추출기)를 개발할 것을 제안한다.</p>
<p>이를 위해 Pre-training 된 CLIP을 사용하여 인터넷의 image-text pair를 공통된 표현 공간으로 매핑한다.</p>
<h3 id="image-level-vlms">Image-Level VLMs</h3>
<p>Remote sensing 이미지를 공통된 representation space($f_G,f_T$)로 매핑하는 Image 수준 feature 추출기($f^I_S$)을 구축하려고 한다.</p>
<p>이를 위해 CLIP과 같은 Contrastive learning을 사용하여 Remote sensing 이미지와 해당하는 지상 이미지 pair를 가깝게 Align하고, 관련 없는 Image pair는 멀어지도록 학습한다.</p>
<p><strong>그러나, 기존의 Contrastive learning은 한 모달리티에서 추출한 feature는 다른 모달리티에서 추출된 단 하나의 feature에 매핑된다고 가정한다.</strong></p>
<blockquote>
<p>하지만, Remote sensing 이미지는 넓은 지역을 포함하므로, 여러 개의 지상 이미지와 연결될 수 있다.</p>
</blockquote>
<p>하나의 Remote sensing 이미지의 Embedding이 해당 지역의 모든 지상 이미지의 Embedding과 가까워지고, 다른 지역의 지상 이미지와는 멀어지도록 학습해야 한다.</p>
<blockquote>
<blockquote>
<p>$B,=,{s_i,{g^j_i}^{N_i}<em>{j=1}}^{N_B}</em>{i=1}$</p>
</blockquote>
<ul>
<li>$s_i$ : Remote sensing 이미지</li>
<li>$g^j_i$ : 해당 Remote sensing 이미지의 지리적 영역에서 촬영된 $N_i$개의 지상 이미지</li>
<li>$N_B$ : 배치 내 Remote sensing 이미지의 개수</li>
</ul>
</blockquote>
<p>이러한 관계를 Loss function을 사용하여 모델링한다.</p>
<blockquote>
<blockquote>
<p>$\mathcal{L}^I (\mathcal{B}, f_S^I) = \frac{1}{N_B} \sum_{i=1}^{N_B} \frac{1}{N_i} \sum_{j=1}^{N_i} -\log \frac{\exp(f_S^I(s_i) \cdot f_G(g_i^j) / \tau)}{\sum_{a=1}^{N_B} \sum_{b=1}^{N_a} \exp(f_S^I(s_i) \cdot f_G(g_a^b) / \tau)}
$</p>
</blockquote>
<ul>
<li>$\mathcal{B}$ : Batch에 포함된 모든 데이터</li>
<li>$N_B$ : Batch 내의 Remote sensing 이미지 개수</li>
<li>$N_i$ : 특정 Remote sensing 이미지 $s_i$에 해당하는 지상 이미지 개수</li>
<li>분자는 Remote sensing 이미지 $s_i$와 해당하는 지상 이미지 $g^j_i$간의 유사도를 지수화</li>
<li>분모는 Remote sensing 이미지 $s_i$가 Batch 내 모든 지상 이미지 $g^b_a$와 얼마나 유사한지 계산한 값</li>
<li>$\tau$ : 하이퍼파라미터</li>
</ul>
</blockquote>
<p>$N_i,=,1$일 경우, 이 Loss funtion은 기존 CLIP의 Contrastive learning의 Loss와 동일해진다.</p>
<blockquote>
<p>$f_G$를 Frozen한 상태에서 이미지 수준 특징 추출기($f^I_S$)를 학습하기 위해 이 Loss function을 사용한다.
<img src="https://velog.velcdn.com/images/min-soku/post/1ba4f256-a012-4c6c-b803-5b2c8519f3d4/image.png" alt=""></p>
</blockquote>
<blockquote>
<p><strong>&lt;기존 Contrastive loss와의 차이점&gt;</strong></p>
<ul>
<li>CLIP 기반 : 일반적으로 한 image에 하나의 text 설명 -&gt; 1:1 정렬</li>
<li>GRAFT : 하나의 Remote sensing 이미지는 여러 개의 지상 이미지와 연결될 수 있음 -&gt; 1:N 정렬 필요</li>
</ul>
</blockquote>
<h3 id="pixel-level-vlms">Pixel-Level VLMs</h3>
<p>Remote sensing 이미지의 Segmentation과 같은 task에는 pixel 수준의 정밀한 위치 정보를 학습할 수 있어야 한다.
이를 위해, 지상 이미지($g^j_i$)가 촬영한 정확한 지리적 위치가 Remote sensing 이미지($s_i$)의 특정 pixel 위치($p^i_j$)에 매핑되도록 한다.</p>
<p>이를 활용하기 위해 Pixel-Level 특징 추출기를 학습해야 한다.</p>
<blockquote>
<p>Remote sensing 이미지 $s$의 각 pixel $p$에 대해 특징 벡터를 생성할 수 있는 $f^P_S$ 네트워크 구조를 가정한다.</p>
</blockquote>
<p>$f^P_S$를 ViT 기반으로 구현하여, Remote sensing 이미지를 겹치지 않는 패치로 나누고, 각 패치에 대한 특징 벡터를 생성한다.</p>
<blockquote>
<ul>
<li>$f^P_S(S)[P]$ : Remote sensing 이미지 $s$ 내 pixel $p$를 포함하는 패치의 출력 특징 벡터</li>
</ul>
</blockquote>
<p>이 Pixel-Level 특징 추출기를 학습하기 위해 Loss function을 사용한다.</p>
<blockquote>
<blockquote>
<p>$\mathcal{L}^P (\mathcal{B}, f_S^P)=\frac{1}{N_B} \sum_{i=1}^{N_B} \frac{1}{N_i} \sum_{j=1}^{N_i} -\log \frac{\exp(f_S^P(s_i)[p^i_j] \cdot f_G(g_i^j) / \tau)}{\sum_{a=1}^{N_B} \sum_{b=1}^{N_a} \exp(f_S^P(s_i)[p^i_j] \cdot f_G(g_a^b) / \tau)}$</p>
</blockquote>
<ul>
<li>$f_S^P(s_i)[p^i_j]$ : Remote sensing 이미지 $s_i$의 픽셀 $p^i_j$에 해당하는 특징 벡터</li>
<li>$f_G(g_i^j)$ : 지상 이미지 $g^j_i$의 특징 벡터</li>
<li>$exp()$ : 두 벡터 간의 cosine similarity를 계산한 후 지수화</li>
<li>분자 : 해당 픽셀의 특징 벡터와 올바른 지상 이미지 간 similarity</li>
<li>분모 : 해당 픽셀의 특징 벡터와 batch 내 모든 지상 이미지 간 similarity 총합</li>
</ul>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/bb7906cf-f04a-44a6-a136-4bc707f161c6/image.png" alt=""></p>
<p>이 Loss function은 <strong>특정 Remote sensing 이미지의 특정 pixel이 올바른 지상 이미지와 가까워지고, 다른 지역의 지상 이미지와는 멀어지도록 학습</strong>한다.</p>
<h2 id="collecting-ground-satellite-image-pairs">Collecting Ground-Satellite Image Pairs</h2>
<p>모델을 학습하기 위해, 지상 이미지와 Remote sensing 이미지의 쌍으로 이루어진 데이터셋이 필요하다</p>
<p>이를 위해 두 가지 종류의 Remote sensing 이미지 데이터셋을 수집하였다.</p>
<ul>
<li>NAIP : 고해상도(1pixel당 1미터)</li>
<li>Sentinel-2 : 저해상도(1pixel당 10미터)</li>
</ul>
<h3 id="ground-images">Ground Images</h3>
<p>Flickr에서 지상 이미지를 수집함</p>
<p>다양한 지역의 대표적인 이미지를 얻기 위해 </p>
<blockquote>
<ul>
<li>특정 인구 밀집 지역만이 아니라 균등하게 여러 위치에서 샘플링</li>
<li>정확한 지리적 tag를 가진 중복되지 않는 이미지만 선택</li>
</ul>
</blockquote>
<p>실내 이미지는 Remote sensing과 관련성이 낮으므로, 제거하기 위해</p>
<blockquote>
<ul>
<li>ResNet18을 활용한 실내-실외 분류기를 사용</li>
</ul>
</blockquote>
<p>실외 이미지만 사용해도 성능 차이가 거의 없었기에 실험의 일관성을 위해
실외 이미지만을 필터링하여 실험의 일관성을 유지하였음</p>
<blockquote>
<p>다양한 지역에서 수집한 실외 지상 이미지와 Remote sensing를 연결하여 데이터셋 구축</p>
</blockquote>
<h3 id="remote-sensing-images">Remote sensing Images</h3>
<p><strong>지상 이미지의 지리적 tag가 있는 위치를 중심으로 Remote sensing 이미지를 샘플링</strong></p>
<blockquote>
<p>지상 이미지가 찍힌 곳과 같은 위치의 Remote sensing 이미지를 매칭</p>
</blockquote>
<p>모든 지상 이미지는 해당하는 Remote sensing 이미지와 매칭됨
<strong>동일한 위치에서 Remote sensing 이미지가 이미 존재하는 경우 추가적인 Remote sensing 이미지 샘플링을 하지 않음</strong></p>
<ul>
<li>Remote sensing 이미지 간 과도한 overlap(중복)을 방지(최소 112픽셀 이상 간격 유지)
<img src="https://velog.velcdn.com/images/min-soku/post/fe60b69f-fe93-4007-86c4-f635c61852c9/image.png" alt=""></li>
</ul>
<p><strong>&lt;샘플링 방법&gt;</strong>
과도한 데이터 중복을 방지하기 위해, 동일 위치에서 25개 이상의 지상 이미지가 있는 경우, 무작위로 25개만 선택</p>
<blockquote>
<p>Augmentation을 위해 224x224 크기가 아닌 448x448 크기의 Remote sensing 이미지를 다운로드함</p>
</blockquote>
<p><strong>&lt;위치 및 시간 일관성&gt;</strong>
지상 이미지와 Remote sensing 이미지 간 위치 Alignment 유지</p>
<blockquote>
<p>Sentinel-2 데이터에서는 시간적인 Alignment도 고려한다.</p>
<ul>
<li>인터넷 이미지가 촬영된 날짜와 가장 가까운 Remote sensing 이미지를 선택(구름 &lt;1%)</li>
<li>NAIP는 재촬영 주기가 길어(2년에 1회), 이러한 시간적인 Alignment를 적용할 수 없다.</li>
<li>Sentinel-2는 5일마다 재촬영 가능하므로 시간적인 Alignment가 가능하다.</li>
</ul>
</blockquote>
<p>EarthEngine API를 사용하여 Remote sensing 이미지를 수집하여 최종적으로, </p>
<ul>
<li>NAIP : 1,020만 개의 이미지 pair 수집</li>
<li>Sentinel-2 : 870만 개의 이미지 pair 수집
<img src="https://velog.velcdn.com/images/min-soku/post/76d4b4c9-6b48-4091-a24e-914cab728382/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/b10daf6a-f26a-458b-8365-405e593739b3/image.png" alt=""></li>
</ul>
<p>결과적으로, 공간적, 시간적으로 Alignment된 대규모 데이터셋을 구축하였다.</p>
<h2 id="enhancing-graft-vlms-with-foundation-models">Enhancing GRAFT VLMs with Foundation Models</h2>
<p>GRAFT 모델의 성능은 이미 뛰어나지만 다른 Foundation 모델과 결합하여 성능을 더욱 확장하여 다양한 응용을 가능하게 할 수 있다.</p>
<h3 id="zero-shot-segmentation">Zero-shot Segmentation</h3>
<p>GRAFT의 Fixel-Level 모델은 이미 Segmentation task를 수행할 수 있다.
하지만 SAM과 결합하면 성능을 더욱 향상시킬 수 있다.</p>
<blockquote>
<ol>
<li><p>GRAFT 모델을 사용하여, 가장 높은 점수를 가진 패치를 선택</p>
<blockquote>
<p>점수를 측정하는 과정이 기술되지 않았는데 위의 내용을 고려했을 때, 각 Pixel과 지상 이미지간 Cosine similarity로 점수를 계산했을 것으로 생각</p>
</blockquote>
</li>
<li><p>선택된 패치의 중심을 SAM에 point prompt로 제공</p>
</li>
<li><p>SAM을 활용하여 더 정교한 Segmentation 수행
<img src="https://velog.velcdn.com/images/min-soku/post/9107ac64-d626-4a2f-b089-d9b02a6c6622/image.png" alt=""></p>
</li>
</ol>
</blockquote>
<h3 id="vqa">VQA</h3>
<p>GRAFT는 기본적으로 간단한 질문에 답할 수 있지만, 복잡한 질문이 필요한 경우, 추가적인 모델이 필요하다.</p>
<p>ViperGPT와 결합하여 자연어 Question을 복잡한 논리 연산으로 변환한다.</p>
<blockquote>
<p>ViperGPT는 LLM을 사용하여 자연어 질이를 프로그램으로 변환하여, 변환된 프로그램이 Open-vocabulary object detector를 호출</p>
</blockquote>
<p>기존의 ViperGPT는 GLIP 기반 detector를 사용하지만, GRAFT pixel-level 모델로 대체하여 활용한다.
<img src="https://velog.velcdn.com/images/min-soku/post/855b603e-7a4b-4a69-86bb-d7a6bbd01405/image.png" alt=""></p>
<h2 id="implementation-details">Implementation Details</h2>
<p>기본 모델을 ViT-B/16을 사용하여 구축하였고, 일부 실험에서는 기본 모델과의 공정한 비교를 위해 ViT-B/32와 비교하여 분석하였다.</p>
<p>모든 모델은 CLIP의 Image encoder로 초기화되었다.</p>
<h1 id="experiments">Experiments</h1>
<h2 id="image-level-understanding">Image-Level Understanding</h2>
<p>GRAFT 모델이 Image-Level의 task에 대해 어떻게 성능을 보이는지 분석</p>
<ol>
<li><p>Zero-shot Image Classification</p>
<blockquote>
<p>이미지에 적절한 텍스트 라벨을 할당하는 작업</p>
</blockquote>
</li>
<li><p>Zero-shot Text-Image Retrieval</p>
<blockquote>
<p>특정 텍스트 쿼리와 관련된 모든 이미지를 검색하는 작업</p>
</blockquote>
</li>
</ol>
<p><strong>&lt;데이터셋 및 평가&gt;</strong>
Sentinel-2 데이터셋으로 학습된 모델의 벤치마크</p>
<ul>
<li>EuroSAT</li>
<li>BigEarthNet</li>
</ul>
<p>NAIP 데이터셋으로 학습된 모델의 벤치마크</p>
<ul>
<li>SAT-4/Sat-6</li>
<li>OpenStreetMap 기반 멀티라벨 데이터셋</li>
</ul>
<p><strong>&lt;기준 모델&gt;</strong>
CLIP을 기본 비교 모델로 설정
기존에는 텍스트 annotation없이 학습된 VLM이 없었음</p>
<p>따라서, Supervised-learning 방식으로 텍스트 annotation과 함께 학습된 모델과 비교</p>
<ul>
<li>CLIP-RSICD</li>
<li>RemoteCLIP</li>
</ul>
<p>또한, 기존의 Zero-shot 모델 외에서, one-shot 학습을 수행한 모델과 비교
<img src="https://velog.velcdn.com/images/min-soku/post/92b65985-91c8-474e-8b5c-db0921636477/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/9eb721e9-47c4-4b72-9e45-aedf38c36ee2/image.png" alt=""></p>
<p>GRAFT 모델의 대부분의 데이터셋에서 다른 모델들을 능가함</p>
<ul>
<li>GRAFT는 텍스트 없이도 기존 수퍼바이즈드 모델보다 더 높은 성능을 보임</li>
<li>특히, Sentinel-2 데이터를 사용한 EuroSAT, BigEarthNet에서 기존 모델보다 월등한 성능을 기록</li>
<li>지도학습 기반 모델보다, 대량의 지상-위성 이미지 쌍을 활용하는 GRAFT 방식이 더 효과적임<blockquote>
<p>즉, GRAFT는 텍스트 없이도 강력한 성능을 발휘하며, 기존 학습 방법보다 더 효율적임을 입증</p>
</blockquote>
</li>
</ul>
<h2 id="pixel-level-understanding">Pixel-Level Understanding</h2>
<p>GRAFT의 Pixel-Level 모델을 Zero-shot Segmentation task에서 평가하였다.</p>
<p>이 실험은 두 가지 벤치마크에서 수행됨</p>
<ul>
<li>NAIP 해상도</li>
<li>Sentinel-2 해상도</li>
</ul>
<p><strong>&lt;비교 모델&gt;</strong>
GRAFT 모델을 CLIPSeg와 비교</p>
<p><img src="https://velog.velcdn.com/images/min-soku/post/71dcd308-b9cf-4ada-8730-c774d1efa72a/image.png" alt=""></p>
<p><strong>&lt;실험 결과&gt;</strong>
GRAFT는 Pixel-Level Segmentation에서도 강력한 성능을 보임</p>
<ul>
<li>NAIP 데이터에서는 기존 모델 대비 성능을 2배 가까이 향상</li>
<li>Sentinel-2 데이터에서도 50% 이상의 성능 향상</li>
<li>GRAFT는 별도의 지도 학습 없이도 뛰어난 zero-shot Segmentation 성능을 달성 가능<blockquote>
<p>GRAFT는 픽셀 수준에서도 강력한 zero-shot 성능을 발휘하며, 기존 CLIP 기반 모델보다 훨씬 효과적이다</p>
</blockquote>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[PIR: Remote Sensing Image-Text Retrieval with Prior Instruction Representation Learning]]></title>
            <link>https://velog.io/@min-soku/PIR-Remote-Sensing-Image-Text-Retrieval-with-Prior-Instruction-Representation-Learning</link>
            <guid>https://velog.io/@min-soku/PIR-Remote-Sensing-Image-Text-Retrieval-with-Prior-Instruction-Representation-Learning</guid>
            <pubDate>Sun, 02 Feb 2025 10:59:44 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>Remote sensing image-text retrieval은 위성이나 드론으로 수집된 대규모 원격 감지 데이터베이스에서 이미지와 텍스트 간의 매칭을 찾는 작업이다.</p>
<p>그러나, Remote sensing 이미지는 작은 object나 배경이나 관련 없는 object로 인해 Semantic noise에 취약하며, visual 및 text representation에 편향을 일으켜 검색 성능을 저하시킨다.</p>
<p>본 논문에서는 Prior Instruction Representation(PIR)이라는 새로운 학습 패러다임을 설계하여, Semantic noise 문제를 해결한다.</p>
<h1 id="instruction">Instruction</h1>
<p>RSITR은 이미지 또는 텍스트를 사용하여 대규모 Remote sensing database에서 일치하는 텍스트 또는 이미지를 검색하는 작업을 수행한다.</p>
<blockquote>
<p>데이터베이스는 위성 또는 항공 드론을 통해 수집되었다.</p>
</blockquote>
<p>RSITR의 training 패러다임에 따라 closed-domain 검색과 open-domain 검색으로 나눌 수 있다.</p>
<p><strong>&lt; Closed-domain retrieval &gt;</strong></p>
<p>단일 dataset에서 supervised training 방식으로 훈련 및 검색이 수행된다.</p>
<ul>
<li><strong>새로운 데이터셋에 대한 generalization 성능이 낮고, 복잡한 지형 요소를 검색하는 능력이 떨어지는 단점이 존재한다.</strong><blockquote>
<p>기존 Closed-domain retrieval은 주로 CNN 기반의 vision representation 및 RNN 기반의 text representation을 사용하며, pair-wise triplet loss를 통해 최적화된다.</p>
</blockquote>
</li>
</ul>
<p><strong>&lt; Open-domain retrieval &gt;</strong></p>
<p>대규모 데이터셋을 pre-training한 후, 작은 데이터셋에서 fine-tuning을 수행하는 방식이다.
이를 통해 정교한 ground element recognition(지형 요소 인식)이 가능하다.</p>
<ul>
<li>CLIP은 open domain retrieval에서 강력한 zero-shot 성능을 보였다
이후, Remote sensing에서의 여러 VLM을 구축하고 Image-text retrieval 성능을 향상시키는 데 집중하였다.<blockquote>
<p>이 모델들의 주요 목표는 Remote sensing 분야에서 foundation vlm을 구축하는 것이며, <strong>Remote sensing의 vision representation을 향상시키는 연구에는 focus를 맞추지 않았다.</strong></p>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/min-soku/post/8c98066c-6e2e-46b3-8b26-5d0e95306ad7/image.png" alt=""></p>
<blockquote>
<p>Natural Scene 데이터셋과 Remote sensing 데이터셋을 사용하여 subspace를 visualization한 것</p>
<ul>
<li>Natural scene의 subspace에서는 이미지와 텍스트 표현이 Remote sensing subspace보다 더 명확하게 분리된다.</li>
</ul>
</blockquote>
<p><strong>Natural 이미지와 다르게 Remote sensing 이미지의 작은 크기의 object는 Semantic noise의 영향을 더 많이 받는다.</strong></p>
<blockquote>
<p>Semantic noise : 배경, 관련없는 객체 등</p>
</blockquote>
<p>Semantic noise에 대한 과도한 focus는 시각적 및 텍스트 표현을 왜곡시키고, semantic confusion zone을 초래하여 retrieval 성능에 큰 영향을 미친다.</p>
<p>이를 해결하기 위한 여러 연구가 존재하였다.</p>
<ul>
<li>Redundant feature filtering network<blockquote>
<p>불필요한 정보를 제거하는 필터링 기법</p>
</blockquote>
</li>
<li>Scene-aware aggregation network<blockquote>
<p>Scene의 전반적인 구조를 인식해 confusion zone을 줄이는 방법</p>
</blockquote>
</li>
</ul>
<p><strong>그러나, 이러한 방법들은 CNN-based vision representation 및 RNN-based text representation에 의존하고 있으며 long-range dependency modeling 및 remote sensing 데이터 증가에 효과적이지 않았다.</strong></p>
<p>Transformer가 CV 및 NLP에서 강력한 성능을 보이며, Transformer 기반의 시각 및 텍스트 표현이 검색 성능을 더욱 향상시킬 수 있다.
하지만, Transformer를 기반으로 feature를 추출하는 방식을 사용하였는데, 이 방법은 Remote sensing 데이터의 특성을 완전히 반영하지 못해, 검색 성능 향상이 제한적이다.</p>
<blockquote>
<p><strong>따라서, Remote sensing 데이터에 특화된 framework가 필요하다</strong></p>
</blockquote>
<p>이 논문은 Prior instruction representation을 제안하여 Semantic noise를 줄이고자 한다.
<img src="https://velog.velcdn.com/images/min-soku/post/45c5490e-3b1e-412d-bc0b-ec575a8776ec/image.png" alt=""></p>
<p><strong>1. PIR-ITR : Closed-domain retrieval용</strong>
PIR-ITR은 Remote sensing scene recognition의 prior knowledge을 활용하여 장기 의존성 모델링을 수행하도록 설계되었다.
이를 통해 unbiased한 시각 및 텍스트 표현을 보장한다.
<img src="https://velog.velcdn.com/images/min-soku/post/52c548eb-c098-40b4-92f6-41d7db05f28d/image.png" alt=""></p>
<p>두 가지 Progressive attention encoder 구조를 도입하여 장기 의존성 모델링을 수행하고 주요 특징 표현을 향상시킨다.</p>
<blockquote>
<ul>
<li>Spatial-PAE : 외부 지식을 활용하여 visual-spatial perception을 향상시킨다.</li>
<li>Temporal-PAE : Previous time step을 활용하여 현재 time step을 cyclically activate 함으로써 position information의 부정확성을 줄인다.</li>
</ul>
</blockquote>
<p>추가적으로, Remote sensing 데이터는 클래스간 semantic similarity가 높아 혼동되는 경우가 많아, Cluster-wise attribution loss를 통해 클래스 간 semantic confusion을 줄이고 검색 성능을 향상시킨다.</p>
<p><strong>2. PIR-CLIP : Open-domain retrieval용</strong>
이 논문에서는 PIR을 기반으로 한 2단계 CLIP 기반 method인 PIR-CLIP을 제안하여, Remote sensing vision-text representation의 Semantic noise문제를 해결하고, open-domain image-text retrieval성능을 향상시킨다.
<img src="https://velog.velcdn.com/images/min-soku/post/dee97c4b-a119-433a-8d13-990c78ee5492/image.png" alt=""></p>
<blockquote>
<p>PIR-ITR보다 더 높은 검색 성능을 보여준다</p>
</blockquote>
<h1 id="related-work">Related work</h1>
<h2 id="remote-sensing-image-text-retrieval">Remote Sensing Image-Text Retrieval</h2>
<h3 id="closed-domain-method">Closed-domain Method</h3>
<p>Closed-domain method는 단일 데이터셋에서 supervised learning으로 training 및 retrieval을 수행하는 방식이다.
이 방법은 단순한 환경에서는 효과적이지만, 복잡한 지형 요소를 검색하는 데 한계가 존재한다.</p>
<p><strong>&lt;기존 연구들의 접근 방식&gt;</strong></p>
<ul>
<li><p>Self-Interaction</p>
<blockquote>
<p>동일한 모달리티 내에서만 상호작용하여 modal semantic representation을 강화</p>
</blockquote>
</li>
<li><p>multi-modality fusion</p>
<blockquote>
<p>서로 다른 모달리티의 정보를 결합하여 공동 semantic representaion을 얻음</p>
</blockquote>
</li>
<li><p>Global&amp;Local information fusion</p>
<blockquote>
<p>Attention 기반 모듈을 사용하여 다층 정보를 동적으로 fusion</p>
</blockquote>
</li>
</ul>
<p>이러한 방법들은 실제 Remote sensin 환경의 복잡성을 충분히 반영하지 못하고, 세밀한 인식 학습에 실패하였다.</p>
<h3 id="open-domain-method">Open-domain Method</h3>
<p>Open-domain Method는 대규모 데이터셋에서 pre-training한 후, 특정 데이터셋에서 fine-tuning을 통해 성능을 개선하는 방식이다.</p>
<p>CLIP이 등장하면서, Remote sensing 분야에서도 CLIP을 활용한 다양한 연구가 진행되었다.</p>
<p><strong>&lt;기존 연구들의 접근 방식&gt;</strong></p>
<ol>
<li><p>RemoteCLIP</p>
<blockquote>
<p>최초의 Remote sensing VLM으로, 언어 기반 검색 및 Zero-shot 검색을 가능하게 함</p>
</blockquote>
</li>
<li><p>GeoRSCLIP</p>
<blockquote>
<p>500만 개 이상의 Remote sensing image-text 데이터셋(RS5M)을 구축하고, 지리 정보를 활용하여 GeoRSCLIP 모델을 학습했다.</p>
</blockquote>
</li>
<li><p>SkyCLIP</p>
<blockquote>
<p>새로운 Remote sensing 데이터셋인 SkyScript 및 SkyCLIP 모델을 개발</p>
</blockquote>
</li>
</ol>
<p>그러나, 이 모델들은 Remote sensing 데이터를 위한 foundation 모델을 구축하는 데 초점을 맞추었으며, visual representation을 향상시키는 방법을 깊이 연구하지 않았다.</p>
<p><strong>따라서, CLIP을 기반으로 한 새로운 모델을 개발하여, Remote sensing open-domain retrieval 성능을 향상시키는 것이 목표이다.</strong></p>
<h2 id="cross-attention-mechanism">Cross-Attention Mechanism</h2>
<p>Cross-Attention은 transformer 아키텍처에서 두 개의 서로 다른 embedding sequence를 혼합하는 Attention mechanism이다.</p>
<p>이 두 개의 embedding sequence는 서로 다른 modality에서 오거나, 서로 다른 output에서 생성될 수 있다.</p>
<ul>
<li><p>Stacked Cross Attention</p>
<blockquote>
<p>이미지와 문장 간의 Contextual Attention을 제공하는 방법을 제안하여 이미지와 문장 간의 관계를 더욱 효과적으로 학습할 수 있도록 함</p>
</blockquote>
</li>
<li><p>Multi-Modality Cross Attention Network</p>
<blockquote>
<p>이미지와 문장을 정렬하는 네트워크를 개발하여 단일 딥러닝 모델에서 모달리티 간, 또는 모달리티 내부의 관계를 학습할 수 있다</p>
</blockquote>
</li>
<li><p>CASC Framework</p>
<blockquote>
<p>다중 레이블 prediction과 local alignment를 결합한 cross modal attention 모델로 global semantic consistency를 유지하는 방식을 제안</p>
</blockquote>
</li>
<li><p>Plug-and-Play Regulators</p>
<blockquote>
<p>자동으로 cross-modal representation을 contextualize하고 aggregate할 수 있는 regulator를 개발</p>
</blockquote>
</li>
</ul>
<p>기존 연구들은 특정 문제에 맞춰 최적화 되어 있어 범용성이 부족하다.
<strong>보다 범용적(Universal)이고 쉽게 조정가능한(Adjustable) Cross-Attention 구조가 필요하다.</strong></p>
<h1 id="remote-sensing-image-text-retrieval-1">Remote Sensing Image-Text Retrieval</h1>
<h2 id="generic-image-and-text-encoding일반적인-이미지-텍스트-인코딩">Generic Image and Text Encoding(일반적인 이미지-텍스트 인코딩)</h2>
<p>Remote sensing image를 해석하는 한 가지 방법은 이미지와 텍스트를 의미적(semantically)으로 align하는 것이다.
Remote sensing image-text retrieval은 이러한 image-text alignment를 위한 기술이다.</p>
<p><strong>일반적으로, visual 및 text encoder를 통해 feature를 encoding한 후, 공통되는 semantic space에서 align하는 방식을 따른다.</strong></p>
<blockquote>
<p>RSITR에서는 CNN 및 Transformer 기반 image encoder가 이미지 feature를 추출하는 데 사용된다.</p>
</blockquote>
<h3 id="이미지-인코딩-과정">이미지 인코딩 과정</h3>
<ul>
<li>RGB형식의 이미지 $I_{img},∈,\R^{3\times H\times W}$</li>
<li>Image encoder $E_{img}$를 사용하여 feature를 추출</li>
<li>이를 통해 Global($f_{cls}$) 및 Local feature($F_v$) 생성<blockquote>
<blockquote>
<p>$[f_{cls},F_v],=,E_{img}(I_{img};\theta_{img})$</p>
</blockquote>
<ul>
<li>$f_{cls}$ : Global feature</li>
<li>$F_v$ : Local feature</li>
<li>$\theta_{img}$ : Fine-tuning 가중치</li>
<li>$[,]$ : Squence 길이 dimension을 따라 Concatenate</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>CNN VS Transformer</strong>
<strong>- CNN 기반 Image encoder</strong></p>
<ul>
<li>$f_{cls}$는 고수준 특징(Global feature)</li>
<li>$F_v$는 저수준 특징 집합(Local feature)</li>
</ul>
<p><strong>- Transformer 기반 Image encoder</strong></p>
<ul>
<li>CNN 보다 Long range dependency를 효과적으로 학습</li>
</ul>
<h3 id="텍스트-인코딩-과정">텍스트 인코딩 과정</h3>
<ul>
<li>주어진 입력 텍스트 $T_{txt}$</li>
<li>텍스트 인코더 $E_{txt}$를 사용하여 feature를 추출</li>
<li>이미지와 마찬가지로 Global($t_{cls}$) 및 Local feature($F_t$)를 생성<blockquote>
<blockquote>
<p>$[t_{cls},F_t],=,E_{txt}(T_{txt};\theta_{txt})$</p>
</blockquote>
<ul>
<li>$t_{cls}$ : Global feature</li>
<li>$F_t$ : Local feature</li>
<li>$\theta_{txt}$ : fine-tuning 가중치</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>RNN VS Transformer</strong>
<strong>- RNN 기반 Text encoder</strong>
Global feature $t_{cls}$는 주로 Local feautre $F_t$의 Average pooling으로 생성됨</p>
<p><strong>- Transformer 기반 Text encoder</strong>
입력 Sequence의 모든 position을 동시에 고려하여 관계를 학습</p>
<h2 id="various-image-text-alignment">Various Image-Text Alignment</h2>
<p>Image와 Text 간의 Alignment를 달성하는 간단한 방법은 Vision 및 Text encoder의 파라미터를 Learnable한 가중치($\theta_{img},\theta_{txt}$)로 fine-tuning하여 Global feature
($f_{cls},t_{cls}$)를 align하는 것이다.</p>
<blockquote>
<p>가중치들을 미세 조정(fine-tuning)하여, 모델이 이미지-텍스트 정렬에 더 잘 적응하도록 하여 두 인코더의 출력(특징 벡터)을 정렬하여 이미지와 텍스트가 서로 매칭되는지 확인</p>
</blockquote>
<p>대표적인 방법으로 Visual Semantic Embedding(VSE)이 있다.</p>
<blockquote>
<p>이미지와 텍스트 공통 semantic space에 매핑하여 정렬</p>
</blockquote>
<p>이 방법은 COCO와 같은 General한 Image-text pair가 많은 데이터셋에서는 좋은 성능을 발휘한다.</p>
<p><strong>하지만, Remote sensing 이미지는 일반 이미지와 다르다.</strong></p>
<ul>
<li>위성 사진은 Semantic noise가 많고 지형과 Object가 다양하고 정밀한 정렬이 어렵다.</li>
</ul>
<h3 id="기존-방법의-성능-및-한계">기존 방법의 성능 및 한계</h3>
<p>SCAN, CAMP, CAMERA와 같은 방법들은 Image와 Text 간의 feature level 상호작용을 도입하였으나 Remote sensing 데이터의 복잡성을 충분히 반영하지 못했다.</p>
<p><strong>&lt;문제점&gt;</strong></p>
<ul>
<li>Remote sensing 이미지의 규모가 다양하다.</li>
<li>데이터가 방대하여 Redundant information이 많이 포함되어 있다.</li>
<li>Semantic consistency를 이루는 것이 어렵다.</li>
</ul>
<h3 id="remote-sensing-이미지를-위한-개선된-방법">Remote sensing 이미지를 위한 개선된 방법</h3>
<p><strong>- Multi-scale feature fusion(다중 스케일 특징 융합)</strong>
AMFMN, SWAN 같은 방법은 Global, Local feature를 multi-scale로 fusion한다.</p>
<blockquote>
<p>multi-scale로 fusion?
Global feature와 Local feauture를 fusion하여 이미지를 더 정밀하게 이해하는 방법</p>
<blockquote>
<ul>
<li>Global feature만 사용하면 이미지의 전체적인 의미는 파악할 수 있으나, 세부적인 정보가 부족하다</li>
<li>Local feature만 사용하면 세부적인 정보는 알 수 있지만, 전체 맥락을 놓칠 수 있다.</li>
</ul>
</blockquote>
</blockquote>
<p>Remote sensing 이미지에서 중요한 feature를 추출하고 Semantic noise를 줄이는 효과를 얻을 수 있다.</p>
<p><strong>- Graph-based models(그래프 기반 모델)</strong>
GaLR은 Local visual feature($F_v$)와 그래프 합성곱 신경망 GCN을 통해 처리된 외부 Object-level knowledge($F_l$)를 결합한다.</p>
<blockquote>
<p>Graph-based model?
Remote sensing 이미지는 복잡한 구조와 다양한 객체들이 포함되어 있어, 단순히 Global, Local feature 만으로는 복잡한 관계를 이해하기 어렵다.</p>
<blockquote>
<p>이미지의 object들(Node)과 External object-level knowledge(Edge)를 활용하여 object간의 관계를 학습한다.</p>
</blockquote>
</blockquote>
<blockquote>
<blockquote>
<p>$E_{img-img}(F_v,F_l;\theta_{img-img})$</p>
</blockquote>
<ul>
<li>$F_v$ : Local visual feature</li>
<li>$F_l$ : External object-level knowledge</li>
</ul>
</blockquote>
<p>Feature level 상호작용을 통해 정밀한 정렬 시도</p>
<p><strong>&lt;요약&gt;</strong>
기존 방법들은 일반적인 Image-text retrieval에서는 효과적이지만 Remote sensing 데이터에서는 정밀한 alignment를 이루는 데 한계가 존재
Remote sensing 이미지는 Semantic noise가 많고, 다양한 스케일의 데이터가 존재하기 때문에 Multi-scalue fusion 및 Graph-based model이 필요하다.</p>
<h1 id="prior-instruction-representation-learning">Prior Instruction Representation Learning</h1>
<h2 id="preliminaries">Preliminaries</h2>
<p>Remote sensing 이미지에는 많은 Semantic noise가 존재하여, Visual semantic representation에 편향을 발생시킨다.</p>
<p>기존 방법에서는 추가적인 Prompts또는 Instructoin을 도입하여 모델이 더 나은 representation을 학습하도록 유도하였다.</p>
<p>이러한 방법에 영감을 받아, AID 데이터셋에서 Pre-train된 ResNet을 Instruction encoder로 사용한다.</p>
<blockquote>
<blockquote>
<p>$E_{inst}(I_{img};\theta_{ins})$</p>
</blockquote>
<ul>
<li>$\theta_{ins}$는 Pre-trained 가중치로, 이를 통해 Instruction embedding을 추출한다.</li>
<li>$\R^{d\times 1}$공간에서 embedding이 표현된다.</li>
</ul>
</blockquote>
<h3 id="galr과의-차이점">GaLR과의 차이점</h3>
<p>GaLR은 Local visual feature($F_v$)와 그래프 합성곱 신경망(GCN)으로 처리된 External object-level knowledge을 통합한다.</p>
<p><strong>하지만, GaLR의 feature fusion은 이미지의 고유 representation에 영향을 줄 수 있다.</strong></p>
<p><strong>PIR의 차이점</strong>
GaLR과 달리, PIR은 Instruction embedding을 사용하여 Visual feature representation을 보조한다.</p>
<blockquote>
<blockquote>
<p>$E_{img-img}([f_{cls},F_v];f_{ins},\theta_{img-img})$</p>
</blockquote>
<p>지시문 $f_{ins}$의 도움을 받아 편향되지 않은 visual representation을 전역 특징과 지역 특징으로부터 필터링하는 것이 목표</p>
</blockquote>
<h3 id="external-object-level-knowledge-vs-instruction-embedding">External object-level knowledge vs Instruction embedding</h3>
<p><strong>- External object-level knowledge</strong>
<strong>이미지 외부에서 얻어지는 지식으로 Object 간의 관계나 일반적인 특성을 나타내어 이미지 속 object에 대한 추가적인 정보를 제공한다.</strong></p>
<p>GCN은 외부 지식을 통해 object간의 관계를 학습하여 더 나은 검색 accuracy를 달성한다.</p>
<blockquote>
<p>객체 간의 관계를 관계를 강화하는 것이 목적</p>
</blockquote>
<p><strong>- Instruction embedding</strong>
<strong>모델 학습 과정에서 사전 학습된 모델 또는 모델 내부에서 생성된 지시문을 임베딩 형태로 변환한 것으로 모델이 어떤 특징에 집중해야 하는지를 유도하는 학습 가이드라인이다.</strong></p>
<p>Instruction embedding은 이미지 인코딩 과정에서 visual feature의 표현 방식을 조정하는 데 사용되어 더 나은 visual representation을 학습하도록 지원한다</p>
<blockquote>
<p>모델 학습의 방향성을 유도하여 편향 없는 표현을 학습하는 것이 목적</p>
</blockquote>
<h2 id="belief-strategy">Belief Strategy</h2>
<p>Belief strategy는 Instruction embedding을 사용하여 belief matrix를 구축한 후 feature를 필터링하여 편향되지 않은 visual representation을 달성한다.</p>
<blockquote>
<p>신뢰 전략은 모델이 어떤 시각적 특징(Visual Features)에 더 집중해야 하는지를 Instruction Embeddings을 통해 유도한다</p>
</blockquote>
<p>Remote sensing 장면 인식의 사전 지식 $f_{ins}$는 Local feature에 대한 belief matrix를 계산하는 데 사용된다.</p>
<p><strong>1. Belief matrix 생성</strong></p>
<blockquote>
<blockquote>
<p>$M^{bel},=,Softmax(f^T_{ins}[f_{cls},F_v])$</p>
</blockquote>
<ul>
<li><p>Instruction embedding과 Local feature $[f_{cls},F_v]$를 결합하여 계산한다.</p>
<blockquote>
<p>결합하는 방법은 나와있지 않으나, 내적, Attention 메커니즘을 사용할 수 있을 것으로 추측</p>
</blockquote>
</li>
<li><p>이 행렬은 각 특징의 중요도를 나타내는 점수를 제공</p>
</li>
</ul>
</blockquote>
<p><strong>2. 시각적 특징 정렬 및 필터링</strong></p>
<p>이후, 신뢰 행렬의 점수를 기반으로 특징을 정렬하고, 필터링하여 상위 k개의 특징만 선택</p>
<blockquote>
<blockquote>
<p>$[v_{cls},E_v]; \underrightarrow {M_{bel},Sort&amp;Filter};F&#39;_v$</p>
</blockquote>
<ul>
<li>중요한 특징만 선택하여, 덜 중요한 정보는 제거</li>
</ul>
</blockquote>
<p>이 방식은 경험적으로 설정된 k값에 의존하며, 선택된 특징 수가 고정되어 있다.</p>
<ul>
<li>실제 상황에서는 정확히 몇 개의 특징을 사용할지 미리 정하기 어렵다</li>
</ul>
<p><strong>특징을 동적으로 필터링할 수 있도록 Soft belief strategy를 제안</strong></p>
<p><strong>Soft belief strategy</strong>
순위 기반 방식으로 각 특징의 상대적인 중요도를 계산한다.</p>
<blockquote>
<blockquote>
<p>$R_j,=,1+\sum^{m+1}_{k=1}I(M^{bel}_k&lt;M^{bel}_j)$</p>
</blockquote>
<ul>
<li>$R_j$는 Soft belief strategy에서의 feature의 순위를 계산한다.</li>
<li>지표함수 $I$는 조건이 참이면 1, 거짓이면 0을 반환하여 특징의 순위를 결정한다.</li>
</ul>
</blockquote>
<p>마지막으로, 계산된 신뢰 행렬 점수와 랭킹 점수를 사용하여 각 visual feature에 가중치를 부여한다.</p>
<blockquote>
<blockquote>
<p>$F&#39;<em>v,=,\sum^{m+1}</em>{l=1}F_l,⋅,(M^{bel}_j+\frac{1}{\sqrt R_j})$</p>
</blockquote>
<ul>
<li>Belief matrix $M^{bel}$과 순위 기반 가중치 $\frac{1}{\sqrt R_j}$를 통해 각 특징에 가중치를 부여한다.</li>
</ul>
</blockquote>
<p>중요한 특징에 더 높은 가중치를 부여하여 편향되지 않은 visual feature를 생성한다.</p>
<h2 id="image-text-alignment-with-pir-learning">Image-Text Alignment with PIR Learning</h2>
<h3 id="progressive-attention-encoder-layer">Progressive Attention Encoder Layer</h3>
<p>TEL(Transformer Encoder Layer)을 기반으로 한 Progressive Attention Encoder Layer를 설계하였으며, 이 layer는 self-attention과 cross-attetion을 통합한다. 
<img src="https://velog.velcdn.com/images/min-soku/post/9958226d-a4c2-4aba-9b91-45acdef1bb65/image.png" alt=""></p>
<p>두 개의 서로 다른 시퀀스가 주어졌을 때</p>
<ul>
<li>$H^S_{l-1}∈\R^{d\times N}$</li>
<li>$H^C_{l-1}∈\R^{d\times N}$</li>
</ul>
<p><strong>Self-Attention</strong></p>
<blockquote>
<blockquote>
<p>$H^S_l,=,H^S_{l-1}+LN(MHA(H^S_{l-1},H^S_{l-1},H^S_{l-1}))$</p>
</blockquote>
<p>시퀀스 $H^S_{l-1}$에 multi-head attention을 적용하고 레이어 정규화를 통해 정규화한 결과에 $H^S_{l-1}$를 더한다</p>
</blockquote>
<p><strong>FFN</strong></p>
<blockquote>
<blockquote>
<p>$H^S_{l+1},=,H^S_l+LN(MLP(H^S_l))$</p>
</blockquote>
<p>MLP를 통해 시퀀스를 FFN으로 처리한 후, 레이어 정규화한 결과에 $H^S_l$을 더한다</p>
</blockquote>
<p><strong>Cross-Attention</strong></p>
<blockquote>
<blockquote>
<p>$H^C_l,=,H^C_{l-1}+LN(MHA(H^C_{l-1},H^S_{l+1},H^S_{l+1}))$</p>
</blockquote>
<p>시퀀스 $H^C_{l-1}$에 시퀀스 $H^S_{l+1}$를 병합하여 MHA를 적용하고 레이어 정규화를 수행한 결과에 $H^C_{l-1}$를 더한다</p>
</blockquote>
<p><strong>FFN</strong></p>
<blockquote>
<blockquote>
<p>$H^C_{l+1},=,H^C_l+LN(MLP(H^C_l))$</p>
</blockquote>
<p>시퀀스를 MLP를 통해 처리한 후 레이어 정규화를 수행한 결과에 $H^C_l$를 더해 최종 시퀀스를 만든다</p>
</blockquote>
<p><strong>Progressive Attention Encoder Layer의 계산은 $PAEL(H^S_{l-1},H^C_{l-1})$로 정의할 수 있다</strong></p>
<h3 id="progressive-attention-encoder">Progressive Attention Encoder</h3>
<p>PAEL간의 메시지 전송을 위한 두 가지 구별된 방법을 개발하였다.</p>
<ul>
<li>Spatial-PAE</li>
<li>Temporal-PAE
<img src="https://velog.velcdn.com/images/min-soku/post/01f78c37-952e-41e3-978a-7bfda5d29c92/image.png" alt=""></li>
</ul>
<h4 id="spatial-pae">Spatial-PAE</h4>
<p>외부 정보로부터 입력 시퀀스에 linear  projection을 통해 Spatial connection을 설정한다.
fusion based 방법과 달리 Cross-attention에 의존한다.</p>
<blockquote>
<p>Fusion based 방식은 다양한 데이터 소스를 단순히 결합하여 특징을 추출하는 방식으로 Concatenation을 사용</p>
</blockquote>
<p>외부 정보 $F_{ins},=,[f_{ins},f_{ins},...,f_{ins}]$로 활성화된 필터링된 특징에 대한 장거리 의존 관계를 모델링한다.</p>
<blockquote>
<blockquote>
<p>$\hat{F}<em>v^i = \text{PAEL} \left( F_v^{i-1}, W_s^i F</em>{ins} \right), \quad i = 1, 2, \ldots, n_v$</p>
</blockquote>
<ul>
<li>$\hat{F}<em>v^i,=,[\hat{f}</em>{r_1}^i,...,\hat{f}_{r_k}^i]$ : i번째 PAEL의 output이다.</li>
<li>$F_v^0$ : 초기 local visual feature</li>
<li>$W_s^i$ : i번째 linear projection(선형 변환)의 가중치</li>
</ul>
</blockquote>
<p>편향되지 않은 임베딩을 얻기 위해, local embedding을 계산한다.</p>
<blockquote>
<blockquote>
<p>$f_{loc} = \text{Head} \left( \hat{f}_{r_1}^{n_v} \right)$</p>
</blockquote>
<ul>
<li>$Head()$ : TEL의 마지막 layer에서 중요한 정보를 추출하는 모듈(마지막 layer의 head embedding을 편향되지 않은 embedding으로 매핑)</li>
</ul>
</blockquote>
<p>이후, 편향되지 않은 임베딩과 global feature를 결합하여 최종 visual embedding을 얻는다.</p>
<blockquote>
<p>$v_{emb} = f_{cls} + f_{loc}$</p>
</blockquote>
<h4 id="temporal-pae">Temporal-PAE</h4>
<p>이전 시간 단계(Previous Time Step)로부터의 입력 시퀀스에 Linear Projection을 통해 시간적 연결(Temporal Connection)을 설정한다
TEL에서는 Positional encoding이 시퀀스 내의 위치 관계를 효과적으로 반영하지 못할 수 있다.</p>
<blockquote>
<blockquote>
<p>$\hat{F}_t^i = \text{PAEL} \left( F_t^{i-1}, W_t^i F_t^{i-1} \right), \quad i = 1, 2, \ldots, n_t$</p>
</blockquote>
<ul>
<li>$\hat{F}<em>t^i,=,[\hat{t}</em>{cls},\hat{e}<em>{1}^i,...,\hat{e}</em>{k}^i]$ : i번째 PAEL의 output이다.</li>
<li>$F_t^0,=,[t_{cls},F_t]$ : 초기 Text sequence</li>
<li>$W_t^i$ : i번째 linear projection의 가중치</li>
</ul>
</blockquote>
<p>이후, 편향되지 않은 local embedding을 계산한다.</p>
<blockquote>
<blockquote>
<p>$t_{loc} = \text{Head} \left( \hat{t}_{cls}^{n_t} \right)$</p>
</blockquote>
<ul>
<li>$Head()$ : TEL의 마지막 layer에서 중요한 정보를 추출하는 모듈(마지막 layer의 head embedding을 편향되지 않은 embedding으로 매핑)</li>
</ul>
</blockquote>
<p>마지막으로, 편향되지 않은 임베딩과 global feature를 결합하여 최종 ㅅtext embedding을 얻는다.</p>
<blockquote>
<p>$t_{emb} = t_{cls} + t_{loc}$</p>
</blockquote>
<h3 id="pir-itr-and-pir-clip">PIR-ITR and PIR-CLIP</h3>
<h4 id="pir-itr">PIR-ITR</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/95bdce4b-55b1-48a1-b811-07e275ca7545/image.png" alt="">
PIR-ITR의 hard belief strategy을 계승하여 soft belief strategy를 설계했다.</p>
<p><strong>1. 이미지-텍스트 쌍 생성</strong>
Remote sensing 데이터셋 $D_{img-txt}$로부터 Image-text pair의 positive sample을 수집한다</p>
<blockquote>
<p>${(I_{\text{img}}^1, T_{\text{txt}}^1, S_{\text{cls}}^1), (I_{\text{img}}^2, T_{\text{txt}}^2, S_{\text{cls}}^2), \ldots, (I_{\text{img}}^m, T_{\text{txt}}^m, S_{\text{cls}}^m)}$</p>
</blockquote>
<p><strong>2. feature encoding</strong>
이미지$I_{img}$와 텍스트$T_{txt}$를 각각 인코딩한다</p>
<blockquote>
<ul>
<li>$[f_{\text{cls}}, F_v]$ : Global/Local visual feature</li>
<li>$f_{\text{ins}}$ : Instruction embedding</li>
<li>$[t_{\text{cls}}, F_t]$ : Global/Local text feature </li>
</ul>
</blockquote>
<p><strong>3. Belief matrix 및 순위 계산</strong>
Visual feature와 Instruction embedding을 이용하여 Belief matrix ($M^{bel}_j$)를 계산하고 각 요소에 대한 순위 $R_j$를 산출한다.</p>
<p>각 특징의 중요도를 평가하여 순위 기반 visual feature($F&#39;_v$)를 생성한다.</p>
<p><strong>4. Spatial-PAE &amp; Temporal-PAE 적용</strong>
Spatial-PAE를 사용하여 공간적 특징(Spatial Features)을 강화하고,
Temporal-PAE를 통해 시간적 관계(Temporal Relationships)를 보완한다.</p>
<p><strong>5. 최종 임베딩 (Final Embedding)</strong>
최종 visual embedding($v_{emb}$)와 최종 text embedding($t_{emb}$)를 얻는다.</p>
<p><strong>&lt;PIR-ITR의 특징&gt;</strong></p>
<ul>
<li>복잡하고 큰 구조로 인해 대규모 데이터 학습에 어려움이 있고 Spatial-PAE와 Temporal-PAE같은 추가 모듈이 필요하여 training cost가 증가한다.</li>
</ul>
<h4 id="pir-clip">PIR-CLIP</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/d6dc497d-699e-4fd1-a663-6d3a4c465dbe/image.png" alt=""></p>
<p>PIR-CLIP은 CLIP 모델을 기반으로하여 PIR 학습을 적용해 Remote sensing image-text retrieval 성능을 개선한 방법이다.</p>
<p><strong>1. RS5M 데이터셋 사전 학습 (Pre-training on RS5M Dataset)</strong>
CLIP을 사용하여 RS5M 데이터셋에서
대조 손실(Contrastive Loss)로 사전 학습(Pre-training)을 수행한다</p>
<blockquote>
<p>RS5M 데이터셋이라는 큰 데이터로 이미지와 텍스트를 미리 학습한다</p>
</blockquote>
<ul>
<li>입력 데이터 : Remote sensing image, text description</li>
</ul>
<blockquote>
<p><strong>시각 인코더와 텍스트 인코더의 출력은 공통 임베딩 공간(shared embedding space)에 매핑.</strong></p>
<blockquote>
<p>이때, 대조 손실(contrastive loss)을 통해 올바른 이미지-텍스트 쌍은 가까이 위치하고, 잘못된 쌍은 멀리 떨어지도록 학습</p>
</blockquote>
</blockquote>
<p><strong>2. 세부 조정 (Fine-Tuning)</strong>
이후, RSITR 데이터셋에서 시각적 표현(Visual Representation)을 세부 조정(Fine-Tune)한다.</p>
<blockquote>
<p>이후, 실제 위성 이미지 데이터로 미세 조정을 해서 더 정확하게 만든다</p>
</blockquote>
<ol>
<li><p>앞서, Pre-trained된 ResNet을 Instruction encoder로 Remote sensing image의 instruction embedding 추출</p>
</li>
<li><p>이미지를 작은 패치로 나눠, 앞서 Pre-trained된 ViT에 입력하여 visual feature 추출한다.</p>
<blockquote>
<p><strong>ViT 구조 수정 (ViT Structure Modification)</strong></p>
<ul>
<li>PIR-CLIP의  ViT는 Patching을 위해 Convolution을 사용하여 ViT 구조를 수정한다.</li>
<li>Connvolution을 적용하여 Spatial-PAE 없이도 패치 간 공간적 관계를 더 잘 포착하고 더 세밀하게 이미지 특징을 파악할 수 있다</li>
</ul>
</blockquote>
</li>
<li><p>Instruction encoder를 통해 얻은 embedding을 기반으로 Soft belief strategy를 실시</p>
</li>
</ol>
<blockquote>
<p><strong>PIR-ITR과의 차이점 (Differences from PIR-ITR)</strong></p>
</blockquote>
<ul>
<li><strong>1. 시각적 백본(Visual Backbone) 변경</strong><blockquote>
<p>기존의 단순한 CNN encoder 대신 ViT(Vision Transformer)와 ResNet 모델로 시각적 백본을 업데이트한다.</p>
</blockquote>
</li>
<li><strong>2. 텍스트 인코더 변경</strong><blockquote>
<p>텍스트 인코더는 대규모 Remote sensing 데이터셋으로 훈련된 Language Transformer로 교체한다.</p>
</blockquote>
</li>
</ul>
<ol start="4">
<li>최종 프로세스 (Final Process)
소프트 신뢰 전략(Soft Belief Strategy)을 적용한 후,
트랜스포머 인코더(Transformer Encoder)를 통해
시각적 특징(Visual Features)과 지시문 특징(Instructional Features) 간의 상호작용을 강화한다.</li>
</ol>
<p><strong>3. 최종 손실 계산 및 모델 최적화</strong>
대조 손실(contrastive loss)과 소속 손실(affiliation loss)을 결합하여 모델을 최적화합니다</p>
<p><strong>&lt;PIR-CLIP의 특징&gt;</strong></p>
<ul>
<li>대규모 데이터셋에 적합하도록 설계되어 효율적으로 빠른 학습이 가능하다.</li>
<li>PIR-ITR에 비행 추가적인 Spatial-PAE가 필요하지 않고 더 간단한 구조로 작동한다.</li>
</ul>
<h3 id="loss-function">Loss Function</h3>
<h4 id="contrastive-loss">Contrastive Loss</h4>
<p><strong>1. 임베딩된 벡터 (Embedded Vectors)</strong>
PIR-ITR 또는 PIR-CLIP을 통해 임베딩된 이미지 임베딩 $v_{emb}$와 텍스트 임베딩 $t_{emb}$를 사용한다.</p>
<p><strong>2. 코사인 유사도 계산</strong>
배치 이미지-텍스트 쌍에서 코사인 유사도(Cosine Similarity)를 계산</p>
<blockquote>
<blockquote>
<p>$s_{i,j} = v_i^T t_j$</p>
</blockquote>
<ul>
<li>$s_{i,j}$는 i번째 이미지와 j번재 텍스트의 유사도이다.</li>
</ul>
</blockquote>
<p><strong>3. 대조 손실 공식 (Contrastive Loss Formula)</strong>
최종적으로 Contrastive Loss를 계산한다.</p>
<blockquote>
<blockquote>
<p>$\mathcal{L}<em>c = -\frac{1}{N} \sum</em>{i=1}^{N} \left[\log \frac{\exp \left( s_{i,i} / \tau \right)}{\sum_{j=1}^{N} \exp \left( s_{i,j} / \tau \right)}+\log \frac{\exp \left( s_{i,i} / \tau \right)}{\sum_{j=1}^{N} \exp \left( s_{j,i} / \tau \right)}\right]$</p>
</blockquote>
<ul>
<li>$\tau$ : Temperature parameter로 모델이 유사도 분포를 얼마나 부드럽게 만들지 결정한다.</li>
</ul>
</blockquote>
<h4 id="affiliation-loss">Affiliation Loss</h4>
<p>Remote sensing 데이터의 분포 특성을 활용하여, 각 모달리티와 해당 소속 카테고리의 cluster center 간의 거리를 최소화한다</p>
<p><strong>1. 미니 배치 샘플(Mini-Batch Sample) 분류</strong>
미니 배치 샘플을 장면 카테고리 정보(Scene Category Information)에 따라 C개의 클래스(Class)로 분류</p>
<p><strong>2. 양의 쌍(Positive Pairs) 생성</strong>
각 이미지에 대해, 해당하는 텍스트를 하나의 카테고리로 그룹화하여
양의 쌍을 생성</p>
<blockquote>
<blockquote>
<p>${(v_i,t^*_i)|i=1,2,...,N}$</p>
</blockquote>
<p>$t^*_i$는 i번째 텍스트에 해당하는 Cluster center를 나타냄</p>
</blockquote>
<p><strong>3. 코사인 유사도 계산 (Cosine Similarity Calculation)</strong></p>
<ul>
<li>시각-텍스트 유사도(Vision-to-Text Similarity)<blockquote>
<p>$s_{i,j}^v = v_i^T t_j^*$</p>
</blockquote>
</li>
<li>텍스트-시각 유사도(Text-to-Vision Similarity)<blockquote>
<p>$s_{j,i}^t = t_j^T v_i^*$</p>
</blockquote>
</li>
</ul>
<p><strong>&lt;소속 손실 공식 (Affiliation Loss Formula&gt;</strong></p>
<blockquote>
<blockquote>
<p>$\mathcal{L}<em>a = -\frac{1}{N} \sum</em>{i=1}^{N} \left[ 
\log \frac{\exp \left( s_{i,i}^v / \tau \right)}{\sum_{j=1}^{N} \exp \left( s_{i,j}^v / \tau \right)} 
+\log \frac{\exp \left( s_{i,i}^t / \tau \right)}{\sum_{j=1}^{N} \exp \left( s_{j,i}^t / \tau \right)}
\right]$</p>
</blockquote>
<ul>
<li>$\tau$ : Temperature parameter로 모델이 유사도 분포를 얼마나 부드럽게 만들지 결정한다.</li>
</ul>
</blockquote>
<h4 id="최종-loss-fuction">최종 Loss Fuction</h4>
<p>최종 손실 함수는 대조 손실(Contrastive Loss)과 소속 손실(Affiliation Loss)을 결합</p>
<blockquote>
<blockquote>
<p>$\mathcal{L}<em>{\text{total}} = \mathcal{L}_c + \lambda</em>{cs} \mathcal{L}_a$</p>
</blockquote>
<p>$\lambda_{cs}$는 중심 척도(Center Scale)로, 카테고리 중심(Category Center)에서의 클러스터링 정도를 나타냄</p>
</blockquote>
<h1 id="experiments">Experiments</h1>
<h2 id="dateset">Dateset</h2>
<p><strong>1. RSICD</strong>
RSICD는 10,921개의 이미지로 구성되어 있으며, 해상도는 224 × 224이다.</p>
<blockquote>
<p>각 이미지에는 5개의 캡션(captions)이 제공</p>
</blockquote>
<p><strong>2. RSIRMD</strong>
RSITMD는 4,743개의 이미지로 구성되어 있으며, 해상도는 256 × 256이다.</p>
<blockquote>
<p>이 데이터셋은 RSICD보다 5배 더 세밀한(fine-grained) 캡션을 제공</p>
</blockquote>
<h2 id="metric">Metric</h2>
<p><strong>1. R@K (Recall@K)</strong>
K개의 검색 결과 중 정확하게 일치한 쌍의 비율을 측정</p>
<blockquote>
<p>K=1,5,10으로 설정</p>
</blockquote>
<p><strong>2. mR (mean Recall)</strong>
다양한 R@K 값의 평균을 계산하여, 검색 성능(retrieval performance)의 전반적인 평가를 제공</p>
<h2 id="implementation-details">Implementation Details</h2>
<p><strong>Closed-domain Retrieval</strong></p>
<ul>
<li>Swin Transformer를 시각 인코더로 사용하며, ImageNet으로 사전 학습된 Swin-T (tiny version)을 적용</li>
<li>텍스트 인코더로는 BERT-B를 사용</li>
</ul>
<p><strong>Open-domain Retrieval</strong></p>
<ul>
<li>ResNet-50 (AID 데이터셋으로 사전 학습된)을 Instruction Encoder로 사용</li>
<li>개방형 검색을 위해, ResNet-50 + ViT-B 및 Transformer를
CLIP의 시각 및 텍스트 백본으로 사용하여 정렬</li>
</ul>
<h2 id="results">Results</h2>
<p><strong>Closed-domain Image-Text Retrieval</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/3cd64dff-5002-48ba-aff7-a4b6019424d0/image.png" alt="">
<strong>Open-domain Image-Text Retrieval</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/51cf3f55-dd57-48ab-a560-67114ebb1020/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[A Prior Instruction Representation Framework for Remote Sensing Image-text Retrieval]]></title>
            <link>https://velog.io/@min-soku/A-Prior-Instruction-Representation-Framework-for-Remote-Sensing-Image-text-Retrieval</link>
            <guid>https://velog.io/@min-soku/A-Prior-Instruction-Representation-Framework-for-Remote-Sensing-Image-text-Retrieval</guid>
            <pubDate>Thu, 30 Jan 2025 11:20:30 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>이 논문은 Remote sensing 데이터에서 image와 text 간의 연관성을 더 정확하게 찾아내기 위한 새로운 방법을 제안한다.(Remote Sensing Image-Text Retrieval)</p>
<p>기존의 Remote Sensing Image-Text Retrieval에서는  Semantic noise(배경, 불필요한 요소들)가 문제를 일으켜 image-text 간 관계를 표현하는 데 한계가 존재했다.</p>
<p>이 논문에서는 이를 개선하기 위해 새로운 아이디어를 도입하였다.</p>
<p><strong>Prior instruction(사전 지식)을 활용</strong>
Remote sensing에서 Prior instruction이라 하면 특정 장면, 객체에 대한 general한 정보</p>
<blockquote>
<p>ex) </p>
<ul>
<li>장면 : 도시 지역의 위성 이미지에서는 특정 지역이 도시인지, 숲인지, 물이 있는 지역인지에 대한 general한 특성</li>
<li>객체 : remote sensing이미지에서 비행기, 도로, 호수, 산 등 Object가 어떻게 생겼는지에 대한 general한 특성 </li>
</ul>
</blockquote>
<p>이를 위해 두 가지 새로운 구조를 제안하였다.</p>
<p><strong>1. Spatial-PAE(공간적 Progressive Attention Encoder)</strong></p>
<ul>
<li>이미지의 공간적 정보를 파악하여 중요한 feature를 골라내는 역할</li>
</ul>
<p><strong>2. Temporal-PAE(시간적 Progressive Attention Encoder)</strong></p>
<ul>
<li>텍스트 데이터를 분석할 때, 단어들 간의 시간적인 흐름(문맥)을 잘 파악하여 더 정밀한 표현을 만든다.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<p><strong>Remote sensing image-text retrieval이란?</strong>
위성이나 드론이 수집한 대규모 remote sensing 데이터베이스에서, 특정 image에 맞는 text 설명을 찾거나, 주어진 text에 맞는 image를 검색하는 작업이다.</p>
<p>최근 들어, Remote sensing 데이터의 폭발적인 증가와 image-text retrieval 기술의 발전으로 인해, Remote sensing에서의 image-text retrieval의 데이터와 기술적인 지원이 크게 향상되었다.</p>
<p>그러나, 기존의 RSITR 기술은 한계가 존재한다.</p>
<p><strong>1. 기존 방법의 구조적 limitation</strong>
대부분의 기존 방법은 CNN을 기반으로 한 image representation과 RNN을 기반으로 한 text representation을 사용한다.
이 방법은 서로 먼 위치에 있는 정보 간 관계를 잘 모델링하지 못한다는 단점이 존재한다.</p>
<p><strong>2. Semantic noise(의미적 잡음)의 영향</strong>
Natural 이미지와 다르게 Remote sensing 데이터는 작은 Object가 많고 배경이나 불필요한 정보의 간섭을 쉽게 받는다.
그리고, image와 text representation 간의 confusion zone이 발생하여 검색 정확도를 떨어뜨린다.
<img src="https://velog.velcdn.com/images/min-soku/post/090acbe5-0c1e-43d1-b0d5-76c205021956/image.png" alt=""></p>
<p>기존의 연구에서는 이러한 문제를 해결하기 위해 filtering 기술을 사용하여 Semantic noise를 줄이려는 시도를 했지만, CNN 및 RNN 기반의 한계로 인해 구조적인 Limitation에 효과적이지 못했다.</p>
<p>그래서, Transformer를 기반으로 한 모듈을 설계하여 Remote sensing에서의 image-text retrieval를 실험하였는데, 이는 서로 먼 위치에 있는 정보 간 관계를 모델링하지 못하던 구조적인 Limitation은 개선할 수 있었지만, Remote sensing 데이터의 특성을 무시하는 문제가 존재했다.</p>
<p><strong>따라서, Remote sensing 데이터에 특화된 Framework의 필요성이 제기되었다.</strong></p>
<p>Remote sensing에서의 image-text retrieval를 위한 Prior Instruction Representation Framework(PIR)를 제안한다.</p>
<p>Remote sensing 장면 인식에 대한 Prior instruction을 활용하여 vision 및 text representation을 개선하고 semantic noise를 줄이는 데 focus를 맞춘다.</p>
<p>PIR framework는 다음과 같은 기술적 요소로 구성된다.</p>
<p><strong>1. 두 가지 PAE(Progressive Attention Encoder)</strong></p>
<ul>
<li><p><strong>Spatial-PAE</strong></p>
<blockquote>
<p>Remote sensing image를 더 잘 이해하기 위해, 외부 지식을 활용하여 이미지의 공간적 feature를 강조한다.</p>
</blockquote>
</li>
<li><p><strong>Temporal-PAE</strong></p>
<blockquote>
<p>Text의 시간적 흐름(단어 간 문맥)를 이해하기 위해, 이전 단어가 현재 정보를 강화하도록 만든다.</p>
</blockquote>
</li>
</ul>
<p><strong>2. VIR(Vision Instruction Representation)</strong>
Spatial-PAE를 기반으로, Remote sensing 데이터의 Semantic noise를 줄이고, 중요한 feature만 남기도록 설계된 기술이다.</p>
<blockquote>
<p>예를 들어, 공항 이미지를 분석할 떄, 주변의 풀밭이나 도로 대신 비행기와 활주로에만 집중하도록 돕는다.</p>
</blockquote>
<p><strong>3. LCA(Language Cycle Attention)</strong>
Temporal-PAE를 기반으로, Text에서 단어 간의 연결 관계를 더 잘 이해해, 더 명확한 텍스트 표현을 생성한다.</p>
<p><strong>4. 클러스터 단위 손실 (Cluster-wise attribution loss)</strong>
클래스 간 혼동을 줄이기 위해(비슷한 특징을 가진 클래스 간에 잘못 매칭되는 경우) 같은 클래스에 속하는 이미지-텍스트는 서로 가까워지게, 다른 클래스에 속하는 데이터 간에는 서로 멀어지게 데이터의 유사성을 조정하여
모델이 클래스를 더 잘 구분할 수 있게 한다.</p>
<p>이 Framework를 도입하여 RSICD, RSIMD라는 두 데이터셋에서 실험한 결과, 기존 기술에 비해 4% 이상 성능이 향상되었다.</p>
<h1 id="methodology">Methodology</h1>
<h2 id="preliminaries">Preliminaries</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/b3f1f973-cd0e-4780-8fc0-a793be8965e3/image.png" alt=""></p>
<h3 id="vision-encoding">Vision Encoding</h3>
<p>Transformer는 Convolution 대신, Self-Attention을 사용하여 Sequence 처리를 더 강력하게 만든다.</p>
<p>이를 바탕으로 <strong>Swin Transformer를 Vision encoder로 사용하여 이미지를 encoding한다.</strong></p>
<p>입력 이미지 $I ∈ \R^{3\times H\times W}$는 먼저 $H\over4$ 크기의 고정된 패치들로 나뉜다. </p>
<blockquote>
<ul>
<li>$I ∈ \R^{3\times H\times W}$ : 3채널 RGB 이미지, 높이 H, 너비 W</li>
</ul>
</blockquote>
<p>이 패치들은 Swin transformer를 통해 인코딩되어, Global feature인 $v_{cls} ∈ \R^{d\times 1}$(CLS 토큰)과 Local feature인 $E_v ∈ \R^{d\times m}$을 얻는다</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/5cbff033-5edd-4a66-9e06-4a8a1226aab5/image.png" alt=""></p>
<blockquote>
<p>$[v_{cls}, E_v] = F(I;Θ_S),;E_v = [e^1_v, e^2_v,..., e^m_v]$</p>
</blockquote>
<ul>
<li>$F()$ : Vision encoder</li>
<li>$Θ_S$ : Fine-tuning된 가중치</li>
<li>$[,,,]$ : Concatenation(병합)을 나타낸다설</li>
<li>$m$ : Local feature의 특징의 개수를 나타낸다</li>
</ul>
</blockquote>
<p>Remote sensing 이미지는 Semantic noise가 많아 vision representation에서 중요한 정보를 담는 데 방해가 된다.</p>
<blockquote>
<p>예를 들어, 공항 이미지에서 주변 나무, 구름 같은 배경은 Semantic noise 이다.</p>
</blockquote>
<p>편향이 없는 vision representation을 얻기 위해 ResNet을 Remote sensing 이미지로 구성된 데이터셋인 AID를 이용해 Pre-training하여 Instruction encoder로 사용한다.</p>
<blockquote>
<p><strong>시각적 표현에서의 편향이란?</strong>
이미지에서 불필요하거나 잘못된 정보가 중요한 정보를 가리는 현상</p>
</blockquote>
<p>ResNet은 AID데이터셋을 이용해 pre-trained된 가중치 $Θ<em>r$를 이용하여 입력 이미지를 분석한다.
이를 통해 생성된 Instruction embedding($v</em>{ins} ∈ \R^{d \times 1}$)은 이미지에서 중요한 특징에 대한 정보를 제공하여, 모델이 더 정확히 학습할 수 있도록 돕는다.</p>
<blockquote>
<p>예를 들어, 공항 이미지라면, &quot;비행기&quot;와 &quot;활주로&quot;에 집중하도록 지시하고, 배경에 대해 덜 중요하다고 판단하도록 학습을 유도한다.</p>
</blockquote>
<h3 id="text-encoding">Text Encoding</h3>
<p>RNN 기반 feature 추출 방법과 Bert 기반 text feature 추출 방법이 주요 접근 방식으로 사용된다.
RNN과 비교할 때, Bert는 Transformer의 능력을 기반으로 입력 Sequence 내 모든 위치를 동시에 고려할 수 있어, Global semantic 관계를 포착할 수 있다.</p>
<p><strong>이 논문에서는 Text encoder로 Pre-trained된 Bert를 사용하여 텍스트 $T$를 인코딩한다.</strong>
이를 통해, Global feature ($t_{cls} ∈ \R^{d\times 1}$([CLS] 토큰))과 Local feature ($E_t ∈ \R^{d\times n}$)을 얻을 수 있다.</p>
<blockquote>
<p>$[t_{cls}, E_t] = B(T;Θ_b),;E_t=[e^1_t,, e^2_t,,...,,e^n_t]$</p>
<ul>
<li>$B()$ : Text encoder</li>
<li>$Θ_b$ : Fine-tuning된 가중치</li>
<li>$n$ : Local feature의 개수</li>
</ul>
</blockquote>
<h2 id="progressive-attention-encoder">Progressive Attention Encoder</h2>
<p>기존의 Transformer 기반 모델은 종종 specific한 task에 특화되어 task에 따라 유연하게 확장되지 않는 경우가 많다.</p>
<p>Remote sensing에서 image-text retrieval에서는 맞춤형 transformer 구조를 재설계하고 재학습해야 하며, 이것은 efficient하지 않다.
Vision 및 text 표현을 향상시키기 위해, PAE 구조인 Spatial-PAE와 Temporal-PAE를 설계하였으며, 기존 Transformer 아키텍처를 활용하면서도 서로 먼 위치에 있는 정보 간 관계도 잘 모델링하기 위해 만들어졌다.</p>
<h3 id="transformer-encoder-layertel">Transformer Encoder Layer(TEL)</h3>
<p>TEL은 PAE의 주요 구성 요소로, 두 가지 주요 작업을 수행한다.
<img src="https://velog.velcdn.com/images/min-soku/post/f55e6fd3-c87c-400e-a60a-58ab54646fda/image.png" alt=""></p>
<p><strong>1. Self-Attention</strong></p>
<blockquote>
<p>하나의 Sequence 내에서 중요한 관계를 찾는다</p>
<ul>
<li>단어 간 관계 또는 패치 간 관계 파악</li>
</ul>
</blockquote>
<p><strong>2. Cross-Attention</strong></p>
<blockquote>
<p>서로 다른 두 Sequence 간 관계를 모델링한다.</p>
<ul>
<li>텍스트와 이미지 간 관련성을 이해</li>
</ul>
</blockquote>
<p>TEL에서는 Multi-head Attention 메커니즘이 사용된다.</p>
<blockquote>
<p>single-head attention만 사용하면, 한 가지 관계 정보만 학습하게 되는데, 여러 개의 어텐션 헤드를 사용하면 다양한 시점에서 데이터를 바라볼 수 있다.</p>
<blockquote>
<p>병렬 연산을 통해 더 강력한 표현 학습이 가능</p>
</blockquote>
<p><strong>scaled dot-product attention</strong></p>
<ul>
<li>$Q,∈,\R^{d_k\times N}$,  $K,∈,\R^{d_k\times N}$, $V,∈,\R^{d_k\times N}$ ($d_k,=,d/h)$</li>
</ul>
<blockquote>
<p>$MHA(Q,K,V)=[head_1,,head_2,...,,head_h]^T$
$where,head_i,=,Softmax({Q^TW^Q_i(K^TW^K_i)^T\over \sqrt d})V^TW^V_i$</p>
</blockquote>
<ul>
<li>$W^Q_i,∈,\R^{d_k\times d_k}$, $W^K_i,∈,\R^{d_k\times d_k}$, $W^V_i,∈,\R^{d_k\times d_k}$ : 가중치 행렬</li>
</ul>
</blockquote>
<h4 id="self-attention">Self-Attention</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/d1e90266-56a8-4447-afc2-cbe99a3994ec/image.png" alt="">
한 시퀀스 내에서 중요한 정보를 추출한다.</p>
<blockquote>
<p><strong>1.MHA + LN</strong> </p>
<ul>
<li>MHA를 통해 데이터를 다각도로 분석 후 LN으로 데이터를 정규화함<blockquote>
<p>$S_l,=,S_{l-1},+,LN(MHA(S_{l-1},S_{l-1},S_{l-1}))$</p>
<ul>
<li>Residual connection 추가</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>2.MLP + LN</strong>
추가적인 비선형 변환을 통해 시퀀스 표현을 정제</p>
<blockquote>
<p>$S_{l+1},=,S_l,+,LN(MLP(S_l))$</p>
</blockquote>
</blockquote>
<h4 id="cross-attention">Cross-Attention</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/12212004-414f-4fb3-910a-c17c4f190a33/image.png" alt="">
두 개의 른 시퀀스 간의 상호 관계를 학습한다.</p>
<blockquote>
<p><strong>1.MHA + LN</strong> </p>
<ul>
<li>MHA를 통해 데이터를 다각도로 분석 후 LN으로 데이터를 정규화함<blockquote>
<p>$C_l,=,S_{l+1},+,LN(MHA(C_{l-1},S_{l+1},S_{l+1}))$</p>
<ul>
<li>$C_{l-1}$은 다른 입력 시퀀스의 이전 layer 출력</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>2.MLP + LN</strong>
Cross-Attention이후 추가적인 비선형 변환을 통해 시퀀스 표현을 정제</p>
<blockquote>
<p>$C_{l+1},=,C_l,+,LN(MLP(C_l))$</p>
</blockquote>
</blockquote>
<h3 id="messaging-between-tels">Messaging between TELs</h3>
<p>TEL 간 메시지 전달 방식에 기반하여, Spatial-PAE와 Temporal-PAE라는 두 가지 전달 방식을 설계하여, 주요 feature representation을 향상시켰다.</p>
<h4 id="spatial-pae공간적-연결">Spatial-PAE(공간적 연결)</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/8493d9a7-aad7-4e72-8749-640cc9cec486/image.png" alt=""></p>
<p>Spatial-PAE는 TEL에서 공간적 관계를 이해하는 데 도움을 준다</p>
<p><strong>&lt;동작 방식&gt;</strong></p>
<ul>
<li><p>외부 소스의 입력 시퀀스를 linear projection을 통해 TEL에 연결한다.</p>
<blockquote>
<p>이미지에서 각 패치의 공간적 관계를 외부 지식을 바탕으로 연결</p>
</blockquote>
</li>
<li><p>Cross-Attention을 사용하여, 각 시퀀스의 관계를 모델링한다.</p>
<blockquote>
<p>단순히 시퀀스를 fusion하는 것이 아니라, TEL이 글로벌 정보를 더 잘 포착하도록 돕는다.</p>
</blockquote>
</li>
</ul>
<p><strong>&lt;문제 해결&gt;</strong></p>
<ul>
<li><p>기존의 Self-Attenion에서는 모든 입력 간 관계를 계산하기는 하지만, 외부 지식 없이는 충분히 글로벌한 의미를 반영한 관계를 학습하지 못할 수 있다.</p>
<blockquote>
<p>예를 들어, &quot;비행기&quot;를 나타내는 패치와 &quot;활주로&quot;패치가 연관된다는 사실은 외부 지식이나 추가적인 정보 없이 학습하기 어렵다</p>
</blockquote>
</li>
<li><p>또한, Self-Attention은 입력 전체를 고려하기 때문에 local detail에 대한 학습이 희석될 수 있다.</p>
<blockquote>
<p>예를 들어, 이미지의 특정 작은 object인 작은 비행기는 전체 맥락에서 중요도가 낮게 평가될 가능성이 있다.</p>
</blockquote>
</li>
</ul>
<p>Spatial-PAE의 공간적 연결을 통해 TEL이 글로벌 정보를 더 잘 학습하도록 돕는다.</p>
<h4 id="temporal-pae시간적-연결">Temporal-PAE(시간적 연결)</h4>
<p><img src="https://velog.velcdn.com/images/min-soku/post/828be040-d653-4338-8549-2b4096600d74/image.png" alt=""></p>
<p>Temporal-PAE는 TEL에서 시간적 관계를 이해하는 데 도움을 준다</p>
<p><strong>&lt;동작 방식&gt;</strong></p>
<ul>
<li>linear projection을 사용하여, 이전 시점의 출력과 현재 시점의 입력 간에 연결을 만든다.</li>
</ul>
<p>이전 시점과 현재 시점 간의 데이터를 기반으로 attention map을 계산한다.</p>
<blockquote>
<p>Attention map은 Attention 메커니즘에서 만들어지는 가중치 행렬</p>
<ul>
<li>입력 데이터 간 중요도를 나타냄</li>
</ul>
</blockquote>
<p><strong>&lt;문제 해결&gt;</strong></p>
<ul>
<li><p>TEL에서 사용되는 positional encoding은 시퀀스 내의 위치 간의 관계를 완벽히 이해하지 못할 수 있다.</p>
<blockquote>
<p>Transformer기반 구조에서는 positional encoding이 암묵적으로 전제됨</p>
</blockquote>
</li>
<li><p>여러 Self-Attention layer가 쌓이면, 위치 정보가 모호해지거나 부정확해질 위험이 있다.</p>
<blockquote>
<p>텍스트의 단어 순서나 이미지 패치의 순서가 섞일 수 있다.</p>
</blockquote>
</li>
<li><p>Self-Attention은 각 입력 토큰 간 관계를 계산하지만, 시간적인 관계를 명시적으로 학습하지 않는다.</p>
</li>
</ul>
<p>Temporal-PAE는 이전 시점의 정보를 현재와 결합하여, 위치 정보의 ambiquity(모호성)과 inaccuracy(부정확성)을 줄인다.</p>
<h2 id="vision-instruction-representation">Vision Instruction Representation</h2>
<p>Natural 이미지와 달리, Remote sensing 이미지의 크기가 작은 Object는 Semantic noise의 영향을 받기 쉽고, Vision representation에 큰 영향을 미친다.
<img src="https://velog.velcdn.com/images/min-soku/post/141d06eb-de06-4506-8038-2a0d5e524566/image.png" alt=""></p>
<p><strong>1. Belief matrix 생성</strong> 
<img src="https://velog.velcdn.com/images/min-soku/post/044d37d7-74ce-49fa-9e21-d411295796be/image.png" alt=""></p>
<p>VIR은 먼저 Instruction embedding을 사용하여 belief matrix를 생성한 다음, 특징을 필터링하여 편향 없는 vision representation을 생성한다.</p>
<blockquote>
<blockquote>
<p>$M_{bel},=,Softmax(v^T_{ins}[v_{cls},E_v])$</p>
<ul>
<li>Instruction embedding과 Vision embedding 간 내적 (Dot Product)을 통해 Intruction과 vision feature간 유사도 산</li>
</ul>
</blockquote>
<ul>
<li>$v_{ins},=,[v_{ins},v_{ins},...,v_{ins}],∈,\R^{d\times {r_k}}$ : Remote sensing 데이터에 대한 prior instruction(Instruction embedding)</li>
<li>$v_{cls}$ : 이미지 전체의 global feature</li>
<li>$E_v$ : 이미지의 각 패치(local feature)</li>
<li>$Softmax$ : 각 특징의 중요도를 확률 값으로 변환<blockquote>
<p>즉, Instruction이 강조하고 싶은 vision feature에 높은 가중치를 부여한다</p>
</blockquote>
</li>
</ul>
<p><strong>belief matrix $M_{bel}$은 각 패치의 중요도를 나타내는 확률 분포 행렬</strong></p>
</blockquote>
<p><strong>2. 특징 정렬 및 필터링</strong> 
<img src="https://velog.velcdn.com/images/min-soku/post/8e5e1c69-2c3d-41bd-b28a-be35ef380ed6/image.png" alt=""></p>
<p>생성된 belief matrix $M_{bel}$를 사용해, 중요도가 높은 패치만 남기고 제거한다.</p>
<blockquote>
<blockquote>
<p>$[v_{cls},E_v]; \underrightarrow {M_{bel},Sort&amp;Filter};F_v$</p>
</blockquote>
<ul>
<li>$F_v$ : 정렬 및 필터링된 feature(중요한 정보만 남은 상태)</li>
</ul>
</blockquote>
<p><strong>3. Spatial-PAE를 통한 장거리 의존성 학습</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/c1c715e1-14dc-4366-adf6-dfb832698298/image.png" alt=""></p>
<p>정렬된 feature $F_v$응 TEL로 입력하여, 각 feature간의 장거리 의존성을 학습한다.
외부 지식(Instruction embedding)을 결합해 feature 간의 관계를 강화한다.</p>
<blockquote>
<blockquote>
<p>$\hat{F}<em>v = \begin{cases} \text{TEL}(F_v, W_s^i v</em>{\text{ins}}), &amp; i = 1, \\text{TEL}(\hat{F}<em>v^{i-1}, W_s^i v</em>{\text{ins}}), &amp; i = 2, 3, \ldots, n_v\end{cases}
$</p>
</blockquote>
<ul>
<li>$\hat{F}<em>v^{i},=,[\hat{F}</em>{r_1}^{i},\hat{F}<em>{r_2}^{i},...,\hat{F}</em>{r_k}^{i}]$ : i번째 TEL의 출력</li>
<li>$W_s^i,∈,\R^{d\times d}$ : i번째 linear projection 가중치
여러 layer를 통과하며, 중요한 특징 간의 관계를 점점 정교하게 학습한다</li>
</ul>
</blockquote>
<p><strong>4. 편향 없는 local embedding 생성</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/b948ebcc-b4ae-4629-a39c-f28b8ee738fe/image.png" alt=""></p>
<p>마지막 TEL layer의 출력에서 나온 가장 중요한 feature를 변환하여 local embedding을 생성한다.</p>
<blockquote>
<blockquote>
<p>$v_{loc},=,Head\hat{(f^{n_v}_{r1})}$</p>
</blockquote>
<ul>
<li>$Head()$ : TEL의 마지막 layer에서 중요한 정보를 추출하는 모듈(마지막 layer의 head embedding을 편향되지 않은 embedding으로 매핑)</li>
</ul>
</blockquote>
<p><strong>5. 최종 vision embedding 생성</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/b4e9e0da-089b-4cc3-9b7f-06fa25657617/image.png" alt=""></p>
<p>VIR은 global feature($v_{cls}$)와 local feature($v_{loc}$)을 결합해 최종 vision embedding을 생성한다.</p>
<blockquote>
<p>$v_{emb},=,v_{cls}+v_{loc}$</p>
</blockquote>
<p>이 최종 임베딩은 Semantic noise가 제거된 상태에서 중요한 feature만을 담고 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/5c8e5c9d-cad5-4edb-8388-fca38f7caf96/image.png" alt=""></p>
<blockquote>
<ul>
<li>Vision Instruction Representation (VIR)은 Remote sensing 이미지의 Semantic noise를 줄이기 위해 사전 지식(Prior instruction)을 활용한다</li>
</ul>
</blockquote>
<h2 id="language-cycle-attention">Language Cycle Attention</h2>
<p>Transformer는 Self-Attention 메커니즘을 활용하여, 입력 텍스트 시퀀스의 모든 단어 간 관계를 학습한다.</p>
<p><strong>&lt;Transformer의 한계&gt;</strong></p>
<ol>
<li><p>Transformer는 단어 간 순서를 명시적으로 처리하지 않는다.
Positional encoding을 입력에 추가하여 단어의 위치를 나타낸다.
하지만, <strong>긴 시퀀스에서는 이 위치정보가 모호해지거나 손실</strong>될 가능성이 높다</p>
</li>
<li><p>또한, Transformer는 긴 시퀀스를 처리할 때, <strong>단어 간의 글로벌 관계를 잘 모델링하지 못할 수 있어</strong> 전체적인 문맥을 이해하는 데 방해가 된다.</p>
</li>
</ol>
<p><strong>&lt;LCS의 역할&gt;</strong></p>
<ol>
<li><p>위치 정보의 모호성 해결</p>
<blockquote>
<p>이전 시점의 feature를 현재 시점으로 순환적으로 전달하여, 위치 정보의 왜곡을 줄임</p>
</blockquote>
</li>
<li><p>문맥 표현 강화 </p>
<blockquote>
<p>긴 시퀀스에서도 각 단어 간의 관계를 순환적으로 학습하여, 문맥 표현을 더 정교하게 만듦</p>
</blockquote>
</li>
</ol>
<p><strong>&lt;LCA 동작 과정&gt;</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/3e8b2af4-10c7-4ddb-981e-ac3134bbb381/image.png" alt=""></p>
<p>LCA는 Temporal-PAE를 사용하여 텍스트 특징을 순환적으로 활성화한다.</p>
<p><strong>1. 초기 텍스트 특징 추출</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/fadb9e46-2b68-459b-b9c2-2f72f9fc0620/image.png" alt=""></p>
<p>텍스트 인코더를 통해 global feature $t_{cls}$와 local feature $E_t$로 인코딩되어 LCA의 입력으로 사용된다.</p>
<p><strong>2. 순환적 활성화</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/32ccd0dc-38c5-4140-8d46-825ec2de81ae/image.png" alt=""></p>
<p>LCA는 Temporal-PAE를 사용하여 cyclic한 방식으로 단어 수준의 feature를 활성화하여, 이전 시간 단계의 정보를 현재 시간 단계에 반영한다.</p>
<blockquote>
<blockquote>
<p>$\hat{F}<em>t^i = \begin{cases} \text{TEL}([t</em>{cls},E_t], W_t^i[t_{cls},E_t]), &amp; i = 1, \\text{TEL}(\hat{F}_v^{i-1}, W_s^i\hat{F}_t^{i-1} ), &amp; i = 2, 3, \ldots, n_t\end{cases}
$</p>
</blockquote>
<ul>
<li><p>$\hat{F}<em>t^{i},=,[\hat{t}</em>{cls}^{i},\hat{E}_t^{i}]$ : $i$번째 TEL의 출력</p>
</li>
<li><p>$W^i_t,∈,\R^{d\times d}$ : $i$번째 linear projection 가중치 </p>
</li>
<li><p>첫 번째 TEL(i=1) : 문장의 global feature($t_{cls}$)와 local feature($E_t$)을 TEL로 전달하여 초기 feature 활성화</p>
</li>
</ul>
<ul>
<li>이후 TEL(i=2,3..) : 이전 TEL 출력(이전 시간 단계의 feature)을 입력으로 사용해, 현재 시간 단계의 feature를 활성화</li>
</ul>
</blockquote>
<p><strong>&lt;최종 Text embedding&gt;</strong>
<strong>1. Local embedding</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/88dddad7-0a7e-42ff-9ef9-7449a688ffe6/image.png" alt=""></p>
<p>마지막 TEL layer에서, local feature($t^n_{cls}$)을 기반으로 local embedding을 생성</p>
<blockquote>
<blockquote>
<p>$t_{loc},=,Head(\hat{t}^{n_t}_{cls}$)</p>
</blockquote>
<ul>
<li>$Head$ : TEL의 마지막 layer 출력에서 중요한 정보를 추출하는 모듈
(Linear projection을 적용해, 차원을 축소하거나 정규화된 표현 생성)</li>
</ul>
</blockquote>
<p><strong>2. 최종 Text embedding</strong>
<img src="https://velog.velcdn.com/images/min-soku/post/d5934d39-9886-409c-823f-e038e6b247c2/image.png" alt=""></p>
<p>LCA는 global feature와 local feature를 결합하여 최종 텍스트 embedding을 생성</p>
<blockquote>
<blockquote>
<p>$t_{emb},=,t_{cls},+,t_{loc}$</p>
</blockquote>
<ul>
<li>$t_{cls}$ : 문장 전체의 global feature</li>
<li>$t_{loc}$ : 문장의 local feature</li>
</ul>
</blockquote>
<p><strong>LCA의 장점</strong></p>
<ol>
<li><p>LCA는 이전 시간 단계의 정보를 현재 시점으로 순환적으로 전달하여, 위치 정보의 모호성을 해결하고 긴 시퀀스에서도 단어의 순서를 더 정확히 표현하였다.</p>
</li>
<li><p>global feature와 local feature를 결합하여, semantic noise를 줄이고 중요한 정보를 강조하였다.</p>
</li>
</ol>
<h2 id="loss-function">Loss Function</h2>
<h3 id="contrastive-loss">Contrastive Loss</h3>
<p>Remote sensing에서 image-text retrieval은 모델이 image-text 쌍을 잘 매칭할 수 있도록 학습해야 함</p>
<p>기존에는 Triplet Loss을 사용하여 positive sample과 negative sample을 사용하여 loss를 계산했지만, 이 방식은 negative sample을 추가로 선택해야 하므로, 계산 비용이 크고 efficiency가 낮을 수 있다.</p>
<blockquote>
<p>Anchor(기준 데이터)를 기준으로 positive, negative sample을 정의하여 Anchor에 더 가깝게, 더 멀어지게 학습함</p>
</blockquote>
<p>추가적인 negative sample 없이도 샘플 간 유사성을 계산하기만 하면 되는 contrastive loss를 사용한다.</p>
<p><strong>&lt;Contrastive loss정의&gt;</strong></p>
<p><strong>1. 입력 데이터</strong></p>
<ul>
<li><p>N개의 Positive sample쌍</p>
<blockquote>
<blockquote>
<p>${(I_1,T_1),,(I_2,T_2),...,(I_i,T_i),...,(I_N,T_N)}$</p>
</blockquote>
<ul>
<li>$I_i$ : i번째 이미지</li>
<li>$T_i$ : i번째 텍스트</li>
</ul>
</blockquote>
</li>
<li><p>각각의 입력 이미지와 텍스트는 최종적으로 임베딩으로 표현됨</p>
<blockquote>
<ul>
<li>비전 임베딩 : $v_i$ (이미지 $I_i$의 임베딩)</li>
<li>텍스트 임베딩 : $t_i$ (텍스트 $T_i$의 임베딩)</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>2. 코사인 유사도 계산</strong></p>
<ul>
<li>이미지 임베딩 $v_i$와 텍스트 임베딩 $t_j$ 간의 코사인 similarity계산<blockquote>
<blockquote>
<p>$s_{i,j},=,v^T_it_j$</p>
</blockquote>
<ul>
<li>$s_{i,j}$ : i번째 이미지와  j번째 텍스트 간의 similarity </li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>&lt;Loss 계산 과정&gt;</strong>
Contrastive loss는 두 가지 loss로 구성된다.</p>
<p><strong>1. Vision-to-Text Loss</strong></p>
<ul>
<li>모델이 특정 이미지 임베딩 $v_i$과 텍스트 임베딩 $t_i$을 매칭하도록 유도<blockquote>
<blockquote>
<p>$L_{v2t},=,-log({exp(s_{i,i}/τ)\over \sum^N_{j=1}exp(s_{i,j}/τ)})$</p>
</blockquote>
<ul>
<li>$s_{i,i}$ : 이미지 임베딩 $v_i$과 텍스트 임베딩 $t_i$ 간의 유사도</li>
<li>$\sum^N_{j=1}exp(s_{i,j}/τ)$ : i번째 이미지와 모든 텍스트 간 유사도의 합</li>
<li>$τ$ : Temperature parameter는 유사도 값의 스케일을 조정</li>
</ul>
<p>모델은 $s_{i,i}$가 커지도록 학습한다.
(이미지와 올바른 텍스트의 유사도 극대화)</p>
</blockquote>
</li>
</ul>
<p><strong>2. Text-to-Vision Loss</strong></p>
<ul>
<li>모델이 특정 텍스트 임베딩 $t_i$과 이미지 임베딩 $v_i$을 매칭하도록 유도<blockquote>
<blockquote>
<p>$L_{v2v},=,-log({exp(s_{i,i}/τ)\over \sum^N_{j=1}exp(s_{j,i}/τ)})$</p>
</blockquote>
<ul>
<li>$s_{i,i}$ : 텍스트 임베딩 $t_i$과 이미지 임베딩 $v_i$ 간의 유사도</li>
<li>$\sum^N_{j=1}exp(s_{i,j}/τ)$ : i번째 텍스트와 모든 이미지 간 유사도의 합</li>
<li>$τ$ : Temperature parameter는 유사도 값의 스케일을 조정</li>
</ul>
<p>모델은 $s_{i,i}$가 커지도록 학습한다.
(텍스트와 올바른 이미지의 유사도 극대화)</p>
</blockquote>
</li>
</ul>
<p><strong>3. 최종 Loss</strong></p>
<ul>
<li>두 Loss의 평균을 최종 Contrastive loss로 정의<blockquote>
<blockquote>
<p>$L_c,=,\frac{1}{2N}\sum^N_{i=1}(L_{v2t}(v_i,t_i),+,L_{t2v}(t_i,v_i))$</p>
</blockquote>
<p><strong>Image-text쌍 간의 유사도를 극대화하고, image와 관련 없는 text의 유사도는 최소화하도록 학습</strong></p>
</blockquote>
</li>
</ul>
<h3 id="affiliation-loss">Affiliation Loss</h3>
<p>대부분의 검색 작업에서는 Contrastive Loss와 같은 pair-wise loss를 사용하며, Contrastive Loss 에서는 데이터 전체의 분포나 카테고리 간의 구조적 정보를 고려하지 않는다.
<img src="https://velog.velcdn.com/images/min-soku/post/e1fd2b69-b573-4d63-9cac-a260db92817c/image.png" alt=""></p>
<p>Affiliation Loss는 Remote sensing 데이터의 분포적 특성에 기반하여, 카테고리의 clustering center을 사용하여, 같은 카테고리에 속하는 데이터끼리 더 가까워지도록 군집시켜 Semantic confusion을 줄인다. </p>
<p><strong>&lt;Affiliation Loss 동작 방식&gt;</strong></p>
<p><strong>1. 입력 데이터</strong></p>
<ul>
<li><p>데이터를 카테고리 정보에 따라 C개의 클래스로 그룹화한다.</p>
<blockquote>
<p>예를 들어, 비행기 이미지-활주로 텍스트는 같은 카테고리로 그룹화</p>
</blockquote>
</li>
<li><p>각 데이터는 cluster center와의 관계를 기반으로 학습된다.</p>
<blockquote>
<ul>
<li>$t^*_i$ : i번째 텍스트와 연결된 cluster center</li>
<li>각 데이터는 자신의 cluster 중심(해당 카테고리의 대표 벡터)과의 관계를 학습한다.<blockquote>
<p>즉, 같은 카테고리 내 샘플들끼리 더 가깝게 학습된다</p>
</blockquote>
</li>
</ul>
</blockquote>
</li>
</ul>
<p><strong>2. cosine similarity 계산</strong></p>
<ul>
<li>각 이미지 $v_i$와 텍스트 $t^*_j$ 간의 cosine similarity를 계산</li>
</ul>
<blockquote>
<ul>
<li>vision-text similarity</li>
</ul>
<blockquote>
<p>$s^v_{i,j},=,v^T_it^*_j$</p>
<ul>
<li>이미지 임베딩 $v_i$와 텍스트 cluster center $t^*_j$간의 similarity</li>
</ul>
</blockquote>
</blockquote>
<blockquote>
<ul>
<li>text-vision similarity</li>
</ul>
<blockquote>
<p>$s^t_{j,i},=,t^T_jv_i^*$</p>
<ul>
<li>텍스트 임베딩 $t_j$와 이미지 cluster center $v^*_i$간의 &gt;&gt;similarity</li>
</ul>
</blockquote>
</blockquote>
<p><strong>3. Affiliation Loss 계산</strong></p>
<ul>
<li>Affiliation Loss는 비전-텍스트와 텍스트-비전 간의 관계를 기반으로 정의</li>
</ul>
<blockquote>
<p><strong>1. vision-text loss</strong></p>
<ul>
<li>이미지와 텍스트 cluster center 간 similarity 최대화<blockquote>
<p>$L^<em>_{v2t}(v_i,t^</em><em>i),=,-log({exp(s^v</em>{i,i}/τ)\over \sum^N_{j=1}exp(s^v_{i,j}/τ)})$</p>
</blockquote>
</li>
</ul>
</blockquote>
<blockquote>
<p><strong>2. text-vision loss</strong></p>
<ul>
<li>텍스트와 이미지 cluster center 간 similarity 최대화<blockquote>
<p>$L^<em>_{t2v}(t_i,v^</em><em>i),=,-log({exp(s^t</em>{i,i}/τ)\over \sum^N_{j=1}exp(s^t_{j,i}/τ)})$</p>
</blockquote>
</li>
</ul>
</blockquote>
<p><strong>3. Affiliation Loss의 최종 loss</strong></p>
<blockquote>
<ul>
<li>위 두 Loss를 평균 내어 Affiliation Loss를 정의<blockquote>
<p>$L_a,=,\frac{1}{2N}\sum^N_{i=1}(L^<em>_{v2t}(v_i,t^</em><em>i),+,L^*</em>{t2v}(t_i,v^*_i))$</p>
</blockquote>
</li>
</ul>
</blockquote>
<p><strong>&lt;Affiliation Loss와 Contrastive Loss의 결합&gt;</strong></p>
<ul>
<li>최종 Loss function<blockquote>
<p>Affiliation Loss와 Constrastive Loss를 결합</p>
<blockquote>
<p>$L,=,L_c,+,\lambda_{cs}L_a$</p>
<ul>
<li>$L_c$ : Contrastive Loss</li>
<li>$L_a$ : Affiliation Loss</li>
<li>$\lambda_{cs}$ : cluster center에서 군집 정도를 조정하는 가중치 매개변수</li>
</ul>
</blockquote>
</blockquote>
</li>
</ul>
<p><strong>&lt;Affiliation Loss의 효과</strong></p>
<p><strong>1. 데이터 분포 반영</strong>
같은 카테고리 내 데이터는 더 가까워지고, 다른 카테고리 간의 데이터는 더 멀어진다.</p>
<p><strong>2. Semantic confusion감소</strong>
카테고리 간의 경계에서 발생하는 semantic confusion을 줄여 모델이 더 명확한 구분을 학습</p>
<h1 id="experiments">Experiments</h1>
<h2 id="datasets">Datasets</h2>
<p>실험에는 두 가지 Remote sensing image-text retrieval 벤치마크 데이터셋이 사용되었다.</p>
<p><strong>1. RSICD 데이터셋</strong>
10,921개의 이미지로 구성되어 있으며, 각 이미지에는 5개의 캡션이 제공된다.</p>
<ul>
<li>학습용 7,862개</li>
<li>검증용 1,966 개</li>
<li>테스트용 1,093개</li>
</ul>
<p><strong>2. RSTIMD 데이터셋</strong>
4,743개의 이미지로 구성되어 있으며, RSICD보다 더 세분화된 텍스트 설명이 제공된다.</p>
<ul>
<li>학습용 3,435개</li>
<li>검증용 856개</li>
<li>테스트용 452개</li>
</ul>
<h2 id="metrics">Metrics</h2>
<p>실험에서 사용하는 평가 지표</p>
<ul>
<li>R@K : 상위 K개의 검색 결과 중 정답이 포함된 비율을 측정</li>
<li>mR : R@1, R@5, R@10의 평균값으로, 전체 검색 성능을 종합적으로 평가한다.</li>
</ul>
<h2 id="implementation-datails">Implementation Datails</h2>
<ul>
<li>Vision encoder : Swin transformer를 사용하며, ImageNet 데이터셋에서 pre-trained된 Swin-T를 사용</li>
<li>Text encoder : Bert를 사용하며, 공식 소스에서 제공하는 Bert-B의 pre-trained된 파라미터를 사용</li>
<li>Instruction encoder : ResNet-50을 사용하며, AID 데이터셋에서 pre-trained된 모델 사용</li>
</ul>
<h2 id="performance-comparisons">Performance Comparisons</h2>
<p><img src="https://velog.velcdn.com/images/min-soku/post/6a276be2-95d7-4842-a70b-19e80b5ac1d4/image.png" alt="">
제안된 방법 PIR은 기존의 방법들과 비교하여 두 데이터셋에서 우수한 성능을 보였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[RemoteCLIP: A Vision Language Foundation  Model for Remote Sensing]]></title>
            <link>https://velog.io/@min-soku/RemoteCLIP-A-Vision-Language-Foundation-Model-for-Remote-Sensing</link>
            <guid>https://velog.io/@min-soku/RemoteCLIP-A-Vision-Language-Foundation-Model-for-Remote-Sensing</guid>
            <pubDate>Thu, 23 Jan 2025 18:43:29 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p>Foundation model의 general한 활용은 인공지능 개발에서 중요한 돌파구를 제공하였다.</p>
<blockquote>
<p>Foundation model?
다양한 task에서 general하게 활용할 수 있도록 대규모 데이터와 자원을 기반으로 학습된 모델</p>
<ul>
<li>텍스트 기반 모델 : GPT, BERT</li>
<li>이미지 기반 모델 : SimCLR, MAE</li>
<li>비전-언어 기반 모델 : CLIP, DALL-E</li>
</ul>
</blockquote>
<p>Remote sensing 분야에서도 Self-supervised learning(SSL), 특히 Masked image modeling(MIM)기술을 활용해 foundation model을 개발하고 있지만 한계가 존재한다.</p>
<ul>
<li><p>low-level feature에만 focus를 맞추고, high-level semantics를 학습하지 못한다.</p>
<blockquote>
<p>Remote sensing foundation model의 학습 방법은 이미지의 세부적인 feature를 학습하는 데 효과적이지만 이미지가 나타내는 맥락적 의미와 같은 추상적인 의미는 학습하는 데 한계가 있다.</p>
</blockquote>
</li>
<li><p>언어 이해 능력 부족으로 인해 zero-shot task나 text-image retrival과 같은 multimodal 응용에 적합하지 않다.</p>
<blockquote>
<p>기존 remote sensing foundation model은 비전 전용 모델을 중심으로 설계되어, object detection, segmentation, classification등 이미지에서 경계 정보를 학습하는 데 초점을 맞추고, 언어 데이터를 학습하거나, 텍스트와 이미지를 연관시키는 과정을 포함하지 않았음</p>
<blockquote>
<p>Remote sensing 데이터는 텍스트와 이미지의 align된 dataset이 거의 없다.</p>
</blockquote>
</blockquote>
</li>
<li><p>주석 데이터를 활용한 fine-tuning이 필요하여 데이터 effciency가 낮다.</p>
<blockquote>
<p>Remote sensing model은 natural 이미지와 다르게 도메인 특화된 데이터(위성 이미지)에서 학습해야 하는 경우가 많은데, remote sensing 데이터셋은 크기가 작고, 도메인 특화 작업을 처리하기 위해 추가적인 주석 데이터가 필요함</p>
</blockquote>
</li>
</ul>
<p><strong>이러한 한계를 극복하기 위해, 최초의 remote sensing을 위한 VLM인 RemoteCLIP을 제안</strong></p>
<ol>
<li><p>Vision-language 통합 학습
이미지를 vision representation으로 변환하고, 텍스트 임베딩과 align하여 학습</p>
</li>
<li><p>Data 확장
Remote sensing에서 사용할 수 있는 데이터가 제한적이라는 문제를 해결하기 위해, Box-to-Caption, Mask-to-Box라는 변환 방식을 도입</p>
</li>
</ol>
<h1 id="introduction">Introduction</h1>
<p>인공지능 분야에서 foundation model의 중요성이 점점 커지고 있다.
특정 task나 domain에 맞춰 설계된 모델과 비교했을 때, general한 활용이 가능한 foundation model은 다양한 task에서 뛰어난 성능과 generalization 성능을 보여주었다.</p>
<ul>
<li>텍스트 기반 모델 : GPT, BERT</li>
<li>이미지 기반 모델 : SimCLR, MAE</li>
<li>비전-언어 기반 모델 : CLIP, Flamingo</li>
</ul>
<p>Remote sensing 분야에서도 위성 이미지 분석으로 위한 foundation model 개발에 힘쓰고 있다.</p>
<p>현재까지의 주요 접근 방식은 Computer vision에서 성공을 거둔 Self-supervised learning(SSL)으로, 특히 Masked image modeling(MIM)방법에서 영감을 받았다.</p>
<blockquote>
<p>Self-Supervised Learning : 레이블이 없는 데이터로 학습
Masked Image Modeling : 이미지를 일부 가리고 이를 복원하는 방식</p>
</blockquote>
<p>하지만, <strong>MIM 기반의 remote sensing foundation model에는 두 가지 주요 한계가 있다.</strong></p>
<ol>
<li><p>Occlusion invariance(가려짐 불변성)</p>
<blockquote>
<p>MIM은 이미지의 가려진 부분을 복원하는 데 중점을 두는 방법으로 Natural image에서 중요한 특성인데, <strong>위성 이미지에서는 시야가 가려질 일이 적어 필요성이 낮다.</strong></p>
</blockquote>
</li>
<li><p>Low-level feature 중심 학습</p>
<blockquote>
<p>MIM은 주로 이미지의 Low-level feature(엣지, 텍스처 등 작고 세부적인 특징)을 학습한다.
이는 High-level semantics(맥락, 관계)를 이해하는 데 한계가 있다.
<strong>Object detection와 같은 단순 작업에는 적합하지만, 의미적인 추론이 필요한 Zero-shot 작업에는 부적합하다.</strong></p>
</blockquote>
</li>
</ol>
<p>또한, 모든 Foundation 모델은 다운스트림 작업에 적응하기 위해 주석이 달린 데이터와 추가적인 fine-tuning이 필요하다.</p>
<p>그러나, 기존의 Foundation 모델은 Language와 Vision을 정렬하는 능력이 부족하여 CLIP과 같은 Zero-shot 학습이나 Text-image retrival과 같은 Multimodel응용에 적합하지 않다.</p>
<p><strong>이 논문에서는 Remote sensing을 위한 Vision-language 기반 Foundation model을 개발하였다.</strong></p>
<p>&lt;목표&gt;</p>
<ol>
<li><p>위성 이미지의 시각적 개념에 대해 풍부한 semantics를 담은 강력한 vision representation을 학습</p>
</li>
<li><p>이 vision representation과 align된 text embedding을 학습</p>
</li>
<li><p>이를 통해 다양한 Downstream task에 활용</p>
</li>
</ol>
<p><strong>Remote sensing 데이터를 다루는 모델 개발에서 가장 큰 문제는 대규모 pre-training data의 부족이다.</strong></p>
<blockquote>
<p>Remote sensing 데이터는 Text-Image가 align된 대규모 데이터셋이 부족하고, 주석 데이터를 활용한 fine-tuning 없이는 task에 잘 적응하지 못한다.</p>
</blockquote>
<p>제한된 데이터로는 대규모 Vision-language 모델을 학습할 때 Overfitting 문제가 발생한다.</p>
<p>이를 해결하기 위해 기존 데이터셋보다 12배 큰 traning data를 생성하는 방법을 도입하였다.</p>
<ol>
<li>Mask-to-Box(M2C), Box-to-Caption(B2C) 변환</li>
</ol>
<ul>
<li>다양한 주석 데이터를 통합하여 Image-Caption 데이터 형식으로 변환</li>
<li>Object detection 데이터의 경계 상자와 semantic segmantation map을 자연어 text로 변환하여 Vision-language 학습에 활용</li>
</ul>
<ol start="2">
<li>무인 항공기(UAV) 이미지 활용</li>
</ol>
<ul>
<li>UAV 데이터를 추가해 traning 데이터의 diversity를 강화</li>
</ul>
<ol start="3">
<li>InfoNCE loss function 최적화</li>
</ol>
<ul>
<li>이미지와 텍스트 간의 상호 정보를 정렬하기 위해 InfoNCE loss function을 사용하여 학습한다.</li>
<li>이 loss function은 이미지와 텍스트 pair를 서로 가까이 align 하는 것을 목표로 한다.</li>
</ul>
<blockquote>
<p>요약</p>
<ol>
<li>Remote sensing 도메인을 위한 대규모 데이터셋</li>
<li>Remote sensing을 위한 새로운 Vision-language foundation model</li>
</ol>
</blockquote>
<h1 id="related-work">Related work</h1>
<p>Remote sensing 분야에서 기존 연구의 주요 접근 방식</p>
<h2 id="self-supervised-foundation-models-for-remote-sensing">Self-supervised Foundation Models for Remote Sensing</h2>
<blockquote>
<p>Remote sensing 데이터를 이용해 학습하는 자기 지도 학습의 두 가지 주요 접근 방식(대조 학습, 생성적 학습)을 설명</p>
</blockquote>
<p>Foundation 모델은 대규모 pre-training을 통해 여러 downstream task를 처리할 수 있는 능력을 갖추고 있으며, 최근 인공지능 연구에서 중요한 초점으로 부각되었다.</p>
<p>Remote sensing 분야는 GeoAI(지리 공간 AI)를 위한 foundation 모델 구축을 추진하고 있다.</p>
<p>SSL은 라벨이 없는 데이터를 활용해 vision representation을 학습하는 방법으로, 최근 Remote sensing 모델 개발의 핵심적인 접근 방식으로 자리잡았다.</p>
<p>SSL 접근 방식은 크게 두 가지로 나뉜다.</p>
<ol>
<li>Contrastive learning : 데이터를 pair로 비교하여 유사성을 학습</li>
<li>Generative learning : 데이터를 부분적으로 가려서 이를 복원하는 방식으로 학습</li>
</ol>
<h3 id="contrastive-learning">Contrastive learning</h3>
<p>Contrastive learning은 Remote sensing 데이터에서 <strong>데이터를 비교하고 유사성을 학습</strong>하는 방식이다.</p>
<p>연구자들은 Natural image 학습에서 사용되던 방법을 Remote sensing에 맞게 확장하였다.</p>
<blockquote>
<p>동일한 이미지에서 증강된 두 View를 비교하는 방식으로, 데이터 간 유사성을 학습</p>
</blockquote>
<p>&lt;Remote sensing 이미지를 대상으로 SSL방법을 적응시키기 위한 방법&gt;</p>
<ul>
<li><p>공간적 이웃(Spatial neighbors)활용
위성이미지의 공간적 관계를 활용하여 이웃한 이미지 간의 관계를 학습하면 공간적 연속성을 유지하는 강력한 임베딩을 생성할 수 있다.</p>
<blockquote>
<p>위성 이미지에서 공간적으로 가까운 영역은 유사한 패턴을 가질 가능성이 높다</p>
<ul>
<li>이러한 이웃 데이터를 증강 데이터로 활용한다.</li>
</ul>
</blockquote>
</li>
<li><p>랜덤 회전(Random rotations)
Remote sensing 이미지의 90, 180, 270도 회전을 통해 회전된 이미지와 원본을 positive pair로 설정하여, 모델이 방향 변화에 강건한 표현을 학습</p>
<blockquote>
<p>동일한 이미지에 대해 다양한 회전 각도를 적용하여 증강 데이터 생성</p>
</blockquote>
</li>
<li><p>지리적 식생 정보 증류(Distilled vegetation features)
Remote sensing 이미지에서 식생에 관련된 특징만을 추출하여 대조 학습(contrastive learning)에 활용</p>
<blockquote>
<p>위성 이미지에서 식생(초목, 숲, 농경지)은 중요한 지리적 특징 중 하나이다. 따라서, 식생 정보를 활용하여 모델이 지리적 특징을 학습하도록 합니다</p>
</blockquote>
</li>
<li><p>다중 뷰 코딩(Contrastive multiview coding)
동일한 지역의 다른 시점에서 촬영된 데이터를 사용해 학습하여 모델이 같은 지역의 다양한 표현을 이해하도록 학습</p>
</li>
<li><p>초고해상도 작업(Super-resolution enhancement)
Remote sensing 이미지의 초고해상도 복원에 활용하였다.
저해상도 이미지와 고해상도 이미지를 연결하여, 모델이 더 세부적인 표현을 학습한다.</p>
</li>
</ul>
<h3 id="generative-learning">Generative learning</h3>
<p>Generative learning은 Remote sensing에서 MIM 방식을 사용하여 학습한다. </p>
<blockquote>
<p>생성 학습은 모델이 입력 데이터의 일부를 복원하거나 생성하는 작업을 통해 데이터의 특징을 학습하는 방법</p>
</blockquote>
<p>이미지의 일부를 가리고 이를 복원하도록 모델을 훈련시키는 방식으로, MIM방법을 기반으로 하는 여러 Remote sensing 모델은 기존 MIM 프레임워크게 새로운 속성을 통합하는데 초점을 맞춘다.</p>
<p>연구자들은 MIM을 Remote sensing에 적합하도록 다양한 속성을 추가했다.</p>
<ol>
<li><p>스케일 불변성(Scale-invariance) : 이미지 크기에 영향을 받지 않는 표현 학습</p>
<blockquote>
<p>Remote sensing 이미지에서는 동일한 object라도 다른 scale로 나타날 수 있다.</p>
<ul>
<li>모델이 <strong>다양한 스케일에서 객체를 동일하게 인식</strong>하도록 만든다.<blockquote>
<p>스케일 불변성을 학습하면 다양한 해상도의 이미지에서 일관된 성능을 보일 수 있다.</p>
</blockquote>
</li>
</ul>
</blockquote>
</li>
<li><p>시간적 정보(Temporal information) : 시간에 따른 이미지 변화를 학습</p>
<blockquote>
<p>위성 이미지는 시간의 흐름에 따라 수집된다. 
특정 지역에서 계절이나 <strong>시간이 변하면서 발생하는 변화를 학습</strong>하는 것이 중요</p>
<blockquote>
<p>시간적 정보를 학습하면 모델이 이미지 간 시간 의존성을 이해할 수 있다.</p>
</blockquote>
</blockquote>
</li>
<li><p>시간적 불변성(Temporal invariance) </p>
<blockquote>
<p><strong>시간이 변해도 동일한 객체를 일관되게 인식</strong>할 수 있도록 모델을 학습하는 방식</p>
</blockquote>
</li>
</ol>
<blockquote>
<p>Self-supervised Foundation Models for Remote Sensing은 Contrastive learning과 Generative learning의 조합을 통해 데이터를 학습한다.</p>
</blockquote>
<h2 id="vision-language-models-for-remote-sensing">Vision Language Models for Remote Sensing</h2>
<blockquote>
<p>Remote sensing 데이터를 위한 비전-언어 모델이 어떻게 발전했는지</p>
</blockquote>
<p>Image와 text의 통합은 인공지능 연구의 핵심 과제였으며, Vision-language 모델은 이미지를 텍스트를 연결하거나, 텍스트를 기반으로 이미지를 검색하는 작업에서 활용된다.
특히 <strong>Remote sensing 분야에서 복잡한 위성 이미지와 이에 연관된 의미를 해석하는 것이 중요하다.</strong></p>
<h3 id="image-text-retrieval-models">Image-text retrieval models</h3>
<p>Remote sensing retreieval의 초기 연구는 CNN을 통해 이미지를 인코딩하고, LSTM을 사용하여 텍스트 caption을 인코딩하였다.</p>
<p>이후 연구</p>
<ul>
<li><p>이 모델에 위성 이미지를 전역/지역적으로 이해할 수 있는 능력을 부여하기 위해 dynamic fusion module을 활용하는 프레임워크를 도입하였다.</p>
</li>
<li><p>다양한 언어의 remote sensing semantics를 적응하기 위해 다중 언어를 이해할 수 있는 다중 언어 프레임워크를 제안하였다.</p>
</li>
</ul>
<p>이러한 모델들은 이미지-텍스트 retrieval 통해 지식을 습득하는 데 초점을 맞추었지만, retrieval을 넘어서 다운스트림 task에서 이러한 비전 언어 모델의 효율성이 검증되지 않았다.</p>
<h3 id="clip-based-models">CLIP-based models</h3>
<p>CLIP은 이미지와 텍스트를 연결하는 대규모 멀티모달 모델로, remote sensing 데이터를 vision-language 모델에 적용하기 위한 중요한 기반이 된다.</p>
<p>CLIP은 natural 이미지에 대해서 이미지와 텍스트를 정렬하여 embedding하는 뛰어난 성능을 보였지만 remote sensing에서의 연구는 아직 초기 단계로 아직 제한적이다.</p>
<blockquote>
<p><strong>Relate work</strong></p>
<ul>
<li>원격 감지 데이터를 처리하기 위한 기존 SSL 및 비전-언어 모델이 어떻게 발전했는지 설명.</li>
<li>기존 연구가 제공하지 못한 한계와 공백을 강조.</li>
<li>이 논문(RemoteCLIP)이 제안하는 비전-언어 기반 Foundation 모델이 이러한 한계를 어떻게 해결할 수 있을지 논리적 연결을 제공</li>
</ul>
</blockquote>
<h1 id="remoteclip">RemoteCLIP</h1>
<h2 id="contrastive-language-image-pretraining">Contrastive language image pretraining</h2>
<p>CLIP 전략으로 학습된 vision-language 모델은 다양한 task에서 놀라운 generalization 능력을 보여주었다.
대규모 이미지-텍스트 쌍에서 추출한 cross-modal supervision을 통해 의미적으로 유사한 샘플들의 표현을 align하고, 유사하지 않는 샘플들은 멀어지도록 학습한다.
<strong>CLIP 모델은 InfoNCE loss function을 최적화한다.</strong></p>
<h3 id="학습-방식">학습 방식</h3>
<p>CLIP은 M개의 image-text 샘플 쌍으로 구성된 대규모 데이터셋 
$D = {(x^I_i, x^T_i)}^M_{i=1}$을 사용해 학습한다.</p>
<p>Image encoder ($f^I$) : 이미지 샘플 $x^I_i$를 잠재 표현 $z^I_i$로 인코딩
Text encdoer ($f^T$) : 텍스트 샘플 $x^T_i$를 잠재 표현 $z^T_i$로 인코딩</p>
<blockquote>
<ul>
<li>$f^I(x^I_i)=z^I_i$ </li>
<li>$f^T(x^T_i)=z^T_i$</li>
</ul>
</blockquote>
<p>학습 중, CLIP은 InfoNCE 손실 함수를 사용하여 이미지를 텍스트와, 텍스트를 이미지와 정렬하도록 학습한다.</p>
<ul>
<li><p>이미지-텍스트 정렬 : 주어진 이미지에 대한 올바른 텍스트와 높은 유사도를 가지도록 학습</p>
</li>
<li><p>텍스트-이미지 정렬 : 주어진 텍스트에 대한 올바른 이미지를 높은 유사도로 정렬</p>
</li>
</ul>
<p><strong>InfoNCE loss function</strong>
동일 배치에 있는 데이터 간 유사도를 비교하여 정렬 학습</p>
<p>positive pair는 유사도 점수(내적)가 높아야 하고, negative pair는 낮아야 함</p>
<blockquote>
<p>이미지와 텍스트 간의 유사성을 최대화하고, 다른 이미지-텍스트 쌍 간의 유사성을 최소화하는 방식으로 작동</p>
<ul>
<li>CLIP은 이미지를 보고 텍스트를 찾거나, 텍스트를 보고 이미지를 찾을 수 있는 모델이기 때문에 두 가지 방향 모두 학습하는 방식이 필요하다</li>
</ul>
</blockquote>
<blockquote>
<p>$L_{InfoNCE}\ =\ -({1\over N}∑^N_{i=1}log{exp(z^I_i⋅z^T_i/τ<em>{CLIP})\over∑^N</em>{j=1}exp(z^I_i⋅z^T_j/τ<em>{CLIP})} + {1\over N}∑^N</em>{i=1}log{exp(z^I_i⋅z^T_i/
τ<em>{CLIP})\over∑^N</em>{j=1}exp(z^I_i⋅z^T_j/τ_{CLIP})})/2$</p>
<ul>
<li>분자 : i번째 이미지와 해당하는 텍스트의 유사도를 지수 함수로 변환</li>
<li>분모 : i번째 이미지/텍스트와 전체 텍스트/이미지 간의 유사도들의 softmax 분포</li>
</ul>
<blockquote>
<p>$L_{InfoNCE} = image-text \ loss\ +\ text-image\ loss$</p>
</blockquote>
<ul>
<li>$N$ : Batch size</li>
<li>$τ_{CLIP}$ : learnable temperature parameter(softmax 스케일링 조정)</li>
</ul>
</blockquote>
<p>CLIP 모델이 InfoNCE loss function를 통해 두 가지 중요한 성질을 학습한다.</p>
<ol>
<li>표현 정렬(Representation alignment)
의미적으로 유사한 데이터는 같이 위치에 align된다.</li>
</ol>
<ul>
<li>쌍을 이루는 image-text 샘플 $(x^I_i, x^T_i)$ 간에는 높은 유사도 $(z^I_i⋅z^T_j)$를 생성</li>
</ul>
<ol start="2">
<li>표현 그룹화(Representation grouping)
유사한 데이터끼리 그룹화된다.</li>
</ol>
<h3 id="대규모-clip-모델은-remote-sensing-task에서도-강력한-모델이다">대규모 CLIP 모델은 Remote sensing task에서도 강력한 모델이다.</h3>
<p>CLIP은 대규모 image-text pair로 학습된 vision-language 모델로 다운스트림 작업에서 일반적으로 뛰어난 성능을 발휘한다.</p>
<p>Remote sensing 데이터에 대해 특별히 설계되지 않았지만, remote sensing 벤치마크에서 다양한 성능을 보여주고 있다.</p>
<p><strong>&lt;OpenAI의 Zero-shot 성능 평가&gt;</strong>
EuroSAT과 RESISC45 데이터셋(대표적인 remote sensing 데이터)에서 CLIP의 Scene recognition의 zero-shot 성능을 평가</p>
<blockquote>
<p>가장 큰 CLIP 모델인 ViT-Large 14-336의 성능</p>
<ul>
<li>EuroSAT : 59.6%</li>
<li>RESISC45 : 71.7%</li>
</ul>
</blockquote>
<p>이는 remote sensing 특화 모델과 비교했을 때 낮은 성능이다.</p>
<p>SATIN 데이터셋에서도 유사한 실험이 이루어졌으나, CLIP 계열 모델의 zero-shot 성능이 만족스럽지 않았다.</p>
<p><strong>CLIP 모델이 pre-training에서 일반적 의미 정렬에는 뛰어나지만, remote sensing에서는 적합하지 않음을 나타낸다.</strong></p>
<p><strong>&lt;선형 평가(Linear probing)결과&gt;</strong>
Linear probing을 통해 CLIP 모델이 훨씬 더 뛰어난 성능을 보였다.</p>
<blockquote>
<ul>
<li>EuroSAT: 98.1%</li>
<li>RESISC45: 94.9%</li>
</ul>
</blockquote>
<p>다른 Foundation 모델을 모두 능가하였다.</p>
<p><strong>이는 CLIP의 contrastive learning이 remote sensing 데이터에 적합한 시각적 표현을 학습할 수 있지만, cross-modal alignment는 부족함을 보여준다.</strong></p>
<blockquote>
<p>추가 학습을 통해 강력한 성능을 낼 수 있음을 의미한다</p>
</blockquote>
<p><strong>&lt;Remote sensing 이미지 검색에서의 CLIP 평가&gt;</strong></p>
<p>연구진은 CLIP 모델의 zero-shot retrieval 성능을 RSITMD, RSICD, UCM같은 대표적인 Remote sensing 데이터셋에서 테스트 하였다.</p>
<p>모델 크기는 ResNet-50(38M 파라미터)부터 ViT-G-14(1.8B 파라미터)까지 다양하게 실험하였다.</p>
<ul>
<li>ALBEF, BLIP 같은 다른 VLM 모델과도 비교
<img src="https://velog.velcdn.com/images/min-soku/post/a89cde2e-bc56-4aac-a06b-b184846cb3dc/image.png" alt="">
<strong>&lt;평가 결과&gt;</strong></li>
<li>CLIP 모델의 크기가 커질수록 성능이 향상되었다.</li>
<li>대규모 모델과 대규모 pre-training이 복잡한 네트워크 구조나 다중 손실 함수 사용보다 더 효과적임을 보여준다.</li>
</ul>
<h3 id="소형-clip-모델에-대한-지속적-사전-학습은-성능을-더욱-향상시킨다">소형 CLIP 모델에 대한 지속적 사전 학습은 성능을 더욱 향상시킨다</h3>
<p>대형 CLIP 모델이 Remote sensing 작업에서 강력한 성능을 보여주는 것을 고려했을 때, 도메인 내 항공 이미지 데이터를 사용하여 성능을 더욱 향상시킬 수 있는지에 대한 질문이 제기된다.</p>
<p><strong>Continual pretraining은 이러한 목표를 달성하기 위한 방법론이다.</strong></p>
<p><strong>&lt;초기 실험&gt;</strong>
ResNet-50과 ViT-B-32모델을 대상으로 기존의 세 가지 remote sensing 데이터셋에 대해 지속적으로 추가 학습을 시킨다. </p>
<ul>
<li>결과적으로 얻은 모델은 CLIP-CP로 표기하며, 이 모델은 강력한 성능을 보여주었다.</li>
</ul>
<p><strong>&lt;실험 결과&gt;</strong>
CLIP-CP 모델은 가장 큰 CLIP 모델(ViT-G-14)의 zero-shot 결과를 단 2%의 매개변수(38M 파라미터)로 능가하며, 좋은 성능을 달성하였다.
<img src="https://velog.velcdn.com/images/min-soku/post/e518cead-f5b3-4403-9705-cc40c6dace0c/image.png" alt=""></p>
<p><strong>이는 지속적 사전 학습이 모델의 성능을 크게 향상시킬 수 있음을 보여준다.</strong>
또한, 여러 데이터셋을 모아서 기초 모델을 조정하는 것이 유리하다는 것이 분명하다</p>
<p><strong>&lt;과적합 문제와 데이터 스케일링의 필요성&gt;</strong>
간단한 지속적 사전 학습 전력은 좋은 결과를 보여주지만, 완벽하지는 않다.
모델의 크기를 확장하려고 할 때, 심각한 overfitting 현상이 나타난다.</p>
<blockquote>
<p><strong>Continual pretraining이 작은 CLIP 모델에서는 효과적이지만, 대형 CLIP 모델로 확장하려하면 Overfitting 발생</strong></p>
</blockquote>
<p><strong>그 이유는, Continual pretraining에 사용된 dataset이 대형 CLIP에 비해 너무 작다.</strong></p>
<p>연구진이 대형 CLIP 모델의 모델 용량과 복잡성에 맞추기 위해 데이터 스케일링을 수행하였다.</p>
<blockquote>
<p>데이터 크기를 모델 크기에 맞게 확장하는 데이터 스케일링 기법 도입</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/d77b1caf-327a-45a8-8f69-c40be7b90352/image.png" alt="">
규모가 큰 CLIP 모델을 대상으로 데이터 스케일링하여 Continual pretraining한 결과 규모가 작은 CLIP모델인 CLIP-CP보다 더 좋은 결과를 보여주었다.</p>
<blockquote>
<ul>
<li>Continual pretraining이 Remote sensing 도메인에서 CLIP 모델의 성능을 크게 향상시킬 수 있다.</li>
<li>그러나, 모델의 크기가 커질수록 데이터 규모가 성능 향상의 주요 병목 현상이 되므로, 데이터 스케일링이 필수적이다.</li>
</ul>
</blockquote>
<h2 id="data-scaling-via-annotation-unification">Data Scaling via Annotation Unification</h2>
<p>CLIP 모델은 대규모 image-text 쌍으로 학습되지만, remote sensing 도메인에서는 이러한 데이터셋이 부족하다.
이는 성능을 제한하는 주요 병목 현상임을 확인하였고 데이터셋 규모를 확장하여 Continual pretraining을 수행해야 한다.</p>
<ul>
<li>간단한 방법은 크라우드소싱을 기반으로 더 많은 Caption을 추가하는 것이지만, 이는 비용이 매우 높고 확장성을 크게 저하시키며, 주석의 품질과 다양성을 보장하기도 어렵다.</li>
</ul>
<p>이 문제를 해결하고 CLIP 모델의 잠재력을 극대화하기 위해, 주석 통합을 통해 데이터셋을 확장하는 방법을 제안한다.</p>
<p><strong>Remote sensing 데이터에는 object bounding box와 클래스 이름으로 주석이 달려있는 데이터가 많은데, 이 주석은 자연어 caption에 대해 학습한 CLIP의 텍스트 인코더로는 직접 이해할 수 없다.</strong></p>
<ol>
<li>Box-to-Caption(B2C) 변환 방식 제안</li>
</ol>
<ul>
<li>bounding box 주석을 자연어 caption 집합으로 변환하는 방식</li>
</ul>
<ol start="2">
<li>Mask-to-Box(M2B) 변환 방식 제안</li>
</ol>
<ul>
<li>Segmentation 데이터셋의 주석을 bounding box 주석으로 변환한다.</li>
</ul>
<h3 id="box-to-caption-b2c-generation">Box-to-Caption (B2C) Generation</h3>
<p>B2C 생성 방식은 Object detection 데이터셋에서 제공되는 경계 상자 주석과 레이블을 기반으로 자연어 캡션을 생성할 수 있게 한다.
이 방법은 rule-based 방식을 사용하여 이미지 내 Object를 설명하는 5개의 고유한 Caption을 생성한다.
<img src="https://velog.velcdn.com/images/min-soku/post/4f953ae0-a61c-42ca-bcd5-6e1ef7368ab8/image.png" alt=""></p>
<p><strong>&lt;첫 번째와 두 번재 캡션&gt;</strong>
경계 상자의 중심 지점을 기준으로 생성된다.</p>
<ul>
<li>첫 번째 Caption은 이미지 중심에 있는 Object를 설명한다.</li>
<li>두 번째 Caption은 중심에 위치하지 않은 Object를 설명한다.<blockquote>
<p>이러한 구분은 이미지 내 Object의 공간적 분포에 대한 추가적인 맥락과 정보를 제공</p>
</blockquote>
</li>
</ul>
<p><strong>&lt;나머지 세 개의 캡션&gt;</strong>
이미지 내 다양한 object 카테고리의 수를 고려하여 생성된다.</p>
<ul>
<li>경계 상자 주석 목록에서 랜덤으로 object를 선택하고, 이에 따라 캡션 생성</li>
<li>Object의 출현 횟수가 10회를 초과하는 경우, 정확한 숫자 대신 &quot;many&quot;, &quot;a lot of&quot;와 같은 일반적인 용어를 사용하여 캡션의 가독성과 다양성을 높인다.</li>
</ul>
<blockquote>
<p><strong>- 하나의 이미지에 대해 여러 개의 캡션을 생성함으로써, 데이터의 다양성을 높인다.</strong>
<strong>- 객체의 위치를 설명하는 캡션을 통해 모델이 객체의 공간적 배치를 이해할 수 있다.</strong></p>
</blockquote>
<h3 id="mask-to-box-m2b-conversion">Mask-to-Box (M2B) Conversion</h3>
<p>Segmentation 데이터를 CLIP 모델이 이해할 수 있는 경계 상자 주석으로 변환하는 과정이다.
Segmentation 주석은 픽셀 단위로 제공되므로, Object의 위치와 크기를 모델이 처리할 수 있는 형식으로 바꿀 필요가 있다.</p>
<p>이렇게 변환된 데이터를 기반으로 B2C 과정으로 통해 자연어 캡션을 생성할 수 있다.
<img src="https://velog.velcdn.com/images/min-soku/post/31aa907b-acf4-4c2b-8859-662b8356cd58/image.png" alt=""></p>
<p><strong>1. 클래스별 mask 처리</strong>
Segmentation mask는 각 픽셀에 클래스 레이블이 할당되어 있다.
먼저, 각 클래스 별로 해당하는 픽셀만 추출하여 binary mask로 변환한다.</p>
<p><strong>2. Contour(윤곽점) 추출</strong>
각 클래스의 mask에서 객체의 윤곽선을 추출한다. </p>
<blockquote>
<p>동일한 클래스를 가진 연결된 영역을 찾아야 함</p>
</blockquote>
<p>윤곽선은 객체의 외부 경계를 나타내는 점들의 집합이다.
Suzuki의 경계 추적 알고리즘을 사용하여 binary 이미지에서 외부 경계와 내부 경계를 정의하여 각 연결된 영역의 윤곽점을 추출하여 해당 영역의 경계를 정의한다.</p>
<blockquote>
<ol>
<li>Outer boundary와 Hole boundary 정의</li>
<li>이미지를 왼쪽에서 오른쪽으로 스캔하면서 시작 시점 찾기</li>
<li>주변 픽셀을 탐색하여 경계를 따라 이동하면서 윤곽선 정보 추출</li>
<li>계층적 관계를 유지하면서 object의 구조를 파악<blockquote>
<p>binary image에서 작동하므로 세그멘테이션 mask를 카테고리 별로 변환하여 특정 카테고리를 foreground로, 나머지는 background로 처리한다</p>
</blockquote>
</li>
</ol>
</blockquote>
<p><strong>3. 경계 상자 생성</strong>
추출된 윤곽점을 기반으로 각 연결된 영역의 경계 상자를 생성한다.
윤곽점의 수평 및 수직 좌표를 정렬하여 최소 및 최대 값을 찾는다.</p>
<ul>
<li>최소값 : ($x_{min}, y_{min}$)</li>
<li>최대값 : ($x_{max}, y_{max}$)</li>
</ul>
<p>이 좌표가 각 object의 경계 상자를 형성하며, 각 연결된 객체 영역에 대한 위치와 크기를 나타낸다.</p>
<blockquote>
<p>ex) &quot;건물&quot; 클래스 처리:
&quot;건물&quot; 클래스에 해당하는 픽셀을 추출한다.
&quot;건물&quot; 클래스의 연결된 영역을 식별하고, 각 영역의 윤곽점을 추출한다.
윤곽점을 기반으로 각 &quot;건물&quot; 영역의 경계 상자를 생성한다.</p>
</blockquote>
<p>이렇게 생성된 경계 상자는 Box-to-Caption 생성 과정을 통해 자연어 텍스트 설명으로 변환된다.
<img src="https://velog.velcdn.com/images/min-soku/post/a24be720-c713-4a9f-8d3e-faf4c7dc62f7/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/6ccfb165-db8b-4a9b-ae9e-0aa45189baea/image.png" alt=""></p>
<h3 id="sample-de-duplication">Sample De-duplication</h3>
<p>데이터셋에서 중복된 이미지를 제거하는 과정이다.
중복된 이미지가 있으면 모델이 동일한 데이터를 반복해서 학습하게 되어 Overfitting이 발생할 수 있고, 테스트셋 오염이 발생할 수 있다.</p>
<blockquote>
<p>학습 데이터와 테스트 데이터 간에 중복된 이미지가 있으면, 모델이 테스트 데이터를 이미 본 상태가 되어 공정한 평가가 어려워진다.</p>
</blockquote>
<p>p-Hash 기반의 블록 단위 로컬 탐지를 사용하여 중복 이미지를 식별하고 제거하였다.</p>
<blockquote>
<p>p-Hash는 이미지의 시각적 특징을 기반으로 고유한 해시 값을 생성하는 방법으로 이미지의 픽셀 값이 조금 달라도 유사한 해시 값을 생성할 수 있어서, 중복 이미지를 효과적으로 탐지할 수 있다.</p>
</blockquote>
<p><strong>1. p-Hash값 생성</strong>
데이터셋의 모든 이미지에 대해 p-Hash 값을 생성한다.
p-Hash는 이미지를 고정 길이의 해시 값으로 변환하여 이미지의 시각적 특징을 나타낸다.</p>
<p><strong>2. 해시 값 분할</strong>
생성된 p-Hash 값을 N개의 세그먼트로 분할한다.
각 세그먼트는 해시 값의 일부분을 나타낸다.</p>
<p><strong>3. Dictionary 생성</strong>
각 세그먼트에 대해 dictionary를 생성한다.
dictionary의 키는 세그먼트 인덱스이고, value는 해당 세그먼트에 속하는 모든 이미지의 p-Hash값이다.</p>
<p><strong>4. 중복 이미지 탐지</strong>
모든 dictionary를 탐색하면서 pair-wise 이미지의 p-Hash값 간의 hamming distance를 계산한다.
Hamming distance는 두 해시 값이 얼마나 다른지를 나타내는 지표이다.
두 이미지의 hamming distance가 특정 임계값 미만인 경우, 두 이미지는 중복으로 간주된다.</p>
<p><strong>5. 중복 이미지 제거</strong>
중복으로 판별된 이미지 중 하나를 제거한다.</p>
<blockquote>
<p>ex)
<img src="https://velog.velcdn.com/images/min-soku/post/0985f5ac-c70d-4dc0-92b8-f47e2fc9c882/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/3e4857b6-c247-4f69-810c-b72fafaf9e88/image.png" alt="">
<img src="https://velog.velcdn.com/images/min-soku/post/03731614-3714-4ccd-a9f6-d9540fb1f20d/image.png" alt=""></p>
</blockquote>
<h2 id="data-analysis">Data analysis</h2>
<p>데이터 확장을 위해 사용된 각 소스 데이터셋
<img src="https://velog.velcdn.com/images/min-soku/post/137495d3-5946-4dce-a36d-21f19e65a350/image.png" alt="">
이는 세 그룹으로 나눌 수 있다.</p>
<p><strong>1. 검색 데이터 (RET-3)</strong>
Remote sensing을 위한 세 가지 주요 이미지-텍스트 데이터셋을 직접 채택</p>
<ul>
<li>RSICD, RSITMD, UCM 세 가지 데이터셋으로 구성</li>
</ul>
<p>이러한 데이터셋의 Caption은 인간이 주석을 달았기 때문에 캡션 품질이 높지만 데이터셋 크기는 작다.</p>
<blockquote>
<p>인간이 주석을 단 고품질의 작은 이미지-텍스트 데이터셋</p>
</blockquote>
<p><strong>2. 탐지 데이터 (DET-10)</strong>
탐지 데이터셋은 데이터셋 확장의 주요 소스이다.
이러한 데이터셋은 RET-3 데이터셋보다 훨씬 높은 해상도를 가지고 있다.
이 그룹의 데이터셋은 위성 이미지와 UAV 이미지를 모두 포함하여 높은 도메인 다양성을 보여준다.</p>
<blockquote>
<p>객체 탐지 주석이 있는 고해상도 및 고다양성 데이터셋</p>
</blockquote>
<p><strong>3. 세분화 데이터 (SEG-4)</strong>
4개의 인기 있는 remote sensing 세분화 데이터셋을 채택하고 M2B를 통해 변환한 후 B2C를 수행했다.
이러한 데이터셋도 높은 이미지 해상도와 도메인 다양성을 가지고 있다.</p>
<blockquote>
<p>세분화 주석이 있는 고해상도 및 고다양성 데이터셋</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/08092a6d-9190-4384-8f35-b200c4b31e30/image.png" alt=""></p>
<p>RET-3 데이터와 B2C+M2B로 변환된 (DET-10, SEG-4)데이터의 캡션 길이 분포를 시각화하였다.</p>
<blockquote>
<ul>
<li>DET-10 -&gt; B2C변환 : 기존 bounding box와 클래스 라벨만 존재했던 데이터를 자연어 Caption으로 변환</li>
<li>SEG-4 -&gt; M2B변환 -&gt; B2C변환 </li>
</ul>
</blockquote>
<p>B2C와 M2B 접근 방식은 RET-3 데이터의 캡션 분포와 매우 유사한 캡션 분포를 생성한다.</p>
<blockquote>
<p>B2C + M2B를 통해 변환하는 방식이 자연스러운 캡션을 생성하는 데 효과정임을 보여줌</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/min-soku/post/f432f211-f437-4194-92bc-486f90945e20/image.png" alt="">
최종 데이터(DET-10+SEG-4+RET-3)의 T-SNE 시각화를 생성했다.
최종 데이터의 각 하위 집합에서 2k개의 샘플을 선택하여 시각화 수행</p>
<blockquote>
<p>기존 데이터 (RET-3) +  새롭게 변환된 데이터 (DET-10 &amp; SEG-4)</p>
<ul>
<li>DET-10 (객체 탐지 데이터) → B2C(Box-to-Caption) 변환을 적용하여 image-text 데이터로 변환</li>
<li>SEG-4 (세그멘테이션 데이터) → M2B(Mask-to-Box) 변환 → B2C 변환을 적용하여 image-text 데이터로 변환</li>
</ul>
</blockquote>
<h1 id="experiments">Experiments</h1>
<p>벤치 마킹
<strong>Cross-modal retrieval</strong></p>
<ul>
<li>RemoteCLIP은 세 가지 원격 감지 이미지-텍스트 검색 벤치마크(RSITMD, RSICD, UCM)에서 평가됨</li>
<li>평가 지표는 Top-1, Top-5, Top-10 리콜(Recall) 및 평균 리콜(Mean Recall)
<img src="https://velog.velcdn.com/images/min-soku/post/662302cb-e6d3-468c-a2bf-a3822a87a5fe/image.png" alt=""></li>
</ul>
<p><strong>객체 계수 (Object Counting)</strong></p>
<ul>
<li>새로운 원격 감지 객체 계수 벤치마크인 RemoteCount를 도입</li>
<li>이 데이터셋은 DOTA 데이터셋의 검증 세트에서 선택된 947개의 이미지-텍스트 쌍으로 구성
<img src="https://velog.velcdn.com/images/min-soku/post/00dedce0-f878-408c-bb70-7ddb88e2c575/image.png" alt=""></li>
</ul>
<p>RemoteCLIP은 CLIP 대비 더 정확한 객체 계수 능력을 보여주었으며, 특히 숫자를 텍스트로 표현할 때 더 강력한 성능을 보였습니다.</p>
<p><strong>제로샷 이미지 분류 (Zero-shot Image Classification)</strong></p>
<ul>
<li>12개의 원격 감지 이미지 분류 데이터셋에서 RemoteCLIP의 제로샷 분류 성능을 평가</li>
<li>RemoteCLIP은 CLIP 대비 평균 정확도에서 2.85%(ResNet-50), 6.39%(ViT-Base-32), 5.63%(ViT-Large-14)의 성능 향상을 보임
<img src="https://velog.velcdn.com/images/min-soku/post/bc06c12a-fc06-4b9b-88c6-5b6b1cc277b5/image.png" alt=""></li>
</ul>
<p>특히, ViT-Large-14 기반 RemoteCLIP은 12개 데이터셋 중 9개에서 CLIP을 능가함</p>
<p><strong>Few-shot 분류 (Few-shot Classification)</strong></p>
<ul>
<li>Few-shot 학습 설정에서 RemoteCLIP의 성능을 평가</li>
<li>1-shot, 4-shot, 8-shot, 16-shot, 32-shot 설정에서 모델을 평가
<img src="https://velog.velcdn.com/images/min-soku/post/7e833586-79aa-4bcc-9bc5-4d6b4ccd2f38/image.png" alt=""></li>
</ul>
<p>RemoteCLIP은 Few-shot 학습에서도 우수한 성능을 보였으며, 32-shot 설정에서는 모든 비교 모델을 능가했습니다.</p>
<p><strong>풀샷 선형 탐색 및 k-NN 분류 (Full-shot Linear Probing and k-NN Classification)</strong></p>
<ul>
<li>12개의 원격 감지 이미지 분류 데이터셋에서 선형 탐색(Linear Probing) 및 k-NN 분류 성능을 평가
<img src="https://velog.velcdn.com/images/min-soku/post/2e48d803-d0e7-44ca-8b7b-e1f891296962/image.png" alt=""></li>
</ul>
<p>RemoteCLIP은 CLIP 및 기존 자기 지도 학습 모델보다 우수한 성능을 보임</p>
]]></description>
        </item>
    </channel>
</rss>