<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jmipar-k.log</title>
        <link>https://velog.io/</link>
        <description>1999.09.10 / LIG Nex1 AI Researcher</description>
        <lastBuildDate>Wed, 14 May 2025 12:05:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jmipar-k.log</title>
            <url>https://velog.velcdn.com/images/jmipar-k/profile/38394987-59fc-4ebc-a68b-389218713048/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jmipar-k.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jmipar-k" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Style Aligned Image Generation via Shared Attention (CVPR 2024)]]></title>
            <link>https://velog.io/@jmipar-k/Style-Aligned-Image-Generation-via-Shared-Attention-CVPR-2024</link>
            <guid>https://velog.io/@jmipar-k/Style-Aligned-Image-Generation-via-Shared-Attention-CVPR-2024</guid>
            <pubDate>Wed, 14 May 2025 12:05:55 GMT</pubDate>
            <description><![CDATA[<p>Abstract</p>
<ul>
<li>T2I 모델들은 좋은 성능을 보이고 있지만, 일정한 스타일을 유지하도록  보장하는 것은 여전히 도전이다.</li>
<li>최소한의 어텐션 공유로 본 논문에서는 스타일이 정렬된 데이터의 모음을 생성하는 것을 가능케 한다.</li>
</ul>
<p>Method</p>
<ul>
<li>본 논문의 목표는 스타일이 text prompt인 ${y_1, y_2, ...y_n}$가 들어올 때, 각각의 스타일에 대응하는 이미지의 그룹들인 $I_1, I_2, ..., I_n$를 만들어내는 것이다.</li>
<li>본 방식의 핵심 insight는 self-attention mechanism을 다양한 생성된 이미지들에 전반적으로 소통할 수 있게 만드는 것이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/e1df84d6-851b-4c52-baef-93fe80779ee9/image.png" alt=""></p>
<ul>
<li>Full attention Sharing을 진행하게 되면 생성된 데이터 자체를 해칠 수 있다. 위 사진에서 유니콘에 공룡의 녹색이 섞여들어간 것과도 같다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f028c245-086d-4263-8c2a-bb5815e82f4a/image.png" alt=""></p>
<ul>
<li>이를 방지 및 해결하고자 저자들은 모든 이미지끼리 attention 공유를 하는 것이 아니라, 한 개의 이미지랑만 attention sharing을 진행한다고 한다. (주로 배치에서 첫 번째 사진이 된다.)</li>
<li>하지만 이러한 방법은 style이 정확하게 정렬되지는 않은 것을 확인할 수 있으며, 이유로는 attention의 흐름이 너무 약해서 그렇다고 생각한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/4e73d4a6-90d7-47f3-bb67-cbe4d448ad26/image.png" alt=""></p>
<ul>
<li>위 둘의 문제를 상호보완하기 위해서 위와 같은 사진의 shared attention layer를 사용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/aadf8d05-56cb-4d4d-8d41-3ac112481e85/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/2feb499c-907e-43b7-8156-367104f82403/image.png" alt=""></p>
<ul>
<li>AdaIN를 사용하여서 target과 reference의 쿼리 및 키를 정규화한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/69088c29-b51e-47f0-b81d-644b063f70f0/image.png" alt=""></p>
<ul>
<li>결과는 다음과 같다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[NoiseCLR: A Contrastive Learning Approach for Unsupervised Discovery of Interpretable Directions in Diffusion Models (CVPR 2024)]]></title>
            <link>https://velog.io/@jmipar-k/NoiseCLR-A-Contrastive-Learning-Approach-for-Unsupervised-Discovery-of-Interpretable-Directions-in-Diffusion-Models-CVPR-2024</link>
            <guid>https://velog.io/@jmipar-k/NoiseCLR-A-Contrastive-Learning-Approach-for-Unsupervised-Discovery-of-Interpretable-Directions-in-Diffusion-Models-CVPR-2024</guid>
            <pubDate>Wed, 30 Apr 2025 06:29:21 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/07676cff-0dbf-4843-a24a-cc6ea85359de/image.png" alt=""></p>
<p>Abstract</p>
<ul>
<li>GAN 기반 생성 모델들은 latent에서의 disentangle 성능으로 높게 평가되고 있으며, 이것은 이미지 편집에 있어서 핵심 아이디어가 된다.</li>
<li>Diffusion도 최근 강력한 생성 능력을 보이고 있지만, latent 공간은 GAN만큼 이해되거나 연구되지 않았다.</li>
<li>최근 연구들은 text prompt에 의존하는 방식을 채택하고 있지만, 이러한 방식은 여러 분야에서는 제약이 될 수 있다.</li>
<li>본 논문에서는 text-prompt없이 비지도 방식으로 latent의 semantic들을 이해하는 방식을 제안한다.</li>
<li>인풋으로 작은 크기의 unlabeled image set(서로 같은 도메인)을 받고, 이에 대한 다양한 semantic을 비지도 방식(contrastive learning 목적 함수)으로 알아낸다.</li>
<li>이렇게 알게 된 direction들을 같은 혹은 다른 도메인의 이미지에도 적용하는 것이 가능하다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/09954798-9f8f-41dc-b387-df2bfe2cf2a0/image.png" alt=""></p>
<p>Method</p>
<ul>
<li>기존의 Diffusion들은 중간중간에 noise를 바꾸어 주면서 conditioning이 가능했다.</li>
<li>Contrastive Learning을 통해서 K개의 sematic direction을 배우는 것이 NoiseCLR의 우선적인 목표이다.</li>
<li>즉, 같은 방향의 편집들은 서로를 끌어당기고, 다른 방향의 편집들은 서로를 밀어내게 하는 것이다.</li>
<li>Direction들을 구했다면, 이를 이미지에 disentangle된 형태로 적용하는 것이 이미지 편집의 목표이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/2f972822-8819-4445-8412-608637367a47/image.png" alt=""></p>
<ul>
<li>논문에서는 Classifier-Free Guidance 방식을 편집 방향 $d_e$를 추가하여서 이것을 적용한다.</li>
<li>여기서 c는 기존의 이미지 생성을 conditioning할 때 사용된다.</li>
<li>ϵθ(xt, c) − ϵθ(xt, ϕ)는 condition c로 인해 인코딩된 semantic 정보를 인코딩하는 것으로 미루어 보았을 때, ϵθ(xt, de) − ϵθ(xt, ϕ) 식을 추가하여서 각 timestep에 노이즈를 전개하는 방식을 채택한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/12a13765-9ffc-4b8d-8384-ac1092aa1a8d/image.png" alt=""></p>
<ul>
<li>Multiple Direction으로 편집을 하기 위해서 위 식과 같이 사용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/78204388-bc06-4e99-b104-8eb1aef295ad/image.png" alt=""></p>
<ul>
<li>timestep t에 대한 전반적인 노이즈 예측의 식은 위와 같다.</li>
</ul>
<p>Experiments</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/137f1abf-ea7a-48f2-b539-3d9ff781734a/image.png" alt=""></p>
<ul>
<li>scale parameter을 통해서 이렇게 강도 조절이 가능하다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/149b10af-f4aa-4c14-bb57-15ff5072b8f3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LORA: Low-Rank Adaptation of Large Language Models (ICLR, 2022)]]></title>
            <link>https://velog.io/@jmipar-k/LORA-Low-Rank-Adaptation-of-Large-Language-Models-ICLR-2022</link>
            <guid>https://velog.io/@jmipar-k/LORA-Low-Rank-Adaptation-of-Large-Language-Models-ICLR-2022</guid>
            <pubDate>Wed, 16 Apr 2025 03:11:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/8a333ac8-806a-4b15-a7a3-aac7ace7b8cd/image.png" alt=""></p>
<p>Abstract &amp; Introduction</p>
<ul>
<li>GPT-3 (1750억 개의 파라미터)와 같은 거대한 모델의 전체 파인튜닝은 높은 계산 및 메모리 비용으로 비현실적임.</li>
<li>사전 학습된 모델의 가중치를 고정하고, 트랜스포머 레이어에 학습 가능한 저랭크 행렬을 삽입함.</li>
<li>이를 통해 학습해야 할 파라미터 수를 최대 10,000배 줄이고, GPU 메모리 요구량 3배 감소시킴.</li>
<li>성능은 기존의 baseline에 비해 동등하거나 그 이상의 성능을 보이며, 기존의 어댑터 방식과는 다르게 추론 시간에 지연이 발생하지 않음.</li>
</ul>
<p>Problem Statement</p>
<ul>
<li>full fine-tuning의 단점은 매 task을 위해서 다른 파라미터를 매번 모두 학습해야 한다는 점이다. 특히 GPT-3와 같이 parameter가 굉장히 많은 모델을 학습하는 것은 어렵다.</li>
<li>저자들은 작업별 파라미터 증가분 ΔΦ를 훨씬 작은 파라미터 집합 Θ로 표현하는 파라미터 효율적인 접근법을 제안합니다.</li>
<li>ΔΦ를 저랭크 표현으로 인코딩하여 계산 및 메모리 효율성을 높입니다.</li>
<li>이 방법으로 GPT-3 1750억 모델의 경우 학습해야 할 파라미터 수를 원래 모델의 0.01%까지 줄일 수 있습니다.</li>
</ul>
<p>Aren’t Existing Solutions Good Enough?</p>
<ul>
<li>기존의 어댑터 방식은 아주 적은 파라미터와 계산량을 사용하여 추론 시간을 늘리지 않기 위해 설계되었다.</li>
<li>하지만, 큰 neural 네트워크는 하드웨어에 의존하며, 어댑터 레이어들은 순차적으로 계산되어야 하기에 온라인 추론 환경과 같이 배치 사이즈가 1과 같이 작은 경우에는 LoRA와 의미있는 레이턴시 차이를 보인다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/dd01ef8f-1fa8-4472-9401-e5b8633b42ea/image.png" alt=""></p>
<p>Methods</p>
<ul>
<li><p>Low-Rank-Parameterized Update Matrices</p>
<ul>
<li><p>신경망은 많은 full-rank 행렬곱 연산을 포함한다.</p>
</li>
<li><p>LLM들은 낮은 intrinsic dimension을 가지기 때문에, 특정 task에 이를 적용할 때에는 더 작은 subspace로의 projection만으로도 충분히 효율적으로 학습이 가능하다.</p>
</li>
<li><p>이에서 착안하여, $W_0 \in \R^{d \times k}$ 일때,  $W_0 + \Delta W = W_0 + BA$ 와 같이 업데이트를 low-rank decomposition으로 제한하여 표현한다. [단, $B \in R^{d \times r}, A \in R^{r \times k}, r &lt;&lt; min(d, k)$]</p>
<p>  <img src="https://velog.velcdn.com/images/jmipar-k/post/fdc6dc17-9d29-47ad-bf55-da717c2a1f33/image.png" alt=""></p>
</li>
<li><p>A는 임의의 가우시안 노이즈 초기화를, B는 zero 초기화를 적용한다. 즉, 학습 초기 단계에서 $\Delta W = BA$ 는 0으로 시작한다.</p>
</li>
<li><p>$W = W_0 + BA$가 성립하기 때문에, 추론 시에는 단순히 식을 사용하는 것으로 W를 구할 수 있으며, 평소의 추론과 동일하게 진행될 수 있다.</p>
</li>
<li><p>이러한 이유로 추론 시간에 latency를 추가하지 않는다는 뜻이다.</p>
</li>
<li><p>task를 변경할 때에도, $W = W_0 + BA$ 에서 $BA$를 뺄셈하여 $W_0$를 손쉽게 복원한 후,  $B&#39;A&#39;$를 다시 더해주기만 하면 되기 때문에, 적은 메모리로도 빠르게 적용할 수 있다.</p>
</li>
</ul>
</li>
<li><p>Applying LoRA to Transformer</p>
<ul>
<li>Transformer의 구조에서 self-attention module에 총 4개($W_q, W_k, W_v, W_o$) , MLP module에 2개의 weight 행렬이 존재함.</li>
<li>각 $W_q$ (or $W_k, W_v$)는 attention head로 slicing 되지만, 저자들은 이를 $d_{model} \times d_{model}$의 차원을 갖는 single matrix로 간주한다.</li>
<li>단순성과 파라미터 효율성을 위해서, 본 연구에서는 attention weight만을 바꾸는 것을 다룬다. (MLP 모듈은 freeze 상태)</li>
</ul>
</li>
<li><p>Practical Benefits and Limitations</p>
<ul>
<li>핵심 이점은 메모리 사용량과 저장공간의 감소이다.</li>
<li>Optimizer state를 저장하지 않아도 되기에, Adam으로 학습된 large Transformer에 대해서 VRAM 사용량을 최대 $\frac{2}{3}$까지 줄인다.</li>
<li>checkpoint size를 약 10,000배까지 줄인다.</li>
<li>GPT-3 175B 모델에 대해서 전체 파인튜닝에 학습 시간에 비해 25%의 속도 향상을 관찰하였다.</li>
<li>여러 task 간의 전환 시에 LoRA의 가중치만 교체하면 되어서 비용 효율적이다.</li>
<li>추론 지연을 없애기 위해 가중치를 병합하면, 서로 다른 A와 B를 가진 입력을 한 번에 배치 처리하기 어렵다.</li>
<li>하지만, latency가 중요하지 않은 환경에서는 동적으로 병합을 하지 않는 선택을 할 수 있는 선택지가 있다.</li>
</ul>
</li>
</ul>
<p>Experiments</p>
<ul>
<li>실험은 RoBERTa, Ce-BERTa, GPT-2, GPT-3 175B에 대해서 진행하였다.</li>
<li><strong>FT</strong>: 모델은 사전학습 weight와 bias로 초기화되며, 모든 weight가 gradient update를 거친다. GPT-2는 마지막 두 레이어만 학습하며, 나머지는 freeze하는 방식. ($FT^{Top2}$)</li>
<li><strong>Bias-Only or BitFit</strong>: Bias 벡터만 학습되며, 나머지는 전부 freeze하는 방식.</li>
<li><strong>Prefix-embedding tuning(PreEmbed):</strong> input token에 special token을 삽입하며, 이 토큰은 모델에 일반적으로 없는 학습 가능한 단어 임베딩을 포함한다. 이를 앞에 추가하여(prefixing) 성능에 어떤 임팩트를 주는지에 집중하는 방식.</li>
<li><strong>Adapter Tuning:</strong> self-attention module/MLP module과 residual connection 사이에 ****adapter layer를 추가하여서 학습하는 방식. 기존 방식은 $Adapter^H$라 불리며, MLP 뒤와 LayerNorm 뒤에만 layer를 추가하는 방식은 $Adapter^L$로 불림. 효율성을 위해 몇 개의 레이어를 버리는 방식은 $Adapter^D$라고 불림.</li>
<li><strong>LoRA:</strong> 학습 가능한 rank decomposition 행렬들을 weight 행렬들과 평행하게 추가하는 방식.</li>
<li>RoBERTa Base &amp; Large 실험</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/44ca887e-16c7-4959-9e1d-b07e16933e5b/image.png" alt=""></p>
<ul>
<li>GPT-2 Medium &amp; Large 실험</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a9874f39-4d9f-4bd4-8479-9f1a6b373a28/image.png" alt=""></p>
<ul>
<li>GPT-3 175B 실험</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/60eb6828-b7d4-4194-aa0b-8ed2f7a6fc15/image.png" alt=""></p>
<p>Ablation Study</p>
<ul>
<li>트랜스포머의 어떤 부분에 LoRA를 적용하는 것이 좋을까?<ul>
<li>$W_q, W_v$에 적용할 때 성능이 꽤 괜찮았고, 전부 다 줄때 가장 좋았다.</li>
<li>효율을 따져볼 때에는 $W_q, W_v$에만 적용하는 것이 가장 효율적이며 성능이 좋다.</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/1ff82688-df6c-4214-bc33-60b84bdba798/image.png" alt=""></p>
<ul>
<li>최적의 r 값은 무엇일까?</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/fc80f262-f52b-4533-9634-a0e9ae3835e9/image.png" alt=""></p>
<pre><code>- $W_q$ 에만 적용할 때에는 r=1로는 부족했지만, 이외의 경우에는 r=1만으로도 충분했다.
- r의 값을 키우는 것이 의미있는 subspace를 항상 배우는 것은 아니었다.</code></pre><p>Conclusion and Future Works</p>
<ul>
<li>거대 언어 모델을 fine-tuning하는 것은 하드웨어(storage/swiching) 면에서 매우 비싸고 어려운 일이다.</li>
<li>본 논문에서는 좋은 성능을 유지하면서도, latency와 입력 텍스트 길이에 영향을 주지 않는 효율적인 adaptation 전략인 LoRA를 소개한다.</li>
<li>본 논문에서는 언어 모델에 집중하지만, 제시된 방법은 dense layer를 가진 신경망이라면 일반적으로 적용될 수 있다고 한다.</li>
<li>다른 efficient adaptation 방법들과 함께 사용될 수 있다고 한다.</li>
</ul>
<p>Paper : <a href="https://arxiv.org/pdf/2106.09685">https://arxiv.org/pdf/2106.09685</a>
Github : <a href="https://github.com/microsoft/LoRA">https://github.com/microsoft/LoRA</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Enhance Image Classification via Inter-Class Image Mixup with Diffusion Model (CVPR 2024)]]></title>
            <link>https://velog.io/@jmipar-k/Enhance-Image-Classification-via-Inter-Class-Image-Mixup-with-Diffusion-Model-CVPR-2024</link>
            <guid>https://velog.io/@jmipar-k/Enhance-Image-Classification-via-Inter-Class-Image-Mixup-with-Diffusion-Model-CVPR-2024</guid>
            <pubDate>Mon, 24 Mar 2025 06:40:51 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/2d16becb-9e53-439b-8a6b-8dea1e1c6d06/image.png" alt=""></p>
