<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PaperCat</title>
    <description>Deep Learning, Machine Learing Studying site with Papers, Projects, ETC. Using Korean as Primary Language</description>
    <link>http://paper-cat.github.io/papercat/</link>
    <atom:link href="http://paper-cat.github.io/papercat/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 30 Mar 2026 00:25:17 +0000</pubDate>
    <lastBuildDate>Mon, 30 Mar 2026 00:25:17 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>BERT보다 CNN? 논문 리뷰, Are Pre-trained Convolutions Better than Pre-trained Transformers? - ACL 2021</title>
        <description>&lt;h1 id=&quot;bert보다-cnn-논문-리뷰-are-pre-trained-convolutions-better-than-pre-trained-transformers---acl-2021&quot;&gt;BERT보다 CNN? 논문 리뷰. Are Pre-trained Convolutions Better than Pre-trained Transformers? - ACL 2021&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;읽기-전에&quot;&gt;읽기 전에&lt;/h2&gt;

&lt;p&gt;ACL 2021에서 Google 이 발표한 논문이다.&lt;/p&gt;

&lt;p&gt;현재 자연어 관련  Task 는 Transformers의 Encoder, Decoder를 이용한 Architecture 를 가지는 Pre-Trained Language Model이 독식하고 있는 상황이다. 개인적으로 CNN의 성능이 좋은 경우를 많이 확인하기도 했고, BERT 유형의 모델이 유행하는 시기이다 보니 논문 제목이 유독 눈에 띄어 읽어 보았다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2105.03322&quot;&gt;https://arxiv.org/abs/2105.03322 논문 링크&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;/h2&gt;

&lt;p&gt;현재 Pre-trained Transformers는 사실상 우선적으로, 필수적으로 사용되는 모델이다. 반면 Pre-Trained CNN은 거의 사용되지 않는다. 이런 상황에서 이 Paper에서는 CNN이 Transformers보다 좋은 성능을 낼 수 있는지 8가지 Dataset/Task 에 대해 실험한다. 그리고 실험 결과 CNN이 여러 측면에서 경쟁력 있음을 볼 수 있었다고 한다.&lt;/p&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;현재 Pre-Training 은 Transformers 구조의 모델들과 뗄수 없는 관계라고 보고 있다. (BERT, RoBERTa, T5등) 현재 Transformers 구조가 아닌 Pre-Training 모델은 거의 존재하지 않는다. 이 내용은 NLP에 국한된 의견이라고 볼 수 있다.&lt;/p&gt;

&lt;p&gt;Contextual Representation 학습의 역사는 오래되었다 (2014년 부터). 하지만 근래의 Pre-Trained Language model은 Recurrent 형태를 가지는 Elmo (2018년) 부터 시작되었다. 이런 연구 시작 기간의 차이때문에 Pre-Training Convolution 모델에 대한 연구는 많이 않은것 같다. 또한 이 논문에서 말하듯, NLP 영역에서는 이미 Transformers의 성능이 최고로 여겨지고 있기 때문에 그 외의 모델에 대한 연구는 거의 이루어 지지 않은것으로 보인다.&lt;/p&gt;

&lt;p&gt;하지만 최근의 몇몇 연구는 Convolution model의 가능성을 입증하고, Transformers 같은 Self-Attention 구조의 필요성에 의문을 보이고 있다고 한다. 한 논문(Wu et al., 2019)에서는 Convolution Seq2Seq 모델이 몇몇 부분에서 Transformers 의 성능을 앞선다고 주장했다. 따라서, Transformers가 아닌 다른 모델들의 Pre-Training 방식을 고려해 보아야 한다고 주장한다.&lt;/p&gt;

&lt;p&gt;실제로 Convolution Model 에는 몇 가지 분명한 장점이 있다.&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Self-Attention과 다르게 엄청난 Memory Complexity의 영향을 받지 않는다.&lt;/li&gt;
  &lt;li&gt;Local 하게 작동하기 때문에, Positional Encoding의 영향을 받지 않는다. 이는 여러 문장을 사용하는 경우 Global Information을 얻지 못하기 때문에 단점이 되는 경우도 있다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;사용된-pre-trained-convolution-models&quot;&gt;사용된 Pre-Trained Convolution Models&lt;/h2&gt;

