<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dr_pepper.log</title>
        <link>https://velog.io/</link>
        <description>GDG Gachon Ai 스터디입니다.</description>
        <lastBuildDate>Wed, 04 Dec 2024 09:40:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dr_pepper.log</title>
            <url>https://velog.velcdn.com/images/dr_pepper/profile/ca01dc65-e150-41cf-857d-89b4234e0abc/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dr_pepper.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dr_pepper" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Colorful Image Colorization(2016)]]></title>
            <link>https://velog.io/@dr_pepper/Colorful-Image-Colorization2016</link>
            <guid>https://velog.io/@dr_pepper/Colorful-Image-Colorization2016</guid>
            <pubDate>Wed, 04 Dec 2024 09:40:06 GMT</pubDate>
            <description><![CDATA[<h2 id="1-abstract">1. Abstract</h2>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/d0daeeb3-ac4a-4742-927a-d92f905c1988/image.png" alt=""></p>
<p>이 논문에서의 colorization의 목표는 Ground Truth와 같은 색을 에측하는 것보다는 &#39;그럴듯한&#39; 색으로 예측하는 것이다. 이 문제를 해결하기 위해서 Colorization문제를 분류 문제로 제기함으로써 불확실성을 수용하고 색상 다양성을 높였다.</p>
<h2 id="2-background">2. Background</h2>
<h3 id="cie-lab">CIE L<em>a</em>b</h3>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/09b80070-4bd8-4868-8574-0d261901b52d/image.png" alt=""></p>
<p>CIE Lab Color Space에서 L은 밝기를 나타낸다. 0~100 사이이며 값이 커질수록 검은색, 작아질수록 흰색에 가까워진다. a는 빨강과 초록 중 어느 쪽으로 치우쳤는지를 나타낸다. 값이 음수이면 초록에 가까운, 양수이면 보라/빨강에 가까운 색이다. b는 노랑과 파랑을 나타내며, 음수이면 파랑이고, 양수이면 노랑입니다.</p>
<h3 id="이전-연구">이전 연구</h3>
<h4 id="non-parametric-method">Non-Parametric method</h4>
<p>Input되는 grayscale image가 주어지면 먼저 소스 데이터로 사용할 하나 이상의 color image를 정의한다. 그러고는 특정 프레임워크에 따라 참조 이미지의 유사 영역에서 입력 이미지로 색상을 전송한다.</p>
<h4 id="parametric-method">Parametric method</h4>
<p>학습할 때 많은 양의 Color Image 데이터 셋으로부터 예측함수를 학습하여 문제를 연속적인 색 공간에 대한 regression문제 혹은 정량화된 색의 값에 대한 분류로 간주하였다.</p>
<h4 id="문제점">문제점</h4>
<p> 이전의 연구에서 색을 예측하기 위해 CNN에서 학습하였다. 그러나 사실 색을 예측한다는 것은 Multimodal한 문제라고 할 수 있다. 예를 들어, 사과 라는 같은 물체도 초록색 일수도, 빨간색일수도 있기 때문이다.</p>
<p> 따라서 이런 multimodal을 적절히 modeling하기 위해 각 픽셀의 가능한 색의 분포를 예측합니다. 또한 흔하지 않은 색들을 더 잘 표현하기 위해 학습할 때, loss를 re-weight합니다. 이를 통해 많은 양의 데이터에서 다양성을 이용할 수 있게 해주었고, 마지막으로 annealed-mean을 이용해 최종 colorization을 생성함으로써 더 &#39;그럴듯한&#39; color image를 만듭니다.</p>
<h2 id="3-architecture">3. Architecture</h2>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/5cf99e13-d424-4108-8c89-e3478e3dbbba/image.png" alt=""></p>
<p>Grayscale Image에서 정량화된 색상 값(CIE Lab의 a,b) 출력에 대한 분포를 매핑하도록 CNN을 훈련한다</p>
<p>pooling이 없는 형태이며 resolution을 downsampling, upsampling하는 모든 경우에 conv연산으로 수행하였다. conv Relu batchnorm의 형태로 layer가 반복되는 블록으로 되어 있으며 conv8에서는 a,b의 색상을 예측한다. a,b를 예측하고 처음 input된 grayscale image의 L채널을 가져와서 더하여 최종 이미지를 만들어낸다.</p>
<h2 id="4-objective-function">4. Objective function</h2>
<h3 id="함수-형태">함수 형태</h3>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/d8c7c870-a16c-47ba-893d-762789051377/image.png" alt=""></p>
<p>입력 밝기 채널이 X ∈ RH×W×1일 때, 목표는 두 개의 연결된 색상 채널 Y ∈ RH×W×2에 대한 Y^=F(X)를 학습하는 것이다. 그리고 이 때의 Loss function은 (1)과 같다.</p>
<p>그러나 (1)식은 colorization 문제의 모호성과 multimodal이라는 특성에 적합하지 않다. 위 loss function을 사용할 경우 이미지 전체적으로 회색빛이 돌거나 채도가 낮은 desaturated한 이미지를 결과로 나타낸다.</p>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/da910199-55a1-4810-b5db-ca24259cd7e6/image.png" alt=""></p>
<p>따라서 위 그림과 같이 출력 공간을 그리드 크기 10으로 정량화하고 Q=313개의 값으로 만들어 multimodal classification 문제로 다루도록 한다. 또한 정답값 Y도 벡터 Z로 변경한다.</p>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/2e907e55-cb75-4ecf-9aff-7b0c2afa0d08/image.png" alt="">
<img src="https://velog.velcdn.com/images/tolerance0718/post/c0073cc0-58c7-4771-9283-fe362d968f22/image.png" alt=""></p>
<p>따라서 Loss function을 위와 같이 수정하고 Ground Truth도 예측값과 비교하려면 비슷한 형태가 되어야 하므로 같은 분포를 띄는 벡터르 바꿔준다.</p>
<p>loss function에서 v()는 색의 rare함에 따른 weighting term으로 rare한 색의 class를 rebalance할 수 있다.</p>
<h3 id="class-rebalancing">Class Rebalancing</h3>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/ca74cf0d-7a17-4358-bd9c-f9a3ee1b63fb/image.png" alt=""></p>
<p>natural한 이미지의 ab값 분포는 구름, 흙, 벽과 같은 배경으로 인해 낮은 ab값을 가지도록 크게 편향되어 있다. 
위 그림은 ImageNet의 Training image에서 수집한 픽셀의 ab분포를 나타낸다. 낮은 ab값을 가지는 픽셀의 분포가 많기 때문에 이를 고려하지 않으면 Loss function은 desaturated ab 값에 너무 큰 영향을 끼치게 되어 그럴듯한 색상 이미지를 만들지 못한다.
이러한 색의 불균형 문제를 해결하기 위해 학습 시에 각 픽셀이 가지는 색의 rarity를 기반으로 loss를 reweighting하는 방법을 사용한다. 각 픽셀은 가장 가까운 픽셀의 ab의 weight를 기반으로 reweight한다.</p>
<h3 id="class-probabilities-to-point-estimates">Class Probabilities to Point Estimates</h3>
<p>예측한 분포벡터 Z^을 ab공간에 있는 한 점인 Y^으로 mapping하는 함수인 H를 구하는 방법은 2가지가 있다. 각 픽셀에 대한 예측된 분포의 mode를 취하는 방법과 mean을 취하는 방법이다.</p>
<p>mode를 취하는 방법은 선명하지만 중간중간에 상관없는 색이 채워질 수 있는 반면, mean을 취하는 방법은 상관없는 색이 채워지진 않지만, desaturated한 결과가 생긴다.</p>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/40ed7cc9-eb55-474f-8060-2c8608e9a665/image.png" alt=""></p>
<p>따라서 두 방법을 종합하기 위해 softmax분포의 T를 조정하고 결과의 평균을 구해 interpolate한다.</p>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/2361a046-2c15-4085-b3e0-17e912149b9f/image.png" alt=""></p>
<p>T를 1로 설정하면 분포가 변하지 않고 Mean에서의 분포가 나오고, T를 낮출수록 더 강한(desaturated하지 않은)분포가 형성된다. 그리고 T가 0이면 Mode에서의 분포가 된다. 위 그림에서는 T=0.38일때 가장 최적의 분포가 나왔다고 한다.</p>
<h2 id="5-experiment">5. Experiment</h2>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/1e015e27-2141-4e10-922b-13da3b693dc6/image.png" alt=""></p>
<p>Ground Truth와는 조금 다르지만 꽤나 그럴듯한 색상의 이미지가 나온 것을 볼 수 있고, 이 논문의 목표인 &#39;그럴듯한 이미지&#39;를 잘 나타냈다는 것을 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/tolerance0718/post/6bc0ddee-be87-4039-a5ba-e83c4b83c3f8/image.png" alt=""></p>
<p>평가 방법은 앞서 말했다시피 그럴듯한 이미지를 만드는 것이 목적이기에 사람에게 직접 평가를 하게 하는 AMT방법이 조금 더 적절하고 정확한 평가라고 할 수 있다. 따라서 AMT를 기준으로 보았을 때 위 논문에 대한 성능이 제일 좋게 나오는 것을 볼 수 있다.</p>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>Image Colorization은 생각보다 어려운 task이지만, 이 논문에서는 이전보다 깊은 CNN과 적절한 Objective function을 사용한 Colorization으로 실제 컬러 사진과도 구별하기 어려운 결과를 생성하는 데 더 가까워졌다.
위 논문의 방법은 Colorization task도 좋은 성능으로 수행하였지만 기존에 있던 Object Detection, Segmentation과 같은 다른 task에서도 더 좋은 성능을 나타내었다. 이는 기존의 방법보다 위 논문의 방법이 더 특징을 잘 잡아낸다는 것을 알 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TabNet : Attentive Interpretable Tabular Learning (2020)]]></title>
            <link>https://velog.io/@dr_pepper/TabNet-Attentive-Interpretable-Tabular-Learning-2020-hp369ljr</link>
            <guid>https://velog.io/@dr_pepper/TabNet-Attentive-Interpretable-Tabular-Learning-2020-hp369ljr</guid>
            <pubDate>Wed, 04 Dec 2024 06:15:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/sojeong/post/473e27b6-6246-49d2-830e-f622f288d502/image.png" alt=""></p>
<ul>
<li><strong>TabNet</strong>: Tabular 데이터 학습을 위한 새로운 딥러닝 아키텍처</li>
<li><strong>Sequential attention</strong>: 각 결정 단계에서 활용할 feature을 선택</li>
<li><strong>학습 효율성</strong>: 딥러닝 모델이 중요한 특징에 학습 자원을 집중</li>
<li><strong>해석 가능성</strong>: 모델의 의사결정을 로컬(개별 샘플) 및 글로벌(모델 전체) 수준에서 해석</li>
<li><strong>비지도 학습(self-supervised learning)</strong>: 라벨이 부족한 데이터 환경에서 성능 향상</li>
</ul>
<blockquote>
<p><strong>tabluar 데이터</strong>
데이터가 행(row)와 열(column)로 구성된 표 형태의 데이터 (정형 데이터)<br><img src="https://velog.velcdn.com/images/sojeong/post/a0b5fb15-6225-41b0-858a-d0f227fc8d6f/image.png" width=40% height=40%></p>
</blockquote>
<h2 id="1-introduction">1. Introduction</h2>
<p>기존 딥러닝 모델은 이미지, 텍스트, 음성 데이터에서는 성공을 거두었지만, <strong>tabular 데이터에서는 여전히 결정 트리(Decision Trees, DTs) 기반의 모델</strong>이 여전히 주류를 이룬다.</p>
<h4 id="왜-정형-데이터에서-dnn보다-dt-based-접근을-선호할까">왜 정형 데이터에서 DNN보다 DT-based 접근을 선호할까?</h4>
<ol>
<li><strong>초평면(hyperplane)</strong> 결정 경계를 가지며, 정형 데이터의 특성에 잘 맞다.
 *초평면: 데이터를 분리하는 경계면
예: &quot;연봉 5,000만원 이상이면 승인&quot;이라는 규칙처럼 데이터를 간단히 나누는 방식</li>
<li>규칙 기반이므로 모델 및 추론 결과에 대한 해석이 용이하다.</li>
<li>학습 속도가 빠르다.</li>
</ol>
<p>반면, DNN은 정형 데이터에 사용하기엔 <strong>파라미터가 지나치게 많고</strong>, 적합한 <strong>inductive bias(귀납 편향) 설계가 어려워</strong> 종종 최적해 탐색에 실패하기 때문에 기피되는 경향이 많다. 즉, 결정 트리처럼 &quot;단순한 규칙&quot;을 학습하지 못하고, 필요 없는 복잡한 패턴까지 학습할 가능성이 크다.</p>
<hr>
<h4 id="그렇다면-dnn의-장점은">그렇다면, DNN의 장점은?</h4>
<p>위의 단점에도 불구하고, DNN은 다음의 이점이 있다.</p>
<ol>
<li>정형 데이터와 함께 이미지와 같은 <strong>비정형 데이터</strong>를 효과적으로 인코딩할 수 있다.</li>
<li>DT-based 모델과 마찬가지로 <strong>feature engineering 과정을 경감</strong>시킨다.</li>
<li><strong>Domain adaptation(도메인 적응), generative modeling(생성 모델링), semi-supervised learning</strong> 같은 다양한 시도가 가능하다.</li>
</ol>
<hr>
<h4 id="tabnet">TabNet</h4>
<p>TabNet은 정형 데이터에서 DT-based 모델과 DNN의 장점을 계승했다.</p>
<ol>
<li><strong>Sequential attention</strong>을 사용하여 feature 선택의 이유를 추적할 수 있게 하여 <strong>interpretability(해석 가능성)</strong>를 확보했다.</li>
<li>회귀와 분류와 같은 다양한 데이터셋에서도 높은 성능을 보인다.</li>
<li>정형 데이터셋에서 처음으로 <strong>비정형 사전학습(unsupervised pre-training)이 성능을 크게 향상</strong>시킬 수 있음을 보였다. 이는 기존 DT-based 모델에서는 불가능했던 새로운 접근이다.</li>
</ol>
<hr>
<h2 id="2-tabnet-for-tabular-learning">2. TabNet for Tabular Learning</h2>
<p>TabNet은 <strong>Encoder</strong>와 <strong>Decoder</strong>로 구성되어 있다.</p>
<h3 id="2-1-feature-transformer">2-1. Feature Transformer</h3>
<p><strong>Feature Transformer</strong>는 <strong>FC, BN, GLU</strong> 등으로 구성되어 연산을 수행하며, <strong>두 가지 중요한 정보</strong>를 출력하는 모듈이다.</p>
<p><img src="https://velog.velcdn.com/images/sojeong/post/b2825fe1-50dd-44aa-a0d8-9e34bdb00705/image.png" alt=""></p>
<ol>
<li><p><strong>최종 Output으로 전달</strong>할 정보 (최종 출력 정보)</p>
<ul>
<li>Decision step dependent 부분에서 추출된 정보는 <strong>최종 Output으로 &#39;전달&#39;</strong>할 정보</li>
</ul>
</li>
<li><p><strong>다음 스텝으로 전달</strong>할 정보 (공유 정보)</p>
<ul>
<li><p>Shared across decision steps 부분에서 출력된 이 정보는 다음 Decision Step으로 전달됨</p>
</li>
<li><p>앞선 스텝에서 <strong>어떤 특성들이 이미 연산되었는지</strong>에 대한 정보를 제공하여, <strong>다음 스텝이 새로운 특성에 집중할 수 있도록</strong> 도움. 이는 TabNet이 <strong>스텝별로 다른 특성에 초점을 맞추는 연산을 가능</strong>하게 함</p>
</li>
</ul>
</li>
</ol>
<blockquote>
<h4 id="glu-gated-linear-unit">GLU (Gated Linear Unit)</h4>
<p><img src="https://velog.velcdn.com/images/sojeong/post/51d462ad-9b20-4f9a-8a0e-e7651da45b08/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/56ab5103-ad66-4ac7-a320-a710355afa9e/image.png" alt=""></p>
</blockquote>
<ol>
<li><strong>선형 변환</strong></li>
</ol>
<ul>
<li>먼저, 입력 벡터 x에 대해 두 개의 선형 변환을 수행</li>
</ul>
<ol start="2">
<li><strong>게이팅 (Gating)</strong></li>
</ol>
<ul>
<li>두 번째 변환에 시그모이드 활성화 함수를 적용하여 게이트 값을 구함</li>
<li>이 때, 시그모이드는 0과 1 사이의 값으로 각 요소가 얼마나 &quot;열릴지&quot;를 결정</li>
</ul>
<ol start="3">
<li><strong>최종 출력</strong></li>
</ol>
<ul>
<li>첫 번째 변환과 게이트 값을 곱한 후 더하므로써 요소별 곱을 취함으로써, 중요한 정보만을 선택하고 불필요한 정보를 걸러냄</li>
</ul>
<hr>
<h3 id="2-2-attentive-transformer">2-2. Attentive Transformer</h3>
<p><strong>Attentive Transformer</strong>는 <strong>Feature Transformer로 부터 받은 데이터</strong>에 대해 Attention Map을 출력해주는 역할을 하며, 이번 스텝에서는 <strong>어떤 정보에 초점을 맞출 것인지만 결정</strong>하는 역할을 한다.</p>
<p><img src="https://velog.velcdn.com/images/sojeong/post/e837e21a-cbb5-4611-b22b-7ad87ebe303c/image.png" alt=""></p>
<ol>
<li><p>입력 데이터를 처리하기 위해 <strong>FC</strong>와 <strong>BN</strong>을 적용</p>
</li>
<li><p><strong>Prior Scales</strong>를 사용하여 <strong>이전 단계에서 선택되지 않은 특성의 중요도를 점차 감소</strong>시켜 새로운 특성을 탐색하도록 유도</p>
</li>
<li><p><strong>Sparsemax</strong>는 희소성이 높은 Attention 분포를 생성하여 <strong>중요한 특성만 선택</strong>하며, 선택 결과는 <strong>Prior Scales를 갱신</strong>하여 다음 단계로 전달</p>
</li>
</ol>
<p>*희소성(Sparsity): 많은 값이 0인 상태로, 소수의 값만 활성화되는 특성</p>
<p>이 과정에서 <strong>Prior Scales</strong>는 <strong>중복된 특성 선택을 방지</strong>하고, <strong>Sparsemax</strong>는 <strong>중요한 특성만 선택</strong>하도록 설계되어 TabNet의 특성 선택이 효율적이고 해석 가능하도록 만든다.</p>
<blockquote>
<h4 id="sparsemax">Sparsemax</h4>
<p><strong>확률 분포</strong>를 생성하는 함수로, <strong>softmax</strong>와 유사하지만, 차이점은 출력값 중 일부를 0으로 만드는 기능을 한다는 것</p>
<h4 id="softmax-vs-sparsemax">Softmax vs. Sparsemax</h4>
</blockquote>
<ul>
<li><strong>Softmax</strong>는 모든 출력값이 0~1 사이이며, 중요하지 않은 값도 완전히 0이 되지 않으므로, 모든 특성에 영향일 미칠 수 있음</li>
<li><strong>Sparesmax</strong>는 <strong>일부 출력값을 0</strong>으로 만들어, <strong>모델이 중요한 특성에 더 집중</strong>하게 하고, 나머지 특성들은 무시</li>
</ul>
<hr>
<h3 id="2-3-encoder">2-3. ENCODER</h3>
<p><strong>Encoder</strong>는 데이터를 입력받아 풀고자 하는 문제에 맞도록 데이터를 재구성한다.
<img src="https://velog.velcdn.com/images/sojeong/post/b28e510d-4217-4f8e-aa55-55da1eb321dc/image.png" alt=""></p>
<ol>
<li><p><strong>입력 처리</strong></p>
<ul>
<li>입력된 <strong>Feature</strong>는 <strong>Batch Normalization(BN)</strong>을 통해 정규화</li>
</ul>
</li>
<li><p><strong>Feature Transformer</strong></p>
<ul>
<li>입력 데이터를 변환하여 <strong>Feature 표현</strong>을 학습</li>
<li>Feature Transformer의 <strong>출력은 두 부분</strong>으로 나뉨(Split):<ol>
<li>Attentive Transformer로 전달</li>
<li>특성 변환 결과로 사용</li>
</ol>
</li>
</ul>
</li>
<li><p><strong>Attentive Transformer</strong></p>
<ul>
<li><strong>어떤 정보가 중요한지 판단</strong>하고, 다음 단계에서 사용할 중요한 데이터 선택</li>
</ul>
</li>
<li><p><strong>Mask</strong></p>
<ul>
<li>Attentive Transformer가 선택한 <strong>중요 정보만 남김</strong></li>
<li>이 과정에서 <strong>Sparsemax</strong>가 사용되어 중요한 정보만 남김</li>
<li>이 Mask는 <strong>Feature Transformer에서 나온 변환된 Feature에 곱</strong>해져 중요한 특성만 활성화</li>
</ul>
</li>
<li><p><strong>Aggregation</strong></p>
<ul>
<li><strong>활성화된 특성(Feature x Mask)</strong>은 Agg. 모듈에서 출력 방향으로 집계</li>
<li>집계된 결과는 결과값 출력에 기여하며, 각 step에서 누적됨</li>
</ul>
</li>
<li><p><strong>Feature attributes</strong></p>
<ul>
<li><strong>단계별로 중요한 feature를 추출</strong>하여 모델이 학습 과정에서 어떤 데이터를 사용했는지 설명</li>
<li>이 부분은 <strong>해석 가능성(Interpretability)</strong>를 제공</li>
<li>모델이 &quot;왜 이런 결정을 내렸는지&quot;를 보여주는데 사용</li>
</ul>
</li>
</ol>
<hr>
<h3 id="2-4-decoder">2-4. DECODER</h3>
<p>Decoder의 경우 <strong>각 단계별 feature transformer</strong>로 구성된다. 일반 학습에서는 Decoder를 사용하지 않지만 <strong>Self-supervised</strong> 학습 진행시 인코더 다음 붙여지며 기존 결측값 보완 및 표현 학습을 진행한다.</p>
<p><img src="https://velog.velcdn.com/images/sojeong/post/928eea18-41a5-4059-b654-5eade0491318/image.png" alt=""></p>
<ol>
<li><p><strong>Encoded Representation</strong></p>
<ul>
<li>인코더에서 학습된 정보를 입력으로 받아 재구성</li>
</ul>
</li>
<li><p><strong>Feature Transformer</strong></p>
<ul>
<li>재구성을 위한 변환 과정 수행</li>
</ul>
</li>
<li><p><strong>Reconstructed Features</strong></p>
<ul>
<li>최종 출력은 원래의 입력 데이터를 재구성</li>
</ul>
</li>
</ol>
<hr>
<h2 id="3-tabnet-features">3. TabNet Features</h2>
<h3 id="3-1-sparse-feature-selectiondecision-blocks">3-1. Sparse Feature Selection(=Decision Blocks)</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/eae078eb-28bb-499d-bc8f-ac686e7b77d8/image.png" alt=""></p>
<ol>
<li><p><strong>Input features</strong> (tabular 데이터)</p>
<ul>
<li>목표(target): 연봉이 $50,000 이상인지 예측</li>
</ul>
</li>
<li><p><strong>Feature Selection</strong></p>
<ul>
<li><p>TabNet은 입력된 feature 중 <strong>어떤 특징이 현재 단계에서 중요한지</strong> 선택</p>
</li>
<li><p><strong>Sequential Attention 매커니즘</strong>을 사용하여 <strong>각 단계에서 가장 중요한 feature</strong>에 집중</p>
</li>
<li><p>예를 들자면, 첫 번째 단계에서는 &quot;professional occupation&quot;가 예측에 중요하다고 판단하여, occupation, education와 같은 특징을 선택하고, 선택되지 않은 특징은 다음 단계로 넘어가며, 이후 단계에서 새로운 중요한 특징을 고려</p>
</li>
</ul>
</li>
<li><p><strong>Input Processing</strong></p>
<ul>
<li>특징별로 가중치를 계산하여, <strong>해당 특징이 목표 예측에 얼마나 중요한지</strong> 학습</li>
</ul>
</li>
<li><p><strong>Feedback Mechanism</strong></p>
<ul>
<li>TabNet의 강점은 <strong>이전 단계의 피드백을 받아 다음 단계에서 새로운 특징을 선택</strong>한다는 점</li>
<li>첫 번째 단계에서 &quot;professional occupation&quot;이 선택되었다면, 두 번째 단계에서는 &quot;Investment&quot;가 선택되게 하여, 모든 중요한 정보가 모델에 반영</li>
</ul>
</li>
<li><p><strong>Aggregation of Information</strong></p>
<ul>
<li><strong>모든 단계에서 처리된 정보를 통합</strong>하여 최종 예측에 사용</li>
</ul>
</li>
<li><p><strong>Predicted Output</strong></p>
<ul>
<li>최종적으로, 모델은 모든 학습 단계를 바탕으로 <strong>목표를 예측</strong></li>
</ul>
</li>
</ol>
<hr>
<h3 id="3-2-self-supervised-tabular-learning">3-2. Self-supervised tabular learning</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/7e781237-d2ce-453b-bfa7-c1492a706618/image.png" alt=""></p>
<p>TabNet에서는 레이블이 없거나 결측치가 포함된 데이터셋에서 유용하게 사용할 수 있고, pre-training에도 사용할 수 있는 <strong>self-supervised learning</strong>을 제안한다. Encoder의 출력값을 입력받아 feature를 복원(reconstruct)하는 Decoder를 연결한 Autoencoder 구조이다.</p>
<hr>
<h2 id="4-experiments">4. Experiments</h2>
<p>TabNet은 다양한 데이터셋에서 기존 모델보다 우수한 성능을 보였다.</p>
<h3 id="4-1-forest-cover-type">4-1. Forest Cover Type</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/1cd53270-c108-4bd2-bf29-25f63c0c663e/image.png" alt=""></p>
<p>Forest Cover Type 데이터셋은 지리적 변수들을 기반으로 특정 지역의 삼림 덮개 유형을 분류하는 문제를 다루며, TabNet은 <strong>복잡한 하이퍼파라미터 튜닝 없이도</strong> 다양한 앙상블 모델을 기반으로 한 AutoML 시스템과 트리 기반 모델들을 초과하는 성능을 보여준다.</p>
<h3 id="4-2-poker-hand">4-2. Poker Hand</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/2313fb61-eafc-4ba2-a35a-db3ef68bf94d/image.png" alt=""></p>
<p>Poker Hand 데이터셋은 카드의 슈트(suit)와 랭크(rank) 속성으로 포커 손을 분류하는 문제를 다루며, TabNet은 다른 방법들보다 우수한 성능(99.2%)을 보인다.</p>
<h3 id="4-3-sarcos">4-3. Sarcos</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/92e2c72c-778a-4a2d-86b5-ff328ba67422/image.png" alt=""></p>
<p>Sarcos 데이터셋은 로봇 팔의 역동학을 예측하는 데 사용되며, TabNet은 이 데이터셋에서 작은 모델 크기로도 뛰어난 성능을 보이며, <strong>모델 크기가 제한되지 않으면 테스트 MSE가 다른 모델에 비해 현저히 낮은 성과</strong>를 달성한다.</p>
<h3 id="4-4-higgs-boson">4-4. Higgs Boson</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/d7015ca9-b473-4b2d-8919-8c06f27a213d/image.png" alt=""></p>
<p>Higgs Boson 데이터셋은 힉스 보손 과정과 배경을 구별하는 분류 문제를 다루며, TabNet은 MLP보다 더 간결한 표현으로 성능을 향상시킨다.</p>
<h3 id="4-5-rossmann-store-sales">4-5. Rossmann Store Sales</h3>
<p><img src="https://velog.velcdn.com/images/sojeong/post/af3014d5-4c44-4cae-a3b1-a40a44ca5307/image.png" alt=""></p>
<p>Rossmann Store Sales 데이터셋은 정적 및 시간에 따라 변하는 특성을 이용해 매장 판매를 예측하는 작업으로, TabNet은 일반적인 방법들을 능가하며 시간 관련 특성(날짜)의 중요도가 높게 나타났다.</p>
<hr>
<h2 id="5-conclusions">5. Conclusions</h2>
<p>TabNet은 tabular 데이터를 위한 딥러닝의 새로운 가능성을 제시하며, <strong>해석 가능성</strong>과 <strong>성능</strong> 모두를 제공하는 독창적인 모델이다. <strong>비지도 학습의 성공적인 도입은 데이터 레이블링 비용이 높은 응용 분야</strong>에서 TabNet의 활용성을 높인다는 점에서 큰 의의를 가지고 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DOLA: DECODING BY CONTRASTING LAYERS IMPROVES
FACTUALITY IN LARGE LANGUAGE MODELS]]></title>
            <link>https://velog.io/@dr_pepper/DOLA-DECODING-BY-CONTRASTING-LAYERS-IMPROVESFACTUALITY-IN-LARGE-LANGUAGE-MODELS</link>
            <guid>https://velog.io/@dr_pepper/DOLA-DECODING-BY-CONTRASTING-LAYERS-IMPROVESFACTUALITY-IN-LARGE-LANGUAGE-MODELS</guid>
            <pubDate>Wed, 04 Dec 2024 04:16:47 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-연구-배경">📌 연구 배경</h2>