<p>Abstract</p>
<ul>
<li>T2I 모델들은 최근 강력한 성능을 보여왔지만, 이러한 모델들을 classification과 결합했을 때 좋은 성능이 나올까에 대한 의문은 여전히 남아있다.</li>
<li>데이터 증강에서의 생성형 방식과 전통적인 방식 둘 다 일정하면서 다양성이 높은 이미지를 만들기에는 부족함이 있다. 여기서 faithful → 전경 관점에서, diverse → 배경 관점에서 라는 뜻.</li>
<li>이를 해결하기 위해서 inter-class한 데이터 증강 방식을 제안하는데, 이를 Diff-mix라 명명하며, diversity와 faithfulness 두 방면 모두에서 뛰어난 균형을 보이는 모델이다.</li>
</ul>
<p>Method</p>
<ul>
<li><p>Preliminary</p>
<ul>
<li><p>T2I personalization</p>
<ul>
<li>제한된 숫자의 concept-oriented 이미지들을 사용하여서 디퓨전 모델을 특정 concept에 맞게 finetuning하는 과정이다</li>
<li>이러한 concept들은 주로 identifier이라는 것을 사용하여서 표현된다.</li>
<li>fine-tuning전략에 따라서 장 단점이 바뀌는데, faithfulness를 포기하면</li>
</ul>
</li>
<li><p>Image to Image Translation</p>
<ul>
<li><p>이미지-이미지 변환은 reference 이미지를 활용하여서 정교하거나 섬세한 부분들을 수정하는데 활용할 수 있다.</p>
</li>
<li><p>SDEdit에서 아이디어를 가져오며, reference이미지를 target이미지로 변환시킨다.</p>
</li>
<li><p>Translation과정 중에는 noise를 끝까지 입히지 않고 특정 step T에서 시작한다.</p>
<p>  <img src="https://velog.velcdn.com/images/jmipar-k/post/ca4d3ffd-35c2-47f8-9712-dd6d1f92b2c7/image.png" alt=""></p>
</li>
<li><p>strength parameter인 s를 사용하여서 diversitiy와 faithfulness 사이에서의 밸런스를 사용자가 선택할 수 있다.</p>
<p>  <img src="https://velog.velcdn.com/images/jmipar-k/post/2ae73699-c39b-49cb-8490-60d9f8bd1d92/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<pre><code>- General Framework
    - 2가지 step으로 구성이 되는데, 하나는 faithfulness를 높히기 위한 Stable Diffusion finetuning과 하나는 diversity를 위한 inter-class translation이다.
- Fine-tune diffusion Model
    - 바닐라 distillation은 특히나 train shot이 늘어날 때 덜 효과적인 경향을 보인다
    - 이를 완화하기 위해 SD를 널리 쓰이는 T2I personalization 전략과 접목하여 사용한다
    - 기존에 있던 전문 text prompt들을 fine-tuning 단계에 직접적으로 text에 넣는 것은 모델의 수렴과 faithfulness를 방해한다.
    - 이를 해결하기 위해서 text를 넣는 대신 저자들은 $[V_{i}]$와 같은 형태의 identifier를 사용하여 prompt를 “$[V_{i}]$ [metaclass]”의 형태로 모두 통일 시킨다.
    - 여기서 $[V_{i}]$는 학습 가능한 identifier이며, i는 [1, N] 사이에서 증가한다.
    - metaclass란 bird와 같은 공통되는 큰 카테고리를 뜻한다

        ![](https://velog.velcdn.com/images/jmipar-k/post/01dceabe-6909-49c7-ae62-f5d52c0fe25d/image.png)

    - LoRA라는 파라미터 효율적인 finetuning 방식을 채택한다.
    - LoRA는 직접적으로 바로 finetuning 하는 것이 아닌, low-rank 행렬들의 잔여물들을 fine-tuning한다. rank d는 10으로 설정한다.
- Data Synthesis Using Diffusion Model
    - 3가지 방법이 존재한다.
        - 1. distillation 기반 Diff-Gen
        - 2. intra-class 증강 Diff-Aug
        - 3. inter-class 증강 Diff-Mix
    - Diff-Gen은 full reverse process(T-steps)를 통하여 scratch(random 가우시안 노이즈)로부터 샘플들을 생성한다.
    - 반대로, Diff-Aug는 diversity의 일부를 포기하고 reference image를 수정하는 것으로 이미지를 생성한다.
    - 자세히는 intra-class train dataset에서 임의로 샘플링을 하고, image translation을 이용하여 이미지를 좋게 수정한다.
    - intra-class란, 객체에 대해서 conditioning prompt가 GT기반으로 생성이 되어 있는 데이터를 말한다.
    - Diff-Mix는 Diff-Aug와 같은 방식을 사용하지만, reference 이미지가 intra-class dataset에서 sampling되는 것이 아니라 full-training set에서 sampling된다는 차이가 있다.
    - 이것은 inter-class interpolation을 하기 위해서다.
    - Diff-Mix는 Diff-Aug에 비해서 좋지 않은 결과를 보여주는 경우가 잦아서, 이를 해결하기 위해서 CLIP모델을 필터링의 기준으로 사용하여서 content의 신뢰도를 검증한다.</code></pre><p>Experiments</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/2ff9a7d7-0184-42a2-adeb-037581987b1c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a977983a-a7be-4945-b619-d3d828c8ab3b/image.png" alt=""></p>
<ul>
<li>Imbalance Factor이 클수록 불균형한 데이터셋이다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Medical Diffusion Paper Research]]></title>
            <link>https://velog.io/@jmipar-k/Medical-Diffusion-Paper-Research</link>
            <guid>https://velog.io/@jmipar-k/Medical-Diffusion-Paper-Research</guid>
            <pubDate>Mon, 10 Mar 2025 14:03:54 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Synthetic Augmentation with Large-Scale Unconditional Pre-training
<img src="https://velog.velcdn.com/images/jmipar-k/post/196a96ec-395b-4533-9c54-6fa36ee7abb6/image.png" alt=""></li>
</ol>
<ul>
<li>이러한 방식들의 효과는 생성 모델의 성능에 엄청나게 의존을 하는데, 충분한 라벨링된 데이터 없이는 생성 모델의 성능을 보장할 수 없다.</li>
<li>라벨링된 데이터에 너무 의존하는 경향을 최대한 줄이기 위해서 본 논문에서는 unlabeled large-scale data로 pre-train한 후, small-scale의 labeled data로 fine-tuning 될 수 있는 HistoDiffusion이라는 synthetic한 augmentation 방식을 제시하고 있다.</li>
<li>HistoDiffusion은 LDM 기반이며 다양한 unlabeled data를 학습하여 conditional input없이 realistic한 이미지를 생성하도록 설계되어있다.</li>
<li>그 후에는 처음 보는 labeled-data를 이용하여 fine-tuning해서 특정 카테고리에 대한 이미지를 생성할 수 있도록 한다.</li>
<li>또한, 생성된 데이터를 본 모델의 학습에 넣을 때 신뢰도가 높은 데이터만을 선택하여 집어넣는 selective augmentation process 매커니즘을 추가하였다고 한다.</li>
<li>3개의 조직병리학 data로 pretrain하고, CRC라는 조직병리학 data에 대해서 fine-tuning한 모델로 augmentation을 진행했을 때, 6.4%의 classification 성능 향상을 이뤄냈다고 한다.</li>
</ul>
<ol start="2">
<li>DiﬀMix: Diﬀusion Model-Based Data Synthesis for Nuclei Segmentation and Classiﬁcation in Imbalanced Pathology Image Datasets
<img src="https://velog.velcdn.com/images/jmipar-k/post/a52bf7fe-f147-461a-a1a5-41057a897fce/image.png" alt=""></li>
</ol>
<ul>
<li>Semantic Diffusion Model(SDM): noisy한 input $y_t$와 semantic label인 $x$를 각각 encoder, decoder에 독립적으로 넣어준다.</li>
<li>semantic label x를 넣어주면 condition이 되고, empty label을 넣으면 uncondition이 된다.</li>
<li>Balancing Map: 가장 적은 데이터 수를 가진 클래스의 핵을 cut/paste/smooth 한다.</li>
<li>Enlarging Map: 핵인 부분들을 랜덤하게 perturb 시켜서 데이터의 다양성을 증가시킨다.</li>
<li>핵들의 위치를 랜덤하게 옮겨서 SDM이 예측 불가능한 다양한 semantic map을 넣어주려고 노력했다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[The Fully Convolutional Transformer for Medical Image Segmentation(WACV, 2023)]]></title>
            <link>https://velog.io/@jmipar-k/The-Fully-Convolutional-Transformer-for-Medical-Image-SegmentationWACV-2023</link>
            <guid>https://velog.io/@jmipar-k/The-Fully-Convolutional-Transformer-for-Medical-Image-SegmentationWACV-2023</guid>
            <pubDate>Tue, 25 Feb 2025 11:26:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/39522e14-14a1-492e-ae74-7f6e2581d317/image.png" alt=""></p>
