<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>pluto_0905.log</title>
        <link>https://velog.io/</link>
        <description>Real Cryptocurrency Trader &amp; AI Engineer LV.0</description>
        <lastBuildDate>Wed, 18 Mar 2026 23:24:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>pluto_0905.log</title>
            <url>https://velog.velcdn.com/images/pluto_0905/profile/bd7b9bef-cd67-4eed-a531-b6bca7cdafb0/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. pluto_0905.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/pluto_0905" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[UTM]]></title>
            <link>https://velog.io/@pluto_0905/UTM</link>
            <guid>https://velog.io/@pluto_0905/UTM</guid>
            <pubDate>Wed, 18 Mar 2026 23:24:15 GMT</pubDate>
            <description><![CDATA[<h2 id="utmunified-threat-management-통합위협관리">UTM(Unified Threat Management: 통합위협관리)</h2>
<p>과거에는 방화벽, 안티바이러스, 스팸 차단기등 각각 별도의 장비를 구입해야했지만, UTM은 이 <strong>모든 보안 기능을 하나의 HW+SW에 통합한 솔루션</strong> </p>
<h2 id="핵심기능">핵심기능</h2>
<p>방화벽 + IPS(Intrusion Prevention System: 침입방지)+ IDS(Intrusion Detection System: 침입탐지)+ VPN(Virtual Private Network: 암호화된 가상 터널)</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/eab917b7-efbc-48b0-8cf1-e844a8815f59/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프록시와 캐싱]]></title>
            <link>https://velog.io/@pluto_0905/Proxy%EB%9E%80</link>
            <guid>https://velog.io/@pluto_0905/Proxy%EB%9E%80</guid>
            <pubDate>Sun, 14 Sep 2025 23:16:23 GMT</pubDate>
            <description><![CDATA[<h2 id="프록시">프록시</h2>
<blockquote>
<p>프록시(proxy)는 중간에서 대신 연결을 처리해주는 서버나 SW
쉽게 말해, 사용자가 직접 목적지 서버에 연결하지 않고, 프록시 서버를 거쳐서 인터넷이나 네트워크 자원에 접근하는 방식.</p>
</blockquote>
<h2 id="ex">EX</h2>
<p>내가 웹사이트 A에 접속하고 싶을 때 → 내 컴퓨터가 바로 A로 가지 않고, 프록시 서버에 먼저 요청을 보냅니다.
프록시 서버가 대신 A에 접속해서 데이터를 받아오고, → 그 결과를 나한테 전달해 줍니다.</p>
<h2 id="📌-프록시의-주요-기능">📌 프록시의 주요 기능</h2>
<ol>
<li><p>보안/익명성 제공: 실제 IP 주소를 숨기고, 프록시 서버의 IP로 접속하게 만듦.</p>
</li>
<li><p>캐싱(Caching): 자주 요청되는 데이터를 미리 저장해 두었다가 더 빠르게 제공.</p>
</li>
</ol>
<ul>
<li>자주 쓰는 데이터를 미리 저장해두었다가, 필요할 때 더 빨리 꺼내쓰는 방식</li>
<li>ex) 인터넷 브라우저도 내가 자주 들어가는 사이트의 이미지나 파일을 캐시에 저장해 두고 , 다음 접속 때 새로 다운로드하지 않고 캐시에서 꺼내서 보여줌 </li>
</ul>
<blockquote>
<p>*<em>캐시의 장점 *</em></p>
</blockquote>
<ul>
<li>속도 향상 - 원래 저장된 위치(서버,DB,디스크)보다 가까운 곳에서 바로 가져오기에 훨씬 빠름</li>
<li>부하 감소 - 서버나 네트워크에 매번 요청하지 않으니 트래픽 절감</li>
<li>비용 절감 - 자주 쓰이는 데이터에 대해 반복 연산이나 다운로드 줄어듦</li>
</ul>
<ol start="3">
<li><p>접근 제어: 회사나 학교에서 특정 사이트 차단할 때 사용.</p>
</li>
<li><p>트래픽 관리: 네트워크 부하 분산이나 속도 향상.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[삼성기출] 	2023 하반기 오전 1번 문제 - 왕실의 기사대결]]></title>
            <link>https://velog.io/@pluto_0905/%EC%82%BC%EC%84%B1%EA%B8%B0%EC%B6%9C-2023-%ED%95%98%EB%B0%98%EA%B8%B0-%EC%98%A4%EC%A0%84-1%EB%B2%88-%EB%AC%B8%EC%A0%9C-%EC%99%95%EC%8B%A4%EC%9D%98-%EA%B8%B0%EC%82%AC%EB%8C%80%EA%B2%B0</link>
            <guid>https://velog.io/@pluto_0905/%EC%82%BC%EC%84%B1%EA%B8%B0%EC%B6%9C-2023-%ED%95%98%EB%B0%98%EA%B8%B0-%EC%98%A4%EC%A0%84-1%EB%B2%88-%EB%AC%B8%EC%A0%9C-%EC%99%95%EC%8B%A4%EC%9D%98-%EA%B8%B0%EC%82%AC%EB%8C%80%EA%B2%B0</guid>
            <pubDate>Wed, 17 Apr 2024 05:14:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>*<em>기본 시뮬레이션- 격자 이동 
*</em></p>
</blockquote>
<p><a href="https://www.codetree.ai/training-field/frequent-problems/problems/royal-knight-duel/description?page=1&amp;pageSize=20">왕실의 기사대결</a></p>
<h2 id="idea-1">idea 1.</h2>
<p>*<em>dict(key-value) 이용해서 units={1번 기사:[r,c,h,w,k], 2번 기사 :[r,c,h,w,k] ...} 관리
*</em></p>
<h2 id="idea-2">idea 2.</h2>
<p><em>* 격자 바깥 쪽으로도 이동 불가,
arr = [[2]</em>(L+2)] + [[2]+ list(map(int,input().split())) +[2] for _ in range(L)] + [[2]<em>(L+2)] ==&gt; 이런 식으로 애초에 입력 시에 벽으로 감싸버리기 *</em></p>
<h2 id="idea-3">idea 3.</h2>
<p>** q= [] # 밀 기사 후보 설정 + q.pop(0) 이용하여 바로 제거, pset = set()으로 이동 기사 번호 적용(어차피 겹치는 거 없으니 set으로 관리) **</p>
<h2 id="idea-4">idea 4.</h2>
<p>안 겹치는거 &lt;-&gt; 겹치는 거다 라는 생각. </p>
<p>if ni&lt;=ti+th-1 and nj&lt;=tj+tw-1 and ni+ch-1&gt;= ti and nj+cw -1&gt;=tj:
==&gt; 겹치는 것들 구현(첫 번째 명령과 행,열 겹치면 기사 이동 필요하니: q,pset에 append, add로 while q: 반복)</p>
<pre><code>di=[-1,0,1,0] #상,우,하,좌
dj=[0,1,0,-1]


L,N,Q = map(int,input().split()) # 4 3 3
arr = [[2]*(L+2)] + [[2]+ list(map(int,input().split())) +[2] for _ in range(L)] + [[2]*(L+2)]
units ={}
init_k =[0]*(N+1)

for i in range(1,N+1):
    r,c,h,w,k = map(int,input().split())
    units[i]=[r,c,h,w,k] # r:좌측 상단 x좌표 , c: 좌측 하단 y좌표  , h: 높이, w: 너비 , k: 목숨
    init_k[i]=k

def push_units(start,dr):
    q= [] # 밀 기사 후보 , 일단 명령 한 개당 하나 것지, 그리고 무조건 pop() 해줘야겠지
    pset = set() # 이동 기사 번호
    damage = [0] * (N + 1)
    q.append(start)
    pset.add(start) # set은 중복허용 안함. dict도 중괄호 사용하나 key-value 형태

    while q: # q에 원소가 없을 때까지
        cur = q.pop(0) # q.pop(0): q에서 젤 첫번째 원소 제거, q.pop() 가장 마지막 원소제거: 근데 여기선 어차피 한 개 씩만 들어가서 딱히 상관없음.

        ci,cj,ch,cw,ck = units[cur] # 이걸 여기서 재정의한다는 생각을 하기가 쉽지 않음.
        ni, nj = ci + di[dr], cj + dj[dr] # 미리 정의해놓은 거에 대한 움직임(dr) 받아와서 움직임 정의

        for i in range(ni, ni+ch): # 이제 탐색하면서 ==2:벽, ==1:함정 찾아야함. 이제 이해가 됐네 왜 ni+cw가 이나라 ni+ch 인지 ㅠ
            for j in range(nj,nj+cw):
                if arr[i][j]==2: # 벽이라면
                    return
                if arr[i][j]==1: # 함정이라면
                    damage[cur]+=1
        # 겹치는 것들 q, pset에 추가해줘야지
        for idx in units:
            if idx in pset: continue # 이미 밀릴 후보라면 continue

            ti,tj,th,tw,tk = units[idx]
            # 겹치는 녀석들 정의
            if ni&lt;=ti+th-1 and nj&lt;=tj+tw-1 and ni+ch-1&gt;= ti and nj+cw -1&gt;=tj:
                pset.add(idx)
                q.append(idx)

    damage[start]=0 # 명령 받은 기사는 뎀지 안 입음

    # 이제 초기체력 보다 데미지가 큰 녀석들은 삭제 처리 + 이동처리 해줘야지 # 지금은 데미지를 먼저 입고 이동처리 하는 느낌임. (데미지 입은 녀석들은 이동처리를 해야하니깐) 원래는 이동처리하고 데미지 입음
    for idx in pset:

        si,sj,sh,sw,sk = units[idx]

        if sk&lt;= damage[idx]:
            units.pop(idx)
        else:
            ni,nj = si + di[dr], sj+dj[dr]
            units[idx]=[ni,nj,sh,sw,sk-damage[idx]]

for _ in range(Q):
    idx, dr = map(int,input().split())
    #if idx in units: --&gt; 이거 차이로 런타임 에러 발생 ! 
    push_units(idx,dr)

ans = 0

for idx in units:
    ans += (init_k[idx]- units[idx][4])