<p>대규모 언어 모델(LLM)은 자연어 처리(NLP) 분야에서 혁신적인 성과를 보여주고 있지만, 환각(hallucination) 문제로 인해 신뢰할 수 없는 결과를 생성하는 경우가 많습니다. 이러한 문제는 특히 의료나 법률과 같은 고위험 분야에서 큰 장애 요인이 됩니다. 기존 연구들은 외부 지식을 활용하거나 추가 학습을 통해 이 문제를 해결하려 했지만, 본 연구에서는 새로운 접근 방식을 제안하고 있습니다.</p>
<h2 id="🎯-연구-목표">🎯 연구 목표</h2>
<p>LLM에서 환각 문제를 줄이고 사실 기반(factual) 정보를 더욱 효과적으로 생성할 수 있는 새로운 디코딩 전략인 <strong>DOLA(Decoding by Contrasting Layers)</strong>를 제안하였습니다. 이 방법은:</p>
<ul>
<li>외부 지식 없이,</li>
<li>추가 파인튜닝 없이,</li>
<li>모델 내부의 계층 구조를 활용하여 사실성을 향상시킵니다.<h2 id="🛠️-제안-방법-dola">🛠️ 제안 방법: DOLA</h2>
<img src="https://velog.velcdn.com/images/dr_pepper/post/4b5dfeb7-ee24-49ef-8aa8-4f4e5b4da528/image.png" alt=""></li>
</ul>
<ol>
<li>계층 간 대조
LLM 내부에서 낮은 계층은 주로 문법적/구문적 정보를 처리하고, 높은 계층은 의미적/사실적 정보를 처리합니다.
DOLA는 낮은 계층과 높은 계층의 출력 확률(logit)을 비교하여, 더 사실에 가까운 높은 계층의 정보를 강조합니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/ca5ac20c-47fd-4a00-bb83-0c6886efb4f1/image.png" alt=""></p>
<ol start="2">
<li>동적 계층 선택
각 디코딩 단계에서, 최종 계층과 가장 큰 차이를 보이는 &quot;최적의 낮은 계층&quot;을 자동으로 선택합니다.
이를 통해 사실성을 극대화하면서도 불필요한 계산을 줄일 수 있습니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/0dd77114-3b07-45d1-a22f-97b135fed9aa/image.png" alt=""></p>
<ol start="3">
<li><p>적응형 확률 제한
예측 확률이 일정 기준 이하인 경우, 해당 토큰을 제외하여 오류를 줄이는 전략을 사용합니다.</p>
<h2 id="📊-실험-결과">📊 실험 결과</h2>
</li>
<li><p>데이터셋
TruthfulQA, FACTOR 등 다양한 사실성 평가 데이터셋과 개방형 생성 평가(Task: StrategyQA, GSM8K 등)를 사용하였습니다.</p>
</li>
<li><p>성능 비교
TruthfulQA에서 LLaMA 모델(7B, 13B, 33B, 65B)에 DOLA를 적용한 결과, 사실성 점수가 12~17% 증가하였습니다.
FACTOR, GSM8K와 같은 데이터셋에서도 기존 디코딩 방법 대비 안정적인 성능 향상을 보였습니다.</p>
</li>
<li><p>효율성
DOLA는 기존 디코딩 시간 대비 1.01~1.08배의 소폭 지연만 발생하며, GPU 메모리 오버헤드는 약 10% 미만으로 유지되었습니다.</p>
<h2 id="🔍-주요-기여">🔍 주요 기여</h2>
</li>
</ol>
<p>환각 감소: LLM 내부 계층 간 차이를 활용하여, 외부 지식 없이도 사실성을 높였습니다.
범용성: 추가 학습이나 모델 수정 없이 다양한 LLM에 적용 가능합니다.
효율성: 최소한의 계산 증가로 실용성을 확보하였습니다.</p>
<h2 id="🚀-한계-및-향후-연구-과제">🚀 한계 및 향후 연구 과제</h2>
<ul>
<li>외부 지식 활용의 부재
DOLA는 모델 내부에 저장된 지식에 의존하기 때문에, 학습 과정에서 잘못 학습된 정보에 대한 수정이 어렵습니다. 외부 지식과 결합하거나 추가적인 검증 단계를 통합하는 연구가 필요합니다.</li>
</ul>
<p>다양한 응용 사례에 대한 검증 부족
DOLA는 사실성을 개선하는 데 초점을 맞추고 있어, 창의성, 문법성, 맥락 이해 등의 다른 평가 기준에서의 효과는 충분히 검증되지 않았습니다. 이러한 다양한 영역에 대한 적용 가능성을 검토하는 추가 연구가 요구됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Why are Sensitive Functions Hard for Transformers?(2024)]]></title>
            <link>https://velog.io/@dr_pepper/Why-are-Sensitive-Functions-Hard-for-Transformers2024</link>
            <guid>https://velog.io/@dr_pepper/Why-are-Sensitive-Functions-Hard-for-Transformers2024</guid>
            <pubDate>Wed, 27 Nov 2024 09:52:05 GMT</pubDate>
            <description><![CDATA[<h3 id="00-abstract">0.0 Abstract</h3>
<p>트랜스포머는 자연어 처리와 기타 다양한 분야에서 뛰어난 성능을 보여주었지만, PARITY와 같은 민감도가 높은 이진 함수를 학습하는 데 어려움을 겪습니다. 이 논문은 트랜스포머의 구조적 한계와 학습 편향을 수학적으로 분석하여, 트랜스포머가 민감도가 높은 함수를 학습하기 어려운 이유를 설명합니다.</p>
<h4 id="주요-발견은-다음과-같습니다">주요 발견은 다음과 같습니다:</h4>
<ul>
<li>민감도가 높은 함수는 트랜스포머의 Layer Normalization 계수와 파라미터 크기가 비정상적으로 커야만 학습 가능하다는 점.</li>
<li>민감도와 모델의 <strong>손실 지형(Loss Landscape)의 날카로움(Sharpness)</strong>이 학습 최적화 과정에 직접적으로 영향을 미친다는 점.</li>
<li>기존의 Lipschitzness 이론을 확장하여 트랜스포머의 평균적 및 확률적 학습 경계를 수학적으로 도출.</li>
</ul>
<blockquote>
</blockquote>
<p>결과적으로, 트랜스포머는 민감도가 낮은 함수에 대해선 강력한 학습 및 일반화 능력을 보이지만, 민감도가 높은 함수에서는 구조적 제약으로 인해 학습에 실패할 가능성이 높음을 시사합니다.</p>
<hr>
<h3 id="10-introduction">1.0. Introduction</h3>
<p>트랜스포머는 주로 자연어 처리(NLP)와 이미지 처리 분야에서 성공을 거두며, 입력 데이터의 복잡한 관계를 모델링할 수 있는 강력한 표현력을 보여주었습니다. 하지만 일부 함수, 특히 PARITY와 같이 모든 입력 비트가 출력에 강하게 영향을 미치는 민감도가 높은 함수의 경우, 트랜스포머는 학습과 일반화에서 상당한 한계를 드러냅니다.</p>
<p>이 논문은 이러한 한계를 설명하기 위해 트랜스포머의 <strong>구조적 편향(Inductive Biases)</strong>과 손실 지형의 특성을 분석합니다. 특히 다음 두 가지 질문에 답을 제시합니다:
<img src="https://velog.velcdn.com/images/sa090180/post/39f6d085-1af3-4032-8e8e-d560105c516b/image.png" alt=""></p>
<p>트랜스포머가 민감도가 높은 함수를 학습하기 어려운 이유는 무엇인가?
민감도와 관련된 학습 편향이 트랜스포머의 성능에 어떤 영향을 미치는가?
기존 연구는 트랜스포머의 강력한 표현 능력을 강조했지만, 이 논문은 단순한 표현 가능성만으로는 학습 가능성을 설명할 수 없음을 지적합니다. 즉, 표현력과 학습 가능성은 별개의 문제이며, 트랜스포머의 학습 능력은 loss landscape의 영향을 받습니다.</p>
<h5 id="논문은-다음과-같은-주요-결과를-도출합니다">논문은 다음과 같은 주요 결과를 도출합니다:</h5>
<p><img src="https://velog.velcdn.com/images/sa090180/post/44fdeddb-2c42-40b4-a9d5-4080d616fa1d/image.png" alt=""></p>
<blockquote>
<p>민감도가 높은 함수를 학습하려면, 트랜스포머의 Layer Norm 계수와 파라미터 크기가 기하급수적으로 증가해야 함.</p>
</blockquote>
<ul>
<li>이는 학습 최적화 과정에서 손실 지형의 극단적 날카로움을 유발해 학습을 어렵게 만듦.</li>
<li>트랜스포머는 <strong>민감도가 낮은 함수(MAJORITY, FIRST)</strong>에서 강한 학습 및 일반화 성능을 보이는 반면, PARITY와 같은 고민감도 함수에서는 학습 실패 가능성이 높음.</li>
</ul>
<p>이 연구는 트랜스포머의 구조적 한계를 보다 깊이 이해하고, 향후 모델 설계 및 학습 전략 개선에 대한 방향성을 제공합니다.</p>
<hr>
<h3 id="20-model-of-transformers">2.0. Model of Transformers</h3>
<p><img src="https://velog.velcdn.com/images/sa090180/post/88f303b1-6b07-44e2-8c2c-87b9123acd02/image.png" alt=""></p>
<p>이 논문에서 attention score를 어떻게 구했는지 알려주고 있습니다. 
transformer는 n-길이의 binary input $x∈{0, 1}^n$을 받아 출력 $T(x)∈{-1, 1}$를 생성하는 모델입니다. </p>
<p>주요 구성요소는 다음과 같습니다.</p>
<ol>
<li><p>입력 임베딩 (Input Embedding)</p>
<ul>
<li>입력$x$를 $d$-차원의 연속 벡터 공간으로 변환:
$y_i^{(0)} = W_E x_i + e_i$</li>
</ul>
</li>
<li><p>셀프 어텐션(Self-Attention)</p>
</li>
</ol>
<ul>
<li><p>어텐션 계산에 필요한 Query, Key, Value:
  $Q = W_Q \cdot y, \quad K = W_K \cdot y, \quad V = W_V \cdot y
$</p>
</li>
<li><p>수식 정리:
  $a_{i, j}^{(k, h)}$ = $(K_{k,h}y_i^{(k-1)})^TQ_{k,h}y_i^{(k-1)}$</p>
<p> j번째 token의 k-1번째 head의 key와 i번째 token의 k-1번째 head의 Query를 내적한 것이 $a_{i, j}^{(k, h)}$ 가 된다는 식입니다. 논문에서는 이것이 attention score라고 설명하고 있습니다. </p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sa090180/post/fee917ab-0396-4480-abfe-5a0998224d76/image.png" alt=""></p>
<p>주요 구성요소는 다음과 같습니다.</p>
<ol>
<li>softmax 적용 -&gt; attention weight만들기</li>
<li>$b_{i, h}^{(k)}$는 attention 결과</li>
<li>skip-connection 적용후 MLP layer통과 </li>
</ol>
<p><img src="https://velog.velcdn.com/images/sa090180/post/6348a4b3-3276-4ad1-bb12-b7d337ce52ef/image.png" alt=""></p>
<p>주요 구성요소는 다음과 같습니다.</p>
<ol>
<li><p>Layer Normalization</p>
</li>
<li><p>Brittleness와 Layer Norm 계수 $N_i^{(k)}$의 관계 
$N_i^{(k)}$는 Layer Normalization의 계수입니다. 논문에서는 $N_i^{(k)}$가 input sensitivity, parameter space sharpness와 관계가 있다고 합니다. </p>
</li>
</ol>
<blockquote>
<ul>
<li>$N_i^{(k)}$ 값이 크다는 것
민감도가 높은 함수 (PARITY 등)를 학습할 수 있도록 모델의 표현력을 증가시킴.
하지만 <strong>파라미터 공간(parameter space)의 날카로움(Sharpness)</strong>이 커져 모델이 최적화 및 예측에서 불안정해질 수 있음</li>
</ul>
</blockquote>
<hr>
<h3 id="30-average-sensitivity">3.0. Average Sensitivity</h3>
<h4 id="31-민감도의-정의">3.1. 민감도의 정의</h4>
<h5 id="평균민감도average-sensitivity란">평균민감도(Average Sensitivity)란?</h5>
<p>평균 민감도(Average Sensitivity)는 이진 함수가 입력의 변화, 특히 개별 비트의 변화에 얼마나 민감한지를 측정하는 지표입니다. 트랜스포머가 특정 함수(예: PARITY, MAJORITY)를 학습하는 데 얼마나 효과적인지 이해하기 위해 논문은 평균 민감도를 주요 분석 기준으로 삼습니다.</p>
<h5 id="a-개별-민감도sensitivity">a. 개별 민감도(Sensitivity)</h5>
<p><img src="https://velog.velcdn.com/images/sa090180/post/b126f2e9-1980-49b4-b021-48bfc34d938c/image.png" alt=""></p>
<p>특정 입력 $x$와 함수 $f(x)$에 대해, <strong>개별 민감도</strong>는 입력의 $i$-th bit를 바꿨을 때 출력 변화의 크기로 정의합니다. </p>
<ul>
<li>$x^{⊕i}$: 입력$x$의 $i$-th bit를 뒤집은 값</li>
<li>$|f(x)-f(x^{⊕i})|^2$: 출력 변화의 크기를 나타냄</li>
</ul>
<h5 id="b-평균-민감도average-sensitivity">b. 평균 민감도(Average Sensitivity)</h5>
<p><img src="https://velog.velcdn.com/images/sa090180/post/6d6efd0d-ba31-48ca-a66d-4bc9280cbf37/image.png" alt=""></p>
<p>모든 가능한 입력 $x$에 대해 민감도를 평균 낸 값으로 정의됩니다:
$asn(f)$: 함수 $f$가 전체 입력 공간에서 얼마나 민감한지를 나타냄</p>
<h4 id="32-민감도와-학습-가능성의-관계">3.2. 민감도와 학습 가능성의 관계</h4>
<p><img src="https://velog.velcdn.com/images/sa090180/post/3a57fa90-cf32-4d03-b497-e0e80e163c67/image.png" alt=""></p>
<h5 id="a-높은-민감도를-가진-함수">a. 높은 민감도를 가진 함수</h5>
<ul>
<li><p>PARITY 함수
$f(x) = \prod_{i=1}^n x_i$</p>
<p>   모든 입력 비트를 곱해여 출력하며, 입력 비트가 하나라도 바뀌면 출력이 완전히 반대가 된다.
  평균 민감도: $asn(f)$ = $n$. 입력 길이 $n$에 선형적으로 비례한다.
  결론: transformer가 학습하기 매우 어려운 함수임</p>
</li>
</ul>
<h5 id="b-낮은-민감도를-가진-함수">b. 낮은 민감도를 가진 함수</h5>
<ul>
<li><p>MAJORITY 함수
$f(x) =
\begin{cases} 
1 &amp; \text{if } #{i : x_i = 1} &gt; n / 2 \ </p>
</li>
<li><p>1 &amp; \text{otherwise}
\end{cases}
$
입력 1의 개수가 -1보다 많으면 1을 반환함
평균 민감도: $\text{asn}(f) = \Theta(\sqrt{n}). 비교적 낮음
$ 
결론: transformer가 학습하기 쉬운 함수</p>
</li>
<li><p>FIRST 함수
$f(x) = x_1$
입력의 첫 번째 비트만 출력
평균 민감도: $\text{asn}(f) = 1$. 매우 낮음
결론: transformer가 학습하기 가장 쉬운 함수</p>
</li>
</ul>
<h4 id="33-평균-민감도와-트랜스포머의-학습-편향">3.3. 평균 민감도와 트랜스포머의 학습 편향</h4>
<h5 id="a-low-sensitivity-bias">a. Low-Sensitivity Bias</h5>
<ul>
<li>transformer는 평균 민감도가 낮은 함수(FIRST, MAJORITY)를 학습하는데 강한 편향을 가집니다.</li>
<li>이는 transformer의 설계가 <strong>입력 변화에 따른 출력의 안정성</strong>을 선호하기 때문입니다. </li>
</ul>
<h5 id="b-높은-민감도의-함수-학습-한계">b. 높은 민감도의 함수 학습 한계</h5>
<ul>
<li>평균 민감도가 높은 함수(PARITY)는 transformer가 학습하기 어려운데, 이는 다음과 같은 요인 때문입니다. </li>
</ul>
<ol>
<li><p>Layer Norm 계수 증가
높은 민감도를 표현하려면 Layer Norm 계수 $N_i^{(k)}$가 커져야 함.</p>
</li>
<li><p>Loss Landscape의 날카로움(Sharpness)
높은 민감도는 손실 함수의 최소점 주변을 가파르게 만들어 최적화를 어렵게 만듬.</p>
</li>
<li><p>일반화 성능 저하
민감도가 높은 함수는 작은 변화에도 출력이 크게 달라져, 학습 데이터에 과적합될 위험이 큼.</p>
</li>
</ol>
<blockquote>
<h5 id="💡-평균-민감도가-transformer에-주는-시사점">💡 평균 민감도가 Transformer에 주는 시사점</h5>
</blockquote>
<ul>
<li>표현력과 학습 가능성의 차이
transformer는 이론적으로는 민감도가 높은 함수(PARITY)를 표현할 수 있지만, 실제 학습 가능성은 Loss Landscape, 최적화의 한계로 인해 제약을 받음<blockquote>
</blockquote>
</li>
<li>모델 설계와 학습전략
transformer는 민감도가 낮은 함수에서 좋은 성능을 보이는 반면, 민감도가 높은 함수에서는 Layer Norm 계수 및 파라미터 크기를 늘려야만 학습이 가능함</li>
</ul>
<hr>
<h3 id="40-lower-bounds-for-sensitive-functions">4.0. Lower Bounds for Sensitive Functions</h3>
<p>이 섹션에서는 <strong>민감도가 높은 함수(PARITY)</strong>를 트랜스포머로 표현하기 위해 필요한 구조적 제약과 학습의 어려움을 수학적으로 분석합니다. 트랜스포머가 민감도가 높은 함수를 학습하려면, 모델의 Layer Normalization 계수와 <strong>파라미터 노름(Parameter Norms)</strong>이 기하급수적으로 증가해야 하며, 이는 학습 안정성과 최적화 과정에서 심각한 문제를 초래합니다.</p>
<blockquote>
<h5 id="💡-주요-연구-질문">💡 주요 연구 질문</h5>
</blockquote>
<ul>
<li>트랜스포머가 민감도가 높은 함수를 학습할 때, 필요한 구조적 자원의 최소 크기는 무엇인가?</li>
<li>이러한 제약이 손실 지형(Loss Landscape)과 학습 최적화에 어떤 영향을 미치는가?</li>
</ul>
<h4 id="41-lipschitz-상수의-구성-요소">4.1 Lipschitz 상수의 구성 요소</h4>
<p><img src="https://velog.velcdn.com/images/sa090180/post/46cea4b4-bc55-4084-96c9-b49b8e9a2d14/image.png" alt=""></p>
<h5 id="lipschitz-상수">Lipschitz 상수</h5>
<p>$C =  \exp\left(4d \cdot \max_h \sum_{i=2}^L |K_i^T Q_i|_2^2 \right)$</p>
<p>각 기호의 의미 </p>
<ul>
<li>C: Lipschitz 상수</li>
<li>$K_i, Q_i$: transformer의 Key와 Query 행렬.</li>
<li>$|K_i^T Q_i|_2^2$: Key-Quert 행렬의 스팩트럼 norm의 제곱</li>
<li>d: 모델의 hidden dimention</li>
<li>L: transformer layer의 개수</li>
<li>$max_h$: Attention Head 중 최댓값을 계산</li>
</ul>
<p>의미:</p>
<ul>
<li>Lipschitz 상수 C는 모델의 모든 층에서 Key-Query 행렬의 스펙트럼 노름이 클수록 기하급수적으로 증가합니다.</li>
<li>이는 민감도가 높은 함수를 표현하려면 각 층의 Key-Query 행렬의 크기가 중요하다는 점을 나타냅니다.<h5 id="기존-lipschitzness-경계">기존 Lipschitzness 경계</h5>
</li>
</ul>
<p>$s(f, x) \leq C \cdot \exp\left(4d \cdot \max_h |K_1^T Q_1|_2^2 \right) \cdot \epsilon^{L/2}
$</p>
<p>각 기호의 의미</p>
<ul>
<li>$s(f, x)$: 특정 입력 $x$에서 함수 $f$의 민감도</li>
<li>$\epsilon$: 안정성을 위한 작은 정규화 계수</li>
<li>C: Lipschitz 상수</li>
<li>$|K_1^T Q_1|_2^2$: 첫번째 층에서 Key-Query 행렬의 스팩트럼 norm의 제곱</li>
</ul>
<p>의미:</p>
<ul>
<li>특정 입력에 대해 민감도는 Key-Query 행렬의 스펙트럼 노름에 기하급수적으로 의존합니다.</li>
<li>민감도가 높은 함수를 학습하려면, Key-Query 행렬의 스펙트럼 norm이 기하급수적으로 증가해야 합니다.</li>
</ul>
<blockquote>
<p>💡 제안된 개선: 평균적 및 확률적 경계</p>
</blockquote>
<ul>
<li>기존 Lipschitzness 제약은 모든 입력에 대해 엄격한 상한을 제공했으나, 이는 현실적으로 너무 강한 제한일 수 있습니다.</li>
<li>논문에서는 대부분의 입력에 대해 더 완화된 경계를 제시합니다:
특정 층(Key-Query 행렬의 스펙트럼 노름)에 의존하지 않고, 입력 길이에 따라 <strong>로그 계수(logarithmic factor)</strong>를 추가하여 경계를 개선합니다.</li>
</ul>
<h4 id="42-개선된-평균적-경계">4.2 개선된 평균적 경계</h4>
<p><strong>수식</strong>
개선된 평균적 경계는 대부분의 입력에 대해 Lipschitzness가 더 완화된 형식으로 작동함을 보여줍니다. </p>
<p>$s(f, x) \leq C \cdot \log(n) \cdot \epsilon^{L/2}$</p>
<ul>
<li>$log(n)$: 입력 길이 $n$에 대한 로그 계수</li>
<li>$C$: 기존의 Lipschitz 상수(이전 수식의 C와 동일).</li>
</ul>
<p><strong>해석</strong></p>
<ul>
<li>이 개선된 경계는 대다수 입력에 대해, 기존 경계에서 발생하던 지수적 증가($\exp\left(4d \cdot \max_h |K_1^T Q_1|_2^2 \right)$)를  로그 증가로 대체합니다. </li>
<li>이는 실제로 트랜스포머가 대부분의 입력에서 민감도를 더 낮게 유지할 수 있음을 알려줍니다. </li>
</ul>
<h5 id="layer-norm과-민감도의-하한">Layer Norm과 민감도의 하한</h5>
<p>트랜스포머가 민감도가 높은 함수를 표현하려면, 각 층의 Layer Norm 계수 $N_i^{(k)}$의 곱, 즉 <strong>Layer Norm Blowup</strong>이 커져야 합니다.</p>
<p>Layer Norm Blowup은 다음과 같이 정의됩니다.
$\text{Blowup}(x) = \prod_{k=1}^L \max_{w=1,\dots,n} {1 + N_w^{(k)}(x)}$</p>
<ul>
<li>$L$: transformer의 층 수.</li>
<li>$n$: 입력 길이.</li>
</ul>
<p>Blowup은 민감도가 높은 함수에서 출력이 얼마나 불안정하게 형성되는지를 보여주는 지표입니다.</p>
<h5 id="theorem-4-민감도-sf-x는-layer-norm의-blowup에-의해-제한됩니다">Theorem 4: 민감도 $s(f, x)$는 Layer Norm의 Blowup에 의해 제한됩니다.</h5>
<p>$s(f, x)\leq C \cdot \text{Blowup}(x)^2 + \text{(작은 값의 보정항)}$</p>
<p>즉, 민감도가 높은 함수를 표현하려면 Blowup이 반드시 커져야 합니다.</p>
<h5 id="corollary-5-평균-민감도-asnf에-따라-layer-norm-blowup의-기대값이-다음을-만족해야-합니다">Corollary 5: 평균 민감도 $asn(f)$에 따라 Layer Norm Blowup의 기대값이 다음을 만족해야 합니다:</h5>
<p>$C \cdot \mathbb{E}[\text{Blowup}(x)^2] \geq \frac{\text{asn}(f)}{\sqrt{n \log n}}
$</p>
<p>평균 민감도가 입력 길이 𝑛에 비례하여 증가하면, Layer Norm Blowup 또는 파라미터 크기가 반드시 커져야 함을 의미합니다.</p>
<h5 id="corollary-5에-따르면">Corollary 5에 따르면</h5>
<p>$C \cdot \mathbb{E}[\text{Blowup}(x)^2] = \Omega\left(\frac{\sqrt{n}}{\log n}\right) = \omega(1)
$</p>
<p>최소의 증가량이 linear함수보다 크다.
-&gt; 입력 길이가 증가할수록 Layer Norm Blowup이 기하급수적으로 증가해야 하므로, PARITY 학습이 점점 더 어려워집니다.</p>
<blockquote>
<p>💡 이 섹션은 트랜스포머가 민감도가 높은 함수(PARITY)를 학습하기 위해 Layer Norm 계수와 파라미터 크기에서 극단적인 확장이 필요함을 이론적으로 증명합니다. 이는 다음을 시사합니다:</p>
</blockquote>
<ul>
<li>PARITY와 같은 고민감도 함수는 트랜스포머에서 학습되기 어려운 함수입니다.
트랜스포머의 학습 가능성은 단순한 표현력(Expressiveness) 이상의 구조적 한계(Layer Norm, 손실 지형 등)에 의해 <strong>제한</strong>됩니다.</li>
<li>트랜스포머는 민감도가 낮은 함수(MAJORITY, FIRST) 학습에 강한 편향을 가지며, 이는 모델 설계와 학습 전략에서 중요한 고려 사항이 됩니다.</li>
</ul>
<h3 id="50-sensitive-transformers-are-brittle">5.0. Sensitive Transformers are Brittle</h3>
<blockquote>
<p>논문의 5장 &quot;Sensitive Transformers are Brittle&quot;는 Transformer 모델이 높은 민감도(sensitivity)를 가지는 함수를 학습할 때 나타나는 취약성과 불안정성 문제를 수식적으로 설명합니다. 이 섹션의 주요 요점과 관련 수식은 다음과 같습니다</p>
</blockquote>
<h4 id="51-높은-민감도와-매개변수-공간에서의-불안정성">5.1 높은 민감도와 매개변수 공간에서의 불안정성</h4>
<p>논문에서는 Transformer 모델이 민감도가 높은 함수를 학습할 때, 매개변수의 작은 변화에도 예측 결과가 급격히 바뀌는 불안정한 최적화 상태(Sharp Minima)에 놓이게 됨을 보입니다. 이 현상은 다음의 수식을 통해 나타납니다.</p>
<h5 id="평균-방향-예리함-average-direction-sharpness">평균 방향 예리함 (Average Direction Sharpness)</h5>
<p>매개변수 벡터 $\theta$에 대해 Transformer $T_\theta$의 Average Direction Sharpness $L_{p, n}(T)$은 다음과 같이 표현됩니다.</p>
<p>$L_{\rho,n}(T) := \mathbb{E}<em>{x \in { \pm 1 }^n} \mathbb{E}</em>{|\Delta|<em>2 = \rho} \left( T</em>{\theta + \Delta}(x) - T_{\theta}(x) \right)^2
$</p>
<ul>
<li>$x$는 입력데이터</li>
<li>Δ는 매개변수 공간에서 반경 ρ인 구(sphere) 내의 방향 벡터입니다.</li>
</ul>
<p>이 식은 매개변수 공간에서 작은 변화가 모델 출력에 미치는 평균적인 변화를 측정합니다. 만약 특정 함수에 대해 $L_{p, n}(T)$가 크다면, 이는 Transformer 모델이 그 함수를 학습할 때 불안정하게 반응하며, 매개변수의 작은 변화에도 민감한 출력을 내놓게 된다는 것을 의미합니다. </p>
<h4 id="52-민감도와-예리한-최소점-sharp-minima">5.2 민감도와 예리한 최소점 (Sharp Minima)</h4>
<p>다음은 중요한 결과를 나타내는 수식으로, 높은 민감도를 가진 함수가 Transformer 모델의 Sharp Minima를 형성하는 이유를 설명합니다.</p>
<p>$\lim_{\rho \to 0} \liminf_{n \to \infty} L_{\rho,n}(T) \geq \liminf_{n \to \infty} \frac{\text{asn}(T_{\theta})}{2n} - L \exp(-\Omega(d))
$</p>
<ul>
<li>$asn(T_\theta)$는 평균 민감도를 나타내며, 이는 Transformer가 특정 입력 길이에서 얼마나 민감하게 반응하는지를 나타내는 척도입니다.</li>
<li>$L$과 𝑑는 Transformer의 레이어 수와 차원을 나타내며, 모델의 구조적 제약 조건을 의미합니다.</li>
</ul>
<p>이 식은 입력 길이 𝑛이 커짐에 따라 평균 민감도가 높은 함수일수록 Transformer의 예리함(Sharpness)이 커진다는 사실을 나타냅니다. 이는 매개변수가 조금만 바뀌어도 모델의 예측이 크게 달라질 가능성을 내포합니다.</p>
<h3 id="60-implications-의미">6.0 Implications (의미)</h3>
<blockquote>
<p>이 장에서는 Transformer 모델이 민감한 함수들을 학습할 때 나타나는 어려움과 그로 인해 발생하는 여러 현상에 대한 이론적 설명을 제시합니다. </p>
</blockquote>
<h5 id="핵심-요점은-다음과-같습니다">핵심 요점은 다음과 같습니다:</h5>
<ul>
<li><p>Difficulty of PARITY: PARITY와 같은 높은 민감도의 함수는 입력 길이가 길어질수록 학습이 더욱 어려워집니다. 이는 Transformer가 이러한 함수를 정확하게 일반화하려면 특정 매개변수 조합에 매우 의존하게 되어, 조그만 변화에도 모델이 불안정해지기 때문입니다.</p>
</li>
<li><p>Length Generalization: Transformer가 민감도가 높은 함수에서 입력 길이에 따른 일반화에 실패하는 이유는, 예리한 최소점(Sharp Minima)을 찾지 못하는 경우 학습 과정에서 안정적인 일반화를 달성하기 어렵기 때문입니다.</p>
</li>
<li><p>Intermediate Steps Reduce Sensitivity: 학습이 진행되는 동안 Transformer는 주어진 훈련 데이터에서 민감도를 최소화하려는 경향이 있으며, 이로 인해 일반화 과정에서 민감도가 낮은 함수로 편향될 가능성이 있습니다.</p>
</li>
</ul>
<h3 id="70-experiments">7.0 Experiments</h3>
<blockquote>
<p>실험 장에서는 6장에서 제시된 이론적 분석을 확인하기 위해 다양한 함수와 입력 길이에서 Transformer 모델의 민감도를 실험합니다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/sa090180/post/1fe98bac-1b8b-46d8-a332-11ed0c532a9e/image.png" alt=""></p>
<ul>
<li>Layer Norm Blowup 및 파라미터 크기: 실험을 통해 Layer Norm이 커지거나 파라미터가 커질수록 모델이 민감한 함수를 학습하는 데 더 효과적인 것을 발견했습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sa090180/post/dcf39643-02e9-43d3-9aee-ba99e3710860/image.png" alt=""></p>
<ul>
<li><p>Sharpness 측정: 민감도가 높은 함수일수록 모델의 최적화가 Sharp한 최소점에 도달하는 양상을 보이며, 이는 평균 방향 예리함(Average Direction Sharpness)을 측정함으로써 확인되었습니다.</p>
</li>
<li><p>길이 일반화: PARITY와 같은 함수에서 길이가 증가할수록 학습이 불안정해지고 일반화가 실패하는 현상을 실험적으로 확인했습니다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sa090180/post/e69ed146-e334-4423-9cf6-fcd902783765/image.png" alt=""></p>
<p>훈련 데이터의 크기가 작을수록 모델이 학습한 함수의 민감도가 낮아지는 경향을 보입니다.이는 모델이 데이터셋 외부에 대해 더 안정적으로 예측하려는 편향이 나타난 것으로 해석됩니다.</p>
<blockquote>
<p>결론적으로, Figure 4는 Transformer가 훈련 데이터 크기에 따라 민감도를 최소화하는 방향으로 일반화하여, 민감도가 낮은 함수로 예측하는 경향을 실험적으로 보여준다고 생각합니다. </p>
</blockquote>
<h3 id="80-conclusion">8.0 Conclusion</h3>
<p>이 논문은 Transformer는 높은 민감성을 가진 input에 대해 sharp한 minima에서만 모델이 최적화 될 수 있음을 보여주는 논문이다. 
종합적으로 봤을 때 이전에는 설명하지 못했던 transformer의 문제점을 loss landscape과 quantitative bound를 통해 증명을 하는 논문이다. </p>
<blockquote>
</blockquote>
<p>논문을 읽을때 Lipschitzness bounds에 대한 내용과 appendix b를 완벽하게 이해하지 못해서 관련 논문을 추후에 읽을 예정입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding]]></title>
            <link>https://velog.io/@dr_pepper/GLUE-A-Multi-Task-Benchmark-and-Analysis-Platform-for-Natural-Language-Understanding</link>
            <guid>https://velog.io/@dr_pepper/GLUE-A-Multi-Task-Benchmark-and-Analysis-Platform-for-Natural-Language-Understanding</guid>
            <pubDate>Wed, 27 Nov 2024 08:42:14 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3810053e-bc66-4e3f-b292-f5f8e5c0e78f/image.png" alt=""></p>
