<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>tannyrun 님의 블로그</title>
    <link>https://tannyrun.tistory.com/</link>
    <description>tannyrun 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 12:52:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>tannyrun</managingEditor>
    <item>
      <title>[딥러닝] GPT 논문읽기</title>
      <link>https://tannyrun.tistory.com/10</link>
      <description>&lt;p data-end=&quot;191&quot; data-start=&quot;95&quot; data-ke-size=&quot;size16&quot;&gt;논문제목 : Improving Language Understanding by Generative Pre-Training&lt;/p&gt;
&lt;p data-end=&quot;191&quot; data-start=&quot;95&quot; data-ke-size=&quot;size16&quot;&gt;저자 : Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever&lt;/p&gt;
&lt;p data-end=&quot;191&quot; data-start=&quot;95&quot; data-ke-size=&quot;size16&quot;&gt;논문링크&lt;/p&gt;
&lt;p data-end=&quot;191&quot; data-start=&quot;95&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-end=&quot;539&quot; data-start=&quot;461&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;539&quot; data-start=&quot;461&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;437&quot; data-start=&quot;419&quot; data-ke-size=&quot;size26&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;p data-end=&quot;587&quot; data-start=&quot;439&quot; data-ke-size=&quot;size16&quot;&gt;자연어 이해 분야에서는 다양한 과제들이 존재하지만, 각 문제를 해결할 충분한 라벨 데이터가 부족해 모델 학습이 어렵다. 이를 극복하기 위해 GPT는 대규모 비지도 텍스트 데이터를 활용하는 생성적 사전학습(generative pre-training) 방식을 도입했다.&lt;/p&gt;
&lt;p data-end=&quot;702&quot; data-start=&quot;589&quot; data-ke-size=&quot;size16&quot;&gt;생성적 사전학습은 텍스트 시퀀스에서 다음 단어를 예측하는 언어 모델링 작업을 수행함으로써, 모델이 문법, 문맥, 의미 구조를 자연스럽게 학습하도록 한다. 이를 통해 모델은 풍부한 언어 표현을 내재화한다.&lt;/p&gt;
&lt;p data-end=&quot;853&quot; data-start=&quot;704&quot; data-ke-size=&quot;size16&quot;&gt;사전학습된 모델은 이후 각 자연어 이해 태스크에 맞춰 판별적 미세조정(discriminative fine-tuning)을 거친다. 이때 모델 아키텍처는 거의 변경하지 않고, 태스크 특성에 맞는 입력 변환만 적용해 효율적으로 다양한 과제에 적응할 수 있도록 설계되었다.&lt;/p&gt;
&lt;p data-end=&quot;1047&quot; data-start=&quot;855&quot; data-ke-size=&quot;size16&quot;&gt;모델 아키텍처로 Transformer를 사용하는데, 이는 셀프 어텐션 메커니즘으로 긴 문맥 정보를 효과적으로 처리하며, 기존의 순환 신경망(RNN) 대비 안정적인 학습이 가능하다. 미세조정 시에도 입력 시퀀스를 단일 연속 토큰 시퀀스로 처리하는 traversal-style 방식을 사용해 간단하게 태스크별 입력을 변환한다.&lt;/p&gt;
&lt;p data-end=&quot;1047&quot; data-start=&quot;855&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1047&quot; data-start=&quot;855&quot; data-ke-size=&quot;size16&quot;&gt;간단하게 보는 GPT구조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be4jK7/btsOd6rwQ9q/U610UdULGYPAzqxxyMjjVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be4jK7/btsOd6rwQ9q/U610UdULGYPAzqxxyMjjVK/img.png&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;283&quot; data-is-animation=&quot;false&quot; style=&quot;width: 59.6362%; margin-right: 10px;&quot; data-widthpercent=&quot;60.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be4jK7/btsOd6rwQ9q/U610UdULGYPAzqxxyMjjVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe4jK7%2FbtsOd6rwQ9q%2FU610UdULGYPAzqxxyMjjVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;309&quot; height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mw89m/btsOeSznFQU/ckgRcN6qAHcu3OnWjtdBS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mw89m/btsOeSznFQU/ckgRcN6qAHcu3OnWjtdBS0/img.png&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;1162&quot; data-is-animation=&quot;false&quot; style=&quot;width: 39.201%;&quot; data-widthpercent=&quot;39.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mw89m/btsOeSznFQU/ckgRcN6qAHcu3OnWjtdBS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmw89m%2FbtsOeSznFQU%2FckgRcN6qAHcu3OnWjtdBS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;1162&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;앞의 단어로 뒤에 오는 단어 예측하는 방식 / 디코더를 사용하는 GPT&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1047&quot; data-start=&quot;855&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1072&quot; data-start=&quot;1054&quot; data-ke-size=&quot;size26&quot;&gt;2. Related Work&lt;/h2&gt;
&lt;p data-end=&quot;1210&quot; data-start=&quot;1074&quot; data-ke-size=&quot;size16&quot;&gt;GPT 연구는 자연어 처리에서 반지도 학습(semi-supervised learning) 범주에 속한다. 반지도 학습은 일부 라벨 데이터와 대규모 비지도 데이터를 함께 활용해 시퀀스 라벨링, 텍스트 분류 등 다양한 NLP 과제에 적용되어 왔다.&lt;/p&gt;
&lt;p data-end=&quot;1364&quot; data-start=&quot;1212&quot; data-ke-size=&quot;size16&quot;&gt;초기 연구들은 비지도 데이터를 활용해 단어나 구 단위 통계 정보를 추출해 지도학습 모델 특징으로 사용했고, 이후 단어 임베딩 기술 발전과 함께 레이블 없는 말뭉치에서 학습한 임베딩을 다양한 과제에 전이하는 방식이 보편화되었다. 다만 이들 접근은 주로 단어 단위에 집중했다.&lt;/p&gt;
&lt;p data-end=&quot;1364&quot; data-start=&quot;1212&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1481&quot; data-start=&quot;1366&quot; data-ke-size=&quot;size16&quot;&gt;최근 연구들은 문장이나 구 등 상위 수준의 의미 표현 학습에 집중하고 있다. 문장 임베딩(sentence embedding)이나 구 단위 표현은 여러 자연어 이해 태스크에서 효과적인 벡터 표현으로 활용된다.&lt;/p&gt;
&lt;p data-end=&quot;1481&quot; data-start=&quot;1366&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1629&quot; data-start=&quot;1483&quot; data-ke-size=&quot;size16&quot;&gt;비지도 사전학습(unsupervised pre-training)은 반지도 학습의 특별한 경우로, 주로 좋은 초기화 값을 찾는 데 초점을 둔다. 이미지 인식, 음성 인식, 기계 번역 등 다양한 분야에서 사전학습이 모델 일반화에 긍정적 영향을 주는 것으로 밝혀졌다.&lt;/p&gt;
&lt;p data-end=&quot;1776&quot; data-start=&quot;1631&quot; data-ke-size=&quot;size16&quot;&gt;GPT와 가장 가까운 연구들은 언어 모델링 목표로 사전학습한 후 지도학습 태스크에 맞춰 미세조정하는 방식을 택했다. 과거 LSTM 기반 모델은 장기 의존성 포착에 한계가 있었으나, GPT는 Transformer를 활용해 더 긴 범위 문맥을 효과적으로 학습한다.&lt;/p&gt;
&lt;p data-end=&quot;1776&quot; data-start=&quot;1631&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1902&quot; data-start=&quot;1778&quot; data-ke-size=&quot;size16&quot;&gt;또한 기존 연구 중 일부는 사전학습 모델의 내부 표현을 추가 특징으로 활용해 태스크를 학습했으나, 이는 태스크별 모델 파라미터 증가 문제를 낳았다. GPT는 미세조정 시 모델 구조 변경을 최소화해 전이 효율성을 극대화했다.&lt;/p&gt;
&lt;p data-end=&quot;2085&quot; data-start=&quot;1904&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로, 보조 학습 목표(auxiliary training objectives)를 추가하는 접근도 존재한다. 예를 들어 품사 태깅, 개체명 인식, 언어 모델링을 보조 목표로 활용해 주요 태스크 성능을 향상시킨 사례가 있다. GPT 역시 미세조정 과정에서 언어 모델링 손실을 보조 목표로 사용해 추가 성능 향상을 달성했다.&lt;/p&gt;
&lt;p data-end=&quot;2165&quot; data-start=&quot;2087&quot; data-ke-size=&quot;size16&quot;&gt;GPT는 이러한 연구 흐름 위에서 Transformer 아키텍처와 긴 문맥 학습, 전이 효율성을 모두 만족시키는 혁신적인 접근법을 제시했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;2194&quot; data-start=&quot;2172&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;2194&quot; data-start=&quot;2172&quot; data-ke-size=&quot;size26&quot;&gt;3. GPT 학습 Framework&lt;/h2&gt;
&lt;h3 data-end=&quot;2240&quot; data-start=&quot;2196&quot; data-ke-size=&quot;size23&quot;&gt;3.1 비지도 사전학습 (Unsupervised Pre-training)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2425&quot; data-start=&quot;2242&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2304&quot; data-start=&quot;2242&quot;&gt;대규모 라벨 없는 텍스트 말뭉치(BooksCorpus)를 활용해 다음 단어 예측 언어 모델링을 수행한다.&lt;/li&gt;
&lt;li data-end=&quot;2385&quot; data-start=&quot;2305&quot;&gt;Transformer 디코더 구조를 사용해, 입력 토큰 임베딩과 위치 임베딩을 결합하여 긴 문맥 내 단어 간 관계를 효과적으로 학습한다.&lt;/li&gt;
&lt;li data-end=&quot;2425&quot; data-start=&quot;2386&quot;&gt;멀티헤드 셀프 어텐션과 위치별 피드포워드 네트워크를 반복 적용한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P3fKK/btsOfA5YbKo/J02cBbnI2wcDMzgm2kHxqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P3fKK/btsOfA5YbKo/J02cBbnI2wcDMzgm2kHxqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P3fKK/btsOfA5YbKo/J02cBbnI2wcDMzgm2kHxqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP3fKK%2FbtsOfA5YbKo%2FJ02cBbnI2wcDMzgm2kHxqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1102&quot; height=&quot;475&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;2467&quot; data-start=&quot;2427&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;2467&quot; data-start=&quot;2427&quot; data-ke-size=&quot;size23&quot;&gt;3.2 지도 미세조정 (Supervised Fine-tuning)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2654&quot; data-start=&quot;2469&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2525&quot; data-start=&quot;2469&quot;&gt;사전학습된 모델 파라미터를 초기값으로 사용해 각 태스크별 데이터에 맞춰 모델을 다시 학습한다.&lt;/li&gt;
&lt;li data-end=&quot;2585&quot; data-start=&quot;2526&quot;&gt;입력 시퀀스를 Transformer에 통과시킨 후, 최종 층 출력을 선형 분류층에 연결해 예측한다.&lt;/li&gt;
&lt;li data-end=&quot;2654&quot; data-start=&quot;2586&quot;&gt;미세조정 시 기존 언어 모델링 손실에 적절한 가중치를 곱한 보조 손실을 추가해 학습 성능과 일반화를 동시에 향상시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;2670&quot; data-start=&quot;2656&quot; data-ke-size=&quot;size23&quot;&gt;태스크별 입력 변환&lt;/h3&gt;
&lt;p data-end=&quot;2758&quot; data-start=&quot;2672&quot; data-ke-size=&quot;size16&quot;&gt;GPT는 원래 연속된 텍스트 시퀀스 처리를 전제로 설계되었기에, 논리 추론, 질문 응답 등 구조화된 입력이 필요한 태스크에서는 입력 형식 변환이 필요하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2973&quot; data-start=&quot;2760&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2832&quot; data-start=&quot;2760&quot;&gt;문장 논리추론(Textual Entailment): 전제문과 가설문을 구분자 토큰($)으로 연결해 하나의 시퀀스로 만든다.&lt;/li&gt;
&lt;li data-end=&quot;2888&quot; data-start=&quot;2833&quot;&gt;의미 유사도(Similarity): 두 문장을 각각 처리 후 결과를 합산해 최종 출력 생성.&lt;/li&gt;
&lt;li data-end=&quot;2973&quot; data-start=&quot;2889&quot;&gt;질문 응답(Question Answering): 문서, 질문, 후보 답변을 구분자 토큰으로 나눠 독립 처리하고, 소프트맥스 확률 분포로 정답 예측.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3023&quot; data-start=&quot;2975&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;3047&quot; data-start=&quot;3030&quot; data-ke-size=&quot;size26&quot;&gt;4. Experiments&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3293&quot; data-start=&quot;3049&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3115&quot; data-start=&quot;3049&quot;&gt;사전학습 데이터는 BooksCorpus로, 7000권 이상의 미출간 도서를 포함하며 긴 문맥 학습에 적합하다.&lt;/li&gt;
&lt;li data-end=&quot;3195&quot; data-start=&quot;3116&quot;&gt;모델은 12층 Transformer 디코더 구조로, 각 층은 12개 멀티헤드 셀프 어텐션과 3072차원 피드포워드 네트워크로 구성된다.&lt;/li&gt;
&lt;li data-end=&quot;3293&quot; data-start=&quot;3196&quot;&gt;Adam 옵티마이저로 100 에폭 동안 512 토큰 길이 시퀀스를 미니배치 단위로 학습하며, Dropout, L2 정규화, GELU 활성화, BPE 토크나이징을 사용했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;3310&quot; data-start=&quot;3295&quot; data-ke-size=&quot;size23&quot;&gt;평가 Task 및 결과&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3598&quot; data-start=&quot;3312&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3382&quot; data-start=&quot;3312&quot;&gt;자연어 추론(NLI): SNLI, MultiNLI 등 5개 데이터셋에서 문장 쌍의 함의, 모순, 중립 관계를 분류&lt;/li&gt;
&lt;li data-end=&quot;3457&quot; data-start=&quot;3383&quot;&gt;질문 응답(Question Answering): RACE, Story Cloze 테스트로 긴 문서 내 복합 추론 능력을 평가&lt;/li&gt;
&lt;li data-end=&quot;3542&quot; data-start=&quot;3458&quot;&gt;문장 유사도(Sentence Similarity): MSR Paraphrase, Quora Question Pairs 등에서 의미 동등성 판단&lt;/li&gt;
&lt;li data-end=&quot;3598&quot; data-start=&quot;3543&quot;&gt;문장 분류(Classification): CoLA(문장 문법성), SST-2(감성 분석) 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3728&quot; data-start=&quot;3600&quot; data-ke-size=&quot;size16&quot;&gt;GPT는 대부분 태스크에서 기존 최첨단 모델과 경쟁하거나 능가하는 성능을 보였다. 특히 자연어 추론과 질문 응답에서 뛰어난 추론 및 긴 문맥 이해 능력을 입증했고, GLUE 벤치마크 등 멀티태스크 평가에서도 높은 점수를 기록했다.&lt;/p&gt;
&lt;p data-end=&quot;3728&quot; data-start=&quot;3600&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3728&quot; data-start=&quot;3600&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;3749&quot; data-start=&quot;3735&quot; data-ke-size=&quot;size26&quot;&gt;5. Analysis&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rVGRL/btsOfstCkRf/VIsnQObuTqK861DmdjEhDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rVGRL/btsOfstCkRf/VIsnQObuTqK861DmdjEhDk/img.png&quot; data-alt=&quot;사전학습 층 수 / 제로샷 성능 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rVGRL/btsOfstCkRf/VIsnQObuTqK861DmdjEhDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrVGRL%2FbtsOfstCkRf%2FVIsnQObuTqK861DmdjEhDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;304&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;304&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사전학습 층 수 / 제로샷 성능 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;3767&quot; data-start=&quot;3751&quot; data-ke-size=&quot;size23&quot;&gt;1. 사전학습 층 수의 영향&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;345&quot; data-start=&quot;118&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;157&quot; data-start=&quot;118&quot;&gt;X축: 전이한 Transformer 층 수 (0 ~ 12층)&lt;/li&gt;
&lt;li data-end=&quot;192&quot; data-start=&quot;158&quot;&gt;Y축 (왼쪽): RACE Dev 성능 (% 정확도)&lt;/li&gt;
&lt;li data-end=&quot;232&quot; data-start=&quot;193&quot;&gt;Y축 (오른쪽): MultiNLI Dev 성능 (% 정확도)&lt;/li&gt;
&lt;li data-end=&quot;345&quot; data-start=&quot;233&quot;&gt;선 색상 및 종류:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;345&quot; data-start=&quot;252&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;270&quot; data-start=&quot;252&quot;&gt;파란색 실선: RACE Dev&lt;/li&gt;
&lt;li data-end=&quot;293&quot; data-start=&quot;273&quot;&gt;파란색 점선: RACE Train&lt;/li&gt;
&lt;li data-end=&quot;318&quot; data-start=&quot;296&quot;&gt;주황색 실선: MultiNLI Dev&lt;/li&gt;
&lt;li data-end=&quot;345&quot; data-start=&quot;321&quot;&gt;주황색 점선: MultiNLI Train&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;358&quot; data-start=&quot;347&quot; data-ke-size=&quot;size20&quot;&gt;해석:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;552&quot; data-start=&quot;359&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;436&quot; data-start=&quot;359&quot;&gt;층 수가 많을수록 성능이 오른다. 특히 MultiNLI Dev 성능은 전이 층 수가 12에 가까워질수록 거의 9% 이상 향상됨.&lt;/li&gt;
&lt;li data-end=&quot;498&quot; data-start=&quot;437&quot;&gt;학습 데이터와 평가 데이터 간 성능 차이도 함께 증가하지만, Dev 기준으로도 충분히 이득을 본다.&lt;/li&gt;
&lt;li data-end=&quot;552&quot; data-start=&quot;499&quot;&gt;이는 Transformer의 각 층이 고유한 유용한 표현을 학습하고 있음을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;3855&quot; data-start=&quot;3845&quot; data-ke-size=&quot;size23&quot;&gt;2. 사전학습 업데이트 수에 따른 제로샷 성능 변화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;959&quot; data-start=&quot;628&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;674&quot; data-start=&quot;628&quot;&gt;X축 (로그 스케일): 사전학습 업데이트 횟수 (예: 10&amp;sup3; ~ 10⁶)&lt;/li&gt;
&lt;li data-end=&quot;733&quot; data-start=&quot;675&quot;&gt;Y축: 각 태스크별 상대 성능 (baseline~state-of-the-art 사이 정규화됨)&lt;/li&gt;
&lt;li data-end=&quot;959&quot; data-start=&quot;734&quot;&gt;선 색상:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;959&quot; data-start=&quot;748&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;781&quot; data-start=&quot;748&quot;&gt;파란색: Sentiment analysis (감정 분석)&lt;/li&gt;
&lt;li data-end=&quot;831&quot; data-start=&quot;784&quot;&gt;초록색: Winograd schema resolution (문맥 기반 의미 추론)&lt;/li&gt;
&lt;li data-end=&quot;878&quot; data-start=&quot;834&quot;&gt;주황색: Linguistic acceptability (문법적 수용성 판단)&lt;/li&gt;
&lt;li data-end=&quot;914&quot; data-start=&quot;881&quot;&gt;빨간색: Question answering (질문 응답)&lt;/li&gt;
&lt;li data-end=&quot;940&quot; data-start=&quot;917&quot;&gt;검정 실선: Transformer 모델&lt;/li&gt;
&lt;li data-end=&quot;959&quot; data-start=&quot;943&quot;&gt;회색 점선: LSTM 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;972&quot; data-start=&quot;961&quot; data-ke-size=&quot;size20&quot;&gt;해석:&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1187&quot; data-start=&quot;973&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1020&quot; data-start=&quot;973&quot;&gt;사전학습 업데이트가 증가할수록 거의 모든 태스크에서 성능이 꾸준히 상승&lt;/li&gt;
&lt;li data-end=&quot;1076&quot; data-start=&quot;1021&quot;&gt;Transformer는 대부분의 태스크에서 LSTM보다 훨씬 높은 제로샷 성능을 기록&lt;/li&gt;
&lt;li data-end=&quot;1132&quot; data-start=&quot;1077&quot;&gt;특히 감정 분석(SST-2), 문법성 판단(CoLA), QA 태스크에서도 명확한 개선이 나타남&lt;/li&gt;
&lt;li data-end=&quot;1187&quot; data-start=&quot;1133&quot;&gt;이는 GPT가 사전학습만으로도 일반적인 언어 이해 능력을 갖췄다는 증거&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;3983&quot; data-start=&quot;3965&quot; data-ke-size=&quot;size23&quot;&gt;Ablation Study&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4204&quot; data-start=&quot;3985&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4068&quot; data-start=&quot;3985&quot;&gt;보조 언어 모델링 손실을 미세조정에서 제외하면 일부 태스크에서 성능 저하가 발생, 특히 데이터가 큰 태스크에서 보조 목표의 중요성을 확인했다.&lt;/li&gt;
&lt;li data-end=&quot;4132&quot; data-start=&quot;4069&quot;&gt;Transformer는 LSTM보다 평균 5.6점 높은 성능을 보여 장기 의존성 학습에 유리함을 입증했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전학습 없이 지도학습만 진행하면 평균 14.8% 성능 저하가 나타나, 사전학습이 모델 성능과 일반화에 결정적임을 강조했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;4227&quot; data-start=&quot;4211&quot; data-ke-size=&quot;size26&quot;&gt;6. Conclusion&lt;/h2&gt;
&lt;p data-end=&quot;4301&quot; data-start=&quot;4229&quot; data-ke-size=&quot;size16&quot;&gt;본 연구는 생성적 사전학습과 판별적 미세조정을 결합한 단일 범용 모델을 통해 강력한 자연어 이해를 달성하는 프레임워크를 제시한다.&lt;/p&gt;
&lt;p data-end=&quot;4390&quot; data-start=&quot;4303&quot; data-ke-size=&quot;size16&quot;&gt;대규모 연속 텍스트로 사전학습함으로써 모델은 풍부한 세계 지식과 장기 의존성 처리 능력을 자연스럽게 습득하고, 이를 다양한 판별 과제에 성공적으로 전이했다.&lt;/p&gt;
&lt;p data-end=&quot;4520&quot; data-start=&quot;4392&quot; data-ke-size=&quot;size16&quot;&gt;12개 데이터셋 중 9개에서 기존 최고 성능을 경신하며, 비지도 사전학습이 판별적 태스크 성능 향상의 핵심임을 입증했다. 또한 Transformer 아키텍처와 긴 문맥을 담은 텍스트 데이터가 이 접근법에 특히 효과적임을 보여준다.&lt;/p&gt;
&lt;p data-end=&quot;4605&quot; data-start=&quot;4522&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/10</guid>
      <comments>https://tannyrun.tistory.com/10#entry10comment</comments>
      <pubDate>Tue, 27 May 2025 17:36:52 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] BERT 논문읽기</title>
      <link>https://tannyrun.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;논문링크 : &lt;a href=&quot;https://arxiv.org/abs/1810.04805&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1810.04805&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747874030049&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&quot; data-og-description=&quot;We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unla&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1810.04805&quot; data-og-url=&quot;https://arxiv.org/abs/1810.04805v2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h5Cox/hyYVfq0axO/ZVhxe8ZAwx1T7VNQgXvkoK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/oBhUH/hyYU349893/zjyLNxcI7YTWnLKsRcUnn0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1810.04805&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1810.04805&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h5Cox/hyYVfq0axO/ZVhxe8ZAwx1T7VNQgXvkoK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/oBhUH/hyYU349893/zjyLNxcI7YTWnLKsRcUnn0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unla&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;논문: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자 Jacob Devlin&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Ming-Wei Chang&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Kenton Lee&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Kristina Toutanova&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT를 알아보자!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT : Bidirectional Encoder Representation from Transformer&lt;/p&gt;