print(ans)
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Data-Centric AI] Data-Centric AI란?]]></title>
            <link>https://velog.io/@pluto_0905/Data-Centric-AI-Data-Centric-AI%EB%9E%80</link>
            <guid>https://velog.io/@pluto_0905/Data-Centric-AI-Data-Centric-AI%EB%9E%80</guid>
            <pubDate>Tue, 02 Apr 2024 04:39:11 GMT</pubDate>
            <description><![CDATA[<h1 id="01-data-centric-ai란">01 Data-Centric AI란?</h1>
<h2 id="11-데이터의-중요성">1.1 데이터의 중요성</h2>
<p>*<em>AI 시스템을 이루는 두 가지 요소
*</em></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/e862d86f-f107-4df3-af6c-8474558ad4cb/image.png" alt=""></p>
<blockquote>
<p><strong>양쪽 모두 개선 필요(데이터 품질이 좋을 땐: 모델 개선효과가 더 중요 &lt;-&gt; 데이터 품질 안좋을 땐: 데이터 개선이 더 중요)</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/ca5f443d-d116-48b9-9147-dce4ae67ce1f/image.png" alt=""></p>
<p><strong>Why?</strong></p>
<p>*<em>데이터는 곧 모델을 학습하는 데에 필요한 재료
*</em></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/70e85c94-e812-44c5-a4f9-5a948e8f3447/image.png" alt=""></p>
<p><strong>But</strong></p>
<p>동일한 데이터에 대해 서로 다른 어노테이션/라벨을 다는 경우가 발생 ⇒ 노이즈 발생 
예시1) 철판 결함 예측 (39 classes) - Class 23 : Foreign particle defect</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/bc65a64f-69b8-4a1c-90f5-4dcda0139308/image.png" alt=""></p>
<h3 id="ai-프로젝트에서-데이터가-차지하는-비중">AI 프로젝트에서 데이터가 차지하는 비중</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/895b5811-b166-42e9-87b6-d2790a3ec704/image.png" alt=""></p>
<h2 id="12-data-centric-ai의-정의">1.2 Data-Centric AI의 정의</h2>
<h3 id="model-centric-ai">Model-Centric AI</h3>
<blockquote>
<p>과거 그리고 지금도 여전히 가장 주로 사용되는 AI 접근 방식으로, 개발 및 운용의 관점에서 <strong>모델을 중심</strong>으로 접근하는 방식</p>
</blockquote>
<h3 id="data-centric-ai">Data-Centric AI</h3>
<blockquote>
<p>2020년대에 들어서 주목받기 시작한 AI 접근 방식으로, 개발 및 운용의 관점에서 <strong>데이터를 중심</strong>으로 접근하는 방식</p>
</blockquote>
<h3 id="model-centric-ai-vs-data-centric-ai">Model-Centric AI vs. Data-Centric AI</h3>
<p>코드를 개선하면 Model-Centric AI, 데이터를 개선하면 Data-Centric AI라고 이해할 수 있음</p>
<ul>
<li>Model-Centric AI<ul>
<li>최대한 많은 데이터를 확보한 뒤, 이러한 데이터의 노이즈에 대응할 수 있는 모델을 개발</li>
<li>데이터를 고정시킨 상태로 알고리즘/모델을 반복적으로 개선해나감</li>
</ul>
</li>
<li>Data-Centric AI<ul>
<li>데이터의 통일성(consistency)를 위해 다양한 도구를 이용하여 체계적으로 데이터의 품질을 향상</li>
<li>코드를 고정시킨 상태로 데이터를 반복적으로 개선해나감</li>
</ul>
</li>
</ul>
<h3 id="ai-서비스-개발-과정">AI 서비스 개발 과정</h3>
<p>실제 서비스 개발 과정에서는 Data-Centric AI, Model-Centric AI 중 무엇이 더 중요할까</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d88eb959-8db2-4b44-88bc-c36484dd92c8/image.png" alt=""></p>
<h3 id="ai-서비스-개발-과정---서비스-출시-전">AI 서비스 개발 과정 - 서비스 출시 전</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d0268541-d5f4-49ce-8944-e29a16a76eb7/image.png" alt=""></p>
<h3 id="ai-서비스-개발-과정---서비스-출시-후">AI 서비스 개발 과정 - 서비스 출시 후</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/b8ca1f58-7530-45c8-b1ec-7b19ccbb7f29/image.png" alt=""></p>
<h2 id="13-mlops">1.3 MLOps</h2>
<p>MLOps (Machine Learning Operations) = ML + DevOps </p>
<blockquote>
<p>머신러닝 모델을 안정적이고 효율적으로 배포하고 유지 관리하는 것을 목표로 하는 패러다임 + 데이터셋 구축을 위한 인프라를 만들어 데이터를 체계적이고 효율적으로 관리할 수 있는 시스템이기도 함</p>
</blockquote>
<h1 id="02-data-centric-ai가-산업에-미친-영향">02 Data-Centric AI가 산업에 미친 영향</h1>
<h2 id="21-pretraining--fine-tuning">2.1 Pretraining &amp; Fine-Tuning</h2>
<h3 id="트랜스포머-기반-언어-모델">트랜스포머 기반 언어 모델</h3>
<ul>
<li>트랜스포머의 인코더/디코더 구조를 이용한 언어 모델이 기존의 LSTM 계열을 압도하는 성능을 보이면서, 웬만한 언어 모델은 모두 트랜스포머 계열로 대체되고 NLP 분야의 연구가 활발히 이루어짐</li>
</ul>
<h3 id="거대-언어-모델-large-language-model-llm">거대 언어 모델 (Large Language Model, LLM)</h3>
<ul>
<li>여러 연구를 통해 트랜스포머 계열은 모델 파라미터가 많을수록 더 일반화된 좋은 성능을 가짐을 실증적으로 보임 <ul>
<li>그러나 이를 위해서 많은 데이터와 연산 자원이 필요하며, 일부 초거대 IT기업만이 이를 가능케 함</li>
</ul>
</li>
</ul>
<h3 id="돌파구-찾기--파인튜닝-fine-tuning">돌파구 찾기 ... 파인튜닝 (Fine-Tuning)</h3>
<p>일반적인 기업, 개인, 연구자들은 이렇게 사전학습된 LLM을 자신의 태스크에 맞게 리폼하는 파인튜닝을 통해 언어 모델을 이용함</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5745cad7-42a3-4f0a-8e54-fbddf24a59d8/image.png" alt=""></p>
<h3 id="파인튜닝용-데이터의-확보">파인튜닝용 데이터의 확보</h3>
<p>(사전학습 대비) *<em>소량의 고품질 데이터만 확보하면 *</em>원하는 목적에 맞게 LLM을 파인튜닝할 수 있음</p>
<h3 id="파인튜닝의-현주소--lora-low-rank-adaptation">파인튜닝의 현주소 ... LoRA (Low-Rank Adaptation)</h3>
<ul>
<li>기존의 파인튜닝 기법<ul>
<li>사전 학습 모델의 파라미터를 일부/전부 재학습하거나
추가적인 레이어를 붙인 뒤 이를 학습</li>
</ul>
</li>
<li>LoRA (Low-Rank Adaptation)<ul>
<li>사전 학습 모델을 완전히 고정(freeze)한 채로 낮은 랭크의 쿼리-값 어텐션 행렬을 추가하여 해당 어텐션 행렬만 학습</li>
<li><strong>모델의 크기 및 필요한 데이터 양을 줄일 수 있음</strong></li>
</ul>
</li>
</ul>
<h2 id="22-prompt-engineering">2.2 Prompt Engineering</h2>
<h3 id="prompt-engineering-관련-용어">Prompt Engineering 관련 용어</h3>
<ul>
<li>프롬프트(Prompt) : 인공지능이 수행해야 할 작업을 설명하는 자연어 텍스트<ul>
<li>모델과 최종 사용자 모두가 이해하기 쉽도록 간결하고 명확해야 함</li>
<li>지나치게 복잡한 언어를 사용하거나 불필요한 정보를 제공하면 부정확한 결과가 나올 수 있음</li>
</ul>
</li>
<li>프롬프트 엔지니어링(Prompt Engineering)
: 생성 모델이 이해할 수 있는 형태로 프롬프트(텍스트)를 구조화하는 과정<ul>
<li>text-to-text 및 text-to-image 모델에 주로 사용됨</li>
</ul>
</li>
<li>In-Context Learning
: 모델이 이전에 배운 정보나 컨텍스트를 활용하여 미래의 작업을 수행하거나 이해하는 것<ul>
<li>예) 이전 대화에서 나온 정보나 질문에 대한 답변을 기억하여 활용하는 것</li>
</ul>
</li>
</ul>
<h3 id="gpt-3를-통해-알게-된-사실-1-입력값에-지시문을-포함시키면-그에-맞는-결과를-준다">GPT-3를 통해 알게 된 사실 1) 입력값에 지시문을 포함시키면 그에 맞는 결과를 준다</h3>
<blockquote>
<p><strong>해결하고자 하는 태스크를 텍스트 형태로 입력값에 넣어주면 태스크의 정답에 해당하는 결과를 리턴함</strong></p>
</blockquote>
<p>ex) 1+1= 2인데 16854+ 4864=? </p>
<h3 id="gpt-3를-통해-알게-된-사실-2-지시가-구체적일수록-의도에-가까운-결과를-준다">GPT-3를 통해 알게 된 사실 2) 지시가 구체적일수록 의도에 가까운 결과를 준다</h3>
<p>모델에게 입력값을 구체적으로 지시할수록 더 정확한/의도에 맞는 결과물을 얻을 수 있음 ⇒ <strong>프롬프트 엔지니어링</strong></p>
<h1 id="03-data-centric-ai-관련-연구">03 Data-Centric AI 관련 연구</h1>
<h2 id="31-data-centric-ai-연구-사례">3.1 Data-Centric AI 연구 사례</h2>
<h3 id="이상-탐지-및-제거-anomaly-detection--removal">이상 탐지 및 제거 (Anomaly Detection &amp; Removal)</h3>
<p>일반적이지 않은(abnormal), 혹은 분포로부터 멀리 떨어진(outlier) 데이터 샘플을 탐지하여 제거하는 방법</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f64aaaac-799e-44e3-a338-3b50f92f159e/image.png" alt=""></p>
<h3 id="에러-탐지-및-수정-error-detection--correction">에러 탐지 및 수정 (Error Detection &amp; Correction)</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/24888270-043e-4dfd-bf02-b54cd5777209/image.png" alt=""></p>
<h3 id="데이터-증강-data-augmentation">데이터 증강 (Data Augmentation)</h3>
<p>기존 데이터를 변형하거나 확장하여 데이터 양을 늘리고, 이를 통해 모델의 성능을 향상시키는 방법
(rotate, crop, flip)</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/4664722e-df97-4835-98a2-5e4af62af87b/image.png" alt=""></p>
<h3 id="피쳐-엔지니어링-feature-engineering">피쳐 엔지니어링 (Feature Engineering)</h3>
<p>데이터가 가지고 있는 기존의 피쳐(feature)를 통해 유의미한 새로운 값을 만들어내는 방법</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/ed4824d6-8792-4b7e-bdb9-4ff2087eb06f/image.png" alt=""></p>
<h3 id="컨센서스-라벨링-consensus-labeling">컨센서스 라벨링 (Consensus Labeling)</h3>
<p>다수의 어노테이터 혹은 라벨러로부터 얻은 라벨들 중 합의된 라벨을 생성하는 작업 및 방법론</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/c1e68539-01eb-4f5a-a518-52dd1fd7e21a/image.png" alt=""></p>
<h3 id="액티브-러닝-active-learning">액티브 러닝 (Active Learning)</h3>
<p>모델 학습 과정 중에 가장 질적으로 중요한 데이터 샘플을 점진적으로 선택, 또는 라벨을 요청하여 학습하는 방법</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/97693f25-2d97-4db8-9fe8-5a1ebfe7aa5b/image.png" alt=""></p>
<h3 id="커리큘럼-러닝-curriculum-learning">커리큘럼 러닝 (Curriculum Learning)</h3>
<p>모델이 쉬운 데이터부터 차근차근 학습할 수 있도록 데이터의 학습 순서를 조정하는 방식</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[LM to LLM] 의미기반 언어 지식 표현 체계 이론]]></title>
            <link>https://velog.io/@pluto_0905/LM-to-LLM-%EC%9D%98%EB%AF%B8%EA%B8%B0%EB%B0%98-%EC%96%B8%EC%96%B4-%EC%A7%80%EC%8B%9D-%ED%91%9C%ED%98%84-%EC%B2%B4%EA%B3%84-%EC%9D%B4%EB%A1%A0</link>
            <guid>https://velog.io/@pluto_0905/LM-to-LLM-%EC%9D%98%EB%AF%B8%EA%B8%B0%EB%B0%98-%EC%96%B8%EC%96%B4-%EC%A7%80%EC%8B%9D-%ED%91%9C%ED%98%84-%EC%B2%B4%EA%B3%84-%EC%9D%B4%EB%A1%A0</guid>
            <pubDate>Wed, 27 Mar 2024 08:14:26 GMT</pubDate>
            <description><![CDATA[<h1 id="의미-기반의-언어-지식-표현-체계">의미 기반의 언어 지식 표현 체계</h1>
<h2 id="분포-가설">분포 가설</h2>
<ul>
<li>“단어가 나타나는 주변 맥락이 유사하면, 그 단어들의 뜻도 서로 비슷하다”는 것을 의미</li>
<li>즉, 비슷한 의미를 가진 단어는 주변 단어 분포도 비슷함을 의미</li>
<li>“단어의 의미는 그 단어가 사용되는 맥락에 의해 결정된다”라는
아이디어를 기반으로 단어의 의미를 이해하는 방법론</li>
<li>ex) Tesgüino와 wine이 등장하는 주변 문맥이 비슷하므로, 두 단어는
유사함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/ab0cbe39-cfbd-4d98-bf6d-538966310c46/image.png" alt=""></p>
<h3 id="one-hot-vector">One-Hot Vector</h3>
<ul>
<li><strong>단어의 해당하는 인덱스에 1을, 나머지에 0을 할당하여 이루어진 범주형 벡터 (Discrete vector)</strong></li>
<li>단어의 수가 많을 때 벡터의 차원이 매우 커져 계산 효율이 낮으며, 단어 벡터가 다른 단어간의 유사도를
반영하지 않음</li>
<li>즉, 분포 가설에 기반한 단어의 의미론적 정보를 반영하지 못하는 초기의 방법</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/c39612b8-21a6-4e9e-a0df-6921d2642cac/image.png" alt=""></p>
<h3 id="단어-임베딩-word-embeddings">단어 임베딩 (Word Embeddings)</h3>
<ul>
<li><strong>단어를 고정된 길이의 밀집 벡터(Dense Vector)로 표현하는 기법</strong></li>
<li>단어 벡터가 단어의 의미적, 문법적 특성을 포착할 수 있는 수치적 특성을 가지고 있어, 비슷한 의미를 가진 단어들이 벡터 공간에서 서로 가까이 위치함</li>
<li>&quot;king&quot;과 &quot;queen&quot;의 벡터는 서로 가깝고, &quot;king&quot; - &quot;man&quot; + &quot;woman&quot;
과 같은 벡터 연산이 &quot;queen&quot;에 가까운 결과를 낼 수 있음</li>
</ul>
<ul>
<li><strong>입력된 문장을 임베딩으로 변환하기 위해, 각 단어를 Vocabulary에서 조회하여 해당하는 밀집 벡터(Dense Vector)를 사용</strong></li>
<li>Vocabulary: 단어들의 집합으로, 각 단어는 고유한 인덱스에 매핑되며, 이 인덱스를 사용하여 임베딩 매트릭스에서 해당 단어의 밀집 벡터를 조회하는 룩업 테이블</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/bd295d57-1226-4419-ae83-6aa9479c6bf1/image.png" alt=""></p>
<h2 id="word2vec">Word2Vec</h2>
<ul>
<li><strong>문맥 예측 (Prediction-based) 기반의 단어 벡터 학습 및 표현 방법공존 행렬 (Co-occurrence Matrix) 기반의 단어 벡터 학습 및 표현 방법</strong></li>
<li>Word2Vec은 매개변수가 단어 벡터인 모델로, 특정 목표에 대해 반복적으로 최적화</li>
<li>분포 가설을 바탕으로, 벡터가 문맥에 대해 알면 단어 의미도 알게 됨을 기반으로 함</li>
<li>Word2Vec는 학습 방법에 따라 CBoW와 Skip-Gram로 구분</li>
</ul>
<h3 id="cbow-continuous-bag-of-words">CBow (Continuous Bag of Words)</h3>
<ul>
<li><strong>주변 단어들의 맥락을 통해 중심 단어를 예측하는 방식의 Word2Vec 신경망</strong></li>
<li>주변 단어들의 문맥 벡터를 합치거나 평균내어 중심 단어를 예측하는 확률을 최대화하는
방향으로 학습</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/af365b51-a297-4403-a8d4-a12cd93552d1/image.png" alt=""></p>
<h3 id="skip-gram">Skip-gram</h3>
<ul>
<li><strong>중심 단어로부터 주변 단어들을 예측하는 방식의 Word2Vec 신경망</strong></li>
<li>중심 단어의 분산 표현을 사용하여 그 주변에 등장할 가능성이 있는 단어들의 확률을 최대화
하는 방향으로 학습단어 벡터 학습</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/fc148bce-3ee9-44f7-abc4-facdf2ddc918/image.png" alt=""></p>
<h3 id="word2vec의-문제점">Word2Vec의 문제점</h3>
<p>• Out of Vocabulary(OOV) 문제: 학습 중 만나지 않은 새로운 단어나 합성어에 대해 임베딩을 생성할 수 없음
• 형태학적 유연성 부족: 동일한 어근을 공유하는 단어들 간의 매개변수 공유가 없어, 단어의 내부 구조를 활용하지 못함</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/2b9d054a-57a3-414e-8d51-be741ea0907a/image.png" alt=""></p>
<h2 id="glove">Glove</h2>
<ul>
<li><strong>공존 행렬 (Co-occurrence Matrix)</strong> 기반의 단어 벡터 학습 및 표현 방법</li>
<li>벡터 간의 dot-product가 단어 쌍의 공존 확률의 로그 값과 같아지도록 학습하여, 단어 간 유사성과 차이를 벡터 공간에 인코딩함</li>
<li>Word2Vec과 달리 지역적인 문맥 정보만을 사용하는 것이 아니라, 코퍼스 전체의 통계 정보를 바탕으로 단어 벡터를 학습함</li>
</ul>
<h2 id="fasttext">FastText</h2>
<h3 id="fasttext의-개선-방법">FastText의 개선 방법</h3>
<ul>
<li><p><strong>Subword 단어 분해</strong>: 중심 단어의 임베딩은 n-그램 벡터의 합으로 계산되며, 문맥 단어의 벡터는 n-그램을 추가하지 않고 사용함 (Word2Vec의 Skip-gram 개선)</p>
</li>
<li><p><strong>Negative Sampling</strong>: 실제 문맥 단어 주변에 negative sample을 무작위로 선택하여 임베딩을 최적화</p>
</li>
</ul>
<ul>
<li><strong>문맥 예측 (Prediction-based) 기반으로 서브워드 정보를 포함하는 단어 벡터 학습 및 표현 방법</strong></li>
<li>단어를 n-그램 서브워드로 분해하여 내부 구조를 반영, 벡터를 통해 단어의 형태학적 특성을 학습함</li>
<li>Word2Vec을 확장하여 희귀 단어나 오타에 대한 내성을 강화하고, 보다 풍부한 단어 표현을 제공</li>
</ul>
<h3 id="fasttext-과정">FastText 과정</h3>
<h4 id="1-fasttext의-subword-단어-분해">1) FastText의 Subword 단어 분해</h4>
<ul>
<li>기존 단어 기반의 임베딩을 3-6 grams 으로 분해하여, OOV 및 형태학적 유연성 확보</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/be69bee7-7a6b-453e-bd19-9263fdf01197/image.png" alt=""></p>
<ul>
<li>Hashing 기법을 활용하여, 분해된 n-gram의 메모리 사항을 제한</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/059267d6-6f83-45a9-91d7-3e6fd237a7c6/image.png" alt=""></p>
<h4 id="2-fasttext의-negative-sampling">2) FastText의 Negative Sampling</h4>
<ul>
<li>중심 단어에 대한 임베딩은 문자 n-gram과 전체 단어 자체에 대한 벡터의 합을 취하여 계산</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/0a66e9af-f963-4ee8-90e3-6e737f5eba74/image.png" alt=""></p>
<ul>
<li>문맥에 등장하는 단어들은 n-gram으로 분리하지 않고, 단어 벡터를 가져옴</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/97dac7b2-75ff-42f6-a111-7e6d3ff48287/image.png" alt=""></p>
<ul>
<li>유니그램 빈도의 제곱근에 대한 확률 비율로 Negative Sample을 무작위 수집 (문맥단어 1개당 5개의 Negative Sample 수집)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/da7dd9da-4739-4001-bf09-bdad384ae5c6/image.png" alt=""></p>
<ul>
<li>중심 단어와 문맥 단어 사이의 내적 후 시그모이드를 취하여 0과 1사이의 점수를 얻고, SGD를 통해 실제 문맥 단어를 중심 단어에 더 가깝게, Negative samples을 더 멀게 최적화</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/c9d537eb-15dd-4b2e-9c46-0305c493c399/image.png" alt=""></p>
<h3 id="word2vec-vs-fasttext">Word2Vec VS FastText</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/3a4171a9-44ef-4ad6-9083-ee6f80783e98/image.png" alt=""></p>
<h2 id="doc2vec">Doc2Vec</h2>
<ul>
<li><strong>문맥 예측 (Prediction-based) 기반으로 문서 전체의 벡터를 의미공간에 학습 및 표현하는 방법. 즉, 단어 벡터 혹은 서브워드 벡터가 아닌 문서 벡터 단위의 모델</strong></li>
<li>단어뿐만 아니라 문장, 문단, 전체 문서를 고유한 벡터로 변환하며, 문서의 순서와 구조를 포함한 정보를 학습함</li>
<li>Word2Vec의 확장으로, 문서의 의미를 벡터화하여 문서 간 유사성 측정 및 문서 분류 작업에 활용함</li>
</ul>
<h2 id="cove">CoVe</h2>
<ul>
<li><strong>시퀀스 모델링 (Sequence Modeling) 기반의 단어 벡터 학습 및 표현 방법</strong></li>
<li>사전 훈련된 기계 번역 모델에서 단어의 문맥적 임베딩을 추출하여, 단어가
사용된 문맥을 더 잘 반영함</li>
<li>단어의 고정된 임베딩 대신, 문맥에 따라 변화하는 동적인 단어 벡터를
제공하여 보다 정교한 자연어 이해를 가능하게 함</li>
<li>단어가 각기 다른 문맥에서 등장할 때 그에 따라 달라지는 의미를 포착하여,
문맥에 민감한 단어 벡터를 생성</li>
</ul>
<h3 id="cove의-학습과정">CoVe의 학습과정</h3>
<p>• a) 기계번역 모델 학습: Bi-directional LSTM 구조에 Machine Translation 학습
• b) 다른 NLP Task에 적용: 기계 번역 모델의 인코더 context vector와 GloVe 모델을 활용하여
문맥적 정보를 함축한 벡터를 추출하고, 다른 NLP task에 적용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[LM to LLM] 카운트 기반 언어모델]]></title>
            <link>https://velog.io/@pluto_0905/LM-to-LLM-%EC%B9%B4%EC%9A%B4%ED%8A%B8-%EA%B8%B0%EB%B0%98-%EC%96%B8%EC%96%B4%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@pluto_0905/LM-to-LLM-%EC%B9%B4%EC%9A%B4%ED%8A%B8-%EA%B8%B0%EB%B0%98-%EC%96%B8%EC%96%B4%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Wed, 27 Mar 2024 04:32:51 GMT</pubDate>
            <description><![CDATA[<h1 id="카운트-기반의-단어-표현">카운트 기반의 단어 표현</h1>
<h2 id="단어의-표현-방법">단어의 표현 방법</h2>
<h3 id="국소-표현-vs-분산-표현">국소 표현 vs 분산 표현</h3>
<ul>
<li><p>국소 표현(Local Representation): 해당 단어 그 자체만 보고, 특정 값을 맵핑하여 단어를 표현하는 방법 예) 고양이: 1, 귀여운: 2, 동물: 3</p>
</li>
<li><p>분산 표현(Dense Representation): 그 단어를 표현하고자 주변을 참고하여 단어를 표현하는 방법 예) ‘고양이’ 단어 주변에 ‘귀여운’과 ‘동물’이 자주 등장 =&gt; 고양이는 귀엽다, 동물이다로 인식</p>
</li>
</ul>
<h2 id="bag-of-wordsbow">Bag of Words(BoW)</h2>
<ul>
<li><p>단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법</p>
</li>
<li><p>어휘의 빈도(개수)를 기반으로 통계적 언어 모델을 적용해서 나타낸 것 =&gt; 국소 표현에 해당</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/37fde867-eeae-44c9-9510-94d4def7f456/image.png" alt=""></p>
<h3 id="bag-of-words의-구성-방법">Bag of Words의 구성 방법</h3>
<ul>
<li>1 문서 내 단어별로 고유의 정수 인덱스를 할당하여 단어 집합(Vocabulary) 생성</li>
<li>2 단어별 인덱스에 단어의 출현 빈도를 저장한 BoW 벡터 생성</li>
</ul>
<h3 id="bag-of-words의-특징">Bag of Words의 특징</h3>
<ul>
<li><p>임베딩 벡터의 차원 = 단어의 개수 = 모델의 크기 </p>
<ul>
<li><p>등장하는 단어가 많아질수록 증가</p>
</li>
<li><p>N-gram의 n이 커질수록 증가</p>
</li>
<li><p>단어의 분절이 정확하게 되었을 때 유용</p>
</li>
</ul>
</li>
<li><p>단어의 여러 의미를 반영하지 못함 =&gt; 동음이의어, 다의어에 대한 의미 표현 불가</p>
</li>
</ul>
<p>  <img src="https://velog.velcdn.com/images/pluto_0905/post/ce56f6fe-1460-4ec7-8a1d-d29c570b3301/image.png" alt=""></p>
<h1 id="02-tf-idf">02 TF-IDF</h1>
<h2 id="tf-idf-개요">TF-IDF 개요</h2>
<ul>
<li><p>Term Frequency (TF): <strong>단어의 등장빈도</strong></p>
</li>
<li><p>Inverse Document Frequency (IDF): 단어가 제공하는 <strong>정보의 양</strong></p>
</li>
<li><p>ex) He is the president of UK.
→ He, is, the, of: 자주 등장하지만 제공하는 정보량이 적음 → president, UK: 좀 더 많은 정보를 제공</p>
</li>
</ul>
<blockquote>
<p><strong>단어마다 제공하는 정보량이 서로 다르다는 것을 통계적으로 계산함</strong></p>
</blockquote>
<h3 id="inverted-index">Inverted Index</h3>
<p><strong>특정 용어가 어느 문서들에서 발생하는지 빠르게 찾을 수 있도록 구성된 데이터 구조,
 용어와 해당 용어가 포함된 문서의 위치를 매핑</strong></p>