&lt;p&gt;이 논문의 실험에서는 가장 좋다고 생각되는 LightWeight Convolutions, Dynamic Convolutions (Pay Less Attention with Lightweight and Dynamic Convolutions 에서 소개됨), Dilated Convolutions를 사용하였다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/1901.10430&quot;&gt;Pay Less Attention with Lightweight and Dynamic Convolutions 논문 링크&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper3_1.jpg&quot; alt=&quot;LightConv&quot; /&gt;&lt;/p&gt;

&lt;p&gt;위 논문에서의 LightWeight Convolutions, Dynamic Convolutions를 간단히 소개하면&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;LightConv는 위의 논문에서 제안한 모델이다. Output channel 을 공유하고, weights 를 sharing하고,  softmax 를 사용해 normalize 하여 사용하는 depthwise conv (각각의 채널을 독립적으로 Convolve 하는 Conv모델) 모델이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Dynamic Convloutions은 위의 그림처럼 time-step dependent kernel을 사용하는 conv 모델이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;마지막으로 Dilated Convolutions는 이 논문에 소개되지는 않았다. 이 모델은 일단적인 Convolution의 커널 사이에 간격을 주는 방식을 사용하는 모델이다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;research-questions-rq&quot;&gt;Research Questions (RQ)&lt;/h2&gt;

&lt;p&gt;실제 실험을 진행하기 전에, 연구 측면에서 확인해볼 아래와 같은 5가지 Research Question을 만들었다고 한다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Convolution 이 Transformers 처럼 Pre-Training의 이점을 얻는지&lt;/li&gt;
  &lt;li&gt;Convolution 모델들이 Transformers 과 비교하여 경쟁력이 있는지 (Pre-Train을 포함하는 경우와 하지 않는 경우 모두)&lt;/li&gt;
  &lt;li&gt;Pre-Trained Convolution이 Pre-Trained Transformers에 비해 가지는 장점은 무었인지&lt;/li&gt;
  &lt;li&gt;Pre-Trained Convolution이 효과적이지 않은 경우는 언제인지&lt;/li&gt;
  &lt;li&gt;여러개의 Convolution 모델 중, 가장 좋은 모델이 존재하는지&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;experiments-results&quot;&gt;Experiments, Results&lt;/h2&gt;

&lt;p&gt;이 논문의 실험에서 사용된 Dataset은 다음과 같다&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper3_2.png&quot; alt=&quot;Datasets&quot; /&gt;&lt;/p&gt;

&lt;p&gt;여러 Dataset에 대한 실험 결과는 다음과 같다&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper3_3.png&quot; alt=&quot;Results&quot; /&gt;&lt;/p&gt;

&lt;p&gt;결과에서 볼 수 있듯이, 대부분의 경우에 Convolution이 좋은 성능을 보였다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper3_4.jpg&quot; alt=&quot;time&quot; /&gt;&lt;/p&gt;

&lt;p&gt;학습 속도와, 학습 Operations 숫자는 위와 같은 모습을 보였다.&lt;/p&gt;

&lt;p&gt;추가적인 결과로, Cross Attention이 없기 때문에 2문장 이상을 사용해야 하는 Task 에는 부적절한 성능을 보였다. SQuAD같은 경우 Transformers 는 약 90의 F1 score를 보이는데, Convolution은 70정도의 성능만 보였다. 하지만 Convolution에 딱 한개의 Cross Attention Encoder만 추가해도 Transformers와 유사한 성능을 보였다.&lt;/p&gt;