<h1 id="0-abstract">0. Abstract</h1>
<p>자연어 이해(Natural Language Understanding)기술은 특정 기능,장르,데이터셋에 국한되지 않게 언어를 처리할수 있어야 합니다.
따라서 해당 논문은 다양한 자연어 이해 영역에서의 성능 지표를 위해서 탄생한 일반어 이해평가(GLUE)벤치마크를 소개하고 있습니다.</p>
<hr>
<h1 id="1-introduction">1. Introduction</h1>
<p>인간이 언어를 일반적이며(<strong>general</strong>), 유연하고(<strong>flexible</strong>), 강건하게(<strong>robust</strong>) 이해하는 것과는 달리, 대부분의 NLU(Natural Language Understanding) model들은 특정 작업을 위해 설계되었으며, out-of-domain상태인 데이터에서의 성능하락이 존재합니다.
연구진들은 만약 단순히 입출력간의 단순한 관계를 감지하는것을 넘어서는, 언어적인(linguistic)이해를 가지는 model을 만들어야 한다면, 다른 domain에서 다양한 linguistic task를 실행하는 unified model을 만드는 것이 매우 중요하다고 주장합니다.</p>
<p>Unfied model를 설계하는 방향의 연구를 위해 연구진들은 일반어 이해평가인 GLUE벤치마크를 제시합니다.
GLUE는 질문 답변,감정 분석,텍스트 함의 등의 일반어 이해 작업 모음과 모델의 평가,비교, 분석을 위한 플랫폼입니다. 또한 모델 아키텍쳐에서 단일문장, 한쌍의 문장을 입력받아 대응되는 예측을 만들어내는 제약 이외에는 제약이 존재하지 않는 구조입니다.
따라서 Task마다 다양하고 복잡한 종류들로 구성되어 있어 Sample-efficient learning과 다양한 영역에서 지식전이(Knoledge-transfer)를 촉진하는 방식으로 linguistic한 지식을 학습하는 모델을 선호하게 합니다.
GLUE에 포함되어 있는 dataset들은 기존에 존재하던 dataset들로부터 기인하였으며, dataset중에서 4개는 benchmark가 공정하게 사용되는지 확인하는 데 사용되는 private-held test data를 제공합니다.
이에 더불어서 GLUE는 model이 학습한 유형을 이해하고, 언어적으로 의미 있는 해결전략을 추구하는것을 장려하기 위해 set of hand-crafted analysis example을 제공한다. 해당 dataset은 model이 robust하게 작업을 해결하려면 반드시 다뤄야 하는 common challenge에 초점을 맞추도록 설계된 데이터 셋 입니다.
해당 벤치마크를 활용하기 위해 연구진들은 unified multi-task trained models인 ELMo를 활용하였지만 여전히 절대적인 점수가 낮게 나오는 문제를 통해서 기존의 모델의 경우 strong lexical signals에는 강하지만 struggle with deeper logical structure에는 약한 모습을 보여준다고 설명합니다.
위의 내용을 요약하자면 다음과 같습니다.</p>
<blockquote>
</blockquote>
<ol>
<li>GLUE는 9개의 NLU task 모음이며, 각각의 task는 주석이 달려져 있는(annotated) dataset으로 구축되었으며 다양한 genre, dataset size, degrees of difficulty를 다루도록 선별되었다.</li>
<li>privately-held test data를 기반으로 하는 online evaluation platform과 leaderboard가 존재하며, model-agnostic 하여 아키텍처의 제약을 두지 않는다.</li>
<li>expert-constructed diagnostic evaluation dataset을 제공한다.</li>
<li>기존 모델의 벤치마크 결과 deeper logical structure에 취약한 모습을 보임 </li>
</ol>
<hr>
<h1 id="2-related-work">2. Related Work</h1>
<p>Collobert의 경우 공유된 문장 이해 구성 요소를 가진 multi-task모델을 사용하여 품사 태깅, 청킹, 개체명 인식, 의미역 결정을 공동으로 학습했고 최근의 연구는 핵심 NLP Task의 레이블을 사용하여 DNN의 하위 수준을 지도학습하거나 multi-task학습을 위한 corss-task 공유 메커니즘을 이용하였습니다.</p>
<p>또한 multi-task학습을 넘어서 일반적인 자연어 이해 시스템 개벨에대한 연구는 sentence-to-vector encoder를 기반으로 해서 레이블의 유무 그리고 둘의 조합으로 이뤄진 데이터를 활용했습니다.
이를 기반으로 하여금 SentEval과 같은 표준 평가가 체계화 되었습니다.
SentEval은 GLUE와 동일하게 하나 또는 두 개의 문장을 입력으로 하는 기존 분류 작업 세트에 의존하지만GLUE와 달리, SentEval은 문장-벡터 인코더만 평가하므로 문장을 독립적으로 다루는 작업에 대한 모델 평가에 적합합니다. 그러나 문장 간 맥락화와 정렬은 기계 번역, 질문 답변, 자연어 추론과 같은 작업에서 필수적입니다.
따라서 GLUE는 이러한 방법의 개발을 촉진하도록 설계되었고 모델에 구애받지 않아 어떤 종류의 표현이나 맥락화도 가능하며, 문장에 대한 명시적인 벡터나 Symbolic한 표현을 전혀 사용하지 않는 모델도 포함합니다.</p>
<p>또한 GLUE는 또한 평가 모음에 포함된 평가 작업의 선택에서 SentEval과 차이가 있습니다. SentEval의 많은 작업들은 MR, SST, CR, SUBJ와 같이 감성 분석과 밀접하게 관련되어 있습니다.
GLUE에서는 다양하면서도 어려운 벤치마크를 구성하였다고 설명합니다.
decaNLP 역시 여러 데이터셋에 대한 성능을 기반으로 NLP 시스템을 평가합니다. 이 벤치마크는 요약 및 텍스트-SQL 의미 파싱과 같은 작업을 질문 답변의 형태로 변환합니다. 해당 방식은 GLUE의 것과는 유사하면서도 보상 체계에서의 차이점을 지니고 있습니다.</p>
<hr>
<h1 id="3-tasks">3. Tasks</h1>
<p>GLUE는 9개의 영어 문장 이해 task를 중심으로 구성되어 있으며, 이는 다양한 도메인, 데이터 양, 난이도를 포괄합니다. GLUE의 목표는 일반화 가능한 NLU 시스템의 개발을 촉진하는 것이기에 모든 task에 걸쳐 상당한 지식(예: 훈련된 매개변수)을 공유하면서도 task별 특성을 유지해야 좋은 성능을 낼 수 있도록 설계되었습니다.
각 작업에 대해 사전학습를 하지 않거나외부를 사용해 개별 모델을 훈련시킨다음 평가하는것도 가능하지만 연구진들은 데이터가 부족한 작업들이 포함되어 있어 이러한 접근 방식은 결국 경쟁력이 떨어질 것으로 예상했습니다
GLUE에서 제동하는 task들은 다음과같이 구분되어 있으며 크게 3종류로 나뉘어지게 됩니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/c6b05239-6b5e-4302-af45-6b19d8168847/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>Single-Sentence Tasks
Similarity and Paraphrase Tasks
Inference Task</p>
<h2 id="31-single-sentence-tasks">3.1 Single-Sentence Tasks</h2>
<h3 id="cola">CoLA</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/4218c5d0-e109-406f-92e2-fdd2d4a45450/image.png" alt="">
Corpus of Linguistic Acceptability(CoLA)는 언어 이론과 관련된 책과 저널 기사에서 추출된 문법적으로 적합한지에 대한 판단으로 이루어진 dataset입니다.
각각의 예시들은 해당 영어 문장이 문법적인지 아닌지에 대해 주석처리(annotated)된 sequence들입니다.</p>
<p>CoLA에서는 evaluation metric으로 불균형한 이진분류에 대해 -1과 1 사이의 값(0은 uninformed guessing에 대한 성능을 나타냄)으로 evaluate 하는 매튜 상관 계수(Matthews correlation coefficient)를 사용</p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8db6a1d3-a08f-4ce7-9e79-1ffbc2d650c5/image.png" alt=""></p>
<p>GLUE에서는 CoLA의 저자로부터 private label을 얻은 standard data set을 사용하며, test set에서 in-of-domain section과 out-of-domain section의 조합에서의 단일 성능 수치를 report</p>
<h3 id="sst-2">SST-2</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/16b9ac1a-e2bf-4470-97fb-83a54b733c40/image.png" alt="">
Stanford Sentiment Treebank(SST-2)는 영화 리뷰 sentence와 해당 sentence에 대한 sentiment의 human annotation으로 이루어진 dataset입니다.
SST-2로 수행하는 task는 주어지는 문장에 대해 심리(sentiment)를 예측하는 것입니다. GLUE에서는 positive와 negative의 두 가지 class만 사용하며, 문장단위의 레이블(sentence-level label)만 사용</p>
<h2 id="32-similarity-and-paraphrase-tasks">3.2 Similarity and Paraphrase Tasks</h2>
<h3 id="mrpc">MRPC</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/559afa98-1b7e-47b7-b33d-202471f2c2a1/image.png" alt="">
Microsoft Research Paraphrase Corpus(MRPC)는 온라인 뉴스로부터 추출된 sentence pair와, 해당 sentence pair를 구성하는 sentence가 의미상으로 같은 sentence인지에 대한 human annotation으로 이루어져 있는 데이터셋 입니다.
MRPC는 불균형한(imbalanced)데이터이기 때문에(68% positive), accuracy와 f1 score 둘 다 사용하여 report</p>
<h3 id="qqp">QQP</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/d8a1a491-41ce-4738-950c-889dace2a8e0/image.png" alt="">
Quora Question Pairs(QQP)는 질문 답변 웹사이트인 Quora에서 추출한 질문 pair의 모음들로 구성된 dataset입니다.
MRPC의 경우처럼, sentence가 의미상으로 같은 sentence인지에 대한 human annotation으로 이루어져 있고 불균형한(imbalanced)데이터이기 때문에 (63% negative) accuracy와 f1 score 모두 사용하여 report</p>
<h3 id="sts-b">STS-B</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c29a98e4-1980-45f1-9d0a-e7f571412f3f/image.png" alt="">
Semantic Textual Similarity Benchmark(STS-B)는 뉴스 헤드라인, 동영상/이미지 캡션, 자연어 추론 데이터셋에서 추출한 sentence pair의 모음입니다.
각각의 pair에 대해서 1부터 5까지의 유사도 점수를 매긴 human-annotated label이 대응되며, STS-B를 통해 진행하는 task는 해당 유사도 점수를 예측하는 것이다. 또한 이를 Pearson and Spearman correlation coefficients로 평가를 하게 됩니다.</p>
<blockquote>
</blockquote>
<p>####피어슨,스피어만 상관계수 
피어슨 상관계수는 두 변수 X, Y 간의 선형 상관 관계를 계량화한 수치로 공분산을 표준편차의 곱으로 나눈 값이다.(-1 ~ 1)
+-1은 선형 상관관계 있음 0은 선형 상관관계 없음을 의미한다. 대체적으로 0.3 이상이면 상관관계가 존재라고 평가
스피어만 상관계수는 두 변수의 순위 사이의 통계적 의존성을 측정하는 비모수적 척도이다. 원시데이터가 아닌, 각 변수에 대해 순위를 매긴 값을 기반으로 상관관계를 측정한다. 순위를 이용하기 때문에 연속형 변수가 아닌 순서형 변수인 경우에도 용 가능하다.
피어슨 상관계수와 마찬가지로 -1 ~ 1사이의 값을 가지며 단순 관계만 측정한다. 순위로 변환해서 상관관계를 측정하기 때문에 선형 외에 비선형 관계도 나타낼 수 있다.</p>
<h2 id="33inference-task">3.3Inference Task</h2>
<h3 id="mnli">MNLI</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a5490e1f-9854-423e-9487-f8d2e1d47c95/image.png" alt="">
Muti-Genre Natural Language Inference Corpus(MNLI)는 crowd-sourcing으로 구축된 <strong>textual entailment annotation</strong>이 있는 sentence of pair로 이루어진 dataset입니다.</p>
<p>MNLI로 수행하는 task인 <strong>textual entailment</strong>는, premise(전제)와 hypothesis(가설)가 주어지며, premise(전제)가 hypothesis(가설)를 수반(entail)하는지 예측하는 task 
premise(전제)가 hypothesis(가설)를 수반하면 entailment, 모순(contradict)되면 contradiction, 둘 다 아니면 neutral의 label로 예측
Premise sentence들은 transcribed speech, fiction, government report를 포함한 10개의 다른 경로로부터 수집되었습니다.</p>
<h3 id="qnli">QNLI</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/d07fa2d3-8dc3-489d-bcff-098c3fdded07/image.png" alt="">
Question-answering NLI(QNLI)는 Stanford Question Answering Dataset(SQuAd)를 변형시킨 dataset입니다.
SQuAD는 question-paragraph의 pair로 구성된 question-answering dataset이다. paragraph는 자기 자신과 대응되는 질문에 대한 답변을 포함는 데이터셋 입니다.
SQuAD를 통해 수행하는 task는 질문 답변 task인데, QNLI는 SQuAD dataset을 변환하여 sentence pair classification으로 변환한다. 먼저, question과 이에 대응하는 paragraph를 이용하여 pair of sentence를 형성하고, 이렇게 형성된 문장 쌍들 중에서 어휘적 중복(lexical overlap)이 낮은 쌍을 필터링해 선별합니다.
연구진들은 이러한 수정을 통해 모델이 옳바른 답변를 선택할 필요를 없애지만 답변이 input속에 항상 있을 것이라는, 또한 lexical overlap(어휘적 중복)이 신뢰할 수 있는 단서일 것이라는 &quot;단순화된 추정&quot;도 제거해준다고 설명합니다.
이후, 수정된 QNLI dataset을 통해서 paragraph가 question에 대한 answer를 포함하고 있는지에 대한 classification task를 수행</p>
<h3 id="rte">RTE</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/d91b2e56-8efe-40f0-bb8d-9c449e93262b/image.png" alt="">
Recognizing Texual Entailment(RTE) dataset은 annual textual entailment challenges로부터 추출되었다. 본 연구에서는 RTE1, RTE2, RTE3, RTE5를 혼합하여 사용했다고 설명합니다.
또한 원문 dataset인 RTE들은 위에서 소개한 MNLI와 같이 entailment, neural, contradiction의 3개 class로 구분되어있었는데, GLUE에서의 RTE는 neutral과 contradiction을 not_entailment로 묶어 entailment와 not_entailment의 2개의 class로 수정하였다.</p>
<h3 id="wnli">WNLI</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/9a137654-3832-4a5c-a23f-391f8e27b7d8/image.png" alt="">
Winograd NLI(WNLI)는 QNLI와 비슷하게 기존의 존재하던 Winograd Schema Challenge의 변형으로Winograd Schema Challenge는 reading comprehension task입니다.
reading comprehension task란, model이 대명사(pronoun)가 있는 문장을 읽고 해당 대명사의 참조를 선택 목록 중에서 선택해야 하는 task입니다.
reading comprehension task를 sentence pair classification task로 변환해야하고 이를 위해 각 문장의 대명사를 가능한 각각의 참조로 바꾸고,sentence와 함께 쌍을 만들게 됩니다.
이후, 원본 sentence가 대명사가 대체된 문장을 수반하는지 예측하는 이진 분류 task를 수행
WNLI의 training set이 balanced data인 것에 비해, test set은 imbalanced data이다. 또한, 
training set에 overfitting 되어있으면 development set에서는 성능이 크게 하락할 수 있습니다.</p>
<h2 id="34-evaluation">3.4 Evaluation</h2>
<p>모델을 평가하기 위해서는 제공되는 task에 대한 test data에 대한 모델 수행결과를 GLUE 웹사이트에 업로드하여 점수를 책정받아야 합니다.
GLUE benchmark 웹사이트는 task별 score와 해당 task들의 macro-average score를 보여주고, 리더보드 상에서의 순위를 결정한다. accuarcy와 f1 score를 같이 사용하는 task의 경우, 전체 task의 macro-average score를 구할 때에는 task에 대한 두 metric의 unweighted average를 해당 task의 score로 계산한다.</p>
<hr>
<h1 id="4--diagnostic-dataset">4.  DIAGNOSTIC DATASET</h1>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/2a5eaa60-5020-4921-9571-bf97018c1930/image.png" alt="">
GLUE에서는 model의 성능 분석을 위해 수동으로 선별된 small testset을 제공한다. 벤치마크가 application 중심의 distribution을 반영하는 것과는 달리, diagnostic dataset은 저자들이 model이 capture하기에 중요하고 흥미롭다고 생각하는 pre-defined set of phenomena에 중점을 둔다.
각각의 예시들은 자연어 추론을 위한 문장쌍과 phenomena로 구성되어 있습니다.
또한 연구진들은 이러한 데이터셋이 다양한 언어학적 현상에 대한 예제를 지니고 있고 다양한 도메인에서 발생하는 문장들을 기반으로 하였기에 합리성을 지니고 있다고 주장합니다. 그 예제는 다음과 같습니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/fd074fc1-d21f-47ea-8f8d-1bf73b6e3b51/image.png" alt=""></p>
<h1 id="5-baselines">5. Baselines</h1>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/202942c7-459a-43fe-b4e9-97eb93efc1ca/image.png" alt="">
연구진들은 기준선으로 GLUE수행에 대해서 훈련된 multi-task과 사전학습 기법을 기반으로하여 여러가지 경우에 대해서 평가를 진행했다고 설명합니다.
<strong>아키텍쳐</strong>: 가장 기본적인 아케텍처의 경우 sentence-vector 인코더를 기반으로 해서 맥스풀링,GLOVE, BiLSTM등을 활용하였습니다.
<strong>사전 학습</strong>: ELMo,CoVe 두가지 방식을 사용</p>
<blockquote>
</blockquote>
<p>ELMo는 Billion Word Benchmark에서 훈련된 두 개의 2층 신경 언어 모델을 사용합니다. 각 단어는 두 모델의 각 층의 corresponding hidden state의 선형 결합을 취함으로써 생성된 contextual 임베딩으로 표현됩니다.
CoVe는 원래 영어-독일어 번역을 위해 훈련된 2층 BiLSTM 인코더를 사용합니다. 단어의 CoVe 벡터는 최상위 층 LSTM의 corresponding hidden state입니다.</p>
<p><strong>train</strong>:BiLTSM을 기반으로 해서 ADAM 옵티마이저등을 사용해 학습을 진행하였고 학습률이 10^-5미만이거나 5번의 validation이후 성능상의 개선이 없으면 학습을 중단하는 방식을 사용했습니다.</p>
<h1 id="6-benchmark-results">6. BENCHMARK RESULTS</h1>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c40d6323-4452-4419-b9da-a08a22203b42/image.png" alt="">
연구진들은 attention매커니즘이나 ELMo를 사용하는 모델들중 multi-task가 single-task보다 전반적으로 좋은 점수를 기록하는 것을 발견했고 특히 attention매커니즘이 단일 작업에서는 무시할만한 성능이지만 multi-task에서 유의미한 개선이 있다는것을 발견했습니다.
사전 훈련된 문장 표현 모델들 중에서는 CBoW에서 Skip-Thought로, 그리고 InferSent와 GenSen으로 이동하면서 꽤 일관된 향상을 보여주고 있습니다.
작업별 결과에서는 sentence representation models이 CoLA에서 해당 작업에 직접 훈련된 모델들에 비해 상당히 성능이 떨어진다는 것을 발견합니다. 반면에 STS-B의 경우, 작업에 직접 훈련된 모델들이 최고의 문장 표현 모델의 성능에 비해 크게 뒤처집니다. 마지막으로, 어떤 모델도 특별히 잘 수행하지 못하는 작업들이 있습니다.
이러한 초기 결과는 GLUE를 해결하는 것이 현재 모델과 방법의 능력을 넘어선다는 것을 나타냅니다.</p>
<h1 id="7-analysis">7. Analysis</h1>
<p> <img src="https://velog.velcdn.com/images/dr_pepper/post/d7831fd3-5e49-448f-9d5e-d4fac8952286/image.png" alt="">
Coarse Categories: 모든 모델의 전반적인 성능이 낮게나오며 성능은 Predicate-Argument구조에서 더 높고 논리에서 더 낮은 경향을 보이지만 직접 비교하기에는 어렵습니다. 주요 벤치마크와 달리, multi-task모델은 거의 항상 single-task모델보다 성능이 하락함을 보여주고 있습니다. 
GLUE 작업에 대해 훈련된 모델들은 전반적으로 사전학습모델 대비 성능이 우수합니다. attention메커니즘 사용이 ELMo나 CoVe 사용보다더 큰 영향을 미치는데, 이는 주의 메커니즘이 NLI에서 중요하다는 것을 나타냅니다.</p>
<p>Fine-Grained Subcategories: 대부분의 모델이 universal quantification를 상대적으로 잘 처리하는것을 나타내고 있습니다.
또한 모델 간 다양한 약점을 확인 할수 있는 결과를 도출하고 있습니다.</p>
<p>전반적으로, attention메커니즘과 같이 out of domain데이터에 대한 성능을 향상시킬 수 있다는 것을 보여주며, ELMo와 CoVe 같은 전이학습들이 특정한 언어 정보를 인코딩한다는 것을 알 수 있습니다. 그러나 표현 능력의 증가는 과적합으로 이어질 수 있다고 설명합니다.
연구진들은 GLUE의 플랫폼과 진단 데이터셋이 향후 유사한 분석에 유용할 것으로 기대하며, 이를 통해 모델 설계자들이 그들의 모델의 더 잘 이해할 수 있을 것이라고 주장합니다.</p>
<h1 id="8-conclusion">8. Conclusion</h1>
<p>연구진들은 자연어 이해 시스템을 평가하고 분석하기 위한 플랫폼 및 리소스 모음인 GLUE를 소개하며 multi-task모델들이 각 작업에 대해 개별적으로 훈련된 모델들의 결합된 성능보다 더 나은 성능을 보인다는 것을 발견했습니다. 또한 NLU 시스템에서 주의 메커니즘과 ELMo와 같은 전이학습 방법의 유용성을 확인했으며 추가적인 개선의 여지가 있다고 설명합니다. 
따라서 연구진들은 범용 NLU 모델을 어떻게 설계할 것인가에 대한 질문은 여전히 해답을 찾지 못했으며, 우리는 GLUE가 이 과제를 해결하는 데 큰 기여를 할것이라고 주장합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[End-to-End Object Detection with Transformers(DETR)]]></title>
            <link>https://velog.io/@dr_pepper/End-to-End-Object-Detection-with-TransformersDETR</link>
            <guid>https://velog.io/@dr_pepper/End-to-End-Object-Detection-with-TransformersDETR</guid>
            <pubDate>Tue, 26 Nov 2024 07:12:47 GMT</pubDate>
            <description><![CDATA[<p>오늘 review해 볼 논문은 2020년도에 나온 <strong>DETR</strong>입니다!</p>
<blockquote>
<p>제목 : End-to-End Object Detection with Transformers(DETR)
저자 : Nicolas Carion et al.
학회 : EECV 2020
게제 년도 : 2020년
인용수 : 14,623회</p>
</blockquote>
<h3 id="0-필수-개념">0. 필수 개념</h3>
<p>먼저 IoU와 GIoU에 대해서 알아보겠습니다!</p>
<blockquote>
<ol>
<li>IoU(Intersection over Union)  </li>
</ol>
</blockquote>
<ul>
<li>예측 bounding box와 ground truth가 일치하는 정보를 0과 1 사이의 값으로 나타낸 값입니다</li>
<li>Box가 겹치지 않으면 떨어진 정도를 반영할 수 없습니다
  -&gt; box가 떨어져 있으면, 떨어진 거리와 관계 없이 동일한 loss 0이 부여됩니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/4d0f61a4-09aa-4521-b557-f4298fb1b008/image.png" alt=""></li>
</ul>
<ol start="2">
<li>GIoU<blockquote>
<ul>
<li>IoU를 개선시킨 것으로, bounding box와 ground truth를 모두 포함하는 최소 크기의 C box를 이용합니다</li>
</ul>
</blockquote>
</li>
</ol>
<ul>
<li>Box가 겹치지 않은 경우(IoU=0)에도 loss를 정의해 학습에 이용할 수 있습니다(-1 ~ 1 사이의 값)
<img src="https://velog.velcdn.com/images/dr_pepper/post/d1b51f41-eb10-4d44-91db-0a163c5c1fa6/image.png" alt=""></li>
</ul>
<p>다음으로는 precision과 recall에 대해서 알아보겠습니다!</p>
<blockquote>
<ol>
<li>Precision</li>
</ol>
</blockquote>
<ul>
<li>예측을 positive로 한 애들 중에서, 예측 값과 실제 값이 일치하는 데이터의 비율입니다</li>
<li>Box 친 애들 중 제대로 class를 예측한 애들의 비율입니다</li>
<li>Detection한 결과가 실제 Object들과 얼마나 잘 일치하는가?를 나타냅니다</li>
<li>예측을 한 데이터가 기준입니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/e262ff31-d5c5-4147-97f8-6f4d1167c060/image.png" alt=""></li>
</ul>
<ol start="2">
<li>Recall</li>
</ol>
<ul>
<li>실제 값이 positive한 애들 중에서, 예측 값과 실제 값이 positive로 일치하는 데이터의 비율입니다</li>
<li>실제 Object 중 Box를 제대로 친 애들의 비율입니다</li>
<li>실제 Object들을 빠뜨리지 않고 얼마나 정확히 Detection 했는가?를 나타냅니다</li>
<li>실제 Object가 기준입니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/30771270-a9ed-41e7-b291-587e712fe0c0/image.png" alt=""></li>
</ul>
<p>이번에는 Precision-Recall의 변화 및 AP에 대해서 알아보겠습니다!</p>
<blockquote>
<ol>
<li>Confidence Threshold에 따른 Precision-Recall 변화</li>
</ol>
</blockquote>
<ul>
<li>Confidence : 모델마다 주로 C로 등장하는, 해당 예측이 얼마만큼의 신뢰도를 가지는지를 나타내는 점수입니다(이 정도 확률로 예측한다..)</li>
<li>Confidence Threshold : Confidence의 임계값으로, Confidence가 몇 이상인 예측들만 예측으로 볼 것인지에 대한 수치입니다
  (1) C.Threshold가 낮으면 Box 예측이 많아짐(난사) -&gt; Precision 감소, Recall 증가
  (2)C.Threshold가 높으면 Box 예측이 적어짐(신중) -&gt; Precision 증가, Recall 감소</li>
<li>Confidence Threshold에 따라 Precision과 Recall의 Trade-off가 있습니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/2f442fc8-6e74-429d-b227-0634c8b3ad81/image.png" alt=""></li>
</ul>
<ol start="2">
<li>Precision-Recall Curve와 AP(Average Precision)</li>
</ol>
<ul>
<li>Precision-Recall Curve는 Recall의 변화에 따른 Precision을 나타낸 곡선입니다.</li>
<li>X축은 Recall을 나타내고, Y축은 Precision을 나타냅니다</li>
<li>이때 Precision-Recall Curve의 면적이 AP(Average Precision)라고 할 수 있습니다
  -&gt; 즉 AP는 Precision 값들의 평균이라고 볼 수 있습니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/7aa69229-012f-47c5-aeeb-d5e315d0b548/image.png" alt=""></li>
</ul>
<p>다음으로는 Confusion Matrix(오차 행렬)에 대해서 알아보겠습니다!</p>
<blockquote>
<p>Confusion Matrix는 이진 분류에서의 예측을 유형별로 나눈 것입니다.</p>
</blockquote>
<ul>
<li>FP : 실제 없는 것에 box를 치거나 class를 예측한 것입니다</li>
<li>FN : 있는 object에 대해 box를 안 친 것입니다</li>
<li>TP : Box도 잘치고, class 예측도 잘 한 것입니다</li>
<li>TN : 지표에 쓰이지 않습니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/02691f9f-b7f8-43c4-a489-8a04ddb57864/image.png" alt=""></li>
</ul>
<p>마지막으로 mAP에 대해서 알아보겠습니다!</p>
<blockquote>
<p>mAP : 여러 Object들에 대한 AP의 평균입니다
    -&gt; AP : 1개의 Object class에 대한 수치입니다
  AP[.50:.05:.095] : IoU를 기준으로 0.5부터 시작해서 0.95까지 0.05씩 높이면서 측정한 mAP를 나타냅니다
      -&gt; AP@[.50:.05:.095]로 표기하기도 합니다</p>
</blockquote>
<ul>
<li>AP50 : IoU의 최솟값이 0.5</li>
<li>AP75 : IoU의 최솟값이 0.75
<img src="https://velog.velcdn.com/images/dr_pepper/post/797eca30-00c4-4d23-a54d-cb27b2fd5ba9/image.png" alt=""></li>
</ul>
<h3 id="1-preview">1. Preview</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/e134aafa-438a-4244-90d6-0e42b1da5de7/image.png" alt=""></p>
<p>먼저 본 논문의 Contribution에 대해서 간단하게 알아보고 넘어가도록 하겠습니다</p>
<p>(1) Direct set prediction
-&gt; Object Detection을 Direct Set Prediction으로 정의해, Transformer와 Bipartite matching loss를 사용한 DETR을 제안했습니다.</p>
<p>(2) Faster R-CNN과 비슷한 성능
-&gt; COCO dataset에 대하여 Faster R-CNN과 비슷한 수준의 성능을 보였습니다.</p>
<p>(3) 크기가 큰 객체 포착 성능 우수
-&gt; Self-Attention을 통한 Global Information(전역 정보)을 활용함으로써, 크기가 큰 Object를 Faster R-CNN보다 훨씬 잘 포착 가능합니다.</p>
<h3 id="2-기존-방법의-한계">2. 기존 방법의 한계</h3>
<h4 id="1-기존-방법">1. 기존 방법</h4>
<p>기존 방법은 Regression, Anchor, Window 등을 이용해 proposal을 찾은 뒤, 중복을 제거하는 과정을 사용하는 Indirect Way를 사용했습니다.</p>
<p>그렇기 때문에 중복되는 prediction을 피하기 위해 Post-Processing이 많이 사용되었습니다.</p>
<h4 id="2-한계점">2. 한계점</h4>
<p>이러한 기존 방법의 한계점에 대해서 알아보겠습니다.</p>
<p>기존 방법은 RPN, NMS 등 미리 hand-design 되어야 하는 prior knowledge가 생긴다는 한계가 있었습니다
-&gt; 이때 RPN, Anchor Box, NMS는 몇 천개의 영역을 처리해야 합니다(pos-processing)</p>
<p>또한 pipeline이 복잡하고 End-to-End 구조라고 보기 힘들다는 한계점이 존재했습니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/c21a1397-381b-4a92-ab14-694a7a8c88ef/image.png" alt=""></p>
<h3 id="3-detr-architecture">3. DETR Architecture</h3>
<p>본 논문에서는 Transformer(Encoder, Decoder) + Bipartite matching(Hungarian Algorithm)을 제안했습니다.</p>
<p>(1) Prediction bounding box와 Ground truth box 사이의 unique한 matching을 가능하도록 하는 set prediction loss를 이용합니다.</p>
<p>(2) 한 번의 forward pass로 object model 사이의 relation을 예측하는 architecture를 사용합니다.(End-to-End)</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/e134aafa-438a-4244-90d6-0e42b1da5de7/image.png" alt="">
(1) Predicted bounding box와 ground box 사이의 unique한 matching 수행
(2) Matching된 결과를 기반으로 Hungarian loss 연산</p>
</blockquote>
<hr>
<p>Bapartite Matchin(Hungarian Algorithm)이 무엇인지 대해 알아보겠습니다.</p>
<p>Bipartite Matching은 일대일로 중복이 허용되지 않는 matching을 수행합니다.</p>
<ul>
<li>Object query마다 예측된 결과물과 ground truth간 Hungarian Algorithm 기반 matching을 수행합니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/118bd38b-17a5-4aa0-9cfc-c5942a7c0a95/image.png" alt="">
  -&gt; Set Prediction과 Ground truth 간 일대일 matching을 수행하여 중복을 배제합니다.</li>
</ul>
<blockquote>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c3c8e2e4-38e8-4569-9175-29784f5e999e/image.png" alt="">
-&gt; 빨간 선일때 이분 매칭입니다.</p>
</blockquote>
<hr>
<p>이번에는 Object Detection set prediction loss에 대해 알아보겠습니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/819779b6-d5a1-433b-80da-46a44fcb3bfe/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/f70fa02d-8547-4c13-99ec-f7cd85d13639/image.png" alt=""></p>
<hr>
<p>좀더 Architecture에 대해서 자세히 알아보겠습니다</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/e134aafa-438a-4244-90d6-0e42b1da5de7/image.png" alt=""></p>
</blockquote>
<p>(1) CNN Backbone : Transformer에 들어가는 Feature map을 뽑아냅니다(ResNet 50,101을 사용합니다)
(2) Transformer Encoder, Decoder
    -&gt; Encoder : 같은 instance끼리 높은 attention을 가집니다.
    -&gt; Decoder : box에 접하는 부분이 높은 값을 가집니다(말단 부분을 잘 학습합니다)
(3) FFN(Feed Foward Network) : FNN을 통과하여 Class와 Box를 예측합니다(Bipartite matching을 수행합니다)</p>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/41a0dcfd-0cf6-49cf-94f3-b01d3f810f48/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/324283c9-df36-4076-8923-60578a7d1fcd/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/287dd8e2-bda8-498a-ab7f-b867b91682dd/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/a003b09a-8cf1-46c9-8977-5312cae020a2/image.png" alt=""></p>
<h3 id="4-experiment">4. Experiment</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/43a6d631-7d2e-4e48-b347-2f0b081f9e36/image.png" alt=""></p>
<ul>
<li>COCO 데이터셋을 통해 Faster R-CNN과 DETR 결과를 비교한 표입니다.</li>
<li>결과를 보면 DETR이 SOTA인 Faster R-CNN과 견줄만한 성능을 내는 것을 확인할 수 있습니다.</li>
<li>하지만 큰 물체는 잘 구분하지만, 작은 물체는 상대적으로 성능이 떨어지는 것을 알 수 있습니다.<blockquote>
<p>GFLOPS : 부동소수점 초당 연산량입니다
FPS : 모델이 얼마나 빠르게 동작하는지 측정합니다
AP : precision-recall 그래프의 아래쪽 면적입니다
AP50 : IoU 최솟값 0.5
AP 75 : IoU 최솟값 0.75</p>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/7f67c50e-089b-4eab-85f1-ed4bbc9b6085/image.png" alt=""></p>
<ul>
<li>Encoder 크기의 영향에 대해 보여주는 표입니다.</li>
<li>Encoder size가 커짐에 따라서 성능이 증가하는 것을 알 수 있습니다.</li>
<li>Decoder가 고정되어 있는 상태에서 Encoder가 커질수록 성능이 증가하는 것을 확인할 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/7ab68a00-4c49-44a8-a428-ea630096566c/image.png" alt=""></p>
<ul>
<li>Encoder self-attention을 시각화한 그림입니다.</li>
<li>마지막 layer에서의 attention map을 이용한 encoder의 self-attention 출력을 시각화한 그림입니다.</li>
<li>각각의 개별 instance를 잘 분리하는 것을 알 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/962d1c90-5380-4e4c-912e-df47479704cb/image.png" alt=""></p>
<ul>
<li>Decoder layer에 따른 AP 성능을 보여주는 그림입니다.</li>
<li>Decoder layer가 깊어질수록 좋은 성능을 보이는 것을 알 수 있습니다.</li>
<li>NMS와 거의 비슷한 성능을 내는 것을 확인할 수 있습니다
  -&gt; 이는 Object 간의 관계를 더 잘 학습하고, Bipartite matching 기반 Hungarian loss 사용하기 때문에 나타납니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/80d09541-63bd-4a88-aac8-50f8a6c2e8c3/image.png" alt=""></p>
<ul>
<li>일반화와 관련된 그림입니다.</li>
<li>훈련 데이터에 없던 이미지도 잘 분류하는 것을 알 수 있습니다.
  -&gt; 즉 일반화가 잘 된다는 것을 확인할 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c5c06a02-0f9c-4cfd-a346-ef8fae11890d/image.png" alt=""></p>
<ul>
<li>Decoder attention 시각화에 대한 그림입니다</li>
<li>그림을 보면, 말단 정보를 잘 캐치하는 것을 알 수 있습니다.
  -&gt; Attention을 적용함으로써, 전체 boundary에 대한 외곽 부분을 잘 캐치해 내고 학습이 이루어지는 것을 확인할 수 있습니다.</li>
<li>Box를 찾아내는 데에 중요한 부분들에 많은 attention을 주고 있는 것을 알 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/755d3e7c-657a-419d-a2d9-67d3457e733d/image.png" alt=""></p>
<ul>
<li>Positional encoding의 결과에 대한 표입니다.</li>
<li>여기서 델타 값은 감소량을 나타냅니다</li>
<li>Positional encoding을 사용하지 않으면 AP가 크게 떨어지는 것을 알 수 있습니다.</li>
<li>Decoder에 전달하면 약가늬 AP 저하만 발생하는 것을 알 수 있습니다.</li>
<li>위치에 대한 정보를 많이 가지고 있는 Positional Encoding의 중요성을 확인할 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c542335d-6c60-4a58-a221-097df8453697/image.png" alt=""></p>
<ul>
<li>Loss 구성이 AP에 미치는 영향에 대해 나타낸 표입니다.</li>
<li>각 loss function을 어떻게 구성하는지에 따라서 accuracy 차이가 발생하는 것을 알 수 있습니다.</li>
<li>현재 사용되고 있는 loss 값의 구성의 중요성을 나타냅니다.</li>
<li>GIoU가 모델의 성능을 계산하는데 중요한 역할을 수행하는 것을 알 수 있습니다.</li>
<li>L1 loss를 사용하지 않고, GIoU만 사용해도 AP에 큰 차이가 없는 것을 확인할 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a994acaf-3d40-4d85-aa16-f32a4c157ac5/image.png" alt=""></p>
<ul>
<li>실제 Box prediction에 대한 시각화에 관한 그림입니다.</li>
<li>N개의 object query가 있을 때, 20개만 뽑아서 보여줍니다.</li>
<li>점들은 각각 bounding box의 center 값입니다.</li>
<li>어느 부분에 더 많은 관심을 가지고 인식하는지, 더 많은 가중치를 주어 인식하는지 등을 알 수 있습니다.</li>
<li>Object가 있는 위치에 따라, 동일한 위치의 Object Query가 활성화됩니다.</li>
</ul>
<h3 id="5-conclusion">5. Conclusion</h3>
<h4 id="1-결론">1. 결론</h4>
<ul>
<li>Object Detection을 Direct Set Prediction의 관점에서 새롭게 접근한 모델을 제안했습니다</li>
<li>Detection + Transformer로 Bipartite matching과 Transformer를 활용한 End-to-End 모델을 제안했습니다</li>
<li>DETR은 확장성이 뛰어나고, SOTA인 Faster R-CNN과 견줄만큼의 충분히 competitive한 성능을 보였습니다</li>
</ul>
<h4 id="2-한계점-1">2. 한계점</h4>
<ul>
<li>Transformer의 Attention을 이용하기 때문에 긴 학습 시간을 가지고 있다는 한계점이 있습니다</li>
<li>Transformer는 global한 context를 잘 인식하는 특징을 가지고 있어 큰 object는 잘 구분하지만, 작은 object는 잘 구분하지 못하는 한계점을 가지고 있습니다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[BERT: Pre-training of Deep Bidirectional Transformers for
Language Understanding]]></title>
            <link>https://velog.io/@dr_pepper/BERT-Pre-training-of-Deep-Bidirectional-Transformers-forLanguage-Understanding</link>
            <guid>https://velog.io/@dr_pepper/BERT-Pre-training-of-Deep-Bidirectional-Transformers-forLanguage-Understanding</guid>
            <pubDate>Wed, 13 Nov 2024 07:59:29 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dr_pepper/post/e8490353-2743-4ea1-8b72-7eba1b1efbc5/image.png" alt=""></p>
<h1 id="0-abstract">0. Abstract</h1>
<p>BERT는 unlabeled text 로부터 deep bidirectional representations을 사전 학습후 이를 Downstream Task에 파인튜닝 할수 있게 설계된 모델이라고 설명합니다.</p>
<p>또한 하나의 출력 층을 사전 학습된 BERT모델에 결합하면 Question Answering, Language Inference등과 같은 영역에서 최신의 그것을 달성한다고 합니다.</p>
<hr>
<h1 id="1-introduction">1. Introduction</h1>
<p>연구진들은 Language model의 사전 학습은 이전부터 연구 되어져 왔었고  task-level(문장간의 관계 추론…),token-level(개체명 인식, Q&amp;A…) 두 영역 모두의 영역에서 좋은 성능을 보여왔다고 설명
downstream task 에서의 pre-trained language representation의 적용 방법은 크게 두가지가 존재함</p>
<h2 id="11-feature-based-approach">1.1. Feature based approach</h2>
<p>가장 대표적인 예시로는 <strong>ELMo</strong>(Embeddings from Language Model) → <strong>pre-trained language representations</strong>를 하나의 feature로 사용해서 <strong>task-specific architecture</strong>를 사용</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8456e5d2-fb53-458b-94c8-7f4c883a22ac/image.png" alt=""></p>
<h2 id="12-fine-tunning-approach">1.2. Fine-tunning approach</h2>
<p>가장 대표적인 예시로는 <strong>GPT</strong>(Generative Pre-trained Transformer) → task-specific 파라미터 수를 줄이고 pre-trained 파라미터를 수정해서 downstream task를 수행</p>
<p>이 두가지와 BERT의 구조를 비교하면 다음과 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/f2923d17-02ae-4776-b3ee-cee180d1bd37/image.png" alt="">
위의 feature,fine-tunning방식 둘 다 사전 학습 과정에서 <strong>unidirectional language model</strong>를 사용</p>
<ul>
<li>ELMo의 경우 순방향,역방향 언어모델을 둘다 사용하지만 출력층을 Concat해서 사용하기 때문에 결과적으로는 단방향이로 사용하기된다</li>
</ul>
<p>연구진들은 해당 두가지 방식 특히나 fine-tunning approach가 representation pre-training의 성능을 저하 시킨다고 말합니다. 그 예시로  GPT에 대해서 설명하는데 GPT와 같은 단방향 언어모델의 경우 모든 토큰이 이전토큰과의 어텐션만을 계산하기에 Sentence-level에서는 앞뒤 토큰 모두와의 attention을 계산하는 것 대비 차선책에 불과하다고 설명합니다.</p>
<blockquote>
<p>최선책: 이전,이후 토큰 모두와의 attention / 차선책: 이전 토큰과의 attention만 계산</p>
</blockquote>
<p>즉, 연구진들은 양방향을 띄는 Context의 중요성을 강조하며 이를 충족하는 모델이 BERT라고 주장한다.</p>
<p>BERT는 MLM(Masked Language Model)을 pre-training 목적으로 사용하서 단방향성 언어보델에서 생기는 문제를 완화 했다고 주장합니다.</p>
<p>MLM(Masked Language Model: 일부가 랜덤하게 마스킹된 입력 토큰과 해당 토큰으로만 구성 된 문장을 기반으로 해서 마스킹된 토큰의 원래 토큰을 예측하는 모델. 이를 통해 deep bidirectional Transformer를 가능하게 한다. 게다가 <strong>text-pair representations</strong>로 pre-train 하게되면 NSP(Next Sentence Prediction)또한 수행 가능 할것 이라고 주장 합니다.</p>
<hr>
<h1 id="2-related-work">2. Related Work</h1>
<p>기존의 language representation을 pre-train하는 방법론 중 일부를 간단하게 확인</p>
<h2 id="21-unsupervised-feature-based-approaches">2.1. <strong>Unsupervised Feature-based Approaches</strong></h2>
<p>수십 년 동안 널리 적용 가능한 단어 표현을 학습하는 것이 활발한 연구 분야였습니다. 여기에는 비신경망 방식과 신경망 방식으로 나뉘며 사전 훈련된 워드 임베딩은 현대 NLP 시스템의 필수적인 부분이 되었습니다.</p>
<p>이는 처음부터 학습한 임베딩보다 상당한 성능 향상을 제공합니다. 이러한 접근 방식은 문장 임베딩(sentence embedding)이나 단락 임베딩(paragraph embedding)과 같은 더 큰 단위로 방향으로 이어져 왔습니다.</p>
<p>BERT이전의 <strong>sentence representations</strong> 학습</p>
<ul>
<li>다음 문장 후보를 순위 매기기</li>
<li>이전 문장의 표현이 주어진 상태에서 다음 문장의 단어를 정방향으로 생성</li>
<li>denoising auto-encoder에서 파생</li>
</ul>
<p>ELMo와 같은 후속 모델의 경우 전통적인 워드 임베딩 연구에서 한단계 더 발전했고 정방향,역방향 언어 모델을 통해서 context-sensitive feature를 추출 해내는 방식(위에서 언급 한것 처럼 단순 Concat이기에 생성된 contextual representation 은 shallow bidirectional임)</p>
<p>해당 방식이 deep bidirectional 하지 않음에도 ELMo는 질문 답변, 감성 분석, 개체명 인식 등 여러 주요 NLP 벤치마크에서 최고 성능을 달성했습니다.</p>
<h2 id="22-unsupervised-fine-tuning-approaches">2.2. <strong>Unsupervised Fine-tuning Approaches</strong></h2>
<p>초기 feature-based 방식에 대한 연구는 라벨되지 않은 텍스트로 부터 워드 임베딩 파라미터를 pre-train하는 방향으로 수행되었습니다.</p>
<p>최근에는 contextual token representation을 만들어 내는 인코더가 pre-train 하고 supervised down stream task에 맞춰 파인 튜닝 되어 처음부터 학습하는데 많은 파라미터가 필요하지 않다고 설명합니다</p>
<h2 id="23-transfer-learning-from-supervised-data">2.3. <strong>Transfer Learning from Supervised Data</strong></h2>
<p>대규모 데이터셋에서의 전이 학습은 효과적이고 자연어 처리 뿐만 아니라 컴퓨터 비전에서도 사전 학습을 한 모델의 성능상 이점을 가진다고 이야기 합니다.</p>
<hr>
<h1 id="3-bert">3. BERT</h1>
<p>해당 논문에서는 모델을 Pre-training, Fine-tuning part 두 분류로 나눠 설명합니다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/54ae09c9-c068-48a0-9ae9-7671969ccc2e/image.png" alt=""></p>
<p>Pre-training part는 다양한 Pre-training task들의 라벨링 되지 않은 데이터로 초기 파라미터를 설정 하고 Fine-tunning part에서 downstream task들의 다벨링된 데이터를 이용해 파인 튜닝 됩니다. </p>
<p>이미지 처럼 항상 동일한 pre-trained model의 파라미터가 서로다른 downstream task의 초기 값으로 설정되고 이는 파인튜닝과정에서 조정 되어 사실상 동일한 구조를 사용하게 된다.</p>
<h2 id="model-architecture">Model Architecture</h2>
<p>BERT의 구조는 <strong>multi-layer bidirectional Transformer encoder</strong>로 양방향 트랜스포머 인코더를 여러층 쌓은 구조이다.(base: L=12, H = 768, A=12→ 110M  large: L=24, H=1024, A=16→ 340M)</p>
<p>base 모델의 파라미터수는 GPT와의 비교를 위해 동일하게 만들어 진행하였고 이를 통해서 GPT와의 차이점이자 GPT의 단점이 이전의 토큰과만의 어텐션을 계산하는 constrained self-attention이 사용되는 것을 확인 할수 있으며 BERT는 bidirectional self-attention을 사용합니다.</p>
<h2 id="inputoutput-representations"><strong>Input/Output Representations</strong></h2>
<p>BERT가 다양한 dowstream task들에 적용되기 위해서는 인풋이 애매해서는 안되며 이는 하나,한 쌍의 문장을 하나의 토큰 시퀀스로 표시되어야 합니다.(한쌍: Q&amp;A 형식의 질답 형태)</p>
<p>문장의 쌍의 하나의 시퀀스로 묶여야 하지만 이는 토큰 [SEP],[SEP]를 통해서 분리를 보여주고 모든 토큰에 대해서 어느 문장인지를 표시하는 학습된 임베딩을 추가합니다.</p>
<p>BERT에서 사용하는 tokenizer는 WordPiece 임베딩 방식입니다.</p>
<p>모든 문장의 처음은 [CLS]고 이를 통해 마지막 분류시에 분류에 대한 값이 해당 토큰의 결과</p>
<p>각각의 레이러를 통해 나타나는 임베딩을 E로 표시하고 <strong>tokenizer embedding, Segment Embedding</strong>(문장 쌍이라면 어디 속하는지), 그리고 <strong>Position Embedding</strong>을 진행 한다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/922f17b5-ac25-4b61-a9f3-c107e4339a6f/image.png" alt=""></p>
<blockquote>
</blockquote>
<p><strong>WordPiece(Token) Embedding</strong> : 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개
<strong>Segment Embedding</strong> : 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개
<strong>Position Embedding</strong> : 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개</p>
<h2 id="31--pre-training-bert">3.1.  Pre-training BERT</h2>
<h3 id="task-1-masked-lm">Task 1: Masked LM</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/2048040d-b4e6-4d14-aca4-df3bf5a968d7/image.png" alt=""></p>
<p>언어 모델이 아무런 제약조건 없이 <strong>Bidirectional</strong>하게 학습을 하게 되면 간접적으로 예측하려는 단어를 참조하게 되고, <strong>multi-layered</strong> 구조에서 해당 단어를 예측할 수 있기 때문이다.</p>
<p>연구진들은 이를 해결하기 위해 다음 단어가 무엇이 오는지 예측하는 학습이 아니라, 문장 내에서 무작위로 입력 토큰의 일정 비율을 마스킹하고, 그 다음 마스킹된 토큰들을 예측한다. 이를 줄여서 <strong>MLM</strong>이라 부른다.</p>
<p>이 경우에,마스크 토큰에 해당하는 마지막 hidden vector는 일반적인 언어모델 처럼 어휘를 통해 출력 소프트맥스로 주어지고 단어를 예측하게 된다.</p>
<p>BERT는 <strong>WordPiece</strong> 토큰의 15%를 무작위로 각 시퀀스에서 마스킹한다. 이때 BERT는 문장을 복구하는 것이 목표가 아니라 마스킹 된 토큰의 원본 예측이 목표가 된다.</p>
<p>이를 통해 양방향으로의 학습이 가능해지지만, fine-tuning 중에 <strong>[MASK]</strong> 토큰이 나타나지 않기 때문에(빈칸 단어 예측은 그냥 빈칸 단어로 주어지기 때문), 사전 훈련과 fine-tuning 사이에 불일치를 만들어내는 단점이 있습니다.</p>
<p>훈련 데이터를 생성할 때에 예측을 위해 무작위로 토큰의 15%를 선택한다. 만약 i 번째 토큰이 선택된다면, i 번째 토큰을</p>
<blockquote>
</blockquote>
<ul>
<li>80%는 [MASK] 토큰으로 교체</li>
<li>10%는 다른 토큰(단어)으로 교체</li>
<li>10%는 변형 없이 사용</li>
</ul>
<p>결과적으로 모델은 변경이 된 단어에 대해 적합한지를 판단해 예측을 하게 된다.</p>
<h3 id="task-2-next-sentence-predictionnsp">Task 2: Next Sentence Prediction(NSP)</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/cd0aea83-67a3-4c05-a731-29cfcd8ff739/image.png" alt=""></p>
<p>위의 학습과 동시에 BERT는 Q&amp;A,NLI(Next Sentence Inference)에서 사용되기 위해 두개의 문장을 제공하고 문장들간의 관계를 확인하는 훈련도 거치게 된다. 이때 문장들은 1/2 확률로 서로 이어지는 문장으로 설정되어 사용 됩니다.</p>
<p>추가적으로 해당 구분과정에서 [SEP] 토큰이 사용된다. 각 문장이 다른 문장임을 보여주기 위해서 각 문장의 마지막에 [SEP] 토큰을 넣습니다.</p>
<p>[CLS]토큰의 경우에는 분류 문제를 해결하기 위해 추가된 토큰이며 문장이 이어지는 문장인지에 대한 예측을 하게 된다.</p>
<p>NSP와 MLM은 각자의 손실값을 합하여 학습이 동시에 이루어 지는 구조</p>
<p>뒤의 Ablation Study에서는 해당 NSP 훈련을 하지 않을 경우 모델의 성능이 많이 감소한다고 명시되어있습니다.</p>
<h2 id="32-fine-tuning-bert">3.2. Fine-tuning BERT</h2>
<p>사전 학습된 BERT를 downstream task들의 데이터를 통해 추가로 학습시켜 검증과 테스트를 거치게 된다.</p>
<p>특히나 텍스트 쌍이 포함되는 경우 일반적으로 각각의 텍스트 쌍을 인코딩한 이후 bidirectional cross attention를 수행하고 이는 Transformer를 통해 Self-Attention 매커니즘을 사용해서 두 단계를 통합하며 이를 효과적으로 수행하게 됩니다.</p>
<p>이를 통해 BERT는 적절한 입출력을 교체하는 방식으로 Fine-tuning을 하게되고 논문에서는 네 개의 예시를 설명합니다.</p>
<h3 id="1--sentence-pairs-in-paraphrasing">1)  sentence pairs in paraphrasing</h3>
<ul>
<li>의미가 동일하거나 매우 유사하지만 다른 표현을 통해 표현하는 한 쌍의 문장을 입력받는 구조</li>
</ul>
<h3 id="2-hypothesis-premise-pairs-in-entailment">2) hypothesis-premise pairs in entailment</h3>
<ul>
<li>주어진 전제와 가설간의 함의 관계에 대한 분류를 위한 형태</li>
</ul>
<h3 id="3-question-answering">3) question answering</h3>
<ul>
<li>질문과 답이라는 두가지 텍스트 쌍을 입력 받는 구조</li>
</ul>
<h3 id="4-sequence-tagging-text-pair-classification">4) sequence tagging, text pair classification</h3>
<ul>
<li>대표적으로 문장의 각 단어에 품사를 태깅하는 품사 태깅 작업과 개체를 태깅하는 개체명 인식 작업이 있다. 출력층에서는 입력 텍스트의 각 토큰의 위치에 밀집층을 사용하여 분류에 대한 예측을 하게 된다.</li>
<li>text pair classificationd의 경우 문장 간의 관계를 예측하는 것이다.</li>
</ul>
<hr>
<h1 id="4-experiments">4. Experiments</h1>
<p>BERT는 총 11개의 NLP 분야에서 학습을 시켰고 이들을 종합해서 평가합니다.직전에 나온 모델이 ELMO와 GPT-1이기 때문에 둘 과의 비교위주의 내용이 담겨 있다.</p>
<h2 id="41-glue">4.1. GLUE</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3ffd9f43-26f0-47de-a51a-94c6973489d2/image.png" alt=""></p>
<p><strong>General Language Understanding Evaluation</strong>의 약자로 “강건하고 범용적인 자연어 이해 시스템의 개발”이라는 목적을 가지고 제작된 데이터셋 입니다.</p>
<p>Input sequence가 입력으로 들어가게되면 처음의 [CLS] 토큰에서 Hidden vector가 출력되고 이를 GLUE task에 적합하게  가중치를 곱한뒤 softmax를 통해서 결과를 도출해 냅니다.</p>
<h2 id="42-squad">4.2. SQuAD</h2>
<table>
<thead>
<tr>
<th><img src="https://velog.velcdn.com/images/dr_pepper/post/b6bae101-7d3e-4778-84da-fcc96e24a7a9/image.png" alt=""></th>
<th><img src="https://velog.velcdn.com/images/dr_pepper/post/ee73c392-ce36-478d-aff4-deab82140f50/image.png" alt=""></th>
</tr>
</thead>
</table>
<p><strong>Stanford Question Answering Dataset</strong>의 약자로 Q&amp;A를 위해 구성된 데이터셋으로 질문에 대한 정답을 답변에서 찾아내는 방법으로 진행</p>
<p>주어진 문장(Q+A)에서 어디서부터 어디까지가 정답에 해당하는 영역인지를 예측하는 모델을 학습한뒤 평가하며 주어진 문장내의 토큰이 정답의 시작과 끝 토큰이 될 확률을 구하는 것으로 확률은 다음과 같이 계산이 가능 합니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/90019c7b-bc34-426a-9c86-2381a4213161/image.png" width="50%" height="%"></p>
<p><strong>SQuAD 2.0</strong>은 주어진 문장에서 답이 없는경우를 포함하고 있어 SQuAD보다는 조금 까다로운 Dataset이다. 그리고 그런 경우에는 [CLS]토큰에 결과가 나타나게 된다.</p>
<p>인간의 능력에는 미치지 못하였지만, 기존의 baseline에 비해서는 매우 우수한 성능을 확인할 수 있습니다. 이것을 예측하는 수식은 답변이 있는 문장이라면, 기존 수식과 동일하게 진행합니다.</p>
<h2 id="43-swag">4.3. SWAG</h2>
<img src="https://velog.velcdn.com/images/dr_pepper/post/d1118ef1-6020-45dc-9175-d3cc350d73f7/image.png" width="40%" height="%">