&lt;p data-end=&quot;162&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;Transformer 기반 양방향 인코더 표현 모델을 의미&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;347&quot; data-start=&quot;164&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;205&quot; data-start=&quot;164&quot;&gt;&lt;b&gt;Bidirectional&lt;/b&gt;: 왼쪽과 오른쪽 문맥을 동시에 고려&lt;/li&gt;
&lt;li data-end=&quot;247&quot; data-start=&quot;206&quot;&gt;&lt;b&gt;Encoder&lt;/b&gt;: Transformer 구조 중 인코더만 사용&lt;/li&gt;
&lt;li data-end=&quot;289&quot; data-start=&quot;248&quot;&gt;&lt;b&gt;Representation&lt;/b&gt;: 단어/문장의 의미를 벡터로 표현&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;471&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문장의 전체 문맥을 이해할 수 있도록 양방향으로 정보를 인코딩&lt;/b&gt;하는 것이 핵심!GPT는 Decoder 기반 단방향 모델이고, BERT는 Encoder 기반 양방향 모델이라는 점에서 큰 차이가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;471&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;471&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Bert에서 pre-train의 목적 2가지&lt;/p&gt;
&lt;p data-end=&quot;471&quot; data-start=&quot;349&quot; data-ke-size=&quot;size16&quot;&gt;1. Masked language model(MLM) : 특정 부분을 Mask로 가려두고 그 부분을 예측하는 모델( 앞, 뒤 단어를 모두 고려)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Next sentence pridiction(NSP) : 두 문장이 주어졌을 때 두 번째 문장이 첫 번째 문장의 실제 다음 문장인지 맞히는 Task&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT의 Architecture&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OQaFz/btsNMBDOe0Z/OhrfM8UKLW0eUOPklKae61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OQaFz/btsNMBDOe0Z/OhrfM8UKLW0eUOPklKae61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OQaFz/btsNMBDOe0Z/OhrfM8UKLW0eUOPklKae61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOQaFz%2FbtsNMBDOe0Z%2FOhrfM8UKLW0eUOPklKae61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1050&quot; height=&quot;674&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bert = Multi-layer bidirectional Transformer encoder&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;L : number of layers(Transformer block)&lt;/li&gt;
&lt;li&gt;H : hidden size&lt;/li&gt;
&lt;li&gt;A : number of *self attention heads&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;112&quot; data-start=&quot;37&quot; data-ke-size=&quot;size16&quot;&gt;Self-Attention Head는 문장 속 단어들이 서로 얼마나 관련 있는지를 계산하는 역할을 한다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;231&quot; data-start=&quot;114&quot; data-ke-size=&quot;size16&quot;&gt;하나의 Head만 있으면 한 가지 관점만 볼 수 있기 때문에, 여러 개의 Head를 두고 각기 다른 시각에서 관계를 보게 만드는 게 바로 Multi-head Attention이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;231&quot; data-start=&quot;114&quot; data-ke-size=&quot;size16&quot;&gt;어떤 Head는 문법적인 관계를, 어떤 Head는 의미적인 흐름을 본다고 생각하면 됨&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;231&quot; data-start=&quot;114&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;838&quot; data-start=&quot;758&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;797&quot; data-start=&quot;758&quot;&gt;&lt;b&gt;BERT Base&lt;/b&gt;: 실무 적용, 빠른 실험, 저사양 환경 ( L =12, H=768, A=12 / total parameter = 110M)&lt;/li&gt;
&lt;li data-end=&quot;797&quot; data-start=&quot;758&quot;&gt;&lt;b&gt;BERT Large&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;: 정확도 최우선, 연구 목적, 고성능 서버 ( L =24, H=1024, A=16 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;/ total parameter = 340M&lt;/span&gt; )&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Bert의 input : single sentence &amp;amp; a pair of sentences&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;완전한 문장, 단어의 결합 형태 모두 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Bert에서의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;sentence&lt;span&gt; &lt;/span&gt;&lt;/span&gt;정의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;sentence : 연속적인 text의 나열, 집합&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;sequence : bert의 입력, single sentence 또는 두 개 이상의 sentence (완전한 문장이 아니어도 됨)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;버트 구조 설명&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t7XgI/btsN6vdWOC2/xb6WklpIzLeOctcceOiZY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t7XgI/btsN6vdWOC2/xb6WklpIzLeOctcceOiZY0/img.png&quot; data-alt=&quot;열심히 만들었습니다 ㅎㅎ..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t7XgI/btsN6vdWOC2/xb6WklpIzLeOctcceOiZY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft7XgI%2FbtsN6vdWOC2%2Fxb6WklpIzLeOctcceOiZY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1110&quot; height=&quot;498&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;열심히 만들었습니다 ㅎㅎ..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Bert : Input/Output Representations&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;버트의 입출력 표현은 1) Token embedding 2) Segment embedding 3) Position embedding 의 합으로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1) 단어정보, Word Piece 논문에서는 30000개의 token vocabulary사용 2) 문장 구분(문장 갯수만큼의 세그먼트 값이 생김) &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;3) 토큰의 위치정보&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HKhTN/btsN6mn0Wd1/ewoGiGFBUjr5oMgXKTpy60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HKhTN/btsN6mn0Wd1/ewoGiGFBUjr5oMgXKTpy60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HKhTN/btsN6mn0Wd1/ewoGiGFBUjr5oMgXKTpy60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHKhTN%2FbtsN6mn0Wd1%2FewoGiGFBUjr5oMgXKTpy60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;892&quot; height=&quot;314&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Pre-training Bert&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Task 1. Masked language Model (MLM)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;논문에서는 각 sequence의 15%가 Mask 토큰으로 구성됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gmh4w/btsNUz071Mb/hkT9sFKK8iKo9dMldinGMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gmh4w/btsNUz071Mb/hkT9sFKK8iKo9dMldinGMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gmh4w/btsNUz071Mb/hkT9sFKK8iKo9dMldinGMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGmh4w%2FbtsNUz071Mb%2FhkT9sFKK8iKo9dMldinGMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;398&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sequence의 단어가 가 bert 를 거쳐 최종 값으로 나오면, 하나의 층(Fully-connected layer)을 추가하여 GELU + Norm 과정을 거친다. 그랬을 때 나오는 토큰w'4이 실제 토큰w4가 되도록 학습함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*ElMo : 정방향과 역방향 모델을 따로 따로 학습하여 마치 양방향인 것 처럼 두 예측값을 선형결합하여 도출함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MLM의 문제점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마스킹은 pre training 과정에서만 일어나고 fine tuning 단계에서는 일어나지 않는다. 따라서 이 두 과정에서 토큰들이 mismatch 할 수 있음.(pre-training에서만 마스킹 처리하고 fine-tuning 에서는 마스킹 처리 하지 않으니까 생기는 문제!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 해결방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 단어가 마스킹 된다고 정해졌을 때, 80%는 실제로 mask 처리를 하고, 10%는 랜덤하게 다른 단어로 치환하고, 10%는 그대로 사용해줌&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2o83i/btsNSMN8Tu2/T5qhpvkKX81sxDc1nO6gck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2o83i/btsNSMN8Tu2/T5qhpvkKX81sxDc1nO6gck/img.png&quot; data-alt=&quot;80 10 10 일 때 검증 데이터에서 퍼포먼스가 가장 좋았음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2o83i/btsNSMN8Tu2/T5qhpvkKX81sxDc1nO6gck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2o83i%2FbtsNSMN8Tu2%2FT5qhpvkKX81sxDc1nO6gck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;264&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;80 10 10 일 때 검증 데이터에서 퍼포먼스가 가장 좋았음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pre-training Bert&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Task 2. Next Sentence Preiction (NSP) 다음 문장 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제: QA와 같이 문장들 사이의 관계를 고려해야 하는 경우, 문장단위(문장 하나에서만 동작)의 랭기지 모델인 지피티나 ELMo같은 경우 제대로된 학습과 예측을 하기 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt;&amp;gt; 문장을 학습할 때 train 문장을 다음과 같이 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;291&quot; data-start=&quot;145&quot;&gt;50% of the time B is the actual next sentence that follows A (IsNext)&lt;br /&gt;&amp;rarr; 전체 데이터 중 50%의 경우, B는 A 다음에 실제로 오는 문장입니다. 이 경우는 &quot;IsNext&quot;로 라벨링&lt;/li&gt;
&lt;li data-end=&quot;429&quot; data-start=&quot;293&quot;&gt;50% of the time it is a random sentence from the corpus (NotNext)&lt;br /&gt;&amp;rarr; 나머지 50%의 경우, B는 A와 무관한 랜덤한 문장입니다. 이 경우는 &quot;NotNext&quot;로 라벨링&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C is used for next sentence prediction&lt;br /&gt;&amp;rarr; 여기서 C는 Next Sentence Prediction (NSP)을 수행하는 데 사용되며 문장의 연속성 여부를 이진분류(0/1)로 수행함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; C토큰은 [cls]토큰의 final 임베딩 벡터이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;126&quot; data-start=&quot;21&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;75&quot; data-start=&quot;21&quot;&gt;C = 0: B가 A 다음에 실제로 오는 문장이 아닌 경우 (NotNext)&lt;/li&gt;
&lt;li data-end=&quot;126&quot; data-start=&quot;76&quot;&gt;C = 1: B가 A 다음에 실제로 오는 문장인 경우 (IsNext)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zfrNJ/btsN8GdH4Hd/hXIg2J1kDvCQY7k74POdOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zfrNJ/btsN8GdH4Hd/hXIg2J1kDvCQY7k74POdOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zfrNJ/btsN8GdH4Hd/hXIg2J1kDvCQY7k74POdOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzfrNJ%2FbtsN8GdH4Hd%2FhXIg2J1kDvCQY7k74POdOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;120&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT에 두 문장(A와 B)이 입력된 경우 [CLS]는 이 두 문장의 관계나 의미를 요약하는 벡터로 표현되는데, NSP 작업에서는 [CLS] 벡터를 softmax함수로 0 또는 1로 매핑하여 문장 A와 B가 연속된 문장인지 (C = 1) 또는 무작위로 연결된 문장인지 (C = 0)를 예측한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BERT, OPEN AI GPT, ELMo&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9fs3y/btsNUTLNSgM/dByQu23A0ZRZ1klhx58K6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9fs3y/btsNUTLNSgM/dByQu23A0ZRZ1klhx58K6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9fs3y/btsNUTLNSgM/dByQu23A0ZRZ1klhx58K6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9fs3y%2FbtsNUTLNSgM%2FdByQu23A0ZRZ1klhx58K6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;222&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ELMo : 똑같은 sequence에 대해서 정방향, 역방향의 lstm을 여러단계 학습해서 각 토큰값에 대한 lstm결과를 선형결합하여 예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT : 트랜스포머의 디코더만 이용해 학습. 왼쪽에서 오른쪽으로 이전에 생성된 단어만을 기반으로 다음 단어를 예측, GPT는 생성된 단어를 하나씩 추가하며 다음 단어를 예측하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT : 양방향. 앞 뒤 단어 모두 반영하여 단어 예측, 문장 전체 문맥 반영. Transformer&amp;nbsp;인코더로&amp;nbsp;마스킹된&amp;nbsp;단어와&amp;nbsp;문장&amp;nbsp;관계&amp;nbsp;예측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Fine-tuning BERT&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버트의 맨 윗단에 레이어를 하나 얹어 놓음으로써 어떤 corpuse도 처리할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버트는 다양한구조 처리가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RWOZ1/btsNXpKaFh8/2kMPPt3ORDevz3LPJmw6uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RWOZ1/btsNXpKaFh8/2kMPPt3ORDevz3LPJmw6uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RWOZ1/btsNXpKaFh8/2kMPPt3ORDevz3LPJmw6uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRWOZ1%2FbtsNXpKaFh8%2F2kMPPt3ORDevz3LPJmw6uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;582&quot; height=&quot;568&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 그냥 자연어 처리 (문장이 실제로 순서대로 위치했는지를 판단)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. QNA (질문과 답을 입력으로 받아 답을 예측)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 감성분석( 하나의 sentence를 입력으로 받아 class label 판단)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 형태소 분석(하나의 토큰에 대해서 각각 분석)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;experiments&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;GLUE&lt;/b&gt; (General Language Understanding Evaluation) 자연어&amp;nbsp;이해&amp;nbsp;성능을&amp;nbsp;평가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R1wvM/btsN5RIiFbJ/1arn8eCjRoLHaKUDEeKmhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R1wvM/btsN5RIiFbJ/1arn8eCjRoLHaKUDEeKmhk/img.png&quot; data-alt=&quot;Bert가 성능이 좋았다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R1wvM/btsN5RIiFbJ/1arn8eCjRoLHaKUDEeKmhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR1wvM%2FbtsN5RIiFbJ%2F1arn8eCjRoLHaKUDEeKmhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;933&quot; height=&quot;187&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Bert가 성능이 좋았다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;SQuAD&amp;nbsp;&lt;/b&gt;(The&amp;nbsp;Stanford&amp;nbsp;Question&amp;nbsp;Answering&amp;nbsp;Dataset)&amp;nbsp;실험 &lt;br /&gt;Wikipedia 문서에서 생성된 100,000개 이상의 질문-정답 쌍 &amp;rarr;&amp;nbsp;질문이&amp;nbsp;주어지면&amp;nbsp;정답을&amp;nbsp;예측하는&amp;nbsp;실험&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0Z3Pv/btsN78uX5Am/bi4UqOv4GfnEM0HQYfVGs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0Z3Pv/btsN78uX5Am/bi4UqOv4GfnEM0HQYfVGs0/img.png&quot; data-alt=&quot;앙상블, 엘모 모델보다 버트의 성능이 더 좋았다는 내용!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0Z3Pv/btsN78uX5Am/bi4UqOv4GfnEM0HQYfVGs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0Z3Pv%2FbtsN78uX5Am%2Fbi4UqOv4GfnEM0HQYfVGs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;349&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;앙상블, 엘모 모델보다 버트의 성능이 더 좋았다는 내용!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EM&amp;nbsp;(Exact&amp;nbsp;Match):&amp;nbsp;정답과&amp;nbsp;예측이&amp;nbsp;완전히&amp;nbsp;일치한&amp;nbsp;비율. &lt;br /&gt;F1 (F1 Score): 정답의 단어 중 예측된 단어의 정확도.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Ablation Studies &lt;/b&gt;&lt;br /&gt;1) Effect of Pre-training Tasks &amp;rarr; Pre-training의 MLM &amp;amp; NSP 효과를 알아보는 실험&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; 해당 실험 사용모델 4가지 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SizeBERT&amp;nbsp;(Base):&amp;nbsp;MLM&amp;nbsp;+&amp;nbsp;NSP&amp;nbsp;(양방향+문맥)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;No&amp;nbsp;NSP&amp;nbsp;:&amp;nbsp;MLM&amp;nbsp;(양방향)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTR&amp;nbsp;&amp;amp;&amp;nbsp;No&amp;nbsp;NSP&amp;nbsp;:&amp;nbsp;단방향&amp;nbsp;+&amp;nbsp;문맥X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTR&amp;nbsp;&amp;amp;&amp;nbsp;No&amp;nbsp;NSP&amp;nbsp;+&amp;nbsp;BiLSTM&amp;nbsp;:&amp;nbsp;LSTM&amp;nbsp;추가Pre-training의&amp;nbsp;MLM&amp;nbsp;&amp;amp;&amp;nbsp;NSP&amp;nbsp;효과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mE4CX/btsN8wbjIlG/Eadk2S8YJ7sU8kiGGkmvl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mE4CX/btsN8wbjIlG/Eadk2S8YJ7sU8kiGGkmvl0/img.png&quot; data-alt=&quot;MLM &amp;amp;amp; NSP 가 문장 예측에 효과적이다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mE4CX/btsN8wbjIlG/Eadk2S8YJ7sU8kiGGkmvl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmE4CX%2FbtsN8wbjIlG%2FEadk2S8YJ7sU8kiGGkmvl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;171&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;171&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MLM &amp;amp; NSP 가 문장 예측에 효과적이다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2) Effect of Model Size &amp;rarr; 모델 사이즈가 클수록 성능이 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. Feature-based&amp;nbsp;Approach&amp;nbsp;with&amp;nbsp;BER&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tfine-tuning을 거치지 않고 pre-train된 모델만가지고 NER Task를 수행하면 어떨까?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCAYwP/btsN8vpXgZ7/OyWhSGlcXEhEsPWCzzvLA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCAYwP/btsN8vpXgZ7/OyWhSGlcXEhEsPWCzzvLA0/img.png&quot; data-alt=&quot;feature based 접근법보다 fine-tuning 접근법이 효과적이다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCAYwP/btsN8vpXgZ7/OyWhSGlcXEhEsPWCzzvLA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCAYwP%2FbtsN8vpXgZ7%2FOyWhSGlcXEhEsPWCzzvLA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;415&quot; height=&quot;336&quot; data-origin-width=&quot;415&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;feature based 접근법보다 fine-tuning 접근법이 효과적이다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;## 참고 유튜브&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IwtexRHoWG0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=IwtexRHoWG0&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다~~&lt;/p&gt;</description>
      <category>딥러닝</category>
      <category>BERT</category>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/9</guid>
      <comments>https://tannyrun.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 22 May 2025 09:30:55 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] Transformer 논문 읽기</title>
      <link>https://tannyrun.tistory.com/8</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; Attention Is All You Need (Transformer)&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Ashish Vaswani&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Noam Shazeer&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Niki Parmar&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Jakob Uszkoreit&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Llion Jones&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Aidan N. Gomez&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Lukasz Kaiser&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;Illia Polosukhin&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;논문링크 : &lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1706.03762&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1746950804288&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Attention Is All You Need&quot; data-og-description=&quot;The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new &quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1706.03762&quot; data-og-url=&quot;https://arxiv.org/abs/1706.03762v7&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/J196i/hyYRv7RtpV/R1UJyLUnPb1HycFbjj4KUK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bW554I/hyYPk6WGg8/96xTPdGYE9vx9axdNIisc1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1706.03762&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1706.03762&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/J196i/hyYRv7RtpV/R1UJyLUnPb1HycFbjj4KUK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bW554I/hyYPk6WGg8/96xTPdGYE9vx9axdNIisc1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Attention Is All You Need&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기 전, 딥러닝 기반 기계번역 발전 과정을 알아보자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer은 현대의 자연어 처리 딥러닝 모델에 중대한 여향을 끼쳤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer 이전에는 RNN, LSTM, Seq2Seq 모델이 존재했으며, 이들은 고정된 크기의 context vector이 사용되었다. 그러다 Attention 모델이 개발되면서 입력 시퀀스 전체에서 정보를 추출하는 방향으로 발전하였고, 이러한 Attention 기법을 활용한 Transformer 모델이 활용되기 시작하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존 seq2seq 모델들의 한계점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;convext vector v에 소스 문장의 정보를 압축하기 때문에 병목현상이 발생하여 성능이 하락할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;seq2seq 모델은 단어가 입력 될 때 마다 hidden state를 만들고, 이를 다음 hidden state에 전달하는 순차적인 방식으로 입력 벡터를 처리한다. 때문에 마지막 단어가 들어온 후에 만들어진 hidden state는 이전의 문맥을 모두 고려한 context vector로 간주할 수 있다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;decoder 부분에서 이 context vector 을 입력받으면, 이전과 같은 방식으로 hidden state를 만들고 갱신하며 출력값을 만들어낸다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하지만 이렇게 cotext vector가 소스 문장의 모든 정보를 가지고 있어야 하므로 병보현상 발생, 즉 성능이 저하되게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 매번 소스문장 전체를 입력으로 받자! ( &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;context vector&lt;span&gt; 의 정보손실 문제 해결, 많은 메모리와 병렬처리 필요)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Attention 메커니즘을 적용한 seq2seq 구조&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKzy5A/btsNRf3LPn5/xq1qSM4uv3FPvugWVXoqd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKzy5A/btsNRf3LPn5/xq1qSM4uv3FPvugWVXoqd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKzy5A/btsNRf3LPn5/xq1qSM4uv3FPvugWVXoqd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKzy5A%2FbtsNRf3LPn5%2Fxq1qSM4uv3FPvugWVXoqd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;541&quot; height=&quot;250&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더는 인코더의 모든 출력을 참고하여 출력값 만들어 내어, 소스 문장전체를 반영할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 출력 단어를 만들기 위해 각 hidden state 값에 가중치를 반영하여 성능 높일 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transformer&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer은 현대의 자연어 처리 네트워크에서 핵심이 되는 모델이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN이나 CNN을 전혀 사용하지 않는 대신, 문장 내 단어들의 순서 정보를 알려주기 위해 Positional encoding을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더와 디코더로 구성되며, attention 과정을 여러 레이어에서 반복한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZZlFd/btsNR7xxMqr/sdTWoUOkGbgQp1qcMwHuKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZZlFd/btsNR7xxMqr/sdTWoUOkGbgQp1qcMwHuKK/img.png&quot; data-alt=&quot;트랜스포머 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZZlFd/btsNR7xxMqr/sdTWoUOkGbgQp1qcMwHuKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZZlFd%2FbtsNR7xxMqr%2FsdTWoUOkGbgQp1qcMwHuKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;374&quot; height=&quot;459&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;트랜스포머 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Encoder 동작원리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input : 토큰 단위의 문장이 input으로 들어옴(문장 전체가 한번에 들어옴)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;positional encoding : 각 토큰의 문장 위치 정보를 담고있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multi-head attention : 문장 임베딩이 끝난 후 문맥에 대한 정보를 학습하도록 어탠션 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Add &amp;amp; Norm : 성능 행상을 위한 잔여학습 단계 &amp;amp; 정규화 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;transformer 는 이러한 형태의 encoder가 여러개의 Layer로 중첩되어 있다. Decoder도 마찬가지로 여러개의 layer로 구성되어 있으며, Encoder의 마지막 과정을 거친 문장정보(출력값)가 Decoder을 수행할 때 마다 input으로 들어가게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문장의 시작 토큰 &amp;lt;sos&amp;gt;, 문장의 끝 토큰 &amp;lt;eos&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUHVT1/btsNSyBu3Z5/KYROlPb5Xm2tt26rcExNy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUHVT1/btsNSyBu3Z5/KYROlPb5Xm2tt26rcExNy0/img.png&quot; data-alt=&quot;Transformer 동작구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUHVT1/btsNSyBu3Z5/KYROlPb5Xm2tt26rcExNy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUHVT1%2FbtsNSyBu3Z5%2FKYROlPb5Xm2tt26rcExNy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;570&quot; height=&quot;237&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Transformer 동작구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Attention자세히 알아보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'문장 전체의 내용을 반영한다..'라는 내용으로 attention을 언급했는데, 좀 더 자세히 알아보도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어텐션을 위한 세가지 입력 요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리(Query) : 현재 토큰이 다른 토큰에 얼마나 집중할지 결정하는 벡터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키(Key) : 각 토큰의 고유한 특징을 나타내어 쿼리와의 관련성을 평가하는 벡터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값(Value) : 각 토큰의 실제 정보로 쿼리가 선택할 정보를 담고 있는 벡터&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tCyx2/btsNTkWSMwx/mhkO0YKpXyF9KuXDgInvak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tCyx2/btsNTkWSMwx/mhkO0YKpXyF9KuXDgInvak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tCyx2/btsNTkWSMwx/mhkO0YKpXyF9KuXDgInvak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtCyx2%2FbtsNTkWSMwx%2FmhkO0YKpXyF9KuXDgInvak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;234&quot; data-origin-width=&quot;567&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;Scaled Dot-Product Attention : Query와 Key의 내적을 통해 각 Query-Token이 Key-Token과 얼마나 관련 있는지 유사도를 계산하고, 이를 Value 벡터의 가중합으로 변환하여 최종 Attention 값을 생성&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;Multi-Head Attention : 전체 입력 시퀀스의 길이가 n일 때 각 토큰마다 h개의 헤드가 존재하여 총 n &amp;times; h 개의 Attention 결과가 생성됨.각 헤드의 Attention 결과는 각 토큰에 대해 독립적으로 계산되며, 이들은 모두 병렬로 계산.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;최종적으로 n &amp;times; h 개의 Attention 결과가 Concat 되어 최종 출력을 형성&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Transformer 동작원리(행렬)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qGevN/btsNTxIvn98/CEmo3KJLKPUI0kz7lZF550/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qGevN/btsNTxIvn98/CEmo3KJLKPUI0kz7lZF550/img.png&quot; data-alt=&quot;임베딩 차원(4차원) 헤드2개 가정한 상황&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qGevN/btsNTxIvn98/CEmo3KJLKPUI0kz7lZF550/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqGevN%2FbtsNTxIvn98%2FCEmo3KJLKPUI0kz7lZF550%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;255&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;임베딩 차원(4차원) 헤드2개 가정한 상황&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;146&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;146&quot; data-ke-size=&quot;size16&quot;&gt;입력된 문장은 'I love you' 이며, 각 단어는 고정된 차원(4차원 벡터)로 임베딩 되어 있다. 각각의 토큰은 가중치 행렬W와&amp;nbsp; 행렬곱 연산 되어&amp;nbsp; Query, Key, Value 값을 갖게 된다. 이때 head=2 로 가정했으므로, (임베딩차원x헤드 차원)크기의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;가중치 벡터를&lt;/span&gt; 사하여 2차원의 Query, Key, Value 값들을 얻어낼 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;146&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mlwTo/btsNSdc779Y/sqQEBjoDXflNBdJdkLFzW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mlwTo/btsNSdc779Y/sqQEBjoDXflNBdJdkLFzW0/img.png&quot; data-alt=&quot;dk​ = Key 벡터의 차원 수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mlwTo/btsNSdc779Y/sqQEBjoDXflNBdJdkLFzW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmlwTo%2FbtsNSdc779Y%2FsqQEBjoDXflNBdJdkLFzW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;610&quot; height=&quot;249&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dk​ = Key 벡터의 차원 수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;위에서 구했던 각각의 Query값들에 대하여 모든 Key 벡터간의 내적을 계산한다. 내적 결과는 각 Query와 Key 간의 유사도를 나타내며, 각 토큰에 대한 중요도를 평가하는 데 사용된다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이후 스케일링 ( &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;내적 결과를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;dk로 나눔 ) &amp;rarr; softmax 적용 ( 각 Query와 Key 간의 유사도를 확률로 변환 )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;rarr; 생성된 softmax 확률값을 각 value와 곱하여 attention 값 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tmZDA/btsNSGTFBV4/M9xWKTSeo42gB8iHiL0bj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tmZDA/btsNSGTFBV4/M9xWKTSeo42gB8iHiL0bj0/img.png&quot; data-alt=&quot;위 과정을 그림으로 한번에 표현 (모든 토큰값 이용한 최종 결과)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tmZDA/btsNSGTFBV4/M9xWKTSeo42gB8iHiL0bj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtmZDA%2FbtsNSGTFBV4%2FM9xWKTSeo42gB8iHiL0bj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;251&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 과정을 그림으로 한번에 표현 (모든 토큰값 이용한 최종 결과)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때, Query와 Key 값을 구해 만든 Attention energies에 Mask Matrix를 곱해주면 특정 단어를 무시할 수 있게 된다. 마스크 값으로 음수 무한의 값을 넣어 softmax 함수의 출력이 0%에 가까워 지도록 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multihead Attention은 이러한 Attention과정을 여러번 반복하여 h개의 head를 생성하는 과정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;트랜스포머의 3가지 Attention&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;129&quot; data-start=&quot;49&quot; data-ke-size=&quot;size16&quot;&gt;1. Encoder Self-Attention&lt;/p&gt;