&lt;p&gt;이러한 결과를 통해 위의 Research Question들에 답을 하면,&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Pre-Training 의 장점은 Transformers에 국한된 것이 아니다.&lt;/li&gt;
  &lt;li&gt;Convolution이 더 좋은 성능을 보였다.&lt;/li&gt;
  &lt;li&gt;Convolution이 더 빠른 학습을 보였고, 필요한 학습 machine성능도 더 낮았다.&lt;/li&gt;
  &lt;li&gt;SQuAD 와 같은, 2개 이상의 문장을 사용하는 Task 의 경우 낮은 성능을 보였다.&lt;/li&gt;
  &lt;li&gt;Dilated, Dynamic Conv가 LightWeight보다 더 좋은 성능을 보였다.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;결론&quot;&gt;결론&lt;/h2&gt;

&lt;p&gt;Convolution 모델들이 Transformers 보다 Pre-Train의 유무에 관계 없이 더 좋은 성능을 낼 수 있었다. 더욱이 속도등에서도 더 좋은 경우가 많았다. 아직 Pre-Trained Convolution Language Model 의 연구가 부족하기에 앞으로 연구 가능성이 많다.&lt;/p&gt;

&lt;p&gt;또한, Pre-Trained 방식의 연구과 Architecture의 연구는 독립적으로 고려되어야 한다.&lt;/p&gt;

&lt;h2 id=&quot;읽은-후기&quot;&gt;읽은 후기&lt;/h2&gt;

&lt;p&gt;NLP 영역에서 Convolution을 사용한 모델이 이렇게 좋은 성능을 낼 수 있을 것이라고는 생각하지 못했다. 실제로 NLP에 사용해본 Convolution 모델은 Yoon Kim의 CNN모델이나 Recurrent 와 함께 Convolution을 사용한것 이었고, Convolution만을 사용한 더 복잡한 모델은 사용할 생각을 하지 못했던 것 같다.&lt;/p&gt;

&lt;p&gt;언제부터인가 NLP Task가 주어지면 BERT, BART 먼저 테스트 해보는게 당연한것으로 생각하곤 했다. 아마 여러 Attention 모델들이 압도적인 성능을 보여줬기 때문인것 같다. 하지만 이 논문에서 말하는 것처럼 Pre-Training과 Model Architecture는 분리해서 성능 판단을 해야 할것 같다. 또, 현재 Transformer 에 너무 국한되지 않고 여러가지를 시도해보는 것도 필요하다고 느껴졌다.&lt;/p&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot;&gt;
&lt;/script&gt;

</description>
        <pubDate>Sun, 12 Jun 2022 00:00:00 +0000</pubDate>
        <link>http://paper-cat.github.io/papercat/2022-06/paper3</link>
        <guid isPermaLink="true">http://paper-cat.github.io/papercat/2022-06/paper3</guid>
        
        
        <category>paper</category>
        
      </item>
    
      <item>
        <title>CRAFT by Naver - Text Detection From Image, 조금 더 단순한 방법으로</title>
        <description>&lt;h1 id=&quot;craft---text-detection-by-naver&quot;&gt;CRAFT - Text Detection by Naver&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;기본-소개&quot;&gt;기본 소개&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/paper-cat/CRAFT-detection&quot;&gt;프로젝트 링크&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;이 프로젝트에서 구현하고 있는 모델은 Naver 에서 Text Detection 방식으로 제안한  CRAFT 입니다. 사실 Image Classification 만 몇가지 다뤄보고, Image Detection에 대해 공부를 많이 하지는 않아서 yolo, FastRCnn 등의 방식이 있고 어떤 식으로 작동하는지 정도만 읽어보고 구현해본 적이 없어 애매하게 아는 상태입니다. 그래도 CRAFT 논문을 읽어 보니 단적으로 나마 구현할 수 있을것 같아 시작했습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/clovaai/CRAFT-pytorch&quot;&gt;Naver의 Craft 프로젝트 링크&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;기본적으로 네이버 클로버 팀은 pytorch 로 구현하였고, 학습 코드는 공개하지 않았습니다. 따라서 제 모델에는 다른점도 꽤 있고, 제가 임의로 간소화 시킨 부분도 있어서 많이 다릅니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-label-data-생성-방식&quot;&gt;1. Label Data 생성 방식&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/project/2/1.jpg&quot; alt=&quot;Score Map Image&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;craft-방식&quot;&gt;Craft 방식&lt;/h3&gt;