<h1 id="1-abstract">1. Abstract</h1>
<ul>
<li>저자들은 의료 데이터에 대한 다양한 모달리티를 segmentation하는데 능한 transformer인 FCT를 제시하고 있습니다.</li>
<li>Fully Convolutional Transformer(FCT)는 잘 알려진 CNN으로 이미지의 표현을 배우고, Transformer로 이미지의 long term dependency들을 배우는 방식을 기반으로 모델링 됐습니다.</li>
<li>FCT는 먼저, long range semantic dependency를 배우고, 계층적 global함을 배우는 단계, 총 2개의 단계로 input을 처리합니다.</li>
</ul>
<h1 id="2-introduction">2. Introduction</h1>
<ul>
<li>현대의 image segmentation model들은 주로 top-down(encoder-decoder) 구조로 입력 이미지를 압축하여 latent 공간에 넣고, 그 다음에 관심 지역들을 decode하는 방식을 채택합니다. 여기에 skip connection을 횡방향으로 연결해주어서 image segmentation 분야에서 큰 도약을 하게 해준 UNet의 구조를 가지게 합니다.</li>
<li>UNet의 키포인트는 fully convolutional하며, non-convolutional 한 parameter들은 예측하지 않는다는 점에 있습니다.</li>
<li>하지만, UNet은 지역적인 부분밖에 볼수 없어(CNN의 단점) global dependency를 보게 해줌으로써 발전을 시키려고 하는 노력들을 해왔습니다. 이에는 attention을 추가한다던지, kernel size를 키워서 볼 수 있는 영역을 넓히는 방식 등이 있지만, 각 방법에는 각자의 단점이 존재합니다.</li>
<li>Transformer는 자연어 처리에서 큰 성공을 거두었고, ViT로 인해서 이미지 task에도 접목이 되면서, ViT를 발전시켜서 Swin transformer와 같이 방대한 데이터나 계산량 없이도 가능하다는 것을 보였습니다.</li>
<li>ViT 계열의 transformer들은 서로 겹치지 않는 패치로 이미지를 나누고, spatial한 위치 정보를 positional encoding 해주어서 패치들과 같이 transformer 레이어들에 통과시켜 long range dependency를 학습할 수 있도록 합니다.</li>
<li>이 둘의 장점만을 취하기 위해서 최근에는 CNN-Transformer을 섞은 hybrid model들이 많이 등장하고 있는데, 이 다음 단계는 CNN만으로 두 장점을 모두 취할 수 있게 설계하는 것이라고 생각해서 fully convolutional한 모델을 소개하고 있습니다.</li>
</ul>
<h1 id="3-fully-convolutional-transformer">3. Fully Convolutional Transformer</h1>
<ul>
<li>Dataset이 {X, Y}로 이루어졌다고 가정했을 때, X는 입력 이미지, Y는 이에 대해 segmentation되어 있는 semantic or binary segmentation map이라고 합니다.</li>
<li>입력 이미지는 3D 이미지를 slicing해서 얻은 (H, W, C) 차원을 가지는 2D 이미지여야 하고, 출력으로는 (H, W, D) 차원을 가지는 segmentation map이 나옵니다. (단, 여기서 D는 클래스 개수)</li>
<li>본 논문의 방법은 cnn-transformer hybrid도 아니며, 사전 학습을 하고 온 transformer를 사용하는 Unet 구조도 아니라는 점에서 이전의 연구들과는 다르다고 합니다.</li>
<li>FCT Block은 먼저 겹치는 patch들을 이미지에서 추출하고, patch 기반 임베딩을 생성하여서 multi-head-self-attention을 patch들에 적용합니다.</li>
<li>주어진 이미지들의 output projection은 Wide-Focus라는 모듈로 전달되어 fine한 정보를 추출하게 됩니다.</li>
</ul>
<h1 id="4-fct-layer">4. FCT layer</h1>
<ul>
<li>각 FCT layer는 LayerNorm-Conv-Gelu-Conv-Gelu-Maxpool 연산으로 시작된다. 이 이유는 3x3 convolution을 패치들에 sequent하게 적용하는 것이 바로 patch-wise projection을 하는 것보다 인코딩이 잘된다고 합니다.</li>
<li>Maxpool의 출력은 Depthwise convolution 연산인 T(.) 으로 들어가게 된다. 커널 크기는 3x3이며, stride는 s x s인데, 여기서 기존과 다른 점은 1. 추출된 패치들은 서로 겹치는 패치이다. 2. Depthwise 컨볼루젼 연산이 출력의 크기를 변화시키지 않는다 로 총 2가지 입니다. 즉, 모든 패치들은 인풋 이미지와 사이즈가 동일합니다.</li>
<li>이후에 Layer Normalization을 통과하게 되고 token map을 얻게 되면 이는 WH x C의 차원을 가지는 patch embedded input이 됩니다.</li>
<li>대부분의 model들은 Multi-Head self attention을 위해 linear projection을 채택하며 이로 인해  spatial한 정보에서 손실이 생기기 마련인데, 이를 보완하기 위해 convolution layer를 추가하지만 이는 계산량을 증가시킨다는 문제가 있습니다.</li>
<li>이를 해결하기 위해 본 논문에서는 MHSA block안에 linear projection을 Depthwise Convolution으로 대신하여 계산량을 줄이면서도 spatial한 정보의 손실을 줄입니다. 이렇게 Convolutional Attention은 patch embedding과 convolutional attention projection으로 이루어져 있습니다.</li>
<li>논문의 경우에는 Batch Normalization을 Layer Normalization으로 대체하는 것이 더 좋은 성능을 보였으며, Point-wise convolution은 제거하는 것이 성능 손실 없이 모델을 더욱 간결하게 만들어주었다고 합니다.</li>
<li>이렇게 Depthwise Convolution으로 positional encoding의 필요성을 삭제하면서 더욱 더 간결한 모델의 구조를 얻었다고 합니다.</li>
<li>또한, MHSA 연산 뒤에 주로 쓰이는 linear layer를 convolution layer로 대체하는 것은 spatial한 context를 잃는 것을 방지하기에, 성능의 큰 향상을 가져온다고 합니다.</li>
<li>하지만, 의료 분야에서는 이에 더해서 fine한 정보 처리를 요구하기 때문에 저자들은 한 쪽에서는 그냥 convolution을 하고, 병렬적으로 동시에 dilated convolution을 실행하여 spatial한 context를 더 잘 추출해내는 multi-branch convlolution layer를 채택합니다.</li>
<li>이 후에 output feature를 summation하여 합친 후 convolution layer를 통과시킵니다. 이러한 과정을 모두 합쳐 Wide-focus라는 모듈이라고 부른다. 중간 중간 residual connection으로 성능을 향상시켰고, 연산된 feature는 다음 FCT layer로 넘겨집니다.</li>
</ul>
<h1 id="5-encoder">5. Encoder</h1>
<ul>
<li>총 4개의 FCT layer로 이루어져 있으며, l번째 transformer layer에 대해서 Convolutional Attention module의 출력은 
$z_l&#39; = MHSA(z_l) + z_{l-1}^{q/k/v}$,
$z_{l-1}^{q/k/v} = Flatten(DepthConv(Reshape(z_{l-1})))$.</li>
<li>MHSA는 $MHSA(z_{l-1}) = softmax(\frac{QK^T}{\sqrt{d}})V$ 의 식을 가집니다.</li>
<li>위의 방식으로 계산된 $z&#39;_l$은 Wide-focus module에서 $z_l = WF(z_l) + z&#39;_l$ 식에 의해 계산됩니다.</li>
<li>이에 더해 encoder에 pyramid style로 다양한 scale에서의 인풋을 넣어주어서 여러 scale에서도 multi-class 혹은 작은 물체도 segmentation 할 수 있도록 만들지만, 이러한 작용 없이도 SOTA를 달성한다고 합니다.</li>
<li>bottleneck encoding은 그냥 또 다른 하나의 FCT layer를 사용하여 수행한다고 합니다.</li>
</ul>
<h1 id="6-decoder">6. Decoder</h1>
<ul>
<li>Decoder는 bottleneck으로 부터 input으로 받은 표현을 segmentation map을 re-sample하는 역할을 합니다.</li>
<li>U-net과 동일하게 조금 더 정보를 잘 받기 위해서 encoder 부분에서 skip connection으로 feature map들을 받아옵니다.</li>
<li>decoder의 구조는 encoder와 비슷합니다.</li>
<li>낮은 해상도에서는 deep supervision을 사용하였고, 가장 낮은 해상도인 28 x 28에서는 사용하지 않았다고 합니다. 이유는 ROI 영역 즉, segmentation되어있는 부분이 때때로 너무 작아서 segmentation이 검출되지 않는 경우가 있어서 worst한 모델 성능을 보였기 때문입니다.</li>
</ul>
<h1 id="7-experiments">7. Experiments</h1>
<ul>
<li>ACDC dataset과 ISIC 2017에 대해서는 7:1:2으로, Spleen dataset(CT)는 8:1:1로 split하였고, 모든 성능 평가는 dice coefficient를 사용하였다고 합니다.</li>
<li>모든 실험은 tensorflow 2.0에서 1개의 A6000 GPU로 진행되었으며, loss function은 Cross Entropy Loss와 Dice Loss 2가지를 5:5로 동일하게 weighting하여 사용했다고 합니다.</li>
<li>Optimizer은 Adam Optimizer를 사용하였고, lr은 1e-3로 시작하여 validation loss를 따라서 감소하도록 하였다고 합니다.</li>
<li>warmup epoch은 50으로 설정하였고, 추후에 250epoch더 진행하여 총 300epoch의 학습을 했다고 합니다.</li>
<li>Data Augmentation 기법으로는 rotation, shear, zoom, horizontal/vertical shift &amp; flip을 사용하였다고 합니다.</li>
<li>기존의 연구중 가장 가까운 경쟁 상대인 nnFormer보다 5배 작은 모델 사이즈로 SOTA를 달성했다고 합니다.</li>
<li>학습은 384x384와 224x224 2 가지를 진행했다고 하며 384의 경우가 확실히 fine한 spatial 정보를 더 잘 볼 수 있어서 성능이 좋았다고 합니다.</li>
<li>별도로 deep supervision을 모든 스케일에서 사용하는 것과 그렇지 않은 것을 실험했는데, 논문에서 제시하는 방식이 최고의 성능을 보인다고 합니다.</li>
</ul>
<h2 id="qualitative-results-on-acdcspleensynapseisic2017">Qualitative Results on ACDC/Spleen/Synapse/ISIC2017</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/2487b2ed-686c-4912-9cb4-a1af927cc1f2/image.png" alt=""></p>
<h2 id="quantitative-results-on-acdc-dataset">Quantitative Results on ACDC Dataset</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f97397b4-afad-4392-bf00-f6eae6f183e2/image.png" alt=""></p>
<h2 id="quantitative-results-on-synapse-dataset">Quantitative Results on Synapse Dataset</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/670a7a0a-20cd-48ab-aa2f-8bac6743f081/image.png" alt=""></p>
<h1 id="8-ablation-study">8. Ablation Study</h1>
<ul>
<li>Ablation Study로는 skip connection을 제거하는 것과, wide focus module에서의 dilate convolution의 병렬적인 개수를 늘리는 실험을 해보았는데, skip connection은 performance에 매우 중요한 영향을 끼치고 있었고, dilate convolution을 늘리는 것은 3개의 branch 이상으로 가면 성능이 점점 포화되다가 결국 감소하는 경향을 보였다고 합니다.</li>
</ul>
<h2 id="ablation-of-wide-focus-module">Ablation of Wide-Focus Module</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/ba681fb4-e273-4324-9990-8d0661512bd2/image.png" alt=""></p>
<h1 id="9-conclusion">9. Conclusion</h1>
<ul>
<li>FCT는 기존의 모델과 비교하였을 때, 3-5배 적은 모델 파라미터로 SOTA를 달성한다고 합니다.</li>
<li>본 논문에서는 2가지 key point를 제시하고 있는데, Convolutional Attention과 Wide-Focus입니다.</li>
<li>Convolutional Attention에서는 linear projection을 depthwise convolution으로 대체하여 겹치는 patch들을 생성하며 positional encoding의 필요성을 제거하여 연산량을 줄이고, 성능을 유지하였습니다.</li>
<li>Wide Focus Module에서는 일반적은 conv layer와 더불어서 dilated convolution을 함께 사용하여 add하는 방식으로 작고 fine한 정보를 잘 배워 성능을 향상시켰다고 합니다.</li>
<li>FCT Block은 medical image application에서 최초로 fully convolutional한 transformer block이며, 손쉽게 다른 medical domain이나 application에 적용될 수 있다고 합니다.</li>
</ul>
<h1 id="10-english-summary">10. English Summary</h1>
<ul>
<li>This paper is proposing ‘The Fully Convolutional Transformer’ which is capable of accurately performing binary and semantic segmentation tasks with over 3-5 times fewer parameters than existing models.</li>
<li>The FCT Layer starts with Layer Normalization-Convolution-Convolution-Maxpool and each Convolution is Followed by a GeLU activation layer.</li>
<li>Applying consecutive convolution layers with small kernels was more effective then directly creating patch-wise projections.</li>
<li>The FCT Layer comprises of two key components - Convolutional Attetntion and Wide-Focus</li>
<li>Convolutional Attention removes the need for positional encoding at the patch creation stage by using Depthwise-Convolutions to create overlapping patches for the model. This makes the model architecture more simple.</li>
<li>The 2 differences from existing researches are that they use overlapping patches which have the same spatial size as the input image.</li>
<li>They also use Depthwise-Convolution based MHSA block, which integrates spatial information to estimate long range semantic dependencies for the first time in a medical imaging context.</li>
<li>Their Wide Focus Module helps leverage fine-grained feature information present in medical images and is an important factor in boosting the performance of their transformer block</li>
<li>Multi Branch Convolution is used in the Wide Focus model to extract better fine-grained information.</li>
<li>The Encoder Part is composed of 4 FCT Layers in total, and multi-scaled inputs can be used to enhance performance for small objects.</li>
<li>The Decoder Part learns to re-sample the segmentation maps from the latent representation input.</li>
<li>Also, skip connections are used to get feature information from the Encoder Part for better performance.</li>
<li>Deep supervision was used in low resolutions except for the lowest resolution, because often the ROIs in the input image scans were too small to segment at the lowest scale. It is said that this low scale output added a strong bias in the model to predict some output ROIs as the background class.</li>
</ul>
<p>Paper URL: <a href="https://openaccess.thecvf.com/content/WACV2023/papers/Tragakis_The_Fully_Convolutional_Transformer_for_Medical_Image_Segmentation_WACV_2023_paper.pdf">https://openaccess.thecvf.com/content/WACV2023/papers/Tragakis_The_Fully_Convolutional_Transformer_for_Medical_Image_Segmentation_WACV_2023_paper.pdf</a>
Github URL:
<a href="https://github.com/Thanos-DB/FullyConvolutionalTransformer">https://github.com/Thanos-DB/FullyConvolutionalTransformer</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[One-step Diffusion with Distribution Matching Distillation (CVPR, 2024)]]></title>
            <link>https://velog.io/@jmipar-k/One-step-Diffusion-with-Distribution-Matching-Distillation-CVPR-2024</link>
            <guid>https://velog.io/@jmipar-k/One-step-Diffusion-with-Distribution-Matching-Distillation-CVPR-2024</guid>
            <pubDate>Tue, 11 Feb 2025 05:08:01 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<ul>
<li>Diffusion Models (DMs)는 고퀄리티의 이미지를 생성하지만, 수십/수백번의 forward pass를 거쳐야 한다는 단점이 존재한다.</li>
<li>본 논문에서는 이미지 품질에 영향을 거의 주지 않으며, 단 한번의 step으로도 이미지 생성을 가능케하는 one-step diffusion을 제시한다.</li>
<li>핵심 요건<ul>
<li>KL divergence를 통해 one-step generator와 teacher model의 분포를 비슷하도록 최적화 한다. 이때, gradient는 두 개의 score function의 차로 나타내질 수 있다.</li>
<li>간단한 regression loss와의 조합을 통해 기존의 multi-step diffusion의 출력과 one-step generator 간의 출력을 맞춰준다.</li>
</ul>
</li>
<li>몇몇의 task에 대해 기존의 DM을 뛰어넘는 성능을 보인다.</li>
</ul>
<h1 id="method">Method</h1>
<h2 id="3-distribution-matching-distillation">3. Distribution Matching Distillation</h2>
<ul>
<li>사전에 훈련된 diffusion model (base model: $\mu_{base}$)을 one-step generator (student model: $G_{\theta}$)로 증류하여 반복적인 샘플링 없이도 생성하는 것을 목표로 한다.</li>
<li>같은 분포로부터 샘플링하는 것을 원하지만, 정확히 같은 매핑을 재생산하는 것은 딱히 원하지 않는다.</li>
<li>GAN과 비슷한 흐름으로, student model의 출력을 fake라 칭하고, 반대로 train distribution에 해당되는 실제 훈련 이미지를 real이라고 정의한다.</li>
<li>훈련에는 총 두 개의 손실 함수가 사용되는데 이때, 서로 다른 두 개의 score function의 차로 gradient가 표현되는 diffusion loss와, real과 fake 이미지 간의 차로 표현되는 regression loss가 있다.</li>
<li>다양한 강도의 gaussian noise로 perturbation된 이미지를 두 개의 diffusion model에 넣어서 real score과 fake score을 설계한다.</li>
</ul>
<h2 id="31-pretrained-base-model-and-one-step-generator">3.1 Pretrained base model and One-step generator</h2>
<ul>
<li>사전 훈련된 Diffusion Model인 $\mu_{base}$가 있다는 가정하에 진행되며, 이때 $\mu_{base}$는 기존의 DDPM 방식과 동일한 forward/backward process를 지니며, EDM과 Stable Diffusion에서 제시한 사전 훈련된 모델을 사용했다고 한다.</li>
<li>One-step generator $G_{\theta}$는 base diffusion과 구조가 같고, 초기 파라미터가 같지만, time-conditioning이 없는 형태이다.</li>
</ul>
<h2 id="32-distribution-matching-loss">3.2 Distribution Matching Loss</h2>
<ul>
<li>이상적으로, $G_{\theta}$가 $\mu_{base}$와 구분 불가능한 이미지를 생성하길 원하기 때문에 real image와 fake image 각각의 분포인 $p_{real}, p_{fake}$간의 KL divergence가 다음 식과 같이 최소가 되도록 한다:</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/bdfeb252-c4e9-44c9-ae7b-b75cb9851c0c/image.png" alt=""></p>
<ul>
<li>해당 손실 함수의 확률밀도를 추정하는 것은 불가능 하지만, 경사하강법을 통해 generator를 학습시키기 위해서 필요한 것은 $\theta$에 관한 gradient이기 때문에 불가능하지 않다.</li>
<li>식 (1)의 gradient 만을 취해서 gradient 업데이트를 나타내면 다음 식과 같다:</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/e64603c7-453a-4914-8539-ba8c0bf679f8/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/27e6d7d6-3bf4-43da-bfd8-a1ae0d824935/image.png" alt=""></p>
<ul>
<li>위의 s에 관한 식들은 각각 real과 fake의 분포를 나타내며 직관적으로 보면, $s_{real}$은 입력 $x$를 $p_{real}$의 모드들에 가깝게 움직이고, $-s_{fake}$는 그들을 멀어지도록 한다.</li>
<li>하지만 여전히, fake sample에 대해서는 $p_{real}$ 분포가 소멸된다는 점과, 우리가 사용하는 score estimator은 diffused 된 분포에 대한 score만 제공한다는 두 가지 문제점이 존재한다.</li>
<li>Score-SDE는 이 두 문제에 해답을 제시한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/10e47832-6864-4c89-b4a2-3e184ad206ef/image.png" alt=""></p>
<ul>
<li>데이터 분포를 다양한 표준편차를 가진 랜덤 가우시안 노이즈를 통해 perturb하는 것으로 점이 아닌 주변까지 커버하는 흐려진 분포의 집합을 얻는다.</li>
<li>이로 인해 분포들끼리 겹치게 되고, 식 (2)의 gradient 계산이 잘 되도록 만든다.</li>
<li>Real score는 기존의 base diffusion model 인 $\mu_{base}$를 freeze한 채로 사용하여 구하게 된다. (Song et al.의 방식)</li>
<li>Fake score도 같은 방식으로 구하지만, one-step generator의 생성 결과가 학습을 해나감으로써 변하기 때문에 $\mu_{base}$와 같은 모델로 초기화한 모델을 $L^{\phi}<em>{denoise}=||\mu^{\phi}</em>{fake}(x_t, t)-x_0||$ 식에 기반하여 가중치 업데이트를 진행하며 구한다.</li>
<li>최종적인 gradient 업데이트 식은 기존의 식(2)에 위에서 새롭게 정의한 변수들을 추가한 다음과 같은 식이 된다:
$\nabla_{\theta} D_{KL} \simeq \mathbb{E}<em>{z,t,x,x_t} \left[ w_t \alpha_t \left( s</em>{\text{fake}}(x_t, t) - s_{\text{real}}(x_t, t) \right) \frac{dG}{d\theta} \right]$</li>
<li>이때, $w_t$라는 시간종속적인 scalar 가중치를 추가하여 dynamics를 개선한다고 하며, 식은 다음과 같다: $w_t=\frac{\sigma^2_t}{\alpha_t}\frac{CS}{||\mu_{base}(x_t,t)-x||}_1$</li>
<li>Regression loss는 다음 식과 같이 주어진다:  $\mathcal{L}<em>{\text{reg}} = \mathbb{E}</em>{(z,y) \sim \mathcal{D}} , \ell(G_{\theta}(z), y)$</li>
</ul>
<h1 id="experiments">Experiments</h1>
<h2 id="41-class-conditional-image-generation">4.1 Class-conditional Image Generation</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/de47dfac-e320-44dd-84e5-dc26ad07fb29/image.png" alt=""></p>
<ul>
<li>ImageNet-64x64 데이터셋에 대해 진행한 정량적 실험 결과이다.</li>
<li>1번의 step 수로도 EDM(Teacher)모델과 비슷한 성능을 보이며, 기존의 1 step혹은 few-step 모델들과 비교했을 때 최고 성능을 보인다.</li>
</ul>
<h2 id="42-ablation-studies">4.2 Ablation Studies</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/c7844151-9492-475b-be08-1874b8d3e3ad/image.png" alt=""></p>
<ul>
<li>본 논문의 방법에서 분포 매칭 적용 시와 적용하지 않았을 시의 정성적 평가 비교이다.</li>
<li>좌측(논문의 방법)이 더욱 현실적이고 구조적 결합의 완성도가 높은 이미지를 생성하는 것을 확인할 수 있다.</li>
<li>생성 시 랜덤 시드는 동일하게 고정했다고 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/1c3fb498-2782-4462-85e0-43bc94f233b6/image.png" alt=""></p>
<ul>
<li>동일하게 Regression Loss를 사용했을 때와, 제거했을 때의 정성적 비교이다.</li>
<li>적용하지 않은 경우 우측과 같이 redundant한 생성을 하는 경우가 있었다고 한다.</li>
</ul>
<h2 id="43-text-to-image-generation">4.3 Text-to-Image Generation</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/967ce072-2294-4ad2-a485-c9d1f9f03b4c/image.png" alt=""></p>
<ul>
<li>MS COCO 데이터셋에 대해 text-to-image 생성을 진행한 정량적 실험 결과이다.</li>
</ul>
<h3 id="t2i-generation-qualitative-comparison">T2I Generation Qualitative Comparison</h3>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/e40a7288-9594-4316-9c8d-729b084a6710/image.png" alt=""></p>
<p>Reference</p>
<p>Paper URL:<a href="https://arxiv.org/pdf/2311.18828">https://arxiv.org/pdf/2311.18828</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AutoPrune: Automatic Network Pruning by Regularizing Auxiliary Parameters]]></title>
            <link>https://velog.io/@jmipar-k/AutoPrune-Automatic-Network-Pruning-by-Regularizing-Auxiliary-Parameters</link>
            <guid>https://velog.io/@jmipar-k/AutoPrune-Automatic-Network-Pruning-by-Regularizing-Auxiliary-Parameters</guid>
            <pubDate>Thu, 23 Jan 2025 11:41:58 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<ul>