&lt;p data-end=&quot;129&quot; data-start=&quot;49&quot; data-ke-size=&quot;size16&quot;&gt;인코더와 디코더 모두에서 사용, 매번 입력 문장에서 각 단어가 어떤 다른 단어와 연관성이 높은지 계산&lt;/p&gt;
&lt;p data-end=&quot;220&quot; data-start=&quot;131&quot; data-ke-size=&quot;size16&quot;&gt;2. Masked Decoder Self-Attention: 디코더 내부에서 각 출력 토큰이 이전까지 생성된 토큰들만 참고하여 순차적 예측 수행&lt;/p&gt;
&lt;p data-end=&quot;310&quot; data-start=&quot;222&quot; data-ke-size=&quot;size16&quot;&gt;3. Encoder-Decoder Attention: 디코더의 각 출력 토큰이 인코더의 모든 입력 토큰을 참고하여 입력 문장의 전체 의미 반영&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Attention Is All You Need 논문에서는 순환 신경망(RNN)이나 합성곱 신경망(CNN) 없이 오직 어텐션 메커니즘으로 동작하는 Transformer 아키텍처를 제안한다. 이 모델은 기존 시퀀스 모델의 순차적 처리 제약을 제거하고, 병렬 처리와 효율성을 극대화하여 더 빠르고 효과적인 성능을 보여준다. 논문에서는 WMT 2014 영어-독일어 번역 작업에서의 성능을 통해 Transformer의 우수성을 입증했으며, 이후 Transformer는 다양한 자연어 처리 작업에서 기존 방법을 뛰어넘는 성과를 거두었다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;## 유튜브 동빈나 님의&lt;a href=&quot;https://www.youtube.com/watch?v=AA621UofTUA&amp;amp;t=1187s&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; [딥러닝 기계 번역] Transformer: Attention Is All You Need (꼼꼼한 딥러닝 논문 리뷰와 코드 실습)&lt;/a&gt; 영상을 참고하였습니다.&lt;/p&gt;</description>
      <category>딥러닝</category>
      <category>transformer #딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/8</guid>
      <comments>https://tannyrun.tistory.com/8#entry8comment</comments>
      <pubDate>Mon, 12 May 2025 09:23:40 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] LSTM의 gate (초간단 정리)</title>
      <link>https://tannyrun.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;LSTM&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RNN의 장기 의존성 문제를 완화한 RNN개선 모델로, Cell state구조를 제안하고 3가지 gate(vector)를 추가한 구조이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwAqaS/btsMSB7i20C/cpkQr4xl5CJvQqsaXoDS41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwAqaS/btsMSB7i20C/cpkQr4xl5CJvQqsaXoDS41/img.jpg&quot; data-alt=&quot;LSTM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwAqaS/btsMSB7i20C/cpkQr4xl5CJvQqsaXoDS41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwAqaS%2FbtsMSB7i20C%2FcpkQr4xl5CJvQqsaXoDS41%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;218&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LSTM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Cell State&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sC3yM/btsMR2duzbI/KTCaJZyKA6ghCxlIF3bI51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sC3yM/btsMR2duzbI/KTCaJZyKA6ghCxlIF3bI51/img.jpg&quot; data-alt=&quot;cell state&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sC3yM/btsMR2duzbI/KTCaJZyKA6ghCxlIF3bI51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsC3yM%2FbtsMR2duzbI%2FKTCaJZyKA6ghCxlIF3bI51%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;293&quot; height=&quot;180&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;cell state&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Cell states는 정보를 유지하는 기억창고라고 보면 된다. gate에 의해 결정된 정보를 저장하는 역할을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Forget gate (망각 게이트)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Heziy/btsMUmHyXUM/mDyz7GonmGIJ7SEksLO8mK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Heziy/btsMUmHyXUM/mDyz7GonmGIJ7SEksLO8mK/img.jpg&quot; data-alt=&quot;forget gate&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Heziy/btsMUmHyXUM/mDyz7GonmGIJ7SEksLO8mK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHeziy%2FbtsMUmHyXUM%2FmDyz7GonmGIJ7SEksLO8mK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;173&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;forget gate&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;Foget gate는 이전 셀 상태에서 불필요한 정보를 삭제하는 gate로, 정보를 버릴지 말지의 여부는 Sigmoid layer에 의해서 결정된다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ht&amp;minus;1&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;과&amp;nbsp;&lt;/span&gt;xt&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;를 받아 계산한 결과 ft를 0과 1 사이의 값으로&amp;nbsp;&lt;/span&gt;Ct&amp;minus;1&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;에 보내 주는데, 이때 ft의 값이 0이면 버리고 1이면 유지하는 식으로 작동한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;3. Input gate (입력 게이트)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GdAej/btsMTcTszUT/rOkTc3YZmJsalHdy7QN7d0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GdAej/btsMTcTszUT/rOkTc3YZmJsalHdy7QN7d0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GdAej/btsMTcTszUT/rOkTc3YZmJsalHdy7QN7d0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGdAej%2FbtsMTcTszUT%2FrOkTc3YZmJsalHdy7QN7d0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;477&quot; height=&quot;146&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Input gate는 현재 정보를 기억하기 위한 gate로, 현재 입력된 정보 중에서 중요한 것만 골라서 기억하는 역할을 수행한다. forget gate와 비슷하게&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;it​&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;값이 1에 가까울수록 기억하고, 0에 가까울수록 무시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #24292f;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;*forget gate 와 Input gate의 차이 : 과거의 정보 중 불필요한 것을 삭제 / 현재 입력된 정보 중 새로 추가할 정보를 결정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Output gate (출력 게이트)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPGN2b/btsMTjkIayb/5s2frzHjExy8kuEetpjMsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPGN2b/btsMTjkIayb/5s2frzHjExy8kuEetpjMsk/img.jpg&quot; style=&quot;width: 37.7929%; margin-right: 10px;&quot; width=&quot;478&quot; data-widthpercent=&quot;38.24&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;367&quot; data-origin-width=&quot;1146&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPGN2b/btsMTjkIayb/5s2frzHjExy8kuEetpjMsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPGN2b%2FbtsMTjkIayb%2F5s2frzHjExy8kuEetpjMsk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1146&quot; height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvbWlM/btsMSom2qzY/H2xMQ129pS15JIiVf9W9eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvbWlM/btsMSom2qzY/H2xMQ129pS15JIiVf9W9eK/img.png&quot; style=&quot;width: 61.0443%;&quot; width=&quot;273&quot; height=&quot;54&quot; data-widthpercent=&quot;61.76&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;160&quot; data-origin-width=&quot;807&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvbWlM/btsMSom2qzY/H2xMQ129pS15JIiVf9W9eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvbWlM%2FbtsMSom2qzY%2FH2xMQ129pS15JIiVf9W9eK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;LSTM이 지금 시점에서 어떤 정보(핵심정보)를 출력층(hidden state)으로 보낼지 결정하는 역할을 수행한다. hidden state 에 cell state를 얼마나 반영할지 가중치를 결정함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/7</guid>
      <comments>https://tannyrun.tistory.com/7#entry7comment</comments>
      <pubDate>Mon, 5 May 2025 16:19:12 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] Seq2Seq 논문 읽기</title>
      <link>https://tannyrun.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;논문링크: &lt;a href=&quot;https://arxiv.org/abs/1409.3215&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1409.3215&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Sequence to Sequence Learning with Neural Networks/ Ilya Sutskever, Oriol Vinyals, Quoc V. Le, 2014&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[짧은요약]&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;693&quot; data-start=&quot;529&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;딥 뉴럴 네트워크(DNN)는 이미지 분류나 음성 인식 등에서 엄청난 성과를 냈지만, 입력과 출력 모두가 시퀀스인 문제에는 적용이 어려웠다. 기존 네트워크는 고정된 입력과 고정된 출력을 전제로 하기 때문에, 시퀀스처럼 길이가 유동적인 입력/출력을 다루기엔 구조적인 제약이 있었기 때문이다.&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;728&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 논문에서는 LSTM(Long Short-Term Memory)을 두 개 연결해 이 문제를 해결한다. &lt;b&gt;인코더 LSTM&lt;/b&gt;: 입력 시퀀스를 읽고, 이를 하나의 고정된 벡터로 압축 / &lt;b&gt;디코더 LSTM&lt;/b&gt;: 이 벡터를 기반으로 출력 시퀀스를 한 단어씩 생성해 나감.&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;728&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 입력 시퀀스를 고정된 벡터로 압축하고 이를 다시 출력 시퀀스로 복원하는 방식을 end-to-end 학습 방식이라고 하고, 이 모델이 바로 Seq2Seq 모델이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;728&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;seq2seq모델은 기존 통계 기반 번역 시스템보다 높은 BLEU 점수(34.8)를 기록하며, 긴 문장에도 안정적으로 처리하는 성능을 보였다. 입력 문장의 단어 순서를 거꾸로 넣었을 때 성능이 향상되었고, 이러한 특징으로 인해 단어와 문장의 표현을 효과적으로 학습해 능동형과 수동형 표현 모두 유연하게 대응할 수 있게 되었다.&amp;nbsp;이러한 방식은 뉴럴 머신 번역(NMT)과 자연어 생성 기술이 발전하는 데 중요한 기반이 되었다.&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;The Model&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;159&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Seq2Seq 모델은 기본적으로 하나의 RNN이 입력 시퀀스를 고정된 벡터로 인코딩하고, 또 다른 RNN이 이 벡터를 디코딩해 출력 시퀀스를 생성하는 구조를 따른다. 이때 RNN 대신 &lt;u&gt;장기 의존성&lt;/u&gt;(long-term dependency)에 강한 LSTM(Long Short-Term Memory)을 사용해 학습 성능을 높인다.&lt;/p&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;159&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;159&quot; data-ke-size=&quot;size16&quot;&gt;*&lt;span style=&quot;background-color: #f6e199;&quot;&gt;장기의존성 문제&lt;/span&gt;?&lt;/p&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;159&quot; data-ke-size=&quot;size16&quot;&gt;시퀀스 데이터를 처리할 때, 모델이 먼 과거의 정보를 현재까지 잘 기억하지 못하는 현상&lt;/p&gt;