&lt;p&gt;우선 CRAFT는 Label 데이터를 만들때 캐릭터 별로 Character Box 를 만들고, 그 안에 Gaussian map 을 넣습니다. 이를 Region Score GT 라고 합니다.&lt;/p&gt;

&lt;p&gt;다음으로는, 한 단어에서 각 character 까리 연결을 해줍니다. 각 캐릭터의 중점들을 이용하여 연결하는 box를 만드는데 이를 Affinity Box 라고 하고, 그 안에 역시 Gaussian Map 을 넣어 Affinity Score GT 를 생성합니다.&lt;/p&gt;

&lt;h3 id=&quot;구현한-방식&quot;&gt;구현한 방식&lt;/h3&gt;

&lt;p&gt;CRAFT 는 이 두개의 Score Map 이 Label이 되고, 이 Map 을 가지고 단어들의 위치를 파악합니다. 여기서 저는 간단하게 구현하기 위해 우선 Region Map만 사용하여  Character 의 위치를 찾기로 했습니다. 사용할 데이터가 비교적 많이 기울어진 데이터가 아니여서 가능하다고 생각했습니다.&lt;/p&gt;

&lt;p&gt;그리고 Character Box도 기울어지지 않은 직사각형을 사용하기로 했습니다. 주로 img label 때 사용하는 프로그램이 직사각형으로 labeling 하기 편하게 되어 있기 때문입니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-modeling&quot;&gt;2. Modeling&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;../assets/post_img/project/2/2.jpg&quot; alt=&quot;Model Architecture&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;craft-방식-1&quot;&gt;Craft 방식&lt;/h3&gt;

&lt;p&gt;입력값으로 이미지를 받고, label 로 region, affinity map 을 갖는 모델을 사용하는데, 이 모델을 VGG16 과 U-Net 를 합친 것과 유사한 형태를 갖습니다.&lt;/p&gt;

&lt;p&gt;왼쪽이 특성을 뽑아내는 부분이 VGG16, 나머지 부분이 Upsampling 을 통해 원하는 map을 뽑아내는 U-Net 과 유사한 방식입니다.&lt;/p&gt;

&lt;h3 id=&quot;구현한-방식-1&quot;&gt;구현한 방식&lt;/h3&gt;

&lt;p&gt;위의 모델과 거의 똑같은 모델일 것이라고 생각합니다. 단지 Regional map만 사용할것이기 때문에 마지막 output 부분에 1개의 map 만 나오게 했습니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-loss-function&quot;&gt;3. Loss Function&lt;/h2&gt;

&lt;h3 id=&quot;craft-방식-2&quot;&gt;Craft 방식&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;../assets/post_img/project/2/3.jpg&quot; alt=&quot;Loss Formula&quot; /&gt;&lt;/p&gt;

&lt;p&gt;위의 식에서 S_c(p) 부분은 Pixel-Wise confidence 라고 하는데,  각 픽셀에서 Word 부분이 맞는지 confidence 를 계산해서 사용하는데, 인조적으로 제작한 데이터의 경우 그냥 1을 사용한다고 합니다.&lt;/p&gt;

&lt;p&gt;나머지 부분은, 각 픽셀에서의 Regional Score, Affinity Score의 정답과의 유클리드 오차 합을 계산한 것 입니다.&lt;/p&gt;

&lt;h3 id=&quot;구현한-방식-2&quot;&gt;구현한 방식&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;../assets/post_img/project/2/4.jpg&quot; alt=&quot;Loss function&quot; /&gt;&lt;/p&gt;