<li>본 논문에서는 AutoPrune이라는 방법을 제시하며, 이 방법은 원래의 가중치들을 대신하여 학습이 가능한 보조 파라미터들의 최적화를 통해 네트워크를 pruning하는 방법이다.</li>
<li>이러한 방식의 장점은 학습 단계에서 발생하거나 개입할 수 있는 노이즈나 불안정성이 본래의 가중치에 직접적으로 영향을 끼칠일이 없어서 pruning 과정이 노이즈에 더 강하며, 강건하다는 점이다. (하이퍼 파라미터에도 덜 민감하다.)</li>
<li>이에 더해 gradient 보조 파라미터들의 갱신 방법을 설계하여서 더욱 pruning을 일정하게 할 수 있게 한다.</li>
<li>결과적으로 네트워크의 반복을 이전 연구들에서 임곗값에 관한 지식 없이 자동으로 제거할 수 있으며, 실험 단계에서 최적을 위해 실험해보는 시간을 아낄 수 있다.</li>
</ul>
<h1 id="methods">Methods</h1>
<h2 id="problem-formulation">Problem Formulation</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a0697c10-e3ce-438d-b52d-560b274018bd/image.png" alt=""></p>
<ul>
<li><p>||W||_0는 zero norm, 즉 0이 아닌 가중치들의 개수를 뜻한다.</p>
</li>
<li><p>여기서 목표는 모델의 정확도를 유지시켜주는 w를 최소로 가져가면서 sparse한 구조를 찾아내는 것이다.</p>
</li>
<li><p>하이퍼 파라미터에 너무 민감한 경향을 해결하기 위해서 직접적인 정규화를 하지 않고 아래와 같은 식을 따르는 indicator function을 소개한다.</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/430ba22b-19f8-4c16-a90f-29435168a2f4/image.png" alt=""></p>
</li>
<li><p>매 가중치를 위한 indicator function을 정의하기 보단 보조 파라미터 세트에 대해 일괄적으로 작용할 수 있는 universal한 indicator function M을 정의한다.</p>
</li>
<li><p>미분 불가능한 indicator function의 영역으로 인해 문제가 발생한다. 이를 해결하면 아래와 같은 최적화 문제로 re-formulated 될 수 있다.
<img src="https://velog.velcdn.com/images/jmipar-k/post/36e64a61-00b4-4d13-b397-36b05355a8a3/image.png" alt=""></p>
</li>
<li><p>R()은 정규화 함수를 나타낸다.
  <img src="https://velog.velcdn.com/images/jmipar-k/post/5b956eb7-e866-4737-a4d7-f2dab6ee5483/image.png" alt=""></p>
</li>
<li><p>위 식은 pruning 후에 원소 간의 연산이며 T로 정의되는 가중치 행렬이다.</p>
</li>
<li><p>이렇게 보조 파라미터에 정규화를 진행하는 것은 본래의 가중치들을 건드리지 않아서 좋고, 하이퍼 파라미터인 mu의 영향을 받지 않는 덜 민감한 pruning이 된다는 장점이 있다.</p>
</li>
<li><p>이전의 연구들에 의해 안정성과 성능을 향상시키기 위해서 저자들은 sparse한 구조와, 본래의 가중치를 유지시키는 것에 대해 반복적인 다중-단계 학습을 설계한다.</p>
</li>
<li><p>조금 더 자세히 들어가면 bi-level optimization 방식을 채택하여 최적화를 한다.</p>
</li>
<li><p>데이터셋은 train과 val로 나뉘어지며, single loss function에서 이에 대한 각각의 loss function으로 확장시킨다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/b98003e7-f445-4583-b82a-cd036931a0ce/image.png" alt=""></p>
<h2 id="coarse-gradient-for-indicator-function">Coarse Gradient for Indicator Function</h2>
<ul>
<li>h_{ij}는 0과 1만을 값으로 가지기에 불연속 및 미분 불가능하다.</li>
<li>이전 연구들에서 binary weight들은 계단 함수와 시그모이드 STE를 사용하여 표현되어 왔지만, indicator function인 h_{ij}와 학습가능한 파라미터인 m_{ij}를 위해서 저자들은 간단한 계단 함수를 사용한다고 한다.</li>
<li>적절한 STE를 가진 BNN(Binary Neural Network)들은 최적화된 이진 파라미터들을 효과적으로 찾아내며, 복잡한 task에서도 좋은 성능을 내는 것으로 잘 알려져있다.</li>
<li>vanila BNN들은 연속적 변수인 m_{ij}를 계속해서 업데이트하면서 최적화된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/b9c9d18d-9114-407d-80d5-46a387f18086/image.png" alt=""></p>
<ul>
<li>각 가중치의 결과들은 각 hard 시그모이드 이진 함수의 출력이 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/7170f82d-7832-4d8b-97ec-6878d5fa5c1f/image.png" alt=""></p>
<ul>
<li><p>보조 파라미터를 정규화 없이 직접적으로 가중치에 적용하면 pruning 하고난 값이 0 이하일때, ReLU에서의 그래디언트가 0으로 값이 영구적으로 죽게되기 때문에 복원성이 있는 pruning을 위해서 저자들은 Leaky ReLU(2)나 Softplus(3)를 사용하는 것을 제시한다.</p>
<h2 id="updating-auxiliary-parameters">Updating Auxiliary Parameters</h2>
</li>
<li><p>직접적으로 gradient 업데이트를 적용하는 것 대신, 저자들은 가중치들의 강도(1), 가중치의 변화(2), BNN gradient의 방향 을 일정하게 하기 위해서 보조 파라미터에 대해 개선된 update 규칙(m_{ij})을 제시한다.</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/68c67c4e-d70f-4cc6-b80a-333966655c55/image.png" alt=""></p>
</li>
<li><p>Sensitivity Consistency:</p>
</li>
<li><p>Correlation Consistency:</p>
</li>
<li><p>Direction Consistency:</p>
</li>
</ul>
<h2 id="recoverable-pruning">Recoverable Pruning</h2>
<ul>
<li>복원력을 가지고 pruning을 하는 것은 원본 네트워크 그래프와 pruning된 네트워크 그래프 사이의 갭을 최대한 줄이는 것이 중요하다.</li>
<li>중요한 가중치를 잘못 pruning 했을 때, loss의 증가를 보상하기 위해서 pruned된 가중치가 다시 살아난다.</li>
<li>이전의 정적인 임곗값 대신에 최적화 과정 중에 동적으로 결정하는 임곗값을 사용하여서 model이 더 soft하며, prune 된 가중치가 값을 유지한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SENet: Squeeze-and-Excitation Networks]]></title>
            <link>https://velog.io/@jmipar-k/SENet-Squeeze-and-Excitation-Networks</link>
            <guid>https://velog.io/@jmipar-k/SENet-Squeeze-and-Excitation-Networks</guid>
            <pubDate>Tue, 14 Jan 2025 08:05:25 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a5bbe866-7ea1-45f2-9bd8-8e404214a0f1/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<ul>
<li>최근 CNN이 더욱 발전하면서, 각 layer의 공간적인 정보와 필터로 생성된 채널간의 정보를 결합하여 많은 정보를 쌓는 것이 가능해졌다.</li>
<li>특징들의 계층성을 이용하여 공간 정보를 인코딩하는 CNN의 능력을 강화시킬 수 있었다.</li>
<li>해당 논문에서는 channel의 관계에 초점을 맞추었고, 새로운 구조인 SE block을 소개한다.</li>
<li>SE block은 채널간의 상호 의존성을 명확히 모델링함으로써 채널 간 feature response를 재측정 시켜준다.</li>
<li>이를 여러 개 쌓아서 SE Net이라는 아키텍쳐를 생성하며, 이는 다양한 데이터셋에서 매우 효과적인 일반화 능력을 지닌다.</li>
<li>약간의 계산량 증가로 높은 성능 증가를 달성했다고 한다.</li>
</ul>
<h1 id="squeeze-operation">Squeeze Operation</h1>
<ul>
<li>Squeeze란, 이전 convolution layer$(F_{tr})$에서 받아온 feature map$(U)$을 압축하는 것을 목표로 한다.</li>
<li>여기서 받아온 feature map들은 각 학습된 필터들로 부터 생성된 지역적인 특징들이기 때문에, 그 지역 밖에서는 맥락적인 정보로 이용할 수 없는 것이 문제라고 저자들은 제시한다.</li>
<li>따라서, 이러한 문제를 해결하기 위해서 feature map들을 global average pooling을 통해서 
HxWxC → 1x1xC의 형태로 압축하는 squeeze 과정을 통해서 이들을 channel descriptor이라고 칭한다.</li>
</ul>
<h1 id="excitation-operation">Excitation Operation</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/0498559c-5d7f-4731-8bc3-df872396ea64/image.png" alt=""></p>
<ul>
<li>Squeeze과정을 통해서 1x1x6의 벡터가 나왔다고 가정을 하면 FC layer를 통해서 reduction ratio인 r만큼 (위 그림에선 C=6, r=2) 노드 수를 줄여 ReLU함수를 거치고, 다시 FC layer를 통해 최종적으로 C개의 값을 출력하여 Sigmoid 함수를 통해 0-1의 값을 지닌 6개의 벡터로 만들어준다.</li>
<li>이렇게 하는 이유는 채널에 대한 벡터들을 한번 수축시킨 뒤에 채널 간의 관계를 한번 비선형 함수인 ReLU로 살펴봐주기 위해서다.</li>
<li>이후에 sigmoid 함수를 통과시켜 0과 1사이의 값으로 인코딩 하여 중요도를 값으로 매긴 후 이를 각 feature map에 다시 곱해주는 방식으로 적용시켜, 어떤 채널에 집중을 얼만큼 해야할지를 골라주는 역할을 하는 것을 Excitation Operation이라고 부른다.</li>
</ul>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://inhovation97.tistory.com/48!%5B%5D(https://velog.velcdn.com/images/jmipar-k/post/4cb37461-b34e-4df4-8584-965c4511113d/image.png)">https://inhovation97.tistory.com/48![](https://velog.velcdn.com/images/jmipar-k/post/4cb37461-b34e-4df4-8584-965c4511113d/image.png)</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pruning-as-Search: Efficient Neural Architecture Search via Channel Pruning and Structural Reparameterization]]></title>
            <link>https://velog.io/@jmipar-k/Pruning-as-Search-Efficient-Neural-Architecture-Search-via-Channel-Pruning-and-Structural-Reparameterization</link>
            <guid>https://velog.io/@jmipar-k/Pruning-as-Search-Efficient-Neural-Architecture-Search-via-Channel-Pruning-and-Structural-Reparameterization</guid>
            <pubDate>Wed, 08 Jan 2025 06:12:01 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/23426080-b9a2-4a99-9bf2-a913b46c5497/image.png" alt=""></p>