<p><strong>The Situations With Adversarial Generations</strong>의 약자로 라고 불리는 방식은 앞 문장이 주어지고, 보기로 4 문장이 주어진다. 그 주어진 문장중에서 가장 잘 어울리는 문장을 찾는 sentence pair inference task 이다.</p>
<p>Fine tuning 하기 위해, 앞 뒤 문장중 가능한 경우의 수의 문장들을 묶어 하나의 문장으로 만들고 그 이후 GLUE를 학습할때와 동일하게 <strong>[CLS]</strong> 에 대응하는 C토큰과 A 문장 이후에 나타나는 문장의 token의 dot product 한다. 이를 score 로 삼고, softmax를 통해 결과 값을 도출한다.</p>
<h1 id="5-ablation-studies">5. Ablation Studies</h1>
<p>Ablation이란 학습이 사용되는데 사용되는 요소의 일부를 제거하는 것으로 이를 통해 제거한 부분이 전체적인 시스템의 성능에 기여하는 바를 연구합니다.</p>
<p>이는 제안한 요소가 모델에 어떠한 영향을 미치는지 확인하고 싶을 때, 이 요소를 포함한 모델과 포함하지 않은 모델을 비교하는 것을 말합니다.</p>
<p>여기서는 NSP(Next Sentence Prediction), model size, feature-based Approach with Bert 이렇게 세가지로 나눠서 Ablation Study를 진행했습니다.</p>
<h2 id="51--effect-of-pre-training-tasks">5.1.  Effect of Pre-training Tasks</h2>
<img src="https://velog.velcdn.com/images/dr_pepper/post/67ec25ee-8bc5-4b1f-b014-2d643a4b619f/image.png" width="40%" height="%">
NO NSP: MLM으로만 학습하고 NSP는 사용하지 않고 학습한 경우, QA관련 성능이 하락하는 것을 볼수 있습니다(SQuAD)

<p>LTR &amp; No NSP: 순방향의 언어모델을 사용하고 NSP를 사용 하지 않은 경우 모든 영역에서의 성능이 하락하는 모습을 볼수 있습니다. 다만 BiLSTM을 추가해서서 양방향 모두를 고려하는 경우 성능이 다시 상승하는 모습으로 보아 bidirectional한 요소가 성능에 영항을 미치는 것을 파악할 수 있습니다.</p>
<h2 id="52-effect-of-model-size">5.2. Effect of Model Size</h2>
<img src="https://velog.velcdn.com/images/dr_pepper/post/42291221-ebc6-4b8e-98bf-9d29898e188d/image.png" width="40%" height="%">
모델의 크기와 성능의 영항을 알아볼수 있는 결과로 모델의 크기와 성능이 정비례 하는 것을 확인 할수 있습니다.

<h2 id="53-feature-based-approach-with-bert">5.3. Feature-based Approach with BERT</h2>
<img src="https://velog.velcdn.com/images/dr_pepper/post/6353bbdd-e8b2-4891-ae73-14b19bc907b2/image.png" width="40%" height="%">
지금 까지 제시된 결과들은 Fine-tunning approach를 사용했지만 BERT를 feature-based approach의 경우에도 특정 이점을 가지고 있습니다 