<ul>
<li>불용어 (stopword)
• 모든 문서에 자주 사용되어 색인어로 문서를
구분해주는 가치가 없는 어휘 • 예) “in”, “the”, “and”</li>
<li>Map 형식의 자료구조에 inverted index를 저장 
• Key: term / word
• Value: 문서빈도 수, term 빈도수, 위치</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d1ff6e3f-e93c-4210-beb3-b602db4533cd/image.png" alt=""></p>
<h2 id="tf--idf">TF &amp; IDF</h2>
<h3 id="comparison-function-연관성">Comparison Function (연관성)</h3>
<ul>
<li><p><strong>질의(query)와 문서(document) 사이의 관련성의 정도를 계산</strong>
• Query와 inverted index의 term을 비교하여 문서를 검색하고 순위화 • 실시간으로 계산</p>
</li>
<li><p>*<em>Term 빈도수 (Term frequency)
가정: 사용자가 입력한 query와 매칭하는 term의 빈도수가 높을수록 query와 해당 document 연관성이 높음 *</em>
• 예) query: fish =&gt; “fish”를 포함한 문서 및 term 빈도수
• If Doc1의 “fish” 빈도수: 1, Doc2의 “fish” 빈도수: 2 =&gt; 연관성(“fish”, Doc2) &gt; 연관성(“fish”, Doc1)</p>
</li>
</ul>
<h3 id="문서-빈도수-document-frequency">문서 빈도수 (Document Frequency)</h3>
<ul>
<li><p><strong>가정: 사용자가 입력한 query가 특정 document에만 나타나는 경우, query와 해당 document 사이의 연관성이 높음</strong> 
• Query가 나타나는 document 의 수가 적을수록 관련성이 높음</p>
</li>
<li><p>예) query: egg, red
• “egg”를 포함한 문서 빈도수: 1 =&gt; doc 4
• “red”를 포함한 문서 빈도수: 2 =&gt; Doc1, Doc2
=&gt; 연관성(“egg”, Doc4) &gt; 연관성(“red”, Doc1) = 연관성(“red”, Doc2)</p>
</li>
</ul>
<h3 id="문서-단어-행렬document-term-matrix">문서-단어 행렬(Document-Term Matrix)</h3>
<p>• 문서에서 등장하는 각 단어들의 빈도나 특성을 반영한 행렬</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/97a6fd89-c6df-4db3-9db8-66568dfeba81/image.png" alt=""></p>
<h3 id="term-frequency-tf">Term Frequency (TF)</h3>
<ul>
<li><strong>특정 문서 d에서 단어 t가 등장한 횟수</strong></li>
<li>기존의 DTM과 완전히 똑같은 개념이기 때문에 DTM 자체가 이미 TF 값</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/486bb15b-0a88-488c-b32a-515d53441bea/image.png" alt=""></p>
<h3 id="inverse-document-frequency-idf">Inverse Document Frequency (IDF)</h3>
<p>• Document Frequency (DF): DF는 특정 단어 t가 등장한 문서의 수
=&gt; Inverse Document Frequency (IDF): DF의 역수 == 단어가 제공하는 정보의 양
• 단어가 모든 문서에서 너무 많이 등장 =&gt; 정보의 양이 적음. 흔한 단어</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/750ebed1-efb3-4780-860e-0a9a6bd91e22/image.png" alt=""></p>
<h3 id="combine-tf--idf">Combine TF &amp; IDF</h3>
<ul>
<li>*<em>‘a’, ‘the’, ‘of’ 등 관사 및 전치사 ⇒ TF는 높으나, IDF가 0에 근사 *</em>
=&gt; 거의 모든 document에 등장하면 N ≈ DF(t) ⇒ log(N/DF) ≈ 0
=&gt; 낮은 TF-IDF score</li>
<li><strong>자주 등장하지 않는 고유 명사 (ex. 사람 이름, 지명 등)</strong> 
=&gt; 높은 TF-IDF score</li>
</ul>
<h2 id="bm25">BM25</h2>
<p>• <strong>TF-IDF 를 기반으로, 문서의 길이까지도 고려하여 점수를 매김</strong>
• TF 값에 한계를 지정해두어 일정한 범위를 유지하도록 함
• 평균적인 문서의 길이보다 더 작은 문서에서 단어가 매칭된 경우 그 문서에 대해 가중치를 부여
• 현재까지도 검색엔진, 추천 시스템 등에서 빈번하게 사용되는 유사도 알고리즘</p>
<p><img src="blob:https://velog.io/b41268df-4bf1-451e-ad4e-0f27cd17f072" alt="업로드중.."></p>
<h3 id="왜-bm25가-더-좋을까">왜 BM25가 더 좋을까?</h3>
<ul>
<li>TF의 영향이 감소
TF에서는 단어 빈도가 높아질수록 검색 점수도 지속적으로 높아지는 반면, BM25에서는 특정 값으로 수렴</li>
<li>IDF의 영향이 커짐
BM25에서는 DF가 높아지면 검색 점수가 0으로 급격히 수렴. 불용어가 검색 점수에 영향을 덜 미침</li>
<li>문서 길이의 영향이 줄어듬
BM25에서는 문서의 평균 길이를 계산에 사용해 정규화. 문서의 길이가 검색 점수에 영향을 덜 미침</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[LM to LLM] 언어모델이란 무엇인가?]]></title>
            <link>https://velog.io/@pluto_0905/LM-to-LLM-%EC%96%B8%EC%96%B4%EB%AA%A8%EB%8D%B8%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@pluto_0905/LM-to-LLM-%EC%96%B8%EC%96%B4%EB%AA%A8%EB%8D%B8%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Fri, 22 Mar 2024 10:17:43 GMT</pubDate>
            <description><![CDATA[<h1 id="언어모델이란">언어모델이란?</h1>
<h2 id="자연언어란">자연언어란?</h2>
<ul>
<li>인간의 언어</li>
<li>정보전달의 수단이자 인간 고유의 능력으로 인공언어에 대응되는 개념</li>
</ul>
<h2 id="언어모델의-정의">언어모델의 정의</h2>
<ul>
<li>언어를 이루는 구성 요소(글자, 형태소, 단어, 단어열(문장), 문단 등)에 <strong>확률값을 부여</strong>하여 이를 바탕으로 <strong>다음 구성 요소를 예측하거나 생성</strong>하는 모델</li>
<li>단어 시퀀스에 확률을 할당(assign)
=&gt; 언어모델은 가장 자연스러운 단어 시퀀스를 찾거나 문맥 정보를 이해하는 모델</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/374828b8-c909-495a-b4d9-c4faddf73e8d/image.png" alt=""></p>
<h1 id="언어모델의-종류-및-특징">언어모델의 종류 및 특징</h1>
<h2 id="전통적인-언어모델">전통적인 언어모델</h2>
<h3 id="통계기반-언어모델">통계기반 언어모델</h3>
<ul>
<li>통계적 언어 모델은 단어열이 가지는 확률 분포를 기반으로 각 단어의 조합을 예측하는 전통적인 언어 모델
=&gt; 실제로 많이 사용하는 단어열(문장)의 분포를 정확하게 근사하는 것</li>
<li>주어진 단어를 바탕으로 다음 단어로 올 확률이 가장 높은 단어를 예측하는 일련의 과정을 의미 
=&gt; 언어 현상에 조건부 확률 적용
<img src="https://velog.velcdn.com/images/pluto_0905/post/a978c271-1076-44f8-aa30-f2ed17a2413f/image.png" alt=""></li>
</ul>
<h2 id="딥러닝-기반-언어모델">딥러닝 기반 언어모델</h2>
<ul>
<li><strong>퍼셉트론을 기반으로한 인공 신경망 설계를 통해 단어의 의미적 유사성을 학습할 수 있도록 설계</strong>
=&gt; ‘문맥’을 반영. 기존의 희소성 문제를 완화</li>
<li>학습 코퍼스에 없어도, 문맥을 참고하여 보다 정확한 예측</li>
<li>피드 포워드 신경망 -&gt; 순환 신경망 -&gt; Transformer</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/b1ecf2c6-5909-4500-ad3c-b9f9b5238915/image.png" alt=""></p>
<h3 id="영향력">영향력</h3>
<p>Transformer의 등장 이후로 NLP연구의 메인 트렌드</p>
<ul>
<li>Encoder만 사용하는 BERT family</li>
<li>Decoder만 사용하는 GPT family</li>
<li>Encoder-Decoder(Seq2Seq)구조를 가지는 BART family, Transformer-XL family 등</li>
</ul>
<h2 id="encoder-vs-decoder">Encoder vs Decoder</h2>
<p>Encoder:
각 stage에 어텐션 레이어가 초기 문장의 모든 단어에 접근 가능 
=&gt; Encoder 모델은 전체 문장의 이해를 요구하는 task에 가장 적합</p>
<p>Decoder:
각 stage에서 문장 내에서 주어진 단어의 앞쪽만 접근가능
=&gt; Decoder 모델은 텍스트 생성과 관련 task에 가장 적합</p>
<h3 id="encoder의-대표-모델">Encoder의 대표 모델</h3>
<blockquote>
<p><strong>BERT</strong> (Bidirectional Encoder Representations from Transformers)</p>
</blockquote>
<ul>
<li>Contextual Embedding</li>
<li>Masked Language Modeling(MLM): 마스킹된 토큰을 예측</li>
<li>Next Sentence Prediction(NSP): 문장이 다른 문장과 이어질 확률을 예측</li>
</ul>
<blockquote>
<p>*<em>RoBERTa *</em>(Robustly optimized BERT approach)</p>
</blockquote>
<ul>
<li>더 긴 시퀀스, 많은 훈련 데이터로 더 큰 배치에서 오래 학습</li>
<li>NSP 없이 Dynamic Masking 적용
=&gt; 성능이 크게 향상</li>
</ul>
<h3 id="decoder의-대표-모델">Decoder의 대표 모델</h3>
<blockquote>
<p>*<em>GPT *</em>(Generative Pre-trained Transformer)</p>
</blockquote>
<ul>
<li>Auto-Regressive</li>
<li>주어진 Input을 기반으로 다음에 올 토큰을 예측</li>
<li>*=&gt; 시퀀스의 한쪽만 참고</li>
<li>*</li>
<li>추가적인 fine tuning 없이도 자체적으로 충분히 좋은 성능 </li>
<li>*=&gt; Few-shot / Zero-shot의 등장</li>
<li>*
<img src="https://velog.velcdn.com/images/pluto_0905/post/3a908ba8-f036-478d-a637-ad50c4195cf4/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/44497845-b1c0-4826-af85-8749eb3f7c28/image.png" alt=""></p>
<h3 id="sequence-to-sequence의-대표-모델">Sequence-to-Sequence의 대표 모델</h3>
<blockquote>
<p><strong>BART</strong> (Bidirectional Auto-Regressive Transformer)</p>
</blockquote>
<ul>
<li>Encoder와 Decoder를 모두 사용한 사전학습 모델</li>
<li>Encoder에서 input을 입력 받아 표현형 벡터로 변환</li>
<li>*=&gt; Decoder에서 해당 벡터를 기반으로 다음 토큰을 생성</li>
<li>*</li>
<li>5가지 Denoising technique을 사용해 self-supervised learning으로 사전 학습</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/15e42fdb-60ea-4919-b38e-42f3a5b62f43/image.png" alt=""></p>
<blockquote>
<p><strong>T5</strong> (Text-to-Text Transfer Transformer)</p>
</blockquote>
<ul>
<li>Text-to-text problem: input으로 text를 받아서, output으로 새로운 text를 생성하는 문제</li>
<li>다양한 text processing problem ⇒ Text-to-text 문제로 변형</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/0ac8dff6-770b-4bd8-92c7-b06a846b0b15/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[NLP] RNN 및 LSTM, GRU 적용 자연어 처리]]></title>
            <link>https://velog.io/@pluto_0905/NLP-RNN-%EB%B0%8F-LSTM-GRU-%EC%A0%81%EC%9A%A9-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@pluto_0905/NLP-RNN-%EB%B0%8F-LSTM-GRU-%EC%A0%81%EC%9A%A9-%EC%9E%90%EC%97%B0%EC%96%B4-%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Mon, 04 Mar 2024 07:03:17 GMT</pubDate>
            <description><![CDATA[<h1 id="sequence-to-sequence-이해하기">Sequence-to-sequence 이해하기</h1>
<p><strong>입력된 시퀀스(문장)을 다른 시퀀스로 변환하는 모델로, 인코더 RNN과 디코더 RNN로 구성</strong></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/157347d2-96b1-4188-8ceb-1df1cf4c43c8/image.png" alt=""></p>
<h2 id="인코더-encoder">인코더 (Encoder)</h2>
<p>: 입력 시퀀스를 받아들여 고<strong>정된 길이의 벡터로 변환</strong>함. 이 벡터는 입력 시퀀스의 정보를 압축적으로 담고 있음. 이 벡터를 <strong>문맥 벡터(context vector)</strong>라고 부름</p>
<h2 id="디코더decoder">디코더(Decoder)</h2>
<p>: 문맥 벡터를 받아들여 <strong>출력 시퀀스를 생성</strong>
디코더는 문맥 벡터와 이전에 생성한 출력을 기반으로 <strong>다음 출력을 생성</strong>함</p>
<h1 id="rnn-이해하기">RNN 이해하기</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/4bff2328-4639-4a49-94d4-28d107ea2319/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/b0febafb-1e7c-44f7-910f-c17600e74cce/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/54fb50ff-fcae-4c78-9793-806177c2f545/image.png" alt=""></p>
<p>*<em>손실 함수 (Loss function)
*</em>
<img src="https://velog.velcdn.com/images/pluto_0905/post/be1de498-a715-4071-85e0-0f414fb68839/image.png" alt=""></p>
<p>*<em>시간 순서 역전파 (Backpropagation through time)
*</em></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/8128b3f8-7449-4148-af03-12fcab458cc6/image.png" alt=""></p>
<p><strong>One-to-one</strong>: ex) 고양이, 강아지 분류</p>
<p><strong>One-to-many</strong>:한 개의 입력으로 시퀀스 여러개 출력</p>
<p><strong>many-to-one</strong>: ex) 감정분석</p>
<p><strong>many-to-many</strong>: ex) 기계번역, 형태소 분석</p>
<h2 id="rnn의-장단점">RNN의 장단점</h2>
<p>   <strong>장점</strong></p>
<ul>
<li>모든 길이의 시퀀스를 입력으로 처리 가능</li>
<li>시간에 따라 가중치를 공유하여, 입력 시퀀스가 길어져도 모델 크기가 증가하지 않음 • 과거 정보를 고려하여 다음 시간의 출력을 계산함</li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>매번 시간에 따라 출력을 계산하므로, 병렬 처리가 불가능하여 계산 속도가 느림</li>
<li>입력 혹은 출력 시퀀스가 길어지면 오래전 정보를 반영하기 어려움 (Long-term dependency) </li>
<li>현재 상태에 대한 미래 입력을 고려할 수 없음</li>
</ul>
<h1 id="lstm--gru-이해하기">LSTM &amp; GRU 이해하기</h1>
<p>*<em>Gradient vanishing / exploding
*</em></p>
<p><strong>기존 RNN의 역전파 과정에서 그래디언트가 너무 작아져서(gradient vanishing) 가중치 업데이트가 잘 안 되거나, 그래디언트가 너무 커져서(gradient exploding) 가중치 값이 엄청나게 커지는 문제가 발생</strong></p>
<ul>
<li>이로 인해 모델이 불안정해지고, 시퀀스 데이터의 장기 의존성을 제대로 학습하지 못하게 됨</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/2b82ded5-feb6-483a-958d-6057c1bf9547/image.png" alt=""></p>
<h2 id="lstm">LSTM</h2>
<p>RNN에서 발생하는 Long-term dependency problem 완화 방법으로 LSTM은** cell state와 gate라는 메커니즘을 도입**</p>
<ul>
<li>필요한 정보만을 선택적으로 업데이트하거나 삭제하는 방법을 도입 (정보를 잘 기억하고 활용)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/2853ba58-5ad7-4d4c-8814-0c45cc41313e/image.png" alt=""></p>
<p><strong>sigmoid 활성화 함수</strong></p>
<ul>
<li>출력 값의 범위를 [0, 1]로 제한하여, 게이트에서 어떤 정보를 통과시킬지 결정하는 데 사용됨</li>
</ul>
<p><strong>현재 시간 단계에서의 cell state 후보</strong></p>
<ul>
<li>현재 입력과 이전 hidden state에 기반하여 계산됨</li>
</ul>
<p><strong>현재 시간 단계에서의 cell state</strong></p>
<ul>
<li>forget gate가 결정한 대로 이전 cell state의 일부를 잊고, input gate가 결정한 대로 새로운 정보를 추가하여 업데이트됨</li>
</ul>
<p><strong>forget gate, input gate, output gate</strong></p>
<ul>
<li>이전 cell state의 어느 부분을 잊을지, 새로운 정보를 얼마나 추가할지, 어느 부분을 hidden state로 출력할지 결정</li>
</ul>
<h3 id="forget-gate">Forget gate</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/0b25f8be-4f11-48ed-a406-20282b9d9b67/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a5794768-1088-43db-be59-8f7f22b3c6d1/image.png" alt=""></p>
<p>• forget gate layer로, 이전 cell state의 어느 정보를 버릴지 결정 Wf와 bf 는 학습 가능한 가중치와 편향</p>
<p>• 시그모이드 함수 sigmoid는 출력을 0과 1 사이로 제한하여 어떤 요소를 완전히 잊어버릴지(0) 또는 완전히 기억할지(1) 결정</p>
<h3 id="input-gate">Input gate</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/cc7dc1b4-6841-48ab-8e56-887f8f25d894/image.png" alt="">
<img src="https://velog.velcdn.com/images/pluto_0905/post/b7abfa63-2065-4209-8c73-9e5ce19f4acb/image.png" alt=""></p>
<ul>
<li><p>input gate layer로, 어떤 새로운 정보를 cell state에 저장할지 결정
<img src="https://velog.velcdn.com/images/pluto_0905/post/44c644ce-eceb-4fc8-8d8f-598059192336/image.png" alt=""></p>
</li>
<li><p>새로운 후보 cell state를 생성. 이후에 후보 cell state 정보 중 일부가 cell state에 저장</p>
</li>
</ul>
<h3 id="cell-state">Cell state</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a22ba4c3-8838-458a-a527-3009df2f570c/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/df8607cc-ff3b-434b-81fe-117d8dcc3cac/image.png" alt=""></p>
<ul>
<li>cell state 업데이트로, 먼저 forget gate를 통해 결정된 정보를 잊어버린 다음, input gate에서 결정된 정보를 추가</li>
</ul>
<h3 id="output-gate">Output gate</h3>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/2c0efe53-2bcf-4424-ae5a-80c13d5ce77d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a4045a7a-37a1-4b69-b039-46f47e502570/image.png" alt=""></p>
<p>• output gate로, 다음 hidden state가 무엇을 출력해야 하는지 결정</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/e179e551-19a1-4832-9867-71b79ed2f53a/image.png" alt=""></p>
<p>• output gate 값과 현재 시간단계의 cell state 값을 통해 현재 hidden state를 계산</p>
<h2 id="gru">GRU</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/db513597-e9a1-4cd0-bc32-798c7f221156/image.png" alt=""></p>
<ul>
<li><p>update gate로, 현재 hidden state를 얼마나 업데이트할지 결정</p>
</li>
<li><p>reset gate로, 이전 hidden state를 얼마나 &#39;잊어버릴지&#39; 결정</p>
</li>
<li><p>새로운 후보 hidden state를 계산</p>
</li>
<li><p>후보 hidden state를 통해, 현재 hidden state를 업데이트</p>
</li>
</ul>
<h1 id="rnn-vs-lstm--gru">RNN vs LSTM / GRU</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/c5990846-4db7-47a9-af40-77d6a67fcb70/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[NLP]
딥러닝 기반 자연언어처리 개괄]]></title>
            <link>https://velog.io/@pluto_0905/NLP-Basic%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%9E%90%EC%97%B0%EC%96%B8%EC%96%B4%EC%B2%98%EB%A6%AC-%EA%B0%9C%EA%B4%84-z438xhhk</link>
            <guid>https://velog.io/@pluto_0905/NLP-Basic%EB%94%A5%EB%9F%AC%EB%8B%9D-%EA%B8%B0%EB%B0%98-%EC%9E%90%EC%97%B0%EC%96%B8%EC%96%B4%EC%B2%98%EB%A6%AC-%EA%B0%9C%EA%B4%84-z438xhhk</guid>
            <pubDate>Sat, 02 Mar 2024 08:59:35 GMT</pubDate>
            <description><![CDATA[<h1 id="ml-vs-dl">ML VS DL</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5fe026af-3443-423d-9fff-f713a697b992/image.png" alt=""></p>
<h2 id="규칙-기반과-딥러닝-기반-기계학습">규칙 기반과 딥러닝 기반 기계학습</h2>
<p><strong>규칙 기반 모델</strong>
• 적은 양의 데이터로 일반화 가능
• 결론 도출의 논리적 추론 가능
• 학습에 필요한 데이터가 비교적 적게 필요
• 이를 제작한 전문가의 실력을 넘어서기 매우 어려움 
• 해당 전문가의 오류를 동일하게 반복
• 규칙 구축에 많은 시간과 비용 소요
• Toy task에 주로 적용되었음</p>
<p><strong>딥러닝 기반 모델</strong>
• 학습에 사용할 데이터의 질이 좋고 양이 많으면 인간의 실력을 넘어설 수 있음
• 인간이 생각하지 못한 새로운 방법을 사용할 수 있음
• 기본적으로, 많은 데이터가 필요함
• 논리적 추론이 아닌 귀납적 근사에 의한 결론 생성 • 결과에 대한 해석의 어려움
• 규칙 구축에 많은 시간과 비용 소요</p>
<h1 id="딥러닝과-nlp">딥러닝과 NLP</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/3dbadd23-ae8f-40ab-9f90-dd1fef4bc35c/image.png" alt=""></p>
<h1 id="딥러닝-학습-방법">딥러닝 학습 방법</h1>
<ul>
<li>신경망 레이어의 출력 값은 레이어를 구성하는 가중치(파라미터)들의 값에 의해 결정</li>
<li>m개의 입력을 받아 n개의 값을 출력하는 완전연결층은 m×n개의 입력 가중치 값과 n개의 편향 가중치(bias) 값이 있음</li>
<li>딥러닝 모델들에는 입력 데이터와 출력 데이터를 처리하기 위해 보통 수천개 이상의 파라미터가 사용되고, 레이어의 수도 수십에서 수백에 이름</li>
<li>이 외에도 모델의 여러 특성들을 결정하는데 가중치 값들이 사용됨 딥러닝 모델은 수천만에서 수억, 수십억 개 이상의 가중치들로 이루어져 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/fd278af1-196d-49eb-99b6-4e9cb163737f/image.png" alt=""></p>
<ul>
<li>원하는 출력을 만들어내기 위해서는 모든 파라미터의 값을 정밀하게 조정해야 함</li>
<li>딥러닝은 파라미터에 따라 매우 다양한 입력-출력을 학습 가능함<ul>
<li>예를 들어, 이미지를 입력받아 카테고리를 출력하는 이미지 분류 또는
카테고리를 입력받아 이미지를 출력하는 이미지 합성 등이 가능함</li>
</ul>
</li>
<li>딥러닝에서의 학습은 수많은 파라미터들의 최적 값을 찾아가는 과정을 의미함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/08f0aa7d-6fce-4b30-8fc2-6ca98e03a551/image.png" alt=""></p>
<ul>
<li><strong>정방향 계산(forward pass)</strong>은 입력으로부터 예측을 만들어내는 과정을 의미함<ul>
<li>이 과정에서는 입력 데이터가 모델을 통과하며 각 계층의 가중치와 연산을 통해 출력(예측)이 생성됨</li>
</ul>
</li>
<li><strong>역방향 계산(backward pass)</strong>은 예측과 정답 사이의 차이를 줄이는 방향으로 파라미터를 수정하는 과정을 의미함<ul>
<li>손실 함수를 통해 계산된 오차가 네트워크를 역방향으로 통과하며, 각 계층의 가중치는 오차를 최소화하는 방향으로 업데이트됨
<img src="https://velog.velcdn.com/images/pluto_0905/post/445de347-528b-4033-9afe-0abfc01707b9/image.png" alt=""></li>
</ul>
</li>
</ul>
<p>• 손실 함수(loss function)는 모델의 예측과 정답 사이의 차이를 수치화시켜주는 함수 
• 이를 통해 모델의 성능을 측정하고, 이를 기반으로 모델을 개선할 수 있음
• 손실 함수의 값을 각각의 파라미터들에 대해 편미분하면 그래디언트(gradient)를 계산할 수 있음
• 그래디언트는 손실 함수의 기울기를 나타내며, 이를 통해 파라미터를 어떻게 수정해야 손실을 줄일 수 있는지 알 수 있음
• 그래디언트에 따라 파라미터들을 수정하면, 현재 입력에 대한 모델의 예측이 정답에 가까워짐 
• 이는 그래디언트가 손실을 줄이는 방향을 가리키기 때문임
• 이러한 과정을 모든 데이터에 대해 반복적으로 적용
• 이를 통해 모델의 모든 파라미터를 최적화하고, 전체적인 성능을 향상시킬 수 있음</p>
<p>• 딥러닝 모델에서 손실 함수에 대한 입력층의 그래디언트는 편미분의 특성상 한 번에 계산할 수 없음 
• 각 계층의 출력이 다음 계층의 입력으로 사용되기 때문임
• 손실 함수에 대한 출력층의 그래디언트를 계산하고, 이로부터 다시 이전층의 그래디언트를 계산하는 방식으로 연쇄 법칙 (chain rule)을 이용
• 출력에서 입력으로 계산이 역방향으로 진행되기 때문에 역전파(back-propagation)라고 함 
• 모델의 파라미터를 손실을 줄이는 방향으로 업데이트하는 데 사용됨
• 딥러닝 모델의 학습에는 미분값이 큰 영향을 미치며, 손실 함수로부터 편미분값을 계산할 수 있는 가중치들만 역전파 알고리즘을 이용하여 값을 학습할 수 있음</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[NLP] 텍스트 전처리]]></title>
            <link>https://velog.io/@pluto_0905/NLP-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%A0%84%EC%B2%98%EB%A6%AC</link>
            <guid>https://velog.io/@pluto_0905/NLP-%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%A0%84%EC%B2%98%EB%A6%AC</guid>
            <pubDate>Fri, 01 Mar 2024 13:43:17 GMT</pubDate>
            <description><![CDATA[<h1 id="text-preprocessing">Text Preprocessing</h1>
<p>*<em>컴퓨터가 텍스트를 이해할 수 있도록 하는 Data Preprocessing 방법
*</em></p>
<p>• HTML 태그, 특수문자, 이모티콘 
• 정규표현식
• 불용어 (Stopword)
• 어간추출(Stemming)
• 표제어추출(Lemmatizing)</p>
<h2 id="preprocessing-pipeline">Preprocessing Pipeline</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/4bef8359-a2b8-4832-9deb-569ea701a841/image.png" alt=""></p>
<h1 id="tokenization">Tokenization</h1>
<p>• 주어진 데이터를 토큰(Token)이라 불리는 단위로 나누는 작업
• 토큰이 되는 기준은 다를 수 있음(어절, 단어, 형태소, 음절, 자소 등)
• Character-based Tokenization / Word-based Tokenization / Subword-based Tokenization</p>
<p>*<em>문장 토큰화(Sentence Tokenizing)
*</em>• 문장 분리</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/e98494d9-d42c-4867-8f95-85c11b60f0a2/image.png" alt=""></p>
<p>*<em>단어 토큰화(Word Tokenizing)
*</em>• 구두점 분리, 단어 분리
“Hello, World!” -&gt; “Hello”, “,”, “World”, “!”</p>
<h2 id="why-tokenize">Why Tokenize?</h2>
<blockquote>
<p><strong>단어 의미를 밀집 벡터로 표현하기 위해 단어들을 사전화</strong></p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/85277d85-7a08-47b7-aeb8-a55a1cde84e5/image.png" alt=""></p>
<h2 id="토큰화-시-고려사항">토큰화 시 고려사항</h2>
<ol>
<li><p>구두점이나 특수 문자를 단순 제외
ex. 21/02/06 -&gt; 날짜 , $100,000 -&gt; 돈을 나타낼 때</p>
</li>
<li><p>줄임말과 단어 내 띄어쓰기
ex. we&#39;re -&gt; we are 의 줄임말
rock n roll -&gt; 하나의 단어지만 띄어쓰기가 존재</p>
</li>
<li><p>문장 토큰화: 단순 마침표를 기준으로 자를 수 없음
ex. 서버에 들어가서 로그 파일 저장하고 메일로 결과 좀 보내줘. 그러고나서 점심 먹으러 가자.</p>
</li>
</ol>
<h2 id="한국어-토큰화의-어려움">한국어 토큰화의 어려움</h2>
<blockquote>
<p>영어는 New York과 같은 합성어나 he&#39;s 와 같이 줄임말에 대한 예외처리만 한다면, 띄어쓰기를 기준으로 하는 띄어쓰기 토큰화를 수행해도 단어 토큰화가 잘 작동</p>
</blockquote>
<ul>
<li><p>영어와는 달리 한국어에는 <strong>조사</strong>라는 것이 존재
ex. &#39;그가&#39;, &#39;그에게&#39;, &#39;그를&#39;, &#39;그와&#39;, &#39;그는&#39;과 같이 다양한 조사가 붙음. ⇒ 같은 단어임에도 서로 다른 조사가 붙어서 다른 단어로 인식</p>
</li>
<li><p>한국어는 띄어쓰기가 영어보다 잘 지켜지지 않음 ex. 띄어쓰기를안해도사람들은 이해/</p>
<blockquote>
<p><strong>형태소 단위의 토큰화</strong>가 필요</p>
</blockquote>
</li>
</ul>
<h1 id="텍스트-정제-cleaning">텍스트 정제 (Cleaning)</h1>
<p>코퍼스 내에서 토큰화 작업에 <strong>방해가 되거나 의미가 없는 부분의 텍스트, 노이즈를 제거</strong>하는 작업</p>
<ul>
<li>토큰화 전에 정제를 하기도 하지만, 이후에도 여전히 남아있는 노이즈들을 제거하기 위해 지속적으로 수행</li>
<li>노이즈는 특수 문자 같은 아무 의미도 갖지 않는 글자들을 의미하기도 하지만, 분석하고자 하는 목적에 맞지 않는 불필요한 단어들을 말함</li>
<li>대부분 정규표현식이나, 파이썬 내장함수를 통해 조작</li>
<li><strong>주로 불용어, 특수문자 제거 / 대.소문자 통합 / 중복 문구 제거 / 다중 공백 통일 등으로 구성</strong></li>
</ul>
<h2 id="불용어-stop-words">불용어 (Stop Words)</h2>
<ul>
<li>분석에 큰 의미가 없는 단어로 코퍼스 내에 빈번하게 등장하나, 실질적으로 의미를 갖고 있지 않은 용어 • 전처리 시 불용어로 취급할 대상을 정의하는 작업이 필요</li>
<li>NLTK에서는 여러 불용어를 사전에 정의</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/feeaf4fe-15d5-4f0f-b211-d9b0f6716243/image.png" alt=""></p>
<h1 id="정규화-normalization">정규화 (Normalization)</h1>
<h2 id="stemming-어간-추출">Stemming (어간 추출)</h2>
<ul>
<li>어형이 변형된 단어로부터 접사 등을 제거하고 그 단어의 어간을 분리해내는 것</li>
<li>대표적으로 포터 스태머 알고리즘이 존재함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/4dc5f29f-971a-4df0-8a7c-3242895df6eb/image.png" alt=""></p>
<h2 id="lemmatization-표제어-추출">Lemmatization (표제어 추출)</h2>
<ul>
<li>품사 정보가 보존된 형태의 기본형으로 변환</li>
<li>표제어 추출에 가장 섬세한 방법은 =&gt; 형태학적 파싱 </li>
<li>형태소란?: 의미를 가진 가장 작은 단위</li>
<li>어간(stem) : 단어의 의미를 담고 있는 단어의 핵심 부분 </li>
<li>접사(affix) : 단어에 추가적인 의미를 주는 부분</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5573d4a4-daf7-4bce-a0bb-9c42483c4ae3/image.png" alt=""></p>
<h1 id="편집거리-edit-distance">편집거리 (Edit distance)</h1>
<h2 id="levenshtein-distance">Levenshtein distance</h2>
<ul>
<li>한 string s1 을 s2 로 변환하는 최소 횟수를 두 string 간의 거리. 거리가 낮을수록 유사한 문자열로 판단함</li>
<li>s1 = ‘꿈을꾸는아이’ 에서 s2 = ‘아이오아이’ 로 바뀌기 위해서는 (꿈을꾸 -&gt; 아이오) 로 바뀌고, 네번째 글자 ‘는’ 이 제거 </li>
<li>string 을 변화하기 위한 edit 방법을 세 가지로 분류</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/8f4c4c97-c63e-434e-8946-eda33afa4702/image.png" alt=""></p>
<h1 id="정규표현식regex">정규표현식(Regex)</h1>
<ul>
<li>특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어</li>
<li>복잡한 문자열의 검색과 치환을 위해 사용되며, Python 뿐만 아니라 문자열을 처리하는 모든 곳에서 사용됨</li>
<li>원하는 규칙에 해당하는 문자만 남기거나 제거, 규칙에 맞는 문자열 반환 등 - 단 시간내에 텍스트가 갖는 모든 패턴의 형태를 처리</li>
<li>파이썬에서는 re 라이브러리를 이용해 사용이 가능함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d4fbc5cf-28d0-455b-947b-29d4afb0e63d/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Generation] AutoEncoder]]></title>
            <link>https://velog.io/@pluto_0905/Generation-AutoEncoder</link>
            <guid>https://velog.io/@pluto_0905/Generation-AutoEncoder</guid>
            <pubDate>Mon, 26 Feb 2024 06:49:04 GMT</pubDate>
            <description><![CDATA[<h1 id="autoencoder">AutoEncoder</h1>
<ul>
<li>입력 데이터의 패턴을 학습하여 데이터를 재건하는 모델 <ul>
<li>비선형 차원 축소 기법으로 활용 가능</li>
</ul>
</li>
</ul>
<blockquote>
</blockquote>
<ul>
<li>오토인코더는 입력 데이터의 효율적인 표현을 학습하는 비지도 학습 모델</li>
<li>일반적으로 인코더(encoder)와 디코더(decoder) 두 부분으로 구성</li>
<li>인코더는 입력 데이터를 저차원의 잠재 공간(latent space)으로 압축하여 표현</li>
<li>디코더는 잠재 공간의 표현을 다시 원본 데이터로 복원합니다.</li>
<li>학습 과정에서는 입력 데이터와 디코더의 출력 간의 재구성 오차를 최소화하도록 모델을 학습시킵니다.</li>
<li>주로 데이터 압축, 잠재 공간의 특징 추출, 차원 축소 등의 용도로 사용</li>
</ul>
<h2 id="구조">구조</h2>
<ul>
<li>인코더(Encoder): 데이터를 저차원 잠재 표현으로 요약</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/3c547912-61ad-4637-afc3-a648be2850a6/image.png" alt=""></p>
<ul>
<li>디코더(Decoder): 저차원 잠재 표현으로부터 데이터를 재구성(Reconstruction)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5bc14ff8-5266-498d-8b05-973137bb7b87/image.png" alt=""></p>
<h2 id="학습">학습</h2>
<ul>
<li>손실 함수: 잠재 표현으로부터 복구한 데이터와 입력 데이터의 평균제곱오차(MSE)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/fbb53305-d899-40e1-b399-af7e848dad73/image.png" alt=""></p>
<h1 id="denoising-autoencoder">Denoising AutoEncoder</h1>
<ul>
<li>입력 데이터에 랜덤 노이즈를 주입하거나 Dropout 레이어를 적용</li>
<li>노이즈가 없는 원래 데이터로 재구성</li>
</ul>
<blockquote>
</blockquote>
<ul>
<li>디노이징 오토인코더는 노이즈가 있는 입력 데이터에서 원본 데이터를 복원</li>
<li>일반적으로 입력 데이터에 노이즈를 추가한 후, 오리지널(clean) 데이터를 복원하도록 모델을 학습</li>
<li>학습 과정에서는 노이즈가 추가된 입력 데이터와 오리지널 데이터 간의 차이를 최소화하도록 모델을 학습</li>
<li>이렇게 함으로써, 모델은 입력 데이터의 노이즈를 제거하고 오리지널 데이터를 복원하는 능력을 학습</li>
<li>주로 데이터의 노이즈 제거, 잡음이 있는 데이터의 표현 학습 등에 사용</li>
</ul>
<h1 id="오토-인코더의-활용">오토 인코더의 활용</h1>
<h2 id="특징-추출기로의-활용">특징 추출기로의 활용</h2>
<ul>
<li>학습한 오토 인코더의 인코더 부분을 특징 추출기로 활용</li>
<li>잠재 벡터로부터 분류, 클러스터링 문제 해결</li>
</ul>
<h2 id="이상치-탐지-anomaly-detection">이상치 탐지 (Anomaly Detection)</h2>
<ul>
<li>이상치는 재구성 했을 때 평균제곱오차가 크게 나올 것!</li>
<li>특정 임계값을 넘으면 이상치로 판단</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Generation] 생성모델과 MLE]]></title>
            <link>https://velog.io/@pluto_0905/Generation-%EC%83%9D%EC%84%B1%EB%AA%A8%EB%8D%B8%EA%B3%BC-MLE</link>
            <guid>https://velog.io/@pluto_0905/Generation-%EC%83%9D%EC%84%B1%EB%AA%A8%EB%8D%B8%EA%B3%BC-MLE</guid>
            <pubDate>Mon, 26 Feb 2024 06:08:11 GMT</pubDate>
            <description><![CDATA[<h1 id="가능도와-로그가능도">가능도와 로그가능도</h1>
<ul>
<li>모델 파라미터 𝜃에 의존하는 분포 p(x; 𝜃) 를 따르는 n개의 데이터 x1, x2, ..., xₙ 관찰</li>
<li>데이터로부터 모델 파라미터 𝜃를 어떻게 추정할 수 있을까? 
→ **가능도를 최대화하는 파라미터를 찾자!</li>
<li>*
<img src="https://velog.velcdn.com/images/pluto_0905/post/e50b2431-2a33-4bd4-9669-e715747f45c7/image.png" alt=""></li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/17d1fe75-95aa-4a6a-ab78-81156e8ddb9e/image.png" alt=""></p>
<h1 id="mle">MLE</h1>
<ul>
<li><p>가능도를 최대화하는 파라미터 𝜃를 찾는 방법</p>
</li>
<li><p>일반적으로 가능도 함수의 미분을 통해 계산</p>
</li>
<li><p>동전 던지기 예제:</p>
<ul>
<li>관측치: 앞면 7번, 뒷면 3번</li>
<li>파라미터 𝜃: 동전을 던질 때 앞면이 나올 확률</li>
<li>확률질량함수: p(앞면; 𝜃) = 𝜃, p(뒷면; 𝜃) = 1-𝜃</li>
<li>가능도 최대화 = <strong>어떤 𝜃에 대해 앞면 7번, 뒷면 3번이 나올 확률이 가장 클까?</strong></li>
</ul>
</li>
</ul>
<p>  <img src="https://velog.velcdn.com/images/pluto_0905/post/255b831b-1165-413f-8b5a-dde012986996/image.png" alt=""></p>
<h1 id="생성-모델의-학습">생성 모델의 학습</h1>
<ul>
<li>데이터의 분포 Pdata 를 어떻게 모델링할까? = 모델 P𝜃 를 어떻게 학습할까?<ul>
<li>데이터의 분포 Pdata와 모델 P𝜃 를 가깝게 하자!</li>
</ul>
</li>
</ul>
<p>  <img src="https://velog.velcdn.com/images/pluto_0905/post/fce7e2da-3db3-465a-a7da-922edb51bfa9/image.png" alt=""></p>
<ul>
<li><p>생성 모델의 학습 - 쿨백-라이블러 발산 최소화</p>
<ul>
<li>두 분포 Pdata 와 P𝜃 사이의 거리 → 쿨백-라이블러 발산 (Kullback-Leibler Divergence, KL-Divergence)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/6cba761d-8781-412b-a070-1a406a082674/image.png" alt=""></p>
</li>
</ul>
<h2 id="생성-모델과-최대-가능도-추정법">생성 모델과 최대 가능도 추정법</h2>
<ul>
<li>생성 모델의 학습은 최대 가능도를 최적화하며 진행할 수 있음</li>
<li>쿨백-라이블러 발산 (KL Divergence)은 최대 가능도 최적화에 활용 가능한 기준이 됨</li>
<li>그러나 데이터의 정확한 분포를 알 수 없어 이 같은 작업은 바로 적용하기 어려움</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Generation] 판별모델과 생성모델]]></title>
            <link>https://velog.io/@pluto_0905/Generation-%ED%8C%90%EB%B3%84%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EC%83%9D%EC%84%B1%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@pluto_0905/Generation-%ED%8C%90%EB%B3%84%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EC%83%9D%EC%84%B1%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Mon, 26 Feb 2024 05:58:39 GMT</pubDate>
            <description><![CDATA[<h1 id="판별-모델">판별 모델</h1>
<p>판별 모델이란?</p>
<ul>
<li><p>데이터 X가 주어졌을 때, 특성 Y가 나타날 조건부 확률 p(Y|X)를 직접적으로 반환하는 모델</p>
</li>
<li><p>판별 모델: 주어진 데이터를 통해 데이터 사이의 경계를 예측</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/da83d160-2731-4d5b-931d-0a9a15c19430/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/1657a955-e58e-4e2f-a276-d863931fcfd0/image.png" alt=""></p>
<h2 id="판별-모델의-활용">판별 모델의 활용</h2>
<ul>
<li>어떤 데이터를 서로 다른 클래스로 <strong>분류</strong>해주는 문제에 활용될 수 있음</li>
<li>정상 데이터에 대한 경계를 최대한 좁혀 이를 벗어나는 <strong>이상치를 감지</strong>하는 문제에도 활용 가능</li>
</ul>
<h1 id="생성모델">생성모델</h1>
<p>생성 모델이란?</p>
<ul>
<li>데이터 X와 특성 Y의 결합(joint) 분포 p(X, Y) or Y가 주어질 때 X의 조건부(conditional) 분포 p(X|Y)를 추정하는 모델</li>
<li>주어진 Y가 없는 경우, 데이터의 주변(marginal) 분포 p(X)를 추정하는 모델</li>
<li>생성 모델: 주어진 데이터를 통해 데이터 분포를 학습</li>
<li>가우시안 혼합 모델 (Gaussian Mixture Model, GMM) <ul>
<li>p(X) = 여러 개의 정규 분포</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/3694d7e5-6610-49e2-b7d7-2d6516040342/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/45bd9a2b-bd23-4705-89f6-8d3f55d031bb/image.png" alt=""></p>
<h1 id="판별-vs-생성">판별 VS 생성</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f32b7d4f-319a-43a8-8bfa-31326fcb0cf9/image.png" alt=""></p>
<p><strong>판별</strong></p>
<ul>
<li>이미지 X가 주어졌을 때, 특성 Y가 나타날 조건부 확률</li>
</ul>
<p><strong>생성</strong></p>
<ul>
<li>데이터 분포 자체 학습 or  특정 label Y가 주어졌을 때 어떤 분포가 되는지 학습 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CV] 2-Stages Detector]]></title>
            <link>https://velog.io/@pluto_0905/CV-2-Stages-Detector</link>
            <guid>https://velog.io/@pluto_0905/CV-2-Stages-Detector</guid>
            <pubDate>Sat, 24 Feb 2024 06:58:32 GMT</pubDate>
            <description><![CDATA[<h1 id="2-stage-detector">2-Stage Detector</h1>
<h2 id="2-stage-detector란">2-Stage Detector란?</h2>
<p>Object Detection = Localization + Classification
→ 두 가지의 task를 분리하여 2 stage로 따로 수행</p>
<ul>
<li>Stage 1: 이미지 내에서 object가 있다고 판단되는 위치 찾기 (Region proposal)</li>
<li>Stage 2: 각 위치에 있는 object의 종류 판단 (Classification)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/06676843-9313-4980-9089-8ca2896e3531/image.png" alt=""></p>
<h2 id="2-stage-detector의-발전-흐름">2-Stage Detector의 발전 흐름</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/cbd9f16c-3774-4109-b76b-4fe9ef900136/image.png" alt=""></p>
<h1 id="r-cnn">R-CNN</h1>
<ul>
<li>2-stage detector의 최초 모델</li>
<li>Region proposals + CNN</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/9a5abb31-41cf-4f88-b3c4-a97c34dc7ccd/image.png" alt=""></p>
<h2 id="sliding-window">Sliding Window</h2>
<p>고정된 크기의 window를 이미지 내에서 sliding하면서 객체의 위치를 찾아내는 방법</p>
<ul>
<li>계산 비용이 높고 속도가 매우 느림</li>
<li>고정된 크기의 window
<img src="https://velog.velcdn.com/images/pluto_0905/post/703f9bbe-ab9b-45a2-8562-380ea8dd69e1/image.png" alt=""></li>
</ul>
<h2 id="selective-search">Selective Search</h2>
<ul>
<li>초기에 매우 작은 픽셀 단위의 region을 잡고, 유사성이 높은 region들을 점차적으로 병합해나가는 방법 <ul>
<li>색상, 질감, 경계 등을 기준으로 유사성이 높은 region을 병합</li>
</ul>
</li>
<li>Sliding window의 두 가지 단점 해결(계산 resource, 고정된 크기의 window)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/17b50d56-8676-4b90-b96c-39a534ce6f0c/image.png" alt=""></p>
<h2 id="r-cnn-pipeline">R-CNN Pipeline</h2>
<ol>
<li><p>Input image에서 selective search를 통해 약 2000개의 RoI(Region of Interest) 생성</p>
</li>
<li><p>각 RoI 영역을 모두 동일한 크기로 warping</p>
</li>
</ol>
<ul>
<li>이후에 통과할 CNN의 마지막 fc layer의 input size가 고정되어 있기 때문</li>
</ul>
<ol start="3">
<li>조정된 RoI를 각각 CNN에 넣어서 feature 추출 (2000x4096)</li>
</ol>
<ul>
<li>Region마다 4096-d의 feature vector로 추출</li>
<li>Pretrained AlexNet 사용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a52c8c2f-bed6-4822-99bc-0e4033db5ff9/image.png" alt=""></p>
<p>4-1. 추출된 feature vector를 SVM에 넣어서 각 RoI(region of interest)의 object에 대한 classification (2000x(C+1)) </p>
<ul>
<li>C+1: class 개수(C) + background(1)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a49e17d3-4212-42d9-bd59-f550dc387b05/image.png" alt=""></p>
<p>4-2. 추출된 feature vector를 regression을 통해 각 RoI의 bounding box 위치 조정 ● Selective search의 부정확한 bounding box 위치 조정</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f2d7d8dd-3f51-4430-92a5-394cd48bb1ff/image.png" alt=""></p>
<h1 id="fast-r-cnn">Fast R-CNN</h1>
<blockquote>
<p>R-CNN의 단점</p>
</blockquote>
<ul>
<li>약 2000개의 RoI 각각에 대해 CNN 연산 → 연산량이 많고 속도가 매우 느림</li>
<li>모든 RoI를 동일한 사이즈로 맞추기 위해 이미지를 crop/resize하는 과정 필요 → 성능 저하</li>
<li>Stage2의 모델(CNN, SVM, bbox reg) 모두 따로 학습</li>
</ul>
<p>Fast R-CNN</p>
<ul>
<li>단일 CNN을 통해 연산량 감소</li>
<li>RoI projection 모듈을 통해 CNN 연산을 줄이고 속도를 개선한 모델</li>
<li>RoI pooling 모듈을 통해 이미지 사이즈 강제 조정하는 과정 제거</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5b687bfd-b9cc-4440-b884-6f5c9b08cfd6/image.png" alt=""></p>
<h2 id="roi-projection의-등장-배경">RoI Projection의 등장 배경</h2>
<ul>
<li>R-CNN에서는 2000개의 RoI를 뽑고, 이후 CNN에 통과 (2000번의 CNN 연산)</li>
<li>→ CNN을 한번만 통과하여, feature vector를 얻을 수 있을까?</li>
<li>Feature map을 한번만 추출하고, 그 위에서 RoI 위치에 맞는 feature vector를 추출하자!</li>
<li>CNN 연산 2000번 → 1번</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d26787f5-153b-4ba6-896c-8f1874b51eb2/image.png" alt=""></p>
<blockquote>
<p>RoI Projection이란?</p>
</blockquote>
<ul>
<li>CNN 연산 이후, feature map의 사이즈가 변할 수 있음</li>
<li>사이즈가 변한 feature map에 RoI를 투영하는 과정</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/834bcc45-8295-4542-8fae-6931917e8247/image.png" alt=""></p>
<h2 id="roi-pooling">RoI Pooling</h2>
<p>RoI Pooling의 등장 배경</p>
<ul>
<li>CNN을 먼저 통과하기 때문에 RoI를 crop/resize하는 과정 없음</li>
<li>Fc layer의 input으로 들어가기 전에 feature vector 크기를 조정해야 함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/acd1f701-1533-46f5-8b08-d55ea56922d0/image.png" alt=""></p>
<p>RoI Pooling</p>
<p>어떤 크기의 feature map이 들어와도 동일한 사이즈로 pooling하고자 하는 방법</p>
<ul>
<li>RoI를 지정된 size(WxH)에 맞추기 위해 그리드 설정 (6<em>6→2</em>2 / 4<em>6→2</em>2)</li>
<li>설정된 각 그리드에서 max 값을 가져와서 최종적으로 같은 size로 통일</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/986ca247-63ef-4ef9-9798-30d37a5587c7/image.png" alt=""></p>
<h2 id="fast-r-cnn-pipeline">Fast R-CNN Pipeline</h2>
<p>1-1. Input image에서 selective search를 통해 약 2000개의 roi 생성 
1-2. 단일 CNN 연산으로 전체 feature map 생성
2. RoI projection, RoI pooling으로 각 RoI에 맞는 고정된 사이즈의 feature vector 생성
3. 추출된 feature vector에 대해 linear, softmax 연산 수행</p>
<ul>
<li>이후, 각 RoI의 object에 대한 classification과 Bounding box regression 수행</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/85b03e14-c981-4c01-8233-103fa87af279/image.png" alt=""></p>
<h1 id="faster-r-cnn">Faster R-CNN</h1>
<blockquote>
<p>R-CNN, Fast R-CNN의 단점</p>
</blockquote>
<ul>
<li>픽셀 단위부터 영역을 병합하는 selective search는 GPU와 CPU 연산이 모두 필요하며 매우 느림</li>
<li>GPU에서만 연산하는 network와 분리되어 end-to-end 학습이 불가능</li>
</ul>
<p>Faster R-CNN</p>
<ul>
<li>Selective search를 제거하고 Region Proposal Network(RPN) 모듈을 사용하여 연산을 더 가속화한 모델</li>
<li>전체 프레임워크가 한번에 연산되는 end-to-end 모델</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a7bee801-218d-494b-9662-a45395591b9b/image.png" alt=""></p>
<p>Region Proposal Network (RPN) 이란?</p>
<ul>
<li>GPU에서만 연산하여 RoI를 찾는 network를 만들자!</li>
<li>미리 지정된 크기의 anchor box를 이용하여 roi search</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/419a20ed-b624-4a11-a536-7d2d45653a26/image.png" alt=""></p>
<h2 id="region-proposal-network-rpn-동작-과정">Region Proposal Network (RPN) 동작 과정</h2>
<ol>
<li>CNN을 통해 얻은 feature map을 input으로 받아서 intermediate layer 생성 </li>
</ol>
<ul>
<li>3<em>3</em>256 또는 3<em>3</em>512 convolution 사용</li>
</ul>
<ol start="2">
<li>Intermediate layer의 feature map을 입력받아 classification</li>
</ol>
<ul>
<li>1<em>1</em>18 convolution: 2(object 여부) x 9(anchor의 개수)</li>
</ul>
<ol start="3">
<li>Intermediate layer의 feature map을 입력받아 bounding box regression </li>
</ol>
<ul>
<li>1<em>1</em>36 convolution: 4(bbox의 좌표) * 9(anchor 개수)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/bb657399-fa71-439f-82ed-fd0cf493ad9a/image.png" alt=""></p>
<h2 id="non-maximum-suppression-nms">Non-maximum Suppression (NMS)</h2>
<blockquote>
<p>RPN으로 생성된 RoI 중에서 유사한 bounding box들을 제거하기 위해 사용</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/ef397ebb-6be3-459d-be77-8a72c7578d52/image.png" alt=""></p>
<h2 id="faster-r-cnn-pipeline">Faster R-CNN Pipeline</h2>
<ol>
<li>CNN을 통해 전체 feature map 추출</li>
<li>생성된 feature map을 RPN, NMS 연산 후 RoI 생성</li>
<li>RoI projection, RoI pooling을 통해 모든 RoI를 동일한 사이즈로 변환</li>
<li>Softmax + bounding box regression 동시에 수행 (multi-task 학습)</li>
</ol>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/a3e9b466-7909-4cb6-a9ef-c73ab74a8f53/image.png" alt="">
<img src="https://velog.velcdn.com/images/pluto_0905/post/9ecad54b-0880-4172-82b0-fedc91223120/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CV] Transformer 이해]]></title>
            <link>https://velog.io/@pluto_0905/CV-Transformer-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@pluto_0905/CV-Transformer-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Thu, 22 Feb 2024 10:33:30 GMT</pubDate>
            <description><![CDATA[<h1 id="why-transformer">Why Transformer?</h1>
<ul>
<li>최근 computer vision domain에서도 transformer backbone이 주류<img src="https://velog.velcdn.com/images/pluto_0905/post/c84bd0bc-9cec-4ad3-bff5-6ab9644662a6/image.png" alt=""></li>
</ul>
<ul>
<li><p>Natural Language Processing (NLP)에서 생기는 문제점을 해결하기 위해 고안</p>
</li>
<li><p><strong>Long-term dependency</strong></p>
<ul>
<li>기존 모델들은 <strong>sequence data</strong>를 처리할 때 데이터를 <strong>순차적으로 처리</strong>함</li>
<li><strong>데이터 길이가 길어지면 정보 손실</strong>이 발생함</li>
</ul>
</li>
<li><p>Attention: Next token을 예측할 때, sequence 내의 다른 위치에 있는 정보들과의 상관 관계가 중요함</p>
<ul>
<li>a) The animal didn’t cross the street because <strong>it</strong> was too tired.</li>
<li>b) The animal didn’t cross the street because <strong>it</strong> was too wide.  </li>
</ul>
</li>
</ul>
<h2 id="cnn-한계점">CNN 한계점</h2>
<ul>
<li>Computer vision 분야에서도 NLP와 같은 문제에 발생<ul>
<li>Long-range dependency: 멀리 떨어진 두 물체에 대한 context를 학습하기 힘듦</li>
<li>Attention: 이미지 내의 여러 object들에 대한 상관 관계를 알 수가 없음</li>
</ul>
</li>
<li>Transformer가 기존 NLP의 문제점을 어떻게 해결했는지 분석</li>
<li>이후, 동일한 메커니즘을 computer vision에도 적용 (ViT)</li>
</ul>
<h1 id="transformer-구조">Transformer 구조</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d87cda99-bf49-41f9-a753-d908cec5f229/image.png" alt=""></p>
<h2 id="sentence-to-embedding">Sentence to Embedding</h2>
<ul>
<li><p>“Write a story” → 컴퓨터가 이해할 수 있는 무언가</p>
</li>
<li><p>컴퓨터는 무엇을 이해할 수 있을까?</p>
<ul>
<li>“Write a story” → 0,0,1,0,1,0,1,0,...,1 → Embedding </li>
</ul>
</li>
<li><p>Sentence를 embedding으로 변환할 필요가 있음</p>
</li>
<li><p>좀 더 효율적인 방법은 없을까?</p>
<ul>
<li>“I read a book” → [“I”, “read”, ...] → [“I”, “read”, ...]</li>
<li>“I’m reading a book” → [“I’m”, “reading”, ...] → [“I”, “_am”, “read”, “_ing”, ...]</li>
</ul>
</li>
</ul>
<h2 id="tokenization">Tokenization</h2>
<ul>
<li><p>문장을 토큰 단위로 분할</p>
<ul>
<li>Token은 단어, 구두점 등 ‘의미 있는 단위&#39;를 나타냄</li>
<li>문장의 시작이나 끝을 나타내는 token도 추가</li>
<li>각 token에 사전에 정의된 단어번호 할당</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/be665ff8-87b0-46f1-99e8-5331aa002505/image.png" alt=""></p>
</li>
</ul>
<h2 id="word-embedding">Word Embedding</h2>
<ul>
<li>Token을 embedding으로 변환</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/334d5836-0144-4ca7-8eac-b9db5f4f5e38/image.png" alt=""></p>
<ul>
<li>Sentence: “Write a story”</li>
<li>Token: [“Write”, “a”, “story”]</li>
<li>Embedding w/ hidden_size 4: [[0.5, 0.1, 0.2, 0.9], [0.7, 0.12, 0.35, 0.9], [0.1, 0.12, 0.56, 0.99]]</li>
<li>Shape<ul>
<li>() → (num_tokens) → (num_tokens, hidden_size) or (num_words, hidden_size) or (seq_len, hidden_size)</li>
</ul>
</li>
</ul>
<h2 id="positional-encoding">Positional Encoding</h2>
<ul>
<li>Word embedding은 단어의 위치까지 반영하지는 않음</li>
<li>그러나 다른 위치에 있는 같은 단어는 다른 의미를 가질 수 있음<ul>
<li>위치 정보(positional encoding)를 word embedding에 더하여 위치 정보를 추가</li>
</ul>
</li>
<li>최근에는 위치 정보 역시 학습 가능한 파라미터로 두는 경우가 많음</li>
<li>즉, nn.Embedding을 정의하고, 모델 업데이트 과정에서 이를 학습  </li>
</ul>
<pre><code>import torch
import torch.nn as nn

seq_len =10
embedding_dim = 768

embeddings = nn.Embedding(seq_len, embedding_dim)
print(embeddings(torch.LongTensor([0,1,2,3])))
print(embeddings(torch.LongTensor([0,1,2,3,])).shape)
</code></pre><p><img src="https://velog.velcdn.com/images/pluto_0905/post/8eb3f354-cb15-4c52-ae95-78d8c2828e8e/image.png" alt=""></p>
<h2 id="여기까지-recap">여기까지 Recap</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5ba89322-ca39-44d8-80bf-2234cbbeb802/image.png" alt=""></p>
<h2 id="self-attention">Self Attention</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/5d2f9b76-25d5-4b47-a987-a835fb008b1a/image.png" alt=""></p>
<ul>
<li><p>Input embedding이 query, key, value로 mapping</p>
<ul>
<li>Query: Attention을 확인하고 싶은 단어</li>
<li>Key: Input embedding의 모든 단어</li>
<li>Value: Input embedding 갖고 있는 정보</li>
</ul>
</li>
<li><p>Attention score</p>
<ul>
<li>Query와 key를 통해 attention score를 계산</li>
<li>Value를 곱함으로써 각각의 key가 가진 정보를 통합</li>
<li>각 query를 대표하는 attention value를 얻음  </li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/19e94ed3-5f43-4c95-922f-9a55760933b6/image.png" alt=""></p>
<ul>
<li>Hidden size에 따라 query, key 내적값이 커질 수 있음</li>
<li>이는 softmax 연산할 때 vanishing gradient 문제를 야기할 수 있음</li>
<li>안정적인 학습을 위해 hidden_size 크기에 패널티 추가</li>
</ul>
</li>
<li><p>Multi-head attention</p>
<ul>
<li>다양하고 복잡한 context를 학습 가능</li>
</ul>
</li>
</ul>
<h2 id="여기까지-recap-1">여기까지 Recap</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/c0301eb6-0cd2-42ac-ac3b-fe2a18933f1b/image.png" alt=""></p>
<h2 id="feed-forward">Feed forward</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/77442d1f-9bd9-49a5-a9f9-408587bec5d3/image.png" alt=""></p>
<ul>
<li>Add &amp; Norm: Attention이 반영된 embedding + 반영되기 전 embedding</li>
<li>이후, sequence context가 반영된 embedding을 fully connected layer에 통과</li>
<li>Multi-head attention과 feed forward를 합하여 encoder라고 정의함</li>
<li>Encoder를 여러개 쌓아 깊은 네트워크를 만들 수 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/45c529e1-d651-4c1a-8031-19d2aa3e7912/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CV] EfficientNet]]></title>
            <link>https://velog.io/@pluto_0905/CV-EfficientNet</link>
            <guid>https://velog.io/@pluto_0905/CV-EfficientNet</guid>
            <pubDate>Thu, 22 Feb 2024 08:38:00 GMT</pubDate>
            <description><![CDATA[<h1 id="introduction">Introduction</h1>
<ul>
<li>ResNet 이후 backbone 연구의 중요 한 축으로 wide &amp; deep</li>
<li>그 결과. CNN backbone의 이미지 이해 성능은 증가 했지만, parameter 크기가 커지고 속도가 느려짐</li>
<li>성능은 좋지만, 속도가 빠르고 크기가 작은 모델에 대한 요구 증가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/b1431574-0f8d-4786-b150-7a90c17c9959/image.png" alt=""></p>
<ul>
<li>일반적으로 효율성, 정확도 사이에 trade off</li>
<li>지금까지 모델 크기를 scale up하는 과정에 비효율이 있었던 것은 아닐까?</li>
<li>→ 효율적으로 scale up하는 방법을 찾아보자!</li>
<li>→ EfficientNet의 등장</li>
</ul>
<h1 id="efficinetnet">EfficinetNet</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/289c88c4-ae51-44a4-8243-5f5e3b183d6b/image.png" alt=""></p>
<ul>
<li>크게 세 가지 방향의 scale up이 있음</li>
<li>width scaling, depth scaling, resolution scaling</li>
</ul>
<h2 id="width-scaling">Width Scaling</h2>
<ul>
<li>Channel 사이즈를 키우는 방향</li>
<li>Channel의 사이즈를 크게 하면 이미지의 미세한 특징을 잘 잡아내는 경향이 있음</li>
<li>Wide하고 shallow한 네트워크는 이미지의 high-level feature를 이해하는 데 한계가 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/1c333b62-99d8-4d56-9804-6a30f722f2b2/image.png" alt=""></p>
<h2 id="depth-scaling">Depth Scaling</h2>
<ul>
<li>ResNet과 같이 네트워크를 깊게 쌓으면 high-level feature를 이해하는 데 도움이 됨</li>
<li>하지만, 네트워크가 깊어질수록 gradient vanishing의 위험이 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/e4534eca-0b49-4e34-ab29-76b65a6214e2/image.png" alt=""></p>
<h2 id="resolution-scaling">Resolution Scaling</h2>
<ul>
<li><p>이미지가 고화질인 경우 이미지의 미세한 특징들을 잘 잡아낼 수 있음</p>
</li>
<li><p>이미지 사이즈가 커짐에 따라 연산량 증가</p>
<ul>
<li>증가되는 연산량에 비해 accuracy가 많이 향상되지는 않음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/6fb452a3-26ad-41a9-9007-948661c5b8ae/image.png" alt=""></p>
</li>
</ul>
<h2 id="compund-scaling">Compund Scaling</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/e3fcf4b2-f9ea-47c9-8a7d-c1e7b2344327/image.png" alt=""></p>
<h2 id="observation-1">Observation 1</h2>
<ul>
<li>Scaling up 할수록 성능은 향상되지만, 향상되는 폭이 점차 감소함
<img src="https://velog.velcdn.com/images/pluto_0905/post/037fad62-4e4b-4802-b968-6c84d8855d5d/image.png" alt=""></li>
</ul>
<h2 id="observation-2">Observation 2</h2>
<ul>
<li>Better accuracy, efficiency를 달성할 수 있는 최적의 scale factor 값이 존재</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/9182575a-a944-4f87-8f22-e264d2ed7cf9/image.png" alt=""></p>
<h2 id="compound-scaling-method">Compound Scaling Method</h2>
<ul>
<li>Depth, width, resolution의 균형 파악하는 것이 중요<ul>
<li>수동으로 찾는 것에는 한계가 있음</li>
<li>따라서 compound scaling method 제안</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/24d387ae-0dc2-483c-9462-f2fba9c6b105/image.png" alt=""></p>
<ul>
<li>Depth, width, resolution의 균형 파악하는 것이 중요<ul>
<li>수동으로 찾는 것에는 한계가 있음</li>
<li>따라서 compound scaling method 제안</li>
</ul>
</li>
<li>𝜙를 1로 고정 후 ɑ,β,𝛄를 grid search<ul>
<li>ɑ=1.2, β=1.1, 𝛄=1.15</li>
<li>이때 네트워크를 EfficientNet-B0</li>
</ul>
</li>
<li>𝜙=1 을 기준으로 ɑ,β,𝛄를 고정 후 𝜙를 증가시켜 EfficientNetB1 ~ B7로 확장</li>
</ul>
<h1 id="results">Results</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f801d70e-3544-4c47-af44-ccf6b6560d89/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CV] Image Classification]]></title>
            <link>https://velog.io/@pluto_0905/CV-Image-Classification</link>
            <guid>https://velog.io/@pluto_0905/CV-Image-Classification</guid>
            <pubDate>Sun, 04 Feb 2024 12:27:02 GMT</pubDate>
            <description><![CDATA[<h1 id="image-classification이란">Image Classification이란?</h1>
<p>Image Classification: 컴퓨터 비전 분야에서 대중적인 task</p>
<ul>
<li>Architecture: Backbone (CNN) + Classification head (FC Layer)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/07225f6c-f754-4f3b-b4e8-9087aaad0482/image.png" alt=""></p>
<blockquote>
<ul>
<li>backbone에서는 이미지에 대한 특징 추출  </li>
</ul>
</blockquote>
<ul>
<li>fc에서 이미지가 속할 가능성이 있는 클래스에 대한 예측 수행</li>
<li>활성화함수 이용하여 각 클래스에 속할 확률 출력 (이미지 분류에선 softmax 많이 사용)</li>
</ul>
<p>가중치 업데이트는 당연히 backpropagation 이용 
: activation function -&gt; fully connected layer -&gt; backbone </p>
<ol>
<li>Forward Propagation:
입력이미지가 각 층의 뉴런을 통과하면서 가중치와 편향에 의해 변환</li>
<li>Loss Calculation:
출력에서 예측결과와 실제 label 차이를 계산하기 위해 loss function 사용</li>
<li>Backpropagation:
loss 최소화를 위한 과정 네트워크의 가중치 조정(손실함수에 대한 gradient 계산) 이를 통해 각 가중치의 기여도를 역으로 추정</li>
<li>Weight Update :
learning rate 조절하여 가중치 업데이트 </li>
<li>반복</li>
</ol>
<h1 id="image-classification-dataset">Image Classification Dataset</h1>
<h2 id="logits--softmax">Logits &amp; Softmax</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/749febca-2c2a-4a33-8a45-5c3e0cb5d743/image.png" alt=""></p>
<ul>
<li><p>Logits: 각 클래스에 대한 예측을 수치(실수값)로 나타내는 중간 단계
fully connected layer에서 이뤄진 class score == logit</p>
</li>
<li><p>Softmax 함수는 실수 전체의 범위를 가지는 logits을
지수 함수를 사용하여 클래스 간의 상대적 확률 (0 ~ 1 사이의 값) 계산</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/343802d3-a9b5-42e1-825b-06786c3d633a/image.png" alt=""></p>
<blockquote>
<p><strong>Dataset: (image, class) pair로 구성</strong></p>
</blockquote>
<h1 id="training-process">Training Process</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/58b216f7-a52a-4075-851a-60eb8836f485/image.png" alt=""></p>
<h2 id="preprocessing">Preprocessing</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/6e1f0162-51d5-44f5-90fc-116cbaecb36d/image.png" alt=""></p>
<h2 id="model">Model</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/65033324-fed2-4e47-bd5c-2a60d97bb234/image.png" alt=""></p>
<h2 id="loss">Loss</h2>
<ul>
<li>Loss function: 실제 class와 예측한 class의 차이를 줄이기 위해 사용</li>
<li>Cross-entropy loss를 이용해 loss function을 정의</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f0fd3a9f-d881-4236-8bde-5aedb300bceb/image.png" alt=""></p>
<h1 id="test-process">Test Process</h1>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/cfb57c75-341e-48c1-ad89-59b67d81c120/image.png" alt=""></p>
<blockquote>
<p>test도 train과 동일한 과정 거침. prediction만 다름 loss 측정도 X, prediction에 대한 evaluation metric: accuracy, precision, f1 score만 측정 </p>
</blockquote>
<h1 id="metric">Metric</h1>
<ul>
<li>모델이 잘 학습되었는지 판별하기 위해, 정량적인 평가로 Accuracy와 Precision Metric을 이용한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/d0b6fe5e-2f00-43ef-82bb-02f718715f3a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DL] 다양한 최적화 함수]]></title>
            <link>https://velog.io/@pluto_0905/DL-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@pluto_0905/DL-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%B5%9C%EC%A0%81%ED%99%94-%ED%95%A8%EC%88%98</guid>
            <pubDate>Thu, 01 Feb 2024 10:38:21 GMT</pubDate>
            <description><![CDATA[<p>모멘텀(Momentum), RMSProp, 그리고 Adam은 딥러닝에서 널리 사용되는 최적화 알고리즘.
각 알고리즘은 기존의 확률적 경사 하강법(Stochastic Gradient Descent, SGD)을 개선하여 보다 효율적으로 최적의 매개변수를 찾음.</p>
<h1 id="모멘텀-momentum">모멘텀 (Momentum):</h1>
<p>기본 개념: 모멘텀은 이전 그라디언트가 현재 업데이트에 영향을 미치도록 하는 방법으로, 물리학에서의 모멘텀 개념에서 영감을 받았습니다.
작동 원리: 이전 스텝의 그라디언트를 일정 비율만큼 현재 그라디언트에 더함으로써, 매개변수의 업데이트가 이전의 운동량을 반영하게 합니다.
장점: 지역 최소값(local minima)이나 안장점(saddle points)에 갇힐 가능성을 줄여주며, 이를 통해 최적화 과정이 보다 빠르고 안정적으로 이루어집니다.</p>
<h1 id="rmsprop">RMSProp:</h1>
<p>기본 개념: RMSProp은 가중치 업데이트 시 이전 그라디언트의 크기를 고려하여 학습률을 조정하는 방법입니다.
작동 원리: 이전 그라디언트의 제곱 평균을 계산하여, 각 매개변수에 대한 학습률을 조정합니다. 이로 인해 각 매개변수가 다른 속도로 업데이트됩니다.
장점: 모델이 최적점으로 수렴하는 속도를 개선하며, 비등방성 함수(anisotropic functions)에서 특히 효과적입니다.</p>
<h1 id="adam-adaptive-moment-estimation">Adam (Adaptive Moment Estimation):</h1>
<p>기본 개념: Adam은 모멘텀과 RMSProp의 아이디어를 결합한 알고리즘입니다.
작동 원리: 첫 번째 모멘트(평균)과 두 번째 모멘트(분산)의 추정치를 각각 계산하여, 이를 매개변수 업데이트에 사용합니다.
장점: 다양한 종류의 문제와 데이터에 대해 일반적으로 잘 작동하며, 특히 불균형한 데이터셋이나 불규칙한 데이터 분포에서 좋은 성능을 보입니다.</p>
<blockquote>
<p>이러한 알고리즘들은 각각의 특성과 장점을 가지고 있으며, 특정 문제에 대해 가장 적합한 알고리즘을 선택하는 것이 중요. 모멘텀은 일반적인 최적화 상황에서, RMSProp은 복잡한 비등방성 최적화 문제에서, Adam은 다양한 종류의 문제에 광범위하게 적용 가능한 효과적인 최적화 방법으로 널리 인정받고 있음.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[AI Researcher  현직자 특강]]></title>
            <link>https://velog.io/@pluto_0905/%EA%B9%80%EC%9D%98%EA%B2%B8-%ED%98%84%EC%A7%81%EC%9E%90-%ED%8A%B9%EA%B0%95</link>
            <guid>https://velog.io/@pluto_0905/%EA%B9%80%EC%9D%98%EA%B2%B8-%ED%98%84%EC%A7%81%EC%9E%90-%ED%8A%B9%EA%B0%95</guid>
            <pubDate>Thu, 01 Feb 2024 09:08:14 GMT</pubDate>
            <description><![CDATA[<h1 id="업스테이지-악명의-7단계">업스테이지 악명의 7단계</h1>
<p>Recruiting Process for Engineer/Developer
<strong>Step 1 서류전형 | 자기소개서,이력서,포트폴리오</strong></p>
<p><strong>Step 2 알고리즘 코딩 테스트</strong></p>
<p><strong>Step 3 딥러닝 코딩 테스트 (for AIRE)</strong></p>
<p><strong>Step 4 기술 인터뷰 1차</strong></p>
<p><strong>Step 5 기술 인터뷰 2차</strong></p>
<p><strong>Step 6 컬쳐 인터뷰 | Growth Ops.팀과의 인터뷰</strong></p>
<p><strong>Step 7 최종 인터뷰 | 경영진과의 인터뷰**</strong></p>
<ul>
<li>꾸준한 “연습”을 통해 준비해야 하는 부분(스텝2,3)</li>
<li>나의 경험과 지식을 “정리&quot;해야 하는 부분(스텝 4,5)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/521a348d-05b0-4e81-81b4-22c3b98ba28d/image.png" alt=""></p>
<h1 id="요구사항">요구사항</h1>
<p>주요 역량    역량 상세
기초 지식 이해 -프로그래밍 언어, 알고리즘, 프레임워크, CS 지식
문제 정의 역량 -“AI 문제를 정의하고 해결하는 능력” (이게 제일 중요!! 50명중 48명은 이게 중요하다고 함)
협업과 의사소통 -개발자와의 의사소통(e.g. GitHub) - issue reporting 받아서 conventional 정리 </p>
<p>&lt; summary &amp; mindset&gt;</p>
<ol>
<li><p>“개발자로 취업할거야!” 라고 하기에는 조금 더 산업군, 회사, 직군, 직무 범위라는 거시적 관점을 가져야 한다. - saas,platform, b2b,b2c인지 대기업인지 스탓텁인지</p>
</li>
<li><p>개발자가 개발하는 것은 결국 그 회사의 제품/서비스와 관련되어 있기 때문에, 제품 개발의 관점이 필요하다 .</p>
</li>
<li><p>그래서 특정 산업군 혹은 회사에 관한 자료 조사를 충분히 하고, 그 회사에서 필요로 하는 개발자의 상세 업무를 구체적으로 파악해야 한다.</p>
</li>
<li><p>일단의 목표는 ‘취업’이기 때문에, 회사 및 팀에서 원하는 역량을 구체적으로 정의내리고 이를 5개월 간 경험할 수 있도록 노력해야 한다.</p>
</li>
<li><p>모든 강의를 100% 소화할 수도, 할 필요도 없다.
다만, 를 명확하게 인지해야 한다. 이는 1.~4. 질문을 통한 “나의 맥락”에
이여야 한다.</p>
</li>
</ol>
<p>좋은’ 질문의 특징</p>
<ul>
<li>ex) 인공지능해야하면 수학공부 해야된다던데 어디까지 해야되나요? - 답변 애매
근데, 일단 좀 공부를 하고 나면 좀 더 narrow 한 질문을 하게 되고 이전 질문은 의미가 없어짐.( 이 차이를 아는 것도 중요) - 내가 얼마나 성장했는지 등등</li>
</ul>
<p>모델링을 잘하는 것도 좋지만 data centric으로 data 자체가 좋아야함 당연히.</p>
<p>대회 때 베이스라인 코드를 주는데 베이스라인 코드를 내가 직접 만들어보겠다.(이 과정에서 내가 힘을 주는 분야가 어디냐를 판단해야함.: 모든 강의를 100% 소화할 순 없다,) </p>
<ul>
<li>아카데믹적 역량 + 실무적인 역량 </li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/2d1cef51-1cac-4d96-9884-ce9191e92090/image.png" alt=""></p>
<p>AI/ML 핵심 원리 및 기초 지식 학습 경진대회를 통한 프로젝트 실습: (딥러닝, 도메인 이론, 프레임워크) ==&gt;  Practical Skill 연습하기</p>
<p>➔ 실제 데이터와 베이스코드를 통해 학습한 내용 적용하기
➔ 점진적인 모델 성능 향상을 경험하며 풍성한 실험
전개하기
➔ ML Pipeline의 주요한 영역을 농도 있게 경험하기</p>
<p>&lt; Strategy &amp; Mindset(1) ‘실험’을 할 때는, 이유를 파악하려고 하세요 &gt;</p>
<p>모델이 학습할 데이터의 퀄리티(전처리)와 모델 성능 상관분석, 여러 모델이 내는 결과를 비교분석, 데이터 - 모델 페어 동시 분석 등해야할일이참많습니다.
“중요한 것은 ‘문제를 해결하는 마음’입니다. 순위(등수)를 올리는 데 너무 몰두하지 마세요.
이론 강의에서 배운 여러 가지 기법들을 어떻게 실험해볼 수 있겠다는 가정으로 프로젝트에 참여하되,
모든 것은 실험으로 증명해야 한다는 것을 잊지마세요.
중요한 것은, ‘문제 정의’이기 때문에 다음의 고민들을 멈추지 마세요.
“내가 지금 풀어야 할 문제가 무엇인가?” “이 문제의 Input과 Output은 무엇인가?” “이 솔루션은 어디서 어떻게 사용되어지는가?” Notion, Tensorboard, Weight and Bias(WandB) 등의 도구를 활용하고 Notion, GitHub에 기록을 남기며 실험을 관리하시면 좋습니다.</p>
<p>어떠한 실험등을 했고 각각의 효과들이 들어났다가 이력서에 녹아있어야함.
-&gt; 이것을 아는 것이 왜?라는 의미 도출</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/fbdd6a1d-74f7-4793-a7a8-ec4fa6564d41/image.png" alt="">
이렇게 결론을 내고 이유를 함께 설명할 수 있어야함.</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/8266777f-d3ab-4f10-8b18-91ef49930ff4/image.png" alt="">
성능 올리는데 급급한게 아니라 다양한 시도,실험하는게 중요!! </p>
<p>전쟁과 같은 ai 서비스 개발에서 서비스 개발 관점에서의 뷰를 갖는 것이 중요하다.</p>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/7376937c-b6c0-4d0b-858d-c3258ad063ea/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CV] CV Backbone Overview]]></title>
            <link>https://velog.io/@pluto_0905/CV-CV-Backbone-Overview</link>
            <guid>https://velog.io/@pluto_0905/CV-CV-Backbone-Overview</guid>
            <pubDate>Thu, 01 Feb 2024 08:33:35 GMT</pubDate>
            <description><![CDATA[<h1 id="how-using-cv">How using CV?</h1>
<h2 id="tesla-autopilot">Tesla Autopilot</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/0f85dc05-9234-4856-89cf-6284c77229fa/image.png" alt=""></p>
<h2 id="medical-ai">Medical AI</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/cac3fba6-976b-40f1-8b27-14e245618e82/image.png" alt=""></p>
<h2 id="nerf-neural-radiance-field">NeRF (Neural Radiance Field)</h2>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/202b209f-a68a-4997-90a9-547716f03dbe/image.png" alt=""></p>
<blockquote>
<p>Neural Radiance Fields는 3차원 장면을 디지털로 재구성하는 데 사용되는 딥러닝 기반 기술</p>
</blockquote>
<h1 id="why-cnn">Why CNN?</h1>
<h2 id="multi-layer-perceptron">Multi Layer Perceptron</h2>
<ul>
<li>MLP는 input layer → hidden layers → output layer로 구성</li>
<li>Input layer의 <strong>neuron 개수</strong>는 <strong>tabular data의 feature 수와 동일</strong><ul>
<li>각 feature가 neuron에 대응되기 때문!</li>
</ul>
</li>
<li>MLP는 tabular data 를 학습하는 데 최적화 되어있음</li>
</ul>
<h2 id="mlp-in-cv">MLP in CV</h2>
<ul>
<li>이미지를 MLP의 input layer에 입력하려면 이미지를 flatten 해야함</li>
<li>이미지를 flatten하면 어떤 단점이 있을까?</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/8a2b4c77-5877-4ede-983e-ee8ba8ada18b/image.png" alt=""></p>
<h2 id="이미지의-locality-특성">이미지의 Locality 특성</h2>
<ul>
<li>Spatial locality: 같은 물체라도 이미지마다 크기가 다름</li>
<li>Positional invariance: 같은 물체라도 다른 위치에 있을 수 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/03ec165f-c64c-49f9-b54d-5a7a5317b62e/image.png" alt=""></p>
<h2 id="convolution-filter">Convolution Filter</h2>
<ul>
<li>Convolution filter를 사용하면 이미지를 flatten하지 않고 연산 가능</li>
<li>Object의 구조와 주변 정보를 함께 연산할 수 있음</li>
<li>같은 필터를 이미지 전체에 적용하여, 다른 위치에 똑같은 물체가 있는 경우 같은 연산을 수행</li>
</ul>
<p><img src="https://velog.velcdn.com/images/pluto_0905/post/f62c5ad9-28b7-4a63-8c66-90233b0eea2c/image.png" alt=""></p>
<h1 id="cnn의-한계점">CNN의 한계점</h1>
<ul>
<li>Convolution filter로 locality를 쉽게 파악 가능했지만 다음과 같은 한계점이 있음<ul>
<li>이미지 안에서 멀리 떨어진 객체끼리 관련성을 파악하기가 어려움</li>
<li>이미지의 각 파트가 이미지 이해에서 얼마나 중요한지, 얼마나 서로 관련이 있는지 평가할 수 없음</li>
</ul>
</li>
</ul>
<h2 id="transformer">Transformer</h2>
<blockquote>
<p>CNN 한계 극복을 위해 고안 </p>
</blockquote>
<ul>
<li>NLP에서 제안된 Transformer를 computer vision에 적용하여 해결</li>
<li>이를 기반으로 data-centric AI 시대의 도래</li>
</ul>
<ul>
<li>Natural Language Processing (NLP) task를 위해 고안<ul>
<li>Long-range dependency : 문장 안에서 멀리 떨어진 단어끼리도 서로 관계지을 수 있음</li>
<li>Self-attention mechanism : 각 단어들이 얼마나 서로 관련있는지 평가</li>
</ul>
</li>
</ul>
<p>  <img src="https://velog.velcdn.com/images/pluto_0905/post/5e9edf56-dd23-4244-a12e-e36da51301f5/image.png" alt=""></p>
<h3 id="vit--swin">ViT &amp; Swin</h3>
<ul>
<li>Transformer 구조를 computer vision에 적용하여 해결한 ViT (Vision Transformer) 등장</li>
<li>더 나아가 CNN 특성을 ViT에 다시 적용한 Swin Transformer</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>