<h1 id="abstract--introduction">Abstract &amp; Introduction</h1>
<ul>
<li>NAS는 depth와 width를 자동으로 찾지만, searching overhead가 있어서 모델을 찾는데 엄청난 cost가 소모된다.</li>
<li>structured pruning(network pruning)은 layer당 filter을 얼마나 줄일지 ratio를 자동적으로 결정하는 것이 어렵다.</li>
<li>이 논문에서는 Pruning-as-Search(PAS)를 제안하여서 layer당 filter의 압축률을 자동으로 최적화하고 end-to-end로 기법을 적용하여 효율화한다. 이는 기존과 비슷한 훈련 cost를 가지면서 자동으로 sub-network를 찾는다.</li>
<li>depth-wise convolution(DBC)을 각 convolution layer 뒤에 추가하여 pruning indicator로 활용한다.</li>
<li>DBC layer의 훈련 능력을 위해서 Straight-Through-Estimator(STE)를 적용했다.</li>
<li>pre-trained network에서 시작하기 때문에 fine-tuning은 추가로 한번만 필요하다.</li>
<li>magnitude trap에서 벗어나 있기 때문에 이전의 pruning 방식들과는 다르다.</li>
<li>layer width의 유연성을 위해서 identical path를 convolution layer에 structural reparameterization하여, inference 단계에서 sub-network들의 residual connection을 없앤다.</li>
</ul>
<h1 id="challenges-and-motivations">Challenges and Motivations</h1>
<h2 id="c1-nas의-방대한-양의-searching-cost">C1. NAS의 방대한 양의 searching cost</h2>
<ul>
<li>후보군이 많을수록 저장공간이 많이 필요하다.</li>
</ul>
<h2 id="c2-pruning에서의-magnitude-trap">C2. Pruning에서의 magnitude trap</h2>
<ul>
<li>일반적으로는 filter/channel들이 작은 magnitude를 가지면 최종 정확도에 영향을 덜 줄것이라고 생각하지만, 이러한 생각은 반드시 참이 아니며 small channel들을 바로 제거하면 정확도에 영향을 줄만큼 커질 기회를 없애는 문제가 발생하며 이를 Magnitude trap이라고 한다.</li>
</ul>
<h2 id="c3-width의-뻣뻣함-제약">C3. Width의 뻣뻣함 제약</h2>
<ul>
<li>ResNet에는 residual connection이 있고, 이는 입력차원 = 출력차원의 제한을 가지며, 이로 인해 design flexibility가 감소된다.</li>
</ul>
<h1 id="pruning-as-search-algorithm">Pruning as Search Algorithm</h1>
<h2 id="depth-wise-binary-convolution-layers">Depth-Wise Binary Convolution Layers</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/aab1f587-2dc3-458d-9b57-db4aea85f220/image.png" alt=""></p>
<ul>
<li>자동 channel pruning을 위해서 depth-wise 1x1 convolution layer을 사용하였다.</li>
<li>$v_1$은 DBC layer의 파라미터이며 pruning indicator로 사용된다.</li>
<li>여기서 $v_1$의 이진화로 인해서 미분불가능하여 back propagation 할 수 없는 문제가 발생하는데, 이를 STE를 이용하여 해결한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/8308056a-e9c2-42d9-b3ce-2c9758e0feeb/image.png" alt=""></p>
<ul>
<li>임곗값은 0.5로 하였고, 0과 1로 $v_1$을 이진화한다.</li>
<li>STE와 DBC layer의 결합을 통해 pruning policy와 parameter 학습을 분리하며, DBC layer에서 gradient 소실을 방지하여 pruned channel의 정보를 보존한다.</li>
<li>pruned model을 적용하기 위해서 DBC layer의 이진화 값을 이용하여 0인 것은 앞쪽으로, 1인 것은 뒤쪽으로 재구성하여 그룹화한다.</li>
</ul>
<h2 id="training-loss-function">Training Loss Function</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/5d08ef8c-3737-4083-a0bc-72c3a5213a61/image.png" alt=""></p>
<ul>
<li>앞쪽 항은 모델 학습 단계에서의 loss이고, 뒤쪽은 계산 복잡도에 관련된 regularization 항이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/31bef44d-7d38-49c7-8402-178bc0ada67f/image.png" alt=""></p>
<ul>
<li>위 식은 현재 MAC와 목표 MAC 사이의 $L_2$ norm의 제곱으로 정의한다.</li>
</ul>
<h2 id="simultaneous-pruning-and-training-for-c1">Simultaneous Pruning and Training for C1</h2>
<ul>
<li>end-to-end channel pruning 방식은 DBC와 STE를 활용하여 모델의 학습과 pruning indicator을 동시에 할 수 있기에 학습 단계에서 효율적이다.<h2 id="dbc-layer-as-indicators-for-c2">DBC layer as Indicators for C2</h2>
</li>
<li>DBC layer은 pruning indicator로서 2 가지 장점을 가진다.<ol>
<li>SGD를 활용하여 자연스럽게 학습이 가능하며 이를 통해 pruning policy도 학습동안 역동적으로 업데이트 된다.</li>
<li>STE를 활용하였기 때문에 DBC layer에 의해서 pruning된 채널은 forward에서도, backward에서도 사용되지 않으며, 이는 결과적으로 모델 원본 weight를 파괴하는 soft-mask와 구별된다.<h2 id="structural-reparameterization-for-c3">Structural Reparameterization for C3</h2>
</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/12003ec5-fbf9-4ef0-9474-d650b56f9abd/image.png" alt=""></p>
<ul>
<li>skip connection이 한 개의 convolution만 건너서 연결할 때 가능하기에 ResNet을 사용한 것이 아닌 RepVGG에서 제시한 모델을 사용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/76f5bdf4-68e0-4a1e-baa6-e6203bd12c7b/image.png" alt=""></p>
<ul>
<li>합 연산 이후 DBC layer을 두어서 reparameterization이 가능하도록 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/c06d05d5-cca7-4d79-ade0-212e7fc90f2f/image.png" alt=""></p>
<ul>
<li>이 과정 이후에 skip connection을 제거하여 압축모델을 만들어서 추론 속도를 가속한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Distilling the Knowledge in a Neural Network (NIPS 2014)]]></title>
            <link>https://velog.io/@jmipar-k/Distilling-the-Knowledge-in-a-Neural-Network-NIPS-2014</link>
            <guid>https://velog.io/@jmipar-k/Distilling-the-Knowledge-in-a-Neural-Network-NIPS-2014</guid>
            <pubDate>Tue, 07 Jan 2025 07:30:07 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/87349551-5cb4-4832-a167-4554a85a24df/image.png" alt=""></p>
<h1 id="abstract--introduction">Abstract &amp; Introduction</h1>
<ul>
<li>좋은 성능을 내기 위해서는 모델 앙상블과 방법을 사용할 수 있지만, 연산량이 많고 시간이 오래 걸린다.</li>
<li>정답에 대한 레이블 뿐만이 아니라, 이외에 레이블에 대한 작은 확률 정보까지도 성능에 도움이 된다는 생각에서 지식 증류는 시작된다고 한다.</li>
<li>Cumbersome Model이 하는 방식으로 small model이 학습할 수 있다는 점을 제시하였고, 이렇게 되면 기존의 normal한 방식으로 학습을 하는 것보다 더 좋은 성능을 가진다.</li>
<li>student 모델이 학습하는데 사용하는 cumbersome model의 결과로 나온 class probability를 soft target이라고 간주한다.</li>
<li>이로 생기는 이점은 soft target이 high entropy라서 일반적인 학습에 사용하는 hard target보다 정보가 많고, training gradient 간에 gradient의 variance가 작아서 small model이 적은 data로도 효율적인 학습이 가능하다.</li>
</ul>
<h1 id="distillation">Distillation</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/94ff91ab-4682-46a6-88c2-8bf3af77a9ca/image.png" alt=""></p>
<ul>
<li>여기서 T=1일 때 우리가 알고 있는 softmax와 같고, T값이 커질수록 확률 분포가 soft한 형태를 가지게 된다고 한다.</li>
<li>Knowledge를 small model로 전이할때는 높은 값의 T를 사용하다가, 학습이 끝나면 small model은 T=1을 사용한다고 한다.</li>
<li>Loss Function은 2 가지로,</li>
</ul>
<ol>
<li>cumbersome 모델이 주는 soft target과 distilled 모델이 내놓는 softmax 사이의 cross entropy(두 모델의 T값은 동일해야함)</li>
<li>correct label에 대한 cross entropy (Temperature은 1임)</li>
</ol>
<ul>
<li>저자들은 2번째 term에 더 낮은 가중치를 두는게 best result라고 한다.</li>
<li>soft target의 경우 미분 시에 생기는 scale 문제 때문에 값의 temperature의 제곱만큼을 중요하다고 한다.</li>
</ul>
<h1 id="mnist">MNIST</h1>
<ul>
<li>3에 대해서 학습하지 않아도 t를 적절히 높히면 3을 아예 예측하지 못하진 않았다.</li>
<li>올바른 bias를 받았을 때는 정확도가 3에 대해서 98%까지도 나왔다.</li>
</ul>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://mr-waguwagu.tistory.com/45">https://mr-waguwagu.tistory.com/45</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Swin Transformer: Hierarchical Vision Transformer using Shifted Windows]]></title>
            <link>https://velog.io/@jmipar-k/Swin-Transformer-Hierarchical-Vision-Transformer-using-Shifted-Windows</link>
            <guid>https://velog.io/@jmipar-k/Swin-Transformer-Hierarchical-Vision-Transformer-using-Shifted-Windows</guid>
            <pubDate>Thu, 02 Jan 2025 05:45:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/1a08905a-2c41-4fc1-b6bc-b1db26b9be56/image.png" alt=""></p>
<h1 id="introduction">Introduction</h1>
<ul>
<li>기존의 ViT window는 고정적이기 때문에 segmentation 하기가 어려웠다.</li>
<li>Swin Transformer는 window를 세밀하게 쪼개는 것뿐만 아니라, 여러 모양의 window를 이용한다.</li>
<li>단순하게 window 이용에서 그치지 않고 shift까지 적용하고 self-attention을 수행한다.</li>
<li>기존의 ViT는 고해상도 이미지에 대해서 computatuonal complexity가 복잡해지는 문제가 있기 때문에 해상도(픽셀)이 늘어날수록 모든 patch 조합에 대해 self-attention을 수행하는 것은 불가능해진다.</li>
<li>Swin transformer은 계층적 feature map을 구성함으로써 이미지 크기에 대해 linear complexity를 가질 수 있도록 고안된 구조를 가진다.</li>
</ul>
<h1 id="method">Method</h1>
<ul>
<li>Image들을 일단 patch로 만들고, swin transformer block에 넣어주는 형태를 반복하는 구조를 가지고 있다.</li>
<li>중간 과정에 Patch Merging이라는 patch들을 합쳐서 크기를 늘려주는 과정이 포함되어있다.</li>
<li>Swin Transformer Block을 보면 W-MSA와 SW-MSA가 있다. 이것이 Swin의 가장 큰 핵심이고 shift를 MSA에 적용하는 형태라고 볼 수 있다.<h2 id="msa-vs-w-msa">MSA vs W-MSA</h2>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/9006f736-2950-4bc9-a9cf-a8069da83411/image.png" alt=""></p>
<ul>
<li>Swin Transformer에서 MSA는 Multi-Self-Attention으로 MHA과 같은 개념이라고 볼 수 있다.</li>
<li>Patch란 image를 구성하는 조각의 개념이고, window는 patch를 묶고 있는 개념이다. (window 속 patch size는 4x4이다.)</li>
<li>효율적인 모델링을 위해서는 self-attention을 window안에서 수행하면 되기에, window는 non-overlapping한 방법으로 균등하게 분할되도록 배열할 수 있다.</li>
<li>이미지는 근처 픽셀끼리의 연관성이 매우 높기 때문에 근처 patches만 이용해서 self-attention을 수행하여 연산량도 줄이고 세밀한 부분에서의 픽셀간의 연관성을 파악하기 위한 목적이 있다. 이것이 바로 W-MSA이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/974017e0-109a-48a6-8df0-45fbf5ceb346/image.png" alt=""></p>
<ul>
<li>h, w가 클수록 연산량이 급격히 증가한다.</li>
</ul>
<h2 id="sw-msa">SW-MSA</h2>
<ul>
<li>SW-MSA는MSA를 적용하기 전에 shift를 시키는 과정이다.</li>
<li>윈도우가 나뉘어 있는데 각자 다른 개수와 차원을 가지고 있다. 이를 모두 고려해서 연산을 하게 되면 모델이 매우 복잡해질 것이다.</li>
<li>이를 해결하기 위해서 cyclic shift를 이용해서 왼쪽에 있는 window를 오른쪽 아래로 이동시킨다.</li>
<li>또한, Masked MSA를 적용하는데, 사진에 있는 A,B,C 구역에 mask를 적용해서 self-attention이 적용되지 못하도록 한다. 그 이유는 A,B,C는 왼쪽에 있는 픽셀들의 값이기 때문에 오른쪽에 위치한 pixel과의 연관성이 거의 없다고 볼 수 있기 때문이다.</li>
<li>Mask MSA연산이 끝난 후에 다시 window를 원상복귀 시킨다. 이러한 SW-MSA를 통해서 window간의 연결성과 위치를 파악할 수 있기 때문에 model이 이미지를 학습할 때 도움이 된다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/aee5e3dd-d1d5-47d3-a8ed-952f0326c5f7/image.png" alt=""></p>
<h2 id="relative-position-bias">Relative Position Bias</h2>
<ul>
<li>Swin Transformer에서의 다른 점 한 가지는 Positional encoding을 처음에 적용하지 않는다는 점이다. Relative Position Bias(B)를 이용해서 attention 연산 과정 중에 더해주는 형태를 취한다.</li>
<li>기존의 Transformer, ViT에서의 position encoding은 absolute coordinate에 대한 기준이었다면, Relative Position Bias는 relative coordinate에 대한 기준으로 weight를 준다.</li>
</ul>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://kyujinpy.tistory.com/14">https://kyujinpy.tistory.com/14</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation]]></title>
            <link>https://velog.io/@jmipar-k/Be-Your-Own-Teacher-Improve-the-Performance-of-Convolutional-Neural-Networks-via-Self-Distillation</link>
            <guid>https://velog.io/@jmipar-k/Be-Your-Own-Teacher-Improve-the-Performance-of-Convolutional-Neural-Networks-via-Self-Distillation</guid>
            <pubDate>Tue, 17 Dec 2024 08:11:52 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/3259d8fb-2852-45cb-944a-a2b911e67770/image.png" alt=""></p>
<h1 id="abstract--introduction">Abstract &amp; Introduction</h1>
<ul>
<li>본 논문에서는 self-distillation 학습 방법을 제안한다.</li>
<li>전통적인 knowledge distillation인 사전 학습된 teacher 네트워크의 출력을 softmax처리 한 값을 활용하는 방법과 다른 self-distillation은 모델 내부의 지식을 증류하는 방식을 활용한다.</li>
<li>일반적인 지식 증류와는 다르게 teacher과 student model이 같은 모델이다.</li>
<li>Cross entropy는 student의 output과 GT label 사이의 loss를 구하는 것이고, KL divergence는 분포가 서로 어떻게 비슷한지를 distance로 구하는 것이다.</li>
<li>t가 커지면 loss surface가 평평(soft)해지며, 그럴수록 일반화가 잘된다.</li>
</ul>
<h1 id="method">Method</h1>
<ul>
<li>block을 기준으로 student를 3가지로 나누어서 증류한다.</li>
<li>block이 깊어질수록 정확도는 올라가지만 속도는 감소하는 trade-off가 있으며 선택해서 사용할 수 있다는 장점이 있다.</li>
<li>loss는 3가지로 </li>
<li>Teacher을 따라가는 KL Divergence loss</li>
<li>GT를 따라가는 Cross-Entropy loss</li>
<li>Teacher의 feature map을 따라가는 L2 loss
가 있다.</li>
</ul>
<h1 id="experiment">Experiment</h1>
<ul>
<li>noise를 주어도 강해진다.</li>
<li>block 내부에서의 vanishing gradient 문제를 어느정도 해결해준다.</li>
<li>block 내에서 conv layer들 간의 gradient 정도를 좀 더 서로서로 비슷하게 만들어준다.</li>
<li>classifier이 깊어질수록 좀 더 집중된 클러스터링을 보인다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Improved Knowledge Distillation via Teacher Assistant (AAAI 2020)]]></title>
            <link>https://velog.io/@jmipar-k/Improved-Knowledge-Distillation-via-Teacher-Assistant-AAAI-2020</link>
            <guid>https://velog.io/@jmipar-k/Improved-Knowledge-Distillation-via-Teacher-Assistant-AAAI-2020</guid>
            <pubDate>Tue, 17 Dec 2024 08:10:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/b8f3b757-1f23-453d-9b84-80ea99260906/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<ul>
<li>DNN들이 강력하지만 모델의 크기와 무게가 너무 커서 edge device에는 응용되기 힘들기에, 이를 지식 증류로 압축하고 줄이려는 노력들을 해왔다.</li>
<li>본 논문에서는 교사 모델과 학생 모델 사이의 간격이 크면 학생 모델의 성능이 감소한다는 문제점을 제시하고 있다.</li>
<li>이를 해결하기 위해서 다중 지식 증류 라는 기법을 소개하고 있고, 이는 교사 모델과 학생 모델 사이에 중간 크기의 네트워크 모델을 추가하여서 간극을 줄여 효율적인 지식증류를 말한다.</li>
</ul>
<h1 id="assistant-based-knowledge-distillation">Assistant based Knowledge Distillation</h1>
<ul>
<li>지식 증류의 핵심은 GT만으로 학습하는 것 뿐만이 아니라 교사 모델이 어떻게 작동하는지 등의 정보까지 관찰하는 것이다.</li>
<li>주로 지도학습에서는 $a_t, a_s$를 선생/학생 모델의 logit들이라고 하면, GT label인 $y_t$는 cross-entropy loss인</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/4333c8f1-1350-47ef-abf9-597be4e3fde1/image.png" alt=""></p>
<p>   이다.</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/3e92f7b8-acf9-4b63-b453-592d079418ec/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/167cb361-5262-4da0-9907-40c1610e92dd/image.png" alt=""></p>
<ul>
<li><p>교사 모델의 크기가 커지면 성능이 증가하여서 더 좋은 supervisor이 되어서 학생 모델의 성능도 증가한다.</p>
</li>
<li><p>교사 모델이 너무 복잡해지면서 학생이 선생모델을 따라하거나 배우기에 충분한 용량이 안된다.</p>
</li>
<li><p>교사 모델이 커지면 데이터에 대한 확실도가 증가하면서, soft target의 soft한 정도가 줄어들어서 학생 모델이 배울 정보들이 줄어든다.</p>
</li>
<li><p>TA 모델은 학생과 교사 모델 크기 사이 어딘가의 크기를 가진다.</p>
</li>
<li><p>TA 모델은 교사 모델에게서 지식증류된다.</p>
</li>
<li><p>TA 모델은 학생 모델을 지식 증류로 학습시킨다.</p>
</li>
<li><p>distillation를 사용하면 loss surface가 평평하게 나타나는 경향이 있다.</p>
</li>
<li><p>loss surface가 평평할수록 noise에 강해져서 성능이 좋다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Pruning from Scratch via Shared Pruning Module and Nuclear norm-based Regularization (WACV, 2024)]]></title>
            <link>https://velog.io/@jmipar-k/Pruning-from-Scratch-via-Shared-Pruning-Module-and-Nuclear-norm-based-Regularization</link>
            <guid>https://velog.io/@jmipar-k/Pruning-from-Scratch-via-Shared-Pruning-Module-and-Nuclear-norm-based-Regularization</guid>
            <pubDate>Fri, 15 Nov 2024 09:37:58 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/152943ff-fc42-4147-8fd1-5cc2a5d42ae0/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<ul>