&lt;p data-end=&quot;550&quot; data-start=&quot;404&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 RNN은 시퀀스를 한 토큰씩 순서대로 처리하면서 상태(hidden state)를 다음으로 전달한다. 이때 정보는 계속해서 행렬곱과 비선형 함수를 거치게 되는데, 그 과정에서 오래된 정보는 점점 희미해지거나 사라지는 경향이 생긴다. 이러한 문제르 기울기 소실(vanishing gradient)이나 폭발(exploding gradient) 문제라고도 함.&lt;/p&gt;
&lt;p data-end=&quot;826&quot; data-start=&quot;661&quot; data-ke-size=&quot;size16&quot;&gt;LSTM(Long Short-Term Memory)은 이 장기 의존성 문제를 해결하기 위해 등장했다. LSTM은 정보를 셀 상태(cell state)에 따로 저장하고, 게이트(gate) 구조를 통해 중요한 정보는 오래 보존하고, 불필요한 정보는 제거할 수 있도록 설계되어 있다.&lt;/p&gt;
&lt;p data-end=&quot;912&quot; data-start=&quot;828&quot; data-ke-size=&quot;size16&quot;&gt;그래서 '오래 전 입력된 중요한 단어의 영향'을 오랜 시간 동안 유지할 수 있고, 결과적으로 문장 전체의 문맥을 더 잘 이해할 수 있게 된다.&lt;/p&gt;
&lt;p data-end=&quot;348&quot; data-start=&quot;159&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;506&quot; data-start=&quot;350&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;seq2seq 모델의 목표는 입력 시퀀스가 주어졌을 때, 출력 시퀀스가 나올 확률을 조건부 확률로 추정하는 것이다. 인코더 LSTM은 입력 시퀀스를 순차적으로 처리해 하나의 고정 길이 벡터로 변환하고, 디코더 LSTM은 이 벡터와 이전에 생성된 출력들을 바탕으로 다음 단어를 예측해 나간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clc5bY/btsNKzm7WDB/72xBBOCbkC5JtkxcHQf6rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clc5bY/btsNKzm7WDB/72xBBOCbkC5JtkxcHQf6rK/img.png&quot; data-alt=&quot;시점 t 에서의 출력&amp;amp;nbsp; yt = 인코딩된 입력 시퀀스 벡터 v와 이전까지의 출력들 y1,...,yt&amp;amp;minus;1을 조건으로 해서 예측됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clc5bY/btsNKzm7WDB/72xBBOCbkC5JtkxcHQf6rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclc5bY%2FbtsNKzm7WDB%2F72xBBOCbkC5JtkxcHQf6rK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;112&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시점 t 에서의 출력&amp;nbsp; yt = 인코딩된 입력 시퀀스 벡터 v와 이전까지의 출력들 y1,...,yt&amp;minus;1을 조건으로 해서 예측됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;767&quot; data-start=&quot;508&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;767&quot; data-start=&quot;508&quot; data-ke-size=&quot;size16&quot;&gt;실제 구현에서의&amp;nbsp; 몇가지 주요 전략&lt;/p&gt;
&lt;p data-end=&quot;767&quot; data-start=&quot;508&quot; data-ke-size=&quot;size16&quot;&gt;1. 인코더와 디코더를 각각 다른 LSTM으로 분리해 학습 안정성과 효율성을 높임&lt;/p&gt;
&lt;p data-end=&quot;767&quot; data-start=&quot;508&quot; data-ke-size=&quot;size16&quot;&gt;2. 딥 LSTM(4-layer) 구조를 채택해 얕은 구조보다 더 높은 성능을 얻음&lt;/p&gt;
&lt;p data-end=&quot;767&quot; data-start=&quot;508&quot; data-ke-size=&quot;size16&quot;&gt;3. 입력 시퀀스를 역순으로 정렬해 디코더가 보다 빠르게 핵심 정보를 접할 수 있도록 구성. 이 단순한 기법만으로도 단기 의존성이 강화되어 학습이 훨씬 쉬워졌고, LSTM의 번역 성능 향상에도 크게 기여했다.&lt;/p&gt;
&lt;p data-end=&quot;880&quot; data-start=&quot;769&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;880&quot; data-start=&quot;769&quot; data-ke-size=&quot;size16&quot;&gt;이와 같은 구조를 통해 Seq2Seq 모델은 시퀀스를 효과적으로 인코딩하고 디코딩하는 학습이 가능해졌으며, 다양한 길이와 복잡한 종속성을 가진 시퀀스 간 매핑 문제에 유용하게 적용될 수 있게 되었다.&lt;/p&gt;
&lt;p data-end=&quot;880&quot; data-start=&quot;769&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Experiments&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;894&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;Seq2Seq 모델은 WMT&amp;rsquo;14 영어-프랑스어 번역 실험을 통해 성능을 검증했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;실험은 두 가지 방식으로 진행되었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;1. 통계 기반 번역 시스템(SMT)을 전혀 사용하지 않고 입력 문장을 직접 번역하는 방식.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;2.&amp;nbsp; SMT 시스템이 생성한 후보 문장 리스트(n-best list)를 재정렬(rescore)하는 방식.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;333&quot; data-start=&quot;112&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;353&quot; data-start=&quot;340&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.1&amp;nbsp;Dataset&amp;nbsp;details&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-end=&quot;600&quot; data-start=&quot;355&quot;&gt;약 1200만 개의 문장 쌍으로 이루어진 WMT'14 데이터셋 사용 (3억개가 넘는 프랑스어 단어와 영어 단어로 구성)&lt;/li&gt;
&lt;li data-end=&quot;600&quot; data-start=&quot;355&quot;&gt;단어 표현은 벡터로 처리&lt;/li&gt;
&lt;li data-end=&quot;600&quot; data-start=&quot;355&quot;&gt;자주 등장하는 단어 160,000개(입력)와 80,000개(출력)를 고정된 어휘 집합으로 사용&lt;/li&gt;
&lt;li data-end=&quot;600&quot; data-start=&quot;355&quot;&gt;이 외의 단어는 모두 &lt;span style=&quot;color: #333333; text-align: justify;&quot;&gt;&amp;lt;UNK&amp;gt; &lt;/span&gt;&lt;span style=&quot;text-align: justify; letter-spacing: 0px;&quot;&gt;토큰으로 대체&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;600&quot; data-start=&quot;355&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;625&quot; data-start=&quot;607&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.2&amp;nbsp;Decoding&amp;nbsp;and&amp;nbsp;Rescoring&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;725&quot; data-start=&quot;627&quot; data-ke-size=&quot;size16&quot;&gt;모델 학습은 주어진 입력 문장 &lt;span&gt;&lt;span&gt;S&lt;/span&gt;&lt;/span&gt;에 대해 올바른 번역 &lt;span&gt;&lt;span&gt;T&lt;/span&gt;&lt;/span&gt;의 로그 확률을 최대화하는 방식으로 진행되었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q7AEA/btsNJ1YLAg6/UGHCxIykAnYpzWYFje2ELk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q7AEA/btsNJ1YLAg6/UGHCxIykAnYpzWYFje2ELk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q7AEA/btsNJ1YLAg6/UGHCxIykAnYpzWYFje2ELk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ7AEA%2FbtsNJ1YLAg6%2FUGHCxIykAnYpzWYFje2ELk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;217&quot; height=&quot;61&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KsEGp/btsNKxQocW2/13LoziMjK4NeGhIKdkpWb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KsEGp/btsNKxQocW2/13LoziMjK4NeGhIKdkpWb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KsEGp/btsNKxQocW2/13LoziMjK4NeGhIKdkpWb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKsEGp%2FbtsNKxQocW2%2F13LoziMjK4NeGhIKdkpWb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;190&quot; height=&quot;42&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1010&quot; data-start=&quot;789&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1010&quot; data-start=&quot;789&quot; data-ke-size=&quot;size16&quot;&gt;학습이 완료된 후에는 left-to-right beam search 방식을 사용해 가장 가능성 높은 번역을 생성한다. Beam search는 일정 개수(&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;)의 번역 후보만 유지하며, 각 시점마다 가능한 모든 단어를 확장한 뒤 가장 높은 확률을 가진 후보만 남기는 방식이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1010&quot; data-start=&quot;789&quot; data-ke-size=&quot;size16&quot;&gt;ex. 번역 도중 &quot;I like&quot;까지만 생성된 상태가 하나의 후보가 되며, 이렇게 생성된 상태 중 가장 높은 확률을 가진 후보만 남겨 가면서 가장 자연스러운 문장을 찾는다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1010&quot; data-start=&quot;789&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1010&quot; data-start=&quot;789&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Beam Search는 간단하지만 효과적인 방식으로, Beam Size가 2만 되어도 대부분의 성능을 확보할 수 있었다. 또한 이 모델은 SMT 시스템의 후보 리스트를 재정렬하는 데도 사용되었으며, LSTM이 부여한 확률 점수를 기준으로 더 나은 번역 순서를 만들어낼 수 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1100&quot; data-start=&quot;1012&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1100&quot; data-start=&quot;1012&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1134&quot; data-start=&quot;1107&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.3&amp;nbsp;Reversing&amp;nbsp;the&amp;nbsp;Source&amp;nbsp;Sentences&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1551&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;입력 문장의 단어 순서를 거꾸로 정렬&lt;/span&gt;하는 단순한 조작만으로도 모델 성능이 크게 개선되었다. 테스트 perplexity는 5.8에서 4.7로 낮아졌고, BLEU 점수는 25.9에서 30.6으로 상승했다. 이는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;입력과 출력 사이의 단어가 시간적으로 더 가까워지면서 모델이 정보를 더 효과적으로 학습할 수 있었기 때문&lt;/span&gt;이다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1551&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size16&quot;&gt;원래 문장 순서대로 입력하면 번역 초반에 필요한 정보가 입력 시퀀스의 끝부분에 있어 학습이 어렵지만, 순서를 뒤집으면 중요한 단어들이 디코더 초반에 바로 도달하게 되어 학습과 역전파가 훨씬 수월해진다. 이 방식은 특히 긴 문장에서 효과가 컸으며, 메모리 사용 효율도 함께 개선되어 전반적인 번역 성능 향상에 중요한 역할을 했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1551&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;1551&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;127&quot; data-start=&quot;108&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.4&amp;nbsp;Training&amp;nbsp;details&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot; data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;Seq2Seq 모델의 training details를 알아보자.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;4층 구조의 딥 LSTM으로 학습, 각 층마다 1000개의 셀과 1000차원의 단어 임베딩을 사용&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;입력 어휘 16만 개, 출력 어휘 8만 개로 고정&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;전체 모델 파라미터 약 3억 8400만 개&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;학습은 SGD로 진행&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;초기 학습률은 0.7로 설정한 뒤 5 에폭 이후부터 반 에폭마다 절반으로 줄임&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;미니배치 크기 = 128&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;문장 길이 편차로 인한 계산 낭비를 줄이기 위해 비슷한 길이의 문장들만 묶어서 학습&lt;/li&gt;
&lt;li data-start=&quot;129&quot; data-end=&quot;266&quot;&gt;L2 노름이 5를 넘을 경우 클리핑을 적용 ( &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;그래디언트 발산을 막기 위해&lt;span&gt; )&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 학습 설정 덕분에 모델은 안정적으로 수렴했고, 얕은 LSTM보다 더 나은 성능을 일관되게 보여주었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;502&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;502&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;95&quot; data-start=&quot;64&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.5 병렬 처리 (Parallelization)&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;409&quot; data-start=&quot;97&quot; data-ke-size=&quot;size16&quot;&gt;기존 C++ 기반 LSTM 모델은 단일 GPU에서 초당 약 1,700단어를 처리할 수 있었지만, 이는 학습 속도로는 너무 느렸다. 이를 개선하기 위해 총 8개의 GPU를 활용한 병렬 처리를 적용했다. LSTM의 각 층을 별도의 GPU에서 실행하고, 계산된 결과를 다음 층으로 실시간 전달하는 방식으로 구성했다. 나머지 4개의 GPU는 softmax 연산을 병렬화하는 데 사용되었고, 각 GPU는 1000&amp;times;20,000 행렬 곱셈을 분담했다.&lt;/p&gt;
&lt;p data-end=&quot;409&quot; data-start=&quot;97&quot; data-ke-size=&quot;size16&quot;&gt;이 최적화 덕분에 초당 6,300단어(영어+프랑스어 기준)를 처리할 수 있었고, 전체 학습에는 약 10일이 소요되었다.&lt;/p&gt;
&lt;p data-end=&quot;409&quot; data-start=&quot;97&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;409&quot; data-start=&quot;97&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;84&quot; data-start=&quot;71&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.6&amp;nbsp;Experimental&amp;nbsp;Results&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;86&quot; data-ke-size=&quot;size16&quot;&gt;모델의 번역 성능은 BLEU 점수를 기준으로 평가하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;362&quot; data-start=&quot;86&quot; data-ke-size=&quot;size16&quot;&gt;LSTM 5개를 조합한 모델(앙상블)에 beam size를 2로 설정한 경우 BLEU 점수는 34.81로, 기존 통계 기반 번역 시스템(SMT)의 점수인 33.30보다 높았다. 특히 입력 문장의 단어 순서를 거꾸로 넣었을 때 성능이 더 향상되었고, 작은 beam size만으로도 큰 beam size에 가까운 성능을 낼 수 있어 효율적인 구조로 나타났다.&lt;/p&gt;
&lt;p data-end=&quot;556&quot; data-start=&quot;364&quot; data-ke-size=&quot;size16&quot;&gt;또한 이 LSTM 모델을 기존 번역 시스템이 만들어낸 여러 후보 문장 중 가장 자연스러운 번역을 고르는 데 활용했을 때, BLEU 점수가 최대 36.5까지 올랐다. 이는 당시 최고 성능 모델(WMT'14 기준)의 37.0에 근접하는 수준으로, 신경망 기반 번역 모델이 기존 방식보다 더 나은 결과를 낼 수 있음을 보여주는 중요한 실험 결과다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7DwIk/btsNKrCD9XK/pyVvC2Y2JPMv6LkDzS99q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7DwIk/btsNKrCD9XK/pyVvC2Y2JPMv6LkDzS99q1/img.png&quot; data-alt=&quot;결론: LSTM + 역순 입력 + 앙상블 + beam search &amp;amp;rarr; SMT보다 나음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7DwIk/btsNKrCD9XK/pyVvC2Y2JPMv6LkDzS99q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7DwIk%2FbtsNKrCD9XK%2FpyVvC2Y2JPMv6LkDzS99q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;634&quot; height=&quot;420&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결론: LSTM + 역순 입력 + 앙상블 + beam search &amp;rarr; SMT보다 나음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;502&quot; data-start=&quot;443&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;118&quot; data-start=&quot;105&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.8 Model Analysis&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;118&quot; data-start=&quot;105&quot; data-ke-size=&quot;size18&quot;&gt;1) 구조파악 능력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm89JY/btsNKi0fTOu/cRMbjJNeQyG909auP4QeQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm89JY/btsNKi0fTOu/cRMbjJNeQyG909auP4QeQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm89JY/btsNKi0fTOu/cRMbjJNeQyG909auP4QeQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm89JY%2FbtsNKi0fTOu%2FcRMbjJNeQyG909auP4QeQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;228&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;373&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;LSTM이 학습한 문장 표현을 2차원으로 시각화한 결과, 유사한 의미를 가진 문장들이 자연스럽게 묶여 나타났다.&lt;/p&gt;
&lt;p data-end=&quot;373&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Mary admires John&amp;rdquo;과 &amp;ldquo;Mary respects John&amp;rdquo;처럼 단어 순서가 다르거나 어휘가 일부 바뀐 문장도 비슷한 위치에 나타났으며, 이는 모델이 의미 구조를 효과적으로 파악하고 있다는 것을 보여준다.&lt;/p&gt;
&lt;p data-end=&quot;373&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;또한 단어 순서에는 민감하지만, 능동/수동 표현의 차이에는 비교적 강건한 특성을 보였다.&lt;/p&gt;
&lt;p data-end=&quot;373&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;373&quot; data-start=&quot;120&quot; data-ke-size=&quot;size16&quot;&gt;2) 긴 문장 번역 능력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL2YlS/btsNJQiCWuE/3lqF7S6QW82vTcILgKf98K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL2YlS/btsNJQiCWuE/3lqF7S6QW82vTcILgKf98K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL2YlS/btsNJQiCWuE/3lqF7S6QW82vTcILgKf98K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL2YlS%2FbtsNJQiCWuE%2F3lqF7S6QW82vTcILgKf98K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;274&quot; data-origin-width=&quot;1159&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;501&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;긴 문장 번역에서도 모델의 성능은 안정적이다. 실제 긴 문장의 번역문과 정답 문장을 비교해보면, LSTM이 생성한 번역이 전반적으로 자연스럽고 일관된 표현을 유지하고 있음을 확인할 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;501&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;501&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;3) 문장의 길이나 단어의 희귀도에 따른 성능변화&lt;/p&gt;
&lt;p data-end=&quot;501&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mj53G/btsNKg9aPtr/zTf90nKBUIl9LWWqpKyq50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mj53G/btsNKg9aPtr/zTf90nKBUIl9LWWqpKyq50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mj53G/btsNKg9aPtr/zTf90nKBUIl9LWWqpKyq50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmj53G%2FbtsNKg9aPtr%2FzTf90nKBUIl9LWWqpKyq50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;688&quot; height=&quot;353&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;695&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;문장의 길이나 단어의 희귀도에 따른 성능 변화를 살펴본 결과, 35단어 미만의 문장에서는 성능 저하가 거의 없었고, 긴 문장이나 희귀 단어가 많은 문장에서도 기존 시스템보다 꾸준히 높은 BLEU 점수를 유지했다.&lt;/p&gt;
&lt;p data-end=&quot;695&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;이는 Seq2Seq LSTM 모델이 문맥을 잘 유지하면서도 다양한 문장 구조에 유연하게 대응할 수 있음을 보여준다.&lt;/p&gt;
&lt;p data-end=&quot;695&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;695&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;80&quot; data-start=&quot;68&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Related work&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;312&quot; data-start=&quot;98&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이전 연구들에서는 주로 RNN이나 피드포워드 신경망 기반 언어 모델(NNLM)을 활용해 통계 기반 번역 시스템(SMT)이 생성한 후보 문장 목록의 점수를 다시 계산함으로써 번역 품질을 높이고자 했다. 이후에는 입력 문장의 정보를 NNLM에 직접 반영하려는 시도가 이어졌고, Auli et al.과 Devlin et al.은 문장의 주제나 정렬 정보를 활용해 성능을 개선한 바 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;639&quot; data-start=&quot;314&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 논문은 Kalchbrenner &amp;amp; Blunsom처럼 문장을 벡터로 인코딩한 뒤 다시 문장으로 디코딩하는 구조를 따르지만, 단순한 CNN 대신 LSTM을 사용해 긴 문장에서도 안정적인 성능을 유지했다는 점에서 차별점을 가진다. 또한 Bahdanau et al.은 어텐션 기법을 통해 장문 번역의 문제를 해결하려 했고, Pouget-Abadie et al.은 보다 자연스러운 번역을 위해 입력 문장의 단어 순서를 조정하는 방식을 도입했다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;639&quot; data-start=&quot;314&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이런 흐름 속에서 본 논문은 입력 시퀀스를 역순으로 처리하고, end-to-end 방식으로 학습함으로써 간단하면서도 강력한 성능을 보여주었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;653&quot; data-start=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;653&quot; data-start=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-end=&quot;85&quot; data-start=&quot;76&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;301&quot; data-start=&quot;78&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 연구에서는 복잡한 설계 없이도, 단순한 LSTM 모델이 기존 통계 기반 번역 시스템(SMT)을 능가할 수 있음을 보여주었다. 특히 단어 순서를 역으로 입력하는 방식은 학습을 훨씬 쉽게 만들었고, 긴 문장에서도 안정적인 성능을 보였다. 실제로 기존에는 LSTM이 메모리 한계로 인해 긴 문장 번역에 취약할 것이라 예상되었지만, 역순 데이터를 활용한 학습은 이러한 약점을 극복하는 데 효과적이었다.&lt;/p&gt;
&lt;p data-end=&quot;419&quot; data-start=&quot;303&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이처럼 간단한 접근만으로도 기존 SMT 시스템을 넘어서는 결과를 얻을 수 있었다는 점은, 향후 다양한 시퀀스 처리 문제에 있어서도 본 모델이 충분한 가능성을 지닌다는 것을 시사한다.&lt;/p&gt;
&lt;p data-end=&quot;419&quot; data-start=&quot;303&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <category>seq2seq</category>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/6</guid>
      <comments>https://tannyrun.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 5 May 2025 16:14:21 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] GRU 논문읽기</title>
      <link>https://tannyrun.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Learning Phrase Representations using RNN Encoder&amp;ndash;Decoder for&amp;nbsp;Statistical&amp;nbsp;Machine&amp;nbsp;Translation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP), 2014.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자: Kyunghyun Cho, Bart van Merri&amp;euml;nboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, Yoshua Bengio&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문링크: &lt;a title=&quot;GRU&quot; href=&quot;https://arxiv.org/pdf/1406.1078&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arxiv.org/pdf/1406.1078&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[전체 흐름]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문에서는 두 개의 RNN으로 구성된 새로운 RNN Encoder&amp;ndash;Decoder 모델을 제안하며, 해당 모델은 입력 시퀀스를 고정된 벡터로 인코딩하고 이를 다시 시퀀스로 디코딩하는 방식으로 작동한다. 조건부 확률을 최대화하도록 학습되며, 기계번역에서 기존 모델에 추가하면 성능 향상에 도움이 되고, 언어적 표현도 잘 학습한다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1. Introduction&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;기존의&amp;nbsp; 통계 기계번역(SMT) 시스템에 새로운 RNN 기반 신경망 구조(RNN Encoder&amp;ndash;Decoder)을 결합하여 사용하면 번역성능을 높일 수 있다. 이 구조는 입력 시퀀스를 고정 길이 벡터로 인코딩하고, 다시 이를 가변 길이 시퀀스로 디코딩하는 두 개의 RNN으로 구성되어 있으며, 조건부 확률을 최대화하도록 함께 학습된다. 또한, 학습 효율성과 메모리 용량 향상을 위해 정교한 형태의 은닉 유닛도 도입되었다.&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;영어를 프랑스어로 번역하는 작업에서 기존 SMT모델과 이 모델을 함께 사용한 결과, 기존 모델보다 언어적 규칙성과 의미/문법 구조를 더 잘 반영하며 번역 성능이 향상된 모습을 확인 할 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2. RNN Encoder-Decoder&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.1 Preliminary: Recurrent Neural Networks&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;RNN모델의 은닉층 업데이트에는 시그모이드 함수가 이용되며, 자세한 작동방식은 RNN 게시글을 참고하자.(&lt;a href=&quot;https://tannyrun.tistory.com/3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tannyrun.tistory.com/3&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SWCQv/btsM2Jv3CfA/JB3YzL9RBNcUwKt31cKNMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SWCQv/btsM2Jv3CfA/JB3YzL9RBNcUwKt31cKNMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SWCQv/btsM2Jv3CfA/JB3YzL9RBNcUwKt31cKNMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSWCQv%2FbtsM2Jv3CfA%2FJB3YzL9RBNcUwKt31cKNMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;278&quot; height=&quot;183&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;294&quot; data-start=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;RNN모델은 이전의 시점의 정보를 가지고 다음 시점을 예측하기 때문에 조건부 확률을 이용한다고 할 수 있다.&amp;nbsp; 예측 시에는 주로 softmax함수가 이용되며, &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;이전 시점의 입력들이 주어졌을 때 t시점에서 특정 단어j 가 나타날 확률을 계산하는&lt;/span&gt;&amp;nbsp;계&lt;/span&gt;산식은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBzHdz/btsMZLCFsQy/GEdkK2e6aRx1rHCv4JrC91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBzHdz/btsMZLCFsQy/GEdkK2e6aRx1rHCv4JrC91/img.png&quot; data-alt=&quot;특정 시점t에서의 계산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBzHdz/btsMZLCFsQy/GEdkK2e6aRx1rHCv4JrC91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBzHdz%2FbtsMZLCFsQy%2FGEdkK2e6aRx1rHCv4JrC91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;62&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;특정 시점t에서의 계산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 조건부 확률들을 곱하면 전체 시퀀스 x의 확률을 계산할 수 있고, 그 계산은 각 시점의 확률값들을 곱해서 구할 수 있다. 이렇게 각 시점마다 기호를 순차적으로 샘플링하여 새로운 시퀀스를 쉽게 생성할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbS8ne/btsM0w541fc/JRQHoh816EYhBVCr4ZZT80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbS8ne/btsM0w541fc/JRQHoh816EYhBVCr4ZZT80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbS8ne/btsM0w541fc/JRQHoh816EYhBVCr4ZZT80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbS8ne%2FbtsM0w541fc%2FJRQHoh816EYhBVCr4ZZT80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;242&quot; height=&quot;61&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.2 RNN Encoder-Decoder&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN Encoder-Decoder에서 입력된 가변 길이의 시퀀스를 고정 길이 벡터로 인코딩하고, 다시 이를 가변 길이 시퀀스로 디코딩한다는게 무슨 말인지 아래를 보면 이해할 수 있을것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;◆ &quot;I love you&quot;와 &quot;I really love you&quot;는 단어 수가 다르지만(가변 길이의 시퀀스) 인코더는 각각을 고정된 크기의 벡터로 요약하여 문장을 압축한다. 디코더는 이 벡터를 받아, 상황에 맞게 다시 &quot;I love you&quot; 또는 &quot;I really love you&quot;처럼 원래 문장 길이에 맞게 단어를 하나씩 생성하여 원래&amp;nbsp; 문장처럼 자연스럽게 복원한다. (다시 가변 길이 시퀀스로 디코딩) 참고로 이때 인코딩 값(입력값)과 디코딩 값(출력값)은 다를 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj7sid/btsM2KofHzB/IoYGtRwj63YotjZG7TcVF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj7sid/btsM2KofHzB/IoYGtRwj63YotjZG7TcVF1/img.png&quot; data-alt=&quot;RNN Encoder-Decoder 계산과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj7sid/btsM2KofHzB/IoYGtRwj63YotjZG7TcVF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj7sid%2FbtsM2KofHzB%2FIoYGtRwj63YotjZG7TcVF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;46&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;46&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RNN Encoder-Decoder 계산과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 RNN과 RNN Encoder-Decoder의 큰 차이점은 요약벡터(c)의 유무이다. 기존의 RNN의 경우 이전 벡터들로 바로 예측을 진행하기 때문에 입력=출력의 시퀀스에 적합한 반면, RNN Encoder-Decoder의 경우 전체 요약된 내용과 이전 벡터(출력값)를 모두 반영하기 때문에 좀 더 자연스러운 번역, 넓은 문맥을 고려한 예측을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyupcz/btsM2d5h5WN/ru7Xc2LH2FCdiuwAfvZiL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyupcz/btsM2d5h5WN/ru7Xc2LH2FCdiuwAfvZiL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyupcz/btsM2d5h5WN/ru7Xc2LH2FCdiuwAfvZiL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcyupcz%2FbtsM2d5h5WN%2Fru7Xc2LH2FCdiuwAfvZiL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;271&quot; height=&quot;88&quot; data-origin-width=&quot;271&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조는 조건부 로그 우도를 최대화하는 방향으로 학습된다. (입력이 이거일때 출력값이 정확할 확률 최대화)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 계산된 조건부 확률 자체 P(y|x)가 입력-출력 시퀀스 쌍에 대한 점수(score)가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.3 Hidden Unit that Adaptively Remembers and&amp;nbsp;Forgets&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nUdrY/btsM17Yks3F/nobKsQeYuS8OmkQrqfQ0bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nUdrY/btsM17Yks3F/nobKsQeYuS8OmkQrqfQ0bk/img.png&quot; data-alt=&quot;GRU 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nUdrY/btsM17Yks3F/nobKsQeYuS8OmkQrqfQ0bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnUdrY%2FbtsM17Yks3F%2FnobKsQeYuS8OmkQrqfQ0bk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;605&quot; height=&quot;209&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GRU 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GRU기반 RNN Encoder-Decoder은 시퀀스의 각 시점마다 이전 은닉 상태 &lt;span&gt;&lt;span&gt;h(t&amp;minus;1)&lt;/span&gt;&lt;/span&gt;와 현재 입력 &lt;span&gt;&lt;span&gt;x(t)&lt;/span&gt;&lt;/span&gt;를 사용해 새로운 은닉 상태 &lt;span&gt;&lt;span&gt;h(t)&lt;/span&gt;&lt;/span&gt;를 계산하는 순환 구조다. reset gate는 이전 정보를 얼마나 반영할지 결정하며, Update gate는 이전 상태를 유지할지 새 상태로 바꿀지를 조절한다. 최종 은닉 상태는 이전 상태와 새로 계산된 후보 상태 &lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;h&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;~&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;의 가중 평균으로 이루어지며, 이 과정을 반복하며 시퀀스 전체를 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM은 셀 상태와 3개의 게이트(입력, 망각, 출력)를 통해 정교하게 기억을 제어하는 구조지만, 계산이 복잡하고 느릴 수 있다. 반면 GRU는 셀 상태 없이 2개의 게이트(업데이트, 리셋)만으로 기억 유지와 갱신을 통합하고&amp;nbsp;단순화한 구조로 빠르게 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 GRU는 이전 상태와 새 후보 상태의 가중 평균으로 은닉 상태를 계산하는 것이 LSTM과의 핵심적인 차이점이다. 이 덕분에 계산이 간단하고 빠르지만, 여전히 장기 의존성도 잘 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;3&amp;nbsp;Statistical&amp;nbsp;Machine&amp;nbsp;Translation&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 사용되는 통계적 기계번역(SMT) 시스템에서, 시스템(Decoder)의 목적은 주어진 소스 문장 &lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;에 대해 가장 높은 확률의 번역 &lt;span&gt;&lt;span&gt;f&lt;/span&gt;&lt;/span&gt;를 찾는 것이다. 모델은 이 확률 최대화하는 번역을 생성하며, 번역모델과 언어모델의 곱으로 근사하여 계산한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RYuRj/btsM1nOler1/OQr12sSGsL8xtPykXWavgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RYuRj/btsM1nOler1/OQr12sSGsL8xtPykXWavgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RYuRj/btsM1nOler1/OQr12sSGsL8xtPykXWavgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRYuRj%2FbtsM1nOler1%2FOQr12sSGsL8xtPykXWavgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;293&quot; height=&quot;61&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제로 대부분의 통계적 기계번역(SMT) 시스템은 &lt;span&gt;&lt;span&gt;log⁡P(f∣e)&lt;/span&gt;&lt;/span&gt;를 추가적인 특징(feature)과 가중치(weight)를 포함하는 로그 선형 모델(log-linear model)로 표현한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4S8u2/btsM1e5dgHC/1chbgw9kB79r9kC0UEWjZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4S8u2/btsM1e5dgHC/1chbgw9kB79r9kC0UEWjZ1/img.png&quot; data-alt=&quot;로그선형모델&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4S8u2/btsM1e5dgHC/1chbgw9kB79r9kC0UEWjZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4S8u2%2FbtsM1e5dgHC%2F1chbgw9kB79r9kC0UEWjZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;76&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그선형모델&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이때 특징 함수는 번역 모델, 언어 모델, 문장 길이, 구문 일치도 등 다양할 수 있고, &lt;/span&gt;각 특징에 대한 가중치는 BLEU 점수를 최대화하도록 학습된다. 정규화 항 &lt;span&gt;&lt;span&gt;log⁡Z(e)&lt;/span&gt;&lt;/span&gt;는 확률값을 정규화하기 위한 상수이며 학습에는 영향을 주지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1 Scoring Phrase Pairs with RNN Encoder&amp;ndash;Decoder&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;RNN Encoder&amp;ndash;Decoder를 학습할 때는 Phrase Pairs의 빈도수는 무시한다.&amp;nbsp;&lt;br /&gt;그 이유는 1) 빈도 기반 샘플링은 계산량이 크고 2) 단순히 자주 등장하는 구만 높은 점수를 주는 편향된 모델이 될 위험이 있기 때문이다. 또한, 번역 확률이 이미 빈도를 반영&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하고 있기 때문에, &lt;/span&gt;RNN은 그보다 더 중요한 의미기반의 학습에 노력할 필요가 있었다. (ex) 언어적 규칙성이나 자연스러운 번역의 패턴 학습&lt;/p&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;RNN Encoder&amp;ndash;Decoder 모델은 별다른 구조 변경 없이 기존 SMT 시스템에 자연스럽게 통합되었으며, 학습 결과는 기존 phrase table에 추가적인 점수를 제공하는 방식으로 활용되었다.&lt;/p&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2 Related Approaches: Neural Networks in Machine&amp;nbsp;Translation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 챕터에서는 3.1에서 소개한 특징을 좀 더 구체적으로 기존 SMT 모델과 비교하여 설명한다. (사실 3.1과 거의 동일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 가변 길이 시퀀스 처리 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존방식 피드포워드 NN은 입출력 길이를 고정해야 해서 긴 문장이나 복잡한 문맥을 표현 불가능했으나 RNN Encoder-Decoder는 길이에 제한 없이 문장을 인코딩/디코딩 할 수 있어 더 유연하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 시퀀스 구조와 순서 정보 반영&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 빈도기반(bag of words)기반 모델은 단어 순서를 무시하였으나, RNN은 시컨스를 순차적으로 처리하므로 문맥 흐름, 문법 구조를 자연스럽게 반영할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 문장 전체의 의미를 벡터로 요약하고 생성 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인코더는 문장 전체를 고정 길이 벡터로 압축하고, 디코더는 이 벡터로부터 문장을 재구성하기 때문에, 유사한 의미의 문장은 유사한 벡터로 표현되어 의미 기반의 번역이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 복잡한 언어 규칙이나 번역 패턴을 자동으로 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순 빈도 기반 SMT와 달리, RNN은 은닉 상태를 통해 장기 의존성, 구문적 패턴 등을 학습할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 기존 SMT 시스템과 통합 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;phrase table에 보조 점수로 추가하는 식으로, 기존 시스템 구조를 크게 바꾸지 않고도 성능 향상을 기대할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;4. Experiments&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; WMT&amp;rsquo;14 workshop의 영어&amp;ndash;프랑스어 번역과제 평가 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 실험은 WMT&amp;rsquo;14 기계번역 워크숍에서 제공한 영어&lt;/span&gt;&lt;b&gt;&amp;rarr;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프랑스어 번역 과제를 기반으로 진행되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt; 4.1&amp;nbsp;Data&amp;nbsp;and&amp;nbsp;Baseline&amp;nbsp;System&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;사용된 데이터는 Europarl, UN 회의록, 뉴스 기사, 크롤링 데이터 등 대규모 병렬 말뭉치&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;로 구성되었으며, &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;전체 데이터를 모두 사용하지 않고, Moore &amp;amp; Lewis (2010)&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 방식에 따라 관련도 높은 문장들만 선택하&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;였다. 결론적으로 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;영어와 프랑스어 각각에서 상위 15,000개 단어만 어휘로 사용&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하여 모델을 학습하였고, 이 방식으로도 전체 데이터의 98%를 커버할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;RNN Encoder&amp;ndash;Decoder 모델은 영어 구(phrase)를 입력으로 받아 프랑스어 구를 출력하는 방식으로 학습되었다. &lt;/span&gt;목표는 각 구 쌍의 조건부 확률 &lt;span&gt;&lt;span&gt;p(y∣x)&lt;/span&gt;&lt;/span&gt;를 최대화하는 것이며, 기존 phrase table에 새로운 점수로 이 값을 추가해 재점수(rescoring)하는 방식으로 모델을 활용했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1.1&amp;nbsp;RNN&amp;nbsp;Encoder&amp;ndash;Decoder&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;289&quot; data-start=&quot;83&quot; data-ke-size=&quot;size16&quot;&gt;이번 실험에 사용된 RNN Encoder&amp;ndash;Decoder 모델은 인코더와 디코더에 각각 1000개의 은닉 유닛을 사용했다. 단어 임베딩은 100차원으로 설정하고, 임베딩 행렬은 rank-100 저차원 행렬로 근사하여 계산 효율을 높였다. 디코더의 출력층은 1층 신경망으로 구성하였고, 500개의 maxout 유닛이 입력 두 개를 받아 중요한 값을 선택하도록 했다. 모든 가중치는 평균 0, 표준편차 0.01인 가우시안 분포에서 초기화했고, 순환 가중치는 SVD 방식으로 안정적으로 초기화했다. 학습에는 Adadelta와 SGD를 함께 사용했으며, 매번 phrase pair 64개씩 무작위로 샘플링해 약 3일간 학습을 진행했다. 아래는 BLEU 점수를 기준으로 비교한 성능 결과이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KCBA7/btsM3lhpOpo/wHRUtR5pBBzkObcgSiT9I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KCBA7/btsM3lhpOpo/wHRUtR5pBBzkObcgSiT9I1/img.png&quot; data-alt=&quot;dev=성능 검정 데이터셋&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KCBA7/btsM3lhpOpo/wHRUtR5pBBzkObcgSiT9I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKCBA7%2FbtsM3lhpOpo%2FwHRUtR5pBBzkObcgSiT9I1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;150&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dev=성능 검정 데이터셋&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;775&quot; data-start=&quot;612&quot; data-ke-size=&quot;size16&quot;&gt;BLEU 점수를 보면, RNN Encoder&amp;ndash;Decoder를 기존 SMT에 추가한 것만으로도 성능이 향상되었으며, 기존 신경망 언어 모델(CSLM)과 결합했을 때 가장 높은 점수를 기록했다. WP(word penalty)는 unknown 단어 수에 페널티를 주는 방식이며, 약간의 추가 성능 개선에 기여했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;4.1.2&amp;nbsp;Neural&amp;nbsp;Language&amp;nbsp;Model&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN의 효과를 평가하기 위해 기존 신경망 언어 모델인 CSLM도 함께 실험에 사용했다. CSLM은 7-gram 데이터를 기반으로 학습되었으며, 단어를 임베딩한 후 두 개의 은닉층과 softmax 층을 거쳐 다음 단어를 예측했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VGjRL/btsM2HrJiml/0X48D1wMiCAtEKv9lkUio1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VGjRL/btsM2HrJiml/0X48D1wMiCAtEKv9lkUio1/img.png&quot; data-alt=&quot;두 모델 score 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VGjRL/btsM2HrJiml/0X48D1wMiCAtEKv9lkUio1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVGjRL%2FbtsM2HrJiml%2F0X48D1wMiCAtEKv9lkUio1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;235&quot; height=&quot;169&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;두 모델 score 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;이 그래프는 구 쌍(phrase pair)에 대해 RNN Encoder&amp;ndash;Decoder와 기존 번역 모델(SMT)이 준 점수를 비교한 그래프이고, RNN이 준 점수는 가로축(RNN Scores), 번역 모델이 준 점수는 세로축(TM Scores)에 표시했다.&lt;/p&gt;