&lt;p&gt;위의 식과 똑같은 방식을 사용했지만, Regional Score 만 사용하는 경우를 상정해서 Affinity Score 의 오차는 제외하고 계산하는 loss function 을 작성했습니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;word-box&quot;&gt;Word Box&lt;/h2&gt;

&lt;h3 id=&quot;craft-방식-3&quot;&gt;Craft 방식&lt;/h3&gt;

&lt;p&gt;결과로 나온 Affinity score, Regional Score를 가지고 character box를 그리고, 그에 맞는 affinirty score 를 이용해 한개의 단어로 연결해 줍니다.&lt;/p&gt;

&lt;h3 id=&quot;구현한-방식-3&quot;&gt;구현한 방식&lt;/h3&gt;

&lt;p&gt;위와 같은 방법을 사용하기 어려워, character box만 그려줬습니다. Regional score 맵에서 일정 값 이상을 갖는 pixel들을 찾은뒤, 그 주변에서 가장 높은 값을 갖는 pixel 위치를 찾습니다. 거기서부터 사방의 score 를 확인하고, 감소하는 구간이 끝나는 곳까지를 그 character 의 영역으로 결정하고 box를 그렸습니다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;구현-리뷰&quot;&gt;구현 리뷰&lt;/h2&gt;

&lt;p&gt;일단 각 단어와 character 에 맞는 기울어진 Box를 그려준다는것 자체가 어려운 일이고, 너무 오랜 시간이 걸릴것 같아 주어진 데이터와 만들기 쉬운 데이터 방식으로 사용할 수 있게 구현해 보았습니다. 실제로 너무 달라붙어 있는 단어가 아니면 꽤 잘 검출해내는것을 확인했습니다.&lt;/p&gt;

&lt;p&gt;논문 마지막에 End-to-End 방식으로 단어 값까지 검출해내는 방식을 도전하겠다고 해놓았는데, 아마 검출한뒤 classification 부분을 모델 자체에 포함시킬 예정인 것 같습니다.&lt;/p&gt;

&lt;p&gt;Image Detection 에 지식이 많지 않아 구현하는데 어려움이 조금 있었지만, 다른 모델들 보다 비교적 직관적인 Text Detection 모델이였다고 생각합니다.&lt;/p&gt;

&lt;p&gt;앞으로 Affinity Score Map 을 이용한 예측 모델도 계속 구현해 볼 예정입니다.&lt;/p&gt;

&lt;p&gt;감사합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/paper-cat/CRAFT-detection&quot;&gt;프로젝트 링크&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate>
        <link>http://paper-cat.github.io/papercat/2020-10/project2</link>
        <guid isPermaLink="true">http://paper-cat.github.io/papercat/2020-10/project2</guid>
        
        
        <category>project</category>
        
      </item>
    
      <item>
        <title>논문 리뷰, NLP : Character-level Convolutional Networks for Text Classification, 2016</title>
        <description>&lt;h1 id=&quot;character-level-cnn-paper-review&quot;&gt;Character level CNN Paper review&lt;/h1&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;기본-소개&quot;&gt;기본 소개&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/1509.01626&quot;&gt;https://arxiv.org/abs/1509.01626 논문 링크&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;현재 2424회 인용된 논문입니다.&lt;/p&gt;

&lt;p&gt;자연어 처리의 대부분의 Task 는 단어 기반으로 되어 있습니다. 2016년 당시에도 word2vec 같이 대부분의 연구가 word 기반으로 이루어졌습니다. 
이 논문에서는, 여러 convolutional network 기반 연구가 많음에 기반해 character 단위의 Text Classification 모델을 연구해 제안합니다.&lt;/p&gt;

&lt;h2 id=&quot;character-level-convolutional-network&quot;&gt;Character-level convolutional Network&lt;/h2&gt;

&lt;h3 id=&quot;key-module&quot;&gt;Key Module&lt;/h3&gt;

&lt;p&gt;Convolution Layer 를 key module 로 사용하고 있다고 설명합니다. (자세한 내용은 수식으로 되어 있는데)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper2_1.png&quot; alt=&quot;conv수식&quot; /&gt;&lt;/p&gt;

