<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>muk-jjang.log</title>
        <link>https://velog.io/</link>
        <description>좋은 건 당연히 좋은거다</description>
        <lastBuildDate>Sun, 07 Apr 2024 12:55:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>muk-jjang.log</title>
            <url>https://velog.velcdn.com/images/muk-jjang/profile/5d8f7690-acff-4a8e-be6d-743e1ee76722/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. muk-jjang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/muk-jjang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[RL] TD-Learning(n-step, backward TD(lambda) 구현]]></title>
            <link>https://velog.io/@muk-jjang/RL-TD-Learningn-step-backward-TDlambda-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@muk-jjang/RL-TD-Learningn-step-backward-TDlambda-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Sun, 07 Apr 2024 12:55:49 GMT</pubDate>
            <description><![CDATA[<p>전통적인 강화학습 분야에서 model-free(MDP를 모르는 상황) 즉 전이확률과 보상함수에 대한 정보가 없을 때 Monte carlo, TD-Learning(temporal diffrence learning)을 사용한다.</p>
<p>해당 포스트는 TD-learning 기법 중 n-step TD와 backward TD($\lambda$)를 구현한다.</p>
<p>기본적으로 TD-learning은 샘플을 기반으로 state를 업데이트하는 방법이다. 
one-step td learning은 (state, action, reward, next state) pair를 이용해 현재 state를 업데이트 한다. 즉 현재 상태에서 한번의 액션을 취하고 얻은 보상과 다음 상태에서의 value값을 통해 현재 state를 업데이트한다.</p>
<p>그러면 n-step td learning은 n번의 step을 이동하여 현재 state를 업데이트한다.
ex) 2-step: (state, action, reward, action, reward, next_state2)</p>
<p>수식으로 표현하면 아래와 같다
<img src="https://velog.velcdn.com/images/muk-jjang/post/4dd60baa-0f9a-411a-94c6-b46049ab6eeb/image.png" alt=""></p>
<h3 id="구현5-step-td">구현(5-step td)</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/53b68468-5417-42af-933c-7258c7db8f6e/image.png" alt="">
환경: 5x5 grid world, 왼쪽 상단 start node, 오른쪽 하단 terminal node이다.
학습 시간을 고려하여 40000개의 episode에state,action,reward,next_state, dones이 저장되어있다.
dones는 해당 state가 terminal node이면 1 그렇지 않다면 0으로 저장된다.</p>
<p>기존 one-step td와 다르게 5개의 state,action,reward가 필요하므로 buffer가 필요하다. 
state,action,reward를 buffer에 저장하고 buffer가 5개이상이 됐을 때 return을 계산후 현재 state에서 5-step 이전의 state에 업데이트 해준다.</p>
<h3 id="구현backward-td">구현(backward td)</h3>
<p>backward td는 업데이트를 역방향으로 해준다.
각 단계에서 값을 업데이트한다.
현재 state에 영향을 많이 끼친 state들에 업데이트를 해줌
-&gt;업데이트는 시간의 영향에 따라 다르게 반영함
-&gt; 최근에 지나온 state는 높은 가중치, 오래전에 지나온 state는 낮은 가중치(Markov property를 가정하고 있기 때문에 그런거 같다)
<img src="https://velog.velcdn.com/images/muk-jjang/post/2533af08-08bb-4e04-bcc4-b5c91be7194c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/cfa2969b-d909-4880-82f8-d8b3f1796602/image.png" alt="">위 pseudo code를 따라 구현하였음
<img src="https://velog.velcdn.com/images/muk-jjang/post/740bfd3c-ad80-44fc-a278-919d6c52f3dd/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks]]></title>
            <link>https://velog.io/@muk-jjang/EfficientNet-Rethinking-Model-Scaling-for-Convolutional-Neural-Networks</link>
            <guid>https://velog.io/@muk-jjang/EfficientNet-Rethinking-Model-Scaling-for-Convolutional-Neural-Networks</guid>
            <pubDate>Wed, 27 Mar 2024 17:51:58 GMT</pubDate>
            <description><![CDATA[<h1 id="key-idea">Key Idea</h1>
<p>** Is there a principled method to scale up ConvNets that can achieve better accuracy and efficiency?**</p>
<p>이전 연구에서는 depth(layer), width(channel), image size 중 하나만 scaling을 하여 사용</p>
<p>해당 논문에서는 3가지를 모두 scaling → compound scaling 즉 depth, width, image size 사이의 관계를 표현</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/c88f8e56-7c65-4372-9d71-3c4a2c0c2db3/image.png" alt=""></p>
<p>ConvNet은 위와 같은 수식으로 표현 가능</p>
<p>→ $X$는 input image,  $F^L$에서 F는 conv 연산 L은 layer의 수를 의미</p>
<p>대부분의 ConvNet design은 best layer architecture($F_i$)를 찾으려고 노력하는 반면에 model scaling은 정의된 $F_i$에서 layer architecture는 고정시켜놓고 제한된 resource로 length, width, resolution을 확장시키는 것</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/a88bcfad-32cd-4fa4-b2a6-4bf2754a709d/image.png" alt=""></p>
<p>아래 제약조건을 만족하면서 d,w,r을 조절하여 acc를 최대화 하는 것</p>
<h2 id="32-scaling-dimension">3.2 Scaling Dimension</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/3115db48-c146-4b43-820f-c3d6116620dc/image.png" alt=""></p>
<h3 id="depth">Depth</h3>
<p>ConvNet 층이 깊어질 수록 복잡한 feature을 잘 잡아냄</p>
<p>→ but 층이 너무 깊어지면 vanishing gradient등의 문제 때문에 학습시키기가 어려워짐</p>
<p>skip-connection, batch normalization등의 technique이 이러한 문제를 완화해주지만 층이 너무 깊어지면 의미가 없어짐</p>
<p>위 Figure 중앙을 보면 depth = 8일 때 오히려 성능이 떨어짐</p>
<h2 id="width">Width</h2>
<p>Width가 커질 수록 더 세분화된 특징을 잡을 수 있고 훈련하기 쉬워짐</p>
<p>→but Width가 매우 커도 얕으면 feature를 잘 잡지 못함</p>
<h2 id="resolution">Resolution</h2>
<p>resolution이 높으면 패턴을 잘 잡아냄 → 위 figure를 보면 resolution이 커질 수록 성능 증가율이 조금씩 감소함</p>
<p>r = 1(224x224) r = 2.5(560x560)</p>
<p>결론 → Depth, Width, Resolution이 높을 수록 좋지만 모델이 커질 수록 증가폭은 감소함</p>
<h2 id="compound-scaling">Compound Scaling</h2>
<p>직관적으로 세가지의 요소가 독립적이지 않음 하나가 커지면 다른 것도 커지는게 성능면에서 좋음</p>
<p>→ 제한된 resource에서 최적의 비율을 찾아내야지~</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/2ebf6b31-a9b0-4dc9-9e69-4e915f9e71d2/image.png" alt=""></p>
<p>위 Figure를 보면 해당 직관이 어느정도 맞다라는 것을 확인할 수 있음</p>
<p>→ 결론 더 나은 성능과 효율을 원하면 3가지를 적절하게 scaling 해야함</p>
<p>→ 이전에도 3가지 balance를 찾는 연구가 있었으나 manual tunning 했음  → 멍청이임</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/885d8c74-b631-4f06-9c45-89067f518b73/image.png" alt=""></p>
<p>파이는 사용자의 resource, $\alpha, \beta, \gamma$는 찾아야하는 최적값이다.</p>
<ul>
<li>depth 2배 : FLOPS 2배</li>
<li>width 2배 : FLOPS 4배 — width는 총 2번 연산이 되기 때문 (출력레이어, 다음 입력 레이어)</li>
<li>resolution 2배 : FLOPS 4배 — resolution은 이미지의 가로x세로를 의미하기 때문에 가로2배, 세로2배로 총 4배가 됨</li>
</ul>
<p>→ 이해 잘 못했음</p>
<h1 id="architecture">Architecture</h1>
<p>model scaling은 layer operation $F$를 바꾸지 않기 때문에 애초에 baseline을 잘 만드는 것이 중요</p>
<p>따라서 최적화된 EfficientNet 개발 → 기존 ConvNet 사용, 정확도 FLOPS 최적화</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/936486a0-0cc2-40ce-9bc5-6ee919ebc6a2/image.png" alt=""></p>
<p>최적화를 진행할 때 대형 모델의 경우, $\alpha, \beta, \gamma$의 값을 직접 설정하면 더 좋은 성능을 얻을 수 있지만 많은 비용이 들어가기 때문에 아래와 같이 작은 baseline network 에서 알파, 베타, 감마 값을 계산한 다음(STEP1), 다른 모든 모델에 대해 동일한 스케일링 계수를 사용(STEP2)</p>
<ul>
<li><p>STEP1: 파이를 1로 고정 → resource가 두 배라고 가정하고</p>
<p>  위 식 두 개를 이용해 Small grid search</p>
</li>
<li><p>STEP2: $\alpha, \beta, \gamma$ 상수로 고정 →  계산식 3번 따라 baseline network scale up</p>
</li>
</ul>
<h1 id="experiment">Experiment</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/1eb2ba61-a90a-4a29-a2b1-521ed49b9c46/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/6f274be3-4e5c-4423-b0d1-203b313a9c20/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/267a91e8-df72-4473-8979-f5b67d3930fc/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/7cb583ff-879f-4cc8-983e-954930da3c32/image.png" alt=""></p>
<h1 id="discussion">Discussion</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/831e1a0b-83f2-4b22-a26a-8df548e4c30e/image.png" alt="">
비슷한 FLOPS에서 하나만 scaling 하는 것보다 compound scale 하는 것이 좋음</p>
<h1 id="result">Result</h1>
<p>기본 ConvNet을 어떤 목표 리소스 제약에도 더 원칙적인 방식으로 scale up할 수 있으며, 모델 efficiency 유지 가능</p>
<p> compound scaling하여, mobile-size의 EfficientNet 모델을 효과적으로 확장 가능</p>
<p> 파라미터 및 FLOPS 수를 줄이면서도 state-of-art 달성</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Deep Residual Learning for Image Recognition(ResNet)]]></title>
            <link>https://velog.io/@muk-jjang/Deep-Residual-Learning-for-Image-RecognitionResNet</link>
            <guid>https://velog.io/@muk-jjang/Deep-Residual-Learning-for-Image-RecognitionResNet</guid>
            <pubDate>Tue, 26 Mar 2024 11:04:20 GMT</pubDate>
            <description><![CDATA[<h1 id="background">Background</h1>
<p>Deep convolutional neural networks는 층이 깊어질 수록 feature의 추상화 정도?가 올라감  </p>
<p>→ 즉 층이 깊어질 수록 다양한 이미지 표현가능
<img src="https://velog.velcdn.com/images/muk-jjang/post/8a815fce-3f96-40e9-8af9-ce2b5a097e92/image.png" alt=""></p>
<p>기존의 vgg-net을 이용해서 층을 깊게 쌓았을 때의 figure</p>
<p>층을 깊게 쌓았을 때 성능 저하가 발생하는 데 figure를 봤을 때 overfitting 문제가 아니라, 수렴이 하지 않는 문제로 판단.</p>
<p>! 층을 깊게 쌓았을 때 성능 저하 없이 수렴시킬 수 없나..?!</p>
<h1 id="key-idea">Key Idea</h1>
<p> <strong><em>Is learning better networks as easy as stacking more layers?</em></strong></p>
<p>$H(x)$를 아주 얕은 layer를 거쳐 나온 결과라고 생각해보자.</p>
<p>$H(x)$를 근사 시키는 것은 어려울 수 있다 $H(x) = F(x)+x$라고 생각하고 $F(x)$를 학습 시키는 것은 잔차만 학습하면 되므로 비교적 쉽게 학습 가능하다. </p>
<p>따라서 해당 논문은 $F(x)$를 학습 시키는 것을 목적으로 한다.</p>
<p>→ 이런 아이디어는 어떻게 나왔나?! deeper network가 shallow한 network보다 training error가 높은 것을 보고 identity mapping이 있으면 training error를 줄일 수 있겠는데?! 라는 가설을 세움</p>
<p>→ 층이 깊어지면 exploding/vanishing 문제가 발생했기 때문</p>
<h2 id="왜-잔차를-학습하는-것이-더-좋을까">왜 잔차를 학습하는 것이 더 좋을까?</h2>
<p>layer를 거쳐 나온 값이 input값에서 급변하지 않는다! </p>
<h1 id="architecture">Architecture</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/5cfe0c40-aad0-4a5f-b8b7-635803e51c72/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/6b15cd87-5462-48ef-a4f1-6d172b08925c/image.png" alt=""></p>
<h1 id="experiment">Experiment</h1>
<p>ImageNet 2012 classification dataset으로 실험 진행</p>
<p>train set: 1.28million</p>
<p>validation set: 50k</p>
<p>test set: 100k
<img src="https://velog.velcdn.com/images/muk-jjang/post/2a6d4d86-0abe-449c-846f-cbc5aaa6dfb4/image.png" alt=""></p>
<ul>
<li>resnet이 plain보다 수렴 속도도 더 빠름
<img src="https://velog.velcdn.com/images/muk-jjang/post/82324c9e-1093-4075-8d0a-f08e5c876db8/image.png" alt=""></li>
<li>34layer까지는 residual block을 2개의 layer를 합친 반면에 50 layer부터는 3개의 layer를 합침(bottleneck design)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/6ff0f505-1803-40f8-b37e-2825b7f86b34/image.png" alt=""></p>
<ul>
<li>층이 깊어질 수록 error가 줄어드는 것 확인 가능
<img src="https://velog.velcdn.com/images/muk-jjang/post/338e53b3-61f9-4a4a-a916-8320ebc84e18/image.png" alt=""></li>
<li>A는 shortcut을 하기 위해 zero pedding을 해서 더해줌</li>
<li>B는 projection + identity</li>
<li>C는 전부 projection</li>
<li>모두 projection 한 후 더해주는 것이 좋음 but projection을 위한 parameter가 늘어나기 때문에 잘 고려해야함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/8633cfec-0597-4b14-8f93-7c8c0ee9228f/image.png" alt="">
<img src="https://velog.velcdn.com/images/muk-jjang/post/3dd42bb8-506e-4a7b-b14e-441eb82e6607/image.png" alt=""></p>
<ul>
<li>$1\times 1$ Conv를 위 아래로 넣어줌으로써 computational cost를 줄임</li>
<li>layer를 늘림으로써 non-linearity 증가</li>
</ul>
<h3 id="cifar10">CIFAR10</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/d9653ec9-3218-407a-a7e5-81055fad958b/image.png" alt=""></p>
<ul>
<li><p>층이 너무 깊어지면 error 증가
<img src="https://velog.velcdn.com/images/muk-jjang/post/29825677-911f-4061-9988-bad5504d1c80/image.png" alt=""></p>
</li>
<li><p>3x3 layer BN을 거친 후 layer response
→ std가 굉장히 적음  → BN을 거친 후이므로 0근처에 분포해있음 → plain보다 최적화에 용이하다.</p>
</li>
<li><p>깊은 resnet은 더 적은 std를 보여줌  → 층이 깊어질수록 아주 미세하게 바뀜</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰]Efficient Estimation of Word Representations in Vector Space]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0Efficient-Estimation-of-Word-Representations-in-Vector-Space</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0Efficient-Estimation-of-Word-Representations-in-Vector-Space</guid>
            <pubDate>Tue, 05 Mar 2024 12:12:02 GMT</pubDate>
            <description><![CDATA[<h1 id="1-introduction">1. Introduction</h1>
<p>해당 연구 당시 많은 NLP연구가 단어를 atomic units으로 여겼다.(단어간 유사성 개념이 없음)
이런 방법은 복잡한 모델로 작은 양의 데이터를 학습시키는 것보다 간단한 모델로 많은 양의 데이터를 학습시키는 것이 성능이 더 좋다는 것과, 간단하며, 일반화 성능이 좋다는 장점등이 있었다. 이러한 방법의 예시로는 대표적으로 N-gram 모델이 있다. </p>
<p>하지만 이러한 방법은 다양한 task에 한계가 존재한다. 예를들어 automatic speech recognition이나 machine translation의 경우 말뭉치나 전사된 음성에서의 단어의 수가 많지 않다. 
따라서 단순 scaling up 하는 것이 큰 진전을 가져다주지 않는다. 해당 논문에서는 이런 문제에 따라 더 발전된 기술이 필요하다는 것에 초점을 맞춘다.</p>
<h2 id="11-goals-of-the-paper">1.1 Goals of the Paper</h2>
<p>해당 논문의 목표는 큰 데이터로부터 높은 퀄리티의 word vector를 배우는 기술을 도입하는 것이다.
저자들은 비슷한 단어들이 서로 가까이 있는지 뿐만 아니라 단어들이 가지고 있는 여러 정도의 유사성을 잘 표현하였는지에 대한 것을 측정한다.
예를들어 명사는 여러개의 어미를 가질 수 있다. 잘 표현된 vector space에서는 유사한 어미를 추출해낼 수 있다.</p>
<p>단순 구문적인 제약을 넘어서 벡터의 대수연산으로 단어를 표현할 수 있다.
$vector(&#39;King&#39;)-vector(&#39;Man&#39;)+vector(&#39;Woman&#39;) = vector(&#39;Queen&#39;)$과 같이 표현이 가능하다.</p>
<p>해당 논문에서는 이러한 벡터 연산의 정확도를 극대화하기 위해 단어간의 선형 규칙성을 보존하는 모델을 만들고자 한다.
구문 및 의미 규칙성을 모두 측정하기 위한 새로운 test set를 설계하고 이러한 많은 규칙성을 을 높은 정확도로 학습할 수 있음을 보여준다. 또한, 학습 시간과 정확도가 단어 벡터의 차원과 양에 따라 어떻게 달라지는지 단어 벡터의 차원과 학습 데이터의 양에 따라 어떻게 달라지는지 보여준다.</p>
<h2 id="12-previous-work">1.2 Previous Work</h2>
<p>NNLM -&gt; linear projection + hidden layer를 이용하여 word vector representation과 statistical language model을 배운다</p>
<p>&rarr; 벡터 표현(projection 하는 과정에서의 weight 벡터), 앞 단어를 이용하여 다음 단어 원 핫 벡터 예측(statistical language model -&gt; softmax)</p>
<h1 id="2--model-architectures">2.  Model Architectures</h1>
<p>과거 연속적인 벡터를 표현하기 위해 많은 방법론들이 소개되었다. ex)LSA, LDA
해당 논문에서는 Neural Network를 통해 연속적인 벡터(단어간의 의미 차이를 고려할 수 있는)를 표현하는 것에 집중한다. 해당 방법은 기존의 방법론들보다 단어 사이의 선형성을 잘 보존할 수 있다고 저자들은 주장한다.</p>
<p>모델을 fully trained 시키기 위해 필요한 파라미터 수를 정의한 후 accuracy를 최대화하면서 computational complexity는 최소화 하는 방향으로 연구를 진행했다.</p>
<p>그 결과 모델의 training complexity는 아래와 같다.
$O = E \times T\times Q$
$E$: number of the training epochs
$T$: number of the words in the training set
$Q$: defined further for each model architecture
일반적으로 $E=3-50$ $T$는 10억개 이상이다.
모든 모델은 SGD를 통해 역전파가 된다.</p>
<h2 id="21-feedforward-neural-net-language-model-nnlm">2.1 Feedforward Neural Net Language Model (NNLM)</h2>
<p>확률적 순전파는 input, projection layer, hidden layer, ouput layer로 구성되어 있다.
input layer에서는 N개의 이전 단어가 1-of-$V$ 코드로 인코딩되어 표현된다. ($V$는 Volcabulary의 크기) 그리고 input layer는 Projection layer($N\times D$의 차원)로 projected 된다. 해당 Projection layer는 공유된다.</p>
<p>NNLM은 Projection layer -&gt; hidden layer로 사이의 계산이 복잡하다는 단점이 있다. $N=10$인 경우에 Projection layer의 크기는 500<del>2000이 되며 hidden layer의 크기는 500</del>1000이 된다. 게다가 hidden layer -&gt; output layer에서 Vocabulary안의 모든 단어에 대한 확률 값을 계산해야된다. 따라서 계산 복잡도는 아래와 같이 된다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/2594c69f-a5ff-4449-8f75-350d36d44864/image.png" alt="">
$H\times V$의 계산 복잡도를 피하기 위해 몇가지 방법을 사용하곤 한다. 계층적 softmax를 사용하거나 training동안 nomalized를 진행하지 않으면서 해당 계산 복잡도를 피하는 방법이 있다. 또한 binary tree를 이용하여 $V$를 로그 스케일로 줄인다.
이렇게 되면 대부분의 계산 복잡도는 $N\times D\times H$에서 발생한다.</p>
<p>해당 논문에서는 Huffman binary tree를 이용하여 계층적인 softmax를 사용한다. Huffman binary tree는 짧은 이진 코드로 단어의 빈도수를 표현 할 수 있고, Output layer의 수를 줄 일 수 있다. 그럼에도 불구하고 N x H x D의 복잡성은 해결되지 않는다. 따라서 저자들은 Hidden layer를 갖지 않은 모델은 모델을 제안한다.</p>
<h2 id="22--recurrent-neural-net-language-model-rnnlm">2.2  Recurrent Neural Net Language Model (RNNLM)</h2>
<p>RNNLM은 NNLM의 고정된 input 한계를 해결하고자 하였다. RNN은 이론적으로 얕은 neural network보다 복잡한 패턴을 표현할 수 있다. 그리고 RNN 모델은 Projection layer를 가지지 않는다.
RNNLM의 Training complexity는 아래와 같다.
$Q=H\times H+H\times V$</p>
<h2 id="23-parallel-training-of-neural-networks">2.3 Parallel Training of Neural Networks</h2>
<p>대규모 데이터 세트에 대한 모델 훈련을 위해, 대규모 분산 프레임워크 위에 여러 모델을 구현했다.
피드포워드 NNLM과 이 백서에서 제안한 새로운 모델들을 포함한 모델을 포함하여 여러 모델을 구현했다. 해당 프레임워크를 사용하면 동일한 모델의 여러 복제본을 병렬로 실행할 수 있다.</p>
<h1 id="3-new-log-linear-models">3. New Log-linear Models</h1>
<p>computational complexity를 최소화 하는 두 가지 방법을 소개한다. 위에서 살펴본 결과 computational complexity는 non-linear hidden layer에서 발생한다. 효율적인 훈련이 가능한 모델에 대한 연구가 필요.</p>
<h2 id="31-continuous-bag-of-words-model">3.1 Continuous Bag-of-Words Model</h2>
<p>첫번째로 제안한 Model archietecture는 hidden layer를 삭제하고 projection layer의 가중치를 모든 단어에 대해 공유한다. 그리고 4개의 이전 단어와 4개의 이후의 단어들을 projection layer에 project 시키고 projected된 벡터들을 평균하여 ouput layer에 전달한다. 계산 복잡도는 아래와 같다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/1244750c-9ecd-4dae-9b35-e66b08fab9aa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/46d44530-6ce9-40d6-a656-6859a3e08079/image.png" alt=""></p>
<h2 id="32--continuous-skip-gram-model">3.2  Continuous Skip-gram Model</h2>
<p>또 다른 architecture는 현재 단어를 가지고 같은 sentence에 있는 다른 단어를 예측한다. 현재 단어기준으로 특정 범위 내에 있는 다른 단어를 예측하는 방향으로 학습이 진행된다. 먼 단어일 수록 현재 단어와의 연관성이 줄어들기 때문에 범위를 늘릴수록 word vector의 퀄리티는 증가하지만 계산 복잡도가 커진다. 작은 weight를 거리에 따라 조절하여 학습한다.
Skip-gram의 계산 복잡도는 아래와 같다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/23c24f61-2b5f-41bd-934b-552553bbbcc7/image.png" alt="">
C는 단어간 거리의 최댓값이다. 해당 논문에서는 5로 설정. 
두 모델 구조 차이
<img src="https://velog.velcdn.com/images/muk-jjang/post/aa017de7-c510-416f-a838-2a3a70c71d86/image.png" alt=""></p>
<h1 id="4-results">4. Results</h1>
<p>이전 연구들에서는 word vector의 quality를 비교할 때 직관적으로 이해가 되는 가장 비슷한 단어를 테이블로 보여줬다.
이런 방식은 Italy와 France가 유사하다는 것을 보여주는 것은 어렵지 않지만 다른 나라들과도 유사하다는 것을 보여주는 것은 또 다른 문제이다.
즉 단어 사이에는 더 많은 유사성을 가지고 있다는 것을 알고 있다. 예를들어 big은 small-smaller와 같이 bigger과 비슷하다. </p>
<p>이러한 것들을 해당 논문에서는 간단한 벡터 연산으로 계산할 수 있다.</p>
<h2 id="41-task-description">4.1 Task Description</h2>
<p>word vector의 quality를 측정하기 위하여, 5개의 type의 의미적인 질의로 구성된 comprehensive test를 정의하였다. 두개의 type에 대한 예시는 아래 테이블에서 확인 할 수 있다. 8869개의 의미적인 질의와 10675개의 문법적인 질의로 이루어져있다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/7a62c920-f4ef-430e-9f83-7e46926e04c7/image.png" alt="">
각 카테고리의 질문은 두 단계에 걸쳐 생성됐다. 먼저 유사한 단어 쌍의 목록을 수동으로 생성한다. 그런 다음 두 단어 쌍을 연결하여 큰 질문 목록을 만들었다. 예를 들어, 미국의 68개 대도시와 그 도시가 속한 주의 목록을 만들고, 무작위로 두 단어 쌍을 선택했다. 테스트 세트에는 단일 토큰 단어만 포함시켰기 때문에 여러 단어로 구성된 엔티티(예: 뉴욕)는 포함되지 않았다.</p>
<p>모든 문제 유형에 대해 전반적인 정확도를 평가하고 각 문제 유형에 대해 개별적으로(의미론적, 구문론적) 평가한다. 위의 방법으로 계산된 벡터에 가장 가까운 단어가 문제(코사인 유사도)의 정답 단어와 정확히 일치하는 경우에만 정답으로 간주되므로 동의어는 틀린 것으로 계산된다. </p>
<h2 id="42-maximization-of-accuracy">4.2 Maximization of Accuracy</h2>
<p>word vector를 학습하기 위해 Google 뉴스 말뭉치를 사용했다. 이 말뭉치에는 약 6억 개의 토큰. 어휘의 크기는 가장 빈번한 단어 100만 개로 제한했다. 더 높은 차원의 word vector를 사용하면 정확도가 향상될 것으로 예상한다. 
좋은 모델 아키텍처를 찾기 위해 먼저 training set의 sub set에 대해 학습을 진행했다. sub set은 가장 빈번한 30만개의 단어로 모델을 평가했다. word vector 차원을 다르게 선택하고 훈련 데이터의 양을 늘린 CBOW 아키텍처를 사용한 결과는 아래 표와 같다. 
<img src="https://velog.velcdn.com/images/muk-jjang/post/cf083655-f33a-4c0e-b8cf-2b00aacc7e49/image.png" alt="">
어느 시점이 지나면 단순히 차원만을 늘리거나 학습데이터만을 늘리는 것은 개선 효과가 줄어든다는 것을 볼 수 있다. 따라서 벡터 차원과 학습 데이터의 양을 모두 늘려야 한다. 여기서 주목해야 할 점은 현재 비교적 많은 양의 데이터로 단어 벡터를 훈련하는 것이 널리 사용되고 있지만, 그 크기가 충분하지 않을 수도 있다는 것을 말한다.</p>
<p>Table2와 Table4에 보고된 실험에서는 SGD 및 역전파를 사용한 세 가지 훈련 epoch를 사용했다. 시작 학습률은 0.025를 선택하고 선형적으로 감소시켜 마지막 훈련 시점이 끝날 때 0에 가까워지도록 하였다.</p>
<h2 id="43-comparison-of-model-architectures">4.3 Comparison of Model Architectures</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/2b56219a-f917-4493-8d02-aea6d143d2b4/image.png" alt="">
아래 사진은 1개의 CPU로 실험
<img src="https://velog.velcdn.com/images/muk-jjang/post/4645a805-c85b-4e67-b21d-01ef94557d22/image.png" alt=""></p>
<hr>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/d37ad877-aaa2-4872-8072-e465a9da0a35/image.png" alt=""></p>
<h2 id="44-large-scale-parallel-training-of-models">4.4 Large Scale Parallel Training of Models</h2>
<p>분산연산 framework를 사용하여 학습
<img src="https://velog.velcdn.com/images/muk-jjang/post/a88c49a4-ef08-4904-86a9-8b96e95ea980/image.png" alt=""></p>
<h2 id="45-microsoft-research-sentence-completion-challenge">4.5 Microsoft Research Sentence Completion Challenge</h2>
<p>Microsoft Sentence Completion Challenge는 최근에 소개된 advancing LM과 다른 NLP 기술에 대한 task이다. 해당 task는 1040개의 문장으로 구성되어 있으며 문장은 하나의 단어가 빠져있고 목표는 가장 일관성있는 단어를 선택하는 것이다. 
<img src="https://velog.velcdn.com/images/muk-jjang/post/8df5a670-98a1-487c-9f31-5ba2dce164c9/image.png" alt=""></p>
<h2 id="5--examples-of-the-learned-relationships">5.  Examples of the Learned Relationships</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/3556278f-482a-40a3-b3cc-24159ac47e0e/image.png" alt=""></p>
<h1 id="6conclusion">6.Conclusion</h1>
<p>초초 간단한 architecture를 이용하여 word vector를 학습시킴
-&gt; 여러 유사성을 간단하게 판단 가능</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-SEMI-SUPERVISED-CLASSIFICATION-WITH-GRAPH-CONVOLUTIONAL-NETWORKS</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-SEMI-SUPERVISED-CLASSIFICATION-WITH-GRAPH-CONVOLUTIONAL-NETWORKS</guid>
            <pubDate>Mon, 04 Mar 2024 12:22:40 GMT</pubDate>
            <description><![CDATA[<h1 id="background">Background</h1>
<h2 id="1-graph란">1. Graph란?</h2>
<p>점들과 그 점들을 잇는 선으로 이루어진 데이터 구조이다.<img src="https://velog.velcdn.com/images/muk-jjang/post/74e46cb4-1002-4d17-826e-8f03e27bf63f/image.png" alt="">위그림과 같이 사람과 사람간의 관곌르 나타내거나, paper들 사이의 관계 3D model에서 mash들 사이의 관계 분자 구조를 나타낼 때 graph 데이터가 사용될 수 있다.</p>
<h2 id="2-graph-structure">2. Graph Structure</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/3ebbea05-dc18-4b78-8928-57d83ae37141/image.png" alt="">
Node/Vertex라 불리는 정점, Node들 사이의 관계를 표현해주는 Edge(간선)으로 이루어져있으며 Edge는 데이터에 따라 weighted/unweighted(가중),directed/undirected(방향성)일 수 있다.</p>
<p>해당 graph structure를 matrix로 표현하는 방법으로는 Adjancency matrix, Degree matrix, Laplacian matrix가 있다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/2e14f415-cd1e-473e-9b84-0f24b28c5374/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/d40b6460-c24a-4f6d-81b5-b05da53d2dfd/image.png" alt=""></p>
<p>Adjacency matrix는 center node(중심 노드)와 neighbor node(이웃 노드) 사이의 edge 유무, 방향성, 가중치 등을 표현할 수 있다.</p>
<p>Degree matrix는 center node에 이어진 edge의 수를 표현한다.</p>
<p>Laplacian matrix는 Adjacency matrix와 Degree matrix를 이용하여 중심 노드와 이웃노드 사이의 관계를 표현한다(D(degree matrix)-A(adjacency matrix)).
이렇게 Laplacian matrix를 표현하였을 때 아래와 같이 중심 노드와 이웃노드 사이의 관계 표현이 가능하다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/45ec81f3-4068-4207-a14f-afacc736c176/image.png" alt=""></p>
<blockquote>
<p>출처: <a href="https://www.youtube.com/watch?v=F-JPKccMP7k&amp;t=1507s">https://www.youtube.com/watch?v=F-JPKccMP7k&amp;t=1507s</a></p>
</blockquote>
<h2 id="3-convolution">3. Convolution</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/13b4b5e3-dee1-49e7-9aed-a51505c77e15/image.png" alt="">
위에서 살펴봤다싶이 그래프의 특징은 이웃 노드들의 정보(edge, feature)가 중심 노드의 정보와 관계가 있다.
&rarr; Convolution을 적용할 수 없을까? Local Feature을 뽑아내고 싶어!</p>
<h3 id="일반적인-convolution을-graph에-적용하기-어려운-이유">일반적인 Convolution을 Graph에 적용하기 어려운 이유</h3>
<p>그래프는 이미지와 같이 regular grid한 형태도 아닐 뿐더러 적용한다 해도 필터의 크기가 유동적이다.
&rarr; 위 사진을 보면 이미지와 같은 regular grid형태는 이웃 노드들의 갯수가 일정하다. 그래프의 경우엔 중심 노드가 무엇이냐에 따라 이웃노드들의 갯수가 달라진다. 즉 필터의 크기가 일정하지 않다.</p>
<h2 id="4-graph-convolution">4. Graph Convolution</h2>
<p>Grpah Convolution에서는 연구가 두 가지 방향으로 나뉜다.
Graph Convolution을 Graph signal processing 일환으로 보는 Spectral Convolution, 중심 노드를 이웃 노드의 feature로 업데이트 하는 방식인 Spatial Convolution이 있다.
위에서 언급했다 싶이 일반적인 Convolution은 초기에 적용하기 어려웠기에 연구는 Spectral Convolution에서 Spatial Convolution으로 발전됐다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/a4d34d14-39d7-49d5-b644-20d1c57c9223/image.png" alt="Spectral Convolution"><img src="https://velog.velcdn.com/images/muk-jjang/post/8af4b09c-6c2c-45e5-9b6f-a9200b623aad/image.png" alt="Spatial Convolution"></p>
<h3 id="41-spectral-convolution">4.1 Spectral Convolution</h3>
<p>단순 Convolutin을 사용하기 어렵지만 Convolution의 장점을 이용하고 싶어 사용하고 싶음. 신호처리에 쓰이는 Convolution Theoremd을 가지고 온다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/348d4ab0-7787-4908-9b94-d4aac76b9e63/image.png" alt=""></p>
<h4 id="convolution-theorem">Convolution Theorem</h4>
<p>두 개 함수의 Convolution을 푸리에 변환하는 것은 각각의 함수를 푸리에 변환하여 pointwise product 하는 것과 같다.</p>
<h4 id="fourier-transform">Fourier Transform?</h4>
<ul>
<li>임의의 입력 신호를 다양한 주파수를 갖는 주기함수들의 합으로 분해하여 표현하는 것</li>
<li>고주파~저주파까지 다양한 주파수 대역의 sin, cos 함수들로 분해하는 것</li>
</ul>
<p>&rarr; Graph에서의 Fourier Transform?
node의 feature을 신호로 보고 Frequency(feature 사이 차이)별로 분해하는 것<img src="https://velog.velcdn.com/images/muk-jjang/post/eb18ae50-a7c4-4ff7-9e40-b9b9a19a80ad/image.png" alt=""></p>
<h3 id="42-graph-fourier-transform">4.2 Graph Fourier Transform</h3>
<ul>
<li>Signal: Node Featrue</li>
<li>Frequency: Central node와 Neighbor node 간의 차이
Graph Fourier Transform -&gt; Frequency가 낮은 feature들을 우선 반영하겠다. 즉 중심노드의 feature와 차이가 적은 이웃 노드들을 우선 반영하겠다는 의미이다.</li>
</ul>
<blockquote>
<p>$$w*h = F^{-1}(F(w)\odot F(h))$$</p>
</blockquote>
<p>위의 Fourier transform 식을 보면 convolution을 이렇게 나타낼 수 있다.
즉 featur을 푸리에 변환한 것과 weight를 푸리에 변환 한 것의 pointwise product에 푸리에 역변환을 취한 것은 featur와 weight의 convolution과 같다.
근데 참 웃기게도 이 모든것이 feature matrix에 laplacian matrix를 곱한것과 같다.
왜? laplacian matrix를 eigen decomposition을 하면 아래와 같은 식이 나온다. 
<img src="https://velog.velcdn.com/images/muk-jjang/post/0bd3a3ec-b754-4235-85f7-e00cbdca4d1d/image.png" alt="">$$\Phi$$는 Fourier basis를 말한다. 즉 laplacian matrix를 곱하는 것은 feature에 푸리에 변환을 하고 역변환하는 것과 유사하다. 아래 이미지 참고. weight는 laplacian matrix의 eigen value
<img src="https://velog.velcdn.com/images/muk-jjang/post/e90fa646-ff6f-4453-9637-c939ec8a52a1/image.png" alt=""></p>
<h2 id="5-spectral-gcn">5. Spectral GCN</h2>
<h3 id="51-spectral-gcn">5.1 SPECTRAL GCN</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/258dc9a4-9ab4-49b7-abe9-cac6cc2ff415/image.png" alt="">기존의 Graph Fourier Transform과 동일하다. 다음 레이어의 업데이트는 Fourier domain에서 계산된 후 Inverse Fourier Transform을 한 것에 비선형 함수를 씌워 계산된다.
Limitation</p>
<blockquote>
<p>-spatial filter가 특정 지역에 대한 특징을 잘 추출한다는 보장이 없다
-계산 비용이 비싸다(eigen decomposition 비용)</p>
</blockquote>
<h3 id="52-chebnet">5.2 ChebNet</h3>
<p>eigen decomposition의 계산 비용 문제로 나온 아이디어.
<img src="https://velog.velcdn.com/images/muk-jjang/post/6f5a455b-4d3a-4785-896a-c00b69d5e0e1/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/472c6759-ed4f-4665-9483-1eca081b4767/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/8de9a162-dc54-419d-bf78-eb681bf31520/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/57352ad7-8c4f-4ed4-8a70-51e4aa789c34/image.png" alt=""></p>
<p>다항 근사를 시켜 eigen decomposition을 없앴다.
이 부분은 이해가 부족한 관계로 더 찾아봐야한다.</p>
<h3 id="53-gcnspatial-gcn">5.3 GCN(Spatial GCN)</h3>
<p>위 식을 보면 학습 파라미터가 $\theta_k$가 된다. k를 늘리게 되면 학습 파라미터도 많아질 뿐더러 오버피팅의 위험성이 있어 해당 논문에서는 k를 1로 고정하였다. 그리고 $\theta = \theta_0 = -\theta_1$로 고정하였다.
(Renomalization trick)Adjancey matrix에 self connection을 추가하였다.<img src="https://velog.velcdn.com/images/muk-jjang/post/9dd96e0e-4288-4a75-9199-a4a128736ba2/image.png" alt="">
Model
<img src="https://velog.velcdn.com/images/muk-jjang/post/3ed6656f-64ee-474d-b7e0-007d6b4f7cea/image.png" alt="model"></p>
<h3 id="6-experiment">6. Experiment</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/66b825dd-9e7d-4c5e-a782-9067037ee4f1/image.png" alt="">
Node:  Documents (논문)
Edge:  인용
Label: Node Label (어떤 종류의 논문인지에 대한 Label)
Node Feature: (Sparse) Bag of words
Label rate: 각 데이터셋에서 훈련에 활용되는 training node를 전체 노드 개수로 나눈 것</p>
<p>각 문서마다 Sparse한 Bag of words로 이루어진 feature vector로 구성되며, 문서들간의 Citation links를 담고 있음
<img src="https://velog.velcdn.com/images/muk-jjang/post/4a7dc580-df2c-4b4e-8666-9529506090ea/image.png" alt="">
<img src="https://velog.velcdn.com/images/muk-jjang/post/014fbca2-875c-4adf-99d1-fc3905ad8c70/image.png" alt="">
<img src="https://velog.velcdn.com/images/muk-jjang/post/ce63ce68-6879-46ab-93c0-f44e3b4fc2ea/image.png" alt="">
 Random Graph에 대한 Epoch당 평균적인 Training Time을 보여줌
이는 Forward Pass, Cross-Entropy 계산, Backward Pass에 대한 평균을 말함</p>
<p>뭔가 급하게 대충 넘어간거 같아.. 보충이 필요해보인다...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] ELECTRA: PRE-TRAINING TEXT ENCODERS
AS DISCRIMINATORS RATHER THAN GENERATORS
]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-ELECTRA-PRE-TRAINING-TEXT-ENCODERSAS-DISCRIMINATORS-RATHER-THAN-GENERATORS</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-ELECTRA-PRE-TRAINING-TEXT-ENCODERSAS-DISCRIMINATORS-RATHER-THAN-GENERATORS</guid>
            <pubDate>Thu, 29 Feb 2024 15:49:26 GMT</pubDate>
            <description><![CDATA[<h1 id="1-introduction">1. Introduction</h1>
<p>당시 SOTA representation learning 방법은 일종의 denoising autoencoder 방법이다. 입력 시퀀스의 토큰중 대략 15%를 마스킹하여 복원하는 모델링을 MLM(masked language modeling)이라고 한다. MLM은 양방향으로 representations을 학습하기 때문에 기존 language-model보다 효과적이긴 하지만 sequence 하나당 15%의 token만 학습하기 때문에 학습 비용이 많이 든다.</p>
<p>따라서 해당 논문에서는 대체된 token을 찾는 방법(RTD)을 제시한다. 해당 방법은 주어진 sequnece의 일부 token을 다른 token으로 대체하여 대체된 token이 real input tokens인지 replaced tokens인지 판별하도록 학습한다. replaced token은 <strong>Generator</strong>를 통해 plausible 하게 생성된다. 그리고 replaced token이 진짜인지 아닌지를 <strong>Discriminator</strong>가 판별한다.
이런 discriminative한 task의 이점은 모델이 모든 input tokens으로 부터 학습함으로써 computationally efficient하게 만든다.</p>
<p>RTD 방식은 BERT보다 학습 속도가 빨랐고 downstream task에 대해 더 높은 정확도를 달성했다.
BERT,XLNet과 같은 MLM-based 방법들과 같은 model size를 가졌을 때 MLM 방법들의 성능을 능가했다.
그 예시로 ELECTRA-Smalldms 1개의 GPU로 4일동안 학습하여 small BERT의 성능을 능가했다. 
또한 ELECTRA-Large는 RoBERTa나 XLNet보다 적은 파라미터, 1/4의 계산량으로 비슷한 성능을 보이고, ALBERT를 능가하였다.</p>
<p>즉, ELECTRA는 기존의 language representation learning 기법들보다 compute-efficient하고 paramter-efficient하다.</p>
<p>아래는 위에서 말한 성능 비교 Figure이다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/a1dbc099-54f0-4c93-bdd4-9f9258f8c491/image.png" alt=""></p>
<h1 id="2-method">2. Method</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/ef26b68d-f9c9-49ec-8b7b-e79b5d49e5b2/image.png" alt="">
해당 논문에서는 <strong>generator G</strong>와 <strong>discriminator D</strong>두 개의 networks를 학습시킨다. <strong>G</strong>와 <strong>D</strong>는 모두 Transformer encoder로 구성되어있다.</p>
<p><strong>generator G</strong>는 기존 MLM과 똑같이 학습된다.
input $$x = [x_1, x_2 , .... , x_n]$$이 주어지면 input에서 랜덤으로 마스크할 부분을 뽑아 [MASK] token으로 대체한다. [MASK] token으로 대체한 것을 $$x^{masked} = REPLACE(x, m, [MASK])$$로 표기한다.
generator는 masked된 token의 실제 input을 예측하도록 token을 생성한다. 이렇게 생성된 token을 $$x^{corrupt} = REPLACE(x, m, \hat{x})$$로 표기하고 discirminator의 input으로 들어간다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/62e9b59d-8983-4af4-a986-d405904a2846/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/4b3d0fa9-4058-46b1-8fe4-6a0133120387/image.png" alt=""></p>
<p><strong>discriminator D</strong>는 generator가 생성한 token sequence에 대해 각 토큰이 original인지 replaced인지 이진분류를 진행한다.<img src="https://velog.velcdn.com/images/muk-jjang/post/0ac6afab-e622-429d-bcd0-85998010d601/image.png" alt=""></p>
<p><strong>Loss function</strong>
MLM(generator) loss와 discriminator loss의 합이 최소화되도록 학습시킨다. <strong>G</strong>의 샘플링 과정이 있어 <strong>D</strong>의 loss는 <strong>G</strong>로 역전파되지 않는다. 
이렇게 pre-training을 시킨 후 fine-tuning에서는 <strong>G</strong>는 버리고 <strong>D</strong>만 fine-tuning한다<img src="https://velog.velcdn.com/images/muk-jjang/post/5de610df-ea2f-487e-bf85-4a568f3ac93f/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/5bf72291-55bc-457a-8bc3-0c3b2bf5681f/image.png" alt=""></p>
<blockquote>
<p><strong>D</strong>만 fine-tuning하는 이유는 MLM은 기존 MLM과 같이 다양한 representation이 학습되어있는 상태이다. 하지만 <strong>D</strong>는 단순 text가 진짜인지 가짜인지만을 판별하는 것으로 학습되어서 특정 task를 수행하기 위해서는 fine-tuning을 진행한다.
<a href="https://velog.io/@lee9843/ELECTRA-PRE-TRAINING-TEXT-ENCODERS-AS-DISCRIMINATORS-RATHER-THAN-GENERATORS-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0">참고링크</a></p>
</blockquote>
<h1 id="3-experiments">3. Experiments</h1>
<h2 id="31-experimental-setup">3.1 EXPERIMENTAL SETUP</h2>
<p>General Language Understanding Evaluation (GLUE) 벤치마크와 Stanford Question Answering (SQuAD) 데이터셋에서 모델을 평가한다.
대부분의 실험에서는 BERT와 동일한 데이터를 pre-training한다. BERT의 데이터는 Wikipedia 및 BooksCorpus에서 33억 토큰으로 구성되지만  해당 논문의 경우, XLNet을 위한 데이터로 pre-training을 수행한다. 이 데이터는 BERT 데이터에 ClueWeb, CommonCrawl 및 Gigaword 데이터를 포함하여 330억 토큰을 확장한 것이다. 
모든 사전 훈련 및 평가는 영어 데이터에서 수행하며 모델 아키텍처 및 대부분의 하이퍼파라미터는 BERT와 동일하다. 
GLUE에서 미세 조정을 위해 ELECTRA 위에 간단한 선형 분류기를 추가한다. 
SQuAD의 경우, ELECTRA 위에 XLNet의 질문-답변 모듈을 추가한다. </p>
<h2 id="32-model-extensions">3.2 MODEL EXTENSIONS</h2>
<h3 id="weight-sharing">Weight Sharing</h3>
<p>pre-training 효율성을 높이기 위해 generator와 discirminator의 weight를 공유한다. 만약 generator와 discriminator의 모델 size가 같으면 모든 weight를 공유할 수 있지만 실험에서 generator의 size가 discriminator의 size보다 작을 때 efficient 하다는 것을 발견하였기 때문에 임베딩 weight만 공유한다.(token and position embedding)
아래는 <strong>D</strong>의 크기에 따른 <strong>G</strong>별 성능이다
<img src="https://velog.velcdn.com/images/muk-jjang/post/37e567ed-6862-4c33-996a-a3174c926b5e/image.png" alt=""></p>
<h3 id="smaller-generators">Smaller Generators</h3>
<p>만약 generator와 discriminatord의 크기가 동일하다면 기존 MLM보다 두 배의 계산이 들어간다. 따라서 저자는 smaller generator를 사용하여 계산량을 줄이고자 하였다. smaller generator는 layer size는 줄이면서 hyperparameter는 일정하게 유지하였다. 실험 결과 discriminator 크기의 1/4-1/2일 때 가장 좋은 성능을 보였다.
저자가 말하는 이유는 generator의 size가 커지면 discriminator의 판별 문제가 훨씬 더 challenging 해져서 그렇다고 한다. 
-&gt; discriminator가 실제 데이터의 분포를 모델링 하는 것보다 generator를 모델링하는데 더 많은 파라미터가 쓰인다고 한다</p>
<h3 id="training-algorithms">Training Algorithms</h3>
<ol>
<li>generator만 n steps 학습 시킨다</li>
<li>학습된 generator의 가중치로 discriminator의 가중치를 초기화하고, generator의 가중치는 고정한 후, discriminator만 n steps 학습 시킨다</li>
</ol>
<h2 id="33-small-models">3.3 SMALL MODELS</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/4013b007-d5e2-4e7f-98e7-ff83482f2847/image.png" alt="">pre-training 효율성을 높이기 위해 gpu 1대에서도 돌아갈 수 있는 small model을 개발했다.
BERT-Base의 하이퍼파라미터를 사용하되, 시퀀스 길이를 512 토큰에서 128 토큰으로, 배치 사이즈를 256에서 128로, 은닉층의 차원을 768에서 256으로, 임베딩 차원을 768에서 128로 줄여서 실험했다.
그럼에도 불구하고 Table 1에서 볼 수 있듯, 높은 수준의 GLUE를 달성했다.</p>
<h2 id="34-large-models">3.4 LARGE MODELS</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/811aac1a-3e0d-43ea-a762-96825f0cb8cd/image.png" alt=""><img src="https://velog.velcdn.com/images/muk-jjang/post/2ef19920-daeb-4d8d-b463-31ac20af2dad/image.png" alt="">
BERT-LARGE에 준하는 ELECTRA-LARGE 모델을 개발하여 실험하였다.
ELECTRA-400K:RoBERTa 사전학습의 대략 1/4 연산
ELECTRA-1.75M: RoBERTa 사전학습의 연산과 비슷한 수준
<img src="https://velog.velcdn.com/images/muk-jjang/post/57a0c76b-e146-4a7e-95c9-bdaa322ce910/image.png" alt=""></p>
<h2 id="35-efficiency-analysis">3.5 EFFICIENCY ANALYSIS</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/24345102-284b-4b36-92ac-11d4386bc9b7/image.png" alt=""></p>
<ol>
<li><p>ELECTRA 15% : discriminator loss 를 전체 token 이 아니라 masking된 15%에만 계산</p>
</li>
<li><p>Replace MLM : 마스킹 할 token을 [MASK] token으로 replace함</p>
</li>
<li><p>All-Token MLM : 위에서 masking된 token을 predict, discriminator에선 mask에 대해서만 예측이 아닌 모든 token 에 대해 예측</p>
</li>
</ol>
<h1 id="5--conclusion">5.  CONCLUSION</h1>
<p>언어 표현 학습을 위한 새로운 자기 지도 학습 작업인 RTD를 제안했다. 
핵심 아이디어는 text encoder를 훈련하여 small generator에 의해 생성된 고품질 부정적 샘플과 입력 토큰을 구별하도록 하는 것입니다. 
MLM과 비교하여, 해당 논문에서 RTD pre-trainig는 더 많은 계산 효율성을 가지며 downstream task에서 더 나은 성능을 보여준다. 비교적 작은 계산량을 사용해도 잘 작동하므로, 
-&gt; 더 적은 리소스로 적용하고 개발할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Language Models are Unsupervised Multitask Learners]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Language-Models-are-Unsupervised-Multitask-Learners</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Language-Models-are-Unsupervised-Multitask-Learners</guid>
            <pubDate>Mon, 19 Feb 2024 14:43:45 GMT</pubDate>
            <description><![CDATA[<h1 id="1-introduction">1. Introduction</h1>
<p>Machine learning system은 큰 dataset과 고용량의 모델, supervised learning 등을 통해 빠르게 발전해왔다. 이러한 방법으로 개발된 모델들은 데이터의 분포가 살짝만 바뀌어도 불안정하며 특정 Task에서만 좋은 성능을 발휘한다. 
그래서 많은 Task에 적용 가능한 더 범용적인 모델을 개발할 필요가 있다.
&rarr; 유지 보수나 리소스 측면에서 gerneral한 모델을 만드는 것이 좋다.</p>
<p>현재 기계학습체계를 개발하는 주된 방법은 목표 과제에 맞는 dataset을 찾아서, 이를 train, test 단계로 나누어 학습 후 IID(independet and identically distributed)로 성능을 측정하는 방법이다. 이는 좁은 범위의 과제에서는 매우 효과적이나 범용적인 이해를 필요로 하는 독해나 다양한 이미지 분류 시스템 등의 문제에서는 높은 성능을 내지 못했다.</p>
<p>Multitask learning은 일반 성능을 높이는 유망한 방법이지만 아직 초기 연구 단계이다. 최근의 machine learning system은 일반화를 위해서는 수십만 개 정도의 학습 샘플을 필요로 하는데 이는 multitask learning을 위해서는 그 몇 배가 필요하다는 것을 뜻한다.</p>
<p>가장 성능이 높은 언어처리 모델은 pre-training과 supervised fine-tuning의 결합으로 만들어졌다. 
이러한 방법들은 여전히 supervise learning을 필요로 한다. 만약 supervise data가 최소한으로 또는 전혀 필요하지 않다면,  commonsense reasoning이나 sentiment analysis과 같은 특정 과제들을 수행하는 데 큰 발전이 있을 것이다.</p>
<p>이 논문에서는 언어 모델이 어떤 parameter나 모델 구조의 변화 없이도 zero-shot setting 하에서 downstream task를 수행할 수 있음을 보인다. 이 접근법은 언어 모델이 zero-shot setting 하에서 넓은 범위의 과제를 수행할 수 있는 가능성을 보이며, 과제에 따라서는 state-of-the-art를 달성하였다.</p>
<h1 id="2-approach">2. Approach</h1>
<p>GPT-2의 핵심 접근법은 language modeling이다. language modeling은  입력 $$(x_1,x_2, ,,, x_n)$$, $$(s_1, s_2, ,,,s_n)$$으로 부터  unsupervised distribution을 예측한다. 
<img src="https://velog.velcdn.com/images/muk-jjang/post/fc8b9b15-4779-42e2-b07b-ac9366fb34c0/image.png" alt=""></p>
<p>&rarr;  언어는 순서를 가지고 있음으로써 조건부 확률을 통해 unsupervised distribution을 예측할 수 있다.</p>
<ul>
<li><p>기존 single task를 수행하는 것은 확률분포 $$P(output|input)$$을 예측하는 것으로 표현됐다.
&rarr; single task에서는 주어진 input에 대한 output이 정해져있다.</p>
</li>
<li><p>다양한 task를 수행하는 모델에서는 하나의 input에 대해 task에 따라 다른 output이 나올 수 있다.
&rarr; 이러한 경우 확률분포 $$P(output|input, task)$$를 예측하도록 모델링 해야한다.</p>
</li>
</ul>
<p>예를들어 기계번역(영어 -&gt; 프랑스어)을 학습하기 위해서는 (translate to french, english text, french text)를 input sequence로 넣어준다. </p>
<p>reading comprehension(QA)을 학습하기 위해서는 (answer the question, document, question, answer)와 같은 형태로 input sequence로 넣어준다.</p>
<p>언어모델은  supervised objective의 global minimum은 subset of the sequence단위에서 evaluated 되는 것을 제외하고는 unsupervised objective들의  global minimum과 같다. 따라서 supervision 없이 decaNLP(QA, machine translation, summarization, setiment analysis)의 task들을 학습가능하다.</p>
<h1 id="21-training-dataset">2.1 Training Dataset</h1>
<p>이전의 연구들에서는 single domain(ex. news article, fiction book)에 대해서만 모델을 학습하였다. 하지만 해당 연구에서는 task들에 대해 zero-shot learning을 가능하게 하기 위해 가능한 많은 양의 데이터를 다양한 domain에서 가져오고자 하였다.</p>
<p>Common crawl과 같은 web scraping 데이터는 다양하고 무한에 가까운 텍스트를 뽑아낼 수 있다. 
&rarr; 해당 논문에서는 data quality issue와 학습 전 특정 task에 대한 정보가 들어가는 것을 방지하고자 새로운 Web Scraping 데이터를 만들었다. 해당 데이터는 Reddit에서 3karma 이상 받은 outbount link 데이터를 모두 scrap하여 사용하였다.
해당 데이터를 WebText라고 명명하였다.
WebText는 800만개가 넘는 문서가 포함된 총 40GB의 텍스트가 포함되어있다.</p>
<h1 id="22-input-representation">2.2 Input Representation</h1>
<p>당시 language model(LM)은 lower-casting, tokenization, oov 등 preprocssing이 필요했다. 이러한 preprocessing은 모델링 할 수 있는 문자열을 제한한다.
유니코드(UTF-8)은 이 점을 완화할 수 있지만 byte-level 모델링은 word-level 모델링보다 성능이 떨어진다는 단점이 있다.
따라서 해당 논문에서는 이 문제를 해결하고자 Byte Pair Encoding(BPE)를 제안한다.
BPE는 character와 word의 중간지점이며 word-level 입력과 character-level 입력에 대해 보간할 수 있다.
유니코드 기반으로 BPE를 구현하면 130000이 넘는 base vocabulay가 필요하다. 이는 전형적인 BPE vacab 크기 32000~64000과 큰 차이가 난다. BPE를 byte-level에서 구현하면 base vocab size가 256밖에 되지 않는다. 
하지만 BPE를 byte-level에서 적용하는 것은 sub-optimal하기 때문에 BPE가 (dog. dog! dog?)와 같은 변형 토큰을 저장하는 것을 막기 위해 BPE가 character category가 다르면 merge하지 않게 제한한다.</p>
<p>이러한 input representation을 사용하면 word-level LMs의 이점과 byte-level approach의 일반성을 결합하여 사용한다는 이점이 있다.
왜냐하면 이런 approach가 어떤 유니코드 문자열에도 확률을 할당할 수 있으므로 preprocessing과 관계없이 어떤 dataset에 대해서도 evaluate 할 수 있다.</p>
<h1 id="23-model">2.3 Model</h1>
<p>몇 가지 수정사항을 제외하고는 GPT-1 모델을 따른다.</p>
<p>수정사항</p>
<ol>
<li>pre-activation residual network와 비슷하게 Layer normalization이 각 sub-block의 input으로 이동하였다.</li>
<li>마지막 self-attention block 뒤에  layer normalization을 추가하였다.</li>
<li>residual layer의 깊이에 따라 intialization 다르게 해준다. $$N$$을 layer의 깊이라 했을 때 Residual layer의 weight에 $$1/\sqrt(N)$$을 곱해 scaling 해준다.</li>
<li>vocabulary size가 50,257로 늘어났으며 context size가 512 -&gt; 1024 token으로 늘어났고 batch size 또한 512로 늘어났다.</li>
</ol>
<h1 id="3-experiment">3. Experiment</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/df7d6efd-4628-4ee9-94c2-4ac8ec441147/image.png" alt="">
4개의 모델을 만들어 실험하였다.
가장 작은 모델은 기존 GPT1과 크기가 동일하고 두번째로 작은 모델은 BERT와 크기가 동일하다.
해당 모델 중 가장 큰 모델을 GPT-2라고 소개한다.
각 모델의 Learning rate는  WebText의 5%에 해당하는 held-out sample을 통해 수동으로 조정하였다. 
모든 모델이 WebText에 underfit 되었으므로 많은 시간을 training에 투자하면 성능이 더 오를것으로 판단된다.</p>
<h2 id="31-language-modeling">3.1 Language Modeling</h2>
<h4 id="zero-shot-task-성능을-실험해보기-위해-다양한-task에서-성능을-평가한다-out-of-distribution에-대해-평가한다">zero-shot task 성능을 실험해보기 위해 다양한 task에서 성능을 평가한다. out-of-distribution에 대해 평가한다.</h4>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/95ba9c85-8cc2-4051-b079-7d1fa38c85a7/image.png" alt="">
8개의 data set중 7개의 data set에 대해 SOTA를 달성하였다.
특히 long-term dependecies를 평가하는 LAMBADA, CBT에서 큰 성능 향상을 보였다.</p>
<h2 id="32-childrens-book-test">3.2 Children’s Book Test</h2>
<h4 id="cbt는-명명된-개체-명사-동사-전치사-등-다양한-범주의-단어에-대한-lm의-성능을-평가하기-위해-만들어진-dataset이다">CBT는 명명된 개체, 명사, 동사, 전치사 등 다양한 범주의 단어에 대한 LM의 성능을 평가하기 위해 만들어진 dataset이다.</h4>
<p>CBT dataset은 perplexity 대신 cloze test의 accuracy를 evaluation metric로 사용한다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/86d34d66-5dca-4fb5-adb0-73bbce0d8849/image.png" alt="">
모델 사이즈가 커질수록 human performance와의 차이가 줄어듦을 볼 수 있다. 해당 실험에서 CBT test book 중 WebText와 겹치는 부분이 있어 해당 부분을 validation set에서 제외하고 실험을 하였다.</p>
<h2 id="33-lambada">3.3 LAMBADA</h2>
<h4 id="lambada-dataset은-모델의-long-range-dependencies를-평가하는-dataset이다">LAMBADA dataset은 모델의 long-range dependencies를 평가하는 dataset이다.</h4>
<p>token이 50개가 넘는 sentence에서 마지막 word를 예측하는 task이다.
&rarr; GPT-2는 해당 task에서 99.8 -&gt; 8.6의 perplexity를 달성하였으며, accuracy를 19% -&gt; 52.66%까지 향상시켰다.
추후에 GPT-2의 오류를 조사한 결과, 예측하는 것이 final word가 아니라 sentence의 valid continuation이라는 것을 알고 stop-word filte을 추가하여 accuracy를 63.24%까지 향상시켰다.</p>
<h2 id="34-winograd-schema-challenge">3.4 Winograd Schema Challenge</h2>
<p>해당 실험은 text 속의 모호함을 얼마나 잘 처리하는지 평가한다.
&rarr;  commonsense reasoning
<img src="https://velog.velcdn.com/images/muk-jjang/post/c9fffb86-1a4e-407a-bdc0-893aabe9047f/image.png" alt=""></p>
<h2 id="35-reading-comprehension">3.5 Reading Comprehension</h2>
<p>Conversation Question Answering dataset (CoQA)은 7개의 다른 domain에서 온 document에서 질문과 답이 대화형식으로 들어있는 dataset이다.</p>
<p>zero-shot setting에서 F1-score 55를 달성하였다. fine-tuning을 한 BERT는 F1-score 89였다.</p>
<h2 id="36-summarization">3.6 Summarization</h2>
<p>CNN과 Daily Mail dataset
<img src="https://velog.velcdn.com/images/muk-jjang/post/eabcb645-6d9b-4b11-8821-1cf68660ca1d/image.png" alt="">
요약에서 좋은 성능을 내지 못했다.</p>
<h2 id="37-translation">3.7 Translation</h2>
<p>WMT-14 English-French test set에 대해서 5BLEU를 달성하였고 WMT-14 French-English test set에 대해서 11.5BLEU를 달성하였다. 다른 기존 모델에 비해 낮은 성능을 보인다.</p>
<h2 id="38-question-answering">3.8 Question Answering</h2>
<p>SQUAD와 같은 dataset에서 reading comprehension을 평가하기 위해 사용되는 metric(답변이 질문에 정확하게 일치하나?)로 평가 되었을 때 질문 4.1%를 정확하게 답변했다고 한다.
WebText LM중 가장 작은 모델은 1%도 넘지 못했다. GPT-2는 가장 작은 모델보다 5.3배 가량 정확하게 답변했다고 한다.
이런 task에서 model capacity가 큰 영향을 끼친다고 주장한다.</p>
<p> GPT-2는 가장 신뢰도가 높은 답변 1%에 대해 평균 63% 정도의 정확도를 보였다.
아래의 표는 해당 답변의 일부이다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/fbee86ae-03d6-4bb5-925d-159fc56b7206/image.png" alt=""></p>
<h2 id="4-generalization-vs-memorization">4. Generalization vs Memorization</h2>
<p>WebText는 데이터 양이 방대하므로 기존의 dataset과 overlap이 될 가능성이 존재한다. 이러한 경우엔 생성하는 것이 아닌 dataset에서 기억하는 내용을 그대로 출력하는 것으로 여겨질 수 있다.
아래 표는 벤치마크 dataset과 overlap된 정도를 보여준다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/838a4496-63ad-4a7a-a370-e4a66d57c660/image.png" alt="">
약간의 overlap이 있어 영향이 있을 수도 있지만, 기존 벤치마크 dataset의 train, test set이 overlap 되는 정도에 비해서는 크지 않다.</p>
<p>아래의 그래프에서 train set과 test set의 성능은 거의 비슷하며, 또한 모델 크기에 따라서 동시에 성능이 증가하고 있음을 보여준다.</p>
<p>아래 그래프를 보면 train, test에서의 성능이 거의 비슷하다.
이것은 Memorization을 통한 성능 개선이 아니었다고 말할 수 있다.
또한 모델의 크기가 커짐에 따라 성능이 계속 증가하고 있다. 이는 WebText dataset에 대해 underfitting 되어 있다고 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/7f4f48b4-ab71-4cb7-94ee-c2c61eaec7c8/image.png" alt=""></p>
<h1 id="6-discussion">6. Discussion</h1>
<p>해당 논문은 unsupervise task learning이 추가적으로 연구할 거리가 있음을 보여준다.
GPT-2는 reading comprehension 등에서는 좋은 성능을 보여줬지만 summarization 등에서는 기존 모델보다 좋지 못한 성능을 보여줬다. 
decaNLP와 GLUE에 fine-tuning을 해볼 계획이라고 한다.</p>
<h1 id="7-conclusion">7. Conclusion</h1>
<p>GPT-2는 방대한 텍스트 데이터를 학습하여 특정 작업에 대한 별도의 훈련 없이도 다양한 작업에서 우수한 성능을 발휘할 수 있었다. 이는 모 이러한 모델은 제로샷 학습에서도 높은 성과를 거두며, 특정 언어 모델링 데이터셋 중 7개에서 최고 수준의 성능을 보였다. 
하지만 특정 작업에 대한 성능을 더 향상시키기 위해서는 해당 작업에 특화된 데이터로 모델을 미세 조정하는 것이 필요하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-NEURAL-MACHINE-TRANSLATIONBY-JOINTLY-LEARNING-TO-ALIGN-AND-TRANSLATE</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-NEURAL-MACHINE-TRANSLATIONBY-JOINTLY-LEARNING-TO-ALIGN-AND-TRANSLATE</guid>
            <pubDate>Mon, 12 Feb 2024 18:23:28 GMT</pubDate>
            <description><![CDATA[<h1 id="1-introduction">1. Introduction</h1>
<p>기존 기계번역에서는 encoder-decoder 형식의 인공신경망을 사용하였다. Encoder는 input을 받아 고정된 길이의 context vector를 만들고 Decoder는 context vector를 이용하여 output을 만들어낸다.
해당 논문에서는 고정된 길의의 vector에 많은 정보량을 담는 것이 긴 문장을 번역하는 것에 어려움이 있다고 말한다.
따라서 해당 논문에서는 decoder에서 하나의 ouput을 출력할 때마다 입력 문장을 순차적으로 탐색해서 현재 생성하려는 부분과 가장 관련있는 영역을 집중하여 output을 출력하는 모델을 제시한다.</p>
<h1 id="2-background-neural-machine-translationbackground-neural-machine-translation">2. BACKGROUND: NEURAL MACHINE TRANSLATIONBACKGROUND: NEURAL MACHINE TRANSLATION</h1>
<p>확률론적인 관점에서 NMT(Neural Machine Translation)을 보자면 입력문장 $$x$$가 주어졌을 때 $$P(y∣x)$$를 최대화하는 문장 $$y$$를 찾는 것이다.</p>
<h2 id="21-rnn-encoderdecoder">2.1 RNN ENCODER–DECODER</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/00b74694-8ca3-462b-a8e2-fe8c831670c4/image.png" alt="">
RNN을 사용한 인코더에서는 input sentence $$x= (x_1,x_2,x_3...,x_{Tx})$$를 입력으로 받아 고정된 길이의 $$c$$로 변환한다. 
위 식에서 $$h_t$$는 time t에서의 hidden state이다.
$$t+1$$의 hidden state는 해당 시점의 입력과 $$t$$시점의 hidden state를 통해 업데이트한다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/535506b9-87e4-444c-8cff-69ccda48ed8f/image.png" alt="">
디코더에서는 context vector c를 인코더에서 받은 후 이전의 ouput들을 고려하여 $$y_t$$를 예측한다. 
해당 내용을 식으로 표현하면 위와 같다. </p>
<h1 id="3--learning-to-align-and-translate">3.  LEARNING TO ALIGN AND TRANSLATE</h1>
<p>해당 논문에서는 기존의 bidrectional RNN 인코더 디코더 구조를 바꿔 새로운 model archietecture를 제안한다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/0f2a06b4-e398-4829-848e-66dacaeada57/image.png" alt=""></p>
<h2 id="31-decoder-general-description">3.1 DECODER: GENERAL DESCRIPTION</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/71b9bcc7-1153-4e9f-ba0d-9d59fc4482ea/image.png" alt="">
Time i에서 decoder의 hidden state를 $$s_i$$이라고 한다. Alignment model에서는 decoder의 time i 에서의 정보다. 그리고 이는 encoder의 각각의 time 에서의 정보와 얼마나 연관성이 있는지 score를 계산한다. </p>
<p>Score는 decoder 의 바로 전 time에서의 hidden state $$s_{i-1}$$ 과 encoder의 time j 에서의 hidden state $$h_j$$ 를 이용하여 계산한다. 이 때 $$a()$$는 feedforward neural network이다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/e88d0bec-9e84-4f65-b473-23cfe695c9c6/image.png" alt="">
위에서 구한 score를 이용하여 Attention 수치인 $$\alpha$$를 계산한다. 구한 Attention 값을 이용하여 context vector를 만든다. 
즉 각 hidden state에 얼마나 집중을 할 것인가?에 대한 값 $$\alpha$$를 모든 시점의 hidden state에 곱한 후 합하여 context vector로 사용한다.</p>
<p>이렇게 사용하였을 때 기존 RNN의 단점을 보완할 수 있다. 기존 RNN은 제한된 길이의 context vector에 많은 정보를 담아야함으로써 정보의 손실이 컸고, 입력이 길어지면 context vector가 최신의 정보만 많이 담고있었다. 하지만 모든 hidden state에 집중 정도(attention)을 weighted sum을 하여 사용함으로 써 context vector에 필요한 정보만 넣을 수 있게 됐다.</p>
<h2 id="32-encoder-bidirectional-rnn-for-annotating-sequences">3.2 ENCODER: BIDIRECTIONAL RNN FOR ANNOTATING SEQUENCES</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/d402174e-eb22-4507-a37c-d78d9a8497c3/image.png" alt="">
BiRNN을 이용하여 hidden state를 생성한다. forward RNN은 처음부터 순차적으로 읽어 hidden state를 생성한다. backward RNN은 역순으로 읽어 hidden state를 생성한다. 최종 hidden state는 forward와 backward를 거쳐서 나온 hidden state를 concat하여 사용한다.</p>
<p>이렇게 hidden state를 만들게 되면 hidden state에 앞으로 올 단어와 이전 단어들의 정보가 모두 들어가게 된다.</p>
<h1 id="4-experiment">4. EXPERIMENT</h1>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/ce82d973-927d-4c48-bbc3-73cfeeb40ba7/image.png" alt="">
<img src="https://velog.velcdn.com/images/muk-jjang/post/b7648902-b045-40d1-8ccf-0e2697faf783/image.png" alt="">
긴 sentence에 대해 기존의 RNN encoder decoder모델보다 훨씬 좋은 성능을 나타냄을 볼 수 있다.</p>
<h1 id="conclusion">Conclusion</h1>
<p>기본 인코더-디코더를 확장하여 각 타겟 단어를 생성할 때 모델이 입력 단어 집합 또는 인코더가 계산한 해당 단어들의 context vector를 찾도록 함으로써, 전체 소스 문장을 고정 길이 벡터로 인코딩하지 않아도 되게 하였으며, 또한 모델이 다음 타겟 단어 생성에 관련된 정보에만 집중할 수 있게 했다. 이는 기계 번역 시스템이 긴 문장에서도 좋은 결과를 산출할 수 있도록 하는데 주요한 영향을 미쳤다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[강화학습] Balancing immediate and long-term goals]]></title>
            <link>https://velog.io/@muk-jjang/%EA%B0%95%ED%99%94%ED%95%99%EC%8A%B5-Balancing-immediate-and-long-term-goals</link>
            <guid>https://velog.io/@muk-jjang/%EA%B0%95%ED%99%94%ED%95%99%EC%8A%B5-Balancing-immediate-and-long-term-goals</guid>
            <pubDate>Mon, 05 Feb 2024 17:40:59 GMT</pubDate>
            <description><![CDATA[<h2 id="the-objective-of-a-decision-making-agent">The objective of a decision-making agent</h2>
<ul>
<li>Agent의 목표는 에피소드나 특정 task를 수행하는 동안 return을 최대화하는 sequence of actions을 찾는 것.</li>
</ul>
<hr>
<ol>
<li>return =  $G_t$</li>
</ol>
<p>$$
G_t = R_{t+1} + R_{t+2} + R_{t+3} +... + R_T
$$</p>
<ol>
<li>할인율 $\gamma$가 적용된 return</li>
</ol>
<p>$$
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} +... + \gamma^{T-1}R_T
$$</p>
<p>$$
G_t = \sum_{k=0}^{\infty}\gamma^kR_{t+k+1}
$$</p>
<p>→ recursive로 표현</p>
<p>$$
G_t = R_{t+1} + \gamma G_{t+1}
$$</p>
<hr>
<h3 id="policy">Policy</h3>
<p>정책은 에이전트의 행동전략이다.</p>
<p>정책의 종류로는 stochastic와 deteministic이 있다.</p>
<h3 id="정책-평가">정책 평가</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/f4150c82-93f2-4689-85db-1f150627be79/image.png" alt=""></p>
<ol>
<li>state-value function: What to expect from here?</li>
</ol>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/c34f8e34-2754-4f6f-a456-ea1cf88e75de/image.png" alt=""></p>
<ul>
<li><p>state-value-function은 V로 표기하며 어떤 state의 가치를 표현한다.(지금부터 기대되는 return)</p>
</li>
<li><p>$v_\pi(s)$는 정책 $\pi$ 일때$\pi$$s$의 상태에서 얻어지는 return의 기댓값이다.</p>
</li>
<li><p>현재 state에서 모든 행동을 다 해보고 얻어지는 기댓값</p>
<p>  → Discounted Factor $\gamma$를 적용한 Reward 총합 기댓값</p>
</li>
</ul>
<ol>
<li>Action-value function: What should I expect from here if I do this?</li>
</ol>
<ul>
<li><p>state $s$에서 $a$라는 action을 취했을 때 얻게되는 value(지금 행동으로부터 기대되는 return)</p>
</li>
<li><p>$Q^\pi(s,a)$로 표기한다.</p>
</li>
<li><p>$Q$ function은 동적인 환경에서 잘 작동할 수 있고, MDP 없이도 정책을 개선할 수 있다.</p>
<p>  → 상호작용하는 환경을 통해서 q function을 만들고 q function을 통해 정책을 개선한다.</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/159e246d-ecb6-4494-9398-60c216d56192/image.png" alt=""></p>
<ol>
<li><p>Action-advantage function: How much better if I do that?</p>
<p> 특정 액션을 취하는 것이 다른 액션을 취하는 것보다 얼마나 좋은가?</p>
<ul>
<li>현재 상태 s에서 a의 액션을 취했을 때 얻는 기댓값 - 현재 상태에서 모든 액션에 대한 기댓값의 평균</li>
</ul>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/008063ab-2690-4449-b10f-07ef4c300db5/image.png" alt=""></p>
<p>현재 정책을 평가할 수 있는 function들이다. 현재 상태에서 모든 상황을 고려한 기댓값(V-function), 특정 행동을 선택했을 때의 기댓값(Q-function), 특정 행동이 다른 행동보다 얼마나 좋은지에 대한 평가(active-advatage function)</p>
<hr>
<h2 id="planning-optimal-sequence-of-actions">Planning optimal sequence of actions</h2>
<h3 id="policy-evaluation-rating-policies">Policy evaluation: Rating policies</h3>
<ul>
<li>모든 state에 대해서 Value-function을 반복 적용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/6aba9a3f-9b5d-4f68-865d-a056dcd5637e/image.png" alt=""></p>
<p>해당 상황에서는 액션을 취했을 때 성공할 확률 50% 머무를 확률 33프로 반대로 갈 확률 0.1666으로 환경을 알고 있는 상황이다.</p>
<ul>
<li>state 5를 예시로 봤을 때 해당 state에서는 다음 state로 4,5,6을 가질 수 있다. 다음 state들의 value를 이용해 현재 state를 갱신한다. → 처음 모든 state의 value를 0으로 둔 상태에서 반복적으로 state value를 갱신하는 것이기 때문에 state 6을 제외한 나머지 state value들은 모두 0이다.</li>
<li>각 state의 value가 수렴할 때까지 반복한다.</li>
</ul>
<p>아래 사진은 반복적으로 적용하였을 때이다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/f2e1f829-d39b-4674-8024-c514dc698722/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰]Deep contextualized word representations(ELMo)]]></title>
            <link>https://velog.io/@muk-jjang/Deep-contextualized-word-representationsELMo</link>
            <guid>https://velog.io/@muk-jjang/Deep-contextualized-word-representationsELMo</guid>
            <pubDate>Sat, 03 Feb 2024 17:51:15 GMT</pubDate>
            <description><![CDATA[<h1 id="introduction">Introduction</h1>
<h4 id="--pre-trained-word-representations는-neural-language-understanding에서-핵심">- Pre-trained word representations는 neural language understanding에서 핵심.</h4>
<h4 id="--high-quality-representation은-2가지를-잘-modeling-해야함">- High quality representation은 2가지를 잘 modeling 해야함</h4>
<ul>
<li><p>단어의 복잡한 특성</p>
</li>
<li><p>언어학적인 문맥 상에서 다르게 사용될 때 각 문맥에서의 맞는 representation이 필요하다(Ex 다의어)</p>
<p>-&gt; 기존 word embedding은 contextual representation을 잘 학습하지 못 하였다.</p>
</li>
</ul>
<h1 id="elmo-embeddings-from-language-models">ELMo: Embeddings from Language Models</h1>
<ul>
<li>전체 문장을 input으로 받아 word representations을 만든다</li>
<li>bidrectional LSTM을 활용하여 language model을 학습시킴
language model: 이전 단어의 squence를 통해서 다음 단어를 예측하는 모델</li>
</ul>
<h2 id="31-bidrectional-language-models">3.1 Bidrectional language models</h2>
<h2 id="mathematical-demonstration">Mathematical demonstration</h2>
<h3 id="forward-language-model">forward language model</h3>
<p>N개 토큰의 squence가 주어졌을 때 foward language model은 토큰 $$t_k$$의 확률은 $$t_1$$에서 $$t_{k-1}$$까지 고려하여 계산한다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/6b1d5dba-c4db-4577-82ac-3edd6d729d74/image.png" alt=""></p>
<ul>
<li>$$x_{k}^{LM}$$은 context independent한 token representation으로 기존의 token embedding이나 chracter level의 CNN통해 만든다.
-&gt; 만들어진 $$x_{k}^{LM}$$을 L개의 layer을 가진 forward LSTM을 통과시킨다.</li>
<li>$$h_{k,j}^{LM}$$ 은 k번째 token이 j번째 layer에서 가진 hidden token이다. 
-&gt;ELMo에서의 hidden token은 context dependent하다.</li>
<li>제일 마지막 층 LSTM 이 $$t_{k+1}$$를 예측하는데 사용된다.</li>
</ul>
<h3 id="backward-language-model">backward language model</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/a5169420-8544-4d99-9908-b3dadf5c0ae9/image.png" alt=""></p>
<ul>
<li>backward language model은 forward language의 역방향으로 진행한다.</li>
</ul>
<h3 id="likelihood">likelihood</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/897b442a-d9ff-432b-aa9c-f6c5eda1a927/image.png" alt=""></p>
<ul>
<li>forward language model의 likelihood와 backward language model의 likelihood를 최대화 해야한다.</li>
</ul>
<h3 id="elmo-representation">ELMo representation</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/4369e10a-6c97-4b5c-9c23-e15a7d6bcc01/image.png" alt=""></p>
<ul>
<li>총 2L + 1개의 representation을 학습한다. </li>
<li><blockquote>
<p>forward 은닉층 L개, backward 은닉층 L개, $$x_{k}^{LM}$$ 1개로 총 2L+1개를 학습한다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/1fce4944-8fca-45a5-ac06-f4ecb7e546c9/image.png" alt="">
$$s_j^{task}$$는 softmax-normalized weights로 모든 가중치는 0~1이며 합 했을 때 1이된다.
$$\gamma^{task}$$는 전체 ELMo vector에 대해 scaling해주는 부분이다.</p>
</blockquote>
</li>
<li>총 학습된 2L+1개의 representation을 가중합 하여 하나의 임베딩 벡터로 표현한다.
(가중치는 downstream task에 따라 달라진다)</li>
</ul>
<h3 id="bilm요약">biLM(요약)</h3>
<h4 id="forward-language-model--backward-language-model">forward language model + backward language model</h4>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/916d6e3e-58cd-4e10-aaa5-f9ae8e639fca/image.png" alt=""></p>
<ol>
<li>각 layer의 hidden vector를 concat한다</li>
<li>concat한 각 hidden vector에 가중치를 곱한다</li>
</ol>
<p>-&gt; 가중치를 곱하는 이유는 각 층마다 학습하는 것이 다르다.
    lower LSTM layer는 기본적인 syntax와 같은 것을 학습하고 higher LSTM layer는 조금 더 복잡한 문맥과 같은 것을 학습한다.
3. 구해진 해당 벡터들을 합하여 최종 embedding vector로 사용한다.</p>
<h2 id="evaluation">Evaluation</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/6419c0b4-e1f7-40a3-acc0-67876dda7a3c/image.png" alt=""></p>
<ul>
<li>다양한 downstream task에 대해 모두 성능 향상을 보였다.
<img src="https://velog.velcdn.com/images/muk-jjang/post/c40f0547-a272-4055-b79d-17c3b5f22892/image.png" alt=""></li>
<li>$$\lambda$$의 값을 작게 하는 것이 성능이 좋았다</li>
</ul>
<h2 id="analysis">Analysis</h2>
<h3 id="alternate-layer-weighting-schemes">Alternate layer weighting schemes</h3>
<p>layer를 어떻게 가중합을 하면 좋을까?
<img src="https://velog.velcdn.com/images/muk-jjang/post/f7d12251-28e2-4838-b226-e041b97c0711/image.png" alt="">
순위</p>
<ol>
<li>task에 맞게 가중합을 하는 것</li>
<li>단순 평균 내는 것</li>
<li>LSTM 최종 layer의 hidden vector을 쓰는 것</li>
<li>input으로 들어가는 word embedding을 쓰는 것</li>
</ol>
<h3 id="where-to-include-elmo">where to include ELMo?</h3>
<p>downstream task에 대해서 ELMo를 어디에 쓸 것인가?
<img src="https://velog.velcdn.com/images/muk-jjang/post/8c3877be-60a1-4cd5-b325-db28daa17960/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/96762ed0-c4dc-440a-90bc-c79f2c81d7f5/image.png" alt=""></p>
<p>일반적인 성능 비교</p>
<ol>
<li>Input에 ELMo를 결합하고, hidden layer을 통과한 결과값에 ELMo를 결합하여 output을 출력하는게 가장 성능이 좋았다.</li>
<li>Input에 ELMo를 결합하고 hidden layer을 통과 후 바로 ouput을 출력하는 것이 성능이 좋았다.</li>
<li>Input을 hidden layer을 통과 시키고 나온 결과에 ELMo를 결합한 것이 성능이 좋았다</li>
<li>ELMo를 붙이지 않은 것이 가장 성능이 안 좋았다.</li>
</ol>
<p>위 실험을 보면 task에 따라 input에만 붙이는 것이 성능이 더 좋은 경우도 있었다.</p>
<p>출처:<a href="https://www.youtube.com/watch?v=zV8kIUwH32M&amp;t=504s">https://www.youtube.com/watch?v=zV8kIUwH32M&amp;t=504s</a></p>
<h3 id="sample-efficiency">Sample efficiency</h3>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/7901a11d-ab8a-4253-bff8-99cee5292e6a/image.png" alt=""></p>
<ul>
<li>ELMo를 사용하는 것이 학습속도가 빨랐다.</li>
<li>적은 데이터 셋에 대해 효율적으로 학습한다.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<ul>
<li>깊은 문맥의존 representations 학습하는 일반적인 방법을 제시하였다.</li>
<li>다양한 NLP task에 성능 향상을 만들었다.</li>
<li>biLM 계층이 문맥 내 단어들에 대한 다른 유형의 구문 및 의미 정보를 효율적으로 인코딩하고, 모든 계층 사용 시 전반적인 작업 향상을 보였다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[논문리뷰] Long Short-Term Memory Recurrent Neural Network Architectures
for Large Scale Acoustic Modeling]]></title>
            <link>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Long-Short-Term-Memory-Recurrent-Neural-Network-Architecturesfor-Large-Scale-Acoustic-Modeling</link>
            <guid>https://velog.io/@muk-jjang/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Long-Short-Term-Memory-Recurrent-Neural-Network-Architecturesfor-Large-Scale-Acoustic-Modeling</guid>
            <pubDate>Sun, 28 Jan 2024 11:30:32 GMT</pubDate>
            <description><![CDATA[<h1 id="abstract">Abstract</h1>
<h4 id="1--lstm은-rnn-계열의-모델중-하나로-기존-rnn보다-temporal-sequences-long-range-depedency에서-성능을-개선했다">1.  LSTM은 RNN 계열의 모델중 하나로 기존 RNN보다 temporal sequences, long-range depedency에서 성능을 개선했다.</h4>
<ul>
<li>temporal sequences: 시간에 따라 변하는 데이터의 순서
 ex) 음성신호, 동영상 프레임, 주식 가격 등등 시간적 순서를 가진 데이터<ul>
<li>long-range dependecies: 데이터 포인트간의 시간적으로 멀리 떨어져 있는 관계</li>
</ul>
</li>
</ul>
<h4 id="2-asgdasynchronous-stochastic-gradient-descent를-이용한-분산학습-사용">2. ASGD(Asynchronous Stochastic Gradient descent)를 이용한 분산학습 사용</h4>
<h4 id="3-2개-이상의-깊은-lstm층에서-linear-recurrent-projection-layer를-추가하여-파라미터-상에서-연산량을-줄일-수-있다">3. 2개 이상의 깊은 LSTM층에서 linear recurrent projection layer를 추가하여, 파라미터 상에서 연산량을 줄일 수 있다.</h4>
<h4 id="해당-논문은-acoustic-speech-recognition을-위해-모델링-하였다">해당 논문은 acoustic speech recognition을 위해 모델링 하였다.</h4>
<h1 id="1-introduction">1. Introduction</h1>
<h4 id="1-speech는-복잡한-시간-단위마다-다른-상관관계가-있는-복잡한-데이터이다">1. speech는 복잡한 시간 단위마다 다른 상관관계가 있는 복잡한 데이터이다.</h4>
<ul>
<li>예를 들어 &quot;안녕하세요, 오늘 날씨가 정말 좋네요. 어떻게 지내셨어요?&quot;라는 대화에서는 처음 인사와 날씨 소개는 비교적 짧은 시간 동안 이뤄지지만, 전체적인 대화의 맥락은 더 긴 시간 동안 이뤄진다. 처음 안녕하세요를 말하는 시간이 1초 총 문장을 말하는 시간이 3초라고 하면 1초보다 작거나 같은 시간동안엔 큰 의미를 가지지 않는 음소의 나열이다. 하지만 총 3초의 스케일동안 이를 관찰해보면 이 대화가 어떤 의미를 가지고 있는지 알 수 있다. 이처럼 음성은 각각 다른 시간 스케일에서 정보를 전달한다.</li>
</ul>
<h4 id="2-기존-dnn-모델이-speech에서-높은-성능을-보였는데-실제론-이런-speech-데이터를-올바르게-모델링하는데-한계가-있다">2. 기존 DNN 모델이 speech에서 높은 성능을 보였는데, 실제론 이런 speech 데이터를 올바르게 모델링하는데 한계가 있다.</h4>
<ul>
<li>DNN 모델은 고정된 window를 받으므로 speech의 time scale을 모두 커버하긴 어렵다.</li>
<li>DNN 모델은 input 값들이 독립적으로 들어오기 때문에 이전 time step의 정보를 고려하기가 어렵다.</li>
</ul>
<h4 id="3-rnn-계열의-모델들은-이전-time-step-내부-state에-저장되어-현-time-step에도-영향을-주기-때문에-이전-정보들을-고려한다-특히-lstm은-일반-rnn의-long-range-dependency-문제를-장기-기억-cell-state를-통해-일부-완화한다">3. RNN 계열의 모델들은 이전 time step 내부 state에 저장되어 현 time step에도 영향을 주기 때문에 이전 정보들을 고려한다. 특히 LSTM은 일반 RNN의 long-range dependency 문제를 장기 기억 cell state를 통해 일부 완화한다.</h4>
<h1 id="2-lstm-network-architectures">2. LSTM Network Architectures</h1>
<h2 id="21-conventional-lstm">2.1 Conventional LSTM</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/ae3884fd-be1d-4444-95cf-ca0fd39a517c/image.png" alt=""></p>
<ul>
<li>Cell state 추가</li>
<li><blockquote>
<p>과거의 정보들을 가지고 있는 기억장치라고 생각하면 편하다</p>
</blockquote>
</li>
<li>Input gate, Forget gate 등을 통해 Cell state를 관리한다
→ Input gate는 이전 output값과 이번 step의 input값에 각각 가중치곱 후 시그모이드 함수를 통과시켜 이전 output값의 정보를 얼마나 cell state에 넣을지 결정한다
→ Forget gate는 이전 output값과 이번 step의 input값에 각각 가중치곱 후 시그모이드 함수를 통과시켜 이전의 cell state 값을 얼마나 잊을지 결정한다</li>
</ul>
<p>[Modern LSTM]
<img src="https://velog.velcdn.com/images/muk-jjang/post/d6a730d2-dd0b-40dd-80bf-b7dd5abdd227/image.png" alt="Modern LSTM"></p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/b169eaea-9908-40a2-964b-b9380c6a917e/image.png" alt=""></p>
<ul>
<li>요즘의 LSTM은 Peephole Connections을 도입한다.
→ Peephole Connections는 LSTM memory block의 각 셀에서 gate로 향하는 연결을 의미한다.
기존 LSTM은 gate에서 output, 현재의 input만을 입력으로 받았다. 하지만 Peephole Connection은 이전 Cell state를 gate에 사용함으로써 더 많은 맥락을 고려할 수 있게 해주었다.</li>
</ul>
<h2 id="22-deep-lstm">2.2 Deep LSTM</h2>
<p>기존의 LSTM 또한 같은 파라미터를 공유하는 feed-forward 신경망으로 간주할 수 있지만 해당 논문에서는 부가적인 의미를 갖는다. </p>
<ul>
<li><p>다양한 Time scales에서의 학습이 가능하다.
→ 각 레이어는 입력 시퀀스의 정보를 처리하여, 레이어가 깊어질수록 다양한 시간에서 패턴이나 종속성을 파악할 수 있다</p>
</li>
<li><p>파라미터 효율 및 분포
→ 심층 구조에서는 파라미터가 여러 레이어에 분산되어 있으며, 각 레이어는 특정 특징이나 표현을 학습한다. </p>
</li>
<li><blockquote>
<p>단일 구조의 LSTM에서는 output을 출력할 때만 비선형 함수를 통과한다. 하지만 레이어가 여러 층으로 쌓일 경우 비선형성이 증가하여 더 다양한 표현을 학습가능하다. 
ex) 음성 처리에서 하위 층은 단순한 음향 특징을 학습하고, 상위 층은 이러한 특징들을 조합하여 단어나 문맥을 이해한다</p>
</blockquote>
</li>
<li><p>단일 레이어 LSTM: 한 명의 학생이 모든 음악 정보를 한 번에 다 이해하고 처리. 아주 단조로운 음악이라면 가능할 수도 있겠지만 일반적인 음악에서 모든 정보를 파악하기는 쉽지 않다.</p>
</li>
<li><p>깊은 레이어 LSTM: 여러 학생들이 각자 분야를 맡아서 합작한다. 예를 들어 한 명은 음악의 구조를 이해하고, 다른 한 명은 음향적인 부분을 이해하고 여러 분야로 나눠 이해한다.</p>
</li>
</ul>
<h3 id="→-각-레이어가-특정-측면을-담당하기-때문에-전체적으로-파라미터를-더-효율적으로-사용할-수-있다">→ 각 레이어가 특정 측면을 담당하기 때문에, 전체적으로 파라미터를 더 효율적으로 사용할 수 있다.</h3>
<h2 id="23-lstmp-lstm-with-recurrent-projection-layer">2.3 LSTMP-LSTM with Recurrent Projection Layer</h2>
<h4 id="1-기존-lstm-구조는-층을-여러개-쌓았을-때-computationally-complexity가-높아진다">1. 기존 LSTM 구조는 층을 여러개 쌓았을 때 computationally complexity가 높아진다.</h4>
<p>-&gt;각 층은 독립적인 weight 및 bias를 가지고 있다. 따라서 층을 쌓을수록 가중치 및 편향의 수가 기하급수적으로 증가하게 된다.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/5857d337-0dd6-44a1-9fea-cd9f1c470a8b/image.png" alt="">  <img src="https://velog.velcdn.com/images/muk-jjang/post/22cab3b3-008c-4d25-90d3-ac3e251ffd30/image.png" alt=""></p>
<h4 id="2-계산-복잡도를-완화하기-위해-해당-논문에서는-recurrent-projection-layer를-lstm-layer의-input-앞에-배치한다">2. 계산 복잡도를 완화하기 위해 해당 논문에서는 recurrent projection layer를 LSTM layer의 input 앞에 배치한다.</h4>
<p>→ 일종의 작은 임베딩 차원의 수를 한번에 많이 줄임으로써 계산 복잡도를 줄임
ex) 기존에 임베딩 후 input에 넣는 값이 1000차원이었다면, 임베딩 후 projection layer를 넣어줌으로써 1000보다 더 작은 차원으로 줄임.</p>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/949ee6ef-d7a8-4e41-a097-3e3cc4dbdac7/image.png" alt=""></p>
<h2 id="24-deep-lstmp">2.4 Deep LSTMP</h2>
<p>→ LSTM을 여러층으로 쌓은 것과 같이 LSTMP를 여러층으로 쌓은 것이다</p>
<h2 id="3-distributedtrainingscalingupto-large-models-with-parallelization">3. DistributedTraining:Scalingupto Large Models with Parallelization</h2>
<h2 id=""></h2>
<ul>
<li>다중 CPU환경에서 구현됐음. 학습에는 truncated backpropagation through time(BPTT) learning algorithm를 사용하여 계산하고 고정시간(T)에 대해 activation을 forward propagate 하였음</li>
<li>각 말(utterance)에 대한 마지막 subsequence는 T보다 짧을 수 있지만, full length로 채워 학습한다.</li>
</ul>
<h2 id="4-experiments">4. Experiments</h2>
<p><img src="https://velog.velcdn.com/images/muk-jjang/post/a62256b0-eec8-446d-98cd-7a457b750bc8/image.png" alt=""></p>
<h2 id="5result">5.Result</h2>
<h4 id="1-성능-비교-table-1">1. <strong>성능 비교 (Table 1):</strong></h4>
<pre><code>- 단일 층의 일반적인 LSTM RNN은 대규모 음향 모델링 작업에서 성능이 좋지 않음.
- 두 층의 LSTM RNN으로 성능 향상, 그러나 여전히 제한적.
- 다섯 층의 LSTM RNN은 최고 성능에 가까워짐.
- 일곱 층의 LSTM RNN 훈련이 어려움, 수렴에 시간이 많이 걸림.
- 단일 층 및 많은 메모리 셀을 가진 LSTMP RNN은 훈련 데이터에 오버피팅되는 경향이 있음.
- 더 많은 층을 사용하는 LSTMP RNN은 메모리화 문제를 완화하고 테스트 데이터에 더 좋은 일반화를 보임.
- LSTMP RNN 모델은 5층의 LSTM RNN 모델보다 성능이 조금 더 우수.</code></pre><h4 id="프레임-정확도-비교-figure-3"><strong>프레임 정확도 비교 (Figure 3):</strong></h4>
<pre><code>- LSTMP RNN 아키텍처의 메모리 셀 수가 많을수록 훈련 데이터에 대한 오버피팅 문제가 뚜렷하게 나타남.
- LSTMP RNN 아키텍처는 LSTM RNN 아키텍처보다 빠르게 수렴함.
- 더 많은 층을 가지는 것이 일반화에 도움이 되지만 훈련이 어려워지고 수렴이 더 느려짐.</code></pre><h4 id="깊은-lstmp-rnn-아키텍처-성능-table-2"><strong>깊은 LSTMP RNN 아키텍처 성능 (Table 2):</strong></h4>
<pre><code>- 13M보다 많은 파라미터를 가진 LSTMP RNN 아키텍처는 성능 향상이 없음.
- 파라미터 수를 크게 줄여도 성능에 큰 영향을 미치지 않음.
- 2층으로 구성된 깊은 LSTMP RNN 아키텍처는 48시간 안에 대부분 수렴하며 독립적인 테스트 세트에서 10.9%의 WER을 제공. 100시간 훈련으로 WER을 10.7%로 개선하고, 200시간 훈련으로 10.5%로 개선.
- 85M 파라미터를 가진 DNN 모델은 11.3%의 WER을 제공하지만, 같은 빔에서 훈련은 몇 주 걸림.</code></pre><p><img src="https://velog.velcdn.com/images/muk-jjang/post/3e1f3a5f-8d4f-4407-b463-327b84e558d3/image.png" alt=""></p>
<h2 id="4-conclusion">4. Conclusion</h2>
<h2 id="-1"></h2>
<ol>
<li><strong>Deep LSTM RNN 아키텍처의 우수성:</strong><ul>
<li>깊은 LSTM RNN 아키텍처가 대규모 음향 모델링 작업에서 최고 수준의 성능을 달성함을 보여줌.</li>
</ul>
</li>
<li><strong>Deep LSTMP RNN 아키텍처의 향상된 성능:</strong><ul>
<li>제안된 깊은 LSTMP RNN 아키텍처가 표준 LSTM 네트워크 및 DNN보다 우수한 성능을 보임.</li>
<li>모델 파라미터를 더 효과적으로 사용하여 대규모 네트워크를 훈련하기 위한 계산 효율성에 대응함.</li>
</ul>
</li>
<li><strong>ASGD 분산 훈련의 빠른 LSTM RNN 모델 학습:</strong><ul>
<li>ASGD (Asynchronous Stochastic Gradient Descent) 분산 훈련을 사용하여 LSTM RNN 모델을 빠르게 훈련할 수 있음을 처음으로 보여줌.</li>
</ul>
</li>
</ol>
]]></description>
        </item>
    </channel>
</rss>