<li>대부분의 pruning 연구들은 pre-trained된 모델들에서 중복되는 채널들을 찾아내는 방법에 집중하고 있지만, 이는 규모가 있는 네트워크를 학습할 때의 비용과, 효율적인 재구성을 위해서 채널을 고르는 것의 중요성을 간과하고 있다고 할 수 있다.</li>
<li>본 논문에서는 “pruning from scratch”라는 framework를 제시하여, 재구성과 표현의 수용량을 고려하도록 하고 있다.</li>
<li>Shared Pruning Module(SPM)은 residual block들에서 채널 alignment 문제를 다루어서, pruning 후의 손실없는 재구성을 가능하게 한다.</li>
<li>이에 더해서, pruning 과정에서도 규모가 있는 네트워크의 표현력을 보존하기 위해서 nuclear-norm 기반의 정규화를 소개하고 있다.</li>
<li>실험 결과적으로, ImageNet에서의 ResNet50의 MAC를 기존의 41%까지 경량화하면서도, top-1 accuracy 75.25%를 기록했다고 한다.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li><p>AI의 응용 관점에서 CNN은 놀라운 성과를 거두었고, 점점 더 좋은 성능을 제시함에 따라 계산복잡도도 따라서 증가하고 있다. 이는 edge devices에서의 배치를 부담스럽게 하고 있다.</p>
</li>
<li><p>이를 해결하기 위한 방법에는 여러가지가 있지만 그중 네트워크 pruning은 성능 감소를 최소화하면서도 자원 요구량을 줄일 수 있는 효과적인 방법 중 하나이다.</p>
</li>
<li><p>structured pruning은 중복되는 channel들을 layer에서 제외시킴으로써 inference 시간을 감소시킨다.</p>
</li>
<li><p>structured pruning은 크게 2 가지의 접근으로 나뉠 수 있다.</p>
<ol>
<li>importance-based: $l_1$ norm이나 geometric median과 같은 heuristic 방식을 이용하여 channel의 중요성을 평가한다.</li>
<li>regularization-based: pruning 과정에 regularization loss를 포함시켜서 네트워크를 pruning한다.</li>
</ol>
</li>
<li><p>structured pruning 방식들은 주로 3단계 pipeline을 거치는데,</p>
<ol>
<li>규모가 큰 네트워크가 수렴하고 높은 성능으로 task를 처리할 정도가 될 때까지 사전학습을 진행한다.</li>
<li>이러한 네트워크에서의 중복되는 채널들을 특정한 pruning 방식에 의거하여 제거한다.</li>
<li>최종적으로 prune된 네트워크는 성능 감소를 최대한 무마하기 위해서 fine-tuning을 거친다.</li>
</ol>
</li>
<li><p>이러한 방식들은 마지막 2개의 단계들에 집중해서 잘 진행되어 왔고 좋은 결과를 보여왔다. 하지만, 이렇게 규모가 큰 네트워크들을 수렴할 때까지 학습시키는것은 어렵고 시간이 오래걸리는 전반적인 효율을 떨어뜨리는 일이다.</p>
</li>
<li><p>importance-based 접근방식을 사용하면 채널의 중요성을 찾기가 어려워지기에, 시간이 지남에 따라 서서히 네트워크를 prune해주는 regularization-based 접근방식을 택했다고 한다.</p>
</li>
<li><p>하지만 direct하게 적용되면 정보 손실이 너무 심하기에 본 논문에서는 이를 해결하기 위해 indirect하게 pruning 모듈에 적용하는 방법을 적용한다.</p>
</li>
<li><p>structured pruning을 통한 실질적 가속화에는 실제로 masked channel들을 제거해주는 재구성 과정이 필요하다.</p>
</li>
<li><p>residual block들은 컨볼루전 layer들로 구성되어있고, 이들은 shortcut connection과의 관계를 기준으로 inner과 outer layer로 구별 될 수 있다.</p>
</li>
<li><p>inner layer들은 독립적으로 작용하기 때문에 재구성이 쉽지만, outer layer들은 channel alignment를 고려하지 않고 재구성하게되면 성능이 떨어지게 된다.(shorcut connection과 연결되어 있기에)</p>
</li>
<li><p>본 논문은 SPM을 제시함으로써 outer layer들을 prune하여, 성능을 보존함과 동시에 효율적인 네트워크 압축을 가능케 한다.</p>
</li>
<li><p>올바른 채널을 선택하도록 pruning module을 인도해주는 것은 중요하며, 효율적인 표현력을 유지하기 위해선 네트워크의 성능을 관리 및 유지하며 이루어져야 한다.</p>
</li>
<li><p>본 논문에서는 MAC를 pruning 하는 쪽으로 모듈을 인도하는 $L_{mac}$과 pruned network의 표현력을 유지하기 위해 모듈을 인도하는 $L_{nuc}$ 총 2 가지의 loss를 제시한다.</p>
</li>
</ul>
<h1 id="related-works">Related Works</h1>
<ul>
<li>Structured pruning</li>
<li>Reconfiguration after pruning</li>
<li>Pruning from Scratch</li>
</ul>
<h1 id="methods">Methods</h1>
<ul>
<li>본 논문은 Pre-trained model로부터 자유로운 pruning from scratch방식을 위한 framework를 제시하고 있다.</li>
<li>SPM으로 재구성을 위한 channel alignment 문제를 네트워크 크기 증가 없이 해결하며, 제시된 regularization 방식으로 표현력을 유지하면서 모델의 계산량을 원하는 정도까지 감소시킨다.</li>
</ul>
<h2 id="31-shared-pruning-module-spm">3.1 Shared Pruning Module (SPM)</h2>
<ul>
<li>structured pruning은 성능에 가장 영향이 적은 필터들을 제외시켜서 네트워크의 크기를 줄인다</li>
<li>$a_c^l$이 pruning indicator이고, $w_c^l$을 제거할지 말지 결정한다. Indicator function인 $I$$a_c^l$$\tau$ 보다 크면 1, 나머지 경우에는 0이 되게 만드는 이진 마스크로 볼 수 있다.</li>
<li>이러한 이진화 과정 때문에 미분이 불가능해지는 문제가 발생하는데 이것을 해결하기 위해서 STE라는 방식을 사용하여 Back Propagation이 가능하게 만든다.
Straight Through Estimator(STE):</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/dac62b17-d2ac-4306-9f2b-6d0868161c51/image.png" alt=""></p>
<ul>
<li>gradient들의 direct passing을 가능하게 하는데, 이로써 네트워크들은 heurisitc criteria와 관계없이 자동으로 pruning 될 수 있다.</li>
<li>현대 네트워크들은 자주 residual block을 추가하여 gradient 소실을 해결하는 성능 개선을 사용하는데, residual block들은 주로 이런식으로 쌓인다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/cca204cc-98aa-46a3-9f49-0fafe35c1162/image.png" alt=""></p>
<ul>
<li>pruning module들은 outer layer들을 포함한 모든 convolutional layer 뒤에 붙게 된다. 또한, 연달아 쌓인 residual block들이 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/8c8a3bf0-98ce-425a-9b67-a9c5e1ae4b86/image.png" alt=""></p>
<ul>
<li>첫 번째 residual block 경우에는 위 식과 같이 shortcut connection이 작동하며 binary mask $m^l$는 pruning module의 indicator에 의해서 생성된다.</li>
<li>$m^l$는 1x1 convolution layer과 bottleneck의 output layer 둘 다에 적용되기 때문에 합연산들은 모두 같은 마스크를 사용하여 행해진다.</li>
<li>결과적으로, output feature map의 pruned channel들은 재구성 뒤에도 변하지 않는다. 하지만, 첫 residual block의 후속 block들은 초기 블록과 같지 않다는 점은 인지해야 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/c67e29e1-0f37-414a-8a58-e946f923bfb1/image.png" alt=""></p>
<ul>
<li>후속 shortcut connection 연산들에서는 합연산 시에 다른 이진 마스크들인 $m^l과 m^{l+1}$ 를 사용해서 행해진다.</li>
<li>합연산 전에 마스크들이 적용이 되며, 마스크들은 각기 다른 pruning indicator들에 의해 생성이 되기 때문에 다양한 수나 서로 다른 indice의 masked channel들을 가지고 있을 수 있다.(이를 channel alignment problem이라고 칭한다)</li>
<li>binary mask들 사이의 불일치는 결국에는 네크워크 구조나 2개의 레이어 사이의 계산 flow 불일치로 이어질 수 있다.</li>
<li>성능 저하없이 binary mask로 네트워크를 재구성 하기 위해서는 union operation이 필요하며, 논문에서는 이를 이용하여서 binary mask인 $m^l과 m^{l+1}$를 합쳐주고 있다.</li>
<li>이러한 channel alignment problem으로 인해서 합연산이 이루어지고 나면 실질적으로는 pruning이 되지 않은 상태가 된다. 따라서 SPM을 제시하여서 masked channel를 이전 레이어의 masked channel에 맞춰주도록 한다.</li>
</ul>
<h2 id="32-regularization-for-pruning-from-scratch">3.2 Regularization for pruning from scratch</h2>
<ul>
<li>두 개의 regularization term인 $L_{mac}, L_{nuc}$ 2개를 소개하고 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a98b6e3d-eaf7-4193-b05b-a1cd7ff22dd9/image.png" alt=""></p>
<ul>
<li>target MAC와 현재 MAC의 차이에 대한 squared $l_2$ norm 형태를 보인다.</li>
<li>하지만, target MAC만을 추구하기 보단 성능 개선도 생각을 해야한다.</li>
<li>이를 해결하기 위해서 본 논문에서 추천하는 방식은 각 layer 마다의 표현력을 유지하는 것이다.</li>
<li>수학적으로 보았을 때 rank의 개념이 표현력을 표현하기 위해 사용될 수 있다.</li>
<li>정수값 만을 이산적으로 표현할 수 있는 rank 개념을 그대로 loss에 적용하는 것은 쉽지 않기 때문에, 저자들은 nuclear norm을 사용하여 더 유연하고 연속적인 표현을 가능케 한다.</li>
<li>nuclear norm은 matrix의 singular value들의 $l_1$ norm이다.</li>
<li>nuclear norm은 L1, L2 regularization 여부에 따라 달라지며, 웨이트들을 줄이는 것뿐만 아니라 표현력의 용량을 평가한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a872fe9e-a1e9-46a8-80f3-0cdeae64bac4/image.png" alt=""></p>
<ul>
<li>$I^l_o,I^l_p$는 각각 original layer와 pruned layer의 표현력을 나타낸다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/6bd49575-cac4-48ff-ad44-d0f814bcacdd/image.png" alt=""></p>
<ul>
<li>위 식에서 $\alpha_{nuc}, \alpha_{mac}$는 scale factor이라고 한다.</li>
<li>이렇게 두 loss를 combine해서 사용하여 성능 저하를 최소화하면서도 계산량을 줄일 수 있었다고 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f3426439-5a3a-4142-a4ae-2d92006d1a06/image.png" alt=""></p>
<ul>
<li>이러한 regularization과 classification loss를 합해서 최종 loss function을 완성했다고 한다.</li>
</ul>
<h1 id="experiment">Experiment</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/44d38317-b1c9-4486-881d-a0d58e6d57d4/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/d3c5626c-3aa9-4b23-9934-dc8e70aea9e0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AdaViT: Adaptive Vision Transformers for Efficient Image Recognition (CVPR, 2022)]]></title>
            <link>https://velog.io/@jmipar-k/AdaViT-Adaptive-Vision-Transformers-for-Efficient-Image-Recognition-CVPR-2022</link>
            <guid>https://velog.io/@jmipar-k/AdaViT-Adaptive-Vision-Transformers-for-Efficient-Image-Recognition-CVPR-2022</guid>
            <pubDate>Tue, 15 Oct 2024 10:14:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/010491b9-47b2-43c4-b123-bc08fcf8ce16/image.png" alt=""></p>