&lt;p&gt;\(c\) : offset constant (padding)&lt;/p&gt;

&lt;p&gt;\(d\) : depth&lt;/p&gt;

&lt;p&gt;\(f_{ij}(x)\) : kernel function (weights) (i=1,2,….,m, j = 1,2,….n)&lt;/p&gt;

&lt;p&gt;\(g_{i}\) : input features with m input feature size&lt;/p&gt;

&lt;p&gt;\(h_{j}\) : output features with n output feature size&lt;/p&gt;

&lt;p&gt;\(h_{j}(y)\) : output by sum over i between \(g_{i}(x), f_{ij}(x)\)&lt;/p&gt;

&lt;p&gt;복잡하게 써놨지만, 일반적인 convolutional layer 와 같습니다.&lt;/p&gt;

&lt;p&gt;또 다른 key module 로 max pooling 을 언급합니다. Max pooling 덕분에 6개 이상의 깊은 모델을 학습할 수 있다고 합니다.&lt;/p&gt;

&lt;p&gt;이외에 Relu 를 사용했고, optimizer 로 SGD 를, batch size 128 등등을 사용했다고 합니다.&lt;/p&gt;

&lt;h3 id=&quot;character-quantization&quot;&gt;Character Quantization&lt;/h3&gt;

&lt;p&gt;Input 으로는, encode (one-hot encoding) 된 character 들을 일정 길이 만큼 받아서 학습한다고 합니다. 모르는 character나 빈칸의 경우는 0으로 encoding 합니다.&lt;/p&gt;

&lt;p&gt;알파벳, 숫자, 몇가지의 특수문자들을 다 합쳐서 총 70개의 character 를 사용했다고 합니다. 대문자 소문자의 경우도 후에 실험해서 비교합니다.&lt;/p&gt;

&lt;h3 id=&quot;model-design&quot;&gt;Model Design&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper2_2.png&quot; alt=&quot;model&quot; /&gt;&lt;/p&gt;

&lt;p&gt;70개의 character 를 사용했기 때문에 features 의 개수는 70개가 됩니다. 그리고 한 문장의 길이를 1014 로 고정했는데, 이정도면 대부분의 문장의 의미를 담을 수 있기 때문이라고 합니다.&lt;/p&gt;

&lt;p&gt;마지막 3개의 Fully connected layer 사이에 2개의 Dropout 을 넣어 Regularize 했습니다.&lt;/p&gt;

&lt;p&gt;각 Convolution layer 와 Fully Connected Layer의 Feature 수는 아래와 같습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper2_3.png&quot; alt=&quot;cnn_units&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper2_4.png&quot; alt=&quot;dense_units&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;data-augmentation-using-thesaurus&quot;&gt;Data Augmentation using Thesaurus&lt;/h3&gt;

&lt;p&gt;Data Augmentation 은 대부분의 Deep Learning 에 중요한 부분이다. 이 연구에서는 Data Augmentation 을 위해서 Thesaurus 라는 동의어 사전을 사용해서 문장의 단어들을 동의어로 변경한 뒤에 학습을 시켰다고 합니다.&lt;/p&gt;

&lt;p&gt;Text 분야에서 Data Augmentation 은 방법이 많지도 않고 효과적인 방법이 거의 없어서 개인적으로는 잘 사용하지 않는다… 근데 찾아보다 보니 Text Augmentation에 관한 방법에 대한 논문들이 있어서 나중에 공부해서 다루도록 하겠습니다.&lt;/p&gt;

&lt;h2 id=&quot;result&quot;&gt;Result&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper2_5.png&quot; alt=&quot;result&quot; /&gt;&lt;/p&gt;

&lt;p&gt;모델, 데이터셋 별로 Error 비율을 나타낸 표입니다.&lt;/p&gt;

&lt;h3 id=&quot;결론&quot;&gt;결론&lt;/h3&gt;