<ol>
<li>task-specific model의 추가를 통해 Transformer 인코더로 쉽게 표현 가능</li>
<li>사전 계산을 통해 이를 기반으로 저 코스트 모델을 여러번 사용하여 코스트상의 이득을 가져 올수 있습니다.</li>
</ol>
<h1 id="6-conclusion">6. Conclusion</h1>
<ul>
<li>언어모델에서 unsupervised pre-training와 transfer learning은 매우 중요한 개념</li>
<li>deep unidirectional 아키텍처를 사용함으로서 동일한 pre-trained 모델이 다양한 NLP task를 더 효율적으로 처리할 수 있도록 하는데 기여 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SkipNet(2017): Learning Dynamic Routing in Convolutional Networks]]></title>
            <link>https://velog.io/@dr_pepper/SkipNet2017-Learning-Dynamic-Routing-in-Convolutional-Networks</link>
            <guid>https://velog.io/@dr_pepper/SkipNet2017-Learning-Dynamic-Routing-in-Convolutional-Networks</guid>
            <pubDate>Wed, 13 Nov 2024 06:38:15 GMT</pubDate>
            <description><![CDATA[<p>오늘 리뷰할 논문은 skipnet이다. 
layer를 건너뛰어서 연산량을 줄이는 아니디어를 사용했다는 점이 마음에 들었다.</p>
<p>논문의 저자는 resnet의 아이디어를 차용해서 skipnet을 만들었다고 한다.
residual block 앞에 skip-gate를 두어 해당 블럭을 skip 할지말지 정하는 것이다.</p>
<p>그런데 논문을 읽으면서 궁금했던 점이 skip 할지말지에 대한 정보는 continuous한 값이 아니기 때문에 backpropagation을 어떻게 적용할까? 였다.</p>
<p>리뷰시작!</p>
<p><img src="https://velog.velcdn.com/images/sa090180/post/9991f697-3a03-4f18-b878-c911c209978c/image.png" alt=""></p>
<p>$X^i$는 i번째 layer의 초기값이다.
$G^i(X^i)$는 layer를 통과할지 정해주는 확률 값이다.
Training에는 GD를 사용하여 학습을 해야하기 때문에 soft-gating방식을 사용했다고 한다. (위의 방식이 soft-gaing방식)</p>
<p>그렇다면 정확도와 연산량을 모두 고려한 loss는 어떻게 만들 수 있을까?</p>
<p><img src="https://velog.velcdn.com/images/sa090180/post/0499d3c7-8526-4393-9cbe-f81fd93f7040/image.png" alt=""></p>
<p>$F_\theta$는 네트워크의 layer들이다. ($F_\theta$는 gating module을 포함함)</p>
<p>여기서 $\theta$는 모델의 parameter를 의미한다.</p>
<p>g는 gate의 값으로 0 또는 1이 나올 수 있습니다.  </p>
<p>전체 objective function은 다음과 같습니다. 
<img src="https://velog.velcdn.com/images/sa090180/post/65b77545-0488-4077-a952-d1b858ca2c4f/image.png" alt=""></p>
<p>L은 cross entropy loss고 $R_i$는 i번째 layer의 연산량을 의미합니다. 
 $g_i$ 는 i번째 layer의 skip gate값을 의미합니다. </p>
<blockquote>
<p>$g_i$ = 0 -&gt; skip
$g_i$ = 1 -&gt; excute</p>
</blockquote>
<p>스킵한다 -&gt; $g_i$ = 0 -&gt; $R_i$ = 1
스킵하지 않는다 -&gt; $g_i$ = 1 -&gt; $R_i$ = 0</p>
<p>$R_i$ 값(computation 이득에 따른 보상) 이 항상 1일 수 있는 이유는 각 block이 residual block앞에 skip-gate가 붙어있기 때문 ( 연산량이 동일하다. )</p>
<p>스킵을 한다면 $R_i$ = 1이기 때문에 cross entropy loss에서 값을 뺴주는 것을 볼 수 있습니다. 
스킵한다면 보상을 주는거죠</p>
<p><img src="https://velog.velcdn.com/images/sa090180/post/3b6487b2-ca58-44fc-b22a-fe9cbcf12e83/image.png" alt=""></p>
<ul>
<li>min cross entropy - skip한 layer에 따른 보상의 평균</li>
</ul>
<p>결과적으로 $J$($\theta$) 를 최적화시킨다는 것은 정확도와 computation양을 고려한 모델을 만든다는 것을 의미하게 되는 것이죠</p>
<p>우리는 이 식을 최적화해야 합니다. 
하지만 loss에 있는 $g_i$는 이산값을 가지죠.</p>
<p><strong>미분이 불가능한 이 식을 사용해서 어떻게 weight update를 할까요?</strong></p>
<p>이 논문에서는 Training과 Test의 예측과정에 차이를 두는 방식을 사용합니다.</p>
<p><img src="https://velog.velcdn.com/images/sa090180/post/faf78a60-8860-4c1e-878e-f8460f2c6575/image.png" alt=""></p>
<p>위의 사진이 모델의 구조입니다. </p>
<p>저자는 이 residual block안에 softmax를 넣고 softmax의 두번째 값을 skip할 확률 값으로 씁니다. </p>
<p><img src="https://velog.velcdn.com/images/sa090180/post/5e7c83d2-8ff6-40ca-a937-da5ce4e0ae70/image.png" alt=""></p>
<p>확률값은 미분이 가능하기 때문에 GD로 학습이 가능한거죠</p>
<p>그리고 Test환경에서는 조건문을 추가해서 skip-gate의 확률이 일정 threshold값(논문에서는 0.5)을 넘기면 이 layer를 skip하는 방법을 씁니다. </p>
<p>이상으로 포스팅 마치겠습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SENet(2018), Squeeze-and-Excitation Networks]]></title>
            <link>https://velog.io/@dr_pepper/SENet2018-Squeeze-and-Excitation-Networks</link>
            <guid>https://velog.io/@dr_pepper/SENet2018-Squeeze-and-Excitation-Networks</guid>
            <pubDate>Wed, 13 Nov 2024 05:52:06 GMT</pubDate>
            <description><![CDATA[<h1 id="0-senet">0. SENet</h1>
<p>SENet은 기존 CNN에 Attention 모듈을 추가하여 성능을 개선한 방법이다. 이러한 Attention 기능은 크게 정보를 압축하는 Squeeze 모듈과 중요도를 계산하는 Excitation 모듈로 구성했다.</p>
<h1 id="1-기존-방법의-문제점">1. 기존 방법의 문제점</h1>
<p>SENet이 해결하고자 했던 기존 CNN 방식의 문제점에 대해 살펴보겠다.</p>
<p>[그림1] CNN의 문제점
<img src="https://velog.velcdn.com/images/dr_pepper/post/a34f3527-2e5d-4303-abb5-a68cba9b609a/image.png" alt=""></p>
<p>위 그림은 입력 이미지를 CNN으로 처리하여 feature map을 추출한 후, 채널별로 그 의미를 나타낸 것이다. 이렇게 추출한 feature map에는 입력 이미지의 위치 정보와 객체 클래스 정보가 포함되어 있어야 한다. 위의 예시에서는 첫 번째 채널에 왼쪽 위의 태양 정보가, 두 번째 채널에 오른쪽 위의 나무 정보가 들어있다고 가정했다.</p>
<p>그러나 우리가 목표로 하는 정답은 &quot;가운데에 강아지가 있다&quot;는 정보이다. 따라서 해당 정보 외에 나머지 정보는 불필요하다. 따라서 3번 채널에만 &quot;집중&quot;하고 나머지 채널의 정보는 무시하는 기능이 유리할 것이다.</p>
<p>하지만 CNN에는 이러한 &quot;집중&quot;과 &quot;무시&quot; 기능이 없다. 물론 Convolution, Activation, Pooling 등의 연산 과정에서 중요한 정보가 강조되긴 하지만, 특정 정보에 명시적으로 높은 가중치를 부여해 연산하는 기능은 없다. 만약 CNN에 중요한 정보에 집중할 수 있는 기능을 추가한다면, 성능 개선 효과를 기대할 수 있을 것이다.</p>
<h1 id="2-제안-방법">2. 제안 방법</h1>
<p>앞서 CNN의 한계점에 대해 알아보았다. 이번에는 중요한 부분에 집중할 수 있도록 설계된 SENet의 방법을 살펴보겠다.</p>
<h2 id="2-1-senet의-전체적인-구조">2-1. SENet의 전체적인 구조</h2>
<h3 id="2-1-1-채널별-중요도-적용하기">2-1-1. 채널별 중요도 적용하기</h3>
<p>이제, 중요한 채널에는 큰 가중치를, 중요하지 않은 채널에는 작은 가중치를 부여하고자 한다.</p>
<p>[그림2] SENet의 큰 그림
<img src="https://velog.velcdn.com/images/dr_pepper/post/62d970f1-aa42-4a47-923d-7160a5ac949d/image.png" alt=""></p>
<p>왼쪽은 CNN으로 추출된 feature map이다. 각 채널을 분리하여 각각의 중요도를 계산하고, 그 값을 곱해준다. 이 과정으로 중요도가 높은 채널의 값은 커지고, 중요도가 낮은 채널의 값은 작아진다. 이렇게 계산된 채널들을 다시 합쳐 원래 feature map의 크기로 복원한다.</p>
<p>이처럼 새로운 feature map은 중요한 정보는 강조되고, 그렇지 않은 정보는 약화된다. 그림에서 오른쪽의 Attention이 적용된 feature map을 보면 중요한 채널은 진해지고, 그렇지 않은 채널은 흐려진 것을 확인할 수 있다.</p>
<h3 id="2-1-2-채널별-중요도-계산-방법">2-1-2. 채널별 중요도 계산 방법</h3>
<p>이제 핵심은 채널별 중요도 값을 구하는 기능이다.</p>
<p>[그림3] SE 모듈의 기능별 구성
<img src="https://velog.velcdn.com/images/dr_pepper/post/5791fa69-35c5-40d6-bb23-328d2d33dc47/image.png" alt=""></p>
<p>먼저, feature map의 각 채널은 WxH 크기이므로 정보량이 많으므로, 이를 하나의 값으로 압축해야 한다. 이렇게 압축된 정보는 위치 정보는 사라지고, 물체 정보만 남아 있다고 볼 수 있다.</p>
<p>다음으로, 이 값을 사용해 각 채널의 중요도를 계산한다. SENet 논문에서는 다음과 같이 간결한 그림으로 표현한다.</p>
<p>[그림4] SENet
<img src="https://velog.velcdn.com/images/dr_pepper/post/29ef2b9d-bcf3-4d6a-b46c-f85b3e2b4014/image.png" alt=""></p>
<p>첫 번째 연산인 Ftr은 일반적인 CNN 연산을 의미한다. 이제 WxHxC 크기의 feature map에 대해 Attention을 적용하게 된다. 이 과정은 Squeeze와 Excitation 과정으로 나뉜다.</p>
<p>Squeeze는 정보 압축 단계이며, Excitation은 중요도 계산 단계이다.</p>
<h2 id="2-2-squeeze-정보-압축하기">2-2. Squeeze: 정보 압축하기</h2>
<p>[그림5] Squeeze 단계
<img src="https://velog.velcdn.com/images/dr_pepper/post/c9268cfd-1d0b-4721-bfb9-bf9a0b707bf8/image.png" alt=""></p>
<p>Squeeze 단계는 각 채널의 정보를 하나의 값으로 압축한다. WxH 크기의 정보를 평균값으로 대표하는 방식(Global Average Pooling)을 사용한다. 수식으로 표현하면 다음과 같다.</p>
<p>[그림6] Global Average Pooling
<img src="https://velog.velcdn.com/images/dr_pepper/post/b11c5247-ecc4-4115-8713-fe317ad313ef/image.png" alt=""></p>
<p>이 수식은 각 채널에서 전체 공간적 영역에 대한 평균을 계산하여, feature map을 고정된 크기의 벡터로 축소하는 기법이다. 이를 통해, Squeeze 기능은 위치 정보를 제외하고 물체 정보만 남기는 역할을 한다.</p>
<h2 id="2-3-excitation-중요도-계산하기">2-3. Excitation: 중요도 계산하기</h2>
<p>Squeeze 기능을 통해 채널별 물체 정보를 하나의 값으로 표현했다. 이제 Excitation 단계에서 이 값을 사용해 채널별 중요도를 계산해야 한다.</p>
<p>[그림7] Excitation 단계
<img src="https://velog.velcdn.com/images/dr_pepper/post/34dad0a2-e2a1-461b-89df-833e54a32cd5/image.png" alt=""></p>
<p>위 그림은 각 채널의 평균값을 통해 채널별 중요도를 계산하는 과정이다. SENet에서는 fully connected, ReLU, Sigmoid를 사용해 이 과정을 구성했다.</p>
<p>[그림8] Excitation 연산
<img src="https://velog.velcdn.com/images/dr_pepper/post/1527f914-8299-4d00-a565-98736951afcb/image.png" alt=""></p>
<ol>
<li>Squeee 단계에서 계산한 평균값 z</li>
<li>z에 첫 번째 FC layer의 가중치인 W1을 곱하여 차원 축소</li>
<li>ReLU를 적용하여, 결과 값이 음수일 경우 0으로 만들고 양수는 그대로 두어 비선형성을 부여</li>
<li>W2을 곱하여 채널 중요도를 반영하는 값 계산</li>
<li>Sigmoid 함수를 적용하여 0과 1사이의 값으로 변환, Attention Score 계산</li>
</ol>
<h2 id="2-4-전체-과정">2-4. 전체 과정</h2>
<p>마지막으로, Squeeze와 Excitation을 결합해 SE 모듈의 전체 과정을 살펴보겠다.</p>
<p>[그림9] SE 모듈의 전체 구성
<img src="https://velog.velcdn.com/images/dr_pepper/post/64f0316b-9b89-4166-81d9-301e3be5e318/image.png" alt=""></p>
<p>먼저, 입력 feature map이 SE 모듈로 입력되면, 채널별로 분리되어 각 채널의 중요도 즉, Attention Score가 계산된다. 이렇게 계산된 Attention Score는 다시 원래 feature map에 곱해져 중요한 정보는 강화되고, 중요하지 않은 정보는 약화된다. SE 모듈은 CNN 중간에 삽입되어, feature map의 채널별 중요도를 조정해 필요한 정보에 집중할 수 있도록 돕는 역할을 한다.</p>
<h1 id="3-효과">3. 효과</h1>
<p>지금까지 SENet의 각 기능을 살펴봤다. SE 모듈은 CNN의 중간에 삽입될 수 있으며, 기존 CNN 모델에 SE를 적용하면 성능에 어떤 영향을 미치는지 알아보기 위해 세 가지 문제에서 실험을 진행했다.</p>
<h2 id="3-1-이미지-분류-image-classification">3-1. 이미지 분류 (Image Classification)</h2>
<p>[그림10] ImageNet 실험 결과
<img src="https://velog.velcdn.com/images/dr_pepper/post/4ed01671-e9b8-42b7-a644-cab10a38e271/image.png" alt=""></p>
<p>위 표에서 original 열은 기존 CNN을 사용한 성능을, SENet 열은 SE 모듈을 추가했을 때의 성능을 나타낸다. SE 모듈을 적용했을 때 성능이 향상되는 것을 볼 수 있다.</p>
<p>[그림11] CIFAR10 실험 결과
<img src="https://velog.velcdn.com/images/dr_pepper/post/6dd80de4-e292-4357-9c7b-78dc147b124e/image.png" alt=""></p>
<p>CIFAR10 데이터셋에서도 SE 모듈을 추가했을 때 기존 CNN 대비 성능이 개선됐다.</p>
<p>[그림12] CIFAR100 실험 결과
<img src="https://velog.velcdn.com/images/dr_pepper/post/0feec43a-c621-44b1-96e4-9814467e4ebd/image.png" alt=""></p>
<p>CIFAR100 실험 결과 또한 SE 모듈을 추가했을 때 성능 향상을 확인할 수 있다. 이로써 이미지 분류 문제에서 SE 모듈을 추가하면 성능이 개선된다고 결론 내릴 수 있다.</p>
<h2 id="3-2-장면-분류-scene-classification">3-2. 장면 분류 (Scene Classification)</h2>
<p>[그림13] Place365 실험 결과
<img src="https://velog.velcdn.com/images/dr_pepper/post/e557661f-b28f-41e4-8b8f-5df594f417db/image.png" alt=""></p>
<p>Places365 데이터셋에 대해 ResNet152와 SE-ResNet-152의 결과를 비교했을 때, SE 모듈을 적용한 SE-ResNet-152 모델의 성능이 더 우수한 것을 알 수 있다. 비록 한 가지 데이터셋에서만 실험했지만, SE 모듈을 통해 성능이 개선되는 효과를 확인할 수 있다.</p>
<h2 id="3-3-객체-탐지-object-detection">3-3. 객체 탐지 (Object Detection)</h2>
<p>[그림14] COCO object detection 실험 결과
<img src="https://velog.velcdn.com/images/dr_pepper/post/a4d21caf-31da-460e-aef6-d956598213fb/image.png" alt=""></p>
<p>COCO 데이터셋에서 ResNet-50과 ResNet-101 모델에 SE 모듈을 추가한 경우를 비교했을 때, 두 모델 모두 SE 모듈을 적용했을 때 성능이 개선되는 것을 볼 수 있다.</p>
<h1 id="4-결론">4. 결론</h1>
<p>먼저, 기존 CNN 방법의 문제점을 살펴봤다.
CNN에서는 feature map의 중요한 정보에 더 높은 가중치를 부여하는 Attention 기능이 부족했다. 이를 해결하기 위해 SENet에서는 CNN의 중간에 삽입할 수 있는 Attention 모듈을 제안했다. SE Attention 모듈은 두 가지 주요 구성 요소인 Squeeze 모듈과 Excitation 모듈로 이루어져 있다. Squeeze 모듈은 Global Average Pooling 연산을 사용하여 정보를 채널별로 압축하여 표현한다. Excitation 모듈은 정답으로부터 중요한 정보를 계산하기 위해 Fully Connected 레이어와 ReLU, Sigmoid 함수를 결합하여 구현된다. 이러한 SE 모듈은 기존 CNN 모델에 삽입될 경우, 다양한 문제에서 성능을 개선하는 데 효과적임을 보여줬다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Mission: Impossible Language Models]]></title>
            <link>https://velog.io/@dr_pepper/Mission-Impossible-Language-Models</link>
            <guid>https://velog.io/@dr_pepper/Mission-Impossible-Language-Models</guid>
            <pubDate>Wed, 13 Nov 2024 04:24:50 GMT</pubDate>
            <description><![CDATA[<hr>
<h2 id="개요">개요</h2>
<p>Chomsky를 포함한 여러 이론가들은 <strong>대형 언어 모델(LLMs)이</strong> 가능한 인간 언어와 불가능한 언어를 동일하게 학습할 수 있다고 주장하였음. 이 주장은 <strong>언어 모델이 언어학 연구에서 유효한 도구가 되지 못한다는 결론</strong>을 뒷받침하는데, 본 논문에서는 이러한 주장의 타당성을 실험적으로 검토하고자 함. 연구팀은 <strong>인간에게 불가능한 것으로 간주되는 여러 유형의 인공 언어를 설계하고</strong>, 이 언어들을 GPT-2 모델이 학습할 수 있는지 조사함으로써 이론을 검증하고자 함.</p>
<hr>
<h2 id="연구-배경">연구 배경</h2>
<ul>
<li><p><strong>불가능한 언어 개념</strong>: 논문에서는 언어학적으로 불가능하다고 여겨지는 규칙을 사용해 불가능한 언어를 설계하였고, 이들 불가능한 언어와 가능한 언어 사이에 <strong>&quot;불가능성 연속체(impossibility continuum)&quot;</strong> 개념을 제시함으로써 언어의 복잡성과 학습 가능성을 평가하고자 함.</p>
</li>
<li><p><strong>연구 질문</strong>: LLM이 가능한 언어와 불가능한 언어를 동일한 수준으로 학습할 수 있는가? 인간이 학습하지 못하는 언어의 규칙을 GPT-2가 학습할 수 있는가?</p>
</li>
</ul>
<hr>
<h2 id="방법론">방법론</h2>
<p>연구팀은 세 가지 실험을 통해 GPT-2의 학습 방식을 비교함으로써 LLM이 불가능한 언어 규칙을 학습할 수 있는지 조사하였음.</p>
<ol>
<li><p><strong>불가능한 언어 세트 생성 및 학습 실험</strong></p>
<ul>
<li>연구팀은 불가능한 언어를 세 가지 주요 카테고리로 정의하고 각각의 언어를 학습시키는 실험을 수행함.<ul>
<li><strong>SHUFFLE 언어</strong>: 문장의 단어 순서를 무작위로 섞는 언어.</li>
<li><strong>REVERSE 언어</strong>: 문장을 전체 혹은 부분적으로 반전시키는 언어.</li>
<li><strong>HOP 언어</strong>: 동사의 수식어 위치를 특정 규칙에 따라 변경하는 언어.</li>
</ul>
</li>
<li>각각의 언어를 학습하는 모델의 효율성을 테스트셋의 퍼플렉시티 (모델이 다음 단어를 얼마나 잘 예측할 수 있는지를 수치화한 값) 를 통해 평가함.
<img src="https://velog.velcdn.com/images/dr_pepper/post/1a4b28d2-ee4e-4541-9bf5-15072ef99cb0/image.png" alt=""></li>
</ul>
</li>
<li><p><strong>서프라이즈(Surprisal) 테스트</strong></p>
<ul>
<li>모델이 불가능한 언어 규칙을 적용했을 때 특정 토큰의 위치를 얼마나 잘 예측하는지 확인하기 위해 서프라이즈 값을 계산함.</li>
<li>모델이 가능한 언어와 불가능한 언어에서 예측하는 방식을 비교함으로써 불가능한 언어 규칙의 학습이 어려웠음을 확인함.</li>
</ul>
</li>
<li><p><strong>내부 메커니즘 분석</strong></p>
<ul>
<li>&quot;인과 추론 분석(Causal Abstraction Analysis)&quot;을 통해 모델이 특정 문법 규칙을 학습할 때 사용하는 내부 메커니즘을 조사함.</li>
<li>모델이 불가능한 언어 규칙을 학습할 때 복잡한 내부 메커니즘을 만들어내야 했음을 확인함.</li>
</ul>
</li>
</ol>
<hr>
<h2 id="실험-결과">실험 결과</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/51424e83-450a-4f1a-a30b-e038eabc5045/image.png" alt=""></p>
<ul>
<li><strong>학습 효율성</strong>: 가능한 언어(자연어)에서 GPT-2 모델이 불가능한 언어보다 더 효율적으로 학습하였으며, 이는 퍼플렉서티와 학습 속도에서 뚜렷하게 드러남.</li>
<li><strong>서프라이즈 테스트</strong>: 가능한 언어에서는 예상 위치에 토큰이 올 가능성이 높았으나, 불가능한 언어 규칙에서는 높은 서프라이즈 값을 보여 예측이 어려웠음을 확인함.</li>
<li><strong>내부 메커니즘 분석</strong>: 가능한 언어 규칙의 경우 적은 계층(layer)과 단순한 메커니즘으로 예측할 수 있었으나, 불가능한 언어 규칙의 경우 복잡한 내부 메커니즘을 통해 학습해야 했음.</li>
</ul>
<hr>
<h2 id="결론-및-시사점">결론 및 시사점</h2>
<p>이 연구는 LLM이 불가능한 언어를 인간 언어와 동일하게 학습할 수 없음을 입증하며, 기존 이론가들의 주장에 대한 도전 과제를 제시함. 또한, <strong>LLM이 언어 연구에서 유용한 도구가 될 수 있는 가능성을 보여주었으며</strong>, 모델의 학습 방식이 인간의 언어 학습과 어떻게 다른지에 대한 시사점을 제공함.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[FCN : Fully Convolutional Networks for Semantic Segmentation]]></title>
            <link>https://velog.io/@dr_pepper/FCN-Fully-Convolutional-Networks-for-Semantic-Segmentation</link>
            <guid>https://velog.io/@dr_pepper/FCN-Fully-Convolutional-Networks-for-Semantic-Segmentation</guid>
            <pubDate>Tue, 12 Nov 2024 16:40:04 GMT</pubDate>
            <description><![CDATA[<p>오늘 review해 볼 논문은 2015년도에 나온 Fully Convolutional Networks for Semantic Segmentation입니다!</p>
<blockquote>
<p>논문 제목 : Fuuly Convolutional Netwokrs for Semanctic Segmentation
저자 : jonathan Long et al.
학회 : CVPR2015
게재 년도 : 2015년
인용수 : 52,590회</p>
</blockquote>
<h3 id="0필수-개념">0.필수 개념</h3>
<p>먼저 필수 개념에 대해서 알아보고 시작하겠습니다~</p>
<p>Fully Conovlutional Networks는 Semantic Segmentation을 위한 Networks인데요,
여기서 Semantic Segmentation이 뭔지 알아보고 가겠습니다!</p>
<h4 id="image-segmentation이란">Image Segmentation이란?</h4>
<blockquote>
<p>정의 : 이미지 내에 있는 각 물체(object)들을 의미 있는(semantic) 단위로 분할(segmentation)하는 작업을 의미합니다
-&gt;각 pixel마다 클래스(class)를 할당하는 작업입니다</p>
</blockquote>
<ul>
<li>일반적인 분류(classification)에서는 단일 이미지를 하나의 클래스로 분류합니다</li>
<li>분할(segmentation)에서는 각 픽셀마다 하나의 클래스로 분류합니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/eb067f9a-37e1-4e1b-a9e1-e474d5d6670b/image.png" alt="">
Semantic segmentation을 진행하면, 이미지가 주어졌을 때 (높이 X 너비 X 1) 크기를 가지는 한 장의 분할 맵(segmentation map)이 생성됩니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/f6361658-6e54-482e-ac29-70426fc768ea/image.png" alt=""></li>
</ul>
<h4 id="semantic-segmentation이란">Semantic Segmentation이란?</h4>
<blockquote>
<p>정의 : 이미지에서 각 pixel의 의미(class)를 예측하는 컴퓨터 비전 기술
-&gt;예를 들어, 도로 장면에서 각 pixel을 하늘, 도로, 차량, 보행자와 같은 class로 분류하여 이미지를 pixel 단위로 분할합니다
-&gt; 이미지의 각 pixel을 특정 class에 할당하는 작업으로, 이미지에서 어떤 객체가 어디에 있는지를 파악하는데 유용합니다.</p>
</blockquote>
<ul>
<li>이미지의 모든 pixel을 특정 class에 할당합니다
  -&gt; 예를 들어, 고양이 이미지에서는 모든 고양이 pxiel을 하나의 class로, 배경 pixel은 다른 class로 분류합니다. </li>
<li>semantic segmentation은 같은 class의 객체들을 하나의 그룹으로 묶으며, 객체의 개별적 경계를 구분하지 않습니다
  -&gt; 예를 들어, 여러 명의 사람이 있을 때 모든 사람을 같은 &#39;사람&#39; class로 지정하고 개별 사람을 구분하지 않습니다.</li>
</ul>
<h4 id="cnn">CNN</h4>
<blockquote>
<p>CNN에서는 filter 또는 kernel이라고 부르는 것을 사용합니다</p>
</blockquote>
<ul>
<li>각 filter는 입력에서 특정한 특징(feature)를 잡아내어 특징맵(feature map)을 생성합니다</li>
<li>하나의 filter는 sliding 하면서 convolution 연산을 통해 feature map을 계산합니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/f3dd9c9c-2e6e-4e90-864a-c4f04fca2760/image.png" alt=""></li>
<li>일반적으로 CNN 분류 모델에서 깊은 layer로 갈수록 채널의 수가 증가하고, 너비와 높이는 감소합니다</li>
<li>convolution layer의 서로 다른 fitler들은 각각 적절한 특징(feture) 값을 추출하도록 학습됩니다</li>
</ul>
<h4 id="max-pooling">Max Pooling</h4>
<blockquote>
<p>CNN 분류 모델에서 중요한 정보는 유지한 상태로 해상도(너비와 높이)를 감소시키는 방법 중 하나입니다</p>
</blockquote>
<ul>
<li>가장 큰값을 가지는 원소(element)만 남깁니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/94bc4ddf-dceb-4938-88be-d9ebbb33b846/image.png" alt=""></li>
</ul>
<h4 id="down-sampling--up-sampling">Down-Sampling &amp; Up-Sampling</h4>
<blockquote>
<p>Down-Sampling : 너비와 높이 감소를 도와줍니다(해상도 감소)
Up-Sampling : 너비와 높이 증가를 도와줍니다(해상도 증가)
<img src="https://velog.velcdn.com/images/dr_pepper/post/4a955ee0-1041-4ae7-aa31-1c018eb25712/image.png" alt=""></p>
</blockquote>
<h4 id="bilinear-interpolation">Bilinear Interpolation</h4>
<blockquote>
<p>2차원 공간에서 값을 추정하는 방법으로, 주로 이미지 처리에서 픽셀 값을 스무딩하거나 크기를 변경할 때 사용됩니다.
-&gt; 이는 네 개의 주변 픽셀 값을 이용해 중간 위치의 값을 계산하는 방식입니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/23bb6b13-2da9-4561-8858-13b021d96bb8/image.png" alt=""></p>
</blockquote>
<p>지금까지 간단한 필수 개념에 대해서 알아보았습니다
이제 본격적으로 논문 review를 시작해보겠습니다!</p>
<h3 id="1-논문의-contribution">1. 논문의 Contribution</h3>
<p>본 논문인 Fully Convolutional Networks에서는 Semantic Segmentation 문제에 대해 Convolutional Neural Network(CNN)를 기반으로 한 새로운 접근법을 제시했는데요!
크게 3가지로 논문의 Contribution을 얘기할 수 있습니다!</p>
<h4 id="1-end-to-end-learning을-위한-fully-convolutional-architecture">1. End-to-End Learning을 위한 Fully Convolutional Architecture</h4>
<ul>
<li>기존의 CNN 구조에서는 Fully Connected(FC) layer를 통해 classification을 수행했습니다.</li>
<li>하지만 FC layer는 spatial 정보를 소실시키고, pixel 단위의 예측을 어렵게 만듭니다.</li>
<li>본 논문에서는 모든 layer를 convolution으로 대체하여 end-to-end 학습이 가능한 구조를 제안했습니다.</li>
</ul>
<h4 id="2-skip-connection을-통한-multi-scale-feature-fusion">2. Skip Connection을 통한 Multi-Scale Feature Fusion</h4>
<ul>
<li>다중 해상도의 feature map을 결합하는 skip connection을 통해 더욱 세밀하고 정확한 segmenation 결과를 얻는 방법을 제안했습니다.</li>
</ul>
<h4 id="3-다양한-모델-버전-제시">3. 다양한 모델 버전 제시</h4>
<ul>
<li>FCN-32s, FCN-16s, FCN-8s 모델을 통해 coarse-to-fine 구조로 segmentation 성능을 점진적으로 개선하며 skip connection의 중요성을 입증했습니다. </li>
</ul>
<h3 id="2-기존-방법-설명--한계점">2. 기존 방법 설명 &amp; 한계점</h3>
<h4 id="1-기존-방법">1. 기존 방법</h4>
<ul>
<li><strong>Patch-Based Classification</strong><ul>
<li>초기의 semantic segmentation 방법들을 이미지에서 작은 patch를 추출한 후, 각 patch에 대해 객체를 분류하는 방식을 사용했습니다.<ul>
<li>patch 단위로 분류된 결과를 조합하여 전체 이미지의 segmenation을 수행했습니다.</li>
</ul>
</li>
</ul>
</li>
<li>*<em>CNN-Based Approches *</em><ul>
<li>CNN을 이용한 segmentation 방법은 patch 기반 접근 방식을 따랐습니다.</li>
<li>이 방식은 patch별로 분류와 위치 정보를 결합하여 segmentation 결과를 얻었지만, 이미지 전체를 한번에 처리할 수는 없었습니다.</li>
</ul>
</li>
</ul>
<h4 id="2-한계점">2. 한계점</h4>
<ul>
<li><strong>공간적 정보 손실</strong><ul>
<li>FC layer는 spatial 정보를 소실시키고 이미지 전체의 정보를 평균화해 버리는 특성이 있어 정확한 위치 정보를 반영하기 어렵습니다.</li>
</ul>
</li>
<li><strong>비효율성</strong> <ul>
<li>patch 단위로 분류 작업은 계산량이 많아 느리고, 모델의 효율성이 떨어지며 실제 응용에 적용하기 어렵습니다.</li>
</ul>
</li>
<li><strong>객체 경계 식별 한계</strong> <ul>
<li>patch 단위로 segmentation을 수행할 경우 객체의 경계나 작은 세부 요소를 정확히 구분하는 데 한계가 있습니다.</li>
</ul>
</li>
</ul>
<h3 id="3-network-architecture">3. Network Architecture</h3>
<p>Network Architecture를 한 장으로 간단하게 설명해 놓은 그림입니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/a07db8eb-8ac1-46a6-b782-58dd3eee8c50/image.png" alt=""></p>
<p><strong>FCN-32s</strong></p>
<ul>
<li>pool5에서 생성된 가장 coarse한 feature map을 32배로 upsampling하여 segmentation map을 생성합니다.</li>
<li>가장 높은 수준의 semantic 정보를 가지고 있지만, 세부적인 경계나 작은 객체의 예측이 어려울 수 있습니다.</li>
</ul>
<p><strong>FCN-16s</strong></p>
<ul>
<li>pool5의 feature map을 2배로 upsampling하여 pool4와 결합한 후, 16배로 upsampling하여 segmentation map을 생성합니다.</li>
<li>FCN-32s에 비해 더 세밀한 예측을 제공하며, pool4의 상대적으로 fine한 정보가 추가되면서 경계 구분이 향상됩니다.</li>
</ul>
<p><strong>FCN-8s</strong></p>
<ul>
<li>pool4의 feature map을 pool3과 결합하여 8배로 upsampling하여 최종 segmentation map을 생성합니다.</li>
<li>가장 세밀한 정보를 제공하며, 객체의 경계와 작은 디테일까지 잘 예측할 수 있습니다.</li>
</ul>
<hr>
<p>좀 더 자세히 알아보겠습니다!</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3a535f1a-dcc6-4f38-b90e-d12258ad2309/image.png" alt=""></p>
<ul>
<li>FCN(Fully Convolutional Network) 논문에서 소개된 semantic segmentation 과정을 시각화한 그림입니다.</li>
<li>FCN은 이미지의 각 pixel마다 특정 class를 예측하는 pixel-wise segmentation 작업을 수행합니다.</li>
<li>이 그림은 FCN이 이미지 분할을 위해 dense predictions를 수행하는 방법을 보여줍니다.</li>
<li>FCN은 공간적 정보 소실 없이 end-to-end 학습을 통해 semantic segmentation을 수행할 수 있는 네트워크 구조를 제안하였고, 이 그림은 FCN 의 구조와 흐름을 간단히 시각화한 그림입니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/bd94b99e-9c14-46e4-a4a6-e41508061453/image.png" alt=""></p>
<ul>
<li>이 그림은 Fully Conovlutional Network(FCN)에서 classification 모델을 segmentation 모델로 변환하는 과정을 설명하고 있습니다.</li>
<li>구체적으로, 기존의 classification 네트워크를 convolutionalization을 통해 pixel-wise 예측을 할 수 있도록 변형하는 방법을 보여줍니다.</li>
<li>이 그림은 classification 네트워크가 segmentation을 수행할 수 있도록 FC layer를 convolution layer로 변환하여, 네트워크가 단일 class 예측 대신 각 pixel마다 해당 class의 확률을 예측할 수 있는 heatmap을 생성하는 방법을 설명하고 있습니다.</li>
<li>이를 통해 FCN이 end-to-end 학습이 가능한 효율적인 dense prediction 모델이 될 수 있음을 보여줍니다</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/6f55e178-ada7-45f6-85d7-e166e5552580/image.png" alt="">
-이 그림은 FCN(Fully Convolutional Network)에서 사용되는 skip architecture의 구조를 시각화한 것입니다.</p>
<ul>
<li>이 구조는 서로 다른 해상도(다른 stride)에서 생성된 feature map을 결합하여 coarse-to-fine segmentation을 가능하게 합니다.</li>
<li>각 단게에서는 FCN-32s, FCN-16s, FCN-8s에서 예측을 수행하는 방식을 나타내며, stride 크기에 따라 점진적으로 더 정밀한 예측을 제공합니다.</li>
</ul>
<hr>
<p><strong>1. Pooling Layers(pool1, pool2, pool3, pool4, pool5)</strong>
<img src="https://velog.velcdn.com/images/dr_pepper/post/66ce6f4b-b56f-4392-9a9f-92010570998c/image.png" alt=""></p>
<ul>
<li>그림의 왼쪽 부분은 입력 이미지가 각 pooling layer를 거치면서 점점 더 coarse한 feature map으로 변환되는 과정을 보여줍니다.</li>
<li>각 pooling layer는 stride 크기에 따라 점진적으로 이미지의 해상도를 낮추며, pool5 layer까지 진행되면 가장 coarse한 해상도가 됩니다.</li>
<li>이러한 과정에서 spatial 정보가 손실되지만, 상위 layer는 고수준의 semantic 정보를 포함하게 됩니다.</li>
</ul>
<hr>
<p><strong>2.Prediction Lyaers</strong>
<img src="https://velog.velcdn.com/images/dr_pepper/post/0e1d1b1d-7494-4435-aa81-f32bea018fd9/image.png" alt=""></p>
<ul>
<li><p>각 pooling layer는 prediction layer를 통해 segmentation 예측을 수행합니다.</p>
</li>
<li><p>이 예측은 특정 stride에서 upsampling되어 원래의 해상도에 가깝게 복원됩니다.</p>
</li>
<li><p><strong>FCN-32s</strong></p>
<ul>
<li>pool5 layer에서 생성된 가장 coarse한 feature map을 32배로 upsampling하여 segmentation map 생성 후 원본 해상도에 맞춰 예측을 수행합니다.</li>
<li>가장 높은 수준의 semantic 정보를 가지고 있지만, 세부적인 경계나 작은 객체의 예측이 어려울 수 있습니다.</li>
</ul>
</li>
<li><p><strong>FCN-16s</strong></p>
<ul>
<li>pool5에서 생성된 예측 결과를 2배로 upsampling하여 pool4 layer의 feature map과 결합한 후, 16배로 다시 upsampling하여 더 정밀한 예측을 수행합니다.</li>
</ul>
</li>
<li><p><strong>FCN-8s</strong></p>
<ul>
<li>pool4 layer에서 생성된 예측을 pool3 layer 와 결합하여 8배로 upsampling하여 최종 예측을 수행합니다.</li>
<li>이는 가장 세밀한 예측 결과를 제공합니다.</li>
</ul>
</li>
</ul>
<hr>
<p><strong>3.Upsampling 및 Skip Connections</strong>
<img src="https://velog.velcdn.com/images/dr_pepper/post/8b2b55e6-f471-4274-8d56-b4e14c0246ea/image.png" alt=""></p>
<ul>
<li><strong>Skip Connections</strong><pre><code>  - 각 예측 단계에서는 이전 layer의 coarse한 feature map과 다음 layer의 fine 한 feature map을 결합하여 더 정확한 예측을 제공합니다.
  - 이러한 skip connection은 FCN의 핵심 아이디어로, coarse-to-fine 정보를 통합하여 객체의 경계나 세부적인 부분을 더 잘 예측할 수 있게 해줍니다.</code></pre></li>
<li><strong>Upsampling</strong><pre><code>  - 예측 결과는 각각 32배, 16배, 8배의 stride로 upsampling되어 최종 segmentation map을 생성합니다.
  - 이는 deconvolution(transpose convolution)을 사용하여 이미지의 해상돌르 점진적으로 복원하는 과정입니다.</code></pre></li>
</ul>
<hr>
<p>본 논문에서는 FCN 및 Skip Architecture를 사용한 모델을 제안했습니다</p>
<p>간단하게 정리해보겠습니다!</p>
<h4 id="fully-convolutional-networkfcn">Fully Convolutional Network(FCN)</h4>
<ul>
<li>모든 layer를 convolution layer로 구성한 FCN 구조를 사용하여 end-to-end 학습을 가능하게 합니다.</li>
<li>FCN은 이미지의 모든 위치에서 동시에 분류 및 분할을 수행하여 계산 효율성을 크게 향상시킬 수 있습니다.</li>
<li>전통적인 CNN의 fully connected layer를 제거하고, convolution 및 deconvolution을 통해 pixel-wise segmentation을 수행합니다.</li>
</ul>
<h4 id="skip-architecture">Skip Architecture</h4>
<ul>
<li>다양한 해상도의 feature map을 결합하여 상세한 segmentation을 가능하게 하는 skip connection을 제안했습니다.</li>
<li>FCN-32s, FCN-16s, FCN-8s 모델을 제안하여 점진적으로 더 세밀한 segmentation 결과를 얻습니다.</li>
<li>상위 feature map의 coarse 정보를 하위 feature map의 fine 정보와 결합하여 segmentation 성능을 개선합니다.</li>
</ul>
<hr>
<p>이번에는 논문에서 사용된 수식에 대해서 알아보겠습니다!</p>
<h4 id="논문에서-사용된-수식">논문에서 사용된 수식</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/1f700833-140d-4f6f-af98-88a5fb907ab1/image.png" alt=""></p>
<ul>
<li>이 식은 convolution 연산을 설명하는 수식입니다.</li>
<li>Convolution 연산은 CNN에서 중요한 역할을 하며, 입력 이미지 또는 feature map에서 local 패턴을 추출하는데 사용됩니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/a65393c5-4a51-4015-8944-d76b7a16256f/image.png" alt=""></li>
<li>이 수식을 통해 pixel (i,j) 위치에서의 출력 값(yij)를 계산하는 방식이 나타나 있습니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/ef7d91e3-d19d-4117-a1fd-377aff24ec13/image.png" alt=""></li>
<li>이 수식은 convolution 연산이 입력 feature map의 작은 영역을 window(kernel)로 훑으면서 local 정보를 추출하여 출력 feature map을 생성하는 방식을 설명합니다.</li>
<li>yij는 각 kxk 영역에서 계산된 특징을 나타내며, 이 과정을 반복하여 전체 이미지에 대한 feature map을 얻을 수 있습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/6ee35ead-2a51-4964-887c-4e785e71c5d9/image.png" alt=""></p>
<ul>
<li>이 수식은 두 개의 filter f와 g를 합성하는 경우의 결과를 나타낸 것으로, 두 filter의 합성이 새로운 filter와 stride, kernel 크기에 어떤 영향을 미치는지를 설명하고 있습니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/8c207f52-bc83-47d4-bbeb-ac93c8b4d521/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/c195d024-5326-4d89-82f6-60c2794817b4/image.png" alt=""></li>
<li>이 수식은 두 filter의 f와 g의 합성(convolution composition)을 통해 새로운 kernel 크기와 stride를 계산하는 방법을 나타냅니다.</li>
<li>이 결과는 두 개의 convolution layer를 연속으로 적용할 때, 전체 효과를 단일 필터로 표현할 경우의 kernel 크기와 stride가 어떻게 변화하는지를 설명합니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/50a1416c-709e-456b-ac83-0589157ab789/image.png" alt=""></p>
<ul>
<li>이 식은 filter f에 대해 stride s를 적용하여 새로운 filter f`를 정의하는 방법을 나타내고 있습니다.</li>
<li>이 과정은 convolution에서 stride를 적용할 때 filter 값이 어떻게 변하는지를 설명합니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/026932be-e64a-40dc-abf7-f900687e0c20/image.png" alt=""></li>
<li>이 수식은 filter f에 stride s를 적용하는 과정을 설명합니다.</li>
<li>stride는 convolution 연산에서 입력을 일정 간격 s로 건너뛰며 sampling하는 방식인데, 이 식은 filter가 stride s에 맞춰 &#39;희소하게&#39; sampling된 형태가 됨을 보여줍니다.</li>
<li>stride s를 적용하면 filter f의 크기를 유지하면서도 실제로 계산에 참여하는 원소의 위치는 s 간격으로 떨어진 위치들만 남고, 나머지 위치는 0으로 채워집니다.</li>
<li>결과적으로 stride가 적용된 fitler f`는 원래 filter보다 희소한 형태를 가지며, 실제 연산에 참여하는 값들 사이에 0이 추가되어 sampling 밀도가 줄어듭니다.</li>
<li>이 수식은 filter에 stride를 적용할 때, stride 간격에 맞는 위치에만 값으 두고 나머지 위치는 0으로 채우는 방식으로 새로운 filter를 정의하는 방법을 설명합니다.</li>
<li>이는 convolution에서 stride 적용될 때 sampling 간격에 늘어나는 효과를 수식적으로 보여주는 것입니다.</li>
</ul>
<h3 id="4-실험-검증-및-리뷰">4. 실험 검증 및 리뷰</h3>
<p>이번에는 실험 및 결과에 대해서 알아보도록 하겠습니다!</p>
<p>먼저 사용된 데이터셋에 대해서 간단하게 알아보겠습니다</p>
<h4 id="검증-데이터셋">검증 데이터셋</h4>
<ul>
<li>PASCAL VOC : 다양한 객체 class를 포함하는 유명한 데이터셋으로, semantic segmentation 성능을 평가하기 위해 자주 사용됩니다. </li>
<li>NYUDv2 : 실내 장면의 RGB-D 데이터셋으로, 깊이 정보까지 포함되어 실내 객체 분할에 적합합니다.</li>
<li>SIFT Flow : 다양한 야외 장면을 포함하는 데이터셋으로, FCN의 일반화 성능을 검증하는데 활용되었습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/924bcf29-78c6-4323-a590-faad10677219/image.png" alt=""></p>
<blockquote>
<ul>
<li>FCN-AlexNet : AlexNet을 기반으로 FCN 구조로 변형한 모델</li>
</ul>
</blockquote>
<ul>
<li>FCN-VGG16 : VGG16을 기반으로 FCN 구조로 변형한 모델</li>
<li>FCN-GoogLeNet : GoogLeNet을 기반으로 FCN 구조로 변형한 모델</li>
<li><blockquote>
<p>각각의 모델은 FCN 구조로 변환되며, 모든 layer가 convolution으로 대체되어 pixel-wise 예측이 가능합니다</p>
</blockquote>
</li>
</ul>
<blockquote>
<ul>
<li>Mean IU : segmentation의 정확도를 나타냅니다.</li>
</ul>
</blockquote>
<ul>
<li><p>Forward Time : 모델이 한 이미지를 예측하는 데 걸리는 시간(ms 단위)</p>
</li>
<li><p>Conv Layers : 각 모델의 convolution layer 수</p>
</li>
<li><p>Parameters : 모델의 총 parameter 수(백만 단위)</p>
</li>
<li><p>Receptive Field (rf) Size : 최종 출력 pixel이 입력 이미지의 몇 pixel 영역에 해당하는지 나타냅니다.(모델이 얼마나 큰 영역에서 정보를 수집하는지를 나타냅니다)</p>
</li>
<li><p>Max Stride : 가장 큰 stride 값을 나타내며, FCN에서 stride가 클수록 output feature map의 해상도가 낮아집니다.</p>
</li>
<li><p>이 표는 논문에서 FCN을 세 가지 주요 CNN 모델(AlexNet, VGG16, GoogLeNet) 구조로 변형하여 semantic segmentation 성능을 비교한 결과를 보여줍니다.</p>
</li>
<li><p>각 모델의 성능은 PASCAL VOC 2011 데이터셋의 validation set에서 Mean Intersection over Union(mean IU)로 평가되었으며, 모델의 구조적 특징과 성능을 다양한 지표로 비교하고 있습니다.</p>
</li>
<li><p>이 표는 FCN을 다양한 CNN 구조로 변형했을 때의 성능 및 효율성을 비교한 결과입니다.
FCN-VGG16은 가장 높은 segmentation 성능을 보이며, GoogLeNet은 가장 작은 parameter 수로 효율적이지만 정확도는 상대적으론 낮습니다.</p>
</li>
<li><p>FCN 구조는 segmentation 성능과 모델의 효율성 간의 trade-off를 고려해야 함을 보여줍니다.</p>
</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/fefbd59e-671e-4bd4-8963-97960f91b042/image.png" alt="">
-이 그림은 FCN 논문에서 제안된 FCN-32s, FCN-16s, FCN-8s 모델이 출력한 semantic segmentation 결과와 ground truth를 비교한 것입니다.</p>
<ul>
<li>FCN-32s, FCN-16s, FCN-8s는 각각 다른 stride를 가지는 네트워크이며, 점진적으로 더 세밀한 segmenation 결과를 제공합니다.</li>
<li>이 그림은 FCN 모델에서 다양한 stride와 해상도 결합을 통해 segmentation의 세 밀도를 어떻게 개선한 수 있는지를 보여줍니다.</li>
<li>FCN-32s는 coarse한 결과를 생성하는 반면, FCN-16s와 FCN-8s는 더 세밀한 해상도의 정보를 결합하여 segmentation 성능을 향상시킵니다.</li>
<li>특히 FCN-8s는 Ground truth에 가장 가까운 결과를 제공하여, 다중 해상도 feature map의 결합이 segmentation 성능 향상에 효과적임을 시각적으로 보여줍니다.</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/17a819ed-e57d-4c37-8285-909d395a4189/image.png" alt=""></p>
<blockquote>
<ul>
<li>pixel accuracy : 전체 pixel 중에서 올바르게 예측된 pixel의 비율입니다.</li>
</ul>
</blockquote>
<ul>
<li>Mean Accuracy : 각 클래스별 정확도를 평균한 값으로, 클래스 간 정확도의 균형을 나타냅니다.</li>
<li>Mean Intersection over Union(mean IU) : 각 클래스에 대해 Intersection over Unio(IoU)를 계산하고, 이를 평균한 값입니다.</li>
<li>Frequency Weighted Intersection over Union(f.w. IU) : 클래스의 빈도에 가중치를 두어 IoU를 계산한 값으로, 각 클래스의 빈도에 따라 결과가 영향을 받습니다.</li>
</ul>
<p>-이 표는 FCN(Fully Convolutional Network) 모델의 성능을 비교한 것으로, PASCAL VOC2011 validation set에서 다양한 FCN 변형 모델의 성능을 보여줍니다.</p>
<ul>
<li>각 모델은 FCN-32s, FCN-16s, FCN-8s로, 다중 해상도의 feature map을 결합하여 segmentation 성능을 향상시키는 skip architecture를 사용했습니다.
또한 FCN-32s 모델의 고정된 버전(Fixed)도 포함되어 있습니다.</li>
<li>이 표는 FCN 모델에서 stride가 줄어들수록, 즉 더 세밀한 해상도의 feature map을 결합할수록 성능이 향상됨을 보여줍니다.</li>
<li>FCN-8s 모델이 가장 높은 정확도와 IoU를 기록하여 Segmentation 성능이 가장 우수하다는 것을 입증하였으며, skip connection을 통한 다중 해상도 feature map 결합이 FCN의 성능을 크게 개선하는 것을 나타냅니다.</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/ce8c5cf1-5218-4b28-b9ee-825f34bafc06/image.png" alt=""></p>
<blockquote>
<ul>
<li>파란색 : 전체 이미지를 사용한 학습</li>
</ul>
</blockquote>
<ul>
<li>녹색 : 이미지의 50%만 sampling하여 사용한 학습</li>
<li>빨간색 : 이미지의 25%만 sampling하여 사용한 학습</li>
</ul>
<p>-이 그림은 FCN에서 전체 이미지로 학습하는 것과 부분 이미지를 sampling하여 학습하는 방법을 비교한 실험 결과를 나타냅니다.</p>
<ul>
<li>학습 속도와 손실 함수의 수렴 속도를 비교하기 위해 전체 이미지, 50% 샘플링, 25% 샘플링의 세 가지 방식을 사용했습니다.</li>
<li>전체 이미지 학습이 효과적 : iteration 기준으로는 sampling과 큰 차이가 없지만, wall time 기준으로는 전체 이미지를 학습에 사용하는 것이 더 빠르게 수렴하여 효율적입니다.</li>
<li>데이터 활용 효율성 : sampling보다 전체 이미지를 사용하는 것이 데이터 활용면에서 효율적이며, 빠른 손실 감소와 수렴을 제공합니다.</li>
<li>이 결과는 FCN 모델이 전체 이미지를 학습하는 것이 더 나은 수렴 속도와 효율성을 제공한다는 점을 강조하고 있습니다.</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/d0a14fba-ef6c-4f3c-8011-1ed602a634c8/image.png" alt="">
-이 표는 FCN-8s 모델이 PASCAL VOC 2011 및 2012 test set에서 다른 모델과의 성능과 추론 시간(inference time)을 비교한 결과를 보여줍니다.</p>
<ul>
<li>성능 향상<ul>
<li>FCN-8s 모델은 R-CNN과 SDS에 비해 PASCAL VOC 2011 및 2012 데이터셋에서 약 20%의 성능 향상을 보였습니다. </li>
<li>이는 mean IU 기준으로 가장 우수한 성능입니다.</li>
</ul>
</li>
<li>추론 시간 효율성    <ul>
<li>FCN-8s는 약 175ms의 추론 시간으로, SDS보다 훨씬 빠르며 실시간 응용에 적합합니다.</li>
<li>FCN의 end-to-end 구조와 fully convolutional 설계 덕분에 높은 성능과 빠른 추론 속도를 동시에 달성할 수 있습니다.</li>
</ul>
</li>
<li>이 표는 FCN-8s가 이전의 state-of-the-art 모델에 비해 정확도와 추론 시간에서 모두 우수함을 보여줍니다.</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/f9a29658-c820-42c6-a5cb-64f0c8691f43/image.png" alt=""></p>
<blockquote>
<ul>
<li>RGB : 컬러 이미지의 Red, Green, Blue 채널</li>
</ul>
</blockquote>
<ul>
<li>RGBD : RGB와 depth 채널을 초기 단계에서 결합한 형태로, 입력에 RGB와 depth 정보를 동시에 사용합니다.</li>
<li>HHA : depth 정보를 3개의 임베딩으로 변환한 것으로, 수평 불일치(horizontal disparity), 지면 위 높이(height above ground), 중력 방향에 대한 표면 법선의 각도(angle of the local surface normal)를 포함합니다.(depth 정보를 보다 풍부하게 표현 가능함)</li>
<li>RGB-HHA : RGB와 HHA 정보를 late fution 방식으로 결합한 형태로, RGB와 HHA 각각에 대해 별도로 예측한 후 결과를 합산하여 최종 예측을 수행합니다.</li>
</ul>
<p>-이 표는 FCN 모델이 NYUDv2 데이터셋에서 다양한 입력 방식(RGB, RGBD, HHA, RGB-HHA)을 사용하여 semantic segmentation 성능을 비교한 결과를 보여줍니다.</p>
<ul>
<li>NYUDv2 데이터셋은 실내 장면의 RGB-D 데이터를 포함하며, RGB와 depth 정보를 결합하여 segmentation 성능을 높일 수 있는 데이터셋입니다.</li>
<li><strong>RGB-HHA 조합의 효과</strong><ul>
<li>RGB와 HHA를 함께 사용하는 모델이 성능이 가장 높아, depth 정보를 변환한 HHA가 RGB 정보와 함께 사용될 때 segmentation 성능을 향상시킴을 보여줍니다.</li>
</ul>
</li>
<li><strong>FCN-16s의 우수성</strong><ul>
<li>더 작은 stride를 사용한 FCN-16s 구조가 FCN-32s에 비해 더욱 정밀한 segmentation을 가능하게 하여, 최종 성능을 개선했습니다.</li>
</ul>
</li>
<li>이 표는 FCN 모델이 다양한 입력 조합을 통해 실내 장면에서의 semantic segmentation 성능을 개선할 수 있음을 보여주며, 특히 RGB와 HHA의 결합이 효과적임을 입증합니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/fd4dc08e-a918-4d7f-91fa-bc8f3777688b/image.png" alt=""></p>
<blockquote>
<ul>
<li>pixel accuracy : 이미지 내에서 정확하게 예측된 pixel의 비율을 나타냅니다.</li>
</ul>
</blockquote>
<ul>
<li>mean accuracy : 클래스별 정확도의 평균을 나타냅니다.</li>
<li>mean IU : 각 클래스에 대해 IoU 계산 후, 이를 평균한 값입니다.</li>
<li>frequency weighted IU : 각 클래스의 빈도를 고려한 IoU의 가중 평균입니다.</li>
<li>geometry accuracy : geometry 정보의 정확도를 평가하는 지표입니다(기하학적 특성을 예측하는 정확도를 평가합니다.)</li>
</ul>
<p>-이 표는 SIFT Flow 데이터셋에서 다양한 모델이 수행한 class segmentation과 geometric segmentation의 성능을 비교한 결과를 보여줍니다.</p>
<ul>
<li><p>각 모델은 SIFT Flow 데이터셋에서 클래스별 segmentation과 geometry segmentation을 수행했으며, pixel accuracy, mean accuracy, mean IU, frequency weighted IU, geometry acuracy 등의 지표로 성느을 평가했습니다.</p>
</li>
<li><p><strong>FCN-16s의 우수한 성능</strong></p>
<ul>
<li>FCN-16s 모델이 class segmentaiton과 geometry segmentation에서 기존 모델보다 높은 정확도를 기록했습니다.</li>
<li>특히 geometry accuracy에서 94.3%로 최고의 성느을 보였으며, 이는 FCN 모델이 복잡한 geometry 정보를 효과적으로 학습할 수 있음을 의미합니다.</li>
</ul>
</li>
<li><p><strong>다양한 성능 지표</strong></p>
<ul>
<li>이 표는 각 모델의 pixel accuracy, mean IU 등 다양한 성능 지표를 제공하여 모델 간 성능을 다각도로 비교할 수 있게 합니다.</li>
<li>FCN-16s가 모든 성능 지표에서 전반적으로 우수한 결과를 보였습니다.</li>
</ul>
</li>
<li><p>이 표는 FCN-16s가 SIFT Flow 데이터셋에서 다른 모델에 비해 전반적으로 우수한 성능을 보인다는 것을 입증하며, 특히 geometry segmentation에서 매우 강력한 성능을 보여줍니다.</p>
</li>
</ul>
<hr>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c4acde95-8764-4f3b-b71b-aa14ef106aba/image.png" alt="">
-이 그림은 PASCAL 데이터셋에서 FCN-8s 모델과 기존 state-of-the-art 모델인 SDS의 segmentation 성능을 비교한 결과입니다.</p>
<ul>
<li>각 행은 특정 상황에서 두 모델이 예측한 segmentation 결과와 해당 이미지의 ground truth를 비교하여 모델의 성능을 시각적으로 보여줍니다.</li>
<li><strong>FCN-8s의 강점</strong><ul>
<li>FCN-8s는 SDS 모델보다 더 정밀한 객체 경계를 예측하며, 인접한 객체를 구분하는 성능이 뛰어납니다.</li>
<li>또한, 일부 객체가 가려진 상황에서도 비교적 정확하게 예측을 수행할 수 있습니다.</li>
</ul>
</li>
<li><strong>한계점</strong><ul>
<li>복잡한 객체 간 상호작용이나 가려짐이 심한 경우에는 여전히 완벽한 예측을 수행하지 못하는 한계가 있습니다.</li>
</ul>
</li>
<li>이 그림은 FCN-8s가 기존 모델인 SDS에 비해 더 우수한 성능을 발휘하지만, 여전히 몇 가지 한계가 존재함을 시각적으로 보여줍니다.</li>
</ul>
<hr>
<p>지금까지 본 실험 결과를 간단하게 요약해보겠습니다!</p>
<h4 id="성능-결과">성능 결과</h4>
<ul>
<li><strong>FCN-32s, FCN-16s, FCN-8s 모델 성능 비교</strong><ul>
<li>FCN-32s는 가장 coarse한 segmentation map을 제공했지만, FCN-16s와 FCN-8s는 skip connection을 통해 더 세밀한 segmentation 성능을 보였습니다.</li>
<li>특히 FCN-8s는 가장 높은 pixel 정확도와 IoU(Interesction over Union) 점수를 기록했습니다.</li>
</ul>
</li>
<li><strong>객체 경계 정확성 향상</strong><ul>
<li>FCN은 전통적인 patch 기반 접근법에 비해 객체 경계를 더 정확히 예측할 수 있었으며, 이는 다양한 해상동의 정보를 결합한 skip connection 덕분에 가능했습니다.</li>
</ul>
</li>
</ul>
<hr>
<p>이러한 실험을 통해 얻을 수 있는 실험적 의의에 대해 알아보도록 하겠습니다</p>
<h4 id="실험적-의의">실험적 의의</h4>
<ul>
<li>End-to-End 학습의 우수성    <ul>
<li>FCN의 end-to-end 학습 구조가 semantic segmentation 문제를 해결하는 데 효과적임을 입증했습니다.</li>
</ul>
</li>
<li>Skip connection의 효과<ul>
<li>다양한 해상도를 결합하여 coarse-to-fine segmentation이 가능하다는 점에서 skip connection의 중요성을 입증했습니다. </li>
</ul>
</li>
</ul>
<h3 id="5-결론-및-한계">5. 결론 및 한계</h3>
<p>마지막으로 Fully Convolutional Network의 결론과 한계점에 대해서 알아보고 마치겠습니다!</p>
<h4 id="1-결론">1. 결론</h4>
<ul>
<li>Fully Convolutional Network(FCN)는 patch 기반 segmentation 방법의 한계를 극복하고, end-to-end 학습을 통해 효율적이고 정확한 semantic segmentation을 가능하게 합니다.</li>
<li>Skip architecture의 효과를 통해 segmentation의 세밀도와 정확성을 향상시키고, 다양한 데이터셋에서 높은 성능을 입증하여 FCN의 유용성을 증명했습니다.</li>
</ul>
<h4 id="2-한계">2. 한계</h4>
<ul>
<li><strong>작은 객체 및 복잡한 경계 처리의 한계</strong><ul>
<li>FCN은 물체의 복잡한 경계를 세밀하게 구분하는 데 한계가 존재하며, 이로 인해 작은 객체나 복잡한 배경에서 성능 저하를 보입니다.</li>
</ul>
</li>
<li><strong>계산 비용</strong><ul>
<li>모델의 크기와 계산량이 상당하여 실제 어플리케이션에서 실시간 처리에 제한적일 수 있습니다.</li>
</ul>
</li>
</ul>
<p>이러한 FCN을 통해 Convolutional Neural Network가 단순 분류가 아닌, pixel 단위의 예측에까지 확장이 가능하다는 점에서 의미 있는 연구라고 할 수 있습니다.</p>
<p>FCN의 skip architecture는 다양한 해상도의 정보를 결합해 더 세밀한 segmentation을 가능하게 하며, 이후 semantic segmentation 연구의 기반을 마련했다고 볼 수 있습니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Real-Time Flying Object Detection with YOLOv8(2023)]]></title>
            <link>https://velog.io/@dr_pepper/Real-Time-Flying-Object-Detection-with-YOLOv8</link>
            <guid>https://velog.io/@dr_pepper/Real-Time-Flying-Object-Detection-with-YOLOv8</guid>
            <pubDate>Tue, 12 Nov 2024 14:52:46 GMT</pubDate>
            <description><![CDATA[<h3 id="1background">1.Background</h3>
<h4 id="yolov1">YOLOv1</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/5b6b3e89-edc5-4c96-838b-a7929b9c0920/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/02e9e34e-f7e5-49f7-85e9-8baac6a0bcca/image.png" alt=""></p>
<p>YOLOv1은 객체 감지를 단일 회귀 문제로 접근하였다.</p>
<p>기존의 방식에서는 이미지에서 객체가 있을 만한 영역을 찾고 영역을 분류해서 Bounding Box와 Class를 분류했었다. 그러나 YOLOv1에서는 이 과정을 동시에 진행하면서 두개의 네트워크를 사용하던 기존의 방식에서 하나의 네트워크를 사용하는 방식으로 바꿈으로써 더 빠른 속도를 가지게 되었다.</p>
<p>YOLOv1의 더 빠른 속도는 동영상과 같은 계속해서 객체의 위치나 라벨이 바뀌는 상황에서 유용하게 사용할 수 있도록 해주었다.</p>
<h4 id="cspcross-stage-partial-connections">CSP(Cross Stage Partial Connections)</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c96a28ad-7919-402c-baf3-1c208552c49a/image.png" alt=""></p>
<p> CSP는 네트워크의 앞부분에서 feature map을 두 부분으로 나누고 한 부분만 연산에 활용하고 나머지는 뒤에서 합치는 방식으로, 연산량을 줄임과 동시에 정보를 유지 할 수 있도록 했다.
위 그림에서 Part1 부분은 연산에 활용하지 않고 합치는 방식으로 정보를 유지할 수 있도록 했는데, ResNet의 Skip-Connection과 구조는 다르지만 비슷한 원리이지 않을까 생각한다.</p>
<h4 id="sppfspatial-pyramid-pooling-fast">SPPF(Spatial Pyramid Pooling-Fast)</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/ba43ba4a-bdc9-4308-848c-cccf051077f1/image.png" alt=""></p>
<p>위 그림은 YOLOv5에서 사용되는 구조를 나타낸 건데, 이러한 방식이 YOLOv8에서도 사용되었다.
Feature map을 여러 번 pooling하여 다양한 스케일의 정보가 포함되도록 하며, ConvBNSiLU과정을 통해서 채널수를 조정해준다.
이를 통해 Inputdml 크기를 고정하지 않고 다양한 크기의 Input이미지를 처리할 수 있도록 하며, Input을 왜곡하거나 자를 필요 없이 수용할 수 있게 한다.</p>
<h4 id="silu">SiLU</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/4fe38047-fb69-4e8a-8cb9-6b479e4c4bd9/image.png" alt="">
YOLO에서는 위와 같이 sigmoid 함수에 x값을 곱한 형태의 활성화함수를 사용한다. ReLU함수보다 부드러운 형태이며 음수에서의 값 또한 ReLU와 달리 0이 아니기에 gradient vanishing 문제를 완화하는데 효과적이다.</p>
<h4 id="others">Others</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/810183ac-ac7e-4a50-b70f-b70715bb4fff/image.png" alt=""></p>
<p>그 외에도 기존에 Anchor Box를 수동으로 설정해야 했던것과 달리 YOLOv8에서는 객체의 중심점과 크기를 직접 예측하는 Anchor Free Detection도 사용되었다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/be72c60c-880d-4a58-b8f9-0f8f17240bda/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/5c0f96d4-7e5c-4c44-9b8b-f3f87666aebe/image.png" alt=""></p>
<p>또한 FPN과 PANet을 사용해서 High level feature과 Low level Feature를 효과적으로 합칠 수 있도록 하였다.</p>
<h3 id="architecture">Architecture</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/b7d8171a-b549-4a5f-88f2-5f783ad181e3/image.png" alt=""></p>
<p>전체 구조를 먼저 살펴보면 Backbone과 Head로 구성되어 있다. Backbone과 Head로 구성되어 있으며, backbone에서는 input데이터의 feature를 추출하고, head에서는 추출한 feature를 이용해서 classification, detection과 같은 task를 수행한다.
아래에서 설명할 때는 빨간 선을 기준으로 앞부분은 neck, 뒷부분을 head로 표현한다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/054ad833-faea-464b-8e41-ff38456e517c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/49fd370b-529f-433e-a91e-97a3f3abd5ca/image.png" alt=""></p>
<p>Backbone
<img src="https://velog.velcdn.com/images/dr_pepper/post/5731af4f-579a-4bec-bc0d-4d37e26aa650/image.png" alt=""></p>
<p>먼저 위 표는 YOLOv8 모델을 크기에 따라 분류하고 각 모델에 따른 d,w,r을 설정하는 표이다. 아래로 가면서 모델의 크기가 더 커지고, 이와 같은 모델은 YOLOv8n과 같은 형태로 표시한다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/6b4bcb36-d078-490f-a4c9-aae6e8bdc6dc/image.png" alt=""></p>
<p>먼저 위 모델에서 사용되는 ConvModule은 Conv-BatchNorm-SiLU와 같은 구조를 사용하고 있다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a82bced2-986c-4d91-858c-3ce6196b7832/image.png" alt=""></p>
<p>위 구조는 Backbone구조를 나타낸 부분의 그림이다. P1은 ConvMoudle하나로 구성되어 있고, P2, P3, P4는 ConvModule-CSPLayer_2Conv(C2F)로 구성되어 있으며 P5는 이런 모델에서 SPPF모델이 추가된 형태이다.</p>
<p>그러면 ConvModule-CSPLayer_2Conv(C2F)이 뭐냐하면 위에서 설명한 CSP를 적용해서 연산량을 줄이면서 정보를 유지하는 방식을 사용했다.</p>
<p>Backbone구조를 보면 각 레이어에 있는 n, add의 boolean값을 가지고 bottleneck레이어의 개수와 bottleneck의 skip-connection의 유무를 정해준다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/41cb9e7b-a933-4877-85c9-358d18c8afbc/image.png" alt=""></p>
<p>Neck부분에서 가장 왼쪽부분에서 데이터가 들어가는 부분은 위에서부터 backbone의 P3,P4,P5에서 나오는 부분이다. 가장 아래의 branch
가장 아래의 branc는 sppf를 통해서 나온 p5의 정보, 그리고 위의 c2f는 각각 p4, p3이다.</p>
<p>Neck 구조에서 Upsampling과 Downsampling을 통해서 종합된 정보들은 head부분으로 전달되어 ConvModule 두번과 convlayer를 통해서 loss가 bounding box와 class에 대한 loss가 도출된다. Downsample을 할 때 pooling을 사용하지 않고 convmodule을 사용한 이유는 학습이 가능한 커널을 사용하기 위해서 사용했다고 생각한다.</p>
<p>P3,4,5의 head는 서로 다른 스케일의 객체를 담당하여 예측작업을 수행한다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/43363548-94c1-42fb-961e-6b6918673e7b/image.png" alt=""></p>
<p>Box loss, Class loss, dfl loss를 모두 더한 것이 YOLOv8의 loss function이다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/dfa72ebc-6ce1-4dd0-89e4-b551c8409190/image.png" alt=""></p>
<p>Box loss는 IOU와 bounding box의 중심점의 차이와 바운딩 박스 위치 예측의 불확실성에 대한 가중치 a와 실제와 예측 바운딩 박스의 가로 세율의 비율의 차이에 대한 v를 곱한 term을 사용하며 loss를 구한다.</p>
<p>Class loss는 일반적으로 logistic regression에서 사용하는 log를 사용하는 loss function이다.</p>
<p>dlf loss는 더 정밀한 위치 예측을 위해서 사용되며, 좌표를 단일값으로 표현하기 보다 분포 형태로 확률에 따른 예측한다.</p>
<h3 id="experiment">Experiment</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/14467fbf-0cc7-4a1f-8eb5-68357728b73e/image.png" alt=""></p>
<p>위 사진은 비행물체 탐지에 대해서 YOLOv8을 적용한 결과를 나타낸 Confusion Matrix와 Small, Medium, Large그리고 파라미터를 조정한 Medium의 모델에 대한 성능 차이를 나타낸 그래프이다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/04d8b410-2f9a-4820-894c-73e9a4135118/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/c3bc0e28-f2c8-467d-9131-ea5a4772457b/image.png" alt="">
위 이미지들은 전투기와 드론을 탐지한 이미지이다. 제일 왼쪽은 원본, Input이미지이고, 오른쪽으로 순서대로 backbone에서의 P2,3,4,5에서의 Feature map이다. 레이어가 얕은 부분에서는 모서리, 질감과 같은 특징을 감지하고 레이어가 깊어질수록 전반적인 형태, 위치와 같은 좀 더 세밀한 특징이 나타난다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/87a9c6c9-94b9-404c-b95d-29563459e0ee/image.png" alt=""></p>
<p>일반화된 모델을 적용한 결과이다. 아주 작은 수준의 객체도 좋은 성능으로 탐지하는 것을 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/26920e51-a942-470e-ba27-e25a677cdf92/image.png" alt=""></p>
<p>RF100은 100가지의 다양한 클래스의 객체를 포함하는 데이터셋으로 Box Plot과 mAP를 성능지표로 하여 보여주는 그래프이다. 이전 YOLO버전보다 더 나은 성능을 보이는 것을 확인 할 수 있다.</p>
<p>따라서 YOLOv8은 이전 버전의 장점을 이어받으면서 Anchor free detection이나 구조를 개선하여 사용하면서 성능을 향상 시켰다.</p>
<p>참고 문헌</p>
<p><a href="https://docs.ultralytics.com/ko/yolov5/tutorials/architecture_description/#1-model-structure">https://docs.ultralytics.com/ko/yolov5/tutorials/architecture_description/#1-model-structure</a></p>
<p><a href="https://mmyolo.readthedocs.io/en/latest/recommended_topics/algorithm_descriptions/yolov8_description.html">https://mmyolo.readthedocs.io/en/latest/recommended_topics/algorithm_descriptions/yolov8_description.html</a></p>
<p><a href="https://sh-tsang.medium.com/brief-review-real-time-flying-object-detection-with-yolov8-6a2a630ffb99">https://sh-tsang.medium.com/brief-review-real-time-flying-object-detection-with-yolov8-6a2a630ffb99</a></p>
<p><a href="https://blog.roboflow.com/what-is-yolov8/">https://blog.roboflow.com/what-is-yolov8/</a></p>
<p><a href="https://yolov8.org/what-is-yolov8/">https://yolov8.org/what-is-yolov8/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Rich feature hierarchies for accurate object detection and semantic segmentation 2014 (R-CNN)]]></title>
            <link>https://velog.io/@dr_pepper/Rich-feature-hierarchies-for-accurate-object-detection-and-semantic-segmentation-2014-R-CNN</link>
            <guid>https://velog.io/@dr_pepper/Rich-feature-hierarchies-for-accurate-object-detection-and-semantic-segmentation-2014-R-CNN</guid>
            <pubDate>Tue, 12 Nov 2024 12:25:38 GMT</pubDate>
            <description><![CDATA[<h1 id="1-introduction">1. introduction</h1>
<p> Object Detection 모델은 객채의 위치를 찾고(Localization), class를 분류(Classification) 하는 작업을 진행합니다. R-CNN 모델은 이를 순차적으로 진행하는 대표적인 <strong>2 stage detector</strong>로, 딥러닝을 적용한 최초의 Object Detection 모델입니다.</p>
<h3 id="작동방식">작동방식</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a8fce975-f3f6-4f72-b0fe-1c2596e0fbd7/image.png" alt=""></p>
<p>Object detection system</p>
<ol>
<li>input image가 들어감</li>
<li>2000개의 객체가 있을 법한 위치인 후보영역(region proposal)을 추출 (selective search 알고리즘)</li>
<li>Large CNN을 사용해서 각 후보영역을 계산.</li>
<li>추출된 특징을 사용하여 SVM을 통해 각 영역을 클래스별로 분류. 예를 들어, 제안된 영역이 사람인지 아닌지 등을 판단</li>
</ol>
<p>Selective Search 알고리즘은 <strong>이미지에서 객체가 있을 가능성이 높은 영역을 효율적으로 제안</strong>하기 위해 사용되는 <strong>영역 제안 방법</strong></p>
<h1 id="2-object-detection-with-r-cnn">2. Object detection with R-CNN</h1>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/428af83f-83e7-47de-9964-e29ae93d49d3/image.png" alt=""></p>
<p>R-CNN의 detection system은 세 개의 module로 구성되어 있습니다.</p>
<ol>
<li><p>category-independent region proposals 생성하는 module (독립적인 카테고리 region proposal) - 객체가 위치할 가능성이 있는 여러 영역을 후보로 생성</p>
</li>
<li><p>각 region으로부터 CNN network를 통해 feature vector를 추출하는 module - 추출할 때 고정된 길이의 vector를 추출</p>
</li>
<li><p>클래스별 선형 SVM 분류기 - 추출한 특징 vector를 바탕으로 각 proposal을 특정 class로 분류 (사람, 자동차 등)</p>
</li>
</ol>
<h2 id="21-module-design">2.1. Module design</h2>
<h3 id="a-region-proposal">A. Region proposal</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/fd7a8afb-393f-4743-891b-8b3caf8add2d/image.png" alt=""></p>
<p>R-CNN은 다양한 최근 연구에서 제안된 기법들을 참고하여 카테고리 독립적인 region proposal을 생성합니다. 이 논문에서는 Selective Search 알고리즘을 사용하여 각 이미지에서 약 2000개의 제안된 영역을 만들어 냅니다.
이 때 각 영역(region)은 위 사진처럼 227x227 크기의 사이즈로 warp(=resize)됩니다. (AlexNet을 기반으로 만들었기 때문에)
-&gt; 그럼 사진이 찌그러질텐데 괜찮은건가요?
괜찮다! 왜?</p>
<ol>
<li>CNN은 강력한 특징 학습 능력을 가지고 있다.</li>
<li>고정된 입력 크기를 통해서 일관된 처리 흐름을 유지하기 때문에 계산 비용도 저렴해진다.</li>
<li>*주변 여백을 추가하여 객체의 맥락을 유지한다. (밑에서 추가적으로 설명)</li>
<li>Fine-tuning 과정을 거친다. (Fine-tuning은 왜곡된 객체들이 포함된 데이터를 학습하는 과정)</li>
</ol>
<h3 id="selective-search">Selective search?</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8cdfd85c-2601-4396-8a80-eaa3699b2ef0/image.png" alt=""></p>
<p>Selective search 알고리즘은 색상, 무늬, 명암 등의 다양한 기준으로 픽셀을 grouping하고, 점차 통합시켜 객체가 있을법한 위치를 bounding box 형태로 추천합니다.
(1)이미지를 작은 segment 형태로 분할하고, 
(2)유사한 색상, 텍스처, 크기를 가진 픽셀들을 그룹화하는 방식으로 작동합니다.
<strong>bounding box</strong>란 object가 들어있다고 판단되는 임의의 사각형을 말합니다. 사진의 파란색, 초록색 박스는 모두 bounding box이고, 이 중 초록색 박스는 <strong>ground truth box</strong>라고 합니다.</p>
<h3 id="b-feature-extraction">B. Feature extraction</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/530dbb34-d7bb-46da-9649-bd01a70039c7/image.png" alt=""></p>
<p>각 region proposal에서 고정된 길이의 4096차원 특징 벡터를 생성하기 위해, Krizhevsky 등이 설계한 CNN 아키텍처(AlexNet)를 사용합니다. 이 CNN 모델은 5개의 합성곱 계층과 2개의 완전 연결 계층을 가지고 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/96cbc56d-a882-45b5-b19b-1bea67a096d0/image.png" alt=""></p>
<p>제안된 영역의 크기나 비율에 관계없이 모든 영역을 CNN 입력 크기인 227x227 픽셀로 변환하기 위해 Affine Image Warping 기법을 사용합니다. 이 변환은 영역을 확대 또는 축소하여 CNN이 처리 가능한 고정 크기로 만듭니다. (bounding box를 확장(delite)할 때 추가할 픽셀 수 p=16)
<img src="https://velog.velcdn.com/images/dr_pepper/post/5fe10c39-ae15-47bc-b077-4e78d24eedd8/image.png" alt=""></p>
<p>*16 pixel의 여백을 추가함으로써 CNN이 학습할 때 객체 주변의 맥락 정보를 더 많이 포함할 수 있습니다. 이 추가된 여백은 CNN이 객체를 탐지하는 데 있어 더 많은 주변 정보를 활용할 수 있도록 돕습니다.</p>
<h2 id="22-test-time-detection">2.2. Test-time detection</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/720f6912-a6b0-4eb6-afaf-c6026fd00839/image.png" alt=""></p>
<p>Test time에선 새로운 이미지에서 Selective Search를 통해 약 2000개의 region proposal을 생성하고, 각 제안된 영역을 CNN에 입력하여 특징 벡터를 추출합니다.</p>
<p>이 특징 벡터들은 각 클래스의 SVM을 통해 분류되고, greedy non-maximum suppression을 사용해 겹치는 영역 중 높은 점수의 제안을 남깁니다.</p>
<h3 id="greedy-non-maximum-suppression">greedy non-maximum suppression?</h3>
<p>객체 탐지(Object Detection)에서 중복된 탐지 결과를 줄이기 위해 사용되는 알고리즘입니다. 이는 여러 객체 후보 영역에서 가장 신뢰도가 높은 탐지 결과만을 남기고 나머지는 제거하는 역할을 합니다. </p>
<h2 id="23-training">2.3. Training</h2>
<h3 id="a-supervised-pre-training---alexnet-architecture-2012">A. Supervised pre-training - AlexNet architecture (2012)</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/29b135af-90a5-4a0a-8744-1ca1cf23c420/image.png" alt=""></p>
<p>기본적으로 R-CNN은 Fine-tuning된 AlexNet 모델을 기반으로 만들어졌습니다. AlexNet은 연산속도를 높이기위해 2대의 GPU를 이용해 (본격적으로 딥러닝에 GPU 가속 방식을 사용했다고 함.) 병렬연산을 진행하고 5개의 convolutional layer, 3개의 fully-connected layer로 구성되어있습니다.</p>
<h3 id="b-domain-specific-fine-tuning">B. Domain-specific fine-tuning</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/be8a149d-dcb2-4d0c-9b7e-5caedb872aa4/image.png" alt=""></p>
<p>Domain-specific fine-tuning 과정은 R-CNN이 객체 탐지에서 높은 성능을 발휘할 수 있도록 하는 중요한 학습 과정입니다.
Pascal VOC 객체 탐지 데이터셋을 통해 AlexNet 모델을 Pre-train합니다.
그리고 Simgle image에서 약 2000개의 region proposal를 추출하고,
IoU가 0.5 이상이면 positive sample, 0.5 미만이면 negative sample로 분류합니다. positive sample을 32개, negative sample을 96개로 해서 Mini batch들을 만들어 사전학습된 AlexNet을 추가로 학습시킵니다.</p>
<blockquote>
<h3 id="iouintersection-over-union란">IoU(Intersection over Union)란?</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/fdf4e006-ce57-415e-8a9a-d2457e4175ce/image.png" alt=""><strong>IoU (Intersection over Union)</strong>는 <strong>객체 탐지(Object Detection)</strong>와 같은 컴퓨터 비전 작업에서 <strong>예측한 경계 상자(predicted bounding box)</strong>와 <strong>실제 경계 상자(ground truth bounding box)</strong>가 얼마나 잘 겹치는지를 측정하는 지표입니다.</p>
</blockquote>
<h3 id="c-object-category-classifiers---linear-svms">C. Object category classifiers - Linear SVMs</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/6ffad8fc-1d8e-4911-9b30-136f60b4a908/image.png" alt=""></p>
<p>위 사진은 Linear SVMs을 통해 object category를 classification 하는 과정입니다.
AlexNet을 Fine-tuning하는 과정과 유사하지만, 몇 가지 차이점이 있습니다.
먼저 <strong>(1)</strong> IoU의 기준을 0.5에서 0.3으로 낮추었습니다. (validation set에서 0.01부터 0.5까지의 값에 대해 grid search를 진행한 결과) 여기서, IoU가 0.3이 넘는 sample들을 모두 Positive sample로 사용하지 않고, selective search를 통해 찾은 <strong>ground truth bounding box</strong>만을 Positive sample로 사용합니다.
<strong>(2) Hard negative mining</strong> 방식을 사용했습니다.</p>
<blockquote>
<p><strong>Hard negative mining</strong> 이란?
<img src="https://velog.velcdn.com/images/dr_pepper/post/42e8cc0c-57cc-4a69-baf6-afb04f0307a4/image.png" alt="">위 사진처럼 초기에 학습된 모델은 정확히 객체를 판별하지 못합니다.
Hard negative mining 방식은 학습된 모델을 토대로 모든 데이터셋을 테스트하고, 잘 못 분류된 예시(Hard negatives)들을 찾아냅니다. 그리고 식별된 hard negative를 추가하여 모델을 재학습시킵니다. 필요에 따라 여러번 반복합니다.
<img src="https://velog.velcdn.com/images/dr_pepper/post/e7f71687-ee4e-4f91-ba89-7698b3a923c8/image.png" alt=""></p>
</blockquote>
<h1 id="r-cnn-요약">R-CNN 요약</h1>
<p>R-CNN은 크게 4가지 과정을 거친다. </p>
<ol>
<li>input image가 들어감</li>
<li>2000개의 객체가 있을 법한 위치인 후보영역(region proposal)을 추출 (selective search 알고리즘)</li>
<li>Large CNN(AlexNet)을 사용해서 각 후보영역을 계산.</li>
<li>추출된 특징을 사용하여 SVM을 통해 각 영역을 클래스별로 분류. 예를 들어, 제안된 영역이 사람인지 아닌지 등을 판단</li>
</ol>
<h3 id="사용된-알고리즘-모델">사용된 알고리즘? 모델?</h3>
<ol>
<li>Selective search를 사용해 객체 추출 (bounding box)</li>
<li>Pre-trained(Fine-tuning) AlexNet을 IoU 0.3을 기준으로 retrain 시킨다.</li>
<li>Hard negative mining 방식으로 잘 못 분류된 bounding box를 찾아내고, 이를 negative sample에 추가시켜 재학습 시킨다.</li>
<li>SVM을 통해 classification을 수행하고, Greedy Non-Maximum Suppression을 적용하여 가장 신뢰도가 높은 bounding box를 선택하고 이 box와 IoU(겹침)이 높은 다른 box는 제거한다.</li>
</ol>
<h1 id="r-cnn-의의한계">R-CNN 의의/한계</h1>
<h3 id="의의">의의</h3>
<ol>
<li>CNN을 객체 탐지에 성공적으로 적용</li>
<li>Region proposal(객체 추출)을 활용하는 새로운 접근 방식을 제시<h3 id="한계">한계</h3>
</li>
<li>각 resion proposal에 대해 개별적으로 CNN을 수행하기 때문에 계산 비용이 매우 높고, 속도가 느려 실시간 탐지에는 부적합</li>
<li>기본적으로 고비용 알고리즘인 selective search algoritm에 의존적</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[3주차 스터디 목록]]></title>
            <link>https://velog.io/@dr_pepper/Real-Time-Flying-Object-Detection-with-YOLOv8-fccr1sw5</link>
            <guid>https://velog.io/@dr_pepper/Real-Time-Flying-Object-Detection-with-YOLOv8-fccr1sw5</guid>
            <pubDate>Mon, 11 Nov 2024 07:19:12 GMT</pubDate>
            <description><![CDATA[<p>3주차 스터디 목록입니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ELMo(2018): Deep Contextualized Word Representation]]></title>
            <link>https://velog.io/@dr_pepper/ELMo2018-Deep-Contextualized-Word-Representation</link>
            <guid>https://velog.io/@dr_pepper/ELMo2018-Deep-Contextualized-Word-Representation</guid>
            <pubDate>Wed, 16 Oct 2024 09:40:02 GMT</pubDate>
            <description><![CDATA[<h2 id="0-abstract">0. Abstract</h2>
<p>새로운 형태의 깊은 문맥화된(deep contextual-ized) 단어 표현을 소개하며, 이 표현이 두 가지 주요 문제를 해결한다고 설명한다:</p>
<ol>
<li><p>단어 사용의 복잡한 특성 모델링: 여기에는 구문적(syntax) 및 의미적(semantics) 특성이 포함된다. ELMo 단어가 문맥에 따라 어떻게 다르게 사용되는지(다의성, polysemy)를 반영할 수 있는 모델을 제안한다.</p>
</li>
<li><p>문맥에 따른 의미 변화 반영: 단어가 문장 내에서 다르게 사용될 때, 이를 모델링하는 것이 핵심 목표다. 이를 위해 ELMo는 양방향 언어 모델(bidrectional Language Model, biLM)의 내부 상태를 학습하여 각 단어의 벡터를 문맥 의존적으로 변형시킨다.</p>
</li>
</ol>
<p>ELMo의 큰 장점은 사전 학습된 양방향 언어 모델을 기반으로 하기 때문에 기존 NLP 모델에 쉽게 통합될 수 있으며, 텍스트 추론, 질문 응답, 감정 분석 등 여러 NLP 문제에서 최신 성능을 기록하는 데 기여할 수 있다는 점이다.</p>
<p>이 논문은 6개의 주요 NLP 작업에서 ELMo가 어떻게 성능을 향상시키는지 실험을 통해 보여주며, 기존 접근 방식보다 더 나은 결과를 달성한다. 특히, 사전 학습된 모델의 내부 상태를 드러내는 것이 중요하며, 이를 통해 후속 모델들이 다양한 준지도 학습 신호를 혼합해 사용할 수 있음을 강조한다.</p>
<p>*Corpus: NLP에서 대규모 텍스트 데이터를 의미.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p>ELMo(Embeddings from Language Models)라는 새로운 형태의 깊은 문맥적 단어 표현을 소개하며, 이는 기존의 사전 훈련된 단어 임베딩(예: Word2Vec, GloVe)이 가진 몇 가지 한계를 해결하려는 목적을 가지고 있다.</p>
<p>기존 단어 임베딩의 한계:</p>
<ul>
<li>기존 임베딩은 주어진 단어의 고정된 표현을 사용하기 때문에 단어의 의미가 문맥에 따라 변화하는 다의어 문제를 잘 다루지 못했다.</li>
</ul>
<p>ELMo의 차별점:</p>
<ul>
<li>깊은 문맥적 임베딩: ELMo는 문맥에 따라 단어의 의미를 동적으로 변환할 수 있도록 각 단어가 입력된 문장의 전체 문맥에 기반하여 임베딩을 생성한다.</li>
<li>biLSTM 사용: ELMo는 bidirectional LSTM(biLSTM)을 기반으로 하며, 큰 텍스트 코퍼스에서 언어 모델(LM) 목표로 학습된다.</li>
<li>모든 내부 레이어 활용: 단어 임베딩은 단순히 biLSTM의 마지막 레이어에서 추출되는 것이 아니라, 모든 내부 레이어의 선형 결합을 통해 만들어진다. 이는 단순히 마지막 레이어만 사용하는 것보다 훨씬 더 풍부한 정보를 제공한다.</li>
</ul>
<p>문맥 정보의 활용:</p>
<ul>
<li>ELMo의 고차원 레이어는 단어의 문맥적 의미를 잘 반영하여, 단어 의미 구분(WSD)과 같은 태스크에서 유용하게 사용될 수 있다.</li>
<li>낮은 차원의 레이어는 구문적 정보(예: 품사 태깅)와 같은 문법적 요소를 캡처한다.</li>
</ul>
<p>결과:</p>
<ul>
<li>다양한 NLP 태스크에서 ELMo를 적용한 결과, 기존 방법에 비해 성능이 크게 향상되었다. 특히 텍스트 추론, 질문 응답, 감정 분석과 같은 복잡한 문제에서 성과를 보였으며, 때로는 20%에 달하는 상대적 오류 감소를 기록했다.</li>
</ul>
<h2 id="2-related-work">2. Related work</h2>
<p>언어 모델에서 사전 훈련된 단어 벡터와 문맥을 반영한 표현을 학습하는 다양한 기존 연구를 설명하며, 새로운 ELMo(Embeddings from Language Models) 모델이 이들 연구와 어떻게 다른지 다룬다.</p>
<ol>
<li><p>사전 훈련된 단어 벡터의 중요성과 한계를 언급한다. 단어 벡터는 많은 NLP 모델에서 중요한 구성 요소이며, 다양한 태스크에서 유용하지만, 이 벡터들은 각 단어에 대해 문맥에 독립적인 고정된 표현만을 제공한다. 이를 보완하기 위해 최근에는 단어의 다양한 의미를 포착하는 방법들이 연구되었다. 예를 들어, 서브워드 정보(단어의 부분 정보)를 활용하거나 단어의 의미별로 서로 다른 벡터를 학습하는 방식들이 제안되었다.</p>
</li>
<li><p>문맥을 고려한 단어 표현을 학습하는 방식들도 제안되었다. context2vec이나 CoVe와 같은 모델들은 단어 주변의 문맥 정보를 고려한 단어 표현을 생성한다. CoVe는 기계 번역 시스템을 사용한 반면, ELMo는 큰 규모의 모노링구얼 데이터(한 언어로만 구성된 데이터)를 사용하여 학습되며, 이로 인해 더 풍부한 표현을 제공한다. 특히, ELMo는 깊이 있는 문맥화된 표현을 학습하고, 이를 통해 다양한 NLP 태스크에서 뛰어난 성능을 발휘한다.</p>
</li>
<li><p>이전 연구들은 심층 양방향 RNN(biRNN)의 다른 레이어가 서로 다른 유형의 정보를 인코딩한다는 점을 강조한다. ELMo 역시 이러한 구조를 통해 다양한 정보를 효율적으로 인코딩하며, 이를 다운스트림 태스크에 활용할 때 매우 유용하다는 것을 보여준다.</p>
</li>
</ol>
<h2 id="3-elmo-embeddings-from-language-models">3. ELMo: Embeddings from Language Models</h2>
<h3 id="3-1-양방향-언어-모델bidirectional-language-models">3-1. 양방향 언어 모델(Bidirectional language models)</h3>
<p>이 부분은 ELMo의 핵심 구성 요소 중 하나인 Bidrectional Language Model (양방향 언어 모델, biLM)을 설명하고 있다. 양방향 언어 모델은 주어진 시퀀스에서 단어의 앞뒤 문맥을 모두 고려하여 단어 임베딩을 생성하는 방법이다.</p>
<h4 id="1-순방향-언어-모델-forward-language-model">1. 순방향 언어 모델 (Forward Language Model)</h4>
<p>순방향 언어 모델은 주어진 시퀀스에서 <strong>앞에서부터 뒤로</strong> 단어를 예측한다. 시퀀스가 (t_1, t_2, …, t_N)일 때, 각 단어 t_k는 그 이전 단어들 의 문맥에 따라 예측된다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/ca1254f0-bd01-43c7-813f-8756cf4159c2/image.png" alt=""></p>
<p>즉, t_1부터 t_N까지의 시퀀스 전체의 확률은 각 단어 t_k가 그 이전 단어들 (t_1, …, t_{k-1})에 기반해 예측되는 조건부 확률들의 곱이다. 예를 들어, 문장을 순서대로 처리하며, t_k는 그 이전의 모든 단어들로부터 추론된다.</p>
<h4 id="2-역방향-언어-모델-backward-language-model">2. 역방향 언어 모델 (Backward Language Model)</h4>
<p>역방향 언어 모델은 순방향과 비슷하지만, 시퀀스를 <strong>반대로</strong> 처리한다는 점이 다르다. 즉, 단어의 다음 문맥을 기반으로 그 이전 단어를 예측하는 방식이다. 주어진 시퀀스 (t_1, t_2, …, t_N)에서 각 단어 t_k는 그 이후에 나올 단어들 (t_{k+1}, t_{k+2}, …, t_N)을 기반으로 예측된다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/7fbb673b-c358-414d-be65-f28ac0b18828/image.png" alt=""></p>
<p>이 역방향 모델도 LSTM 구조를 따르며, 시퀀스를 역순으로 처리해 각 단어에 대해 다음 문맥을 사용해 문맥 의존적인 표현을 생성한다.</p>
<h4 id="3-양방향-언어-모델-bidrectional-language-model-bilm">3. 양방향 언어 모델 (Bidrectional Language Model, biLM)</h4>
<p>양방향 언어 모델(BiLM)은 순방향 언어 모델과 역방향 언어 모델을 결합한 구조이다. BiLM은 단어의 앞뒤 문맥을 모두 고려하여 단어의 의미를 더 잘 반영할 수 있다.</p>
<ul>
<li>BiLM의 손실 함수: BiLM은 순방향 모델과 역방향 모델의 로그 가능도(log-likelihood)를 함께 최적화한다. 순방향 모델은 이전 문맥을 기반으로, 역방향 모델은 이후 문맥을 기반으로 각각의 단어를 예측하며, 이를 동시에 학습한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/0e5cabfe-255d-4cdd-8e7c-4863cf9b9cf2/image.png" alt=""></p>
<ul>
<li>파라미터 공유: 순방향과 역방향 LSTM에서 토큰 표현 파라미터와 Softmax 레이어 파라미터는 공유하지만, 순방향과 역방향 LSTM의 파라미터는 서로 독립적이다. 이로써 양방향 모델에서 동일한 입력 토큰에 대해 일관된 토큰 표현을 사용할 수 있지만, 문맥을 처리하는 방식은 독립적으로 학습된다.</li>
</ul>
<p>이 구조 덕분에 ELMo는 문맥을 반영한 동적 단어 임베딩을 생성하며, 다양한 NLP 테스크에서 성능을 향상시킬 수 있다.</p>
<h3 id="3-2-elmo">3-2. ELMo</h3>
<p>ELMo가 biLM(Bidrectional Language Model)에서 생성된 여러 계층의 중간 표현들을 결합해 특정 작업에 맞는 단어 임베딩을 만드는 방법을 설명한다. ELMo는 단어마다 여러 층의 표현을 가중합해 사용하므로, 각 작업에 맞게 임베딩을 조정할 수 있다.</p>
<h4 id="1-bilm이-만드는-표현-intermediate-layer-representations">1. biLM이 만드는 표현 (Intermediate Layer Representations)</h4>
<p>biLM은 양방향 LSTM으로 구성된 언어 모델로, 각 토큰 t_k에 대해 여러 계층의 문맥 의존적 표현을 생성한다. biLM은 L층의 양방향 LSTM으로 이루어져 있으며, 이 모델을 통해 각 단어는 총 2L + 1 개의 표현을 얻을 수 있다. 여기서 표현들은 다음과 같은 것들로 구성된다:</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3152f3cd-2092-494b-816c-d68c5a63757e/image.png" alt=""></p>
<ul>
<li>입력 임베딩</li>
<li>순방향 LSTM의 j번째 층에서의 출력</li>
<li>역방향 LSTM의 j번째 층에서의 출력</li>
</ul>
<p>이들을 모두 합치면 다음과 같은 표현 벡터가 생성된다:</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/56be7152-cb81-4d57-a937-507a4d325418/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/155ee253-613b-4c6e-9db5-f67b18e5e8d9/image.png" alt=""></p>
<p>j-번째 층에서 양방향 LSTM의 출력을 합친 벡터이다.</p>
<h4 id="2-elmo-표현을-하나의-벡터로-결합-collapsing-layers-into-a-single-vector">2. ELMo 표현을 하나의 벡터로 결합 (Collapsing Layers into a Single Vector)</h4>
<p>ELMo는 biLM에서 생성된 여러 층의 표현들을 결합해 하나의 벡터를 만든다. 가장 간단한 경우에는 biLM의 <strong>최상위 계층</strong>의 출력을 선택하는 방식이다. 예를 들어:</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8cad5985-f7a8-404c-be20-a0d6d3d1a2e7/image.png" alt=""> 
<img src="https://velog.velcdn.com/images/dr_pepper/post/c20d24e8-2658-4825-af3b-4f68d6e8adf6/image.png" alt=""></p>
<p>이 방식은 Peters et al. (2017)과 McCann et al. (2017)의 TagLM 및 CoVe 모델에서 사용된 방식과 유사하다. 최상위 계층만을 사용하는 방식이지만, 모든 층의 표현을 가중합해 사용할 수 있다.</p>
<h4 id="3-작업별-가중합-task-specific-weighted-sum-of-layers">3. 작업별 가중합 (Task-Specific Weighted Sum of Layers)</h4>
<p>ELMo의 핵심 장점은 단순히 최상위 층의 출력을 사용하는 것이 아니라, 각 층의 출력을 <strong>가중합</strong>하여 <strong>특정 작업(task)에 맞게</strong> 조정할 수 있다는 것이다. 이를 수식으로 표현하면 다음과 같다:</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/4c43fe97-d39d-4b07-92f7-88a6e41a2c4d/image.png" alt=""></p>
<ul>
<li>s_j^{task}: 각 층 j의 표현에 할당된 가중치로, <strong>softmax로 정규화</strong>된 값이다. 이 가중치들은 학습을 통해 각 작업에 맞는 최적의 값을 찾는다.</li>
<li>r_{k, j}^{LM}: 전체 ELMo 벡터의 크기를 조정하기 위한 <strong>스칼라 파라미터</strong>이다. 이 값은 각 작업에 맞춰 학습되며, 최적화 과정에서 중요한 역할을 한다.</li>
</ul>
<p>이 과정에서 각 층의 가중치는 작업(task)에 맞게 자동으로 학습되므로, 특정 작업에 더 적합한 표현이 강화된다.</p>
<h4 id="4-레이어-정규화-layer-normalization">4. 레이어 정규화 (Layer Normalization)</h4>
<p>각 층에서 나온 출력 값들은 분포가 서로 다를 수 있다. 따라서 가중합을 하기 전에 <strong>Layer Normalization</strong>을 적용하는 경우가 있다. 레이어 정규화는 각 층의 출력을 정규화하여, 값들의 분포 차이를 줄이고 더 안정적인 학습을 가능하게 한다.</p>
<p>Ba et al. (2016)의 <strong>레이어 정규화</strong> 기법은 층마다 평균과 분산을 조정하여 각 층의 출력을 정규화한다. 이를 통해 가중합 과정이 더 효과적으로 이루어지며, 이는 특히 층 간 분포가 큰 차이를 보일 때 도움이 된다.</p>
<h4 id="요약">요약</h4>
<ol>
<li><strong>biLM 출력</strong>: 각 토큰 tkt_ktk에 대해 biLM은 토큰 임베딩과 여러 층의 양방향 LSTM 출력을 포함해 총 2L+12L+12L+1개의 표현을 만든다.</li>
<li><strong>ELMo 표현 결합</strong>: ELMo는 각 층의 출력을 결합해 단일 벡터로 만들며, 이는 특정 작업에 맞게 조정됩니다. 단순한 경우 최상위 층을 사용할 수 있지만, 더 일반적으로는 각 층의 출력을 가중합하여 사용한다.</li>
<li><strong>작업별 가중합</strong>: 각 층의 가중치는 softmax로 정규화된 값이며, 작업별로 최적화됩니다. 또한, 벡터 크기를 조정하는 스칼라 파라미터도 함께 학습된다.</li>
<li><strong>레이어 정규화</strong>: 층 간의 출력 분포 차이를 줄이기 위해 가중합 전에 레이어 정규화를 적용할 수 있다.</li>
</ol>
<p>이를 통해 ELMo는 다양한 NLP 작업에서 문맥에 맞는 동적인 단어 임베딩을 제공하며, 작업에 따라 단어 표현을 최적화할 수 있는 유연성을 제공한다.</p>
<h2 id="4-evaluation">4. Evaluation</h2>
<p>ELMo(Embeddings from Language Models)를 다양한 NLP 태스크에서 사용했을 때의 성능 향상을 평가한 결과를 제시한다. ELMo를 기존 모델에 추가하는 것만으로도 모든 실험에서 성능이 개선되었으며, 태스크에 따라 6%에서 20%까지의 오류 감소를 확인할 수 있다.</p>
<p>[Table 1]
<img src="https://velog.velcdn.com/images/dr_pepper/post/f450073a-70ee-4652-9cc5-dcf31fba31f3/image.png" alt=""></p>
<ul>
<li>Previous SOTA:  SQuAD 태스크에 대해 보고된 이전의 최고 성능 점수</li>
<li>Our Baseline: ELMo를 사용하지 않은 모델의 성능. 즉, ELMo를 적용하기 전의 성능</li>
<li>ELMo + Baseline: ELMo를 적용한 후의 모델이 SQuAD 태스크에서 달성한 성능</li>
<li>Increase (Absolute/Relative):<ul>
<li>Absolute Increase: ‘ELMo + Baseline’ - ‘Our Baseline’</li>
<li>Relative Increase: (Absolute Increase / Our Baseline) * 100</li>
</ul>
</li>
</ul>
<p>ELMo의 성능은 텍스트 이해와 관련된 다양한 NLP 작업에서 평가되었다. </p>
<p>질문 응답(SQuAD), 텍스트 추론(SNLI), 의미역 분석(SRL), 개체명 인식(NER), 감정 분석(SST-5), 그리고 공지 참조 해결(Coreference Resolution) 등의 과제에서 ELMo를 사용해 성능을 평가했다.</p>
<p>실험 결과, ELMo는 모든 태스크에서 최신 성능을 기록하며, 기존 모델 대비 상당한 성능 향상을 보였다. 예를 들어, SQuAD 데이터셋에서 ELMo를 추가한 모델은 F1 점수가 81.1%에서 85.8%로 4.7% 상승했으며, 이는 상대적으로 24.9%의 오류 감소에 해당한다. 마찬가지로 NER 작업에서도 F1 점수가 90.15%에서 92.22%로 2.06% 상승했으며, 이는 21%의 상대적 오류 감소를 의미한다.</p>
<h2 id="5-analysis">5. Analysis</h2>
<h4 id="table-1">Table 1</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/af98a383-c61d-4975-8c66-63231f532e7c/image.png" alt="">
여섯 개의 NLP benchmark task에 ELMo를 적용한 결과를 보여준다.</p>
<p>각각의 task는 차례대로 QA task, Textual entailment, Sementic role labeling, Coreference resolution, Named entity extraction, Sentiment analysis의 benchmark task 이다.</p>
<h4 id="table-2">Table 2</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/ddafa4b9-bda3-41df-8392-732f4e98a7d4/image.png" alt="">
regularization parameter λ에 따른 성능 비교이다.</p>
<p>모든 biLM layer를 사용하여 ELMo를 표현하고 적절한 λ를 적용하였을 때 가장 좋은 성능을 보였다.</p>
<h4 id="table-3">Table 3</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/bd47f652-43ac-4964-ba62-d40890412a82/image.png" alt="">
ELMo representation이 추가되는 위치에 따른 성능 비교이다.</p>
<p>단순히 input의 위치에서만 ELMo를 추가하는 것이 아닌, 입,출력 동시에 추가했을 경우, 출력에만 추가했을 경우를 비교했다.
세 가지 Task의 결과가 일치되지는 않았지만 대체로 입,출력에 모두 ELMo를 적용한 모델 성능이 좋았다. 하지만 이를 통해, Task 별로 ELMo representation이 필요한 위치가 다름을 알 수 있다.</p>
<h4 id="table-4">Table 4</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/18682df0-54f7-4d27-b8e5-178a8b14bf02/image.png" alt="">
play 라는 단어에 대한 GloVe와 biLM의 representation vector를 통하여 유사한 단어들을 확인해본 결과이다.</p>
<p>GloVe의 결과는 스포츠와 관련된 단어들이 주를 이뤘다. 그리고 GloVe는 하나의 단어에 대해 하나의 벡터 표현만을 갖고 있기 때문에 같은 play를 유사한 단어로 추천하지 않았다.반면에, biLM의 play는 각각 다른 문맥에서 주어진 play와 의미가 일치하는 play를 각각 유사한 단어로 추천한 결과를 확인할 수 있다.</p>
<h4 id="table-56">Table 5,6</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/7a7a85bd-0da8-437a-804e-89421d1981f9/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/4c253c9b-d02d-4719-b21d-80bcf1ef4756/image.png" alt=""></p>
<p>Table 5는 Context 능력이 중요한 Word sense disambiguation(WSD, 단어 의미 중의성해소) task의 결과이며, Table 6는 Syntax 능력이 중요한  Pos tagging task의 결과이다.</p>
<p>우선, 두 실험에서 모두 biLM이 준수한 성능을 보였음을 확인할 수 있다.</p>
<p>본 실험을 통해 알 수 있는 중요한 정보가 있다.
WSD의 경우, First layer를 이용한 것 보다 Second layer를 이용한 성능이 좋았기 때문에 higer-layer가 context 파악에 있어 더 중요한 정보를 제공 한다는 것을 확인할 수 있었다.
또한, POS-tagging에 있어서는 First layer를 사용한 성능이 더 좋았다는 점에서 lower-layer가 Syntax를 파악에 있어 더 중요한 정보를 제공한다는 것을 확인할 수 있었다.</p>
<h4 id="figure-1">Figure 1</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8634cf63-1fa8-47ac-a6e9-31f11dbeca3e/image.png" alt="">
Train set의 크기에 따른 성능 비교이다.
학습데이터가 작을수록 ELMo를 사용하면 더 효율적인 학습이 가능함을 확인할 수 있다.</p>
<h4 id="figure-2">Figure 2</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/0c6f6652-92ce-4f91-bc4f-3c2268068dc4/image.png" alt="">
task의 Input Layer와 Output Layer가 더 높은 가중치를 두는 biLM layer를 확인하기 위한 시각화 결과이다.</p>
<p>Input Layer는 상대적으로 첫번째 layer에 높은 가중치를 두었으며, Output Layer는 상대적으로 모든 layer에 대해 균형잡힌 가중치를 두고 있음을 확인할 수 있다.</p>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>ELMo는 기존의 단어 임베딩 기법과 달리, 단어의 문맥적 의미를 반영하는 깊은 문맥화된 단어 표현을 제공한다. 이 논문은 ELMo가 단순한 고정된 단어 벡터를 사용하는 기존의 임베딩 기법보다 훨씬 더 풍부하고 정교한 표현을 제공함을 입증했다. 특히, 양방향 언어 모델(biLM)을 사용하여 각 단어의 앞뒤 문맥을 모두 고려한 벡터를 생성하며, 이는 문법적 정보와 의미적 정보를 모두 포함하는 다층적 표현을 가능하게 한다.</p>
<p>ELMo는 다양한 NLP 과제에서 최신 성능을 기록하며, 기존 모델에 쉽게 추가할 수 있는 장점이 있다. 또한, ELMo는 모든 층의 정보를 결합하여 단일 층에서 파생된 벡터를 사용하는 기존 방식보다 더 풍부한 문맥 정보를 제공하며, 다의어 문제나 문맥 변화에 따른 의미 변화를 효과적으로 처리할 수 있다. 저자들은 ELMo가 앞으로도 많은 NLP 문제에서 중요한 역할을 할 것으로 기대하며, 특히 적은 양의 데이터로도 높은 성능을 발휘할 수 있는 강력한 모델임을 강조한다. 결론적으로, ELMo는 향후 다양한 NLP 작업에서 문맥화된 단어 표현의 표준이 될 가능성이 크다고 본다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Depth Map Prediction from a Single Image using a Multi-Scale Deep Network]]></title>
            <link>https://velog.io/@dr_pepper/Depth-Map-Prediction-from-a-Single-Image-using-a-Multi-Scale-Deep-Network</link>
            <guid>https://velog.io/@dr_pepper/Depth-Map-Prediction-from-a-Single-Image-using-a-Multi-Scale-Deep-Network</guid>
            <pubDate>Wed, 16 Oct 2024 07:05:30 GMT</pubDate>
            <description><![CDATA[<h2 id="1abstract">1.Abstract</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/0aad78b6-1665-41aa-b759-e17de4093133/image.png" alt=""></p>
<p> 스테레오 이미지의 경우 지역적인 정보만으로 깊이 추정이 가능하지만 Monocular와 같은 경우 더 다양한 단서로부터 전역, 지역적인 정보를 통합해야 하므로 더 어렵다.</p>
<p> 따라서 이 논문에서는 두개의 deep network를 사용하여 이러한 문제를 해결하였고, 스케일 자체보다 깊이 관계를 측정하기 위한 Loss함수를 제시했다.</p>
<h2 id="2-related-work">2. Related Work</h2>
<p>Depth Estimation은 크게 두가지 방식으로 나뉜다.</p>
<ol>
<li><p>Stereo
사람의 눈과 유사하게 여러 개의 카메라를 사용하여 이미지를 획득하고, 깊이 정보를 계산하는 방식이다. 두 이미지간의 시차를 분석해서 거리를 추정하는 방식이다.</p>
</li>
<li><p>Monocular
하나의 카메라로 촬영한 이미지를 분석해서 깊이 정보를 추정한다. 이미지 내의 단서(원근, 그림자, 텍스처 변화, 물체 크기 변화 등)를 활용해서 깊이를 유추한다.
stereo이미지보다 monocular 이미지가 압도적으로 많으므로 monocular에서 깊이 정보를 추출하는 기술은 더 많은 분야에 사용될 수 있을것이다.</p>
</li>
</ol>
<h4 id="1-stereo-depth-estimation">1. stereo depth estimation</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3f4956dd-ed07-42c6-8ea0-fce017741734/image.png" alt=""></p>
<p> 동일한 장면을 다른 각도에서 촬영한 두 개의 이미지에서 픽셀 간의 변위를 계산하여 깊이를 추정하는 방법이다. 이는 기하학적 원리이를 이용한 것이고 정확한 카메라 정보를 필요로 하며 계산량이 많다는 단점이 있다.</p>
<h4 id="2-monocular-depth-estimation">2. Monocular depth estimation</h4>
<p> 초기 연구에서는 선의 각도, 소실점, 객체 크기, 대기 효과와 같은 깊이 단서를 이용하여 깊이를 추정함. 그러나 이런 방법은 복잡한 장면에서는 성능이 나오지 않는다.</p>
<h2 id="3-approach">3. Approach</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/02f02490-2be9-4e5e-9b5d-d5c967cb9e65/image.png" alt=""></p>
<p> 이 논문에서는 Monocular depth estimation을 위해서 두 개의 딥러닝 네트워크를 사용하는 방법을 제시하였다. 위 그림에서 위의 부분이 Global Coarse-Scale Network이고 아래 부분이 Local Fine-Scale Network이다.</p>
<h4 id="1global-coarse-scale-network">1.Global Coarse-Scale Network</h4>
<p> 이미지 전체를 보고 장면의 대략적인 깊이 구조를 파악하는 네트워크. 여러개의 Conv layer와 max pooling layer를 통해 이미지의 특징을 추출한다.
 Conv layer는 이미지의 지역적인 특징을 추출하고, max pooling layer는 중요한 특징을 강조하면서 정보의 차원을 줄이는 역할을 합니다.
 마지막에는 fully connected layer를 사용하여 전체 이미지의 정보를 통합하고 대략적인 Depth Map을 예측함으로써 이미지의 전체 정보를 활용하여 전역적인 깊이 단서를 학습합니다.</p>
<h4 id="2-local-fine-scale-network">2. Local Fine-Scale Network</h4>
<p> Global Coarse-Scale Network의 예측 결과를 바탕으로 각 픽셀의 깊이 값을 정확하게 조정한다.
 Global Coarse-Scale Network의 출력을 저해상도의 depth map으로 입력받아 고해상도 depth map을 예측한다. Global Coarse-Scale Network의 출력뿐만 아니라 원본 이미지 정보도 함꼐 입력받아서 지역적인 깊이 단서까지 활용한다.
 이를 통해 객체 경계, 모서리, 세부적인 깊이 변화 등을 더 정확하게 예측할 수 있다.</p>
<h4 id="3-scale-invariant-error">3. Scale-Invariant Error</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/bab85b41-7125-4059-9fa5-fe737b9a3223/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/e5e96a96-912e-45cb-8562-2480adecfcce/image.png" alt=""></p>
<p> monocular depth estimation에서는 실제 깊이 값을 정확히 예측하기 어렵다. 같은 이미지라도 카메라와의 거리에 따라 실제 깊이 값은 달라질 수 있다는 문제가 있다.</p>
<p> 따라서 픽셀 간의 상대적인 깊이 관계에 집중해서 학습하여 전역적인 스케일에서 불변하는 오류 함수를 사용함으로써 깊이 추정의 안정성을 높이고 좀 더 현실적인 depth map을 예측할 수 있다.</p>
<p> 예측값이 y와 ground truth값인 y* 값의 차이를 통해 loss를 계산하는데 이때 모든 i값에 대한 ground truth와의 차이를 평균을 낸 a값을 더하면서 scale을 보정해주었다.
(y는 예측값, y*는 ground truth 값)</p>
<p> 밑에 있는 2, 3 식은 실제로 논문에서 사용하지는 않았지만 두가지 픽셀간의 상관관계에 대한 로스 함수이다. 3번식에서 앞부분은 L2 loss 형태이고 두번째 식은 깊이 차이의 방향을 고려하는 항이다.</p>
<p> 따라서 training에서는 아래 이미지에서 사용되는 함수를 사용했는데 이는 위의 loss를 사용해서 lamda가 0일때는 L2 loss, 1일때는 scale-variant loss이다. 이때 lamda를 0.5로 사용하면 출력이 약간 개선되는 것을 발견했다. </p>
<h4 id="4-data-augmentation">4. Data Augmentation</h4>
<p> <img src="https://velog.velcdn.com/images/dr_pepper/post/b2dc426d-fde8-44dd-a590-7ae6159c9f4f/image.png" alt=""></p>
<p> 데이터 양을 늘리고 다양한 환경에 대한 일반화 성능을 높이기 위해 이미지 스케일링, 회전, 이동, 색상 변환, 뒤집기 등의 데이터 증강 기법을 사용했습니다.</p>
<h2 id="4-results">4. Results</h2>
<h4 id="1nyu-depth">1.NYU Depth</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/54fb2687-e5b2-47c6-8f0b-093fdf0073e6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/6155564e-9041-4640-a23a-d021f0c1cf5f/image.png" alt=""></p>
<h4 id="2-kitti">2. KITTI</h4>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/9b7a05c2-d30a-4e92-a680-41db1ba8d5d5/image.png" alt=""></p>
<h2 id="5-after">5. After</h2>
<p>coarse-fine network는 향후 &#39;BERT for Spatial Reasoning in Monocular Depth Estimation&#39;에서 자연어 처리 분야에서 널리 사용되는 BERT 모델을 깊이 예측에 적용했다. 이미지의 Contextual 정보를 효과적으로 추출하고, self-attention 메커니즘을 통해 픽셀 간의 관계를 모델링하여 정확도를 높였습니다.
또한 scale-invariant error 또한 image depth estimation에서 사용되고 있다.</p>
<p>모델 코드:
<a href="https://github.com/imran3180/depth-map-prediction/blob/master/model.py">https://github.com/imran3180/depth-map-prediction/blob/master/model.py</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[LLMEmbed: Rethinking Lightweight LLM’s Genuine Function
in Text Classification (ACL 2024)]]></title>
            <link>https://velog.io/@dr_pepper/LLMEmbed-Rethinking-Lightweight-LLMs-Genuine-Functionin-Text-Classification-ACL-2024</link>
            <guid>https://velog.io/@dr_pepper/LLMEmbed-Rethinking-Lightweight-LLMs-Genuine-Functionin-Text-Classification-ACL-2024</guid>
            <pubDate>Wed, 16 Oct 2024 04:25:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>LLMEmbed: Rethinking Lightweight LLM’s Genuine Function
in Text Classification</strong></p>
</blockquote>
<h2 id="1-문제점">1. 문제점</h2>
<ul>
<li><p><strong>모델 크기의 증가로 인한 inference 지연</strong></p>
<p>  → LLM은 성능이 뛰어나지만, 파라미터 수가 늘어나면서 추론 시간이 길어짐.</p>
</li>
<li><p><strong>프롬프트 기반 패러다임의 복잡성과 높은 cost</strong></p>
<p>  → COT, TOT 같은 프롬프트 엔지니어링이 필요하고, 경량 LLM에서는 기대만큼 성능을 못 내는 경우가 많음.</p>
</li>
<li><p><strong>경량 LLM의 성능 한계</strong></p>
<p>  → LLAMA2-7B 같은 경량 모델은 파라미터 수가 작아서 자원 소모는 적지만, GPT-4 같은 대형 모델에 비해 복잡한 작업(예: 텍스트 분류나 추론)에서 성능이 떨어짐.</p>
</li>
<li><p><strong>프롬프트 기반 접근법의 한계: Hallucination</strong></p>
<p>  → 프롬프트 기반 접근법에서는 LLM이 입력을 제대로 이해하지 못하거나, 입력과 상관없는 내용을 생성하는 <strong>환각(hallucination)</strong> 현상이 발생할 수 있음.</p>
</li>
</ul>
<h2 id="2-제안-방법">2. 제안 방법</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a1e39435-5867-49c8-bd9a-d992f841481e/image.png" alt=""></p>
<h3 id="제안된-llmembed-방법-아이디어">제안된 LLMEmbed 방법? 아이디어</h3>
<ul>
<li>프롬프트 기반 접근법 대신 Lighweighted LLM의 의미적 임베딩(semantic embeddings)을 직접 활용하여 텍스트 분류 작업을 수행.</li>
<li>이를 통해 <strong>복잡한 프롬프트 설계</strong> 없이도 높은 성능을 유지하고, <strong>추가적인 토큰 비용(token overhead)</strong> 없이 효율적으로 학습.</li>
</ul>
<h3 id="llmembed의-장점">LLMEmbed의 장점</h3>
<ul>
<li><strong>환각 현상(Hallucination)</strong> 없음: 입력과 출력을 정렬하기 위해 복잡한 프롬프트를 설계할 필요가 없기 때문에, LLM이 잘못된 응답을 생성하는 현상이 발생 X.</li>
<li><strong>더 낮은 비용과 높은 효율성</strong>: 기존의 프롬프트 기반 방법보다 <strong>학습 비용이 낮고, 병렬 처리가 가능</strong>하여 더 빠르고 효율적으로 분류 작업을 수행.</li>
<li><strong>확장성과 유연성</strong>: LLMEmbed는 Lighweighted LLM의 임베딩을 RoBERTa, BERT와 같은 판별 모델(discriminative models)과 결합하거나, 다른 표현 학습 방법을 사용하여 성능을 향상.</li>
</ul>
<h3 id="llmembed-구현">LLMEmbed 구현</h3>
<ol>
<li>임베딩 추출</li>
</ol>
<ul>
<li>사용된 모델: LLaMA, RoBERTa, BERT</li>
<li>$f(⋅∣m,dm)$: 선택된 모델 m의 네트워크 깊이 dm에서 임베딩을 추출하는 함수
  <img src="https://velog.velcdn.com/images/dr_pepper/post/8cac0882-2f3e-4d85-be17-f24fcf24f1a6/image.png" alt=""></li>
</ul>
<ul>
<li>여기서 $x_i$는 i번째 데이터 포인트,</li>
<li>m은 선택된 백본 모델 (LLaMA, RoBERTa, BERT),</li>
<li>$d_m$은 해당 모델의 특정 블록 또는 레이어의 깊이.</li>
</ul>
<ol>
<li>임베딩 융합</li>
</ol>
<p>각 모델에서 추출한 임베딩${ϕ^{(m,d_m)}_i}$를 하나의 최종 임베딩  $ψ_i$ 로 결합.</p>
<ul>
<li>$v(·)$는 임베딩 결합을 위한 연산자(operator)로, <strong>평균 풀링(Average Pooling)</strong>, <strong>최대 풀링(Max Pooling)</strong>, 또는 <strong>연결(Concatenation)</strong> 방식을 사용</li>
</ul>
<p>수식으로 표현하면 다음과 같습니다:</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/43f398d8-70b7-4b60-8962-1e8eb526d951/image.png" alt=""></p>
<ul>
<li>여기서 ψi는 i번째 데이터 포인트의 최종 결합된 의미적 임베딩</li>
</ul>
<ol>
<li>최종 분류기</li>
</ol>
<p>결합된 임베딩  $ψ_i$ 는 최종 분류기 헤드 $g(ψ_i | θ_g)$에 입력되어 출력 결과 $\tilde{y}_i$를 생성. 이 과정에서, 분류기의 매개변수$θ_g$는 크로스 엔트로피 손실(Cross-Entropy Loss)을 통해 학습.</p>
<ul>
<li>최종 분류기 학습 수식:</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a1791b56-666f-4161-9a53-0ea423c2980b/image.png" alt=""></p>
<ul>
<li>여기서 $y_i$는 실제 라벨, $\tilde{y}_i$는 예측된 라벨.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/02b08e7a-b3c8-4756-8354-319364f3ddba/image.png" alt=""></p>
<h2 id="3-실험-결과">3. 실험 결과</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/264dd46a-07a7-4f72-b6b3-26fbddcbe098/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2주차 스터디 목록]]></title>
            <link>https://velog.io/@dr_pepper/2%EC%A3%BC%EC%B0%A8-%EC%8A%A4%ED%84%B0%EB%94%94-%EB%AA%A9%EB%A1%9D</link>
            <guid>https://velog.io/@dr_pepper/2%EC%A3%BC%EC%B0%A8-%EC%8A%A4%ED%84%B0%EB%94%94-%EB%AA%A9%EB%A1%9D</guid>
            <pubDate>Wed, 16 Oct 2024 00:37:24 GMT</pubDate>
            <description><![CDATA[<p>2주차 스터디 목록 계시판입니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[U-Net : Convolutional Networks for Biomedical Image Segmentation(2015)]]></title>
            <link>https://velog.io/@dr_pepper/U-Net-Convolutional-Networks-for-Biomedical-Image-Segmentation2015</link>
            <guid>https://velog.io/@dr_pepper/U-Net-Convolutional-Networks-for-Biomedical-Image-Segmentation2015</guid>
            <pubDate>Tue, 15 Oct 2024 16:02:39 GMT</pubDate>
            <description><![CDATA[<p>오늘 review해 볼 논문은 2015년도에 나온 <strong>U-Net</strong>입니다!</p>
<blockquote>
<p>제목 : U-Net : Convolutional Networks for Biomedical Image Segmentation
저자 : Olaf Renneberger et al.
학회 : Medical Image Computing and Computer-Assisted Intervention(MICCAI 2015)
게재 년도 : 2015년
인용수 : 94,526회 </p>
</blockquote>
<h3 id="0필수-개념">0.필수 개념</h3>
<p>먼저 필수 개념에 대해서 알아보고 시작하겠습니다~</p>
<p>논문 제목에도 나와있듯이 U-Net은 Biomedical Image Segmentation을 위한 네트워크인데요
여기서 Image Segmentation이 뭔지 알아보고 가겠습니다</p>
<h4 id="image-segmentation이란">Image Segmentation이란?</h4>
<blockquote>
<p>정의 : 이미지 내에 있는 각 물체(object)들을 의미 있는(semantic) 단위로 분할(segmentation)하는 작업을 의미합니다
-&gt;각 pixel마다 클래스(class)를 할당하는 작업입니다</p>
</blockquote>
<ul>
<li>일반적인 분류(classification)에서는 단일 이미지를 하나의 클래스로 분류합니다</li>
<li>분할(segmentation)에서는 각 픽셀마다 하나의 클래스로 분류합니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/eb067f9a-37e1-4e1b-a9e1-e474d5d6670b/image.png" alt="">
Semantic segmentation을 진행하면, 이미지가 주어졌을 때 (높이 X 너비 X 1) 크기를 가지는 한 장의 분할 맵(segmentation map)이 생성됩니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/f6361658-6e54-482e-ac29-70426fc768ea/image.png" alt=""></li>
</ul>
<p>다음으로는 convolutional network에 대해서도 알아보겠습니다~</p>
<h4 id="cnn">CNN</h4>
<blockquote>
<p>CNN에서는 filter 또는 kernel이라고 부르는 것을 사용합니다</p>
</blockquote>
<ul>
<li>각 filter는 입력에서 특정한 특징(feature)를 잡아내어 특징맵(feature map)을 생성합니다</li>
<li>하나의 filter는 sliding 하면서 convolution 연산을 통해 feature map을 계산합니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/f3dd9c9c-2e6e-4e90-864a-c4f04fca2760/image.png" alt=""></li>
<li>일반적으로 CNN 분류 모델에서 깊은 layer로 갈수록 채널의 수가 증가하고, 너비와 높이는 감소합니다</li>
<li>convolution layer의 서로 다른 fitler들은 각각 적절한 특징(feture) 값을 추출하도록 학습됩니다</li>
</ul>
<h4 id="max-pooling">Max Pooling</h4>
<blockquote>
<p>CNN 분류 모델에서 중요한 정보는 유지한 상태로 해상도(너비와 높이)를 감소시키는 방법 중 하나입니다</p>
</blockquote>
<ul>
<li>가장 큰값을 가지는 원소(element)만 남깁니다
<img src="https://velog.velcdn.com/images/dr_pepper/post/94bc4ddf-dceb-4938-88be-d9ebbb33b846/image.png" alt=""></li>
</ul>
<h4 id="down-sampling--up-sampling">Down-Sampling &amp; Up-Sampling</h4>
<blockquote>
<p>Down-Sampling : 너비와 높이 감소를 도와줍니다(해상도 감소)
Up-Sampling : 너비와 높이 증가를 도와줍니다(해상도 증가)
<img src="https://velog.velcdn.com/images/dr_pepper/post/4a955ee0-1041-4ae7-aa31-1c018eb25712/image.png" alt=""></p>
</blockquote>
<h4 id="fully-conovlutional-networkfcn">Fully Conovlutional Network(FCN)</h4>
<blockquote>
<p>Semantic Segmentation 모델을 위해 기존에 이미지 분류에서 우수한 성능을 보인 CNN 기반 모델(AlexNet, VGG16, GoogLeNet)을 목적에 맞춰 변형시킨 것입니다</p>
</blockquote>
<ul>
<li>FCN은 단순히 Convolutional layer로만 이루어져 있는 네트워크입니다</li>
</ul>
<p>지금까지 간단한 필수 개념에 대해서 알아보았습니다
이제 본격적으로 논문 review를 시작해보겠습니다!</p>
<h3 id="1-u-net">1. U-Net</h3>
<p>U-Net은 Biomedical 분야에서 이미지 분할(Image Segmentation)을 목적으로 제안된 End-to-End 방식의 Fully-Convolutional Network 기반 모델입니다</p>
<p>네트워크의 모양이 서로 대칭되는 U자 모양으로 보여 U-Net이라는 이름이 붙여지게 되었습니다</p>
<p>U-Net은 context를 캡처하는 축소 경로(contracting path)와 정확한 localization을 가능하게 하는 대칭 확장경로(symmetric expanding path)로 구성됩니다</p>
<h3 id="2-network-architecture">2. Network Architecture</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/8f5a2ea1-f833-4f01-a79f-096f4f64afc3/image.png" alt=""></p>
<p>U-Net의 전체 Architecture는 위와 같습니다</p>
<p>전체적인 네트워크는 Fully Connected layer가 없는 Fully Convolutional Network(FCN) Architecture로 구성됩니다</p>
<p>이번에는 Contracting Path와 Expanding Path에 대해서 알아보겠습니다!</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c9c1217c-2b87-426c-9a71-0c0e6586b9a2/image.png" alt=""></p>
<ol>
<li>Contracting Path</li>
</ol>
<ul>
<li>U-Net Architecture의 초반 부분입니다</li>
<li>2 X 2 Max Pooling을 사용해 해상도를 줄입니다
  -&gt; 해상도(너비와 높이)가 2배 감소하게 됩니다</li>
<li>Conv 연산으로 채널 크기는 2배 증가하게 됩니다</li>
<li>일반적인 CNN 모델처럼 다음 형식을 반복합니다
  -&gt; Conv 연산들 -&gt; ReLU -&gt; Max Pooling</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/87645e27-9f8c-43f6-8463-2fc864740189/image.png" alt="">
2. Expanding Path</p>
<ul>
<li>U-Net Architecture의 후반 부분입니다</li>
<li>2 X 2 Convolution(Up-Convolution)을 사용해 해상도를 늘립니다
  -&gt; 해상도(너비와 높이)가 2배 증가하게 됩니다</li>
<li>Conv 연산으로 채널 크기는 2배 감소하게 됩니다</li>
<li>수축 경로(Contracting Path)에서 처리된 feature map을 그대로 확장(expanding path)에 가져와서 채널 level에 붙여서 사용합니다
  -&gt; 앞 부분의 layer에서 추출되었던 feature에 대한 정보들을 뒷부분의 layer에서 그대로 사용할 수 있어, 보다 학습 난이도가 낮아지고 좋은 결과를 얻을 수 있습니다</li>
<li>마지막 layer에서 1 X 1 convolution 연산을 수행합니다</li>
</ul>
<hr>
<h4 id="overlap-tile-전략">Overlap-tile 전략</h4>
<p>U-Net에서는 크기가 큰 이미지를 사용하는 경우, 이미지 전체를 사용하는 대신 overlap-tile 전략을 사용합니다</p>
<p>FCN의 특성상 입력 이미지의 해상도에는 제한이 없습니다.
하지만 U-Net 구조상 출력 이미지의 해상도가 입력 이미지보다 작습니다</p>
<p>따라서 tile A와 tile B의 일부 영역이 겹치는 Overlap-tile 방식을 적용합니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/31d6eb09-389c-4150-8832-fa8918a30817/image.png" alt=""></p>
<p>위 그림에서 알 수 있듯이, 실제로 노란색 영역의 segmentation이 필요하면 더 큰 범위(파란색 영역)의 patch를 삽입합니다</p>
<p>이때 이미지의 경계 부분은 extrapolation을 사용하는데, 본 논문에서는 mirroring 방법이 사용되었습니다</p>
<p>mirroring 방법을 사용하면 원본 이미지의 경계 부분이 거울에 반사된 것처럼 확장되게 됩니다.</p>
<p>예를 들어서) 노란 부분에 대해서 왼쪽 위 부분을 segmentation 해야한다면, 왼쪽 위는 이미지가 존재하지 않는 부분이기 때문에 간단하게 이미지가 존재하는 부분을 사용해서 mirroring을 통해 이미지 path를 만들어 준 뒤에 이것들을 다 포함해서 네트워크의 입력으로 넣게 됩니다</p>
<h3 id="3-training">3. Training</h3>
<h4 id="object-function">Object Function</h4>
<p>U-Net은 segmentation을 위한 네트워크로, 픽셀 단위(pixel-wise)로 소프트맥스(softmax)를 사용합니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a3325d25-5bad-4cae-adf4-0f89471ab70a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/d5d6068c-aa9d-4cd7-b2bf-55d47d863c57/image.png" alt=""></p>
<p>본 논문에서 사용되는 softmax 함수는 일반적으로 사용하는 softmax와 동일합니다</p>
<p>각각의 pixel마다 확률값을 예측할 수 있도록 하기 위해서, 모두 pixel마다 확률값을 구하는 형태로 softmax를 사용하게 됩니다</p>
<hr>
<p>학습을 위해 cross-entropy를 사용합니다</p>
<p>true label만 고려하므로, 일반 cross entropy 공식과 동일합니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/fafdea97-9741-4011-b0d5-04eda5f8884b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/f33cd776-5e0e-4a88-86d9-8fa8f93c5dd7/image.png" alt=""></p>
<p>본 수식에서는 log를 사용하여 확률값이 증가할 수 있도록 했습니다</p>
<p>또한 일반적인 cross-entropy 함수에 w(x)라는 추가적인 가중치 함수를 사용하였습니다
이를 통해 각각의 pixel마다 가중치를 부여해서, 더 학습이 잘 수행될거나 덜 수행될 수 있도록 만들 수 있습니다</p>
<hr>
<h4 id="touching-cells-separation">Touching Cells Separation</h4>
<p>U-Net에서는 세포(cell)을 명확히 구분하기 위해 작은 분리 경계(small separation border)를 학습합니다</p>
<p>이때 세포를 명확히 구분하기 위해서는 가중치 함수를 사용합니다</p>
<p>w(x)는 인접한 셀(touching cell) 사이에 있는 배경 label에 대해 높은 가중치를 부여합니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/2d93faa1-41b7-403a-b187-f59baa7ec8bf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/a9e8b881-c144-48e6-a815-7e3138c91a9f/image.png" alt=""></p>
<p>이때, exp는 지수 함수를 의미합니다</p>
<p>&#39;-&#39;가 붙은 이유는, 거리 값이 작을수록 가중치가 커지게 하기 위해서 입니다</p>
<p>즉, 세포와의 거리가 가까우면 가중치(weight)가 증가하도록 하는식이라고 볼 수 있습니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c456c709-f1c4-4224-bc48-37382b93e724/image.png" alt="">
위 그림을 보면.. 특히 c번을 보면 서로 붙어있는 여러개의 세포에 대해서 보다 명확하게 배경으로 분리된 것을 알 수 있습니다</p>
<hr>
<h4 id="data-augmentation">Data Augmentation</h4>
<p>의료 데이터에서는 학습 데이터의 수가 적은 경우가 많으므로, 데이터 augmentation이 필요합니다</p>
<ul>
<li>본 논문에서는 일반적인 data augmentation 기술을 사용합니다</li>
<li>추가적으로 Elastic Deformation 방법을 사용합니다
  -&gt; Elastic Deformation : 각각 grid에 대해서, 보다 비선형적으로 변형을 가해서 만들어진 데이터 또한 학습 데이터로 사용하는 방식</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/0d0b60cb-c3ca-4c47-88bd-f109613cf52e/image.png" alt=""></p>
<h3 id="4-experiments">4. Experiments</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/1742c4f2-2067-411e-8b8c-58a4dfdc8047/image.png" alt=""></p>
<p>EM(Electron Microscopy) segmentation 대회의 데이터세트로 평가를 진행한 결과입니다</p>
<p>Warping error를 기준으로 정렬한 결과, 사람을 제외하고 U-Net이 가장 우수한 정확도를 보인 것을 알수 있습니다</p>
<ul>
<li>Warping error: 시계열 데이터 또는 비선형 매칭에서 두 패턴을 정렬할 때 생기는 왜곡으로 인한 오차.</li>
<li>Rand error: 군집화 또는 이미지 분할에서, 실제 군집과 예측된 군집 간의 불일치를 측정하는 오차.</li>
<li>Pixel error: 이미지 처리에서 개별 픽셀 단위로 실제 값과 예측 값 간의 차이를 계산한 오차.</li>
</ul>
<hr>
<p>또한 U-Net에서는 추가적인 두 개의 데이터세트(ISBI cell tracking challenge 2014 and 2015)에 대해서 평가를 진행했습니다</p>
<ul>
<li>PHC-U373 : 35개의 부분적으로 주석이 있는 학습 이미지 데이터 세트</li>
<li>DIC-HeLa : 20개의 부분적으로 주석이 있는 학습이미지 데이터 세트</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/9a160c3b-430a-4692-82aa-605f7aebe465/image.png" alt=""></p>
<p>위 결과를 보면, 노란색 테두리(ground truth)와 상당히 유사한 segmenation 결과를 보인 것을 알 수 있습니다</p>
<p>b 그림을 봤을때 초록색은 실제 U-Net이 예측한 내용이며, 노란색 경계선은 정답 label로 정답 label과 거의 유사한 형태로 예측한 것을 알 수 있습니다</p>
<hr>
<p>추가적인 두 개의 데이터세트(ISBI cell tracking challenge 2014 and 2015)에 대해서 평가를 진행합니다</p>
<p>PHC-U373과 DIC-HeLa 두 데이터 세트에 대해 이전 연구보다 우수한 IOU(Intersection Over Union)을 보였습니다</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/45317685-8995-4f1a-bb39-e3c1e07e3588/image.png" alt=""></p>
<p>위 결과를 보면 U-Net은 0.9203으로 굉장히 좋은 분류 결과를 보였습니다
또한 이전 연구 결과와 비교해 봤을 때, 두드러진 IOU 점수 향상을 볼 수 있습니다</p>
<ul>
<li>IOU : 예측된 영역과 실제 영역의 겹친 부분을 전체 영역으로 나눈 비율로, 물체 검출에서 정확도를 평가하는 지표
<img src="https://velog.velcdn.com/images/dr_pepper/post/c9916ede-75d7-4dc5-b742-989b2c287fdf/image.png" alt=""></li>
</ul>
<h3 id="5-마무리">5. 마무리</h3>
<p>지금까지 U-Net에 대해서 살펴보았습니다
U-Net Architecture는 매우 다양한 생체의료 segmentation application에서 매우 우수한 성능을 발휘합니다</p>
<p>elastic deformation으로 데이터를 augmentation하여 주석 달린 이미지가 거의 필요하지 않으며, 매우 합리적인 교육 시간을 가진다는 특징을 알 수 있었습니다</p>
<p>이러한 U-Net Architecture는 다양한 많은 작업에 적용될 수 있으며, 현재도 많이 사용되고 있습니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Transformer(2017): Attention Is All You Need]]></title>
            <link>https://velog.io/@dr_pepper/Transformer2017-Attention-Is-All-You-Need</link>
            <guid>https://velog.io/@dr_pepper/Transformer2017-Attention-Is-All-You-Need</guid>
            <pubDate>Wed, 09 Oct 2024 09:21:08 GMT</pubDate>
            <description><![CDATA[<h4 id="2017년에-나온-transformer에-관해-작성했습니다">2017년에 나온 Transformer에 관해 작성했습니다.</h4>
<hr>
<h2 id="0-abstract"><strong>0. Abstract</strong></h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/3790f189-045b-4af1-80bd-f174c6a24fa5/image.png" alt=""></p>
<p>전통적인 방식의 RNN 또는 LSTM과 같은 신경 망을 사용한 <strong>seq2seq 는</strong> 순차적 데이터를 처리할 수 있기 때문에 번역 또는 언어 모델링과 같은 작업에 사용되어 왔으나 이러한 모델은 입력 시퀀스가 길어질수록 <strong>Long-Term Dependency</strong> 와 <strong>Vanishing gradient</strong> 문제를 야기합니다. 
<img src="https://velog.velcdn.com/images/dr_pepper/post/ff0875fb-00f8-49a3-9142-f51c3218d263/image.png" alt=""></p>
<p>트랜스포머는 <strong>RNN,LSTM</strong> 과 같은 신경망 대신 <strong>Self-Attention</strong> 메커니즘을 사용하여 모든 토큰을 시퀀스로 병렬 처리하여 학습 효율과 성능을 크게 향상시킬 수 있다고 합니다.</p>
<hr>
<h2 id="1-introduction">1. Introduction</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/da90f806-a16c-4b6c-a587-500c5887bcaa/image.png" alt=""></p>
<p>기존의 순차적 처리 모델, 특히 RNN이나 LSTM을 사용한 seq2seq와 같은 아키텍쳐들은  시간적 순서에 따라 데이터를 처리하기 때문에 긴 문맥을 유지하기가 어려웠고(<strong>Vanishing gradient</strong>)이를 해결하기 위해 많은 연구가 이루어졌지만, 여전히 근본적인 문제로 인한 한계가 존재했습니다. </p>
<p>해당 논문은 이런 문제를 해결하기 위해 제안된 <strong>Transformer</strong>라는 새로운 모델을 소개합니다. 이 모델은 기존과 달리 순차적 처리에 의존하지 않고, <strong>Self-attention</strong> 메커니즘을사용하여 입력 시퀀스 전체를 한 번에 처리할 수 있습니다.</p>
<hr>
<h2 id="2-background">2. Background</h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/44082cb9-237b-42dd-ad58-75557b47a32d/image.png" alt=""></p>
<p>기존에 제시된 모델의 문제점인 순차적 연산의 부담을 줄이기 위해 CNN을 활용한 <strong>Extended Neural GPU</strong>, <strong>ByteNet</strong>, <strong>ConvS2S</strong> 등을 활용하였지만 거리가 멀수록 연산횟수가 증가하는 문제가 존재 했습니다. 
<img src="https://velog.velcdn.com/images/dr_pepper/post/566ee375-8664-450c-bc1e-c8e9084dfa97/image.png" alt="">
이를 해결 하기 위해서  Attention 메커니즘을 사용했습니다.</p>
<p>또한 트랜스포머의 경우 RNN 혹은 CNN과 같은 신경망 없이 셀프 어텐션에 의존하는 모델입니다.</p>
<hr>
<h2 id="3-transformer-구조-transformer-architecture">3. <strong>Transformer 구조 (Transformer Architecture)</strong></h2>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/b1c7a615-362d-4ea4-abc3-3f672a68d5e6/image.png" alt=""></p>
<h3 id="31-encoder-and-decoder-stacks">3.1 Encoder and Decoder Stacks</h3>
<p><strong>Transformer</strong>는 <strong>Encoder-Decoder</strong> 구조를 따르며, 각 레이어는 <strong>Multi-Head Attention</strong>과 <strong>Feed-Forward Neural Networks</strong>로 구성됩니다. <strong>Encoder</strong>와 <strong>Decoder</strong>는 여러 층으로 이루어져 있으며(논문상에서는 6층), 각 층마다 <strong>self-attention</strong>과 <strong>feed-forward</strong> 구조를 가집니다.</p>
<p><strong>Decoder</strong>의 경우 특정 시퀀스 이전의 값만을 기반으로 학습하기 위한 마스크가 존재합니다.</p>
<h3 id="32-positional-encoding">3.2 <strong>Positional Encoding</strong></h3>
<p><strong>Transformer</strong> 에서 사용 되는 Attention 메커니즘의 경우 기존의 RNN과 달리 순차적 정보를 다룰수 없다. 그렇기에 <strong>Transformer</strong>는 Self Attention 이전에 추가적인 위치 정보를 입력에 더해주는 <strong>Positional Encoding</strong>을 사용합니다. </p>
<ul>
<li><p>1,2,3,과 같은 값을 사용하지 않는 것은 시퀀스의 크기가 커질수록 단어정보보다 위치정보가 커지는 문제가 발생할수 있기 때문
<img src="https://velog.velcdn.com/images/dr_pepper/post/3cce6ce6-ae25-4157-a2d2-560f580c826b/image.png" alt=""></p>
</li>
<li><p>그럼 0과 1사이 값을 나눠서 쓰면 안되나? → 시퀀스 (N)의 크기마다 위치마다의 값이 달라짐 </p>
</li>
<li><p>예시) 7개의 단어에서의 2번쨰와 5개의 문장에서의 2번째 값이 달라지는 문제 발생
따라서 적절한 크기와 위치마다 동일한 위치서 동일한 값을 가지게 하기 위해 
사인 함수와 코사인 함수를 사용해 정의됩니다:</p>
</li>
</ul>
<p>$$</p>
<p>PE_{\text{(pos, 2i)}} = \sin\left(\frac{\text{pos}}{10000^{\frac{2i}{d_{\text{model}}}}}\right)</p>
<p>\PE_{\text{(pos, 2i+1)}} = \cos\left(\frac{\text{pos}}{10000^{\frac{2i}{d_{\text{model}}}}}\right)</p>
<p>$$</p>
<p>여기서 <strong>pos</strong>는 임베딩벡터의 위치를, <strong>i</strong>는 차원 인덱스를 나타냅니다. (d_model: 차원의 크기 논문기준 512)</p>
<h3 id="33-attention">3.3 Attention</h3>
<ul>
<li><strong>Scaled Dot-Product Attention</strong>: 주어진 쿼리 (Q), 키 (K), 값 (V)에 대해 <strong>Attention</strong> 스코어를 계산하는 방식은 다음과 같습니다:</li>
</ul>
<p>$$
Attention(Q,K,V) = softmax(QK^T/\sqrt{d_k})V
$$</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/49c0c866-9177-4cda-8682-fab6660024ff/image.png" alt=""></p>
<p>여기서 d_k는 키 벡터의 차원입니다. 이 메커니즘은 입력 벡터들 간의 관계를 파악하여 중요한 정보에 더 집중할 수 있게 합니다.(나누는 이유: 내적의 크기가 커질수 있다보니 안정화 시키기 위한 목적)</p>
<ul>
<li><strong>Multi-Head Attention</strong>: <strong>Attention</strong> 메커니즘을 여러 번 실행하여 서로 다른 공간에서 정보의 연관성을 학습할 수 있게 합니다. 이 과정은 다음과 같이 표현됩니다:</li>
</ul>
<p>$$
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O
$$</p>
<p>연구진들은 한번의 <strong>Attention</strong>을 하는것보다 병렬로 처리하는 것이 효과적이라고 판단 했고 이를 원래 차원의 크기를 나누어서 병렬로 처리했습니다 num_heads(논문기준:8)</p>
<p>하나의 벡터가 아닌 여러 벡터에서의 정보를 수집하고자 한 선택</p>
<p>각각의 어텐션 값 행렬을 어텐션 헤드라 칭함</p>
<p>어텐션 해드들을 연결(concat)→(seq_len,d_model)</p>
<p>연결된 행렬에 가중치 행렬 W^0(d_v*num_heads, d_model)곱하기</p>
<p>여기서 각 <strong>Head</strong>는 독립적으로 <strong>Attention</strong>을 계산합니다.</p>
<ul>
<li><strong>Applications of Attention in our Model</strong></li>
</ul>
<ol>
<li><strong>encoder-decoder attention : Q=decoder K,V=encoder</strong></li>
<li><strong>self-attention layers</strong></li>
<li><strong>Masked self-attention layers</strong></li>
</ol>
<h3 id="34-add--norm">3.4 Add &amp; Norm</h3>
<p>Layer Normalization,Residual connection을 구성요소로 지님 </p>
<ul>
<li><p>Residual connection(잔차 연결)
$$</p>
<pre><code>  H(x)=x+F(x)</code></pre><p>$$
레이어를 기준으로 레이어를 통과한 출력과 통과하지 않은 입력값의 합</p>
</li>
<li><blockquote>
<p>입력 데이터와 Self-Attention 과정을 수행한 데이터의 합 </p>
</blockquote>
</li>
<li><p>Layer Normalization 
  잔차 연결을 수행한 결과의 정규화
$$
\mathbf{y} = \frac{\mathbf{x} - \mathbb{E}[\mathbf{x}]}{\sqrt{\operatorname{Var}[\mathbf{x}] + \epsilon}} \cdot \gamma + \beta
$$</p>
</li>
</ul>
<hr>
<h3 id="34-position-wise-ffnn">3.4 Position-wise FFNN</h3>
<p>ReLU 활성화 함수</p>
<p>$$
    FFN(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2
$$</p>
<h3 id="35-embeddings-and-softmax"><strong>3.5 Embeddings and Softmax</strong></h3>
<p>입력 토큰과 출력 토큰을 벡터로 변환(Embedding), Softmax함수로 디코더의 출력을 다음 토큰의 확률로 나타나게 합니다</p>
<hr>
<h2 id="4-why-self-attention">4. Why Self-Attention</h2>
<p>연구진은 다음과 같은 이유로 사용한다고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/566ee375-8664-450c-bc1e-c8e9084dfa97/image.png" alt=""></p>
<ol>
<li>계층 당 총 계산 복잡도 </li>
</ol>
<ul>
<li>대부분의 상황에서 토큰의 개수보다는 차원이 큼</li>
</ul>
<ol start="2">
<li>병렬화의 가능성</li>
</ol>
<ul>
<li>RNN의 n개의 셀을 거쳐야함 </li>
</ul>
<ol start="3">
<li>장거리 의존성 학습</li>
</ol>
<ul>
<li>position상 멀리있는 단어들간의 의존성 문제에서 유리</li>
</ul>
<hr>
<h2 id="5-training">5. Training</h2>
<h3 id="51-training-data-and-batching"><strong>5.1 Training Data and Batching</strong></h3>
<ul>
<li><strong>영어-독일어(English-German)</strong> 번역 작업에는 약 450만 개의 문장 쌍으로 구성된 <strong>WMT 2014</strong> 데이터셋<ul>
<li><strong>Byte-Pair Encoding</strong> (BPE)를 사용하여 약 37,000개의 토큰으로 된 공유 소스-타겟 어휘를 구성</li>
</ul>
</li>
<li><strong>영어-프랑스어(English-French)</strong> 번역 작업에서는 더 큰 <strong>WMT 2014 English-French</strong> 데이터셋(3,600만 문장 쌍)이 사용되었고, 약 32,000개의 <strong>Word-Piece</strong> 어휘로 토큰을 분할했습니다.</li>
<li>각 배치는 시퀀스 길이를 기준으로 유사한 문장 쌍들로 구성되었으며, 배치당 약 <strong>25,000개의 소스 토큰</strong>과 <strong>25,000개의 타겟 토큰</strong>이 포함되었습니다.</li>
</ul>
<h3 id="52-hardware-and-schedule"><strong>5.2 Hardware and Schedule</strong></h3>
<p><strong>NVIDIA P100 GPU 8개</strong></p>
<p>를 장착한 하나의 머신에서 모델을 훈련했습니다.</p>
<ul>
<li><strong>기본(Base) 모델</strong>의 경우, 각 학습 단계는 약 <strong>0.4초</strong>가 소요되었고, 총 <strong>100,000 단계</strong>(12시간)에 걸쳐 학습되었습니다.</li>
<li><strong>빅(Big) 모델</strong>은 단계당 <strong>1초</strong>가 소요되었으며, 총 <strong>300,000 단계</strong>(약 3.5일) 동안 훈련되었습니다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/91721427-ada2-4901-9b90-554c1d158494/image.png" alt="">
<img src="https://velog.velcdn.com/images/dr_pepper/post/28f3aadb-ff51-4348-b66d-655639a03168/image.png" alt=""></p>
<h3 id="53-optimizer-regularization"><strong>5.3 Optimizer, Regularization</strong></h3>
<ul>
<li><p><strong>Adam Optimizer</strong>를 사용하였으며, 하이퍼파라미터는 <strong>β1 = 0.9</strong>, <strong>β2 = 0.98</strong>, <strong>ε = 10^−9</strong>로 설정되었습니다.</p>
</li>
<li><p>학습률은 훈련 진행 과정에서 점차 조정하였고 다음과 같은 결과를 가지게 되었습니다:
$$
  lrate = d^{-0.5}_{model} \cdot \min(step_num^{-0.5}, step_num \cdot warmup_steps^{-1.5})
$$</p>
</li>
<li><p>초기에는 학습률을 <strong>warmup_steps</strong> 단계까지 선형적으로 증가시키고, 그 이후에는 단계 수의 제곱근에 반비례하여 감소시켰습니다.</p>
</li>
<li><p><strong>warmup_steps</strong> 값은 <strong>4000</strong>으로 설정되었습니다.</p>
</li>
<li><p><strong>Residual Dropout</strong>: 각 서브 레이어 출력에 드롭아웃을 적용하여 과적합을 방지하고 성능을 안정화했습니다. 드롭아웃 비율은 <strong>Pdrop = 0.1</strong>로 설정되었습니다. 드롭아웃은 임베딩 합계와 포지셔널 인코딩에도 적용되었습니다.</p>
</li>
<li><p><strong>Label Smoothing</strong>: 라벨 스무딩 기법을 사용하여 모델이 더 확실하지 않도록 학습했습니다. <strong>εls = 0.1</strong>로 설정되어 perplexity는 약간 증가했지만, 정확도와 <strong>BLEU 점수</strong>는 향상되었습니다.</p>
</li>
</ul>
<hr>
<h2 id="6-result">6. Result</h2>
<h3 id="61-기계번역">6.1 기계번역</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/45c15f0c-18f2-4f75-ac3f-3c604ee31d19/image.png" alt=""></p>
<p>트랜스포머 모델이 다른 모델과 비교하여 더 나은 번역 품질과 적은 훈련 비용을 가지고 있음을 보여줍니다. <strong>FLOP</strong> 수를 기반으로 훈련 비용을 추정했으며, 트랜스포머는 기존 모델보다 더 적은 연산 자원을 사용하면서도 더 높은 BLEU 점수를 기록했습니다.</p>
<h3 id="62-모델-변형">6.2 모델 변형</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/c4df11ff-c68d-4faf-b9f1-e81cb511a258/image.png" alt=""></p>
<ul>
<li><strong>A 열</strong>: 주의(attention) 헤드 수와 키/값 차원(dk, dv)을 변경했으며, 계산량은 동일하게 유지했습니다. 주의 헤드가 하나일 때 BLEU 점수가 0.9 낮아졌으며, 반대로 헤드 수가 너무 많을 때도 성능이 저하되었습니다.</li>
<li><strong>B 열</strong>: 주의 키 차원(dk)을 줄이면 모델 성능이 저하되었습니다. 이는 호환성을 결정하는 것이 쉽지 않음을 나타내며, <strong>더 복잡한 호환성 함수</strong>가 유용할 수 있음을 시사합니다.</li>
<li><strong>C &amp; D 열</strong>: 모델이 커질수록 성능이 더 좋아졌으며, <strong>드롭아웃</strong>이 과적합 방지에 매우 유효함을 확인했습니다.</li>
<li><strong>E 열</strong>: <strong>sinusoids 포지셔널 인코딩</strong>을 <strong>학습된 포지셔널 임베딩</strong>으로 대체했을 때, 기본 모델과 거의 동일한 결과를 얻었습니다.</li>
</ul>
<h3 id="63-구문-분석">6.3 구문 분석</h3>
<p><img src="https://velog.velcdn.com/images/dr_pepper/post/1ce259b0-4b17-4652-a9b9-939b743df54f/image.png" alt=""></p>
<p>기존의 대부분 모델 보다 좋은 결과를 도출</p>
<hr>
<h2 id="7--conclusion"><strong>7.  Conclusion</strong></h2>
<p><strong>Transformer</strong>는 순차적 처리 없이 <strong>Self-attention</strong> 메커니즘만을 사용해 복잡한 시퀀스 처리 문제를 해결할 수 있음을 보였습니다. 이로 인해 기존 모델들에 비해 훨씬 더 효율적으로 병렬 처리가 가능해졌고, 번역 등 여러 자연어 처리 과제에서 새로운 성능의 기준을 세웠습니다. 또한, 더 적은 계산 자원으로도 빠른 학습이 가능하다는 점에서 다양한 응용 가능성을 가지고 있습니다. 이러한 성과는 <strong>Transformer</strong>가 이후 딥러닝 모델들의 중요한 기반이 될 것임을 시사합니다.</p>
]]></description>
        </item>
    </channel>
</rss>