<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>tajan_boy.log</title>
        <link>https://velog.io/</link>
        <description>슷-타트업하는 개발자 :)</description>
        <lastBuildDate>Sun, 16 May 2021 09:57:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>tajan_boy.log</title>
            <url>https://images.velog.io/images/tajan_boy/profile/b4683136-5796-4d98-99c3-e800cf4d76f2/social.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. tajan_boy.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/tajan_boy" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Computer Vision] MLP-Mixer: An all-MLP Architecture for Vision]]></title>
            <link>https://velog.io/@tajan_boy/Computer-Vision-MLP-Mixer-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@tajan_boy/Computer-Vision-MLP-Mixer-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sun, 16 May 2021 09:57:19 GMT</pubDate>
            <description><![CDATA[<p>2021.5.4일 Google Research 에서 MLP-Mixer: An all-MLP Architecture for Vision 이라는 이름으로 Paper 가 나왔다.</p>
<h4 id="arxiv-link--httpsarxivorgabs210501601">arXiv link : <a href="https://arxiv.org/abs/2105.01601">https://arxiv.org/abs/2105.01601</a></h4>
<p>지금까지 Deep-learning 이라 하면 CNN의 convolutional network 가 기본이 되었고, 최근 ViT(Vision Transformer)의 self-attention 방식의 convolutional 한 부분이 제거가 되어도 충분한 성능이 나온다는 결과가 나오면서 인기가 많다. BERT, GPT-3 등 NLP 영역에서 ViT 가 적용된 최신 레포들이 쏟아져나오고 있는 시점에서 Image Processing 에서도 ViT 를 적용한 논문들이 나오고 있고 이번에 소개할 MLP-Mixer 모델에서 attention 필요 없이 다층 퍼셉트론 MLP(Multi Layer Perceptron) 만으로도 SOTA에 가까운 성능이 나온다는 결과가 나왔다.</p>
<hr/>

<p>Paper 리뷰에 들어가기 전 한 가지 짚고 가면,
CNN 모델을 보면 Convolution layer 를 형성하나, ViT와 본 MLP-Mixer 는 fully connected layer 를 형성하는데 이 차이는 layer 간 곱해지는 가중치 값이 공유되어지냐의 차이이다. 즉, Convolution layer 는 Weight가 공유되어 locally 한 특성을 보이고 fully- connected layer(Dense Layer) 는 독립적인 Weight 특성에 따라 Global한 특성을 보인다.</p>
<p>그럼 본 Paper를 요약하면,</p>
<blockquote>
<p>두 가지 타입의 Layer
    1. token-mixing MLP (across patches (i.e. &quot;mixing&quot; spatial information))
    2. channel-mixing MLP (independently to image patches (i.e. &quot;mixing&quot; the per-location features))</p>
</blockquote>
<p>의 두 가지 타입의 레이어 층들로 구현이 되어있다.</p>
<hr/>

<p><img src="https://images.velog.io/images/tajan_boy/post/b95d7844-8d3f-4848-8c28-9ce496af0552/MLP-mixer.jpg" alt=""></p>
<p>위의 아키텍쳐를 보면 MLP-Mixer 는 per-patch linear embeddings 과정을 거치고 각 patch 별로 Mixer Layer 에 들어간다.(여기서 Mixer Layer 는 2개의 동일 MLP 모델로 학습된다) 그리고 Classifier 가 존재하게 되는데, Mixer 레이어들은 위에 언급한 하나의 token-mixing MLP 와 하나의 channel-mixing MLP 로 구성되어있고 2개의 fully-conneted layers 들과 비선형 활성화함수인 GELU가 적용된다.</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/4e2ab14f-cdb8-4910-9139-d201c135a614/%EC%8B%9D1.png" alt=""></p>
<p><img src="https://images.velog.io/images/tajan_boy/post/ac181c26-d647-40fa-8a31-06c335386f1c/%EC%8B%9D2.jpg" alt=""></p>
<p>2차원 입력인 patch의 개수(S)와 해당 패치의 벡터 길이(C:hidden dimension)으로 input 이 설정되고 token-mixing MLP block 은 X의 행 특성끼리 공유되고, channel-mixing MLP block 은 X의 열 특성끼리 공유된다. 이는 위와 같은 식으로 연산이 이루어진다.
(시그마는 GELU 활성화함수이다)</p>
<p>NLP 에서 단어들별로, 토큰별로 임베딩해서 벡터화하는 작업을 하듯, 이미지도 패치별로 짤라서 작업할 수 있지 않을까 하는 발상에서 나왔고, 그러다 보니 position-embedding 이 필요하다고 생각할 수 있다. 그러나 ViT 모델에서는 postion-embedding 이 필요한 반면, MLP-Mixer 에서는 position-embedding 이 필요없다. 그 이유는 token mixing 을 할 때 이미지 패치별 특성 위치 그대로 layer 계층에 입력되기 때문에 위치 정보가 반영되기 때문이다.</p>
<p>전체적으로 보면, 복잡도 면에서도 ViT 모델은 quadratic 한 것에 비해 Mixer 모델은 input patch 수에 따라 계산 복잡도가 결정되기 때문에 linear 하다고 한다. 그 외 구체적인 내용들은 논문을 참고하면 좋을 것 같다. </p>
<hr/>

<p>MLP-Mixer 모델의 퍼포먼스는 데이터셋 스케일별로 pre-trained 진행했으며 세 가지 부분에서 성능을 측정했다고 한다.</p>
<ol>
<li>다운스트림 작업에 대한 정확도</li>
<li>pre-trained 할 때 소요된 계산 비용</li>
<li>추론할 때의 처리량</li>
</ol>
<p>여기에서 목표는 SOTA 결과를 증명하는 것이 아닌, 간단한 MLP 기반의 모델이 CNN, ViT 모델과 견줄만하다는 것을 보여주는 것이라고 한다.</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/2026f41a-7476-4954-830d-a59e0e36fe61/%ED%91%9C1.jpg" alt=""></p>
<p>larger scale 에서 높은 퍼포먼스에 도달하기 위해 JFT-300M 데이터셋을 중복 학습시켰다고 한다. (JFT-300M 을 pre-trained 해야만 가능한건가 싶다는 생각이 들었다. ViT 모델도 inductive bias 가 적은 대신 거대한 양의 데이터셋이 필요하듯 MLP-Mixer 또한 그러한 맥락이 아닐까 하는 생각이 들었다.) </p>
<p><img src="https://images.velog.io/images/tajan_boy/post/daf059e2-1d00-4c70-bede-ee200f352b60/%ED%91%9C2.jpg" alt=""></p>
<p>pink 점은 MLP-based Mixer model, yellow 점은 convolution-based model, blue 점은 attention-based model 이다.
보면 알겠지만, pre-trained JFT-300M 이 되어야 비교적 높은 퍼포먼스를 보인다.</p>
<hr/>

<p>밑의 그래프들은 SOTA 모델들 과의 비교 분석 결과이다.</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/72ff4ba3-6a41-429e-9829-9de0341321a6/%EB%A7%88%EC%A7%80%EB%A7%891.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/tajan_boy/post/0db73a48-913a-4597-94ed-8722cb6fe5c9/%EB%A7%88%EC%A7%80%EB%A7%892.jpg" alt=""></p>
<p><img src="https://images.velog.io/images/tajan_boy/post/3ca5e06f-91d4-4786-bac3-3859714f47a2/%EB%A7%88%EC%A7%80%EB%A7%893.jpg" alt=""></p>
<hr/>

<p>이렇듯, MLP-Mixer 는 Convolutional layer 도 필요 없고, attention 도 필요 없고 오직 MLP 만으로 딥러닝 네트워크를 구성할 수 있다를 보여준, 흥미로운 Paper라 생각된다. 
그런데 문득 이런 생각이 든다.</p>
<p>token-mixing 은 stride 를 갖는 Convolutional layer 아닌가?</p>
<p>이 부분에 대해 조금 더 공부해봐야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[start-up] 회고. '키맨']]></title>
            <link>https://velog.io/@tajan_boy/start-up-%ED%9A%8C%EA%B3%A0.-%ED%82%A4%EB%A7%A8</link>
            <guid>https://velog.io/@tajan_boy/start-up-%ED%9A%8C%EA%B3%A0.-%ED%82%A4%EB%A7%A8</guid>
            <pubDate>Sun, 16 May 2021 07:14:45 GMT</pubDate>
            <description><![CDATA[<p>한 스타트업의 대표로 활동했던 사람으로서, 2018년 하반기부터 아이템을 디벨롭하고 각종 지원사업 및 투자 미팅을 진행해봤고 여러번의 피벗과 결국엔 군 문제로 대표직을 내려놓고 지금 전역을 3달정도 앞두고 있다.</p>
<p>스타트업 기업이 아니라 공모전 팀이라면 발생하지 않는 지분이라는 개념, 굉장히 민감한 부분이다. 분명 개개인의 기여도가 다를거고 기여도에 따른 지분 책정 방식이라면 각자의 기여도에 대해 인정하고 대표가 적절히 분배하면 사실 무난하게 흘러갈수도 있는 부분이다. </p>
<p>그런데 사실 어느 기업이든 지분 책정 구간에 들어가면 갈등이 생기기 마련이고 최악의 경우에는 팀 해체까지 생길 수 있다.</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/99f8c0a3-f9ce-49f7-8f0b-ba16548b2109/%EC%8A%A4%ED%83%80%ED%8A%B8%EC%97%85.jpg" alt=""></p>
<p>드라마 &#39;스타트업&#39;을 본 적이 있는가? 필자는 굉장히 흥미있게 봤는데 아직 보지 못했다면, 그리고 스타트업에 관심이 있다면 꼭 보길 바란다.</p>
<p>특정 초기창업팀이 정부지원사업이나 투자사로부터 1억 가량 이상의 금액을 받게 되면 해당 스타트업 팀은 법인 등록과 동시에 의사결정자들 간의 지분 구조를 정하게 된다.</p>
<p>대부분의 초기창업자들은 이 팀을 끝까지 유지하자는 의미로 모든 구성원들이 최대한 비슷한 지분으 부여받고 동등해야 으쌰으쌰하며 더 잘하지 않을까 생각한다.</p>
<p>그러나 팀의 존속은 대표라는 작자가 50프로 이상의 지분을 가짐으로써 추후 투자 라운딩을 하며 규모가 커질 때 가능하게 되고 팀원들에 대해서는 주주간 계약서나 스톡옵션 제도를 통해 조직 내 의사결정 구조를 맞춰나간다. 드라마에서도 강한나의 &#39;인재컴퍼니&#39;는 스톡옵션으로 동업자들의 지분을 챙겨준다.</p>
<blockquote>
<p>누가 키맨 인가?</p>
</blockquote>
<p>이 팀에 더 많이 기여한 사람에게 더 많은 지분을 부여하고 앞으로 끝까지 함께할 사람들에게 지분을 높게 책정하는 것이 맞다고 생각할 수 있다. 하지만 &#39;지분&#39;이라는 것은 개개인의 기여도를 수치적으로 나타내는 것이 아닌, 회사가 의사결정을 할 때 누가 이 팀에서 &#39;키맨&#39; 인가를 보여주는 것이다. 절대로 각자의 기여도에 따른 금전적인 수치가 아니다. 당연한 말이지만 본인의 스타트업에 관심이 많고 그만큼 열정을 쏟아부었으면 그렇게 결정하기란 쉽지 않다.</p>
<p>이를 팀원에게 잘 얘기하고 이끌어나갈 수 있는 역량을 갖춘 사람이 진정한 대표가 아닐까?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Computer Vision] GELU]]></title>
            <link>https://velog.io/@tajan_boy/Computer-Vision-GELU</link>
            <guid>https://velog.io/@tajan_boy/Computer-Vision-GELU</guid>
            <pubDate>Sun, 16 May 2021 06:41:46 GMT</pubDate>
            <description><![CDATA[<p>Deep-learning 신경망 모델에서 각 Layer 간 중요 특성들을 반영하여 다음 레이어에 전달한다. 뉴럴 네트워크에서 층을 쌓는다는 의미는 비선형 함수를 활성화 함수(Activation Function)로 사용함으로써, 딥러닝 네트워크의 레이어 층(hidden layer)을 깊게 가져갈 수 있다. </p>
<blockquote>
<p>선형함수인 h(x)=cx를 활성화함수로 사용한 3층 네트워크를 떠올려 보세요.
이를 식으로 나타내면 y(x)=h(h(h(x)))가 됩니다. 이는 실은 y(x)=ax와 똑같은 식입니다. a=c3이라고만 하면 끝이죠. 즉, 은닉층이 없는 네트워크로 표현할 수 있습니다. 뉴럴네트워크에서 층을 쌓는 혜택을 얻고 싶다면 활성화함수로는 반드시 비선형 함수를 사용해야 합니다. - &#39;밑바닥부터 시작하는 딥러닝&#39;</p>
</blockquote>
<p>쉽게 생각해서, 모든 데이터들이 선형적으로 분포하여 XOR 문제를 모두 풀 수 있다면 비선형함수를 떠올릴 필요가 없다. Activation Function 개념도 필요 없다고 볼 수 있다. 그러나 비정형 데이터들의 특성들을 축출해서 활용하려면 비선형 함수가 필요하고 Sigmoid, tanh, ReLU, LeakyReLU, Maxout, ELU 등등이 활성화함수로 많이 사용된다.</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/11eb95f1-e917-48fb-8acf-e8a34b820c16/activation%20functions.jpg" alt=""></p>
<p>그런데 그 중에서도 GELU(Gaussian Error Linear Unit) 활성화함수에 대해 알아보자. </p>
<p>GELU는 NLP 분야에서의 BERT, ROBERTa, ALBERT 등 최신 딥러닝 모델에서 굉장히 많이 사용되고 있고, 특히 Computer Vision 분야에서 CNN 모델은 지금껏 de-facto standard 였으나 최근 self-attention 기반의 Vision Transformer(ViT)가 SOTA 퍼포먼스를 달성하면서 BERT, GPT-3에서 활용되고, 특히 2021년 5월초에 Google Research에서 발표한 MLP-Mixer 모델에서는 ViT의 self-attention 이 아닌 MLP(Multilayer Perceptron)만 사용해서 SOTA 까지는 아니지만 비교 해볼만한 성능이 나왔다.</p>
<p>(필자는 이번 MLP-Mixer 모델이 computer vision 분야에서 시사하는 바가 크다고 생각한다. 물론 JFT-300M pretrained 해야 성능이 높아진다만 매우 흥미로웠다. 곧 MLP-Mixer와 관련된 내용을 velog 에 올리려야겠다.)</p>
<p>이 모든 최신 모델에서 모두 활성화함수로 GELU가 사용되고 있고, 해당 활성화 함수는 무엇일까?</p>
<pre><code>## Google Bert
def gelu(x):
    &quot;&quot;&quot;Gaussian Error Linear Unit.
    This is a smoother version of the RELU.
    Original paper: https://arxiv.org/abs/1606.08415
    Args:
        x: float Tensor to perform activation.
    Returns:
        `x` with the GELU activation applied.
    &quot;&quot;&quot;
    cdf = 0.5 * (1.0 + tf.tanh(
        (np.sqrt(2 / np.pi) * (x + 0.044715 * tf.pow(x, 3)))))
    return x * cdf

## OpenAI GPT-2
def gelu(x):
    return 0.5*x*(1+tf.tanh(np.sqrt(2/np.pi)*(x+0.044715*tf.pow(x, 3))))</code></pre><p>이런 형태이다. </p>
<p><img src="https://images.velog.io/images/tajan_boy/post/ec576626-720d-4313-a225-fbcc752964e8/gelu.jpg" alt=""></p>
<p>초기 신경망에서는 이진법 단위를 활용해서 Sigmoid 함수에 의해 평준화 되었으나, 네트워크가 깊어짐에 따라 입력 부호에 기초한 게이트를 결정되는 특징 때문에 RELU가 인기 있는 활성화함수가 되었다. </p>
<p><img src="https://images.velog.io/images/tajan_boy/post/1f5ef030-1f0d-43d8-96ba-d7896343b589/gelu%20%EC%8B%9D.jpg" alt=""></p>
<p>이후 Hendrycks and Gimpel에 의해 GELU가 제안되었는데, 네트워크가 깊어질수록 adaptive dropout 형태로, 입력치에 가중치를 부여하여 zoneout 되는 형태로 보여진다.</p>
<p>마치 더 깔끔한 RELU가 GELU랄까..?</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/45e1f4b1-c342-43f4-ac51-afb7c333d974/gelu%20%EB%B9%84%EA%B5%90.jpg" alt=""></p>
<p>여러 결과들을 보면 GELU가 RELU, ELU 등의 타 활성화 함수들보다 빠르게 수렴, 낮은 오차를 보여준다. </p>
<p>최신 논문에서도 GELU를 사용하는 것 보면, 당분간은 활성화함수로 GELU를 사용하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Competition] USC-Hackathon ]]></title>
            <link>https://velog.io/@tajan_boy/competition-USC-Hackathon</link>
            <guid>https://velog.io/@tajan_boy/competition-USC-Hackathon</guid>
            <pubDate>Sat, 15 May 2021 07:11:09 GMT</pubDate>
            <description><![CDATA[<p>이 게시글이 나의 첫 velog 게시글이다! 지금까지 진행했던 스타트업, 프로젝트, 해커톤들이 있는데 뭔가 정리가 잘 안되는(?) 느낌이 들어서 이번 게시글을 시작으로 프로젝트, 해커톤, 스타트업 성과(혹은 경험담), Paper Review 등으로 섹션을 나눠서 진행하고자 한다. :)</p>
<hr/>

<p>2019년 6월~7월 동안, University of Southern California 에서 진행하는 AI-based Data Science Program 에 참여했다. Python 기반의 머신러닝, 딥러닝 학습을 위한 데이터 전처리 방법에 대해 배우고 프로젝트를 진행하면서, 마지막에는 USA Open Data 를 활용해서 괄목할만한(?) 성과물을 내는 Hackathon 을 진행했고 &#39;Honorable Mention Title&#39; Prize 를 수상했다.</p>
<h5 id="github--httpsgithubcomusc-hackertonmetro-bike">Github : <a href="https://github.com/usc-hackerton/Metro-Bike">https://github.com/usc-hackerton/Metro-Bike</a></h5>
<blockquote>
<p>&quot;Efficient Station Configuration and Management, verifying adequateness of bike station&#39;s location through Data Visualization of LA Metro Bike&quot; </p>
</blockquote>
<p>주제는 위와 같다! 
약 2달에 걸쳐 미국 서부에서 거주하면서 실리콘밸리 스타트업들도 방문하고 맛있는 것도 먹으러 다니면서 택시보다는 버스, 자전거를 애용했는데 특히 공용 자전거를 많이 탔다. 그런데 공용 자전거 보관소 위치가 너무 제멋대로라 유동인구가 없는 곳에 자전거 보관소가 있지를 않나, 유동인구가 많은 LA 도심 한복판에는 자전거 보관소에 비치되어있는 자전거 양은 한없이 적고...
여기에 불편함을 느꼈고, 해커톤 주제로 정했다.</p>
<p>정리하면!</p>
<p>LA 에서 제공되는 공공 데이터들 중 Metro Bike 들이 지정된 장소에서 빌려가고, 반납하는 정도가 효율적인지, 제대로 순환이 되지 않아 불필요한 station 은 없는지 검증하기 위해 HTML, Python 언어 및 Tableau, mapbox, pandas 를 활용했다.
이를 통해 
LA Metro Bike 의 station 별 데이터들을 활용한 시각화를 통해 현 시스템의 보완점 제시, 효율적인 station 의 제안을 해냈다.</p>
<hr/>

<h4 id="🤭-활용한-데이터셋-웹사이트">🤭 활용한 데이터셋 웹사이트</h4>
<blockquote>
<p>LA Open Data Website
LA Metro Bike Website</p>
</blockquote>
<p>여기에 보면 일자별, 시간대별로 공용 자전거 보관소 위치에 비치된 자전거 수들이 몇년치 저장되어있고 실시간으로 LA Metro Bike Website 에 들어가면 비치된 자전거 수의 현황을 확인해볼 수 있다. </p>
<p>단계는 다음과 같이 세분화 했다.</p>
<h4 id="step-1-evaluation-and-suggestion-of-efficiency-of-metro-bike-stations-introduction-stage">Step 1. Evaluation and Suggestion of Efficiency of Metro Bike Stations (Introduction Stage)</h4>
<p><img src="https://images.velog.io/images/tajan_boy/post/994a90b6-a0e5-4a78-ba84-c4ab2a9f5c2f/usc2.png" alt=""></p>
<p>공용 자전거 보관소를 (자전거 반환+1)/(전체 자전거+2) 로 비율을 정하고 데이터 전처리한 후 heatmap 으로 구현했다. </p>
<h4 id="step-2-visualization-and-suggestion-based-on-the-bike-stations-for-service-development-stage">Step 2. Visualization and Suggestion based on the Bike Stations for Service (Development Stage)</h4>
<p><img src="https://images.velog.io/images/tajan_boy/post/ba9309ec-0fa8-4d77-b6d3-52111e446a14/usc3.jpg" alt=""></p>
<p>LA 공용 자전거를 시각화 하기 위해 수치상 부적절하다고 판단되는 자전거 보관소의 철거를 제안하고 트래픽양이 많은 지점에 자전거 정류장을 설치하도록 제안한다.</p>
<h4 id="step-3-presentation-of-service-based-on-visualization-information-service-stage">Step 3. Presentation of service based on visualization information (Service Stage)</h4>
<p>최종적으로 자전거 보관소 위치를 추천해주는데, 서비스 Demo는 이렇게 보여진다!</p>
<p><img src="https://images.velog.io/images/tajan_boy/post/7ed3c2a3-595f-41c5-87cf-6f123b4ac424/USC%20Hackathon.gif" alt=""></p>
<hr/>

<p>처음 쓰는 velog라 정리가 깔끔했는지 모르겠다 ㅠ
지금까지 진행한 프로젝트들 및 타 개발 이슈들도 올려야겠다 :)</p>
]]></description>
        </item>
    </channel>
</rss>