&lt;p&gt;Character level CNN 방법이 몇몇의 데이터셋에 대해 효과적인 방법인걸 알 수 있습니다. 하지만 데이터 셋의 크기등의 factor 에 의존적인 부분이 꽤 크다고 합니다.&lt;/p&gt;

&lt;p&gt;현재에는 Bert 등의 고성능 방법이 많이 나왔지만, 그럼에도 CNN 을 Bert 에 결합해서 사용하기도 하고, 아니면 CNN를 단독적으로 빠른 학습과 예측을 위해서 사용하기도 합니다.&lt;/p&gt;

&lt;p&gt;이 논문도 제 프로젝트에 구현되어 있습니다.
&lt;a href=&quot;https://github.com/paper-cat/Text-Classifications&quot;&gt;프로젝트 링크&lt;/a&gt;&lt;/p&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&quot;&gt;
&lt;/script&gt;

</description>
        <pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate>
        <link>http://paper-cat.github.io/papercat/2020-08/paper2</link>
        <guid isPermaLink="true">http://paper-cat.github.io/papercat/2020-08/paper2</guid>
        
        
        <category>paper</category>
        
      </item>
    
      <item>
        <title>논문 리뷰, NLP : Convolutional neural networks for sentence classification, 2014</title>
        <description>&lt;h2 id=&quot;yoon-kim-paper-review&quot;&gt;Yoon Kim Paper review&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;기본-소개&quot;&gt;기본 소개&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/1408.5882&quot;&gt;https://arxiv.org/abs/1408.5882&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2014년에 Yoon Kim 이라는 한국분이 쓰신 논문입니다.&lt;/p&gt;

&lt;p&gt;현재 무려 8180회 인용된 굉장히 유명한 논문입니다.&lt;/p&gt;

&lt;p&gt;NLP 방법중에 굉장히 가벼운 편에 속하고, 구현하기도 쉽고, 게다가 성능도 꽤 좋은 모델입니다.&lt;/p&gt;

&lt;p&gt;당시 주로 Vision(Image) 처리에 사용되었던 convolution layer 를 nlp 에 접목시켰고, 7개의 실험중에 4가지에서 state of art 성과를 보였다고 합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper1_1.png&quot; alt=&quot;model_architecture&quot; /&gt;&lt;/p&gt;

&lt;p&gt;기본적인 모델 구성입니다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;한 단어를 1개의 vector 로 표현하고, 그 단어들을 연결하면, 한 문장이 2차원의 벡터로 구성됩니다.&lt;/li&gt;
  &lt;li&gt;완성된 문장 벡터에 convolution layer 를 1차원으로 적용해 문장의 feature map 을 얻습니다. 이때 여러 갯수의 filter width 를 사용해 여러개의 feature 맵을 얻습니다.&lt;/li&gt;
  &lt;li&gt;각 Feature map 에서 가장 높은 값을 뽑습니다 (Max Pooling)&lt;/li&gt;
  &lt;li&gt;뽑은 값을 Fully Connected Layer 를 이용하여 결과 값을 얻습니다.
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;regularization-정규화&quot;&gt;Regularization (정규화)&lt;/h3&gt;

&lt;p&gt;끝에서 두번째 layer 에 dropout 을 적용하고, l2 normalization 을 사용합니다.&lt;/p&gt;