<h1 id="abstract--introduction">Abstract &amp; Introduction</h1>
<ul>
<li>최근 self-attention을 기반으로 한 ViT들이 vision task들에서 놀라운 성능을 보이고 있는데, patch와 head와 block 개수의 증가로 인해 여전히 엄청난 computational cost를 요구하고 있다.</li>
<li>본 논문에서는 이미지 간의 너무 많은 변화로 인해 patch들 사이의 long-range dependency가 달라지는 문제가 생긴다고 한다.</li>
<li>이를 해결하기 위해서, 어떠한 patch, head, block을 이용할 것인지 선택할 수 있도록 usage policy를 학습한 모델인 AdaViT라는 adaptive한 computation framework를 제시하여 최소의 성능감소로 inference 효율을 늘렸다고 한다.</li>
<li>가벼운 decision network라는 것을 transformer backbone에 부착하여서 즉석에서 결정을 할 수 있도록 하였다.</li>
</ul>
<h1 id="approach">Approach</h1>
<ul>
<li>AdaViT는 ViT의 모든 Patch / Head / Block 중 중요한 부분만을 선택하여 사용하며, 중요도는 Decision Network를 통해서 파악한다.</li>
<li>Decision Network의 입력으로는 이전 transformer layer 출력을 의미하는 $Z_l$로 표현을 하는데, 이는 size가 (batch size, number of tokens, dimension)이 아닌 첫 번째 토큰인 policy token(class token) 만을 사용하여서 single layer perception인 $m^p, m^h, m^b$를 통과하여 1d vector의 꼴로 나온다.</li>
</ul>
<h2 id="1-patch-selection-module">1. Patch selection module</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/6a94fc29-b427-47a6-98f1-d4a91d2799f1/image.png" alt=""></p>
<ul>
<li>patch selection을 위해서 각 layer마다 $W^p$ 라는 single linear layer을 두고 여기에 이전 layer에서 가져온 policy token(class token)을 통과 시켜서 (1, N) (N: patch 개수)크기의 vector을 얻는다. 이 벡터에서 k번째 자리는 k번째 toekn의 유지 확률을 뜻한다.</li>
<li>이렇게 얻어낸 vector $m^p$를 keeping probability vector이라 부르며, 이 확률로 on/off를 결정하는 binary vector인 $M^p$를 sampling한다.($m^p$는 sigmoid를 거치기 때문에, 확률에 의해서 0 또는 1로 항상 sampling 된다.)</li>
<li>마지막으로 얻어낸 $M^p$가 binary한 성분을 가지기 때문에 간단하게 $Z_l$과의 elementwise 곱셈을 통해 on/off를 반영한다. 
이에 대한 식은 다음과 같다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/16ca5804-5540-4f6a-827a-0f020d2a8735/image.png" alt=""></p>
<ul>
<li>저자는 여기서 최대한 정보성이 많은 패치만을 살리고 나머지는 제외시켜서 속도를 향상시키고 싶었다고 한다.</li>
</ul>
<h2 id="2-head-selection-module">2. Head Selection module</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/65c9480b-2677-4252-9631-463b59d9fc61/image.png" alt=""></p>
<ul>
<li>Head Selection module에서도 patch 때와 비슷하게 $W^h$라는 single linear layer을 사용한다. 마찬가지로 이전 layer의 policy token(class token)을 통과 시켜서 (1,H) (H:head 개수) 크기의 1d probability vector를 얻는다.</li>
<li>이 논문에서는 head의 on/off 방식을 2가지 method로 제안하고 있다.</li>
</ul>
<h3 id="21-partial-deactivation">2.1. Partial Deactivation</h3>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/6c1b706e-4c7d-4048-9714-4cb6b84d2203/image.png" alt=""></p>
<ul>
<li><p>위의 수식처럼 sampling된 확룰이 1인 head에 대해서는 self-attention mechanism을 적용하고, 그러힞 않은 head에 대해서는 Value transform된 값을 그대로 사용하는 것을 partial deactivation이라고 명명한다.</p>
<h3 id="22-full-deactivation">2.2. Full Deactivation</h3>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/be6a5dca-f447-4afe-a59b-a03c1dae49ae/image.png" alt=""></p>
</li>
<li><p>위의 수식처럼 off된 head는 모두 제외하고 on된 head만을 concat하여 다음 block으로 넘겨주는 것을 full activation이라고 명명한다.</p>
</li>
<li><p>이 경우에는 transformer의 input dimension이 block마다 점점 줄어들어서 연산 이득이 계속해서 중첩되어 약간의 성능 하락을 trade-off로 내어주긴 하지만, 물리적인 dimension 크기를 줄여 큰 연산 이득을 볼 수 있다고 한다.</p>
</li>
</ul>
<h2 id="3-block-selection-module">3. Block selection module</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/ffbd6d0d-06c1-46cf-a7b8-eb49bcaf768e/image.png" alt=""></p>
<ul>
<li>Block selection의 경우에도 앞선 두 module과 마찬가지로 single layer perceptron을 사용하여 probability vector를 만든다.</li>
<li>이 경우에는 $m_b$를 통과해서 $m^b_1, m^b_2$ 2가지의 probability vector을 이용하여서 한 transformer block의 sublayer인 MSA와 FFN로 나누어서 각각 on/off를 선택할 수 있게 한다.</li>
</ul>
<h2 id="4-optimization-problem">4. Optimization problem</h2>
<p>위에서 말했던 module들에는 discrete한 sampling(binary decision)을 backpropagation 할 수 없다는 문제가 있다. 이를 해결하기 위해서 본 논문에서는 특별한 trick을 사용하는데, 이는 선행 연구인 Gumbel max trick을 기반으로 한 Gumbel softmax trick이라는 method를 사용한다. 이를 설명하기 위해서 먼저 Gumbel max trick에 대해서 설명 하겠다.</p>
<h3 id="gumbel-max-trick">Gumbel Max trick</h3>
<ul>
<li>Gumbel max trick을 사용하는 이유는 앞서 설명드린 일정 확률로 part 각각에서 0 또는 1이라는 값을 특정 확률로 sampling 하는 미분 불가능한 방식을 back propagation 하기 위해서다.</li>
<li>categorical distribution $z$가 $zCategorical(x_1,x_2)$ ($x_1:0, x_2:1)$로 분포되어 있다고 가정해보자. 이때, Gumbell distribution의 특성을 이용해 trick을 사용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/060dfa45-b383-471a-9ba3-2402d44d21a7/image.png" alt=""></p>
<ul>
<li>위와 같은 식으로 discrete한 categorical 함수를 continuous한 식으로 바꿔줄 수 있어서 미분이 가능해진다.</li>
<li>이렇게 변환한 값들 중에서 가장 큰 값의 index만을 취하기 위해서 gumbel max trick에서 나온 값 중 argmax index $i$, 즉 확률이 가장 높게 나오는 값의 인덱스 만을 취할 수 있어야 하는데, argmax의 미분이 문제가 된다.</li>
</ul>
<h3 id="gumbel-softmax">Gumbel Softmax</h3>
<ul>
<li>이를 위해서 Gumbel Softmax를 사용하는데, 이는 기존에 존재하는 softmax temperature 개념을 Gumbel max trick과 합친 것으로 볼 수 있다.</li>
<li>0에 매우 근사한 temperature 설정을 통해서 가장 높은 probability를 가지는 index를 sampling할 확률을 1에 가깝게 만들어주는 역할을 한다.</li>
<li>여기에 Gumbel max trick을 접목함으로써 Gumbel Softmax trick이 완성된다. 이렇게 argmax function의 미분 문제, discrete sampling에 대한 backpropagation 문제를 해결했다고 한다.</li>
</ul>
<p>최종적인 식은 다음과 같이 기존 softmax에 temperature을 적용한 식을 바탕으로 Gumbel function이 들어가게 된다.</p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/5c5acbc4-c33b-40d2-bcac-6c7fa6e60c8d/image.png" alt=""></p>
<h2 id="loss-function">Loss Function</h2>
<ul>
<li>Loss function으로는 2가지가 있는데, 첫 번째로는 classification task를 위한 cross-entropy loss가 있고, computation cost를 줄이기 위한 usage loss가 있다고 한다.</li>
<li>cross entropy loss에 더해 최대한 많은 개수의 patch / head / block을 생략하기 위한 loss인 $L_{usage}$라는 이름의 loss를 추가하여 사용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/02dd275b-7de5-4143-b022-300edb87daca/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/0ae9f367-14cf-4d77-91d3-bfd1c79ef597/image.png" alt=""></p>
<ul>
<li>여기서 $\gamma$는 각 patch / head / block의 통과율을 적어도 어느정도는 유지시키기 위해 마련한 budget이라고 한다. 모든 경로가 다 block되면 안되기 때문이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/006e153e-a89b-4d17-9ee2-62793c87ea5f/image.png" alt=""></p>
<ul>
<li>gumbel-softmax trick 덕분에 end-to-end 형식으로 두 loss function을 합치고, 최소화하는 것이 가능했다고 한다.</li>
</ul>
<h1 id="experiment">Experiment</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/63bf7302-0416-4016-b905-e3ebe352d047/image.png" alt=""></p>
<ul>
<li>ImageNet에 대한 실험 결과이고, Baseline upperbound는 기존의 ViT를 의미한다.</li>
<li>AdaViT는 이에 비해 0.8%의 성능 하락이 있었지만, FLOPs가 2배 이상 감소한 결과를 보인다.</li>
<li>Baseline Random은 말 그대로 ViT의 patch / head / block을 random하게 deactivate한 경우이고, Random+는 여기에 fine-tuning까지 적용했을 떄의 결과라고 한다.</li>
<li>이처럼 random deactivation과의 비교를 통해서 본 논문에서 제시하는 방식의 deactivation의 타당성을 보여주는 듯 하다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f2fc4fb8-640f-4b50-9ef8-fd498954eda9/image.png" alt=""></p>
<ul>
<li>위 그림은 transformer layer가 진행됨에 따른 activate된 patch를 나타낸 그림이다. 이 그림을 통해 layer가 진행됨에 따라서 점점 중요한 patch들만 activate됨을 확인할 수 있다.</li>
<li>Transformer 자체가 input dependent하며, 논문에서 제시하는 방법도 input adaptive하게 설계되었기 때문에 입력에 따라 patch가 on/off되는 양상은 차이가 있음을 확인할 수 있다.</li>
</ul>
<h1 id="ablation-study">Ablation study</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/696bb50c-a9b8-40f4-8338-c57a35aefda9/image.png" alt=""></p>
<ul>
<li>위 그림에서 볼 수 있듯이, patch / head / block 에 대한 방식을 각각 따로 하나씩만 적용했을 때에도 성능 하락 없이 경량화가 가능했음을 보였다고 한다. 이를 통해 본 논문의 방식이 실제로 효과적임을 증명했다고 한다.</li>
</ul>
<h1 id="conclusion">Conclusion</h1>
<ul>
<li>본 논문에서는 어떠한 patch / head / block을 사용할 것인지 결정하는 adaptive computiation framework인 AdaViT를 제시하고 있다.</li>
<li>이를 위해서 light weight network인 decision network를 각 transformer block에 추가하여 사용한다.</li>
<li>실험결과적으로 아주 적은 성능 감소로 2배 이상의 계산량 감소를 통해 효율성을 증가시킴을 확인하였다고 한다.</li>
</ul>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=8KTDY6fAPKA">https://www.youtube.com/watch?v=8KTDY6fAPKA</a></li>
<li><a href="https://visionmmi.tistory.com/2">https://visionmmi.tistory.com/2</a></li>
</ul>
<p>Paper URL: <a href="https://arxiv.org/abs/2111.15668">https://arxiv.org/abs/2111.15668</a>
Code URL: <a href="https://github.com/MengLcool/AdaViT">https://github.com/MengLcool/AdaViT</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Training data-efficient image transformers & distillation through attention]]></title>
            <link>https://velog.io/@jmipar-k/Training-data-efficient-image-transformers-distillation-through-attention</link>
            <guid>https://velog.io/@jmipar-k/Training-data-efficient-image-transformers-distillation-through-attention</guid>
            <pubDate>Thu, 03 Oct 2024 13:00:32 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/b99e76b5-6704-4f64-8a1f-aac8146317ad/image.png" alt=""></p>
<ul>
<li>DeiT의 특징은 크게 2 가지가 있다.<ul>
<li>ViT와 동일한 transformer 모델 구조를 가지고 있다.</li>
<li>CNN 구조의 teacher모델의 지식을 증류 기법으로 학습한 student 모델을 사용하여 CNN의 inductive bias를 상속받는다.</li>
</ul>
</li>
<li>DeiT는 Knowledge Distillation 기법으로 학습되어서 데이터 효율성이 높은 모델이다. 따라서, 대규모 데이터셋이 필수 요건이 아니고 적은 데이터로도 높은 성능을 달성한다.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li>ImageNet만 활용했을 때, 본 논문에서 제안한 학습 기법 사용시 ViT보다 약 5퍼센트의 성능 향상 이 있었다고 한다.</li>
<li>distillation 추가 적용 시, convolution 기반 EfficientNet보다 성능이 좋았다고 한다.
EfficientNet: 메모리와 FLOPs를 constraint로 둔 상태에서 width, depth, resolution 3가지를 모두 compound하여 accuracy를 최대화 할 수 있는 hyperparameter로 구성한 모델(coumpound)</li>
</ul>
<h1 id="method">Method</h1>
<ul>
<li><p>Soft Distillation: teacher 모델의 softmax 값 활용
  $L_{global}=(1-\lambda)L_{CE}(\psi(Z_s),y)+\lambda\tau^2KL(\psi(Z_s/\tau),\psi(Z_t/\tau))$</p>
</li>
<li><p>Hard label distillation: teacher 모델의 예측값 활용
  $L_{hardDistillglobal}=\frac{1}{2}  L_{CE}(\psi(Z_s),y)+\frac{1}{2}  L_{CE}(\psi(Z_s),y_t)$</p>
<ul>
<li>$Z_t$ : logit of teacher model</li>
<li>$Z_s$ : logit of student model</li>
<li>$\psi$ : softmax function</li>
<li>$y$ : groundtruth label</li>
<li>$y_t$ : argmax_c Z_t (c)</li>
</ul>
</li>
<li><p>실험적으로 hard label distillation with label smoothing의 성능이 더 좋았음</p>
</li>
<li><p>Class token 이외에 distillation token이 추가됐으며, 이로 인해서 output도 하나 추가됌</p>
</li>
<li><p>Loss를 2가지로 도출한다</p>
<ul>
<li>$L_CE$ : Class token output에서의 예측값과 gt label 간의 loss</li>
<li>$L_{teacher}$ : Distillation token output에서의 예측값과 teacher model smoothed label 간의 loss</li>
</ul>
</li>
<li><p>실험적으로 class token과 distillation token이 비슷하며(not same) cosine 유사도가 0.93임을 확인하였다.</p>
</li>
<li><p>distillation token은 class token과는 다른 기능을 가지며, classification 성능 향상에는 도움을 전혀 주지 않는다.</p>
</li>
<li><p>GT label외에 teacher의 pseudo label을 함께 활용하여 fine-tuning할 때의 성능이 더 좋았다고 한다.</p>
</li>
<li><p>inference 단계에서 두 가지의 아웃풋인 class/distillation token을 softmax해서 더해주는(fusion) 방법을 사용했다고 한다.</p>
</li>
</ul>
<h1 id="experiment">Experiment</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/fd99d5b7-f239-4737-915b-3604f59e83ed/image.png" alt=""></p>
<ul>
<li>DeiT 모델에는 크기별로 다양한 모델이 존재하는데 이들 간에는 Head 개수, 그리고 embed-dimension에만 차이가 있고 나머지는 동일하다.</li>
<li>Distillation 시에 teacher의 네트워크가 CNN일 때 성능이 좋은데, 저자들은 이를 inductive bias까지 transfer 받을 수 있기 때문이라고 해석하고 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/7ac7eeb5-a532-4699-bcd3-7123bcc54bb7/image.png" alt=""></p>
<ul>
<li>distillation 추가 시에 성능 향상이 있었고, 이는 distillation token 방식까지 같이 추가해주었을 때 성능이 최고치였다고 한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/a04c82ba-0b79-4386-9d8c-18cea8dd13b4/image.png" alt=""></p>
<ul>
<li>CNN 기반의 teacher을 두었을 때 는 teacher와 비슷한 경향성을 보였다고 하는데, 이를 inductive bias transfer로 인한 현상이라고 해석한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f5892b59-ba63-45d9-abd4-bc0b3a31a028/image.png" alt=""></p>
<ul>
<li>transformer는 inductive bias가 없기 때문에 data를 augmentation 해주는 것이 매우 효과적이었다고 한다. 이때, 사용한 augmentation 방법은 mixup, cutmix, erase 세 가지이다.</li>
</ul>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://www.youtube.com/watch?v=oHnv_S9N1J8">https://www.youtube.com/watch?v=oHnv_S9N1J8</a></li>
</ul>
<p>Paper URL : <a href="https://arxiv.org/abs/2012.12877">https://arxiv.org/abs/2012.12877</a>
Github URL : <a href="https://github.com/facebookresearch/deit">https://github.com/facebookresearch/deit</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale (ICLR 2021)]]></title>
            <link>https://velog.io/@jmipar-k/An-Image-is-Worth-16x16-Words-Transformers-for-Image-Recognition-at-Scale-ICLR-2021</link>
            <guid>https://velog.io/@jmipar-k/An-Image-is-Worth-16x16-Words-Transformers-for-Image-Recognition-at-Scale-ICLR-2021</guid>
            <pubDate>Wed, 25 Sep 2024 09:42:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/8f076f05-c19c-4776-94ef-4b6462a7de71/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<ul>