&lt;p data-end=&quot;916&quot; data-start=&quot;797&quot; data-ke-size=&quot;size16&quot;&gt;각 점은 하나의 구 쌍을 나타낸다.&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그래프를 보면 오른쪽 위에 점들이 몰려 있는 것을 확인할 수 있는데, 이는 두 모델이 모두 높은 점수를 부여한 것으로 좋은 번역이라고 할 수 있다. 반면 오른쪽 아래 혹은 왼쪽 위 쪽 점들로 보아, 두 모델이 서로 다른 관점으로 번역 품질을 평가한다는 것을 알 수 있다. 따라서 두 모델을 함께 사용하면, 서로의 약점을 보완해 더 나은 번역 결과를 낼 수 있다고 볼 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2&amp;nbsp;Quantitative&amp;nbsp;Analysis&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;RNN Encoder&amp;ndash;Decoder와 기존 번역 모델이 동일한 영어 구절을 어떻게 번역하는지 비교해본 결과, RNN은 더 간결하고 문법적으로 자연스러운 표현을 선택하는 경향을 보였다. 특히 문장이 길거나 구조가 복잡한 경우 기존 모델은 번역이 반복되거나 어색한 표현을 생성한 반면, RNN은 더 유창하고 간결한 번역을 수행했다.&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;실험 결과 RNN의 점수를 기존 시스템에 추가했을 때 BLEU 점수가 꾸준히 향상되었으며, 그중에서도 RNN과 CSLM을 함께 활용했을 때 가장 좋은 성능을 보였다. 이 결과는 두 모델이 서로 다른 정보를 학습하며, 이를 결합했을 때 시너지가 발생한다는 점을 보여준다. 또한 RNN은 훈련 데이터에서 자주 등장하는 표현에만 의존하지 않고, 문장의 구조와 의미를 바탕으로 구절을 평가했기 때문에 희귀하거나 복잡한 구문에서도 더 우수한 번역 결과를 도출할 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;277&quot; data-start=&quot;99&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.3&amp;nbsp;Qualitative&amp;nbsp;Analysis&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ5m0r/btsM04BXybp/tBpUK80nPSY6Mt07dQit41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ5m0r/btsM04BXybp/tBpUK80nPSY6Mt07dQit41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ5m0r/btsM04BXybp/tBpUK80nPSY6Mt07dQit41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ5m0r%2FbtsM04BXybp%2FtBpUK80nPSY6Mt07dQit41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;367&quot; data-origin-width=&quot;1060&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 그래프들은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;RNN이 단어/문장의 의미를 잘 이해하고 비슷한 것끼리 묶는 등, 스스로 구조화할 수 있는 능력을 가졌는지를 시각적으로 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 왼쪽 그래프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 그래프는 수많은 단어들이 2차원 공간 상에 배치된 모습을 보여준다. 여기서 각 단어는 RNN이 학습한 &amp;lsquo;의미 벡터&amp;rsquo;로 표현되고, 서로 의미가 비슷한 단어일수록 가까운 위치에 모이게 된다. 예를들어&amp;nbsp; &amp;ldquo;English&amp;rdquo;, &amp;ldquo;French&amp;rdquo;, &amp;ldquo;German&amp;rdquo;, &amp;ldquo;Russian&amp;rdquo; 같은 언어들이 비슷한 위치에 모여 있음을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 오른쪽 그래프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 그래프는 왼쪽 그래프에서 국가 및 지리 관련 단어들을 확대해 보여주는 부분이다.&amp;nbsp;&amp;ldquo;France, China, Russia, Germany&amp;rdquo; 등의 국가 이름이 한 덩어리로 모여 있음을 확인할 수 있고,&amp;nbsp;&amp;ldquo;North, South, British, European&amp;rdquo; 같은 지역/지시어들도 가까운 위치에 분포함을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddRHxp/btsM1JDA4jD/GFGt0zOLay5L4YcDKVh9u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddRHxp/btsM1JDA4jD/GFGt0zOLay5L4YcDKVh9u0/img.png&quot; data-alt=&quot;문장으로 유사한 것끼리 분류한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddRHxp/btsM1JDA4jD/GFGt0zOLay5L4YcDKVh9u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddRHxp%2FbtsM1JDA4jD%2FGFGt0zOLay5L4YcDKVh9u0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1086&quot; height=&quot;753&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문장으로 유사한 것끼리 분류한 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.4&amp;nbsp;Word&amp;nbsp;and&amp;nbsp;Phrase&amp;nbsp;Representations&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 실험에서 확인할 수 있듯이 RNN Encoder&amp;ndash;Decoder는 번역뿐 아니라, 단어&amp;middot;구절의 의미적 유사성과 문법적 구조를 모두 잘 학습하고 이를 의미 기반 공간에 에 효과적으로 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, RNN Encoder&amp;ndash;Decoder는 단순한 번역 모델이 아니라 언어를 이해하고 구조화하는 강력한 표현 학습 모델이라 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;5. Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;341&quot; data-start=&quot;173&quot; data-ke-size=&quot;size16&quot;&gt;본 논문에서는 임의 길이의 시퀀스를 다른 시퀀스로 변환할 수 있는 RNN Encoder&amp;ndash;Decoder 아키텍처를 제안했다. 이 모델은 입력 시퀀스를 고정 길이의 벡터로 인코딩하고, 이를 다시 디코딩해 목표 시퀀스를 생성하거나 조건부 확률로 시퀀스 쌍을 평가할 수 있는 구조를 갖추고 있다. 또한 내부 구조로는 reset gate와 update gate를 사용하는 새로운 유형의 은닉 유닛을 설계하여(GRU) 각 시점에서 기억할 정보와 잊을 정보를 유연하게 조절할 수 있게 했다.&lt;/p&gt;
&lt;p data-end=&quot;341&quot; data-start=&quot;173&quot; data-ke-size=&quot;size16&quot;&gt;모델 성능은 영어-프랑스어 통계적 기계번역(SMT) 태스크에서 평가되었으며, RNN Encoder&amp;ndash;Decoder를 통해 phrase pair에 점수를 부여한 결과, BLEU 점수가 향상되었다. 특히 기존의 신경망 언어모델(CSLM)과 함께 사용할 경우 상호 보완적인 효과를 내어 더욱 좋은 성능을 보였다. 정성 분석 결과, 해당 모델은 단어 수준뿐 아니라 구절 수준에서도 의미적&amp;middot;문법적 규칙성을 효과적으로 포착했으며, 이를 통해 RNN Encoder&amp;ndash;Decoder가 단순한 점수 계산을 넘어 언어를 이해하고 구조화하는 데에도 뛰어난 능력을 지녔음을 확인할 수 있었다.&lt;/p&gt;
&lt;p data-end=&quot;918&quot; data-start=&quot;797&quot; data-ke-size=&quot;size16&quot;&gt;향후 연구로는 phrase table의 일부 혹은 전체를 RNN이 직접 생성한 번역 후보로 대체하는 방향, 또는 이 아키텍처를 음성 인식이나 다른 자연어 처리 응용에 확장 적용하는 방안이 제시되었다.&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/5</guid>
      <comments>https://tannyrun.tistory.com/5#entry5comment</comments>
      <pubDate>Sun, 30 Mar 2025 20:06:21 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝]LSTM 논문읽기</title>
      <link>https://tannyrun.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LONG&amp;nbsp;SHORT-TERM&amp;nbsp;MEMORY&amp;nbsp;BASED&amp;nbsp;RECURRENT&amp;nbsp;NEURAL&amp;nbsp;NETWORK &lt;br /&gt;ARCHITECTURES&amp;nbsp;FOR&amp;nbsp;LARGE&amp;nbsp;VOCABULARY&amp;nbsp;SPEECH&amp;nbsp;RECOGNITION &lt;br /&gt;(저자: Has&amp;cedil;im Sak, Andrew Senior, Franc&amp;cedil;oise Beaufays)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문링크: &lt;a title=&quot;논문링크&quot; href=&quot;https://arxiv.org/abs/1402.1128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arxiv.org/abs/1402.1128&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[전체 흐름]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 RNN은 시퀀스 데이터 처리에 강점이 있지만 기울기 소실/폭발 문제 때문에 긴 시퀀스를 다루는 데 어려움이 있었다. 또한 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;소규모 음성 인식(task-level)에서는 좋은 성능을 발휘하&lt;/span&gt;지만 대규모 어휘 음성 인식(Large Vocabulary Continuous Speech Recognition, LVCSR)에서는 제한적으로만 사용되는 한계를 지니고 있었다. 이를 해결하기 위해&amp;nbsp;LSTM이 등장 하였고, DNN, RNN 모델과의 비교실험을 통해 LSTM의 효과를 입증했다. 특히 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;recurrent&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;projection LSTM과 non-recurrent projection LSTM같은 새로운 구조를 이용하여 대규모 음성 인식 모델의 성능을 더욱 높일 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;1. INTRODUCTION&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순방향 신경망 FFNN(DNN 포함) 구조와 달리 순환 신경망(RNN)구조는 이전 시간의 출력을 저장하여 다음 출력에 이용하기 때문에 시간에 따라 변하는 문맥을 반영할 수 있다. 따라서 고정된 창(단어만 고려)을 이용하는 FFNN 보다 유연하게 연속된 시퀀스를 처리할 수 있다. 하지만 전통적인 RNN 구조는 기울기 기반 역전파 방식(BPTT)으로 학습시킬 경우 기울기 소실, 기울기 폭발 문제가 발생해 어려움이 있었고, 실제로는 5-10개의 시간 간격만을 반영하는 문제가 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 해결하기 위해 LSTM이 고안되었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; LSTM 구조 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- memory cells : 기억 저장(self-connections 포함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- gate : 정보의 흐름 제어, 곱셈기반 unit&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- input gate : memory cell에 들어오는 활동 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- output gate : memory cell에서 나가는 활동 제어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- *forget gate : memory 선택적으로 잊음 ( 셀 상태를 입력받기 전에 값을 조정함으로서 긴 문장 처리를 용이하게 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 원래 LSTM구조에서는 과거 불필요한 정보까지 입력값으로 받아 정확한 예측이 힘들었다. 따라서 긴 문장을 segment하여 예측을 진행하고, 항상 수동으로 reset해주는 과정이 필요했다. 이후 forget gate가 추가됨으로서 cell 단위에서 자동으로 필요한 정보, 불필요한 정보를 거를 수 있게 되었다. (예측 효율, 정확도 높아짐)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RNN vs LSTM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN, LSTM 모두 시퀀스 예측, 시퀀스 라벨링 문제를 성공적으로 수행했지만, 특히 LSTM이 문맥 자유 언어(context-free)와 문맥 의존 언어(context-sensitive)를 학습하는데에 우수한 성능을 보였다. (근데 이 문장은 왜 넣은 거지?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Bidirectional LSTM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손글씨 인식, TIMIT 음성 데이터베이스 라벨링에 Bidirectional LSTM이 제안되었고, 이때 *CTC(connectionist temporal classification)출력층이 활용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전방향과 역방향으로 작동하는 BiLSTM에 CTC 출력층 결합, 정렬되지 않은 시퀀스 데이터를 학습할 수 있게 해주는 forward-backward 알고리즘 사용 &amp;rarr; 기존&amp;nbsp; HMM 기반 시스템보다 우수한 성능 + 기존 RNN 모델에 비해 perplexity 낮춤.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* CTC : 입력데이터의 길이와 출력데이터의 길이가 다르고, 어떤 입력이 어떤 출력에 대응되는지 정렬(Alignment)이 없을 때 딥러닝 모델을 학습시킬 수 있게 해주는 특수한 손실 함수. 시퀀스를 다루는 모델에 사용됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(ex) 다른 사람들의 Hello, He..llo, Helllllo~ 모두를&amp;nbsp; 'Hello'로 출력해야 하는 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DNN vs LSTM&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음소인식, 대규모 단어음성인식에는 DNN이 LSTM에 비해 더 우수했다. (LSTM이 DNN의 성능을 내려면 CTC나 RNN transducerr같은 것들이 추가로 필요했음) 이유는 음소, 단어는 비교적 짧은 시퀀스이면서 정렬이 잘 되어있는 편이었고, 시간순서를 고려해서 학습하는 속도가 느린 LSTM과 달리 DNN의 경우 대규모로 빠르게 병렬처리가 가능했기 때문!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2. LSTM ARCHITECTURES&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준 LSTM은 input layer, *recurrent LSTM layer, output layer 의 구조를 가지고 있다. recurrent LSTM layer은 cell input unit, imput gate, output gate, forget gate, cell output unit로 구성되어 있으며, cell input unit 와 cell output unit 은 각각 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;input layer, output layer 에 연결되어 &lt;/span&gt;있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/upLko/btsMZGm2sdq/ytNSxKBNrVtgDkXrZNW7vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/upLko/btsMZGm2sdq/ytNSxKBNrVtgDkXrZNW7vK/img.png&quot; data-alt=&quot;LSTM 구조(recurrent, projection은 제외하고 생각하기)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/upLko/btsMZGm2sdq/ytNSxKBNrVtgDkXrZNW7vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FupLko%2FbtsMZGm2sdq%2FytNSxKBNrVtgDkXrZNW7vK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;253&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LSTM 구조(recurrent, projection은 제외하고 생각하기)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표준 LSTM 네트워크 cell의 memory blocks에서 , 바이어스를 제외한 총 파라미터 수 &lt;span&gt;&lt;span&gt;W&lt;/span&gt;&lt;/span&gt;는 다음과 같이 계산할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXIR9/btsM0fbERNq/FqzPzHXKl8kFaGny4zogaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXIR9/btsM0fbERNq/FqzPzHXKl8kFaGny4zogaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXIR9/btsM0fbERNq/FqzPzHXKl8kFaGny4zogaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXIR9%2FbtsM0fbERNq%2FFqzPzHXKl8kFaGny4zogaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;33&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M73TI/btsM0clGS7W/aEgVwvKQWekBydDPQIJyMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M73TI/btsM0clGS7W/aEgVwvKQWekBydDPQIJyMk/img.png&quot; data-alt=&quot;변수 설명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M73TI/btsM0clGS7W/aEgVwvKQWekBydDPQIJyMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM73TI%2FbtsM0clGS7W%2FaEgVwvKQWekBydDPQIJyMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;73&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;변수 설명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Q. nc x nc인 이유?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 은닉 상태 &lt;span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;t-1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​(nc개)의&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 각 유닛이 4개의 게이트(input, forget, output, cell input)를 거쳐 현재 은닉층 ht(nc개)로 이어지기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM(Long Short-Term Memory) 네트워크는 시계열 데이터를 처리하는 데 탁월한 성능을 보이지만, 은닉 상태의 차원이 커질수록 연산량과 파라미터 수가 급격히 증가한다. 이를 해결하기 위해 제안된 구조가 projection LSTM이며, 이 구조에서는 LSTM의 출력 &lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;t&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;를 낮은 차원으로 압축(projection)하여 계산 효율을 높인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;recurrent&lt;span&gt; &lt;/span&gt;&lt;/span&gt;projection LSTM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조는 쉽게 말해 LSTM의 projection layer로 차원을 줄인 후, 그 결과를 다시 입력 및 게이트로 재귀 연결하고 동시에 출력층에도 사용하는 구조라고 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T7Vnn/btsM0bHcPR9/myvHkEdNpNlX5f9rsNhPh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T7Vnn/btsM0bHcPR9/myvHkEdNpNlX5f9rsNhPh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T7Vnn/btsM0bHcPR9/myvHkEdNpNlX5f9rsNhPh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT7Vnn%2FbtsM0bHcPR9%2FmyvHkEdNpNlX5f9rsNhPh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;496&quot; height=&quot;275&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nx2ba/btsMZfJQssY/HWSBtmP0zykd9U7mFTwNhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nx2ba/btsMZfJQssY/HWSBtmP0zykd9U7mFTwNhK/img.png&quot; data-alt=&quot;recurrent projection LSTM에서 총 파라미터 수 구하는 법, nr = number of units in the recurrent projection layer.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nx2ba/btsMZfJQssY/HWSBtmP0zykd9U7mFTwNhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnx2ba%2FbtsMZfJQssY%2FHWSBtmP0zykd9U7mFTwNhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;27&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;recurrent projection LSTM에서 총 파라미터 수 구하는 법, nr = number of units in the recurrent projection layer.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;non-recurrent projection LSTM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조는 위 recurrent projection LSTM 구조에 재귀되지 않고 출력층에 직접 연결되는 non-recurrent projection layer을 추가한 구조이다. 이 층이 추가 됨으로써, 재귀를 통해 흐려지는 정보없이 더 많은 정보가 출력층으로 전달되게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTHELQ/btsM1LAsnBm/fgu16qts1M2wV7wwR1ZlYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTHELQ/btsM1LAsnBm/fgu16qts1M2wV7wwR1ZlYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTHELQ/btsM1LAsnBm/fgu16qts1M2wV7wwR1ZlYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTHELQ%2FbtsM1LAsnBm%2Ffgu16qts1M2wV7wwR1ZlYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;258&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Ssuu/btsM02iEF7k/4HQyYh2ZVExY5h89kMiY90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Ssuu/btsM02iEF7k/4HQyYh2ZVExY5h89kMiY90/img.png&quot; data-alt=&quot;np = number of units in the non-recurrent projection layer&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Ssuu/btsM02iEF7k/4HQyYh2ZVExY5h89kMiY90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Ssuu%2FbtsM02iEF7k%2F4HQyYh2ZVExY5h89kMiY90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;40&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;np = number of units in the non-recurrent projection layer&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 LSTM 셀의 출력을 두 경로로 나눔으로써, recurrent layer는 계산 효율을 non-recurrent layer는 출력 정밀도를 담당하게 하여 전체적으로 더 가볍고 성능 좋은 모델을 구현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM 동작 계산수식&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;1087&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyplc4/btsMZjMQlKA/t7gj7QUfauaIuabgu02NB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyplc4/btsMZjMQlKA/t7gj7QUfauaIuabgu02NB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyplc4/btsMZjMQlKA/t7gj7QUfauaIuabgu02NB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdyplc4%2FbtsMZjMQlKA%2Ft7gj7QUfauaIuabgu02NB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;429&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;1087&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2.1.&amp;nbsp; Inplementation&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM을 CPU로 구현하였고, GPU 대신 CPU(SIMD 최적화)로 구현한 이유는 디버깅과 구현이 쉬우며, 향후 분산 학습으로 확장하기 유리하기 때문이다. LSTM 학습 구현에는 C++ 기반의 고성능 행렬 연산 라이브러리인 Eigen을 사용하였다.&lt;br /&gt;Eigen은 CPU의 SIMD(Single Instruction Multiple Data) 명령어를 활용해 병렬 연산을 수행할 수 있어 행렬 연산뿐 아니라 활성화 함수와 그래디언트 계산 또한 빠르게 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM의 학습구현에서 비동기 확률적 경사 하강법(ASGD)을 최적화 기법으로 사용하는데, 이때 이 두가지가 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 시퀀스를 배치(batch) 단위로 처리 &amp;rarr; 계산 효율 (행렬-행렬 곱 사용 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 여러 쓰레드로 동시에 처리 &amp;rarr; 병렬성 + 더 높은 무작위성(stochasticity, 일반화 정도)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;결과적으로 &amp;lsquo;쓰레드 수 &amp;times; 배치 크기&amp;rsquo;만큼의 큰 배치를 병렬로 학습하는 효과를 얻을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 파라미터를 업데이트 할 때에는 BPTT알고리즘을 이용한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKOKb/btsM2ebBhx9/3pmMUmcnWCDCXZ6hbtn01k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKOKb/btsM2ebBhx9/3pmMUmcnWCDCXZ6hbtn01k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKOKb/btsM2ebBhx9/3pmMUmcnWCDCXZ6hbtn01k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKOKb%2FbtsM2ebBhx9%2F3pmMUmcnWCDCXZ6hbtn01k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;650&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림은 Truncated BPTT의 흐름을 나타낸 것으로, 긴 시퀀스를 일정 길이로 잘라 구간 단위로 순전파와 역전파를 수행하는 구조를 보여준다. 각 구간의 Gradient를 누적하여 파라미터를 업데이트 하고, 셀에 update 상태가 저장되어 하위 시퀀스를 처리하는데 정보로 쓰이게 된다. 여러 시퀀스를 병렬 처리하는 경우, 처리 과정이 짧은 시퀀스는 새로운 입력으로 교체되고 셀 상태는 초기화된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;3.&amp;nbsp;EXPERIMENTS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNN, RNN, LSTM 음성 인식 성능을 비교 평가 (구글 음성 검색 데이터셋에서 테스트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3.1.&amp;nbsp;Systems&amp;nbsp;&amp;amp;&amp;nbsp;Evaluation&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 음성검색 데이터셋 &amp;amp; 학습과정 설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 약 1900시간 분량의 300만 개 구글 음성 검색 및 받아쓰기 발화 데이터로 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력은 10ms 간격으로 추출된 25ms 길이의 40차원 log-filterbank 에너지 특징으로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 9천만 개 파라미터를 가진 FFNN으로,&amp;nbsp; 출력은 14247개의 context-dependent(CD) 상태를 기반으로 하되, 실험에서는 이를 126 (CI), 2000, 8000개의 상태로 축소(mapping)한 다양한 상태 집합을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 네트워크의 가중치는 무작위로 초기화되며, 네트워크 구조에 따라 안정적인 수렴을 보장하는 최대 학습률을 설정한 뒤 학습이 진행됨에 따라 지수적으로 감소시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 중에는 20만 개 프레임으로 프레임 정확도를 평가하고, 평가에는 23,000개 발화의 테스트 세트와 260만 단어 어휘의 언어 모델을 사용해 WER(단어 오류율)을 측정하였다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델별 차이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNN은 GPU에서 200 프레임 미니배치와 SGD를 사용해 학습되며, sigmoid 은닉층과 softmax 출력층으로 구성된 전결합 구조를 갖는다. 입력은 비대칭 윈도우(예: 10w5, 15w5)를 통해 여러 프레임을 쌓아 표현되며,&amp;nbsp; 일부 모델은 LSTM과의 구조적 일관성을 위해 저랭크 projection layer를 포함한다.&lt;/p&gt;