&lt;p&gt;지금은 많이 사용되는 기법인데, 당시에는 그렇지 않았는지 논문내에 자세한 설명이 나와 있습니다.
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;여러-실험-모델&quot;&gt;여러 실험 모델&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;CNN-rand : 모두 random initialize 하는 방법&lt;/li&gt;
  &lt;li&gt;CNN-static : word vector 를 pre-trained word2vec 에서 정의된 vector 로 고정하고 사용하는 방법&lt;/li&gt;
  &lt;li&gt;CNN-non-static : pre-trained word2vec 의 값을 쓰는 것은 같지만, 고정시키지 않고 find-tune 되게 사용하는 방법&lt;/li&gt;
  &lt;li&gt;CNN-multichannel : 2,3 을 복합적으로 사용하는 방법.  2개의 채널중 하나는 고정, 하나는 fine tune 하는 방법
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id=&quot;결과-분석&quot;&gt;결과, 분석&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;../assets/post_img/paper/paper1_2.png&quot; alt=&quot;result&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Random Initialize  한 모델은 word2vec 을 사용한 것 보다 결과가 좋지 않았다.&lt;/li&gt;
  &lt;li&gt;Multi channel 을 사용하면 overfitting 을 방지하고 더 좋은 성능을 낼거라고 예상했지만, 한 channel 의 차원을 늘려주는것이 더 좋은 성과를 내고는 했다.&lt;/li&gt;
  &lt;li&gt;Convolution layer 를 겹쳐서 사용해봣지만, 한층의 layer 가 좋은 성능을 보였다
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;정리&quot;&gt;정리&lt;/h3&gt;

&lt;p&gt;꽤 오래된 논문이고, word2vec 을 사용해야 좋은 성능이 나왔다 라고 되어있지만, CNN-rand 모델도 여러 가지 task 에서 충분히 좋은 성능을 냅니다.&lt;/p&gt;

&lt;p&gt;개인적으로 text classification 을 할때 base-line 으로 설정하고 가는 모델이기도 합니다.&lt;/p&gt;

&lt;p&gt;구현하기도 쉽고, 제 깃허브 개인 프로젝트에 구현도 해 놓았으니 한번쯤 읽어보시면 도움이 될것이라고 생각합니다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/paper-cat/Text-Classifications&quot;&gt;Text Classification Project link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;model -&amp;gt; cnn.py 에 구현되어 있습니다.&lt;/p&gt;
</description>
        <pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate>
        <link>http://paper-cat.github.io/papercat/2020-08/paper1</link>
        <guid isPermaLink="true">http://paper-cat.github.io/papercat/2020-08/paper1</guid>
        
        
        <category>paper</category>
        
      </item>
    
      <item>
        <title>Text Classification Project (텍스트 분류 프로젝트)</title>
        <description>&lt;h2 id=&quot;text-classification-proejct&quot;&gt;Text Classification Proejct&lt;/h2&gt;
&lt;p&gt;Text Classification 은 Text 관한 문제중에 가장 기본적인 문제입니다. 복잡하지 않은 모델들도 좋은 성능을 보이는 경우가 많기 때문에 NLP 관련 개념이나 모델들을 공부하기에 좋은 시작점이라고 생각합니다.&lt;/p&gt;

&lt;h2 id=&quot;구현된-모델&quot;&gt;구현된 모델&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3 id=&quot;convolution-network&quot;&gt;Convolution Network&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://paper-cat.github.io/2020-08/paper1&quot;&gt;Convolutional neural networks for sentence classification&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Character-level Convolutional Networks for Text
Classification
&lt;br /&gt;
(아직 paper 설명 없음)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;사용한-데이터셋&quot;&gt;사용한 데이터셋&lt;/h2&gt;
&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/e9t/nsmc&quot;&gt;Naver Sentiment Movie Corpus v1.0&lt;/a&gt;
&lt;br /&gt;
네이버 영화 리뷰 댓글 감정 분석 데이터 입니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.imdb.com/interfaces/&quot;&gt;IMDb Dataset&lt;/a&gt;
&lt;br /&gt;
IMDb의 리뷰 댓글 감정 분석 데이터 입니다(tensorflow dataset 에서 받아 사용합니다.)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
계속 추가해 나갈 예정입니다.&lt;/p&gt;
</description>
        <pubDate>Fri, 14 Aug 2020 00:00:00 +0000</pubDate>
        <link>http://paper-cat.github.io/papercat/2020-08/project1</link>
        <guid isPermaLink="true">http://paper-cat.github.io/papercat/2020-08/project1</guid>
        
        
        <category>project</category>
        
      </item>
    
  </channel>
</rss>