<li>Transformer 구조는 등장 이래로 자연어 처리 분야의 표준으로 자리잡았고 컴퓨터 비전 분야에서 적용은 한정적이었다.</li>
<li>비전 분야에서 attention은 CNN과 함께 적용되거나 convolution의 전체적인 구조는 유지하면서 특정 요소만 대체하는 데 사용되었다.</li>
<li>본 논문에서는 convolution network 의존이 필수가 아니고, pure transformer을 image patches의 sequence에 직접적으로 적용하는 것이 상당히 좋은 성능을 낸다는 것을 입증한다.</li>
<li>기존의 convolution network보다 train에 필요한 연산량이 크게 감소하면서도 성능이 매우 훌륭하다.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li>self attention 기반 구조는 자연어 처리에서, transformer의 연산 효율성과 확장성 덕분에 100B 파라미터 이상의 크기 모델을 훈련하는 것이 가능해졌고, 현재까지 성능 포화 징조는 보이지 않는다.</li>
<li>하지만, computer vision에서는 convolution구조가 여전히 우세했지만, 여러 연구가 self-attention을 CNN-like 구조와 결합하여 일부는 Convolution을 완전히 대체하기도 하였다.</li>
<li>이러한 모델들은 이론상 효율적이었지만 특수한 attention 사용 때문에 하드웨어 가속기에서는 아직까지 효율적으로 작용하지는 못했다.(Resnet-like 구조를 아직까지는 이기지 못했음)</li>
<li>NLP에서의 성공적인 scaling에서 영감을 받아서 본 연구에서는 가능한 극소량의 변형만을 거친 표준 transformer 모델을 이미지에 직접적으로 적용하는 실험을 진행한다.</li>
<li>이미지를 patch 단위로 분리하고, 선형 임베딩 시퀀스를 입력으로 하여 transformer 모델에 전달한다.</li>
<li>Image patch들은 word token과 같은 방식으로 취급된다.</li>
<li>ImageNet과 같은 mid-sized dataset에 regularization 없이 훈련시킬 때, 이러한 모델은 비슷한 크기의 ResNet보다 몇 % 더 낮은 정확도를 보인다.</li>
<li>하지만 모델이 더 큰 데이터셋으로 훈련된 경우에 inductive bias를 이겨낸다는 사실을 발견한다. 즉, ViT는 충분한 규모로 사전학습된 다음에 더 적은 양의 데이터포인트를 갖는 task에 전이시키면 훌륭한 결과를 얻을 수 있는 것이다.</li>
</ul>
<h1 id="method">Method</h1>
<ul>
<li>Transformer의 input 값은 1차원 sequence 이기 때문에 고정된 크기의 patch로 나눠준 이미지를 1차원으로 flatten 해주어야 한다. H<em>W</em>C 형식의 이미지(원본)를 N<em>P</em>P<em>C로 변환하는 과정이다.
여기서 N은 sequence의 수, P</em>P는 패치의 크기, C는 이미지 채널, (H/W)는 이미지의 높이/너비 이다.</li>
<li>이렇게 1차원으로 바꾼 이미지를 transformer에 사용할 수 잇는 D차원의 벡터로 바꾸어준다.</li>
<li>이렇게 만든 이미지 토큰에 classification을 하기 위해서 extra learnable class token을 추가하여 같이 넣어준다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/1927cb3e-5264-478c-a5eb-43a91557bb9f/image.png" alt=""></p>
<ul>
<li>당연하지만, 중요한 점은 ViT도 역시 Transformer답게 정말 많은 데이터로 Pre-Training하지 않으면 좋은 성능을 기대할 수 없다. ViT도 구글 내부 이미지 약 6억장 정도로 Pre-Training 되었다고 하니 이를 Fine-Tuning 하여 사용하는 것이 좋다.</li>
</ul>
<h1 id="experiment">Experiment</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/f709f8b5-e8c0-4c0a-95c8-bab21ce69525/image.png" alt=""></p>
<h1 id="reference">Reference</h1>
<ul>
<li><a href="https://velog.io/@choonsik_mom/Vision-TransformerViT-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0">https://velog.io/@choonsik_mom/Vision-TransformerViT-논문-리뷰</a></li>
<li><a href="https://hipgyung.tistory.com/entry/%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-ViTVision-Transformer-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-An-Image-is-Worth-16x16-Words-Transformers-for-Image-Recognition-at-Scale">https://hipgyung.tistory.com/entry/쉽게-이해하는-ViTVision-Transformer-논문-리뷰-An-Image-is-Worth-16x16-Words-Transformers-for-Image-Recognition-at-Scale</a></li>
<li>이해하기 쉬운 GIF = <a href="https://github.com/lucidrains/vit-pytorch/blob/main/images/vit.gif">https://github.com/lucidrains/vit-pytorch/blob/main/images/vit.gif</a></li>
</ul>
<p>Paper URL : <a href="https://arxiv.org/abs/2010.11929">https://arxiv.org/abs/2010.11929</a>
Github URL : <a href="https://github.com/google-research/vision_transformer">https://github.com/google-research/vision_transformer</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Attention is All You Need (NeuIPS 2017)]]></title>
            <link>https://velog.io/@jmipar-k/Attention-is-All-You-Need-NeuIPS-2017</link>
            <guid>https://velog.io/@jmipar-k/Attention-is-All-You-Need-NeuIPS-2017</guid>
            <pubDate>Fri, 23 Aug 2024 08:20:17 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jmipar-k/post/52eec4c1-5851-4c7b-8395-6af958515a62/image.png" alt=""></p>
<h1 id="abstract">Abstract</h1>
<ul>
<li>성능 좋은 시퀀스 변환 모델은 대체로 인코더와 디코더를 포함한 복잡한 RNN 또는 CNN 신경망에 기반을 두고 있음</li>
<li>본 논문은 재귀적으로 시퀀스를 처리하지 않는다는 점과, 컨볼루전을 제외하였다는 점, 그리고 오직 attention mechanism에만 기반한 Transformer이라는 모델을 제안한다.</li>
<li>오직 행렬의 곱만을 이용해서 병렬적으로 시퀀스 데이터를 처리할 수 있다. (속도 개선, 계산량 감소)</li>
<li>크거나 한정된 학습 데이터를 가지고도 성공적으로 일반화가 가능함.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li>RNN, LSTM, GRU와 같이 이전에 시퀀스 모델링과 변환 문제에서 뛰어난 성과를 보이던 회귀 모델들은 주로 입력과 출력의 symbol position에 따라 계산을 수행했었다.</li>
<li>문제점 : 순서대로 계산해야 해서 병렬처리가 불가능(느리고, 효율성이 떨어진다.), 길이가 긴 시퀀스를 처리하기에 적합하지 않다(기울기 소실 발생, 메모리 효율 낮음)</li>
</ul>
<h1 id="method">Method</h1>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/32187ec0-bef4-4d4b-8786-496abbc2a2ae/image.png" alt=""></p>
<h2 id="1-scaled-dot-product-attention">1. Scaled Dot-Product Attention</h2>
<ul>
<li>self attention : 다른 pos와 자신의 pos간의 상호작용을 캡쳐하는 것을 뜻한다.</li>
<li>Q와 K를 내적하고, dk(key의 차원수)의 제곱근으로 나누어 스케일링 해준다.</li>
<li>Query: input 단어(알아보고자 하는 단어)
Key: 문장의 모든 단어를 벡터로 쌓아놓은 행렬
Value: 데이터 들의 값</li>
<li>Q dot K 를 하여서 relation matrix를 구해냄(Q와 문장의 모든 단어들과의 관계를 구함)
dk의 제곱근으로 scaling하여 값들을 0 근처로 근사하게 만든다.(기울기 소실 해결)
softmax로 확률 분포화 시킨 후에 value matrix와 내적하여서 관계의 정보를 업데이트 시킨 값을 구해낸다.</li>
</ul>
<h2 id="2-multi-head-attention">2. Multi-Head Attention</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/15e6e544-8577-4b3a-b226-58fa33524b2b/image.png" alt=""></p>
<ul>
<li>Q, K, V를 선형변환(공간변환)한 후 위에서 설명한 Scaled Dot-Product Attetnion에 넣어준다.</li>
<li>중요한 점은 h라는 header을 정해주어서 마치 CNN에서 필터 수를 여러 개로 늘려주어서 다양한 관점에서 self attention을 진행하게 되고 이는 모델을 더 강력하게 만든다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/90aaf190-da4a-4a48-b10a-061c12078a06/image.png" alt=""></p>
<ul>
<li>그림과 같이 QKV를 공간변환한다
(QKV 128차원, 1개→ QKV 32차원, 4개)</li>
<li>이렇게 쪼갠 것을 병렬화 하여서 attention을 진행한 후 나온 4개의 결과 행렬을 concate해주어 합친 후에 projection을 하여서 다시 기존 공간으로 돌려보낸다.</li>
<li>장점: 다양한 관점에서의 attention으로 인한 정확도 향상 및 병렬 처리로 인한 속도/효율 향상!</li>
</ul>
<h2 id="3-position-wise-feed-forward-networks">3. Position-wise Feed-Forward Networks</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/ad99e5ec-d855-470b-be32-88478b506057/image.png" alt=""></p>
<ul>
<li>각 Multi-Head Attention 이후에는 Feed-Forward를 통과 하게 한다.</li>
<li>Feed-Forward의 구조는 [Linear-ReLU-Linear]의 형태를 가지며, 더 큰 차원의 은닉층으로 선형변환하여서 복잡한 관계를 추가로 연산을 하는 것이다. 비선형성 및 깊이를 부여하는 역할을 한다.(MobileNetV2에서의 hidden value와 비슷하다…?)</li>
</ul>
<h2 id="4-3-types-of-attention-layers">4. 3 types of Attention Layers</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/bc10ca79-371e-4513-bd6c-9d3362eef0a2/image.png" alt=""></p>
<h3 id="1-encoder-attention">1) Encoder Attention</h3>
<ul>
<li>QKV 모두 encoder의 output에서 가져오며, 자신의 pos(Q)와 문장의 다른 모든 pos(K)의 self-attention을 계산하여 representation을 구해낸다.</li>
<li>이렇게 구해진 representation을 추후에 encoder-decoder attention에서 K와V로 사용한다.</li>
</ul>
<h3 id="2-decoder-attention">2) Decoder Attention</h3>
<ul>
<li>지금의 pos(Q) 이후의 단어들은 mask를 씌워서 이후의 sequence들은 보지 못하게 하여서 개연성이 없는 미래 정보를 볼 수 없게 하는 방식이다.</li>
<li>Q가 한칸씩 옮겨갈 때마다 mask의 pos도 한칸씩 우측으로 shift된다.</li>
<li>즉, 현재 pos(Q)와 현재 위치를 포함한 이전 모든 pos들만을 남기고 나머지를 가린(K) 단어들과의 self-attention을 계산하여서 information을 도출한다.
이렇게 도출된 information은 encoder-decoder attention에서 Q로 사용된다.</li>
</ul>
<h3 id="3-encoder-decoder-attention">3) Encoder-Decoder Attention</h3>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/64de67f9-1a87-490e-9c73-8b1a8ac2b826/image.png" alt=""></p>
<ul>
<li>위에서 말한 representation을 K,V로 information을 Q로 이용하여서 attention을 진행하는 방식이다.</li>
<li>Q가 단어 하나가 아니라는 점에서 다른 것 같다(?)</li>
</ul>
<h2 id="5-positional-encoding">5. Positional Encoding</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/6a38b014-6953-4b51-af27-f00a0dc9b165/image.png" alt=""></p>
<ul>
<li>Transformer와 RNN 계열 모델의 가장 큰 차이는 word-by-word가 들어가는 것이 아닌 문장을 통째로 넣어준다는 점이다. 또한, 이에 따라서 예측하려는 단어(pos)가 어디인지 반드시 명시해주어야 한다.</li>
<li>이때, 선형함수가 아니라 삼각함수를 사용하는데 2가지 장점을 가지게 된다. 
장점1 : 각 sequence에 적용하는 경우에도 위치별로 극심한 값의 차이가 없다.
장점2 : pos마다 서로 다른 값을 가진다.</li>
</ul>
<h2 id="6-reference">6. Reference</h2>
<ul>
<li><a href="https://davidlds.tistory.com/5">https://davidlds.tistory.com/5</a></li>
<li><a href="https://velog.io/@qtly_u/Attention-is-All-You-Need-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0">https://velog.io/@qtly_u/Attention-is-All-You-Need-논문-리뷰</a></li>
</ul>
<p>Paper URL : <a href="https://arxiv.org/abs/1706.03762">https://arxiv.org/abs/1706.03762</a>
Github URL : <a href="https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/transformer.py">https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/transformer.py</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications]]></title>
            <link>https://velog.io/@jmipar-k/MobileNets-Efficient-Convolutional-Neural-Networks-for-Mobile-Vision-Applications</link>
            <guid>https://velog.io/@jmipar-k/MobileNets-Efficient-Convolutional-Neural-Networks-for-Mobile-Vision-Applications</guid>
            <pubDate>Mon, 05 Aug 2024 08:23:52 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<ul>
<li>논문에서는 모바일/임베디드 비전 애플리케이션에서 효율적인 모델들을 제시한다.</li>
<li>무게가 가벼운 신경망을 개발하기 위해서, 깊이에 대해 분리가 가능한 컨볼루젼들을 사용하는 유선형의 모델 구조를 기반으로 하고 있다.</li>
<li>latency와 accuracy를 효율적으로 trade-off해주는 global parameter을 2 가지 소개한다.</li>
<li>이러한 hyperparameter들은 문제의 제약에 따라 어떤 모델이 최적의 사이즈인지 model builder가 선택할 수 있도록 한다.</li>
</ul>
<h1 id="introduction">Introduction</h1>
<ul>
<li>CV에서 CNN은 계속해서 유명해져왔고, 트렌드는 더 깊고 복잡한 네트워크를 개발해서 정확도를 높이는 것이었다. 하지만, 이러한 접근방식은 크기나 속도 관점에서는 전혀 네트워크를 발전시키고 있지 않다. 자율주행이나 로봇과 같은 분야에서는 제한된 하드웨어에서 시간제약을 가지고 연산을 해야하기 때문이다.</li>
<li>본 논문에서는 작고 지연시간이 낮은 모델을 설계하기 위해서 필요한 2개의 hyper parameter과, 네트워크 구조를 제시한다.</li>
<li>2개의 hp는 각각 “width multiplier”와 “resolution multiplier”이라고 한다.</li>
</ul>
<h1 id="method">Method</h1>
<ul>
<li>기존의 방식들은 filtering과 combining을 동시에 진행하지만 논문에서는 2 가지의 layer을 따로 나누어서(factorization) 진행하는 방식을 제시하여 계산량과 모델의 크기를 극적으로 줄였다.</li>
</ul>
<h2 id="1-standard-convolution">1. Standard Convolution</h2>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/d0e4caac-22f9-46fe-83ff-1c5ea6b4b695/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/jmipar-k/post/9f02cf1e-9e5a-4cec-9828-94eb082ee3a2/image.png" alt=""></p>
<h3 id="1-feature-map">1) Feature Map</h3>
<p>   $G = Df * Df * N, F = Df * Df * M$
    $Df =$ (spatial width) / (height of square input feature map)
    $Dk$ = (spatial width) / (height of kernel size)
    $M =$ Number of input channels (depth)
    $N =$ Number of output channels (depth)</p>
<h3 id="2-computational-cost">2) Computational Cost</h3>
<p>   <img src="https://velog.velcdn.com/images/jmipar-k/post/b5c5734c-1154-4b27-b7b7-03952c0d4407/image.png" alt=""></p>
<h2 id="2-depthwise-seperable-convolution">2. Depthwise Seperable Convolution</h2>
<p>   <img src="https://velog.velcdn.com/images/jmipar-k/post/c4d78f5e-e965-4167-84a1-2022cfc6d824/image.png" alt=""></p>
<h3 id="1-depthwise-convolution">1) Depthwise Convolution</h3>
<p>   <img src="https://velog.velcdn.com/images/jmipar-k/post/12c4eb45-e7be-4011-b270-4b95ca030189/image.png" alt="">
         : to apply a single filter per each input channel</p>
<h3 id="2-pointwise-convolution">2) Pointwise Convolution</h3>
<p>   <img src="https://velog.velcdn.com/images/jmipar-k/post/bb661565-54d2-4823-b28b-5eb9372b184d/image.png" alt="">
         : to create a linar combination out of the output
    → Both batch norm and ReLU nonlinearities are used for both layers</p>
<h3 id="3-computational-cost">3) Computational Cost</h3>
<p>   <img src="https://velog.velcdn.com/images/jmipar-k/post/0d352aa8-2f5c-4a32-a7cd-30c249ca19c5/image.png" alt=""></p>
<ul>
<li>Filtering과 Combining 총 2단계의 과정으로 나눔으로써 계산량을 1/N^2 + 1/Dk^2 으로 줄어들게 된다고 한다.<h1 id="network-structure">Network Structure</h1>
<img src="https://velog.velcdn.com/images/jmipar-k/post/12921050-412f-4612-a996-e99f84800428/image.png" alt=""></li>
</ul>
<h1 id="reference">Reference</h1>
<p>Paper URL : <a href="https://arxiv.org/abs/1704.04861">https://arxiv.org/abs/1704.04861</a>
Github URL : <a href="https://github.com/pytorch/vision/blob/main/torchvision/models/mobilenetv2.py">https://github.com/pytorch/vision/blob/main/torchvision/models/mobilenetv2.py</a></p>
]]></description>
        </item>
    </channel>
</rss>