&lt;p data-end=&quot;499&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;LSTM과 RNN은 24개 쓰레드로 비동기 병렬 학습되며, 입력 시퀀스를 20프레임 단위로 잘라 truncated BPTT를 적용해 훈련된다. RNN은 sigmoid 활성화 함수를 사용하고, projection이 있을 경우엔 선형 함수가 추가된다. LSTM은 tanh, sigmoid, linear 함수를 조합하여 구성되며, 입력은 40차원 음성 특징으로, 레이블은 5프레임 지연되어 사용된다.&lt;/p&gt;
&lt;p data-end=&quot;499&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;499&quot; data-start=&quot;369&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모델에 따른 성능정확도 평가 결과&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9mpy2/btsM2qwnZjA/kCfoKOM9GgOLVXacrmdckk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9mpy2/btsM2qwnZjA/kCfoKOM9GgOLVXacrmdckk/img.png&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;382&quot; data-is-animation=&quot;false&quot; width=&quot;231&quot; height=&quot;180&quot; style=&quot;width: 49.9723%; margin-right: 10px;&quot; data-widthpercent=&quot;50.56&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9mpy2/btsM2qwnZjA/kCfoKOM9GgOLVXacrmdckk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9mpy2%2FbtsM2qwnZjA%2FkCfoKOM9GgOLVXacrmdckk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJ30c/btsM0edkMKG/eSy8Ey1IZaCgvG9QpbnB20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJ30c/btsM0edkMKG/eSy8Ey1IZaCgvG9QpbnB20/img.png&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;814&quot; data-is-animation=&quot;false&quot; width=&quot;322&quot; height=&quot;257&quot; style=&quot;width: 48.865%;&quot; data-widthpercent=&quot;49.44&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJ30c/btsM0edkMKG/eSy8Ey1IZaCgvG9QpbnB20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJ30c%2FbtsM0edkMKG%2FeSy8Ey1IZaCgvG9QpbnB20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1021&quot; height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt; LSTM, DNN에 비해 높은 오류율을 보이는 RNN &amp;amp; LSTM과 DNN성능 비교 &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;662&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;790&quot; data-start=&quot;662&quot; data-ke-size=&quot;size16&quot;&gt;RNN은 학습 초기에 매우 불안정했으며, 특히 기울기 폭발 문제로 인해 활성값과 그래디언트에 제한을 두어야 수렴이 가능했다. 성능 또한 다른 구조에 비해 현저히 낮아 126개 상태 출력 설정에서만 평가가 진행되었다.&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;LSTM은 모든 설정에서 RNN 및 DNN보다 우수한 프레임 정확도를 나타냈고, 수렴 속도 역시 더 빨랐다. 특히 projection 구조를 적용한 LSTM은 동일한 파라미터 수 조건에서 기본 LSTM보다 적은 파라미터 수로 더 나은 정확도를 보였다. 또한 non-recurrent projection layer까지 포함한 구조는 대부분의 실험에서 가장 뛰어난 성능을 보였으며, 단 2000 state 실험에서는 학습률 설정이 지나치게 낮아 기대보다 낮은 성능을 보인 예외가 있었다.&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;결론: LSTM은 모든 실험 조건에서 DNN보다 더 정확했고, projection 구조와 깊이 조절이 성능 향상에 결정적임&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;4.&amp;nbsp;CONCLUSION&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1118&quot; data-start=&quot;792&quot; data-ke-size=&quot;size16&quot;&gt;대규모 어휘 음성 인식 과제에서 기존 LSTM 구조의 확장성과 연산 부담 문제를 해결하기 위해 recurrent projection layer 와 non-recurrent projection layer 두 가지 새로운 아키텍처를 제안하였고, 실험결과 이 두 아키텍처 모두 DNN보다 우수한 성능을 보였다. 다만, 현재의 단일 멀티코어 CPU 기반 학습 방식은 큰 모델로 확장하는 데 한계가 있으며, 향후 GPU 및 분산 학습 환경으로의 확장이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/4</guid>
      <comments>https://tannyrun.tistory.com/4#entry4comment</comments>
      <pubDate>Fri, 28 Mar 2025 19:21:18 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] RNN(Recurrent Neural Network) 순환신경망 정리</title>
      <link>https://tannyrun.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RNN은 유닛간의 연결이 순환적 구조로 구성된 딥러닝 모델 중 하나이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa; color: #212529; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;시계열 데이터(sequence data)를 처리하는데 강점이 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa; color: #212529; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;* sequence data : 어떤 순서를 가진 데이&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;일반적인 DNN 모델의 한계점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*독립적 데이터를 가지고 예측할 때, 이전 시점의 정보를 반영하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HncUm/btsMRHzASjo/k6J3fXK0pMadMF9qpPDau0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HncUm/btsMRHzASjo/k6J3fXK0pMadMF9qpPDau0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HncUm/btsMRHzASjo/k6J3fXK0pMadMF9qpPDau0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHncUm%2FbtsMRHzASjo%2Fk6J3fXK0pMadMF9qpPDau0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;103&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*독립적 데이터? 데이터를 가지고 예측 할 때, 관측치의 순서가 중요하지 않은 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DNN 모델에서는 t시점의 관측값과 t-1시점의 관측값이 서로 관련이 없다고 보고, 각 시점에서의 정보만을 활용해 활성화함수를 적용하여 예측을 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o3k1E/btsMRVj1tQY/Yhc28cJ30hkxNNbKPhKr3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o3k1E/btsMRVj1tQY/Yhc28cJ30hkxNNbKPhKr3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o3k1E/btsMRVj1tQY/Yhc28cJ30hkxNNbKPhKr3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo3k1E%2FbtsMRVj1tQY%2FYhc28cJ30hkxNNbKPhKr3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;202&quot; height=&quot;234&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;학습과정) 각 layer로 넘어갈 때 입력값들과 가중치(weight)가 곱해지고, 추가적으로 활성화 함수가 쓰임.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;input된 데이터를 hidden Layer로 보낼 때 활성화 함수는 주로 tanh함수가 사용되며 (이때 생성된 은닉 값 = ht), hidden Layer에서 Output layer로 예측 될 때 주로 sortmax함수가 사용된다(이때 출력값 yt).&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;RNN&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RNN는 DNN모델에서 독립적 데이터를 연속적 데이터(시계열 데이터)로 보고,&amp;nbsp; t시점이 t시점 이전의 정보들을 반영할 수 있도록 한 모델이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sXjSE/btsMRRB8Lo4/U1ee98Ils9YM7InPmuV9HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sXjSE/btsMRRB8Lo4/U1ee98Ils9YM7InPmuV9HK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sXjSE/btsMRRB8Lo4/U1ee98Ils9YM7InPmuV9HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsXjSE%2FbtsMRRB8Lo4%2FU1ee98Ils9YM7InPmuV9HK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;198&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그림으로 보면 이런식이다. RNN은 은닉층에서 나온 정보가 다시 은닉층으로 들어가는 구조이기 때문에, 이러한 구조를&amp;nbsp; &lt;span style=&quot;text-align: start;&quot;&gt;재진입(re-enterence) 또는 재귀(recursion&lt;/span&gt;) 라고 부르기도 한다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RNN은 ht (t시점의 은닉값)에 ht-1을 합성하는 방식으로 t 시점 이전의 정보를 반영한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhapMI/btsMRYuo64s/QWw72IjbKDYLt8ziYwkt1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhapMI/btsMRYuo64s/QWw72IjbKDYLt8ziYwkt1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhapMI/btsMRYuo64s/QWw72IjbKDYLt8ziYwkt1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhapMI%2FbtsMRYuo64s%2FQWw72IjbKDYLt8ziYwkt1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;135&quot; height=&quot;215&quot; data-origin-width=&quot;135&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt0hSs/btsMTdYaGeM/YK3w3hMCHCPf53M3U4XcfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt0hSs/btsMTdYaGeM/YK3w3hMCHCPf53M3U4XcfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt0hSs/btsMTdYaGeM/YK3w3hMCHCPf53M3U4XcfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt0hSs%2FbtsMTdYaGeM%2FYK3w3hMCHCPf53M3U4XcfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;318&quot; height=&quot;57&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RNN구조의 다양성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. one to one&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 input데이터를 가지고 하나의 값(Y)을 예측하는 문제&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eepRTV/btsMSSNMxqn/DIv2Ux2PXsvxwInKJtmDqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eepRTV/btsMSSNMxqn/DIv2Ux2PXsvxwInKJtmDqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eepRTV/btsMSSNMxqn/DIv2Ux2PXsvxwInKJtmDqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeepRTV%2FbtsMSSNMxqn%2FDIv2Ux2PXsvxwInKJtmDqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;307&quot; data-origin-width=&quot;743&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아무 가공도 하지 않은 가장 단순한 형태의 RNN 모델로, 이때 RNN 모델을 Vanila Neural Network라고 부른다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*vanila :&amp;nbsp; 옵션을 첨가하지 않은 가장 기본 상태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. one to many&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하나의 input 데이터를 가지고 여러개의 output을 예측하는 문제&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQYVci/btsMS2vQY8y/GpO7QXuSig6kDf2b8W5X90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQYVci/btsMS2vQY8y/GpO7QXuSig6kDf2b8W5X90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQYVci/btsMS2vQY8y/GpO7QXuSig6kDf2b8W5X90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQYVci%2FbtsMS2vQY8y%2FGpO7QXuSig6kDf2b8W5X90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;732&quot; height=&quot;302&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*Image Captioning이 one to many 구조에 속한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*Image Captioning : 이미지 데이터가 주어졌을 때, 해당 이미지에 대한 정보를 글로 생성하는 것.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. Many to one&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 input 데이터로 하나의 Y를&amp;nbsp; 예측해야 하는 문제&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/17VGW/btsMSmWcXTm/qUPKwNxGssO7J2oZBcOU50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/17VGW/btsMSmWcXTm/qUPKwNxGssO7J2oZBcOU50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/17VGW/btsMSmWcXTm/qUPKwNxGssO7J2oZBcOU50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F17VGW%2FbtsMSmWcXTm%2FqUPKwNxGssO7J2oZBcOU50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;306&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문자데이터들(문자나 이메일)을 가지고 감정이 positive 한지 negative한지 분류하는 Sentiment Classification(감정 분류)가 이에 해당한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. many to many&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;여러 input데이터를 통해 여러 output을 예측하는 문제&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;many to many 구조는 두가지를 예로 들 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0PZMD/btsMSlbRXOJ/aaMMwnf1xmC8nUfBx3G9zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0PZMD/btsMSlbRXOJ/aaMMwnf1xmC8nUfBx3G9zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0PZMD/btsMSlbRXOJ/aaMMwnf1xmC8nUfBx3G9zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0PZMD%2FbtsMSlbRXOJ%2FaaMMwnf1xmC8nUfBx3G9zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;305&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;5-1) &amp;nbsp;Machine Translation : 여러 개의 단어로 구성된 문장을 받아서 여러 개의 단어로 구성된 문장을 출력. 데이터들이 순서를 가지기 때문에 입력이 모두 끝난 후에 출력된다. ex) I love you&amp;nbsp; &amp;gt;&amp;gt; 나는 너를 사랑해 (순서 존재)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clhGff/btsMSwqOsSi/GaFfy8YfqvMWp9PEimCzC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clhGff/btsMSwqOsSi/GaFfy8YfqvMWp9PEimCzC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clhGff/btsMSwqOsSi/GaFfy8YfqvMWp9PEimCzC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclhGff%2FbtsMSwqOsSi%2FGaFfy8YfqvMWp9PEimCzC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;310&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5-2)&amp;nbsp; Video classification on frame level: 어떤 비디오에서 프레임 속 대상에 이름을 붙임. 이때 중요한 점은 현재 시점의 프레임과 더불어 과거 프레임을 고려해야 한다는 점이다.&amp;nbsp; 입력과 출력이 동시에 이루어짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RNN 정리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;순환신경망은 t 시점까지의 (과거)정보를 활용하여 yt를 예측&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- t시점의 데이터 반영 &amp;rarr; Wxh&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- t시점 이전 정보 반영 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; &lt;/span&gt;&amp;nbsp;Whh&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- t시점의 y를 예측 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr;&amp;nbsp;&lt;/span&gt; Why&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WnHva/btsMT92Dbab/u7bw5o9Bako8SQdnJBUfpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WnHva/btsMT92Dbab/u7bw5o9Bako8SQdnJBUfpk/img.png&quot; data-alt=&quot;출처: 고려대 김성범 교수님 RNN 강의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WnHva/btsMT92Dbab/u7bw5o9Bako8SQdnJBUfpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWnHva%2FbtsMT92Dbab%2Fu7bw5o9Bako8SQdnJBUfpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;321&quot; height=&quot;93&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 고려대 김성범 교수님 RNN 강의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Loss = 이렇게 실제 y값과 예측한 y값의 차&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;순환신경망은 Loss가 최소가 되도록 학습한다!! &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;( output이 여러개인 경우 각 시점별 loss의 평균을 전체 loss로 두고, loss가 최소화 되도록 가중치 W를 업데이트한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;가중치 업데이트 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Loss 구하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;특정 Wxh, Whh, Why 값일때 loss값 구하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pttWp/btsMT3IdDwC/6L6he2239ll3Hp6IV925Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pttWp/btsMT3IdDwC/6L6he2239ll3Hp6IV925Yk/img.png&quot; data-alt=&quot;출처: 유튜브 고려대 김성범 교수님 RNN 강의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pttWp/btsMT3IdDwC/6L6he2239ll3Hp6IV925Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpttWp%2FbtsMT3IdDwC%2F6L6he2239ll3Hp6IV925Yk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;439&quot; height=&quot;288&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 유튜브 고려대 김성범 교수님 RNN 강의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. gradient 구하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Why가중치를 업데이트 한다고 할 때, *경사하강법을 이용하여 Loss함수 에다가 해당 가중치(Why)로 편미분해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이때 구한 편미분값(gradient)를 기여도 라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;* 경사하강법; gradient를 구해 실제 값에서 제외함으로써 Loss를 최소화 할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZtSxz/btsMS4nJVEx/Wy9sZYvSll2UxQ4tJkgCKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZtSxz/btsMS4nJVEx/Wy9sZYvSll2UxQ4tJkgCKk/img.png&quot; data-alt=&quot;출처: 유튜브 고려대 김성범 교수님 RNN 강의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZtSxz/btsMS4nJVEx/Wy9sZYvSll2UxQ4tJkgCKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZtSxz%2FbtsMS4nJVEx%2FWy9sZYvSll2UxQ4tJkgCKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;544&quot; height=&quot;211&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 유튜브 고려대 김성범 교수님 RNN 강의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;히든 벡터 Whh의 가중치를 업데이트 하는 경우, t 시점에서부터시작하여 t 이전 시점으로 거슬러 올라가며 가중치에 미친 영향을 고려해준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 가중치 update&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종적으로 경사하강법 식을 이용하여 가중치를 update한다. (a는 learning rate로,기여도를 얼마나 반영할 것인지 결정)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ex) Why를 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Why의 기여도 = &amp;part;Loss/&amp;part;Why&amp;nbsp; (편미분 값)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;rarr; new&amp;nbsp; Why = old Why - a*( &amp;part;Loss/&amp;part;Why)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RNN의 한계점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;장기 의존성 문제 (long-term dependency problem)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sequence의 길이가 길어질수록, 앞쪽 정보가 뒷쪽으로 잘 전달되지 않아 정보 학습에 어려움이 발생하는 문제이다. 주로 기울기 소실문제로 인해 오래된 정보가 막각되면서 발생한다. 이러한 문제를 해결하기 위해 &lt;b&gt;LSTM&lt;/b&gt;(Long Short-Term Memory)&lt;b&gt;과 GRU&lt;/b&gt;(Gated Recurrent Unit) 같은 구조의 RNN 개선 모델이 만들어졌다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;## 유튜브 고려대 김성범 교수님 강의를 참고하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/3</guid>
      <comments>https://tannyrun.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 24 Mar 2025 10:06:19 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] CNN (Convolutional Neural Network)합성곱 신경망 정리 + CNN Architectures</title>
      <link>https://tannyrun.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CNN(Convolutional Neural Network) 합성신경망은 이미지 처리와 패턴 인식에 탁월한 성능을 보여주는 신경망이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해, 우리가 개와 고양이 이미지를 분류할 때 사용되는 신경망이라고 보면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U2yUU/btsMMAgAs5h/udeMnK0DT7Tb8AtArzawf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U2yUU/btsMMAgAs5h/udeMnK0DT7Tb8AtArzawf1/img.png&quot; data-alt=&quot;사진출처 : https://dotiromoook.tistory.com/19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U2yUU/btsMMAgAs5h/udeMnK0DT7Tb8AtArzawf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU2yUU%2FbtsMMAgAs5h%2FudeMnK0DT7Tb8AtArzawf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;431&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진출처 : https://dotiromoook.tistory.com/19&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNN의 기본 Layer 3가지&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Convolutional Layer / Pooling Layer / Fully Connected Layer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;1. Convolutional Layer&amp;nbsp; 합성곱 층 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Convolutional Layer은 입력 데이터에서 중요한 특징을 추출하는 층으로, &lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&amp;nbsp;kernel을 사용하여 입력 데이터와 kernel 간의 합성곱 연산을 수행한다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;합성곱 연산&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱의 연산은 Kernel(필터) 라는 nxm 크기의 행렬로 이미지를 처음부터 끝까지 겹치며 훑으면서 kernel과 겹쳐지는 부분의 원소의 값을 곱한 값을 모두 더해서 연산한다.( 이미지의&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt;가장 왼쪽 위부터 가장 오른쪽 아래까지)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 예시를 통해 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예시 이미지 (출처 :&lt;a href=&quot;https://wikidocs.net/64066&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikidocs.net/64066&lt;/a&gt;&amp;nbsp; )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫번째 단계&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sK4pq/btsMOtAgYG4/kTkDhFcqk6rIqcToY8D5Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sK4pq/btsMOtAgYG4/kTkDhFcqk6rIqcToY8D5Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sK4pq/btsMOtAgYG4/kTkDhFcqk6rIqcToY8D5Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsK4pq%2FbtsMOtAgYG4%2FkTkDhFcqk6rIqcToY8D5Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;149&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(1&amp;times;1) + (2&amp;times;0) + (3&amp;times;1) + (2&amp;times;1) + (1&amp;times;0) + (0&amp;times;1) + (3&amp;times;0) + (0&amp;times;1) + (1&amp;times;0) = 6&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;두번째 단계&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;151&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GwcwU/btsMOisdOGH/g4UFT9Oxwgnmkdhcumcu11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GwcwU/btsMOisdOGH/g4UFT9Oxwgnmkdhcumcu11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GwcwU/btsMOisdOGH/g4UFT9Oxwgnmkdhcumcu11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGwcwU%2FbtsMOisdOGH%2Fg4UFT9Oxwgnmkdhcumcu11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;151&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;151&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(2&amp;times;1) + (3&amp;times;0) + (4&amp;times;1) + (1&amp;times;1) + (0&amp;times;0) + (1&amp;times;1) + (0&amp;times;0) + (1&amp;times;1) + (1&amp;times;0) = 9&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;세번째 단계&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RFaZD/btsMNLO1EYt/IQ4E9EqP9Pm0UMrNB6v7q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RFaZD/btsMNLO1EYt/IQ4E9EqP9Pm0UMrNB6v7q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RFaZD/btsMNLO1EYt/IQ4E9EqP9Pm0UMrNB6v7q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRFaZD%2FbtsMNLO1EYt%2FIQ4E9EqP9Pm0UMrNB6v7q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;149&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(3&amp;times;1) + (4&amp;times;0) + (5&amp;times;1) + (0&amp;times;1) + (1&amp;times;0) + (2&amp;times;1) + (1&amp;times;0) + (1&amp;times;1) + (0&amp;times;0) = 11&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;aswift_8_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런식으로 kernel을 왼쪽에서 오른쪽으로 이동시키고, 한칸 아래에서 다시 반복 하면서 합성곱을 구할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(이때 이동값은 바뀔 수 있음 = Stride)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 예제에서는 총 9번의 과정을 거치며, 연산 결과 다음과 같은 특성맵(feature map)을 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;109&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buQ1uQ/btsMN8J2q8g/WtvJUT0AySMk4ZUqqmCIRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buQ1uQ/btsMN8J2q8g/WtvJUT0AySMk4ZUqqmCIRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buQ1uQ/btsMN8J2q8g/WtvJUT0AySMk4ZUqqmCIRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuQ1uQ%2FbtsMN8J2q8g%2FWtvJUT0AySMk4ZUqqmCIRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;143&quot; height=&quot;109&quot; data-origin-width=&quot;143&quot; data-origin-height=&quot;109&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Stride&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kernel이 이미지를 스캔할 때 한 번에 이동하는 픽셀 수.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Stride=1이면 픽셀 1칸씩 이동, Stride=2이면 픽셀 2칸씩 이동. (위 예시에서는 stride=1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Stride 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 출력 크기 결정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Stride가 클수록 feature map의 크기는 작아짐.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 계산 효율성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Stride가 클수록 전체 연산량이 줄어들어 계산속도가 빨라질 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&amp;rarr; But, Stride가 클수록 입력값의 세부 정보를 놓칠 수 있어 중요한 정보가 누락될 수 있음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Padding&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Padding은 합성곱 연산 전에 입력 데이터의 경계에 추가적인 값을(주로 0을) 삽입하는 기법이다. ( &lt;b&gt;Zero Padding&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Valid padding&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Padding을 하지 않을 때 합성곱을 계산하고 나면 feature map의 크기는 입력값보다 작아지는데, 합성곱을 거듭할수록 더욱 크기가 작아지며 입력값의 가장자리에 위치한 픽셀값의 정보는 점차 사라지게 된다. 또한 중요한 정보를 담지 못할 정도로 feature map 작아질 위험도 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt;Padding은 이러한 문제를 방지하기 위한 방법으로,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt; feature map 출력 크기를 조정하여 합성곱 이후에도 적당한 크기의 feature&amp;nbsp; map을 얻을 수 있으며, 입력값 경계 부분의 정보 손실을 방지할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FbLyN/btsMOiFLk9m/TVsSPha6UVa0ulIjUqwR41/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FbLyN/btsMOiFLk9m/TVsSPha6UVa0ulIjUqwR41/img.gif&quot; data-alt=&quot;출처:&amp;amp;amp;nbsp;https://medium.com/@draj0718/zero-padding-in-convolutional-neural-networks-bf1410438e99, Zero-Padding예시사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FbLyN/btsMOiFLk9m/TVsSPha6UVa0ulIjUqwR41/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/FbLyN/btsMOiFLk9m/TVsSPha6UVa0ulIjUqwR41/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;562&quot; height=&quot;281&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;amp;nbsp;https://medium.com/@draj0718/zero-padding-in-convolutional-neural-networks-bf1410438e99, Zero-Padding예시사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 계산대로 라면 5x5행렬은 kernel을 거치며 3x3크기의 feature map을 가지게 되지만, Zero Padding을 통해 5x5크기로 feature map의 크기가 입력 값과 같게 유지됨을 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2. &lt;span style=&quot;text-align: start;&quot;&gt;Pooling Layer&amp;nbsp; 풀링 층 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pooling은 합성곱 신경망(CNN)에서 특성 맵(feature map)의 공간적 차원을 줄이는 다운샘플링 기법이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력 값의 중요한 정보를 유지하면서 계산량과 parameter 수를 줄이는데 사용하며, parameter의 수를 줄이기 때문에 과적합을 방지하는데 도움을 준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP5PzQ/btsMOPb2rzA/5dh0n8wgMmbnLTQghrOYq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP5PzQ/btsMOPb2rzA/5dh0n8wgMmbnLTQghrOYq0/img.png&quot; data-alt=&quot;출처: https://ce-notepad.tistory.com/18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP5PzQ/btsMOPb2rzA/5dh0n8wgMmbnLTQghrOYq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP5PzQ%2FbtsMOPb2rzA%2F5dh0n8wgMmbnLTQghrOYq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;363&quot; height=&quot;272&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://ce-notepad.tistory.com/18&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pooling 에는 여러가지가 있지만 대표적으로는 이렇게 두 가지가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Max Pooling&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;kernel과 겹치는 영역 안에서 최대값을 추출하는 방식으로 다운샘플링 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Average Pooling&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot;&gt;최대값을 추출하는 것이 아니라 평균값을 추출하는 방식으로 다운샘플링&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;3. Fully Connected Layer&amp;nbsp; 완전연결 층&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Fully Connected&quot;, &quot;완전히 연결됨&quot;이라는 용어에서 이미 CNN의 최종 단계임을 느낌적으로 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fully Connected Layer(FC Layer)은 CNN의 마지막 단계에서 특징을 종합하여 최종적인 결정을 내리는 신경망 층으로, 이전 합성곱 층과 풀링 층에서 추출한 특징을 활용하여 분류 또는 회귀 등의 작업을 수행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;232&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM77fq/btsMNkdhgoE/9aY9OE3ojXSmOKSwzIvks0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM77fq/btsMNkdhgoE/9aY9OE3ojXSmOKSwzIvks0/img.png&quot; data-alt=&quot;출처: Sage journals&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM77fq/btsMNkdhgoE/9aY9OE3ojXSmOKSwzIvks0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM77fq%2FbtsMNkdhgoE%2F9aY9OE3ojXSmOKSwzIvks0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;241&quot; data-origin-width=&quot;232&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: Sage journals&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Fully Connected Layer 연산과정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Flatten 과정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; CNN의 합성곱 층(Convolutional Layer)과 풀링 층(Pooling Layer)을 거친 후 얻은 행렬형태의 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;특성 맵(feature map)을 벡터화한다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Fully Connected Layer 연산&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;벡터에 가중치(weight)를 곱하고 편향(bias)를 더해가며 연산을 수행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPzaH1/btsMNA1iLDB/Khh3dQw7E21xAjiuFPS5x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPzaH1/btsMNA1iLDB/Khh3dQw7E21xAjiuFPS5x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPzaH1/btsMNA1iLDB/Khh3dQw7E21xAjiuFPS5x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPzaH1%2FbtsMNA1iLDB%2FKhh3dQw7E21xAjiuFPS5x1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;26&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 활성화 함수 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위에서 구한 가중치 합산 결과(z)를 다음층으로 넘길 때, 활성화 함수가 적용된다. 이때 활성화 함수는 입력값을 비선형적으로 변환하여 신경망이 단순 선형 패턴만으로 부족했던 복잡한 패턴을 학습하는데 도움을 준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Output Layer 최종결과 도출&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Softmax 함수를 적용하여 각 클래스에 대한 확률값(0~1 사이)을 출력하고 가장 높은 확률의 클래스를 예측한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;출력의 크기 구하는 공식&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NXZE/btsMPshf39a/GRCUBn0NRtLQywFlDa0MU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NXZE/btsMPshf39a/GRCUBn0NRtLQywFlDa0MU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NXZE/btsMPshf39a/GRCUBn0NRtLQywFlDa0MU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NXZE%2FbtsMPshf39a%2FGRCUBn0NRtLQywFlDa0MU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;266&quot; height=&quot;72&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;k = kernel의 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p = padding의 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;s = stride의 크기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CNN의 parameter&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Kernel의 크기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커널의 크기가 크면 더 넓은 영역의 특징을 학습하지만, 세밀한 정보를 잃을 수 있다. (주로 3x3 또는 5x5 사용)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. Stride&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;커널이 한번에 이동하는 거리(픽셀 수).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Stride값이 커지면 출력의 크기가 작아지고 연산량이 감소하지만, 정보손실의 위험이 증가한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Padding 여부&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;입력데이터 주위에 추가하는 0값으로, 출력 크기를 조절하거나, 가장자리 정보를 보존하기 위해 사용된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. Pooling의 크기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pooling을 하면 출력의 크기가 감소하여 연산량이 줄어든다. (Pooling 창 크기를 조절하여 출력의 크기와 연산량 조절)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CNN Architecture&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LeNet / AlexNet / VGGNet / ResNet&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;br /&gt;LeNet&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;LeNet은&amp;nbsp;Yann&amp;nbsp;LeCun&amp;nbsp;등이&amp;nbsp;제안한&amp;nbsp;합성곱&amp;nbsp;신경망&amp;nbsp;구조로,&amp;nbsp;주로&amp;nbsp;손글씨&amp;nbsp;글자&amp;nbsp;인식&amp;nbsp;데이터베이스(MNIST&amp;nbsp;database)를&amp;nbsp;위해&amp;nbsp;설계되었다.&amp;nbsp;일반적으로&amp;nbsp;LeNet은&amp;nbsp;LeNet-5를&amp;nbsp;지칭하며,&amp;nbsp;오늘날&amp;nbsp;CNN구조의&amp;nbsp;시작이라고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;LeNet-5의&amp;nbsp;각&amp;nbsp;Layer&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddQ8xp/btsMO8QOOdj/k0kKePGgFsAGaVXvRFhxU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddQ8xp/btsMO8QOOdj/k0kKePGgFsAGaVXvRFhxU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddQ8xp/btsMO8QOOdj/k0kKePGgFsAGaVXvRFhxU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddQ8xp%2FbtsMO8QOOdj%2Fk0kKePGgFsAGaVXvRFhxU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;224&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LeNet-5는 위 그림과 같이 총 7개의 Layer로 구성되어 있다.&amp;nbsp;&lt;br /&gt;&amp;nbsp;* 여기서 입력층 (Input Layer)은 단순히&amp;nbsp;&amp;nbsp;32&amp;times;32 픽셀의 흑백 이미지(data)를 입력받음&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.&amp;nbsp;C1:&amp;nbsp;Convolutional&amp;nbsp;Layer&lt;/b&gt;&lt;br /&gt;6개의&amp;nbsp;5&amp;times;5&amp;nbsp;kernel&amp;nbsp;사용을&amp;nbsp;사용하여&amp;nbsp;6개의&amp;nbsp;feature&amp;nbsp;map&amp;nbsp;생성&lt;br /&gt;&amp;rarr; 32x32 사이즈의 이미지에서는 6장의 28&amp;times;28크기의 feature map을 얻게 됨&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.&amp;nbsp;S2:&amp;nbsp;Subsampling&amp;nbsp;Layer&lt;/b&gt;&lt;br /&gt;평균&amp;nbsp;풀링(Average&amp;nbsp;Pooling,&amp;nbsp;2&amp;times;2)을&amp;nbsp;적용하여&amp;nbsp;채널의&amp;nbsp;수는&amp;nbsp;유지하면서&amp;nbsp;사이즈를&amp;nbsp;두배로&amp;nbsp;줄임&amp;nbsp;(이때&amp;nbsp;시그모이드&amp;nbsp;함수&amp;nbsp;적용)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;결과 14&amp;times;14 크기의 feature map 6장을 얻게 됨&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.&amp;nbsp;C3:&amp;nbsp;Convolutional&amp;nbsp;Layer&lt;/b&gt;&lt;br /&gt;6장의&amp;nbsp;14&amp;times;14&amp;nbsp;feature&amp;nbsp;map에&amp;nbsp;16개의&amp;nbsp;5&amp;times;5&amp;nbsp;kernel&amp;nbsp;사용&amp;nbsp;&amp;rarr;&amp;nbsp;16개의&amp;nbsp;10x10&amp;nbsp;feature&amp;nbsp;map&amp;nbsp;생성&lt;br /&gt;&lt;br /&gt;이때,&amp;nbsp;일반적인&amp;nbsp;CNN&amp;nbsp;방식이라면&amp;nbsp;각&amp;nbsp;kernel은&amp;nbsp;6장의&amp;nbsp;feature&amp;nbsp;map&amp;nbsp;전체와&amp;nbsp;연결되어야&amp;nbsp;하지만,&amp;nbsp;LeNet-5는&amp;nbsp;일부&amp;nbsp;kernel이&amp;nbsp;S2층&amp;nbsp;Feature&amp;nbsp;Map&amp;nbsp;중&amp;nbsp;&lt;u&gt;일부만&amp;nbsp;선택적으로&amp;nbsp;사용&lt;/u&gt;하도록&amp;nbsp;설계되었다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이부분을&amp;nbsp;이해하기&amp;nbsp;힘들어서&amp;nbsp;다른&amp;nbsp;분이&amp;nbsp;정리한&amp;nbsp;내용을&amp;nbsp;참고해보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cbqsp/btsMOu086mt/5gNQqnWCd0KCmZ6dBIBPd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cbqsp/btsMOu086mt/5gNQqnWCd0KCmZ6dBIBPd1/img.png&quot; data-alt=&quot;(출처:&amp;amp;nbsp; https://velog.io/@lighthouse97/LeNet-5%EC%9D%98-%EC%9D%B4%ED%95%B4 &amp;amp;nbsp;)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cbqsp/btsMOu086mt/5gNQqnWCd0KCmZ6dBIBPd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCbqsp%2FbtsMOu086mt%2F5gNQqnWCd0KCmZ6dBIBPd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;392&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(출처:&amp;nbsp; https://velog.io/@lighthouse97/LeNet-5%EC%9D%98-%EC%9D%B4%ED%95%B4 &amp;nbsp;)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;4.&amp;nbsp;S4:&amp;nbsp;Subsampling&amp;nbsp;Layer&lt;/b&gt;&lt;br /&gt;16장의&amp;nbsp;10x10&amp;nbsp;feature&amp;nbsp;map에&amp;nbsp;대하여&amp;nbsp;subsampling&amp;nbsp;을&amp;nbsp;진행해&amp;nbsp;16장의&amp;nbsp;5x5&amp;nbsp;feature&amp;nbsp;map으로&amp;nbsp;축소시킴&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5.&amp;nbsp;C5:&amp;nbsp;Convolutional&amp;nbsp;layer&lt;/b&gt;&lt;br /&gt;16장의&amp;nbsp;5x5&amp;nbsp;feature&amp;nbsp;map에&amp;nbsp;120개의&amp;nbsp;5x5&amp;nbsp;사이즈의&amp;nbsp;kernel사용&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;120개의 1x1 feature map 생성&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6.&amp;nbsp;F6:&amp;nbsp;Fully-connected&amp;nbsp;layer&lt;/b&gt;&lt;br /&gt;C5&amp;nbsp;층에서&amp;nbsp;나온&amp;nbsp;120개의&amp;nbsp;feature&amp;nbsp;map을&amp;nbsp;120개의&amp;nbsp;뉴런으로&amp;nbsp;간주하고,&amp;nbsp;84개의&amp;nbsp;출력&amp;nbsp;뉴런에&amp;nbsp;모두&amp;nbsp;연결시킴&lt;br /&gt;(&amp;nbsp;84개의&amp;nbsp;뉴런(유닛)은&amp;nbsp;LeNet-5에서&amp;nbsp;주어진&amp;nbsp;설정)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7.&amp;nbsp;Output&amp;nbsp;Layer&amp;nbsp;출력층&lt;/b&gt;&lt;br /&gt;F6의&amp;nbsp;84개의&amp;nbsp;출력을&amp;nbsp;기반으로&amp;nbsp;10개의&amp;nbsp;클래스로&amp;nbsp;분류&lt;br /&gt;(손글씨 인식이므로 0~9의 숫자 중 하나로 분류)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;AlexNet&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AlexNet은 2012년 ImageNet 대회(ILSVRC)에서 기존의 모델들 보다 압도적인 이미지 분류 성능을 보이며 딥러닝의 대중화에 큰 영향을 미친 합성곱 신경망(CNN) 모델이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zBbfe/btsMOvdSy3u/3fTZPZMMo3ebp72gKJ8P6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zBbfe/btsMOvdSy3u/3fTZPZMMo3ebp72gKJ8P6K/img.png&quot; data-alt=&quot;https://daeun-computer-uneasy.tistory.com/33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zBbfe/btsMOvdSy3u/3fTZPZMMo3ebp72gKJ8P6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzBbfe%2FbtsMOvdSy3u%2F3fTZPZMMo3ebp72gKJ8P6K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;616&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;616&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://daeun-computer-uneasy.tistory.com/33&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AlexNet은 기본적으로 gpu 2대를 사용하여 병렬처리 연산을 수행을 하고,&amp;nbsp;&amp;nbsp;5개의 Convolution Layer과 3개의 Fully Connected Later, 총 8개의 Layer로 구성되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;AlexNet의&amp;nbsp;기술&amp;nbsp;및&amp;nbsp;특징 &lt;/b&gt;&lt;br /&gt;1.&amp;nbsp;ReLU&amp;nbsp;활성화함수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5JEHl/btsMNcGsV65/UXil59E90m98I0KtniQD31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5JEHl/btsMNcGsV65/UXil59E90m98I0KtniQD31/img.png&quot; data-alt=&quot;ReLU 함수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5JEHl/btsMNcGsV65/UXil59E90m98I0KtniQD31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5JEHl%2FbtsMNcGsV65%2FUXil59E90m98I0KtniQD31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;232&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ReLU 함수&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;ReLU는 음수 입력에 대해 0을 반환하고 양수는 그대로 전달하는 함수로, 기존에 사용하던 sigmoid나 tanh와 같은 함수에 비해 기울기가 소실되는 문제(vanishing gradient problem)를 덜 발생시킨다. 이로 인해 매우 깊은 네트워크에서도 안정적으로 학습할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2.&amp;nbsp;Local&amp;nbsp;Response&amp;nbsp;Nomalization&amp;nbsp;(NRL) &lt;br /&gt;LRN은 생물학적 측면억제(lateral inhibition) 현상을 모방한 방법으로, 강한 응답은 더욱 부각되고, 약한 응답은 억제되어 중요한 특징이 두드러지게 만드는 역할을 한다. &amp;rarr; LRN은 네트워크의 일반화 성능을 높이고, 과적합을 방지하는 데 도움&lt;br /&gt;(AlexNet에서는 각 합성곱 층에서 ReLU 활성화 함수 적용 후, LRN을 수행)&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;Overlapping&amp;nbsp;Max&amp;nbsp;Pooling &lt;br /&gt;Overlapping&amp;nbsp;Pooling은&amp;nbsp;인접한&amp;nbsp;풀링&amp;nbsp;영역이&amp;nbsp;일부&amp;nbsp;겹치도록&amp;nbsp;하는&amp;nbsp;방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;802&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecgVEP/btsMOE9yYT3/LtSv91M2RfzVzkbCxk4EWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecgVEP/btsMOE9yYT3/LtSv91M2RfzVzkbCxk4EWK/img.png&quot; data-alt=&quot;사진출처: https://www.datamaker.io/blog/posts/34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecgVEP/btsMOE9yYT3/LtSv91M2RfzVzkbCxk4EWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecgVEP%2FbtsMOE9yYT3%2FLtSv91M2RfzVzkbCxk4EWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;269&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;802&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진출처: https://www.datamaker.io/blog/posts/34&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Overlapping&amp;nbsp;Pooling은&amp;nbsp;영역간의&amp;nbsp;정보가&amp;nbsp;공유되어&amp;nbsp;부드럽게&amp;nbsp;다운&amp;nbsp;샘플링&amp;nbsp;되고&amp;nbsp;경계의&amp;nbsp;정보&amp;nbsp;손실을&amp;nbsp;최소화하며,&amp;nbsp;불필요한&amp;nbsp;세부사항에&amp;nbsp;과도하게&amp;nbsp;적합되는것을&amp;nbsp;방지하여&amp;nbsp;일반화&amp;nbsp;성능에&amp;nbsp;도움을&amp;nbsp;준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; VGGNet&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;VGGNet은 옥스퍼드 대학 VGG 연구팀에 의해 개발되었으며, 2014년 ILSVRC 이미지 분류 대회에서 준우승한 CNN 모델이다. VGG16, VGG19등 다양한 모델이 있는데 이는 Layer의 개수 차이라고 보면 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;(Layer 수가 더 많은 VGG19가 VGG16보다 더 deep한 모델)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGZijn/btsMMFPQgfZ/uTlx4GcbBeANxEJ31yddU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGZijn/btsMMFPQgfZ/uTlx4GcbBeANxEJ31yddU0/img.png&quot; data-alt=&quot;VGG16&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGZijn/btsMMFPQgfZ/uTlx4GcbBeANxEJ31yddU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGZijn%2FbtsMMFPQgfZ%2FuTlx4GcbBeANxEJ31yddU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;365&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VGG16&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VGGNet16의 구조 및 연산과정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;입력&amp;nbsp;데이터(Input&amp;nbsp;Layer)&amp;nbsp; &lt;br /&gt;VGG16의&amp;nbsp;입력&amp;nbsp;크기는&amp;nbsp;224&amp;times;224&amp;times;3&amp;nbsp;(RGB)이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&amp;nbsp;합성곱&amp;nbsp;계층&amp;nbsp;(Convolutional&amp;nbsp;Layers) &lt;br /&gt;모든 합성곱 연산은 &lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3&amp;times;3 kernel(필터)&lt;/span&gt;&lt;/u&gt;, stride=1, padding=1(SAME padding)을 사용하여 이루어지고, 각 층은 그에 따른 feature map을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp;풀링&amp;nbsp;계층&amp;nbsp;(Max&amp;nbsp;Pooling&amp;nbsp;Layers) &lt;br /&gt;2&amp;times;2 크기의 Max Pooling (stride=2) 사용&lt;br /&gt;특징 맵의 크기를 절반으로 줄여 계산량을 줄이고, 중요한 특징만 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;Conv1&lt;/i&gt; &lt;br /&gt;3&amp;times;3&amp;nbsp;필터&amp;nbsp;64개를&amp;nbsp;사용하여&amp;nbsp;입력&amp;nbsp;이미지를&amp;nbsp;변환&amp;nbsp;&amp;rarr;&amp;nbsp;(224&amp;times;224&amp;times;64)&amp;nbsp;출력 &lt;br /&gt;또&amp;nbsp;다른&amp;nbsp;3&amp;times;3&amp;nbsp;필터&amp;nbsp;64개&amp;nbsp;사용&amp;nbsp;&amp;rarr;&amp;nbsp;(224&amp;times;224&amp;times;64)&amp;nbsp;출력 &lt;br /&gt;Max&amp;nbsp;Pooling&amp;nbsp;(2&amp;times;2,&amp;nbsp;stride=2):&amp;nbsp;이미지&amp;nbsp;크기&amp;nbsp;절반으로&amp;nbsp;축소&amp;nbsp;&amp;rarr;&amp;nbsp;(112&amp;times;112&amp;times;64)&amp;nbsp;출력 &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Conv2&amp;nbsp; &lt;/i&gt;&lt;br /&gt;3&amp;times;3&amp;nbsp;필터&amp;nbsp;128개를&amp;nbsp;사용하여&amp;nbsp;입력&amp;nbsp;이미지를&amp;nbsp;변환&amp;nbsp;&amp;rarr;&amp;nbsp;(112&amp;times;112&amp;times;128)&amp;nbsp;출력 &lt;br /&gt;또&amp;nbsp;다른&amp;nbsp;3&amp;times;3&amp;nbsp;필터&amp;nbsp;128개를&amp;nbsp;사용&amp;nbsp;&amp;rarr;&amp;nbsp;(112&amp;times;112&amp;times;128)&amp;nbsp;출력 &lt;br /&gt;Max&amp;nbsp;Pooling&amp;nbsp;이미지&amp;nbsp;크기&amp;nbsp;절반으로&amp;nbsp;축소&amp;nbsp;&amp;rarr;&amp;nbsp;(56&amp;times;56&amp;times;256)&amp;nbsp;출력 &lt;br /&gt;&lt;br /&gt;이런&amp;nbsp;식으로&amp;nbsp;합성곱&amp;nbsp;및&amp;nbsp;풀링&amp;nbsp;연산이&amp;nbsp;반복되면서&amp;nbsp;점점&amp;nbsp;더&amp;nbsp;깊고&amp;nbsp;풍부한&amp;nbsp;특징이&amp;nbsp;추출된다. &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;완전연결&amp;nbsp;계층&amp;nbsp;(Fully&amp;nbsp;Connected&amp;nbsp;Layers) &lt;br /&gt;최종 출력된 feature map(7&amp;times;7&amp;times;512)을 1차원 벡터(flatten)로 변환한 후, 가중치 연산 및 활성화 함수를 적용하여 최종 클래스를 분류(예측) 분류한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;3x3&amp;nbsp; 필터를 사용하는 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VGGNet은 더 깊은 네트워크를 만들면서도 가중치 갯수를 줄이기 위해서&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;3x3의 필터를 고정해서 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 직관적으로 이해하기 위해 3x3, 7x7 필터로 예시를 들어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctufLl/btsMMfxadKD/r3JFbEQYLjL9W51pse4zw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctufLl/btsMMfxadKD/r3JFbEQYLjL9W51pse4zw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctufLl/btsMMfxadKD/r3JFbEQYLjL9W51pse4zw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctufLl%2FbtsMMfxadKD%2Fr3JFbEQYLjL9W51pse4zw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;339&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 입력 이미지의 크기가 7x7일때, 3x3필터를 이용할 경우 (stride=1로 convolution 하였을 때) 총 2번의 연산과정을 거치고, 총 18개의 가중치를 갖게 된다. 반면 5x5필터를 이용할 경우 1번의 연산과정을 거치며, 총 25개의 가중치를 갖게 된다. CNN에서 가중치는 모두 연산 비용으로 들어가기에, 가중치가 적다는 것은 학습 속도와 메모리 사용량 측면에서 큰 이점을 가지게 되며,&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt; 동시에 층의 갯수가 늘어나면서 더 복잡한 수준의 네트워크를 학습할 수 있게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt; ResNet &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; ResNet은 2015년 Kaiming He 등 연구팀에 의해 발표된 딥러닝 모델로, 잔차 연결(Residual Connections)을 도입하여 깊은 네트워크의 학습을 안정화시키는데 기여한 모델이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;깊은 네트워크의 문제점 (한계)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 딥러닝 네트워크는 층이 깊어질 수록 학습이 어려워지는 문제가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기울기 소실(Vanishing Gradient) 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망이 깊어질수록 오차 역전파 과정에서 기울기가 점점 작아져서, 초기 층(input층에 가까운 은닉층)의 가중치가 거의 업데이트되지 않아 모델이 학습하지 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 모델의 성능저하 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신경망이 깊어짐에 따라 훈련 데이터에 대한 성능이 오히려 떨어지는현상 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;잔차 연결(Residual Connections) = 건너뛰기(Skip-Connection)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ResNet은 이러한 레이어 깊이에 따른 문제를 해결하기 위하여 '잔차'연결을 도입했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잔차연결은 &lt;span style=&quot;color: #000000;&quot;&gt;입력값을 그대로 다음 층에 전달하는 방식으로, 기존 층에서 학습해야 할 부분만 학습하도록 도와주는 기법이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 잔여블록(Residual Block)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잔여블록은 생물의 뉴런 네트워크가 복잡한 층들을 순차적으로 지나지 않고 여기저기 퍼져 있어, 멀리 떨어진 뉴런들을 이어주는 구조에서 아이디어를 얻어 착안한 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOpcZY/btsMNqR3g2Q/Xf5h9oVw3nei5NFqBjnWH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOpcZY/btsMNqR3g2Q/Xf5h9oVw3nei5NFqBjnWH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOpcZY/btsMNqR3g2Q/Xf5h9oVw3nei5NFqBjnWH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOpcZY%2FbtsMNqR3g2Q%2FXf5h9oVw3nei5NFqBjnWH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;859&quot; height=&quot;335&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모델이 학습해야 할 네트워크는 너무 복잡해 input 정보가 흐려질 위험이 있기 때문에,&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;297&quot; data-start=&quot;195&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;잔여 블록에서는&amp;nbsp;입력값을 처리한 결과(F(x))에 입력값 자체를 더해주는 방식을 취함으로서 기존의 정보가 그대로 전달되어 네트워크가 기존 정보까지 함께 학습할 수 있도록 돕는다. &amp;rarr; 기울기 소실 문제나 정보 손실 문제를 해결&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dExCgj/btsMOvdWJac/huvnvQ9wlDXkqjUH7U3twK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dExCgj/btsMOvdWJac/huvnvQ9wlDXkqjUH7U3twK/img.png&quot; data-alt=&quot;딥러닝 스터디 멤버1의 정리사진~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dExCgj/btsMOvdWJac/huvnvQ9wlDXkqjUH7U3twK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdExCgj%2FbtsMOvdWJac%2FhuvnvQ9wlDXkqjUH7U3twK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;98&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;딥러닝 스터디 멤버1의 정리사진~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;297&quot; data-start=&quot;195&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;*참고로 ResNet이라 이름도 &lt;span style=&quot;text-align: start;&quot;&gt;Residual Connections을 사용한다고 하여 붙여진 이름이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>tannyrun</author>
      <guid isPermaLink="true">https://tannyrun.tistory.com/1</guid>
      <comments>https://tannyrun.tistory.com/1#entry1comment</comments>
      <pubDate>Tue, 18 Mar 2025 00:29:57 +0900</pubDate>
    </item>
  </channel>
</rss>