<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Suheeeee.Dev]]></title><description><![CDATA[Dev blog for me.]]></description><link>https://suheeeee-dev.netlify.app</link><generator>GatsbyJS</generator><lastBuildDate>Thu, 09 Dec 2021 06:29:15 GMT</lastBuildDate><item><title><![CDATA[[알고문풀] 프로그래머스 : 섬 연결하기]]></title><description><![CDATA[알고리즘 문제풀이 : 프로그래머스/섬 연결하기/42861]]></description><link>https://suheeeee-dev.netlify.app/posts/algorithm-problem/programmers/programmers-42861</link><guid isPermaLink="false">https://suheeeee-dev.netlify.app/posts/algorithm-problem/programmers/programmers-42861</guid><pubDate>Thu, 28 Oct 2021 11:48:32 GMT</pubDate><content:encoded>&lt;h3 id=&quot;문제주소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C%EC%A3%BC%EC%86%8C&quot; aria-label=&quot;문제주소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제주소&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42861&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42861&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;문제접근-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C%EC%A0%91%EA%B7%BC-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;문제접근 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제접근 방식&lt;/h3&gt;
&lt;p&gt;도시 연결 + 그리디 👉 MST 문제 👉 Kruskal&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;입력된 edge를 weight를 기준으로 오름차순 정렬&lt;/li&gt;
&lt;li&gt;두개의 배열을 초기화 한다.&lt;/li&gt;
&lt;li&gt;visited : node의 방문여부 기록, 기록되는 값은 노드가 속하는 그룹, 0으로 초기화&lt;/li&gt;
&lt;li&gt;answer : 선택된 edge의 weight를 기록, 빈 배열로 초기화&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;edge를 순회하면 아래의 조건에 따라 동작하면 배열의 값을 변경한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;현재 선택된 edge에 연결된 두 node n1, n2에 대하여&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;두 노드 다 방문 전(&lt;code class=&quot;language-text&quot;&gt;visited[n1] == 0 &amp;amp;&amp;amp; visited[n2] == 0&lt;/code&gt;)이라면, 새로운 그룹을 추가하고 visited의 값을 그룹으로 할당한다. answer에 현재 edge의 weight를 추가한다.&lt;/li&gt;
&lt;li&gt;두 노드 중 하나의 노드에 방문을 했었다(&lt;code class=&quot;language-text&quot;&gt;visited[n1] == 0 &amp;amp;&amp;amp; visited[n2] &gt; 0&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;visited[n1] &gt; 0 &amp;amp;&amp;amp; visited[n2] == 0&lt;/code&gt;)면, 방문 전 노드의 visited 값을 방문한 노드의 그룹 값으로 할당한다. answer에 현재 edge의 weight를 추가한다.&lt;/li&gt;
&lt;li&gt;두 노드를 모두 방문했었는데 서로 같은 그룹(&lt;code class=&quot;language-text&quot;&gt;visited[n1] == visited[n2]&lt;/code&gt;)이라면, 아무 동작도 하지 않는다.&lt;/li&gt;
&lt;li&gt;두 노드를 모두 방문했었는데 서로 다른 그룹(&lt;code class=&quot;language-text&quot;&gt;visited[n1] != visited[n2] &amp;amp;&amp;amp; visited[n1] &gt; 0 &amp;amp;&amp;amp; visited[n2] &gt; 0&lt;/code&gt;)이라면, n2의 그룹을 n로 병합한다. answer에 현재 node의 weight를 추가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;answer의 길이가 n-1에 도달하면 순회를 종료한다.&lt;/li&gt;
&lt;li&gt;answer의 합을 반환한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;입출력-예&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88&quot; aria-label=&quot;입출력 예 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;입출력 예&lt;/h4&gt;
&lt;p&gt;n=4, costs=[[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]], return=4&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 366px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/15282355b2340215eadebb4ce18d8edc/8b153/42861.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABgklEQVQoz4VR13KDQAz0/3+bn20nDv2OA47eTfFGEvg10cwNjMpqd3VJTIzr9Yrn04HvefCDAJ9YlhdirSRfVvWRfL/l03Wt5IMwwrbvZ+mNS1EUcF0XxhhoraHozfOMPM+RpikteuLr8ZBanhfohwE7ATDg/X7HN9UZcF2WA3Chn77vsW0bpmnGui6YxhEPAolNAqUihMSCAW8EUBHT/WSklEJVH8zXdT0Am6bG/XZDbi3CSMHaTKR6roeirKBpiAczyrMdTdMKwDxN1OMiIyW8gAkJYNu28MiLLMuISShSudl1HFiSqJlhEJIlCRzHRX0yYouSJEEcx2IFgwpg13XwfR9lWRITTQyt+BFQLqeczVIYGrI2F+CGCPAg1xNawj2KlNFJPpIbOQozdE+mzJCXpJmlISMsyqpCFEVoqd+mBqE2Yo+lfsf5EXs4LnwEPspIh+Drvl4v8WOgaw5DL9LiWKMoSqnzEXnhMIzync7HeQHEH7HvG1qyhAdWWvJfsORfTu6sm5imPuYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/15282355b2340215eadebb4ce18d8edc/8ac56/42861.webp 240w,
/static/15282355b2340215eadebb4ce18d8edc/4146f/42861.webp 366w&quot;
              sizes=&quot;(max-width: 366px) 100vw, 366px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/15282355b2340215eadebb4ce18d8edc/8ff5a/42861.png 240w,
/static/15282355b2340215eadebb4ce18d8edc/8b153/42861.png 366w&quot;
            sizes=&quot;(max-width: 366px) 100vw, 366px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/15282355b2340215eadebb4ce18d8edc/8b153/42861.png&quot;
            alt=&quot;42861&quot;
            title=&quot;42861&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;solution&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#solution&quot; aria-label=&quot;solution permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Solution&lt;/h3&gt;
&lt;h3 id=&quot;python&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#python&quot; aria-label=&quot;python permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Python&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; numpy &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; np

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;solution&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; costs&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    visited &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; np&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;zeros&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; dtype&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# cycle 체크를 위한 그룹기입&lt;/span&gt;
    answer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 선택된 간선의 weight&lt;/span&gt;
    g &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 그룹번호&lt;/span&gt;

    costs_sorted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token builtin&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; key&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;lambda&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; c &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; costs_sorted&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 둘다 방문 X&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;# 그룹 추가&lt;/span&gt;
            g &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
            visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; g
            visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; g
        &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 같은 그룹&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 첫번째만 방문&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;# 두번쨰가 첫번째 그룹으로 삽입&lt;/span&gt;
            visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 두번째만 방문&lt;/span&gt;
            visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# 서로 다른 그룹&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;# 두번째가 속한 그룹을 첫번째가 속한 그룹으로 병합&lt;/span&gt;
            visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;visited &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

        answer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;append&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; n&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;answer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;javascript&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#javascript&quot; aria-label=&quot;javascript permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;JavaScript&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// minimum spanning tree&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;solution&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; costs&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; answer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; group &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; visited &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; cnt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;

  costs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; n &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; cnt &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; isVisited0 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; isVisited1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isVisited0 &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; isVisited1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// s, d visited -&gt; group check&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; groupNum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; group&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; group&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; group&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// 1. same group -&gt; continue&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;continue&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// 2. diff group -&gt; union group, cnt ++, answer += cost&lt;/span&gt;
      group&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; group&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;group&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      group&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupNum&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isVisited0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// s visited&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add d to visited&lt;/span&gt;
      visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add d to group&lt;/span&gt;
      group&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;isVisited1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// d visited&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add s to visited&lt;/span&gt;
      visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add s to group&lt;/span&gt;
      group&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
          g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// not visited s, d&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add s and d to visited&lt;/span&gt;
      visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
      visited&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;

      &lt;span class=&quot;token comment&quot;&gt;// add new group&lt;/span&gt;
      group&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    answer &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; costs&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
    cnt &lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; answer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;</content:encoded></item><item><title><![CDATA[[알고문풀] 프로그래머스 : 체육복]]></title><description><![CDATA[알고리즘 문제풀이 : 프로그래머스/체육복/42862]]></description><link>https://suheeeee-dev.netlify.app/posts/algorithm-problem/programmers/programmers-42862</link><guid isPermaLink="false">https://suheeeee-dev.netlify.app/posts/algorithm-problem/programmers/programmers-42862</guid><pubDate>Thu, 28 Oct 2021 10:48:32 GMT</pubDate><content:encoded>&lt;h3 id=&quot;문제주소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C%EC%A3%BC%EC%86%8C&quot; aria-label=&quot;문제주소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제주소&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42862&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42862&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;문제접근-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C%EC%A0%91%EA%B7%BC-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;문제접근 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제접근 방식&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;초기화 : 학생의 수 n만큼의 길이를 가지는 배열(std)을 생성하고 0으로 초기화한다.&lt;/li&gt;
&lt;li&gt;lost를 순회하며 체육복을 도난 당한 학생의 std 값에 1을 빼준다.&lt;/li&gt;
&lt;li&gt;reserve를 순회하며 여벌의 체육복을 가진 학생 학생의 std 값에 1을 더해준다.&lt;/li&gt;
&lt;li&gt;std를 순회하면 값이 -1인 경우, 전후의 값에 1이 있다면, 해당 값을 -1하고 현재 값에 +1을 해준다.&lt;/li&gt;
&lt;li&gt;std에서 그 값이 0 이상인 것의 갯수를 구한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;✨ 학생 수가 최대 30명이라 배열을 순회하는 것에 대한 부담감이 없어 가능한 방식이다. 만약 제약조건이 달라진다면 풀이도 달려져야 할 것이다.&lt;/p&gt;
&lt;h4 id=&quot;입출력-예&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%98%88&quot; aria-label=&quot;입출력 예 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;입출력 예&lt;/h4&gt;
&lt;p&gt;n=5, lost=[2, 4], reserve=[1, 3, 5], return=5&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 448px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d364a257db793048d98acd061bc830f0/33b38/%EC%B2%B4%EC%9C%A1%EB%B3%B5.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.916666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB9UlEQVQ4y4WT6W7bMBCE/f7PlvxIUKdoLCm2JFIURZ3W6Ws6S8eGW8AtAWJ5aD/OHlpN04iu20PGPM9o6sbb2zidTmjaFv8al8vlvl5td1v8WH9gmiZEUYjXl1cEQYhxGFDVNUyWYc37/b5Dzf1yOGAcR+73SNMUfT940IHnAl4VuxhaaxhjvC2d8zbTCkEY+nWSpIi4jqIIewKqsvSPv7+9Yf3xE1VV+0g80MQxyugLzlokqSJIQymFHR9SVGB5LkqyzCAkdKDyZVm8QlFXEt73Pc7n8xUY82NDZwGWSULHzAMTrrXS33sNVxQe2LadB5Slw267RcGINpvAg30OUzrG30py2o6wlEo1QaLW2hw57+Q+CAOvbJ4nNE2NPM99ngU2DOMVKEokR4WETJgjqGYaFGGisCisV5HnFjHPRxbvlq9bF0i4x+PxGvIjUJRJiJpgS1jFvSXQFg6WaiSXHRW2bCOTKWyCgB2yZtWn50BpE3FUpkAWZ2jTBI4h3Yoj7SUtIlba57a/t036AJRiSPuIFaUbFsHykZ4hFzxPCJSmFzWP8w+g5EWmhCRgAYnqgsX49fkJbXI449DyB9AqxXI83QF/Tw8UkKGT/AUSlqMasU1VIZYH2OBSoCzTGHg3e+flOfB//2fTNOjYe+IgQyr6bIrPbzPl2cpN1l9XAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/d364a257db793048d98acd061bc830f0/8ac56/%EC%B2%B4%EC%9C%A1%EB%B3%B5.webp 240w,
/static/d364a257db793048d98acd061bc830f0/76be4/%EC%B2%B4%EC%9C%A1%EB%B3%B5.webp 448w&quot;
              sizes=&quot;(max-width: 448px) 100vw, 448px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/d364a257db793048d98acd061bc830f0/8ff5a/%EC%B2%B4%EC%9C%A1%EB%B3%B5.png 240w,
/static/d364a257db793048d98acd061bc830f0/33b38/%EC%B2%B4%EC%9C%A1%EB%B3%B5.png 448w&quot;
            sizes=&quot;(max-width: 448px) 100vw, 448px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/d364a257db793048d98acd061bc830f0/33b38/%EC%B2%B4%EC%9C%A1%EB%B3%B5.png&quot;
            alt=&quot;체육복 예시&quot;
            title=&quot;체육복 예시&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;solution&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#solution&quot; aria-label=&quot;solution permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Solution&lt;/h3&gt;
&lt;h4 id=&quot;javascript&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#javascript&quot; aria-label=&quot;javascript permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;JavaScript&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;solution&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lost&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; reserve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; answer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; std &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; idx &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; idx &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; n&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; idx&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    lost&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;val&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    reserve&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;val&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    std&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;val&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;val &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 이전&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; n&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    std&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;splice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    answer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;acc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cur&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; cur &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; acc &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; acc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; answer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;python&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#python&quot; aria-label=&quot;python permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Python&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;solution&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;n&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lost&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; reserve&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    answer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
    std &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;n
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; lost&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; reserve&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; e &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;enumerate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;std&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; e &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;elif&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; n&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;and&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
            std&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;sum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; e &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; e &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; std&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; __name__ &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;solution&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;solution&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;solution&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;</content:encoded></item><item><title><![CDATA[CS231N Lec.10 Recurrent Neural Networks]]></title><description><![CDATA[Lec.10 Recurrent Neural Networks 강의 정리본. RNN, LSTM, GRU, Language modeling, Image captioning, visual question answering, Soft attention]]></description><link>https://suheeeee-dev.netlify.app/posts/2021-09-06/cs231n-lec-10</link><guid isPermaLink="false">https://suheeeee-dev.netlify.app/posts/2021-09-06/cs231n-lec-10</guid><pubDate>Mon, 06 Sep 2021 04:47:32 GMT</pubDate><content:encoded>&lt;p&gt;본 게시물은 &lt;a href=&quot;http://cs231n.stanford.edu/2017/syllabus.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;CS231n: Convolutional Neural Networks for Visual Recognition (2017)&lt;/a&gt; 강의의 영상과 슬라이드를 기반을 작성 되었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;recurrent-neural-networks&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#recurrent-neural-networks&quot; aria-label=&quot;recurrent neural networks permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Recurrent Neural Networks&lt;/h1&gt;
&lt;p&gt;📌 RNN은 가변 길이(0~N) 데이터를 입출력으로 받아들일 수 있는 네트워크 구조&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 848px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/166c94c5e812fe77273ca962631b2b3c/d52e5/01_overview.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.08333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABTElEQVQY0x2RiXKDMAxE8/+/1jZpp4UcBEIopyHEjrkCpK8Cz3js1a5Wkr0xxhD9JvR9R9N2XKOYKE54vV5ofSfNMgpVsaxxfApO+Y1T0lyJ5o+2bblKfih51jZs+v6Jey6Yp5Gisrw7Gbt9Rj+MDFJEa8vxUjEJ3zYN2jRs3Yz3n4yythjb8eHma6wSLIYDgXQ0TxPVXXMMr3jXiGF4UusbSZESZTnTOFLeFFmZr/yiq7XBSpFTuOAI/XiI4dDhx0fpYBbDgu/gA+fyJeONhGnAp/dGkJxW3osOfPtbfvyd6LbUpsK2FifYSWzBNZuh68g8j3GeMXmOimOMVBql4zIMSRwHFQQrn5/PpK5Lcblw15qu77F3eef9nkTiD7lvnsNA6ftM8glWKeo0XYWTGNzEsBDxci64FGMluBLcyGcsUzRirA4HCtmNGP4DxHbAncEyd1MAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/166c94c5e812fe77273ca962631b2b3c/8ac56/01_overview.webp 240w,
/static/166c94c5e812fe77273ca962631b2b3c/d3be9/01_overview.webp 480w,
/static/166c94c5e812fe77273ca962631b2b3c/27a2c/01_overview.webp 848w&quot;
              sizes=&quot;(max-width: 848px) 100vw, 848px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/166c94c5e812fe77273ca962631b2b3c/8ff5a/01_overview.png 240w,
/static/166c94c5e812fe77273ca962631b2b3c/e85cb/01_overview.png 480w,
/static/166c94c5e812fe77273ca962631b2b3c/d52e5/01_overview.png 848w&quot;
            sizes=&quot;(max-width: 848px) 100vw, 848px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/166c94c5e812fe77273ca962631b2b3c/d52e5/01_overview.png&quot;
            alt=&quot;01_overview&quot;
            title=&quot;01_overview&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;유형&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;입력&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;출력&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;예시&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;One to One&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단일&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단일&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;지금까지 강의에서 다룬 아키텍쳐(Vanilla Neural network)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;One to Many&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;고정&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;가변&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Image captioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Many to One&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;가변&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단일&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;Sentiment Classification, Video Classification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Many to Many&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;가변&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;가변&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;입출력의 길이가 다른 경우 : Machine Translation&lt;br&gt;입출력의 길이가 같은 경우 : Video classification on frame level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;단일 입출력 예시 : 이미지, 숫자(라벨, 확률값, …)&lt;/li&gt;
&lt;li&gt;가변 입출력 예시 : 문장, 비디오&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;rnn&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rnn&quot; aria-label=&quot;rnn permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RNN&lt;/h2&gt;
&lt;h3 id=&quot;1-기본-구조&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0&quot; aria-label=&quot;1 기본 구조 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. 기본 구조&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 836px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/055c457b5d5e26e8a389f493106897b7/27b8e/02_rnn_form.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABiElEQVQoz1WSQXKbQBBFdSPfIvfIGbzxNktXLpBVKnsvvc9GlkxsZJmAFSsWUQhWwAZkEAIkAfMyA0KlTFXXTHc1j99/ppfnOZmK9Zosy1B5mqbNnmXtWdXrukYtIcR/e7Et8aPskPcs02R8d8doNGJ4PUTTrun3rxgMB4zvZV3XMWXPbDbjJQgOsA4QxDl9w6Msyxao/qxCNSgR+zpU6sv2WNY7qmoHm62iNdEBK9k3dwu61TuW7zgB0+kf1ukW23KYGnN0fUQUR0R/XX5PHlh6XqtyD7i4+sz5xRmDydem2Ovkr1Zg2zm3eig9q/DmAfbE5eGnyaMz4deTRWhapIsFsgEhPVaA0y/veffhhE+XHymLulMIvifwfXAXasTDBCRFhJc8k66kf9o3MAzEzQ1C08DzSYs1jv2DUllCo/B4AEHuCpKZIH4SRJZgE3aeyknCELFcQhwjXl9AvoxdkhJIW0Qtjj2UsVf19ghLCQoNCMctdOXICys5eCeOJGySmFfzO1VdNfk/p2pdQ445jZkAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/055c457b5d5e26e8a389f493106897b7/8ac56/02_rnn_form.webp 240w,
/static/055c457b5d5e26e8a389f493106897b7/d3be9/02_rnn_form.webp 480w,
/static/055c457b5d5e26e8a389f493106897b7/05152/02_rnn_form.webp 836w&quot;
              sizes=&quot;(max-width: 836px) 100vw, 836px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/055c457b5d5e26e8a389f493106897b7/8ff5a/02_rnn_form.png 240w,
/static/055c457b5d5e26e8a389f493106897b7/e85cb/02_rnn_form.png 480w,
/static/055c457b5d5e26e8a389f493106897b7/27b8e/02_rnn_form.png 836w&quot;
            sizes=&quot;(max-width: 836px) 100vw, 836px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/055c457b5d5e26e8a389f493106897b7/27b8e/02_rnn_form.png&quot;
            alt=&quot;02_rnn_form.png&quot;
            title=&quot;02_rnn_form.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;1-1️⃣-기본-동작-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-1%EF%B8%8F%E2%83%A3-%EA%B8%B0%EB%B3%B8-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;1 1️⃣ 기본 동작 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-1️⃣ 기본 동작 방식&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;RNN이 입력(x)을 받는다.&lt;/li&gt;
&lt;li&gt;RNN 내부의 hidden state를 업데이트한다.&lt;/li&gt;
&lt;li&gt;RNN 뒤의 FC Layer에서 출력값을 내보낸다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;1-2️⃣-기본-수식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-2%EF%B8%8F%E2%83%A3-%EA%B8%B0%EB%B3%B8-%EC%88%98%EC%8B%9D&quot; aria-label=&quot;1 2️⃣ 기본 수식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-2️⃣ 기본 수식&lt;/h4&gt;
&lt;p&gt;현재 시점 &lt;em&gt;t&lt;/em&gt;에 대하여 아래와 같은 &lt;strong&gt;점화식(recurrence formula)&lt;/strong&gt;로 표현된다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 394px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/cc097/03_rnn_formula.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 21.25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAyElEQVQY011QywqDQAz0/7/EmyCo9VCvVvAB3jy4FUVFBHHX+uj6mOoeFmwgTCYkYSYK5xzruuI/tm1D31PJKaVy7jiOG14xz7PYUdI0haZpslnXNfZ9R1mWMAwD0zQhz3N4ngdd1+WhZZlFnWUZkiRB0zRiTqmqCpZlIoxCjOdyHMcYxxGEEJimCVVVQd4EURTBcZ5wXy6GgSEIfORFgcD3YduPkwdChCItMXqz3HUdGGNnUqFoGD7SOudfgZd68Z59Q9u24iU/sYErqCrG0PcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/8ac56/03_rnn_formula.webp 240w,
/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/47f09/03_rnn_formula.webp 394w&quot;
              sizes=&quot;(max-width: 394px) 100vw, 394px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/8ff5a/03_rnn_formula.png 240w,
/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/cc097/03_rnn_formula.png 394w&quot;
            sizes=&quot;(max-width: 394px) 100vw, 394px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/8f6d9f9bf28448a1ad4a2eed6a7acb72/cc097/03_rnn_formula.png&quot;
            alt=&quot;03_rnn_formula.png&quot;
            title=&quot;03_rnn_formula.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x_t : 입력값&lt;/li&gt;
&lt;li&gt;h_{t_1} : hidden state의 이전(&lt;em&gt;t-1&lt;/em&gt;) 상태&lt;/li&gt;
&lt;li&gt;f_W : 파라미터 W를 이용하는 함수&lt;/li&gt;
&lt;li&gt;h_t : 현재 시점의 hidden state
이때, &lt;u&gt;함수 &lt;em&gt;f&lt;/em&gt;와 파라미터 &lt;em&gt;W&lt;/em&gt;는 모든 시점에서 동일&lt;/u&gt;하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id=&quot;vanilla-rnn&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#vanilla-rnn&quot; aria-label=&quot;vanilla rnn permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Vanilla RNN&lt;/h2&gt;
&lt;p&gt;📌 가장 단순한 RNN 예시&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 673px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9c1179a61632d2aa775731742c8aae9e/c391c/04_vanilla_rnn.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 46.25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABTklEQVQoz5VSS07DQAzNdTgAR2DNPTgBLFgiLsGGHQuOwIbuKAvUJCoEkigp+acRahLa/B+xqwkpVEhYsjy2x0/Pb0YCWkyfl9CdFGRd1w1OVlUVXNdFWZYIwxBBEMA0Tc7TNOW8ruthVqLD7G2F93DDxbbthuY2bxFFEQPEcQzf9+EHPoMlScKATdN8A9ZthRfzFd7Sp9IO2H9MzEg3kyscnR/g+OIQk6c7VJu6h92uTKtQpLXJ1+s18jxnRkIWqlGPjOrSg3aPs+sTXN6eYm7KJCkD0qqWZTGA53lQVZVdlmcwDINlKIoCtm1D0zS+Sxqzhp9uiC7b/KIvIg2ShqJGzAVLoTOxpCj1hBA9TrHSdVZw/MKLxQJZlsFxHCiKAt3QGXyfdsIkSj/mc+T9EH4AEivxgnQm5z66ne81dl656VdoR08/Bt3H4q9f8AUOebQj5A1VWwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/9c1179a61632d2aa775731742c8aae9e/8ac56/04_vanilla_rnn.webp 240w,
/static/9c1179a61632d2aa775731742c8aae9e/d3be9/04_vanilla_rnn.webp 480w,
/static/9c1179a61632d2aa775731742c8aae9e/b8cf5/04_vanilla_rnn.webp 673w&quot;
              sizes=&quot;(max-width: 673px) 100vw, 673px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/9c1179a61632d2aa775731742c8aae9e/8ff5a/04_vanilla_rnn.png 240w,
/static/9c1179a61632d2aa775731742c8aae9e/e85cb/04_vanilla_rnn.png 480w,
/static/9c1179a61632d2aa775731742c8aae9e/c391c/04_vanilla_rnn.png 673w&quot;
            sizes=&quot;(max-width: 673px) 100vw, 673px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/9c1179a61632d2aa775731742c8aae9e/c391c/04_vanilla_rnn.png&quot;
            alt=&quot;04_vanilla_rnn.png&quot;
            title=&quot;04_vanilla_rnn.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이전 hidden state와 현재 입력을 통하여 다음 hidden state를 출력하는 기본 형식은 동일&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;function을 &lt;code class=&quot;language-text&quot;&gt;tanh&lt;/code&gt; 사용&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;비선형성을 위해 적용됨&lt;/li&gt;
&lt;li&gt;
&lt;details&gt;
&lt;summary&gt;tanh를 사용하는 이유&lt;/summary&gt;
&lt;div markdown=&quot;1&quot;&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 719px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.833333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABrklEQVQoz1VSi46jMAzs/3/h6aTdbSEBEl4hAa60pXNjp3R3kUZ2bMfM2Dnd73fEOKOue3x9GdoOfR8Rwkos2Q4Jbe0wdCOm6R/GcUHbJXii8VHh24Tr9YbT7XZDnJioenx+Vvj4MKjoezfB+wTHHznjYEyHxnrYwqEwI4wdUdUBjnWCppkwz9fccJpmslrQdd+2bQk3wrOJ+HU9wLJBeXFk22lNrksKT5bLsr0YUnLLgGtG/i3Ai2UjhZ+0uCxbnIuO0iivIluyds1AJUHvNLzzZhhCRGU8zNlmXCqY0sFSurUd0ePPX4OCTcW31cA85Uvd6055rklsxWnbNkpOSt+/6KsEtZHxBFMFXIqWTDNbif+sFbhD8nfD9C7u2vhuZtlMGsorkOG3r9xRq5BxMbcsKnnLM9TB5o3VHL40km2W3KZc1i03Mq/czLnM9vB/bTmlWd9VxWAtSXkKPjMcx1nfnePG+z6pPwwzcdicl9y6UvLz+YRAHvjh748H5Nv3nedd/Qdjkjvihz38I39a15UME2VHzlJoz8SisQyeF55jrtEz41qnuVnrQghq/wOs2kL0hBA4EgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/8ac56/05_tanh.webp 240w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/d3be9/05_tanh.webp 480w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/05ca6/05_tanh.webp 719w&quot;
              sizes=&quot;(max-width: 719px) 100vw, 719px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/8ff5a/05_tanh.png 240w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/e85cb/05_tanh.png 480w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png 719w&quot;
            sizes=&quot;(max-width: 719px) 100vw, 719px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png&quot;
            alt=&quot;05_tanh.png&quot;
            title=&quot;05_tanh.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;
tanh의 미분값은 sigmoid에 비하여 그 결과 값의 범위가 넓은 편이기 때문에 sigmoid에 비해 vanishing gradient 문제가 생길 가능적이 상대적으로 적다.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;W_{hh} : &lt;em&gt;t-1&lt;/em&gt; 시점에서 얻어진 &lt;em&gt;h_{t-1}&lt;/em&gt;와 곱해지는 h시점의 가중치 W_{h}, hidden 사이의 가중치&lt;/li&gt;
&lt;li&gt;W_{xh} : &lt;em&gt;t&lt;/em&gt; 시점에서 입력값과 곱해지는 가중치&lt;/li&gt;
&lt;li&gt;W_{hy} : &lt;em&gt;t&lt;/em&gt; 시점에서 hidden state와 곱해서 y_t(출력값)을 도출하는 가중치&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;1-computational-graph로-살펴보는-rnn&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-computational-graph%EB%A1%9C-%EC%82%B4%ED%8E%B4%EB%B3%B4%EB%8A%94-rnn&quot; aria-label=&quot;1 computational graph로 살펴보는 rnn permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Computational graph로 살펴보는 RNN&lt;/h3&gt;
&lt;p&gt;RNN이 hidden state를 가지며 이를 &lt;u&gt;재귀적&lt;/u&gt;으로 호출하며 반영한다. 위에서 살펴본 각 경우에 어떤식으로 RNN이 전개되는지 알아보자🤔&lt;/p&gt;
&lt;h4 id=&quot;1-1️⃣-many-to-many&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-1%EF%B8%8F%E2%83%A3-many-to-many&quot; aria-label=&quot;1 1️⃣ many to many permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-1️⃣ Many to Many&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 835px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/95ad65b3ad56760fae5cb6232abaf407/f0685/06_rnn_many_to_many.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB1UlEQVQoz21SiW6jMBTM//9UpUrbRNptDo6QlG5CTAATbsJ9zT47h1JpLT1g/OxhZuyZrmtYbzaw7TNWyyUUVcXq8w/W6xW+TBMK9VSaOxwOmM8/oOs6NFXB+/s7rNMJTVPDsV18LvZI4wIz/GfwpETVdCiLClVVw7QvyPICSZQhiGL8dUJUZQWfB+BBBJNxJHFClWE2TRMeNY4TMI2YGw6OZx/q0sT1WuHDOOPEXOzUI6K0wGLv4sJDmFuGIC3x+8uD51ywJywVCjJ6PhV6QYy67eT3dMfDOErcdh14mNwW0r626wnHEo60RhJ+OzswbsHQDfi+j621ISsedE1HGAbYsjXsM4OxNW7z1gpt20qSS8xhMOUuCjfCo/cN5ll0OAoiymhvb+H6DparDWWXYWdrOFpHOjANcRYRoYKOlIp8wzTAjuk/CUV0DS3IXRdDXctGXVXIbFvaEuOapig87xmLsNc0zRM/CadxANN+YehKnOcLlGRZEuQ5rLc3NNcretqcBwEYXRWxse971PTj8Z7rI37RmwkF/KCTghCJx5HHMVmppKWMc9RliX4Y0BKBxPQW+T0Uvd6Sp2UxhPyaKklSpOmtCiIuiVD0OlI1vlh7tfk69w9C3fcVZ3EXLgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/95ad65b3ad56760fae5cb6232abaf407/8ac56/06_rnn_many_to_many.webp 240w,
/static/95ad65b3ad56760fae5cb6232abaf407/d3be9/06_rnn_many_to_many.webp 480w,
/static/95ad65b3ad56760fae5cb6232abaf407/2321d/06_rnn_many_to_many.webp 835w&quot;
              sizes=&quot;(max-width: 835px) 100vw, 835px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/95ad65b3ad56760fae5cb6232abaf407/8ff5a/06_rnn_many_to_many.png 240w,
/static/95ad65b3ad56760fae5cb6232abaf407/e85cb/06_rnn_many_to_many.png 480w,
/static/95ad65b3ad56760fae5cb6232abaf407/f0685/06_rnn_many_to_many.png 835w&quot;
            sizes=&quot;(max-width: 835px) 100vw, 835px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/95ad65b3ad56760fae5cb6232abaf407/f0685/06_rnn_many_to_many.png&quot;
            alt=&quot;06_rnn_many_to_many.png&quot;
            title=&quot;06_rnn_many_to_many.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;markdown&quot;&gt;&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;h_0, 입력 x_1 ⇒ h_1 = f_W(h_0, x_1) ⇒ y_1, L_1
h_1, 입력 x_2 ⇒ h_2 = f_W(h_1, x_2) ⇒ y_2, L_2
...
h_{t-1}, 입력 x_t ⇒ h_t = f_W(h_{t-1}, x_t) ⇒ y_t, L_t
L_{total} = sum(L_1, L_2, ..., L_t)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;1-2️⃣-many-to-one&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-2%EF%B8%8F%E2%83%A3-many-to-one&quot; aria-label=&quot;1 2️⃣ many to one permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-2️⃣ Many to One&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 753px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/27880bfca212d63740455c1b68fb5ade/17a7a/07_rnn_many_to_one.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABxUlEQVQoz61Sa3ObMBD0//9J/hJPJzZJjXFTQjG0sYMBx7zDQwjx8EYSgeZ7q5kbJHTa27vdxV7bYbNR4DgO9vs9VHWLB0XB4+MDfvDzs/EL6naL3U6DbdtYrzfQdR2WZcEwDLn/uhZD36PrOgzDgLZtUdc1GGNz9Py+bRkopTKHsTFH5Io7kSMWazskOcEC/2klRY17w8Pidrv9E9D0viAMP/+8jQwLkqOqSwz9INtoGEVWprJFMY5+6DmDmLfF5vHk5B2EVjMw6xiC+DICGq9PsFwTmrqTw3cuRzwdVdh88KvVCnESQzG/wfFOWC6X8F1/vHcPoDVF3/XwAhffrfUI6AYOrskFx+MJl7errH4OTwjDCObBkgxtz0SWp9CfDRBSw40cBOlVitLQBhUt8ds7/BWl5VXKIEAdBnMbZZoiP5/FoOSZcnVzbq+Wf+dWOaBQfLbNjVd39HvQKkFsHhBo2meBDqnvw+EtC2vRpuFMKF7v7kCiSOY0/J+wkxBmCgl4NhRkoQeSpHj3PT78dqzMmUQvL9J3kxjJ6YQyy7hwbPbgV7XnlquKoChLREmChEdRFDJqwewzBJuWsxVOmAAmZtP+A4fdSNHAhB/kAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/27880bfca212d63740455c1b68fb5ade/8ac56/07_rnn_many_to_one.webp 240w,
/static/27880bfca212d63740455c1b68fb5ade/d3be9/07_rnn_many_to_one.webp 480w,
/static/27880bfca212d63740455c1b68fb5ade/67c6f/07_rnn_many_to_one.webp 753w&quot;
              sizes=&quot;(max-width: 753px) 100vw, 753px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/27880bfca212d63740455c1b68fb5ade/8ff5a/07_rnn_many_to_one.png 240w,
/static/27880bfca212d63740455c1b68fb5ade/e85cb/07_rnn_many_to_one.png 480w,
/static/27880bfca212d63740455c1b68fb5ade/17a7a/07_rnn_many_to_one.png 753w&quot;
            sizes=&quot;(max-width: 753px) 100vw, 753px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/27880bfca212d63740455c1b68fb5ade/17a7a/07_rnn_many_to_one.png&quot;
            alt=&quot;07_rnn_many_to_one.png&quot;
            title=&quot;07_rnn_many_to_one.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위와 다르게 최종 hidden state에서만 결과값이 출력된다.&lt;/p&gt;
&lt;h4 id=&quot;1-3️⃣-many-to-one&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-3%EF%B8%8F%E2%83%A3-many-to-one&quot; aria-label=&quot;1 3️⃣ many to one permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-3️⃣ Many to One&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 750px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5b00a5fc8e804a17b6081ffbe9b98262/1d69c/08_rnn_one_to_many.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.58333333333334%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB5UlEQVQoz11Sa5OiMBD0//+m2w/W1Z2CnA9OT3TlUboLhojIO7zszSiie6lKJQw9nZnpHqiKAnWiwbFtLHQdE02DImOaqmI6ncIwDCjjMXR9Adt2MJvNsF4bWC2XGI1GME0Tr2vQNA3qukbbtqiqCqIokKQZTmEMIcQtnsuYx0OU8j9hCRdcUlzi9IahVYgKYZJj8Mp+7c7PUwJl4/bxvBD4tXYRZ0UHbKFuPRx43GP2LMTknWFwvV6fhN2VnWPMNh99XJQV5lsXWS76p1fWEcfgSeiHCVY2u1cYZxHSIkHbtGjkLsoc/Mxu7VKLNBb/7KEsxe1O8VPIkIusJywE5RzvhEt7jvcPAxNFhb74C8c1odt/YMjhD4dDMM5kO79hOSbefrzBcz1Mdwpsdwchq66rGuZhi7mt3QkPzJFtelIxC0fmI8ou2Ps2OOewLEuKIWC6G/CA3zCFnKnDTAQRRylKKaSQgpxhebunKFXdIGEMme/3bZRl+c0SRPT/EnIMpHpvm2tbw1n8hEgDnGSLXPrtnlz0hCRcnuffElupNFnmYRvC0JaEDfb/xrjwT2SnAJHnQZAfO2DV3emkBBKJvunB1wcebulbTrMMcZLIOQUI5I7jGFEk1U/TvpJH1aT0K9GDjM4v8j5Hqhor0s8AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/5b00a5fc8e804a17b6081ffbe9b98262/8ac56/08_rnn_one_to_many.webp 240w,
/static/5b00a5fc8e804a17b6081ffbe9b98262/d3be9/08_rnn_one_to_many.webp 480w,
/static/5b00a5fc8e804a17b6081ffbe9b98262/08b4d/08_rnn_one_to_many.webp 750w&quot;
              sizes=&quot;(max-width: 750px) 100vw, 750px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/5b00a5fc8e804a17b6081ffbe9b98262/8ff5a/08_rnn_one_to_many.png 240w,
/static/5b00a5fc8e804a17b6081ffbe9b98262/e85cb/08_rnn_one_to_many.png 480w,
/static/5b00a5fc8e804a17b6081ffbe9b98262/1d69c/08_rnn_one_to_many.png 750w&quot;
            sizes=&quot;(max-width: 750px) 100vw, 750px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/5b00a5fc8e804a17b6081ffbe9b98262/1d69c/08_rnn_one_to_many.png&quot;
            alt=&quot;08_rnn_one_to_many.png&quot;
            title=&quot;08_rnn_one_to_many.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;고정 입력 x는 모델의 initial hidden state를 초기화 시키는데 사용된다.&lt;/p&gt;
&lt;h4 id=&quot;1-4️⃣-sequence-to-sequence&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-4%EF%B8%8F%E2%83%A3-sequence-to-sequence&quot; aria-label=&quot;1 4️⃣ sequence to sequence permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1-4️⃣ Sequence to Sequence&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 844px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7da253593d1eed809fa5dea7e3079869/33e10/09_seq_to_seq.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 45.833333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABjUlEQVQoz1VS25aiQAzk//9sPb6oi9wdEGZHROR+GZqmNongznJOSLrT3amqxCjLArvdDvv9HqfTCZZlwbYt2TNNk2Ibvu/jF62DIJD4TGfatsXPb1kW8UbXdTgcDnBdDxe6cDwe0Q8DtNaYJgWllMTsx3FEVVVomgZ932Ogc2zzPL8fNfjHVpYliqIQX9e1IJhn/V/1kS5vqF3Xhes44tM0/ffgBjn8+IBjO4ii6E1tIEQ/H5TihDZIMigq9qxaxOlTclqvlNWsCImSBdPijynM+kVjmqY1N0EvL8TxV0bxgrYfcMuea7EXMONZP3D2fsPzA7jRGQ5R8EIXZ9+UPTs0RS8/cXB/pPA8D1ZwEe8SE5O8T/ZNhYXyMPb4k1xxJ6odxRHp07U1vj4T3MIQo/oGN65qKtG3l7gVvbl598dD9N56YRRpjDwOUCefYEL55YKBDrTcpOsVMx3SJEmWFoij21sGNpZGrZKsw0NdJpF5DDKqlOc5ynUseER4JDYN+XJdNzIBW37LbejY/gIwV60/GOV4/QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/7da253593d1eed809fa5dea7e3079869/8ac56/09_seq_to_seq.webp 240w,
/static/7da253593d1eed809fa5dea7e3079869/d3be9/09_seq_to_seq.webp 480w,
/static/7da253593d1eed809fa5dea7e3079869/20d15/09_seq_to_seq.webp 844w&quot;
              sizes=&quot;(max-width: 844px) 100vw, 844px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/7da253593d1eed809fa5dea7e3079869/8ff5a/09_seq_to_seq.png 240w,
/static/7da253593d1eed809fa5dea7e3079869/e85cb/09_seq_to_seq.png 480w,
/static/7da253593d1eed809fa5dea7e3079869/33e10/09_seq_to_seq.png 844w&quot;
            sizes=&quot;(max-width: 844px) 100vw, 844px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/7da253593d1eed809fa5dea7e3079869/33e10/09_seq_to_seq.png&quot;
            alt=&quot;09_seq_to_seq.png&quot;
            title=&quot;09_seq_to_seq.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;(Many to one) + (One to many)&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Many to one : Encoder, 가변입력을 받아 하나의 벡터로 요약한다.&lt;/li&gt;
&lt;li&gt;One to many : Decoder, Encoder에서 요약된 정보를 입력으로 받아 가변 출력을 반환한다.&lt;/li&gt;
&lt;li&gt;decoder의 output을 이용하여 loss를 계산하고 backpropagation을 진행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-구체적-예시로-살펴보는-rnn--언어모델&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-%EA%B5%AC%EC%B2%B4%EC%A0%81-%EC%98%88%EC%8B%9C%EB%A1%9C-%EC%82%B4%ED%8E%B4%EB%B3%B4%EB%8A%94-rnn--%EC%96%B8%EC%96%B4%EB%AA%A8%EB%8D%B8&quot; aria-label=&quot;2 구체적 예시로 살펴보는 rnn  언어모델 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. 구체적 예시로 살펴보는 RNN : 언어모델&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;언어모델&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;강의 : 어떻게 자연어를 만들어낼지를 해결하려는 모델&lt;/li&gt;
&lt;li&gt;통계기반의 확률모델, 단어 시퀀스 이후에 이후에 어떤 단어가 등장할 확률을 통해서 문장을 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📌 &lt;strong&gt;Character-level Language Model&lt;/strong&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 884px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d6cb0da07ee041fde51b74940bcd2602/136a2/10_charcter_level_language_model.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.83333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB4ElEQVQoz21SiY6bMBTM/3/UrrRJVxUhhM1RKHeDgRDMGRIgIZk+O91qt1tL1sjHjOd53uR+v+N/431fYN93OJ9PGIYO1+uAy4WmxMsffKzF3UlRFFDVBRRlDsu2MY4jka5/hQWJhTEcJ4DtMbh+hGTP4bsP9JwIh6yAZe7o4Z4E8xzPT894ojmbfsPLyxT624pERyko3KVpBcYabIwImmbD+3WAtnTh7VLMVQcsKaB8/0lVnDERqixksC2bXLhwXRemaaIfBikoLh2PDbruBM4rJHEOXlSIkwcKsapu8MNJUBYtJgMRQxL0PF/iON4+/WXXdShKIlUVdvsATmghySK4EeEhhhlsENL+1l3TwyTYti0scmcYJsqy+hJK3/VIswT7LIZB5KWpwo8c6PaC0IWyfZVrxXhFR98jHTZNI9U7IjdkXzzyLigcirMznZUUYJbuyW0JfkhRlSWyfSL5qe+hpfWkplI0TaOUVej6G/x/SheCNQkdOUduWUgNAzwIkG63yMMQyWqFIqLEqVPOZESGMpvOMCfBtj196UdxXmQZuCBtNojWa6SeB6br4Lsd2HKJnDFEiwWVTG0jShMu+v6R6u12k+V+bGwRCItjSplT+Uc5xd6JHNV1Lb+oIRTc3wnT72JT4UMHAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/d6cb0da07ee041fde51b74940bcd2602/8ac56/10_charcter_level_language_model.webp 240w,
/static/d6cb0da07ee041fde51b74940bcd2602/d3be9/10_charcter_level_language_model.webp 480w,
/static/d6cb0da07ee041fde51b74940bcd2602/8af20/10_charcter_level_language_model.webp 884w&quot;
              sizes=&quot;(max-width: 884px) 100vw, 884px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/d6cb0da07ee041fde51b74940bcd2602/8ff5a/10_charcter_level_language_model.png 240w,
/static/d6cb0da07ee041fde51b74940bcd2602/e85cb/10_charcter_level_language_model.png 480w,
/static/d6cb0da07ee041fde51b74940bcd2602/136a2/10_charcter_level_language_model.png 884w&quot;
            sizes=&quot;(max-width: 884px) 100vw, 884px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/d6cb0da07ee041fde51b74940bcd2602/136a2/10_charcter_level_language_model.png&quot;
            alt=&quot;10_charcter_level_language_model.png&quot;
            title=&quot;10_charcter_level_language_model.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 841px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5d6ece943e033aa0c788f81a665729bf/bad1b/11_charcter_level_language_model_test.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACAklEQVQoz21Ta5OaQBDk//+bSyX5FO9Drqzy4qUOBUEWNMAuwiLvh4qn9g1UNMlFqroatmp6Z3oa5XK54N5zPb/y+XxGdzig6w6o6wZN06AoClRVhTzP0e52OBw6KKqqYjwe4/vTE2S8HQT64qvYVfDt7Q2e52MTRohlDzmwjEJI4m0shwsUa2lh9G2EyeR5wOPoEYZp3hVMIoEiS7GxVYTrBTxjCsFmkK4Bbk6RSQHlZTrFl89f8fDwCZPnHzANE0u65HQ6/TNyL1gkEnWRIVibCH5Z8C0N3DERujZ8Nke2jaBEUQTX9Qgusrz4z8c/Hp6QFzXiuIJmCiwZh667sB0Bi22w0H2kSQmlLEtwLiBEgHATDp39LXTl/rwqK1pCA+4n4CKG60n4QoIHCZw1eRmTIGMM87lGYzI0tL2P3d06PJ2pwxxpTsWCYeUTuIWVZ4N5BnRHg0wSKDtad9vusN/vh+Ku6wZ8jM+JBIsyR0Ye2r4F22NwOIF46Zow1hpZtoXCOXmxMGAsTNi2g7mmw3Ec8mpLuTrchPuR66pG27TIfI6Y6lJiSf4nZFnsrFDRPhRm23h9nRFUOCRo0JYtiyEKJfruf7c5ZLOkAGdCwKdkBIaBYKbC1TQEug7v5wvKOO5H3tPI7ZD8/e29vbvp/gJJRf2fkaXpgC1999wH/Xg84h2bsToSNOWn+AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/5d6ece943e033aa0c788f81a665729bf/8ac56/11_charcter_level_language_model_test.webp 240w,
/static/5d6ece943e033aa0c788f81a665729bf/d3be9/11_charcter_level_language_model_test.webp 480w,
/static/5d6ece943e033aa0c788f81a665729bf/d02c2/11_charcter_level_language_model_test.webp 841w&quot;
              sizes=&quot;(max-width: 841px) 100vw, 841px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/5d6ece943e033aa0c788f81a665729bf/8ff5a/11_charcter_level_language_model_test.png 240w,
/static/5d6ece943e033aa0c788f81a665729bf/e85cb/11_charcter_level_language_model_test.png 480w,
/static/5d6ece943e033aa0c788f81a665729bf/bad1b/11_charcter_level_language_model_test.png 841w&quot;
            sizes=&quot;(max-width: 841px) 100vw, 841px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/5d6ece943e033aa0c788f81a665729bf/bad1b/11_charcter_level_language_model_test.png&quot;
            alt=&quot;11_charcter_level_language_model_test.png&quot;
            title=&quot;11_charcter_level_language_model_test.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;“hello” 학습시키기&lt;/u&gt;&lt;/br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;사용하는 4개의 알파벳을 원-핫 인코딩을 통하여 벡터화하여 단어사전에 저장&lt;/li&gt;
&lt;li&gt;train : ground truth와 ouput를 이용하여 Loss 계산&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;test&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;h&lt;/strong&gt;를 초기에 입력 → 출력 &lt;strong&gt;e&lt;/strong&gt;를 얻음 → &lt;strong&gt;e&lt;/strong&gt;를 입력 → 출력 &lt;strong&gt;l&lt;/strong&gt;를 얻음 → &lt;strong&gt;l&lt;/strong&gt;를 입력 → 출력 &lt;strong&gt;l&lt;/strong&gt;를 얻음 → &lt;strong&gt;l&lt;/strong&gt;를 입력 → 출력 &lt;strong&gt;o&lt;/strong&gt;를 얻음 ⇒ &lt;strong&gt;h를 입력하여 hello를 얻음&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;흥미로운 점 : 마지막 시퀀스에서 “l”의 확률이 가장 높은데 “o”가 출력되었다. 👉 출력부에서 softmax로 확률을 도출하고 이들 중 가장 큰 값을 출력하는 것이 아닌 sampling을 통하여 값을 선택하기 때문이다. 👉 모델의 다양성을 높여 적절한 output을 얻게한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-backpropagation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-backpropagation&quot; aria-label=&quot;3 backpropagation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Backpropagation&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 829px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/259c593bd7e219e308fe457fca7da570/9d76a/12_Backpropagation.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.25000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABrUlEQVQoz21Si26jMBDk/z+tSnqXpKmUgHnaxtgYgoFc2jQ3tzZplVZnabQ765nVGjbSWiNJEmRpijzPwRhDEsfgnKMsS0gpkBc58QrTPMGflLTr1RqbzQZbwvN6jdVqBdU0iJxzwSgEJ7NEmmXBbG0Xmm5+77Dfxtj8ekWRKdR1g4aMbdvidBowDANpLfxg8/mMCD/O39sN0zgGUxwfER8ZRKmRMY6cCRwOx3Dnm8w08e328c0fvb1fMbgJpu0gpEJZCVRcQtIkre1xciPGecb5cgnRc9v10MbSEzVqpYPX97hePxAV9Yi4ckjlhIRTFFPIFz6BiRGML8jVn8BTX/O6Oxj5DsUA3b8hMt0AqTuotqdoQ16bhYvGhnyp2wfNolOmp/s+aHhD35SmjFQvkKkEpclogoTAUDQsxOzOP+vVg+ZR58HkEf1sEXWdgW4EWqMoSvpbEkbXdy5C7mseoaY/NQs3pg6aRnE4d0I01gojrcdMK+OqCmPFv+BonUK887Osv3L3oPN+VxS40KpFIy1yS4vZve7R7nY/sP3Gu5eX/2iovt9DPD1hoKH+AZfP5XDBCTEqAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/259c593bd7e219e308fe457fca7da570/8ac56/12_Backpropagation.webp 240w,
/static/259c593bd7e219e308fe457fca7da570/d3be9/12_Backpropagation.webp 480w,
/static/259c593bd7e219e308fe457fca7da570/eb5c2/12_Backpropagation.webp 829w&quot;
              sizes=&quot;(max-width: 829px) 100vw, 829px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/259c593bd7e219e308fe457fca7da570/8ff5a/12_Backpropagation.png 240w,
/static/259c593bd7e219e308fe457fca7da570/e85cb/12_Backpropagation.png 480w,
/static/259c593bd7e219e308fe457fca7da570/9d76a/12_Backpropagation.png 829w&quot;
            sizes=&quot;(max-width: 829px) 100vw, 829px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/259c593bd7e219e308fe457fca7da570/9d76a/12_Backpropagation.png&quot;
            alt=&quot;12_Backpropagation.png&quot;
            title=&quot;12_Backpropagation.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Backpropagation through time&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이전에 살펴보았던 모델들을 생각해보면 스텝마다 출력값이 존재하고 이 출력값들의 Loss를 계산하고 이를 조합하여 Final loss를 얻는다. 그리고 해당 값을 이용하여 역전파를 진행한다.&lt;/li&gt;
&lt;li&gt;RNN에서 만약 아주 긴 문서를 학습한다고 가정하였을 때, 이 작업은 매우 많은 메모리를 요구하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 813px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1c1979de746c054bf040513353f3a6e3/baaa6/13_Truncated.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABjUlEQVQoz52T3XKDIBCFff+Hai877UUziUms/9ZEQQRFiXbSi5wuxKTpbZn5ZncPh4VhwMvzHG+vr3hfrfD0/Azf97HZbLDb7Rzr9RormovCEGEUIQgChB8BttstqqrC47hcLvDO5zO01uj7HlJKGGMwDKPTLFbrug7TNGGeZ+cbzQjZdoj2JcL9J4pU4GS+XFMP/xx241EbcNagFXSQcbw2nL6+ceM0n+/5RLmrbyz6THTUqKETKj1SPkL1A4Ts0Q8GXnI0SI4nZPWM+GD+EJZ27rdOq8mxz5Rbc/c6zwl5TQ2F6tBIhVt0KKrp3jjd36Nuc8uR8buv7XoX+eLxDrJAzmN8igwZiylPFmJkfKlJt3NFk6IQKZ0oePBdSVmESpXwlGygWo6OoqRoUW1DtYAU7BpvuvUSrCqhBF/WCRetV5LmDVmGIc1g6D3qJIVOF2weJ785MWa5o7V1UUDnD5CuSzphLwTauoJkjGJ950AbKc7/aLauaOPq5QVs66OmD1D7GzD6DEd6/Ad67D+aF+o9brdmaAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/1c1979de746c054bf040513353f3a6e3/8ac56/13_Truncated.webp 240w,
/static/1c1979de746c054bf040513353f3a6e3/d3be9/13_Truncated.webp 480w,
/static/1c1979de746c054bf040513353f3a6e3/90602/13_Truncated.webp 813w&quot;
              sizes=&quot;(max-width: 813px) 100vw, 813px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/1c1979de746c054bf040513353f3a6e3/8ff5a/13_Truncated.png 240w,
/static/1c1979de746c054bf040513353f3a6e3/e85cb/13_Truncated.png 480w,
/static/1c1979de746c054bf040513353f3a6e3/baaa6/13_Truncated.png 813w&quot;
            sizes=&quot;(max-width: 813px) 100vw, 813px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/1c1979de746c054bf040513353f3a6e3/baaa6/13_Truncated.png&quot;
            alt=&quot;13_Truncated.png&quot;
            title=&quot;13_Truncated.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Truncated Backpropagation through time&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;대체 근사 알고리즘&lt;/li&gt;
&lt;li&gt;Train time에서 전체 스퀀스를 적당한 step 단위로 잘라 해당 step이 지난 후 step만큼의 서브스퀀스 단위로 Loss를 계산하고 gradient를 계산한다.&lt;/li&gt;
&lt;li&gt;이전 강의에서 mini batch를 이용하여 gradient를 계산했던 것과 유사한 아이디어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;4-예시&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-%EC%98%88%EC%8B%9C&quot; aria-label=&quot;4 예시 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4. 예시&lt;/h3&gt;
&lt;h4 id=&quot;4-1️⃣-example-character-generation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-1%EF%B8%8F%E2%83%A3-example-character-generation&quot; aria-label=&quot;4 1️⃣ example character generation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4-1️⃣ Example: Character generation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;셰익스피어 작품을 학습시킨 문장 생성기
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 681px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/06516ceb2b8deef432951fa8e3fa43f6/8ce52/13_character_generation.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACMUlEQVQoz41Ta5OaQBDk//+o5EsSL3UP9cAXiyIgKIEFEQFRoNO751l1X1KxapxlZ3a2t3vG2AUpptMN3qdrWKaL6UTotRB7LJc7OM4Bth1hsQiwXseYzT28v28wn3kw6bdbqXN9v0BZdjDOZYM8PyPLSpSnC3L647HCqWiYcEGaFpCygLA3PLhlYYF9lCBNjsw9o647XJoeTd3jeu1htPzLcxY4NTjSFyykEtXe+XxjEngALFxiv88QRZL7HbobdKy9gEV7bU1DhPEhx/dvL3h7s/HzxxSvryvYqwMRxXDdDL5XaAv8Ew77GuHujCissAvKR0wmPWQ6EAgRKjTjscDMcsnLlrwFWC4+TNgheVrzsqX2QigufayY4zh7Fi9YuEAmO12sOBIh/uM39CAdRySJRBwnfGr3Jd73w8OMqmqZqISoKUyluZJELSV55Hd2X3vbiGp7RBZoHmWqRLyiqvqHKWGMMEwx+mXh5XmJ308zjJ4sto2Lp5HFfRPP3B+NTMxmPp8ckwrSYHpsMX7bf7B2El4UwxFK+RZGXbda1UyWukU+W0bK06Od1FrF85yvINqq6tC2oKofqJq7yqp9jGH4N3/9PS5lBs/zKUTES0+ar9utR9cpG7RpDn0/xfhNYDEP+BSXU7DGahXqKZhMHO2VsmqKTJMTMlcqhyyew92k2uLDhciHj0kJdyksa8N28XhQtY2v18qr9pjPt4/Y51qIEEGQc9ykbp80adgyg6biL3h/gBjX0OK9AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/06516ceb2b8deef432951fa8e3fa43f6/8ac56/13_character_generation.webp 240w,
/static/06516ceb2b8deef432951fa8e3fa43f6/d3be9/13_character_generation.webp 480w,
/static/06516ceb2b8deef432951fa8e3fa43f6/9a301/13_character_generation.webp 681w&quot;
              sizes=&quot;(max-width: 681px) 100vw, 681px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/06516ceb2b8deef432951fa8e3fa43f6/8ff5a/13_character_generation.png 240w,
/static/06516ceb2b8deef432951fa8e3fa43f6/e85cb/13_character_generation.png 480w,
/static/06516ceb2b8deef432951fa8e3fa43f6/8ce52/13_character_generation.png 681w&quot;
            sizes=&quot;(max-width: 681px) 100vw, 681px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/06516ceb2b8deef432951fa8e3fa43f6/8ce52/13_character_generation.png&quot;
            alt=&quot;13_character_generation.png&quot;
            title=&quot;13_character_generation.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;LaTex 코드를 포함한 위상 수학책을 학습시킨 문장 생성기
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 742px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/28438b5decbd2c37192e9476bcb011a1/0f2bc/14_math.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABvElEQVQoz12TB3KDUAxEuf8NkzjBFJveTLEpRtET4JQ/o/kgpNWuJJw4jqQoChmGQfq+N+P58XjIOI52Y7fbTa2RqirVKqnrWu73u8zzLNM02U2eczp9iOd7CppLnmeSJLFEWqRtW+mHXrq+k67DWlmWxcBJpNj/g89Zlq3C8/m0hEFBAKPiYcTAhph5niyOZN4567r+AEIdgKIsjF2apZKpRdFV6qY2NjAkBiCSD3kH4B+GV01EbpomwjOy4ziWpmn+BP8GgCWMORShAAelBpgoGEBbo4eXvGMgvFOg1T6aGh1iqYrwlTokcrv9m/P+8SZnz7XBuGdXzmqu+yWfnyeTX+6tKMvSCoZhKEEYSLz7jjZAwKaM1EwrpGkqrBBy6R/+32eaRgVOLI4ek5NlmYHSMtaJXGfbr9sGqoG2PmrQR+4xafbTVxUU8wPflPi+bytGEQbHEB0/8CQIApUS6O3bYOI9KIqiV18pgA+Wxqrc+kgBGB/EHJIvl1A8z5NQb6QibxwfL4br+jQGsLIfwdv6TW62rxnF8jzXKV8vxqKuK51abcYvho8pclf6DTa2UjqMTUX8YgV7pkz8N441lETqbReCAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/28438b5decbd2c37192e9476bcb011a1/8ac56/14_math.webp 240w,
/static/28438b5decbd2c37192e9476bcb011a1/d3be9/14_math.webp 480w,
/static/28438b5decbd2c37192e9476bcb011a1/28367/14_math.webp 742w&quot;
              sizes=&quot;(max-width: 742px) 100vw, 742px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/28438b5decbd2c37192e9476bcb011a1/8ff5a/14_math.png 240w,
/static/28438b5decbd2c37192e9476bcb011a1/e85cb/14_math.png 480w,
/static/28438b5decbd2c37192e9476bcb011a1/0f2bc/14_math.png 742w&quot;
            sizes=&quot;(max-width: 742px) 100vw, 742px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/28438b5decbd2c37192e9476bcb011a1/0f2bc/14_math.png&quot;
            alt=&quot;14_math.png&quot;
            title=&quot;14_math.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;c언어 코드를 학습시킨 문장 생성기
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 477px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7b42a2d17f0bf3fe658f60dfeca57f43/d743b/15_c.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 88.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAC8ElEQVQ4y3VU2XLiMBDM//9ZQm0IhwHfp3xfQIAQCL09MhDYqn3oGtuS2j0zPXoJggqzqYcg7OG5LdQyQTx2Eb5bMJcxzJWCY+dwCd+rEIYtPL+H6zXI0i267oKu/SEu6Pn8otQacbRBqnZDTDZIwg7Kb0jQkKBHlGzh83ueHVCV3yiKo451dULb/NwhxC9N/Y2VWWA+D/H+x4TKdoiKAxRJHKek8g5xvoeZbkhyxGYNrPsBfTdA1N0Vdt2PTmUycUmckaRG4NWazLELVFTjuRVcKxvSdwqsWBZZk1JYq5Qi9ojSHdL0k4TtmTUM4DPFln+RNOqK6TClWypl8aUha6LyhuH9G01zRl2f0dQnvLTNCctFQkTw47WuU05VGTfGUY8iPwxpPaT2PwwpU6FtUbqp4FKlF7SwWYIg7qEi/iDdo2t44Fp0ffCKR7J7U3rWUBQsjEjDZl0MxjlVL8wUI9pnTFtNjBCzWcCOs9ssiaC6QpM1A7EmlDooblww7SXJVm6JedITHeZxB4PPM0bPr+HJPlptwW/iAI9lkfoNSkVhf2GdvmCIbajGYqcX7KZ0OmB3YznEjqbxBj7ttFIbWEo8ucf6bpubD68KU/WJ6YRpfbg6ih8tkhgkFz/GJEvFFuxswm4rxoL4bYaQDk3Txi5o3KoUWxx1LMsDrXDSNpC/S/f0IdpDUBXXvdVgn7I46NhyTdtGjG2aCVwnp4kLhEFNE8c0cYblMtRrtp3R0JGOMsN59skR3CPPd/pdRGlCUajTfDcxZg1lYgTTqa/rOuXz29sCr68GvRpDxdsh1eZmGTyn3HVnJMmaKgtOS0mVGQJ2Mwpr/e55uY6yntCbebFj5OWh+ruqp8uhqr7wwWbInMosG1Qxm/sY/VlhNFrgY+xoxDS5jGeotqzZ8elSeOqyXA5ilfnMp5ljWBz+zObl8GbDMRJE9JnM8e1m6a+pPV9bl1/CkoVtaEyxjnhLd4tG7wqiOus1IXokeCT5l/AvSj8+K7PKFpoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/7b42a2d17f0bf3fe658f60dfeca57f43/8ac56/15_c.webp 240w,
/static/7b42a2d17f0bf3fe658f60dfeca57f43/78ba5/15_c.webp 477w&quot;
              sizes=&quot;(max-width: 477px) 100vw, 477px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/7b42a2d17f0bf3fe658f60dfeca57f43/8ff5a/15_c.png 240w,
/static/7b42a2d17f0bf3fe658f60dfeca57f43/d743b/15_c.png 477w&quot;
            sizes=&quot;(max-width: 477px) 100vw, 477px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/7b42a2d17f0bf3fe658f60dfeca57f43/d743b/15_c.png&quot;
            alt=&quot;15_c.png&quot;
            title=&quot;15_c.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;4-2️⃣-example-interpretability&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-2%EF%B8%8F%E2%83%A3-example-interpretability&quot; aria-label=&quot;4 2️⃣ example interpretability permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4-2️⃣ Example: Interpretability&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;RNN에서 스퀀스 데이터를 학습이 되기는 하는데, 데이터에서 “무엇을” 학습하는지는 어떻게 알 수 있을까?&lt;/li&gt;
&lt;li&gt;데이터를 특정 dataset으로 학습시킨후 hidden vector를 뽑아 어떤 값들이 들어있는지 살펴본다 👉 서로 다른 hidden states가 어떤 것들을 예의주시하는지 알 수 있을지도..?&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;색 : 시퀀스를 읽는 동안에 앞서 뽑은 hidden vector의 값&lt;/li&gt;
&lt;li&gt;대부분의 hidden state는 아무 의미 없는 패턴으로 문장을 살펴보고 있다.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 855px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cd09fc62f9001cbd96586a4ef850178d/77800/16_hidden_states.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 19.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABEElEQVQY003OQU+CAABAYX56W4e6ttrq0NVas9ZaKzWdqYSighCgGAGCYibGbLmcNuPVOvV+wLcnqGfnSEoXL3PKWBQZugMCpcNzzyGsPWC5IzzTxtMMwrZKTzMZNBV6qoGtdwmlBkGjiaWaLNdfCLWyjFGVsFo6sSzjOT7D0QTbCRlLdSZ2n6Fu4jsDQkWjZ3skhsFrq0UcTQitPqEbMFUUkukMobR3xOXJFdf7x2g7u0hb2ygHh4iZLI+FMmEuR3Bzi1ssE1UqON6Q2WLJOp7yGUV8r1b8T9B/EbtQop+9QM7fU70TqdZ/T/JFVLnDU1vDb7Zx/RGLJOFj/k78MmXe7ZJYFsvZ2x+UbjakacoPYikWS9s1d7QAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/cd09fc62f9001cbd96586a4ef850178d/8ac56/16_hidden_states.webp 240w,
/static/cd09fc62f9001cbd96586a4ef850178d/d3be9/16_hidden_states.webp 480w,
/static/cd09fc62f9001cbd96586a4ef850178d/31c30/16_hidden_states.webp 855w&quot;
              sizes=&quot;(max-width: 855px) 100vw, 855px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/cd09fc62f9001cbd96586a4ef850178d/8ff5a/16_hidden_states.png 240w,
/static/cd09fc62f9001cbd96586a4ef850178d/e85cb/16_hidden_states.png 480w,
/static/cd09fc62f9001cbd96586a4ef850178d/77800/16_hidden_states.png 855w&quot;
            sizes=&quot;(max-width: 855px) 100vw, 855px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/cd09fc62f9001cbd96586a4ef850178d/77800/16_hidden_states.png&quot;
            alt=&quot;16_hidden_states.png&quot;
            title=&quot;16_hidden_states.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;따옴표를 기준으로 패턴을 인식 👉 &lt;code class=&quot;language-text&quot;&gt;&quot;&lt;/code&gt;를 추적
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 853px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ebc742ae422d0dae0eb126f6de8c3b03/66caf/17_quto.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 15.833333333333332%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA30lEQVQI1y3GwUvCUACA8f2zJUTnDhXdSqHp256TIdWlEJNatfnMgiU5MTcVzW1EBAXmtaCMzl87dPjxfVpj/Er+NqHUfWH37pl8e4bhDpBqhOFF6GcBxcx+o0PR6SHOA+RlH+Oij7wKKWd/qAYEYczPxyfaqW5ztFmgvl2gtrWHt7FDsJojWMnRW1tnIkxSu8pEWsQVm5FpMcw8CEkoygwNi0hWiHTBwvfR3g6qvJslpo6HOnFoHTs0ay6q7tHMtF0f/7rLjbqn5XVYjKf8PqUs04TvNP5vwtfskeV8zh+EbLh2R7HufgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/ebc742ae422d0dae0eb126f6de8c3b03/8ac56/17_quto.webp 240w,
/static/ebc742ae422d0dae0eb126f6de8c3b03/d3be9/17_quto.webp 480w,
/static/ebc742ae422d0dae0eb126f6de8c3b03/d8b1f/17_quto.webp 853w&quot;
              sizes=&quot;(max-width: 853px) 100vw, 853px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/ebc742ae422d0dae0eb126f6de8c3b03/8ff5a/17_quto.png 240w,
/static/ebc742ae422d0dae0eb126f6de8c3b03/e85cb/17_quto.png 480w,
/static/ebc742ae422d0dae0eb126f6de8c3b03/66caf/17_quto.png 853w&quot;
            sizes=&quot;(max-width: 853px) 100vw, 853px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/ebc742ae422d0dae0eb126f6de8c3b03/66caf/17_quto.png&quot;
            alt=&quot;17_quto.png&quot;
            title=&quot;17_quto.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;줄의 단어 갯수를 세는 것 같은 패턴도 존재 👉 &lt;code class=&quot;language-text&quot;&gt;\n&lt;/code&gt;을 추적
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 825px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/88f5c69eb1a86af56b0e5f3dbf79932d/d4c13/18_cell_sensitive.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABW0lEQVQY0yXQSUvjAADF8XxicQ4eBC86IAguiHh05iCKu7S4MGpHcImSRpvFpEmTNl0Z08akSSetB/VvxMO7vNPvPUG2PS4VixvD5Uq1uDNdrH8Rbjem2oupZ2m8JLTCAZ1owHOUECT/idMh6XDIKE1Jej3SMOTj/R1h8UJjfE9i6khh8lBi5lTl55HM3B+FxXOVlQuFtesnNsQyu5JFrlimoDk8VtuYVQ/PcXEUlY5h8DoYICwXdH5si0yfqEznJRYKBl/d6l+d36LF+q3Bgexw/GBxbXoobpOK16TTauNpKp54i5XL4+ZzjDKlMJ9JxrbvmcyXmNiXvpUnCrOZcinTr5yX+HVjsimaHJdcLlWbB7uG5dawdZ2aXMQ+O6O8s0NX0xC2ik42TWNNrCDWfIr1LnKWx4aP1g7QW13s5+xTP6IZxHSCiF4/IezH9IMXEt8nbNQJHYe30YhPX5dWTlXFpfsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/88f5c69eb1a86af56b0e5f3dbf79932d/8ac56/18_cell_sensitive.webp 240w,
/static/88f5c69eb1a86af56b0e5f3dbf79932d/d3be9/18_cell_sensitive.webp 480w,
/static/88f5c69eb1a86af56b0e5f3dbf79932d/0244e/18_cell_sensitive.webp 825w&quot;
              sizes=&quot;(max-width: 825px) 100vw, 825px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/88f5c69eb1a86af56b0e5f3dbf79932d/8ff5a/18_cell_sensitive.png 240w,
/static/88f5c69eb1a86af56b0e5f3dbf79932d/e85cb/18_cell_sensitive.png 480w,
/static/88f5c69eb1a86af56b0e5f3dbf79932d/d4c13/18_cell_sensitive.png 825w&quot;
            sizes=&quot;(max-width: 825px) 100vw, 825px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/88f5c69eb1a86af56b0e5f3dbf79932d/d4c13/18_cell_sensitive.png&quot;
            alt=&quot;18_cell_sensitive.png&quot;
            title=&quot;18_cell_sensitive.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;if 문 안에서 조건문 부분을 추적
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 843px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6d9e175c324be9fb735d987d6fba9d70/4ff83/19_if.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.166666666666668%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABT0lEQVQY022QXUvCcBjF90276I2gPkXQXVddpiUWdBH0cmFRZOawkN5wWr5MXdbm5tS5mtpWwX5NpbLowOGcAw/P//wf4fLBJHypsJ41CF0/sZIssJ1VEZUWCdkYsWxyWtI5K9URyw3EqslZUUOsmCQHudIgpbQDbyAcB4Pru0l2ozscnGc5vC4RvykiFRQqepMHy6Fo2lTbDj4jfOnQ+/4PgyyojsvyVpy9mXkOpuc4mlvgcGqW2MQk6cUlMtFNMqshcuE15EgEZSOKHA6hn5zQb7W+tn4/JQwkEVQOXchspgpcyRpSpc5dVaP2qFOraehPGoZap9e2eLNtvE4HL9AP1x22Gm8p5HWL47yKpNvcahY5w+bOdAK+IA18s8ut/oza9fgPvu//ykJaMYnd19nPqWSChY77htXz6PQ97L6L/TryPe99+DX/D8fvOMAnjRyxspB/908AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/6d9e175c324be9fb735d987d6fba9d70/8ac56/19_if.webp 240w,
/static/6d9e175c324be9fb735d987d6fba9d70/d3be9/19_if.webp 480w,
/static/6d9e175c324be9fb735d987d6fba9d70/e3019/19_if.webp 843w&quot;
              sizes=&quot;(max-width: 843px) 100vw, 843px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/6d9e175c324be9fb735d987d6fba9d70/8ff5a/19_if.png 240w,
/static/6d9e175c324be9fb735d987d6fba9d70/e85cb/19_if.png 480w,
/static/6d9e175c324be9fb735d987d6fba9d70/4ff83/19_if.png 843w&quot;
            sizes=&quot;(max-width: 843px) 100vw, 843px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/6d9e175c324be9fb735d987d6fba9d70/4ff83/19_if.png&quot;
            alt=&quot;19_if.png&quot;
            title=&quot;19_if.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 dataset을 학습시켰을 뿐인데 많은 것들을 찾아내고 있는 것을 확인할 수 있다.&lt;/p&gt;
&lt;h4 id=&quot;4-3️⃣-example-image-captioning&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-3%EF%B8%8F%E2%83%A3-example-image-captioning&quot; aria-label=&quot;4 3️⃣ example image captioning permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4-3️⃣ Example: Image captioning&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 818px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9a9a4d81b05726fbaca98bbe1965c267/64d87/21_image_captioning.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACF0lEQVQoz3VSz2sTQRTef8CjxZNXT3rxP/DiRZBiBaEHtWj/GBEUQUpB6UkQDYRWKFhaxItilWCoUpuuRrIbs93dJrvObpLd7Mznmx+7MRYfvHkzw+Ob7/veWI0vbfSCERIGJImghErGBLIx8LGxh9r6Ora2t6i+wuudbbjdDJ0O0OsJyBC6qLDePX+IQacFTofJhFPKSmBZoRpWnq7h3IXzuHLpIpaXF7F45y7CkGE00gROAO6/eYHE/2mOwiTAeQn4BKfPzOHs3Clcv3YZN27fIva/q/6/wRTg5801xL9s8xJXDTKLgqu7+sYG5uevYoFyaekm7j24jyRNTb+oQEtg633tMQEe6gauQRLGEAQB/h9CgWmgWdnWp/oK4m5rRiajCYVhqPYHrRY+NBoY0CNTVqisOeHht7c1sMpDHSlLEUWRZus6iJpNpAf7cIM24mEfwwHDIYnyjmh48WjqJS3Wbn0V6VEbQXgMP/QBIhY1I3R7XY1eEOssA8ZjZPkYBZ+ATwp5RJ4LcOO1MIyt3ZePkHo2vH4At+kSGjEk0+M4Vg0/bBvfbT20gizhcnBcqK8l3xLSpRHB5dIzyXDnGSIpeQjFTslMk0py7vuYEGDetuH4UvJgKtknySQbDQKUgvqMPvbXTQw8DwigXpdxTANxHAczrnNuJqvF6UEYoeZOMUzLPyWvzLQcp1MBlgD//Bq9iGkp1z+moIGnKN2GfgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/9a9a4d81b05726fbaca98bbe1965c267/8ac56/21_image_captioning.webp 240w,
/static/9a9a4d81b05726fbaca98bbe1965c267/d3be9/21_image_captioning.webp 480w,
/static/9a9a4d81b05726fbaca98bbe1965c267/3a941/21_image_captioning.webp 818w&quot;
              sizes=&quot;(max-width: 818px) 100vw, 818px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/9a9a4d81b05726fbaca98bbe1965c267/8ff5a/21_image_captioning.png 240w,
/static/9a9a4d81b05726fbaca98bbe1965c267/e85cb/21_image_captioning.png 480w,
/static/9a9a4d81b05726fbaca98bbe1965c267/64d87/21_image_captioning.png 818w&quot;
            sizes=&quot;(max-width: 818px) 100vw, 818px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/9a9a4d81b05726fbaca98bbe1965c267/64d87/21_image_captioning.png&quot;
            alt=&quot;21_image_captioning.png&quot;
            title=&quot;21_image_captioning.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;주어진 이미지에 대한 설명문을 출력하는 task&lt;/li&gt;
&lt;li&gt;CNN에서 요약된 이미지 정보가 들어있는 vector(feature map)을 RNN의 초기 입력으로 사용&lt;/li&gt;
&lt;li&gt;기존 Vanilla RNN 식에서 CNN의 출력 벡터에 새로운 가중치(W_ih)를 곱하여 더한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 834px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e163f566e67b32e38ff8f0110284ab69/5d72a/22_image_captioning_success.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.499999999999996%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABjklEQVQY0x2NTUiaAQBAv0udunQdNahDl7qOoJaEtCCnY/2bBUFDYf1YM10/9jOR7KvmkiRW38a6lFlUa1CMuWigEGyRLRS1H1jUoa2YCbG6uF7WO77De8K4U0dnby1abTlW0cTnjW/0mBvxeD18WJYYtGtY8y4S3PyOb20V/5aPnz/WCfi+suFdwOZU8t6lR5p+zvBbJUJhmoA69x6yzCSqVHk45t4hl2UgGsowvlJR9ew+rqUh3ox2YWx6jN1mwWbVY+1UIklGFJpk5lx9dHWXUFwhIOSkCGhk2cizUlEr8pl0SzwqyKBeL0fd+hBVTXoiKGKTDBh7CzCZq2nrf0pLxwNGxnSMvK5jZ9PD7IxIiSILobnpCS9NlbQbSpmdt+BansLwohLzkJbWnhpqtUWsfPnI/KcJBsb0OBJhx2Qb4rAOt9vJlNSBfbQdi7UBc2ImBEM7/DrcJXbxl1v+/D5hb/+A8+g5sdgFl/+u7vzx0TGBQJBQKEwkskf8/zXxeBz/tp9wJEw0GuX07JQbJ2cL09wn/TEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/e163f566e67b32e38ff8f0110284ab69/8ac56/22_image_captioning_success.webp 240w,
/static/e163f566e67b32e38ff8f0110284ab69/d3be9/22_image_captioning_success.webp 480w,
/static/e163f566e67b32e38ff8f0110284ab69/e1262/22_image_captioning_success.webp 834w&quot;
              sizes=&quot;(max-width: 834px) 100vw, 834px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/e163f566e67b32e38ff8f0110284ab69/8ff5a/22_image_captioning_success.png 240w,
/static/e163f566e67b32e38ff8f0110284ab69/e85cb/22_image_captioning_success.png 480w,
/static/e163f566e67b32e38ff8f0110284ab69/5d72a/22_image_captioning_success.png 834w&quot;
            sizes=&quot;(max-width: 834px) 100vw, 834px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/e163f566e67b32e38ff8f0110284ab69/5d72a/22_image_captioning_success.png&quot;
            alt=&quot;22_image_captioning_success.png&quot;
            title=&quot;22_image_captioning_success.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 825px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/d4c13/23_image_captioning_fail.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.583333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACc0lEQVQoz1WS7S8UABzH7y9p9b5l2lJMTHbHJvSww2q6Q57WMLXyeB7qcOUhJloeohbTLil5aM4Y8txwo8jFyem4O5wYR3fnk7tX+WzfF78339/3t99XoNV8Z2VZi7JZSUVlOSODXZhMRhxYrTasNjuW/b/OeXFhlt6+DoZHe5lQ9/Pj5zim9TXW1zcwGo1YLBYEgx01jHY3oKyUE33ZiyJZHPpfc+xarBhNZpZ1BsYmNTg866oVXAlyQRLhx/206zyrjUezoEb/e/XI2ITNZkPQ31bFYPNTmrNDKYm8RGWSiMXZSZZXN9gwb6N8/4nWzwPOhGXluYivepCdJ+VJhYTS2pvoDRr+RzA50EL3yxxaypIZasxB/aGIbxPDBIRGIlOUIZZE4+opZEW/Rl1TCbFxgWTIYgiPExIW5YN2ed5p5Eh3eHiIYEO3yMTXcfoGJ1D1qZma1mLe3KS6rp6aV2+QRsfj7uXL2pqJnv525IoM8uRZZOc8ID0jFZVKdTzhu4IC8pMSCAmJ55yLGKEoFr1Oy/OSQkrzHyIODsTH2wez+Q/yRzJczpzCTyTC19uf826nkUjEzEzPMDc3x9bWFoLc5HQKUhKoyLjHx7Q7dBamo9PMEhMhIS85iQfScERuZ1lZWqL4xWOSMxNJza1CGHADUdAFbidKna0wGAzs7u4hiImWERIs5VbUXYpzM2lXpLC+tMDAlwG62lrpaGmhuakJu91OYVYqwR6ehAk98Xc/yUXXE8RGXDt+8tTULG2tnbS3dzM6MoZpaR7rwcFR9/bZ3tlhd2/PKQfzo0P0NtQfteIt/comehpfM9Wjci5zPMShf7rlH+5TJgD3AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/8ac56/23_image_captioning_fail.webp 240w,
/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/d3be9/23_image_captioning_fail.webp 480w,
/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/0244e/23_image_captioning_fail.webp 825w&quot;
              sizes=&quot;(max-width: 825px) 100vw, 825px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/8ff5a/23_image_captioning_fail.png 240w,
/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/e85cb/23_image_captioning_fail.png 480w,
/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/d4c13/23_image_captioning_fail.png 825w&quot;
            sizes=&quot;(max-width: 825px) 100vw, 825px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/ebfd8d2fb2cdeaebfa9a54b9b2184fd1/d4c13/23_image_captioning_fail.png&quot;
            alt=&quot;23_image_captioning_fail.png&quot;
            title=&quot;23_image_captioning_fail.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;학습결과 어떤 경우에는 작 잘동하지만, 어떤 경우에는 그렇지 않음을 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✨ &lt;strong&gt;Image Captioning with Attention&lt;/strong&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 674px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/eefb0bdc4a404d46d7630ed9c5dc330d/fdaf8/24_image_captioning_attention.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB/ElEQVQoz31Sy2rbQBT1R3dRCIQSumrpOiW0i1BINl2mdRdddFEb7MQiJHrY1ssayWP5IVtvWbbs06sxuHUpPXAkuHfmzH2cBv6B/X5/ZA3f9yHLMhRFhj/1EcchjOEAuq6j2lUn9xr1Z7fbHfm3WFXtkKYJNGWI3sMTPMZh2xyP6hC2ZWE2WWIWJAjTQpxv4D+oRcMwRLlZwxvNwWyi6aNzr0PxQnFGkWy0JRMDLzgIZnmO+4ceWq2fkBUVRVEI1qiFEqquRp4VWC5WWK9LGIaNYBWJ+DIIYZoOcooLwTH3cf76HV6cXeDy6hqe6+LL3R1UVcWTZIB7CxLLMJmP4UwspFkKzZYRJSE25Zba9aEzjR4qiGs0mDfGy1dvcX7xBpfvP2I0GuH25gadbhftHypG5hRxFMHmJoxxX4ygq7YRRAG2mwruhKHX7yDLM9FZY7kK8en2M64+XOPrt++I6PJisUCSJOj3VbiedzpXoknLKNaHseR5Acu2jnmxlDgiGxi62PKfCOmx2jIR5YeDAYlzxJyqdA24zyY21GLIHsGHOnjf/i1YlqXov/5X1cFXcRzDokrGnAt7SJIE5noIXA1zRwdTTKR0ZunKFHMRMP8gWJtV0zRBx3HAGBOJ2XSKZrNJ22+RDzNst1sxhjhJMaGqXY9EgoCMvT+x2S8+GOiP+DAIDwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/eefb0bdc4a404d46d7630ed9c5dc330d/8ac56/24_image_captioning_attention.webp 240w,
/static/eefb0bdc4a404d46d7630ed9c5dc330d/d3be9/24_image_captioning_attention.webp 480w,
/static/eefb0bdc4a404d46d7630ed9c5dc330d/853dc/24_image_captioning_attention.webp 674w&quot;
              sizes=&quot;(max-width: 674px) 100vw, 674px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/eefb0bdc4a404d46d7630ed9c5dc330d/8ff5a/24_image_captioning_attention.png 240w,
/static/eefb0bdc4a404d46d7630ed9c5dc330d/e85cb/24_image_captioning_attention.png 480w,
/static/eefb0bdc4a404d46d7630ed9c5dc330d/fdaf8/24_image_captioning_attention.png 674w&quot;
            sizes=&quot;(max-width: 674px) 100vw, 674px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/eefb0bdc4a404d46d7630ed9c5dc330d/fdaf8/24_image_captioning_attention.png&quot;
            alt=&quot;24_image_captioning_attention.png&quot;
            title=&quot;24_image_captioning_attention.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CNN에서 하나의 벡터가 아닌 각 벡터의 공간정보를 가지고 있는 grid of vector를 만든다.&lt;/li&gt;
&lt;li&gt;z : 모델이 이미지에서 보고 싶은 위치에 대한 분포 👉 모델이 어느 위치를 봐야하는지에 대한 attention&lt;/li&gt;
&lt;li&gt;h0이 이미지의 위치에 대한 분포(a1)를 계산하고, 이 분포를 다시 벡터집합(LXD)와 연산하여 이미지 attention (z1)을 생성한다.&lt;/li&gt;
&lt;li&gt;이 요약된 벡터는 다름 입력으로 들어간다. 결과로는 vocabulary의 각 단어들의 분포(d1), 그리고 다른 하나 (a2)는 이미지 위치에 대한 분포이다.&lt;/li&gt;
&lt;li&gt;이것은 결국 feature map에 위치정보를 더하여 RNN이 해당 시간에 어떤 부분을 보아야 하지는를 떼어서 제공해 주는 역할을 한다고도 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 833px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/5205c/25_image_captioning_attention.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 25.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABVUlEQVQY002PS0tCcRDF/XTZg+xBkdTCoEyyIF+plVltehAZtlDLRSI9PkC1CGth2NVwe21pgWDe6xtb3HDx695/mwaGMzOcOWfG1Ol0aLdatPSU8nmKxSJ3d/dIksT9w4PAbDZLoVAQtYEGJ5N5olQq6f0bsiyT13c1TcOkaT+85CQeM88EgxtshULYbPNsbm6x5nJzcHjE9c0t6fQVF8kk4xOTuNwe1v0BYrE4zpVV4olzZqxW6vU6pl7vm0B4n+PImU7y6wKHeDxeTk4iuqBLYDyRIHJ6KjAU2iYaPWNnd4+kbmAYX6ZSbIfDdLtdTIaqLL+Ty70Kd6/Px9DwCB6vj1GLhSWHg9nZOez2JRYWFpmansatXzhgNosPBsyDLDudWCxjfxfyL1S1Llw+Pj5RFIVKpUKtVqNa/aLdbtNsNimXy2KmKCqNRkNwjbmqqvT7fX4BbjQrH0wFhAQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/8ac56/25_image_captioning_attention.webp 240w,
/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/d3be9/25_image_captioning_attention.webp 480w,
/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/184c4/25_image_captioning_attention.webp 833w&quot;
              sizes=&quot;(max-width: 833px) 100vw, 833px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/8ff5a/25_image_captioning_attention.png 240w,
/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/e85cb/25_image_captioning_attention.png 480w,
/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/5205c/25_image_captioning_attention.png 833w&quot;
            sizes=&quot;(max-width: 833px) 100vw, 833px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/edf6bc5cd4ccaf76d4eb94c5ea59c0f2/5205c/25_image_captioning_attention.png&quot;
            alt=&quot;25_image_captioning_attention.png&quot;
            title=&quot;25_image_captioning_attention.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;문장 생성시 위의 그림에서처럼 이미지내에 여러 부분에 attention을 주는 것을 볼 수 있다.&lt;/li&gt;
&lt;li&gt;Soft attention : 이미지의 모든 특징과 이미지 위치간의 가중합을 구해서 attention을 결정 👉 전체를 보는 대신 어떤 부분은 좀 힘을 줘서 본다.&lt;/li&gt;
&lt;li&gt;Hard attention : 이미지의 위치를 한 번에 단 한곳만을 본다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;4-4️⃣-example-visual-question-answering&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-4%EF%B8%8F%E2%83%A3-example-visual-question-answering&quot; aria-label=&quot;4 4️⃣ example visual question answering permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4-4️⃣ Example: Visual Question Answering&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 740px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/617d91489d2947dffd2cd9820fa83866/50383/26_vqa.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACSUlEQVQozz2Ra0iTARSGR/2ooP6FP/qRFYUS5LQbrkDKChUVJMJQU8emgeYlI0vKWcsg85Jh4FLI20whlldWSildJMJyOHSaZulMtzR1W5spW/Pp64N64cA5D+d9OXAknz5/Rf+8l+baRnr0XdhsDgZMJl70veHV+3e8HehnYMjIuYQEpNIATkdEcjBIxk21mpo6DSER4aRkpZOapqDzWSuSrkcVVKrySbpUyI2ickoaO2h72Y26vBT1vTJK6nTo9O3s8N2JZP06lGGhHN7mg1KpxM9/Dz5bN3EocDf7A7ZTUFaM5HVTNRU5icSkXOVinooqzQPaenqobtGh1XdS095KuzCHHpORFxfF/RwlGXEnSElOIihIyqkQKWnyGHKTI+juFi6sF1KzosMozIwn9vhham9doaqlA5WmmrsNWgofaqh9qiP8pIxA382EHw0kMjyY6KhI/Pb6s2HLRg7s20XmmSP09eqQNDdqOR8fz/WsC+Rmp1NbWU794wZyC/IpLS3m9rXLND3RUlqsJlgmQy5PJDNDQVHRHeQKBWcTYsmSx6LKTmVk3IBk1b3C4KgRg8nIlNmMxWLB7ljEOGxgcMggPGmJv1oS2BfzBPZlGw6nQ2RO109Gx0ew/pjjnyQu2wIzowPMm8dY83pFaJ+bEZiB+amx/4uLs5NMD/czPfKRJeu0yBYENmn6gN02L3q9Qkncyy5c3y24nU68Hg9ra2usOuw4Ld/E8qyuiuZfC/PYJsZwWWfF/rfHLezZcM6YWZ6zsmJbFEP/AFgd0l3Ji5AeAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/617d91489d2947dffd2cd9820fa83866/8ac56/26_vqa.webp 240w,
/static/617d91489d2947dffd2cd9820fa83866/d3be9/26_vqa.webp 480w,
/static/617d91489d2947dffd2cd9820fa83866/ca4a8/26_vqa.webp 740w&quot;
              sizes=&quot;(max-width: 740px) 100vw, 740px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/617d91489d2947dffd2cd9820fa83866/8ff5a/26_vqa.png 240w,
/static/617d91489d2947dffd2cd9820fa83866/e85cb/26_vqa.png 480w,
/static/617d91489d2947dffd2cd9820fa83866/50383/26_vqa.png 740w&quot;
            sizes=&quot;(max-width: 740px) 100vw, 740px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/617d91489d2947dffd2cd9820fa83866/50383/26_vqa.png&quot;
            alt=&quot;26_vqa.png&quot;
            title=&quot;26_vqa.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이미지와 질문을 입력받아 질문에 대한 답이 출력&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CNN + RNN + Attention
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 758px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d82cf03a7c47d6d6fb496ede053ee6a2/c8e86/27_vqa.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49.16666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACU0lEQVQoz1WS30tTYRjH92d4p6Tdq3RVTUupHGGauoRAMzPCiyjKfogKRnkh5HXXBVFQFEURBBEFWdoPsnWhc2e/znZ2znZ2tp2zX+iOn95tTu0LD+/D+758n+/zfR4HAltbWyJsbNumVCr9F6oaw0gZ+Pw+NC1ODem0zvzcDP39/bjPuBkaOsud2Wkc5ceNjQ0CwSDxRIJsLodlZbGyIiwL0zRJpVIomkZW3NXg863T5jyIs62Nnt5eOjqO0tV1vEpYLBRQwhKKHCAaDhAJSSL8xCKhnbwMI53mr3e9knu9Xpqa9nHosJPTp7ppb29nbGx0W+FmCY9Xwh8IENdUwqEgkrROJCIjh0Mk9WqrihzkzbOH2wp9tLS04nKdZGLiFm73IFNTU1VCVSh5/uSBaE8rG0ohn6NYLBKNqdjswt60yWetSl5+X5OCJHSdeDyOYRhkhD0VQs+PJW6OdhL2r6CaonrMFO2ZpK0cn1494uPbp/i9nzGK0g55IW/x+sVj5u7NMzs9Q5fLxfj4JRzlCe+FJ5jHF02j6QZmtsDtkQEG+lpZuHaMtZX3O//CssyJziMcaG5hf2MTDoeDhob6qsIyqW2XKh/VpMWabBGOquipDHcnr3NjzMVwn5MP717uEEqSn7q6OpqFj909PWJ1Bjl/4eIuYU1pMpkU1aMosVhlTUIBP98Xv/Dt6yKptLFnbSTqGxoZPjfC1SuXxUAmub+wgEPXE2KymlhgFUVR0MRZNlkTd5lMBlPsYs2UvYXzhTzLy0v8/O3h18ofVldXkSMR/gGKfp5nWfjktAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/d82cf03a7c47d6d6fb496ede053ee6a2/8ac56/27_vqa.webp 240w,
/static/d82cf03a7c47d6d6fb496ede053ee6a2/d3be9/27_vqa.webp 480w,
/static/d82cf03a7c47d6d6fb496ede053ee6a2/c4e8e/27_vqa.webp 758w&quot;
              sizes=&quot;(max-width: 758px) 100vw, 758px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/d82cf03a7c47d6d6fb496ede053ee6a2/8ff5a/27_vqa.png 240w,
/static/d82cf03a7c47d6d6fb496ede053ee6a2/e85cb/27_vqa.png 480w,
/static/d82cf03a7c47d6d6fb496ede053ee6a2/c8e86/27_vqa.png 758w&quot;
            sizes=&quot;(max-width: 758px) 100vw, 758px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/d82cf03a7c47d6d6fb496ede053ee6a2/c8e86/27_vqa.png&quot;
            alt=&quot;27_vqa.png&quot;
            title=&quot;27_vqa.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CNN을 통히여 이미지를 요약하고 RNN을 통하여 질문을 요약한다.&lt;/li&gt;
&lt;li&gt;두 모델에서 나온 벡터를 조합하여 질문의 답변에 대한 분포를 예측하여 답변을 출력한다.&lt;/li&gt;
&lt;li&gt;이 과정에선 attention을 사용하기도 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;rnn-variants&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rnn-variants&quot; aria-label=&quot;rnn variants permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RNN variants&lt;/h2&gt;
&lt;h3 id=&quot;1-vanilla-rnn의-문제점&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-vanilla-rnn%EC%9D%98-%EB%AC%B8%EC%A0%9C%EC%A0%90&quot; aria-label=&quot;1 vanilla rnn의 문제점 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1. Vanilla RNN의 문제점&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 850px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c61633b12ff23cb17a0df87fa7929943/ae694/28_gradient.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.916666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABnUlEQVQoz02R646bQAyFef8n2v5YtVGlhkDZNtBIBAhJuQwwLEzChnAbOGtgW60lSzOfPfaxR8muCRIRg5Uh6q7GbKlg5Ctr+gemaQIT0cpEiHZoISdJ8ZUlFOtkt7xVDPcHNOsZ2v4JMb9g6HvoznfoHyx9peSugWpvVmY+IRcpmuaOrf0VuvlM/AuKK18LngMLpq/DiffIOamsbjiHJrGfcIm98ghvVwF/ZmcDbjQzhkoUcIPfS55HrOAJhkFCmau2XYdxGvHPJvKmaTCM8j+TFH80jyX22Xqa6LMpUkqM47j4vKu2bREGAcIwRBzTzhhDFEVIkgRCCNR1vfCMc3CekXOIcuVLwdPphJPnwXEcXC4XVFWF3W63+Ha7Xc+ahqIocL/fEQR/8W2zgWVZMAwDv15ecDgc8Ifudf2AoqoqVHWH4/GIiDp3NIJPTWzbXpq4rrvGSGVD6udHnudTLiP1KTz/jDBiiOl8q97oU0iVRwrnEdM0pcUOMM09VFKnfqjUNB1lWa4763qwJEOeF0hSjogKZVmOjO7XW4V32AtPwLo7H0cAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/c61633b12ff23cb17a0df87fa7929943/8ac56/28_gradient.webp 240w,
/static/c61633b12ff23cb17a0df87fa7929943/d3be9/28_gradient.webp 480w,
/static/c61633b12ff23cb17a0df87fa7929943/10237/28_gradient.webp 850w&quot;
              sizes=&quot;(max-width: 850px) 100vw, 850px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/c61633b12ff23cb17a0df87fa7929943/8ff5a/28_gradient.png 240w,
/static/c61633b12ff23cb17a0df87fa7929943/e85cb/28_gradient.png 480w,
/static/c61633b12ff23cb17a0df87fa7929943/ae694/28_gradient.png 850w&quot;
            sizes=&quot;(max-width: 850px) 100vw, 850px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/c61633b12ff23cb17a0df87fa7929943/ae694/28_gradient.png&quot;
            alt=&quot;28_gradient.png&quot;
            title=&quot;28_gradient.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;backward pass시에 계속적으로 W Transpose가 관여하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 719px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.833333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABrklEQVQoz1VSi46jMAzs/3/h6aTdbSEBEl4hAa60pXNjp3R3kUZ2bMfM2Dnd73fEOKOue3x9GdoOfR8Rwkos2Q4Jbe0wdCOm6R/GcUHbJXii8VHh24Tr9YbT7XZDnJioenx+Vvj4MKjoezfB+wTHHznjYEyHxnrYwqEwI4wdUdUBjnWCppkwz9fccJpmslrQdd+2bQk3wrOJ+HU9wLJBeXFk22lNrksKT5bLsr0YUnLLgGtG/i3Ai2UjhZ+0uCxbnIuO0iivIluyds1AJUHvNLzzZhhCRGU8zNlmXCqY0sFSurUd0ePPX4OCTcW31cA85Uvd6055rklsxWnbNkpOSt+/6KsEtZHxBFMFXIqWTDNbif+sFbhD8nfD9C7u2vhuZtlMGsorkOG3r9xRq5BxMbcsKnnLM9TB5o3VHL40km2W3KZc1i03Mq/czLnM9vB/bTmlWd9VxWAtSXkKPjMcx1nfnePG+z6pPwwzcdicl9y6UvLz+YRAHvjh748H5Nv3nedd/Qdjkjvihz38I39a15UME2VHzlJoz8SisQyeF55jrtEz41qnuVnrQghq/wOs2kL0hBA4EgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/8ac56/05_tanh.webp 240w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/d3be9/05_tanh.webp 480w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/05ca6/05_tanh.webp 719w&quot;
              sizes=&quot;(max-width: 719px) 100vw, 719px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/8ff5a/05_tanh.png 240w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/e85cb/05_tanh.png 480w,
/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png 719w&quot;
            sizes=&quot;(max-width: 719px) 100vw, 719px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/7a471076e0e5d7aeb2bb56201d39e3b6/073e9/05_tanh.png&quot;
            alt=&quot;05_tanh.png&quot;
            title=&quot;05_tanh.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이 경우, 곱해지는 값이 1보다 크거나 1보다 작을 경우 각각 exploding과 vanishing의 문제가 발생하게 된다. exploding은 gradient clipping(gradient 의 L2 norm 이 기준값을 초과할 경우 threshold/L2 norm 을 곱하여 정규화)을 통하여 제어가 가능하나, vanishing은 결국 gradient vanishing을 야기한다.&lt;/li&gt;
&lt;li&gt;RNN은 뒤로갈수록 앞의 내용를 잊게 되고 이런 문제를 장기 의존성 문제라고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-long-short-term-memory-lstm&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-long-short-term-memory-lstm&quot; aria-label=&quot;2 long short term memory lstm permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2. Long Short Term Memory (LSTM)&lt;/h3&gt;
&lt;h4 id=&quot;2-1️⃣-순전파&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-1%EF%B8%8F%E2%83%A3-%EC%88%9C%EC%A0%84%ED%8C%8C&quot; aria-label=&quot;2 1️⃣ 순전파 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2-1️⃣ 순전파&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 894px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a89d9a66532883001bdc42f1d79aa181/38af3/31_LSTM.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABaUlEQVQoz4WRa2+CMBSG+f//aR+WTDe8cVMRdSKKQC2KVUAuwru2RrNkS2zyUNpwHk7fKuCjaRvEZ4o9izjkPp/JE8ohLATLmfgcbdv+4bGvZGkGdmHQNwNOH8Z2gOHqE6O1Cs3rYSDe3S9oGxVOYEPU/id8oLRNi2uZwyFjLOIx5nQMczOEHZmwQxPT0MA0MODsTXiHb7wainiUdYGxr2HGJZOdzjtUMY0MWHxPCGfE4msdLl3KoiRJUBQF8jxHlmWoqgq32w1N09yFdVOj53RgbTRMPAu9RZdLe7C2I84Q6uwDDrWwju8d+jsfhBAcDgdJGIbyJ4wxKJfzBcn5BGs34nl18W6+cWGHZ9mHTQzoPEeZJ89wHtpSSPYEaZoijmNQSlGWpeyyrmsoYnEtrggSH+v9CqtoKXHJNzzqPuf5boYgDuSliGJx1NPpJDsTcnF8eSm/A62qGuklexn8Qyg4Ho9SLPIT/ABnCFqShQjB3gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/a89d9a66532883001bdc42f1d79aa181/8ac56/31_LSTM.webp 240w,
/static/a89d9a66532883001bdc42f1d79aa181/d3be9/31_LSTM.webp 480w,
/static/a89d9a66532883001bdc42f1d79aa181/26e8f/31_LSTM.webp 894w&quot;
              sizes=&quot;(max-width: 894px) 100vw, 894px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/a89d9a66532883001bdc42f1d79aa181/8ff5a/31_LSTM.png 240w,
/static/a89d9a66532883001bdc42f1d79aa181/e85cb/31_LSTM.png 480w,
/static/a89d9a66532883001bdc42f1d79aa181/38af3/31_LSTM.png 894w&quot;
            sizes=&quot;(max-width: 894px) 100vw, 894px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/a89d9a66532883001bdc42f1d79aa181/38af3/31_LSTM.png&quot;
            alt=&quot;31_LSTM.png&quot;
            title=&quot;31_LSTM.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RNN에서의 장기 의존성 문제를 해결하기 위하여 gate를 도입&lt;/li&gt;
&lt;li&gt;LST는 두개의 state(C_t : Cell state, h_t : Hidden state)를 유지하며 hidden state와 입력값(x)의 결과를 4개의 게이트(i, f, o, g)통과시켜 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;게이트&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;연산&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;의미&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;i(input gate)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;sigmoid&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;현재 정보를 저장할지 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;f(forget gate)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;sigmoid&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;과거 정보를 버릴지 말지 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;o(output gate)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;sigomoid&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;cell state 를 얼마나 밖으로 출력할 것이냐를 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;g(gate gate)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;tanh&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;input을 얼마나 포함시킬 것인가를 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;forget gate - C_{t_1}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;forget gate가 0~1 사이의 값을 가지며 C_{t_1}와 곱해진다.&lt;/li&gt;
&lt;li&gt;cell state를 다음 단계로 가지고 갈 것은가를 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;input gate - gate gate&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gate gate는 -1~1 사이의 값을 가지고, input gate는 0~1 사이의 값을 가진다.&lt;/li&gt;
&lt;li&gt;gate gate는 방향(값을 빼고 싶은가 더하고 싶은가), input은 양(얼마나 뻬거나 더하고 싶은가)를 결정&lt;/li&gt;
&lt;li&gt;cell state의 어떤 값을 얼마나 쓰고 싶은가를 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;output gate - tanh(C_t)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t 시점에서의 cell state를 얼마나 hidden state로 넘겨 줄 것인가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;2-2️⃣-역전파&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-2%EF%B8%8F%E2%83%A3-%EC%97%AD%EC%A0%84%ED%8C%8C&quot; aria-label=&quot;2 2️⃣ 역전파 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2-2️⃣ 역전파&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 891px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2409785eb7345114e3c9fccc02f6e6dc/b7877/32_LSTM.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACQUlEQVQoz1WTR2/bQBCF9f8PAXzMPQ25BAgCxDYQpNkWVSxRVGOTRIoUq6rVRYlflmRiOAM87uzMvoednWFJURRkWabf7wv06HY7dPsq5nDIyLJQdT2HZdu0O53cNwYDvCAgszRNnyE+lDTDwDBNxo5DGEWYwt8tl5w2a47bLcl+R7LbcTrs2a9WHDcbEhE/iTW9nEkz0X/IBHPvpa3W0GgU6KlQqwu/CUoHpAqiHGgpRWw6LzjJBc6FUCnUZByzgDtoMTYaxLbGamzjif0ki2fQG0zEfmmPmI1NcVZmMlRyTpYP7R5PooKS4XVoOxWaloTiVJHtMlaoEsY+PbdOayxyo7LI1fJz4dTD8nTarlRwxhlHQvNkpuLJSprXpaL9pqrfoUweaQgBZ2mxPW5pWFUq+j31YZmWI8QnNRFf480dJO1XzmvaVYEKatguSraiAfKgTtdpYQj0RjXcwGS/WaHZTRS9IlYZfSyL3CNP2xXRMqBtN9D9HsNYQ/M7GH6fJElEU17YJY45iXHYByGneJrjPJ9zjCMOUUAi/PRyKXon3ssUExKGIdtsGpLz36aIQCyEprM59kilfnOP9OGa+p2O9OAxCRbctD7x9uEdjzWJdL3MiRmv2Wzmoq7rcjgcCsHMyXFKUOUyP9984fvVex6+dvlx62KNQj6WX3N1+4pv159JF/HzDT3Pw/f9/EKLxYLz+fx/yU/LGTM3ZDpwWUQb0bUDm82eUaChen2i0Cc9FjfZ7ba5yFw8Q1Zy/qcI+wP3EChLdTCQ3gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/2409785eb7345114e3c9fccc02f6e6dc/8ac56/32_LSTM.webp 240w,
/static/2409785eb7345114e3c9fccc02f6e6dc/d3be9/32_LSTM.webp 480w,
/static/2409785eb7345114e3c9fccc02f6e6dc/3b50c/32_LSTM.webp 891w&quot;
              sizes=&quot;(max-width: 891px) 100vw, 891px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/2409785eb7345114e3c9fccc02f6e6dc/8ff5a/32_LSTM.png 240w,
/static/2409785eb7345114e3c9fccc02f6e6dc/e85cb/32_LSTM.png 480w,
/static/2409785eb7345114e3c9fccc02f6e6dc/b7877/32_LSTM.png 891w&quot;
            sizes=&quot;(max-width: 891px) 100vw, 891px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/2409785eb7345114e3c9fccc02f6e6dc/b7877/32_LSTM.png&quot;
            alt=&quot;32_LSTM.png&quot;
            title=&quot;32_LSTM.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;역전파시 Cell state는 정보를 잃지 않으면서 grdient 값을 구할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C_t는 역전파 되면서 sum gate와 element wise gate만을 만난다.&lt;/li&gt;
&lt;li&gt;non-linearity에 의한 문제가 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;여러개의 cell을 연결하더라고 역전파 경로에 방해되는 것은 없다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gradient vanishing 문제를 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-other-rnn-variants&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-other-rnn-variants&quot; aria-label=&quot;3 other rnn variants permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. Other RNN Variants&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GRU(Gated Recurrent Unit)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vanishing gradient 문제를 회피하기 위해 element-wise를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LSTM: A Search Space Odyssey&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LSTM의 수식/모델을 변형시키며 실험을 진행&lt;/li&gt;
&lt;li&gt;결론 : 전부 비슷하다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An Empirical Exploration of Recurrent Network Architectures&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;아주 많은 임의의 RNN 아키텍쳐를 실험&lt;/li&gt;
&lt;li&gt;GRU와 LSTM 보다 엄청나게 좋은 모델을 찾아내지는 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#summary&quot; aria-label=&quot;summary permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SUMMARY&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RNN은 모델 설계에 있어서 유연성을 제공하고 많은 시도를 할 수 있게 해준다.&lt;/li&gt;
&lt;li&gt;Vanilla RNN은 잘 작동하지 않는다.&lt;/li&gt;
&lt;li&gt;대체로 LSTM이나 GRU를 사용한다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RNN에서는 기울기가 exploding 또는 vanishing 될 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;exploding - gradient clipping&lt;/li&gt;
&lt;li&gt;vanishing - LSTM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4 id=&quot;ref&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ref&quot; aria-label=&quot;ref permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;REF&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://brightwon.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;RNN(Recurrent Neural Network) 이해하기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wikidocs.net/21668&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;1) 언어 모델(Language Model)이란?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yun905.tistory.com/31&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;CS231n Lecture 10 : Recurrent Neural Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[CS231N Lec.02 Image Classification]]></title><description><![CDATA[Lec.02 Image Classification 강의 정리본. The data-driven approach, K-nearest neighbor, Hyperparameters, Linear classification I]]></description><link>https://suheeeee-dev.netlify.app/posts/2021-07-11/cs231n-lec-2</link><guid isPermaLink="false">https://suheeeee-dev.netlify.app/posts/2021-07-11/cs231n-lec-2</guid><pubDate>Sun, 11 Jul 2021 15:47:32 GMT</pubDate><content:encoded>&lt;p&gt;본 게시물은 &lt;a href=&quot;http://cs231n.stanford.edu/2017/syllabus.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;CS231n: Convolutional Neural Networks for Visual Recognition (2017)&lt;/a&gt; 강의의 영상과 슬라이드를 기반을 작성 되었습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;image-classification&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#image-classification&quot; aria-label=&quot;image classification permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Image Classification&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;컴퓨터 비전 분야에서의 core task이자 CS231n에서 주로 다루기도하는 문제&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;image-classification은-어떻게-이루어-지는가&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#image-classification%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%B4%EB%A3%A8%EC%96%B4-%EC%A7%80%EB%8A%94%EA%B0%80&quot; aria-label=&quot;image classification은 어떻게 이루어 지는가 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Image Classification은 어떻게 이루어 지는가?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;이미지를 입력받는다.&lt;/li&gt;
&lt;li&gt;정해진 카테고리 집합에서 컴퓨터가 이미지를 보고 어디에 속할지를 고른다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;👉 인간에게는 쉽지만 컴퓨터에게는 매우 어렵다.&lt;br&gt;
👉 컴퓨터에게 이미지 == 거대한 숫자판&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/57ba9b3543c787d77a96581afc581983/b0aa6/01_semantic_gap.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49.583333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1UlEQVQoz2VSTU8TURTtz9MFEhPBRYsUCK3GRowxcYHduJANW3duWEAIGAyYCL/AkIAbhzIt812m09KZftMx0057fPeSmYxwk5vz5s15536mhsMhZFmGaZqQJAm6bsBxHFhWFbWaw/fdbg/j8Rjtdpu90+mwt9ot9Pt9TCYTTKdTxhQRPc9Dr9eD57oYDAbw/b/iQZfP0WP6R4GvVAWKpkIhFK7pOkajEchINEWHet3Bzt42vh8d4vjnCX4cHuH2dsgkqoCC+r6PylUFmqGziC7QqlYZgyD4X/D0/AxP0s+QLRSQe/sO2ZVFlC5LTIyi+0JY1TQWUVRVnEWW4pvwgeCFauL15y94+XEDS7kslnPL0DSdSZQd9YZ69edCQrlSgVyWGSmAoigPS740bKysb2LpzXus5jMorK3BMCwEo4D7SGWTu64n7g0xMIuHZRg0sG4sFguWtGvkP3zC80waL7JzKBaLsEwrJkbY8lpiA+poNpu8ARQgsojHgr9+S8jkX+Hp3CwezTzGfHpBlFVmQhiGcekkZtu2GGIDjcYNOveyizOs2jV83drC7rd94QfY2T+A691Fp/5FgjXBozJpMMnMk5a6f5G05L9occnDcBIvczJDsn++7tRCK3luUAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/57ba9b3543c787d77a96581afc581983/8ac56/01_semantic_gap.webp 240w,
/static/57ba9b3543c787d77a96581afc581983/d3be9/01_semantic_gap.webp 480w,
/static/57ba9b3543c787d77a96581afc581983/e46b2/01_semantic_gap.webp 960w,
/static/57ba9b3543c787d77a96581afc581983/e96a9/01_semantic_gap.webp 1233w&quot;
              sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/57ba9b3543c787d77a96581afc581983/8ff5a/01_semantic_gap.png 240w,
/static/57ba9b3543c787d77a96581afc581983/e85cb/01_semantic_gap.png 480w,
/static/57ba9b3543c787d77a96581afc581983/d9199/01_semantic_gap.png 960w,
/static/57ba9b3543c787d77a96581afc581983/b0aa6/01_semantic_gap.png 1233w&quot;
            sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/57ba9b3543c787d77a96581afc581983/d9199/01_semantic_gap.png&quot;
            alt=&quot;01_semantic_gap.png&quot;
            title=&quot;01_semantic_gap.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;
👉 &lt;code class=&quot;language-text&quot;&gt;Semantic Gap&lt;/code&gt; : 컴퓨터가 실제로 보고 있는 &lt;u&gt;숫자판&lt;/u&gt;과, &lt;u&gt;고양이&lt;/u&gt;라고 하는 의미 사이에 존재하는 간극&lt;/p&gt;
&lt;h3 id=&quot;image-classification은-컴퓨터에게-어렵다&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#image-classification%EC%9D%80-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90%EA%B2%8C-%EC%96%B4%EB%A0%B5%EB%8B%A4&quot; aria-label=&quot;image classification은 컴퓨터에게 어렵다 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Image Classification은 컴퓨터에게 어렵다!&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 834px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/97eeaa07a655b483bde1f13a6f43b393/5d72a/02_difficault.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 162.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAhCAIAAABWXBxEAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAHxklEQVQ4y1XRd1DTCRYH8N94c7e3uEURG6zichhCl7B0A4QauhCSACkkIT2hBNIJJAQhhISS0JIgoIsKIqIg6KqHylowsoh0laICAhZAVlm5uRUPZ3Zuxpn3Zt4/n3lvvg+IDAu1trb2cXf1c4e4QFwJyclenm7o2EhEdFhoaKhGQdDkwJoLooVkXybiUHVRxvjoqFQi9Id5abQlgKWl5ZYtgL+btYWpyVf//DoA5mf6vYnFru0HLXa6Q5y4dK/qPC9t5iE/MOB1ABAyAiVSCYmMAQCARqcCVlZW2741kaSiQ6FOB60s/X0Pf/2Pv201+bvlXjMfd4iQHaCVBdxtoWbG7yOHmkjY0cqqXATWd+/ebeQUMmBu8YOF2dZ0rF+gp40XBBQZFmxqut3C3NzR3j4AFpiOd6PE7Z26yTWwzOBgIAUZTEvF2DibffPdFjqVArh5eNiB9uGR0LBAD3RMoEyaS6HQuVk8Pl8kkxepxIgyUdCdk5RCki0mCETFHolDxUBhEBtbS6GQDwwOPbw7OCirrtdq1HevtjSfbqyv0xv0eoVSLZYp0uLg4eADuJiY9tau+3eMyVE+zAS4kpvCiA8yqHKBkUfTy8tLxfLs42XS2z3XmOxMAY+vUha6exx29w6Od3f6AQDS6GlnTp+vqdSHuezBB4E5aH8RPlQlTAFOtV2hpwr5KYjjcopBU1xWojqmLajT5NvYupCo6XQk1GEXwCDTRRlUZLinN3iXD3gHLtyzQsJMJSUC8YkEIjZRJeXg0QiJWKKvKidj4/QqsTvENQ6FFxChgY4mJAyOjgvHHzmEi/JTiWgnSiVNWqmMSwdC4JGxUZEIBBoeEZsjV1WWq6ViQWujgZfG3LxCRIdHeO0gxP+UFAXKZsLLuRhStI8yHaXJQl1qUAK3enrONje3NJ/tunTl3v3+x+MjI4O9A323xoeNE4/6jbfafmnTX73Y0Hvz3OhAz0j/r4PG7r7bVwbudc9OjwP5HHYIxJGIjMxKoyYTyAI+K48Lp2HcuGxoHj+Mxw4TkIMMiqwWQ2GTTn5aX3BKV6hTi3K5xNYzxwE6GkGKDTaUZWsLsrgMQgYbL0wNM6j56dQoLsFXTAmiHHHS5dH1ivR6VdbPJYJjCs5mzhxcSHN9OZBFJcZHBzs72fltvsbdNYOBEXFjO0+qWhpKzh+TFnGRqFCXKlma4SijgJNYLWed1oh0R1O5pIjWE5UAPhG57fvv7K3NIQ7WZqamCYiQLKo3DeEqYEXIONEcnD86xLFaxqxXC2qVPH0R36AUlOSwmJiI43otkMFmh8ECaEloJi6RlphQIEorzcHI+An8jDhBZhydGELHBZxQi3IyaUd5tEIeVcYiyGhEZHSIUqkA5icHxn/reTxwe2rwzvxY79yYcWzg9oMHNydH7gwZu6ceD66v/2dlaXnpzdLrV6+np6YnHj158Wx2cX7x/doacEIEUyTZ6Cj2lST7Jpb9aYZzPhIkxdo3ZPxUlGB1XpO5sPi2vaW9+0pP772HvcbBq5evd7Rdam86Pz35DGgSBNSxHVREUBkOXEEClZFBZXRwHdlRTz4kjdp/TiPobL+o11Z0X7t983rv5XOdmgJV17mOa5dv9N29D1QxoBqMTQ0FUkpzaEp1ziVYCxNAslhwMc5ZFLG/q0Y0OjJZVazNE+c36wwKJr1YJG6o0v/ScW168jlQmwrNIf5LSgEXJRy8letZjneUpoDlDHAR27ES/2NXZebI+POKwnJceFSDqvhs3bHx/t9GHwxNTcwuLrwB6rP8Wej9YoxNlxB6QxGeh7QVYkE8rI0o3qEUa3Uqn9J24drw8ET3xSvDfQ9ezS/MPH02N/tyeXltbW0dUFM9JZF7pZH7Som2DTSwGL47D2lXSz5UEmmeEbC7Sc0YHH5iND68e+/BwvyrhYWXw0NjT6dfzMwuzszMA1JGlJzoU86AlbPgJ0VxutSY1gLqSQmeh/CXJAS215W+W/1z7vmb6Yn51aX1xReriy9WVlfWZmcXp6aeAWtr79c//PHu/Ypx9Madoav9j28MTP56b6RnaLJ/aLp3bLb3yULfZo3O9Q487emb+vfYbN+fH/+7sfHp48YGsLHx8dOnTy9X5ggV3kitU5IOkl+bcKq5rqalktMclN7ontkEzWhyY/0MYehdk7W2nDOBqx+WNsnGJv748TNeXJlTtuIqL6Cr2mI72iUlKk1Nva7uVKFCnV1Um83QRkjq4w0qljwdkdOIWvnw5i+82ZvT3NuZ9kuZLzqKjHXZ12t5uYUSFodWUVlVVlGvlAmlDKSMhVLx0QJ2hLwR9Xb91f/x580zKxPFjRhdIYmddICD8iitKiExKTHoaBQhPjr8cDbNj5PszSIFMxWxwjNHfv/jzRd4YflpktouQWodFLc7GeHJy5VgGQx0SrKzt9vO3XtIuLAUQoRvMATLgbMM/u8+LH+BF5efJxXahfJ3+1LM8Rw3cRUbmxdFy6MG4f3DUf42kB9h4T6weBcPvClVDX37/vUXeH7pGVoFggm/hfG3h+buiCkwjym2PFIMhgl2+rL22KO3OqO3OaC+cUn5Ci13Wfn91ReBrbx/XdHOUzRRi9tYFZfTSzrTVB1U5QWaoi1VfpKRU0fKOUHObkiRHCdVdorXPqx+xp82/gdr1vHMPXE57QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/97eeaa07a655b483bde1f13a6f43b393/8ac56/02_difficault.webp 240w,
/static/97eeaa07a655b483bde1f13a6f43b393/d3be9/02_difficault.webp 480w,
/static/97eeaa07a655b483bde1f13a6f43b393/e1262/02_difficault.webp 834w&quot;
              sizes=&quot;(max-width: 834px) 100vw, 834px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/97eeaa07a655b483bde1f13a6f43b393/8ff5a/02_difficault.png 240w,
/static/97eeaa07a655b483bde1f13a6f43b393/e85cb/02_difficault.png 480w,
/static/97eeaa07a655b483bde1f13a6f43b393/5d72a/02_difficault.png 834w&quot;
            sizes=&quot;(max-width: 834px) 100vw, 834px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/97eeaa07a655b483bde1f13a6f43b393/5d72a/02_difficault.png&quot;
            alt=&quot;02_difficault.png&quot;
            title=&quot;02_difficault.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;viewpoint variation&lt;/li&gt;
&lt;li&gt;이미지에 미묘한 변화만 주더라고 픽셀 값이 광범위하게 변화한다.&lt;/li&gt;
&lt;li&gt;예를들어 고양이가 가만히 있더라도 카메라의 이동에 따라 픽셀값이 달라진다.&lt;/li&gt;
&lt;li&gt;조명 illumination&lt;/li&gt;
&lt;li&gt;변형 deformation&lt;/li&gt;
&lt;li&gt;가려짐 occlusion&lt;/li&gt;
&lt;li&gt;배경과의 유사함 Background Clutter&lt;/li&gt;
&lt;li&gt;클래스내의 다양성 Intraclass Variation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이런 것들을 모두 고려하였을 때, 컴퓨터가 이미지의 의미를 알아챈다는 것은 매우 어려워 보인다.&lt;br&gt;
👉 일부 제한된 상황이라면 잘 동작하는 기술이 존재한다!&lt;br&gt;
👉 앞으로의 강의에서는 이것이 어떻게 가능해졌는지 볼 것이다.&lt;/p&gt;
&lt;h3 id=&quot;이전까지-이미지를-인식하기-위해-해왔던-시도&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%B4%EC%A0%84%EA%B9%8C%EC%A7%80-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%EC%9D%B8%EC%8B%9D%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%B4-%ED%95%B4%EC%99%94%EB%8D%98-%EC%8B%9C%EB%8F%84&quot; aria-label=&quot;이전까지 이미지를 인식하기 위해 해왔던 시도 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;이전까지 이미지를 인식하기 위해 해왔던 시도&lt;/h3&gt;
&lt;p&gt;😺 &lt;strong&gt;고양이 인식하기&lt;/strong&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 849px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/dee8cf736ff26691e8dc974778ef3d95/f96df/03_image_classifier.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 38.75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABn0lEQVQoz22Sz0tCQRDH9yCK4EEQBA8iiBev3rpEdCrsB6VgyisyUCIRI9CkOoR08WWGCiF0KDr0dwgWFVHRRYS8qgd5ivqeB1G/uUsuRQ4MM8OX/czM7pKPzw88PD3i/e0Nry/P+PqqYGLFYhGiKCKTySCVSiGXy0GSJKaNRiMef+ckEA5iwb2EnfA+PIKA9OUFB0YiERBCoFKpoNFooNVqUSqVmDYcDjnst5NY8hLruwfY3Ath2eXE+Rj40xDxeJwB7XY7rFYrLBYLyuUyB04zcpq/hyt0AiHgh3tjBVf5a9RqNdTrdQSDQQY0m80wGAwwGo0oFApMr1arUBQF7XYb3W6XxU6nA3KUvsbc6gYEvwdbfi9ubu94t2g0ytakQL1ez6CTlfv9Pnq9HnMKmtTkSMxi3efB7PwMnCuLyGZzHBiLxdiEFETBarV66sp0Or5y+PAY3m0BW4EdrHl9OEuKXEwkEtDpdHA4HLDZbDCZTKhUKn8ehRp9+UlNms0mpLF3xvcgNVuQZYUDZVlGo9FgB2ikPhgM/n2XVqvF82/tgew7JanNgwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/dee8cf736ff26691e8dc974778ef3d95/8ac56/03_image_classifier.webp 240w,
/static/dee8cf736ff26691e8dc974778ef3d95/d3be9/03_image_classifier.webp 480w,
/static/dee8cf736ff26691e8dc974778ef3d95/51e4d/03_image_classifier.webp 849w&quot;
              sizes=&quot;(max-width: 849px) 100vw, 849px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/dee8cf736ff26691e8dc974778ef3d95/8ff5a/03_image_classifier.png 240w,
/static/dee8cf736ff26691e8dc974778ef3d95/e85cb/03_image_classifier.png 480w,
/static/dee8cf736ff26691e8dc974778ef3d95/f96df/03_image_classifier.png 849w&quot;
            sizes=&quot;(max-width: 849px) 100vw, 849px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/dee8cf736ff26691e8dc974778ef3d95/f96df/03_image_classifier.png&quot;
            alt=&quot;03_image_classifier.PNG&quot;
            title=&quot;03_image_classifier.PNG&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;이미지에서 edgds를 계산, 다양한 corners와 edges를 각 카테고리(귀, 코, …)로 분류&lt;/li&gt;
&lt;li&gt;이들로부터 고양이라는 특징(귀가 두 개 코가 하나 등 고양이를 인식하기 위한 규칙)을 찾아낸다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이러한 방식은 잘 동작하지 않는다.&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;위에서 언급했던 문제들에 대해 강건하지 못하고&lt;/li&gt;
&lt;li&gt;인식하고자 하는 새로운 객체가 등장하면 처음부터 모든 동작을 반복해 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👉 다양한 객체들에 유연하게 적용가능한 알고리즘 필요&lt;br&gt;
👉 ML key insight : &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;Data-Driven Approach&lt;/code&gt;&lt;/strong&gt;가 등장하게 됨&lt;/p&gt;
&lt;h3 id=&quot;data-driven-approach&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#data-driven-approach&quot; aria-label=&quot;data driven approach permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Data-Driven Approach&lt;/h3&gt;
&lt;p&gt;카테고리에 대한 규칙을 정하는 것이 아니라..!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;카테고리에 해당하는 엄청 많이 데이터를 수집하고&lt;/li&gt;
&lt;li&gt;데이터들을 이용하여 ML classifier(=model) 학습&lt;/li&gt;
&lt;li&gt;학습된 classifier를 새로운 이미지로 테스트한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;train&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;images&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; labels&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# Maching learning !&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; model

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; test_images&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# Use model to predict labels&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; test_labels&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;🌟 지금부터 할 것 : 간단한 ML classifier부터 살펴보기&lt;/p&gt;
&lt;h2 id=&quot;nearest-neighbor&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nearest-neighbor&quot; aria-label=&quot;nearest neighbor permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Nearest Neighbor&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;python&quot;&gt;&lt;pre class=&quot;language-python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;train&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;images&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; labels&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# Memorize all data and labels&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; model

&lt;span class=&quot;token keyword&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;predict&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;model&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; test_images&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# Predict the label of the most similar training image&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; test_labels&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Train 단계 : 모든 데이터와 라벨을 기억&lt;/li&gt;
&lt;li&gt;Predict 단계 : 새로운 이미지와 기존 이미지(학습에 사용된 이미지)를 비교하여 가장 유사한 학습 이미지의 라벨을 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;예시로-보는-nearest-neighbor의-동작feat-cifar-10&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%88%EC%8B%9C%EB%A1%9C-%EB%B3%B4%EB%8A%94-nearest-neighbor%EC%9D%98-%EB%8F%99%EC%9E%91feat-cifar-10&quot; aria-label=&quot;예시로 보는 nearest neighbor의 동작feat cifar 10 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;예시로 보는 Nearest Neighbor의 동작(feat. CIFAR-10)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 835px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/860895ef0f63b8ff068e284153ed0c0b/f0685/04_cifar_10_nn.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACiUlEQVQoz42S7U+SYRTG+Ttra7MtN2Hay0ybQpq8CvoAPYAPykMQaqDDTJ2a+AIsJXnJHPS6chqJ5SdTgVXor5u+9a2z3Tvb2bXrXNd9Ls3h4SFbm5sUCnkqlQq1WpXTs1Oq1SoXFxc0Gg0uLy/539KUy2VisRj5/A7FYomPHz6Sy+X4cnDwD/Do6Igmdv/gC9++f//7yuWvfBPzihC1v7/P8fExmqbCUrHIYjzIxvoi6sQj5ufnWFpJsZbOEI9PUa/X2c7mSSaTTIb8hP0q4TGVaOQRst9LQHRVDVJ68xZN6d07UjPT9N66jtnai7FXi8Foxmo1Ig3qMZsMnJycsJ15wcLCnCBy4ZddeD3D+KQB+g16JPcAJrOBrHCmER/Ey2wWueU6UmcbCzMKLsWPQ3HQJ+lxe238+HHGm90Mmc0kieVZpqJBZp4FmH86TnTMTjwaZiKi8Pn9jiAUlStsEejXo9j1eHz3cDoM3Lfepd/UyWjAIg50Lg63RXJ9lch4GJ/XzYjsRg2FGVElQo+d+PweCqUSmsbvBrvFAua+DryWm8JuNw7ZiKVXh8OsQx0RhLUzUuktEqsb+EMRPF4XAcWLOjaKb3QUj0vGYh+m8EooPD8/Z2/vEwO2Pvru30ZxmoXNbgydrdy52YJk66ZWr7K2+pyV5UWC/oe43EMMDTtwmAZwDAu87KHLaCH3OtskPOPthz16TFacYwHCkSjaLgPGQRsusVUOBan//EV85omIVwT9vXa0bVfRtl6lXXuDVt01dB03aNNdIZ1ZRtMMcEVkKTY9yeLaOkvLS0zOzpJKppiLTZNIromAX5JOp0gkEigBGZdkQnHbeSg5MdseMOKxM2jtoZDf5g9ym2vKhYKASwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/860895ef0f63b8ff068e284153ed0c0b/8ac56/04_cifar_10_nn.webp 240w,
/static/860895ef0f63b8ff068e284153ed0c0b/d3be9/04_cifar_10_nn.webp 480w,
/static/860895ef0f63b8ff068e284153ed0c0b/2321d/04_cifar_10_nn.webp 835w&quot;
              sizes=&quot;(max-width: 835px) 100vw, 835px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/860895ef0f63b8ff068e284153ed0c0b/8ff5a/04_cifar_10_nn.png 240w,
/static/860895ef0f63b8ff068e284153ed0c0b/e85cb/04_cifar_10_nn.png 480w,
/static/860895ef0f63b8ff068e284153ed0c0b/f0685/04_cifar_10_nn.png 835w&quot;
            sizes=&quot;(max-width: 835px) 100vw, 835px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/860895ef0f63b8ff068e284153ed0c0b/f0685/04_cifar_10_nn.png&quot;
            alt=&quot;04_cifar_10_nn.PNG&quot;
            title=&quot;04_cifar_10_nn.PNG&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;CIFAR-10은 10개의 클래스(비행기, 자동차, 새, …)로 분류되는 50000장의 학습용 이미지와 10000장의 테스트 이미지로 구성되어 있다.&lt;/p&gt;
&lt;p&gt;오른편의 그림은 Nearest Neighbor를 이용하여 예측을 진행한 결과이다. 그림의 왼쪽열이 테스트 이미지이고 오른쪽 방향으로 학습 이미지를 테스트 이미지와 유사한 순으로 정렬한 것이다. 2번째 줄의 2번째까지는 테스트 이미지의 카테고리과 같은 개를 유사한 이미지로 출력하지만 그 이후로는 사슴 혹은 말과 같은 다른 카테고리의 요소들을 출력하고 있다.&lt;br&gt;
👉 Nearest Neighbor 알고리즘 적용시 학습 데이터셋에서 가장 가까운 샘플을 찾아냄&lt;br&gt;
👉 이게 성능면에서는 좋지 않지만, 지금 단계에서 예시로 보기에는 가치가 있다.&lt;/p&gt;
&lt;h3 id=&quot;nearest-neighbor-주요-안점&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nearest-neighbor-%EC%A3%BC%EC%9A%94-%EC%95%88%EC%A0%90&quot; aria-label=&quot;nearest neighbor 주요 안점 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Nearest Neighbor 주요 안점&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;두 이미지 쌍을 어떻게 비교할 것인가?&lt;/code&gt;&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;비교를 위하여 어떤 비교함수를 사용할 것인가?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;앞의 예제 L1 Distrance(Manhattan distance, 이하 L1 Dist)를 사용하였다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 815px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/ef916/05_NN_L1_dist.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABVUlEQVQoz31S2ZKCMBDk/3/N8nWXEjkMEAiXgJZyae/0WPK4qUolzNHd08HzfR/H4xGHwwFhGIKrbmq4qkTbNYiSCNf+KrEGr9cL/633+w2PRc/nE4/HA9u27Yl1XTHNk8Z552J+nmcsy6Lnui6Ypkn3l8zruhbnc4BTcMIwDNpEQCr89X9wDgOEUajA4zggzQxManAxF9jCwsiZ21xBFVADeY6qclKcou97aRyRyZ25LMtQulJPqioEJM8zIXS6G7FimZd9bI8FdV0ryxfwfr+j6zohqQSgQFkWiONIVMx6d06A2kaJCvkmKHvWbYVHJWS0AhjJaEwSlI0Eo3qqS5JEiT8EpYJehdRaK9/uk5fH9DgqC+hJIF6SmWxsIJgxBql4FscxZlHYtq3W2+KjLE5iFbCPfLuNGviqGcR4PgBjqkiUkpkPQOPpL+1gjif7hmHc/44/6y9clyixI+sAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/8ac56/05_NN_L1_dist.webp 240w,
/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/d3be9/05_NN_L1_dist.webp 480w,
/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/0ea8f/05_NN_L1_dist.webp 815w&quot;
              sizes=&quot;(max-width: 815px) 100vw, 815px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/8ff5a/05_NN_L1_dist.png 240w,
/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/e85cb/05_NN_L1_dist.png 480w,
/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/ef916/05_NN_L1_dist.png 815w&quot;
            sizes=&quot;(max-width: 815px) 100vw, 815px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/f3ddf7b6545f8bd5aa526c1e6a5916f5/ef916/05_NN_L1_dist.png&quot;
            alt=&quot;05_NN_L1_dist.PNG&quot;
            title=&quot;05_NN_L1_dist.PNG&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이는 두 이미지에서 같은 픽셀 위치에 있는 값끼리 뺀 후 절대값을 취하고 이후 모든 픽셀에 대한 수행결과를 더하는 것으로 계산된다. 단순한 동작이지만 &lt;u&gt;두 이미지간의 차이를 어떻게 측정할 것인가?&lt;/u&gt;에 대한 구체적 답변이 된다.&lt;/p&gt;
&lt;h3 id=&quot;nearest-neighbord의-한계점&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nearest-neighbord%EC%9D%98-%ED%95%9C%EA%B3%84%EC%A0%90&quot; aria-label=&quot;nearest neighbord의 한계점 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Nearest Neighbord의 한계점&lt;/h3&gt;
&lt;h4 id=&quot;예측-시간&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%88%EC%B8%A1-%EC%8B%9C%EA%B0%84&quot; aria-label=&quot;예측 시간 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;예측 시간&lt;/h4&gt;
&lt;p&gt;N개의 training set이 존재할 때, Nearest Neighbor의 &lt;code class=&quot;language-text&quot;&gt;Train/Predict 함수의 속도&lt;/code&gt;는 어떻게 될까?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Train O(1) : 단순 저장&lt;/li&gt;
&lt;li&gt;Predict O(N) : N개의 학습 이미지와 입력 이미지를 모두 비교해야하기 때문, 느림&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;모바일 혹은 브라우저 또는 다른 저전력 장치에서 실행되는 실제 서비스에서는 학습시간은 상대적으로 오래 걸려도 괜찮으나 예측 시간(test/prediction time)이 빠르기를 원한다. 하지만, Nearest Neighbor는 그 수요와 정반대로 동작한다.&lt;/p&gt;
&lt;h4 id=&quot;분류-성능의-한계&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B6%84%EB%A5%98-%EC%84%B1%EB%8A%A5%EC%9D%98-%ED%95%9C%EA%B3%84&quot; aria-label=&quot;분류 성능의 한계 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;분류 성능의 한계&lt;/h4&gt;
&lt;p&gt;Nearest Neighbor이 실제로 동작한 결과는 아래와 같은 결정 영역(decision regions)으로 그려낼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 518px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b9212a3cc4c716397e9c1251a45e0b6b/6b9fd/06_decision_regions.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.33333333333334%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADJUlEQVQ4y12S/VMaVxSG+f/bJsrHst8ginwpRoVgojaiFeR7ARUFNc1MOrWpmdqmtTNxL08Pi52m+eGZe+65e959z70n1GgoSqUpO6+Enf+oVBSbW76ss72iUobK/ie8msfbVxOud8fc7E2YlC8Yb4+42Z3w/uQdoRcvFOHwFF2fEo9P0bQpkeh8r8XnubgGZuKO1GGG4pFN127Ss1r0nBbtWJ1muEb92yPO8gNC5bIKil13ju3MxFQQOzOcObnjNdYHEQpdi5O1KsOERz/VYZDq0tEbtKJ1xqURoe3S3IUrRbY9xTSnLIQfJacCQcsCN/UH+WaSdRHL93SONl9z6vbx3FbgdCbque2g9VD15b0UgyGFmohomo9uzN0aOkG7idQD2Vqa1XaYQseimf2BYdLDS7QDoZlgz27NBW92hySNB07SQyxxGDPAscWd88jy7g52dowWhny1TKa3wFZthV6iRddsBi33E53Apec8CT7s7eBE7rlN5SnrlwyXDlhNfGJhEZJliatFksVT3GaEbMeg2HBpp2ucmv35PSY7Ad6/Dnmdo+HUuc1vwnqcP7NLpPWPZJZ+IfPmJel2hGI3zGiosdmOkenqbNWX2d/Z4qRwwCDR+3/L6lAGLL3Ao/UNvvuMz2su0xWd25LBSuc5du0ZpU6c+/MY+55Bpm3IXUYp9OPBAx1uVziTB+o5zSfBagl/NYafieMvR2WVVyiY3G1b5Do2iUaEXEsjLSQaUZabUVZaOpmWxWrHZLVrUN3YxzN6MjbnIvhmC9/5DpXTmW64+EVbXsDmumJR9ExaA5v7S4v7UZyDvslaW2N4ajM+M+kPLRpDk+O+xSD3PRcbY0L+/iYqtYgqWKi1OVPhdxmPv65kliYmjGWuxjEeL2P8fSHxRObpSn4cnMt6bfF5ZPCxczBvWRUMlLhTRUdiB/9APnrrSIHEEwt/bASrmhhMZ/sZs7Mn1JXc++wnP62L4N6GOHyOymqoTAwl96lawkS4EC5nyNllFDVaeIpjXyG50SL+j3kRvD5HeTXUsIkaNOb8LNwJv37JCerD8Ve5L/hQR/025B8fe9c0UoXLggAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/b9212a3cc4c716397e9c1251a45e0b6b/8ac56/06_decision_regions.webp 240w,
/static/b9212a3cc4c716397e9c1251a45e0b6b/d3be9/06_decision_regions.webp 480w,
/static/b9212a3cc4c716397e9c1251a45e0b6b/c29d2/06_decision_regions.webp 518w&quot;
              sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/b9212a3cc4c716397e9c1251a45e0b6b/8ff5a/06_decision_regions.png 240w,
/static/b9212a3cc4c716397e9c1251a45e0b6b/e85cb/06_decision_regions.png 480w,
/static/b9212a3cc4c716397e9c1251a45e0b6b/6b9fd/06_decision_regions.png 518w&quot;
            sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/b9212a3cc4c716397e9c1251a45e0b6b/6b9fd/06_decision_regions.png&quot;
            alt=&quot;06_decision_regions.png&quot;
            title=&quot;06_decision_regions.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;결정 영역에서 각 점은 학습 데이터이고 점의 색은 클래스(label)이 된다. 이 결정 영역의 색은 평면의 각 픽셀에 대해 훈련 데이터에서 가장 가까운 점을 찾아 해당 점의 클래스 레이블로 칠한 것이다. 이 경우 두가지 문제를 존재한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;초록색 영역 한 가운데에 노란색 섬이 존재.&lt;/li&gt;
&lt;li&gt;초록색 영역이 파란색 영역을 침범&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이는 특정한 노란색 점 혹은 초록색 점이 잡음(noise)이거나 잘못된 정보(spurioius)인 경우 발생할 수 있다. 이를 통하여 Nearest Neighbor는 여러 상황에 대하여 충분히 강건하지 못하다 말할 수 있다.&lt;/p&gt;
&lt;h2 id=&quot;k-nearest-neighborsknn&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#k-nearest-neighborsknn&quot; aria-label=&quot;k nearest neighborsknn permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;K-Nearest Neighbors(KNN)&lt;/h2&gt;
&lt;p&gt;위에서 언급된 Nearest Neighbor의 문제점을 해결하고자 KNN이 등장하게 된다. 이는 Distance metric를 이용하여 가까운 이웃을 &lt;code class=&quot;language-text&quot;&gt;K&lt;/code&gt;개만큼 찾고 이웃끼리 &lt;strong&gt;투표(voting)&lt;/strong&gt;를 하여 가장 많은 득표수를 올린 레이블로 예측하는 방식이다.&lt;/p&gt;
&lt;p&gt;+) 추가 : 투표 결과의 결정방식에도 다양한 방법이 존재하고 위에 언급된 가장 많은 득표수를 올린 레디블을 선택하는 방식을 Majority voting이라 한다.&lt;/p&gt;
&lt;h3 id=&quot;k&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#k&quot; aria-label=&quot;k permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;K&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 841px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2053105106d47ea7c1129c849706b076/bad1b/07_knn_decision_regions.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 36.25%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABwUlEQVQozzWRa28SARBF+d2a0NY29BGj1vLWpEmhEiFUDAixEIHa8tglIAosLMtiKGlSrFCggHTZPa5Wb3Lnw9w5yUzGAgYP0v/W2XyO1JaQmg1aza/Icg1FqXPZV1G6CrLaRlUVbkfX/5j//IMskqSTu1iRz4H4ZUS7JFGLV2mWOyROh8SiA2LxMaWzIY3TKvWPVdTWCKGIyWkU8tCvDOmdq/xoDrAEgxqP1sC2Bc/fJkj5goi2PD2hj9MD65uwvQ1v/BWElxkqjhzlixlWs7dmhReHLZLRKJ83PiG9q2FRPogknwq4j0q8Trt4Hw6QfVbgutim64sQ2u9wEMrgKDwhGghRtlcYCDUEe5qTQBdX1s2rix0yniRyRMJiJI7BaaWUspERN4gLW5zFvAzEFhzvMvfvESvuEM9vEs7s8U2so0k1cD2mk3YTKe1ycr5OqhJi/H2KZZWNo4Ud6E0vhuwC2Q3KAdqVyCp8xH3Uy6pl3i47uGvsM7kKYfQaaH4ni5wPQ/WgS3ZuW26MmWxuuPwF9wvuJjdMzM/p2hzDNPoSYz4zPWE4uDTzAaxmsBxjmPP8yRZjfprZfHoD2hRjOeE3PmTgcf7xBwEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/2053105106d47ea7c1129c849706b076/8ac56/07_knn_decision_regions.webp 240w,
/static/2053105106d47ea7c1129c849706b076/d3be9/07_knn_decision_regions.webp 480w,
/static/2053105106d47ea7c1129c849706b076/d02c2/07_knn_decision_regions.webp 841w&quot;
              sizes=&quot;(max-width: 841px) 100vw, 841px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/2053105106d47ea7c1129c849706b076/8ff5a/07_knn_decision_regions.png 240w,
/static/2053105106d47ea7c1129c849706b076/e85cb/07_knn_decision_regions.png 480w,
/static/2053105106d47ea7c1129c849706b076/bad1b/07_knn_decision_regions.png 841w&quot;
            sizes=&quot;(max-width: 841px) 100vw, 841px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/2053105106d47ea7c1129c849706b076/bad1b/07_knn_decision_regions.png&quot;
            alt=&quot;07_knn_decision_regions.png&quot;
            title=&quot;07_knn_decision_regions.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;KNN에서 사용자가 선택하게 되는 값으로 투표에 참여할 이웃의 수를 의미한다.&lt;/p&gt;
&lt;p&gt;대체로 K가 1보다 클때 결정경계가 부드러워지고 좋은 결과를 보이고 있다.&lt;/p&gt;
&lt;p&gt;K가 1보다 클 때, 라벨이 결정되지 못한 흰색영역이 등장하는데 이는 투표 결과에서 승자를 확정할 수 없는 지역을 의미한다. 이 부분을 추론 혹은 랜덤으로 값을 채울 수도 있지만, 현재는 간단한 예제를 보는 것이 목적이기 때문에 흰색으로 칠해 두었다.&lt;/p&gt;
&lt;h3 id=&quot;distance-metric&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#distance-metric&quot; aria-label=&quot;distance metric permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Distance Metric&lt;/h3&gt;
&lt;p&gt;KNN에서 사용자가 선택하게 되는 또 다른 값으로 &lt;u&gt;서로 다른 점들을 어떻게 비교할 것인가&lt;/u&gt;에 대한 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 784px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e21e90fde0e7222b0bbf7c136fd82c95/4971b/08_distance_metric.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.166666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABJElEQVQoz3WSC2+DMAyE+f//cF1bFggd4rEGmqTlefNFgqXVGskkhuPzYZN473G5XKC+FLTWyPMcdV1DKYWiKGCMAdc0TWjbNtwryxKn0wlN04Sc71RVhWVZkFhnww0KtM7xcTiEPE3TAL3dbk9AFmVkmQpxPp9xPB7/gLy0bRPCe4dMZ6ibGvf7fYet64pt0UDXm7DrQsu5R9d1VIXnCV4WnaxRvsG4x+B5nkPRWMdIYuEwDDDX61vYlhNG91fR/vQ2uHsCco3jiE4GUJoOhfRjlVbEoBjYy2eOUrzyI1RZyfmxF94dcmLOOXwL8FMGZK391x0LU0uXxrHPWw/x7JA7K7ci3noTg15bQ60XA9wXge/AuFesSkEMeTcYDo/O+JfEml/0prqDUsxDpAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/e21e90fde0e7222b0bbf7c136fd82c95/8ac56/08_distance_metric.webp 240w,
/static/e21e90fde0e7222b0bbf7c136fd82c95/d3be9/08_distance_metric.webp 480w,
/static/e21e90fde0e7222b0bbf7c136fd82c95/2a3bb/08_distance_metric.webp 784w&quot;
              sizes=&quot;(max-width: 784px) 100vw, 784px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/e21e90fde0e7222b0bbf7c136fd82c95/8ff5a/08_distance_metric.png 240w,
/static/e21e90fde0e7222b0bbf7c136fd82c95/e85cb/08_distance_metric.png 480w,
/static/e21e90fde0e7222b0bbf7c136fd82c95/4971b/08_distance_metric.png 784w&quot;
            sizes=&quot;(max-width: 784px) 100vw, 784px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/e21e90fde0e7222b0bbf7c136fd82c95/4971b/08_distance_metric.png&quot;
            alt=&quot;08_distance_metric.png&quot;
            title=&quot;08_distance_metric.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이전까지의 예제에서는 L1 Dist로 픽셀간 차이의 절대값의 합을 구하였다. 이번에 추가로 소개할 방법은 L2 Distance(Euclidean Distance, 이하 L2 Dist)로 두 거리의 차의 제곱합의 제곱근을 계산하는 것으로 구할 수 있다.&lt;/p&gt;
&lt;p&gt;위의 그림은 그래프는 원점에서 떨어져 있는 거리가 같은 점들을 모아 놓은 것이다. 강의에서는 거리 척도(L1, L2)에 따라 공간의 근본적인 기하하적 구조 자체가 서로 다르게 된다고 표현하고 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;L1 Dist은 좌표계에 영향을 받는다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;어떤 벡터가 있고 각 요소가 어떤 특별한 의미를 가질 때 더 유용할 수도 있다. 즉, 특정 벡터의 각각 요소들이 개별적인 의미를 가진다면(키/몸무게) L1 Dist가 더 유용할 &lt;em&gt;수도&lt;/em&gt; 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;그렇지 않고 각 요소간의 실직적인 의미를 잘 모르는 경우에는 L2가 더 유용할 &lt;em&gt;수도&lt;/em&gt; 있다.&lt;/li&gt;
&lt;li&gt;Problem-dependent 문제 의존적인 부분이기에 실제로 실험을 해보지 않는 이상 어떤것도 확신할 수는 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 806px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2a1543e163c1a8d41952c8abc94271c9/764be/09_L1_L2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABv0lEQVQoz1WSYU/aUBSG+fXLPm0sAyXTwGacibDgh8lMFvmgmbK4MTehpRUoUAYKpZRSKBRon11ARrzJyXlv8pw355x7Q67rUq83kCQZRVEpFIpUq1VUoVVVpd/vszyO46DrOuVyFVlWRJQoVyrIoq4k9GAwWHGhIAjExRCFj6LIpNVu0LNNrKGFMxqtoCWzybZt4HkO9tCg02kxGA4YTbZcaCla7TlabUpdX6DedzEbXayGiTeePjP0/QCt7lHR5txJDkq5j9U0MMsG0+Fk3SEsSKddXryF17uQOMvy8/Cc20gOW1+PG/hrw9ksIHYAL6MQFuy+YHPJM/KvrugW2xtDH/m0QOKdyW6ywdHVId+TWQp7eey/1jPDxWzBdbLEwV6PWFLj47cjrk++8if6g57SedrhcpTMJ9zEPl8uEmR+RTjJJbhJZRnp9n/DJRfMZwSp9zgfBHcZJ5OPkL6Jc5k6pScZW0M+H8NxmMndDmNpB1uKMP4dw7eaTzv013nuCS4OqTe4RcEWo4IVcRvGe1C2hsFDCx5reD2VaUeGYU38E03MOF51xuaVfZ+gWReshmfIgi2CLTj7XizYWrH/AIkIRb7lq7jNAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/2a1543e163c1a8d41952c8abc94271c9/8ac56/09_L1_L2.webp 240w,
/static/2a1543e163c1a8d41952c8abc94271c9/d3be9/09_L1_L2.webp 480w,
/static/2a1543e163c1a8d41952c8abc94271c9/e94a4/09_L1_L2.webp 806w&quot;
              sizes=&quot;(max-width: 806px) 100vw, 806px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/2a1543e163c1a8d41952c8abc94271c9/8ff5a/09_L1_L2.png 240w,
/static/2a1543e163c1a8d41952c8abc94271c9/e85cb/09_L1_L2.png 480w,
/static/2a1543e163c1a8d41952c8abc94271c9/764be/09_L1_L2.png 806w&quot;
            sizes=&quot;(max-width: 806px) 100vw, 806px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/2a1543e163c1a8d41952c8abc94271c9/764be/09_L1_L2.png&quot;
            alt=&quot;09_L1_L2.png&quot;
            title=&quot;09_L1_L2.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위 그림에서는 거리 척도에 따라 발생하는 기하하적 변화를 확인 가능하다. 경계의 모양이 L1 Dist일 때, L2 Dist일 때가 서로 다른 것을 볼 수 있다. L1은 좌표축의 영향을 받기 때문에 경계가 수직 혹은 수평에 가깝다. L2는 축의 영향을 받지 않기 때문에 더 자연스럽게 결정경계가 만들어진다.&lt;/p&gt;
&lt;p&gt;다양한 거리척도를 이용하면 KNN으로 다양한 데이터를 다룰 수 있다. 벡터/이미지/문장 등 데이터 사이에 거리를 구할 수 있는 척도가 존재한다면 KNN 적용이 모두 가능하다. 추가로 KNN은 아주 단순한 알고리즘이어서 새로운 문제를 접했을 때 가장 먼저 간단히 시도해볼만하다.&lt;/p&gt;
&lt;h3 id=&quot;하이퍼-파라미터&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%98%EC%9D%B4%ED%8D%BC-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0&quot; aria-label=&quot;하이퍼 파라미터 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;하이퍼 파라미터&lt;/h3&gt;
&lt;p&gt;이전 파트에서 다룬 K와 L1/L2 Dist와 같이 Train time에 학습되는 것이 아닌 학습전에 사용자가 선택하게 되는 값들을 &lt;strong&gt;하이퍼 파라미터&lt;/strong&gt;라고 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;어떻게 구할까?&lt;/strong&gt;&lt;br&gt;
다양한 하이퍼 파라미터 값을 시도해보고 가장 좋은 값을 찾는다.&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;다양한 하이퍼 파라미터를 시도해 보는 것&lt;/code&gt;과 &lt;code class=&quot;language-text&quot;&gt;가장 좋은 값을 선택하는 것&lt;/code&gt; 은 어떻게 해야 할까? 강의에서는 &lt;strong&gt;&lt;u&gt;4가지 아이디어&lt;/u&gt;&lt;/strong&gt;를 제시하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 813px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c1cf32024152ed84bd6e524b1449cd06/baaa6/11_dataset.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 72.91666666666666%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAADBklEQVQ4y22TiXLiSAxA+f+vma1MaifHMgQwAWzj2/ggJtjYQCAz5CDByYS3sslObdWuq1RSS221XkvdGPtjpsm0ltvbW+J4QiJ2mmas79b851uKT7Vh/QPyFcS3MJ1DmnOQcMN0TBzPrsV2LUbmCHfscrdZsVovuf+5YSPyY3vP9uWJbTZjq2psg4BtGLIdGfw0TMpZVp/XiFY+4cI7yvJTxB7nDtdel6Z6wZlyKnYHe6pjZibmnY9Z2FiFgy37tdTg7mV7TOg4To2aZdlvnSQJs9mslso3n89ZLpb1D4fVBpxAcJccBPNjseIwLzgkKYJDY6D2qbAtwa2wXd+pkStfEAf12rQN0uyW14+S3aJgJ4g716P0Q97DCaVu8SuZwccHDX8uSVLzUyTpzMDPbXpOm47Z4t/xKmYmGnZm4fkqRVfB+npCdnXFw2p1RA7CoEab53PpbEpRFMe1YOZ5Xl9B5c8lnktsX5Zsnx9IVzOenh8pZV2Weynu45iw2Wqi6SqqNkQbaTiujSrrkaHXuvLr4g+igLV0/W2/Y/u4ZpoHPEjn319fKXc7fr2/f1ZYuPiZLWgOlW1PR3xXL/E+fUex8UTHsYLd/4Jx/YXc7VAoPcyTE+btNg/LY9MaVQV+4OONPZlDm/6wX+t4EjEOx4RSWSS2LhUvl9LV9z1v5Y69zOT++Zm3lxdK0b8rjKKI6XTKzeSGdJZSjVEcx/U9Vq8nlOHN5A6jMJJ7Lo6jw/9/h8OBxrXdwYilc8kIxWhjxjrWRBf7ClO0Fmm0Rm3cxGAxUZjY5ywChZWqciPdTQR3ORzydH9/rPBb55Su0aJntfmz/ZXOqEVHkp1enaKIz7UuUXt/EHotBvol3+XVmLIn63Zxz87wzs9JxX5YH9994/vwgoHXQx1f0xxc0He7WGOF3vBMHoRCNG5j6d+II/EJzeXwEt1SWPT7xM0mE5HKftxsjgmvNBmb8YBRpNJS/0L1+8xvekzMMxZJdVBfkjRr9KHboyX7bW/AnaYxEeQbQV6J/Q/y38UJMdv1MZFuAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/c1cf32024152ed84bd6e524b1449cd06/8ac56/11_dataset.webp 240w,
/static/c1cf32024152ed84bd6e524b1449cd06/d3be9/11_dataset.webp 480w,
/static/c1cf32024152ed84bd6e524b1449cd06/90602/11_dataset.webp 813w&quot;
              sizes=&quot;(max-width: 813px) 100vw, 813px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/c1cf32024152ed84bd6e524b1449cd06/8ff5a/11_dataset.png 240w,
/static/c1cf32024152ed84bd6e524b1449cd06/e85cb/11_dataset.png 480w,
/static/c1cf32024152ed84bd6e524b1449cd06/baaa6/11_dataset.png 813w&quot;
            sizes=&quot;(max-width: 813px) 100vw, 813px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/c1cf32024152ed84bd6e524b1449cd06/baaa6/11_dataset.png&quot;
            alt=&quot;11_dataset.png&quot;
            title=&quot;11_dataset.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;전체 데이터셋에 대하여 분류기의 정확도와 성능을 가장 높게 만들어 주는 값을 탐색&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;끔찍한 방법🤒&lt;/li&gt;
&lt;li&gt;K=1이 가장 정확하게 training data를 분류하며, K가 1보다 클 때는 학습 데이터 중 몇 개를 잘못 분류할 수 있다. 하지만 학습데이터에 포함되어 있지 않았던 데이터에 대해서는 후자가 더 좋은 성능을 보일 수 있다.&lt;/li&gt;
&lt;li&gt;ML에서는 학습데이터를 얼마나 잘 맞추는지는 중요하지 않고, 학습시킨 분류기가 &lt;strong&gt;처음 보는 데이터를 얼마나 잘 분류&lt;/strong&gt;해내냐가 중요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;전체를 쪼개어 일부를 테스트 데이터로 사용한다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;학습 데이터를 사용하며 다양한 하이퍼 파라미터를 교체해가며 분류기를 학습시키고 테스트 데이터로 성능을 평가한다. 실험결과 테스트 데이터에서의 성능과 지표가 가장 좋은 하이퍼 파라미터를 선택한다.&lt;/li&gt;
&lt;li&gt;끔찍한 방법 2🤒&lt;/li&gt;
&lt;li&gt;ML에서는 처음 보는 데이터를 얼마나 잘 맞추냐가 중요한데 이 경우는 테스트 데이터를 얼마나 잘 맞추냐를 기준으로 하이퍼 파라미터가 선택되었다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;테스트셋이 처음보는 데이터를 대표하지 못하게 되었다.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;일반적인 방법 : 세개로 나눈다. trainig, validation, test&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;학습 데이터를 사용하며 다양한 하이퍼 파라미터를 교체해가며 분류기를 학습시키고 검증 데이터(validation)로 성능을 평가한다. 실험결과 validation 데이터에서의 성능과 지표가 가장 좋은 하이퍼 파라미터를 선택한다.&lt;/li&gt;
&lt;li&gt;모든 것이 확정되고 난 후, &lt;strong&gt;테스트 데이터로 “단 한번”의 검증을 수행&lt;/strong&gt;한다. 테스트 데이터가 처음보는 데이터의 대표가 되며 이 값이 논문이나 보고서에 들어가는 값이 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;교차 검증&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;데이터셋이 작을 때 사용한다.&lt;/li&gt;
&lt;li&gt;딥러닝에서는 많이 사용하지 않는다 → 큰 모델을 학습시킬때는 학습 자체가 계산량이 많아 이런 부가적인 연산이 필요한 작업을 거의 사용하지 않는다.&lt;/li&gt;
&lt;li&gt;테스트 데이터를 따로 빼고 나머지 데이터를 여러 부분으로 쪼갠다.&lt;/li&gt;
&lt;li&gt;쪼개진 부분을 번갈아가면서 validation set으로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;k의-변화에-따른-정확도-변화&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#k%EC%9D%98-%EB%B3%80%ED%99%94%EC%97%90-%EB%94%B0%EB%A5%B8-%EC%A0%95%ED%99%95%EB%8F%84-%EB%B3%80%ED%99%94&quot; aria-label=&quot;k의 변화에 따른 정확도 변화 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;K의 변화에 따른 정확도 변화&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 385px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/263ea8825955b976dc7ee9bbb5042f92/409e6/12_k.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 79.16666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAABk0lEQVQ4y6VU227DIAzt/3/V9rx9wCbtIrXTVC0JudAEwiUex5FpkrbSLkiEYOxjH9uwm6aJxnEk7/3FDCFQ27ZUFAUdj0eqqoqstTd1gbXDB0an04mVjTGrVWtNTdNQXdesNwwDn231YO+cmwFhBC8yQoj02wGWmDtsgI4NhvchefIc/k8nBqJkQAhAB+GyJ+upLDSDYojB9n8ry4AxRs6LRKg7S89PX6RUnw2WkcyrAF+JEAlH9cZxjvDj0ND93T6tbTacO8GtHGz/MyDAlFLZ4PVF0ePDJ72/1SlytERkI+R2SXOeZ+oZsCxLrrLk8LDvODpQdy6QNSEVzbHMu7jpgLOjFeVlUQCoqlR167JZjBNVZZ+MApkU9dB7dgSHZnCXVZamBAUUxCYwTAAJRbtxEFIqAFzX5hIQN0AAtTY3k7+UCWVjrkTYdV1uG2NGQiv9q7H7vl9dvb8MMMxXD5UGbXkMcIA9Lj7yCxn+RQeMIMeFQEGhj9bDGUcIZXnCsOIpgkz2UJSXBTKhh6gAKjKk6hsHKuaGjVgN+QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/263ea8825955b976dc7ee9bbb5042f92/8ac56/12_k.webp 240w,
/static/263ea8825955b976dc7ee9bbb5042f92/63fcf/12_k.webp 385w&quot;
              sizes=&quot;(max-width: 385px) 100vw, 385px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/263ea8825955b976dc7ee9bbb5042f92/8ff5a/12_k.png 240w,
/static/263ea8825955b976dc7ee9bbb5042f92/409e6/12_k.png 385w&quot;
            sizes=&quot;(max-width: 385px) 100vw, 385px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/263ea8825955b976dc7ee9bbb5042f92/409e6/12_k.png&quot;
            alt=&quot;12_k.png&quot;
            title=&quot;12_k.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x축 K, y축 분류 정확도를 의미한다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;이 그래프로 알 수 있는 것&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;K에 따른 분류 정확도 변화&lt;/li&gt;
&lt;li&gt;하이퍼 파라미터별 validation folds 별 성능 분산&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이 그래프가 주어졌을 때, &lt;strong&gt;validaiton set 성능이 최대인 하이퍼 파라미터를 선택&lt;/strong&gt;하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;knn은-이미지-분류에-잘-사용되지-않는다&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#knn%EC%9D%80-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EB%A5%98%EC%97%90-%EC%9E%98-%EC%82%AC%EC%9A%A9%EB%90%98%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4&quot; aria-label=&quot;knn은 이미지 분류에 잘 사용되지 않는다 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;KNN은 이미지 분류에 잘 사용되지 않는다&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;이유 1. &lt;u&gt;test time이 너무 느리다.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;이유 2. &lt;u&gt;L1/L2 Dist가 이미지간의 거리 측정에 적절하지 않다.&lt;/u&gt;&lt;/strong&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 703px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/bdc7002049d9b32c421044c360fd77db/242e2/13_same_dist.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.08333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABv0lEQVQY0x3R7U9SARTH8fuvtFVrtrZqqxdmNIogFoVwA2sVtWUht6f5wrWwslUYNSCeKhMH6AXEvyQGzdlcywhL0nu5qKsElvnq27UX58X5nHN+b47QbrfRNI3S+xJLS3W2+06ng6qqVMplGvqs1Wr9N0VRKFcqqLpt7/3Wq642KFU+sLK6xvrGBkI+n0eSbnLfc47h/gu8G08xM1NkwDugm4i//zwT6QyFQgHJJzF00Ynf6yGdyfAil8Po9eG6LNInXeVuLIkgyzKnzSeJ3rrCddMhQqEQ08Ui1hPHkRwW3N37SMQTyPqxzWIh7LvEbVsP8VicwJTMTpMJSb81mLu5NhpEmJzMIoou7vT1Yj3YRSQSIZfP4XSIOI0Gju3dpQfGkeUp7GftDLrtWPbv0QNjPM1m6eoVOeWys/vwAW4EXyKEI0mOHLURH/EzHQ0QCidIJFP0GM4wEXxC/lWAaPQtr9+kMFvdJB8PMz76kLGxNPfCSXYYHQw9G+FR9DmeBwEETWvqD9DY2vzDr7Um1epXFhaqzM3Ns1yv01j5Qa22yBfdZ2c/0lQVmsqybt+oLX5n/tNnFN3+bm2yuv6Tf6l8TejJTapsAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/bdc7002049d9b32c421044c360fd77db/8ac56/13_same_dist.webp 240w,
/static/bdc7002049d9b32c421044c360fd77db/d3be9/13_same_dist.webp 480w,
/static/bdc7002049d9b32c421044c360fd77db/b1708/13_same_dist.webp 703w&quot;
              sizes=&quot;(max-width: 703px) 100vw, 703px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/bdc7002049d9b32c421044c360fd77db/8ff5a/13_same_dist.png 240w,
/static/bdc7002049d9b32c421044c360fd77db/e85cb/13_same_dist.png 480w,
/static/bdc7002049d9b32c421044c360fd77db/242e2/13_same_dist.png 703w&quot;
            sizes=&quot;(max-width: 703px) 100vw, 703px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/bdc7002049d9b32c421044c360fd77db/242e2/13_same_dist.png&quot;
            alt=&quot;13_same_dist.png&quot;
            title=&quot;13_same_dist.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기존 이미지에 세가지 왜곡을 주었을 때, 왜곡된 이미지와 원본 사이의 L2 Dist는 모두 동일(저스틴이 L2가 같도록 섬세하게 생성함)&lt;/li&gt;
&lt;li&gt;L2 Dist는 perceptual distances를 측정하는데 적합하지 않다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;이유 3. &lt;u&gt;차원의 저주&lt;/u&gt;&lt;/strong&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 703px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/242e2/14_curse_of_dimensionality.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.083333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABiElEQVQoz3WSW0/bQBCF/f//SKEgBXhoEe0L6hMPoCJVkJs3e/U6a8NiWGMnsXM63jSRkOhIY4+8njPfGTsBRdM0sNYiz3NkWQalFLTWsRZCYL1eD69hu91+uBttwBiD90/Y9rtnyXBp2xZlWaIoCjr0sXbOkeiuoa5r7OMg2vdQmkPScO9rhDogvIWd4P+CsRQsTeGfPbpNdxDr+g4T+Yi7icBEcNzPBH4/3OLH9RWS1WoFznm0GEKITT3hLwsLqS10RqtYGtilRdd1UTB3Bn+mM0xZjjkfY8YfcH55itHlVyQ9oTtXoKqqwc/BlrICTApMucRCSXCdYvNPMFsqElIQBMHJdkqUJxcjnH3/iaQKL3itParQwL++Uf0Sm3SuIc0cc0FiqoTM2EHQEPFcjmmQIbEikn4Z/cLxxTckTdvgvQmUbcx23RAiiHCYvCfkWAyEmz0hCcmUCA0Ns0SrcXR2hNv7m88/ymD56bmg3VHSOhzt05Xuww5TbsgB/WLZguopxuPHePYXXi9YaUYzXNwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/8ac56/14_curse_of_dimensionality.webp 240w,
/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/d3be9/14_curse_of_dimensionality.webp 480w,
/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/b1708/14_curse_of_dimensionality.webp 703w&quot;
              sizes=&quot;(max-width: 703px) 100vw, 703px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/8ff5a/14_curse_of_dimensionality.png 240w,
/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/e85cb/14_curse_of_dimensionality.png 480w,
/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/242e2/14_curse_of_dimensionality.png 703w&quot;
            sizes=&quot;(max-width: 703px) 100vw, 703px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/241afddf0ddb1aa7c1bc6f06dc05a9ed/242e2/14_curse_of_dimensionality.png&quot;
            alt=&quot;14_curse_of_dimensionality.png&quot;
            title=&quot;14_curse_of_dimensionality.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KNN이 하는일 → 학습 데이터의 공간을 분할하는 것&lt;/li&gt;
&lt;li&gt;KNN이 잘 동작하려면 공간을 분류하기에 충분할 만큼 조밀한 학습 데이터가 필요하다.&lt;/li&gt;
&lt;li&gt;공간을 조밀하게 덮을려면 충분한 양의 학습 데이터 필요하며 차원이 증가함에 따라 더 많은 양의 데이터가 필요하게 된다. 고화질의 이미지일 수록 모든 공간을 매울만큼의 데이터를 구하기란 쉽지 않다.&lt;/li&gt;
&lt;li&gt;추가 자료 : &lt;a href=&quot;http://thesciencelife.com/archives/1001&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://thesciencelife.com/archives/1001&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;👏 &lt;strong&gt;Summary&lt;/strong&gt; 이미지 분류가 무엇인지 설명하기 위해 KNN을 예제로 들어보았다!&lt;/p&gt;
&lt;h2 id=&quot;linear-classification&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#linear-classification&quot; aria-label=&quot;linear classification permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;Linear Classification&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;간단하지만 아주 중요하며 neural networks(이하 NN)과 convolutional neural networks(이하 CNN)의 기반이 된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NN&lt;/strong&gt;는 레고 블럭처럼 여러 구성요소(component)를 끼워 맞춰 거대한 네트워크를 구성하는 것이라 볼 수 있다.&lt;/li&gt;
&lt;li&gt;이때 기본이 되는 &lt;strong&gt;NN&lt;/strong&gt;이 Linear Classifiation이라 할 수 있다. 이것을 이해함으로써 전체 NN이 어떤식으로 작동하는지 이해할 수 있을 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;parametric-approachfeat-cifar-10&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#parametric-approachfeat-cifar-10&quot; aria-label=&quot;parametric approachfeat cifar 10 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;Parametric Approach(feat. CIFAR-10)&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Linear classification은 &lt;u&gt;Parametric Model&lt;/u&gt;의 가장 단순한 형태이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 643px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4bf017b92784add47596484330ae7121/b5bda/15_parametric_approach.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.916666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABRklEQVQoz42Rz07CQBCH+5xGT15NMOENTDQxRg8eTDx5MLwAF/Vi4k3ACIpQAweBFujWVjGB/qPdz6WAIgnqJJPdmd2db+a3mtUHvQbDEcokSSKRctFZiiW/mXZ8csrB4Rn5/MWKK6rIUiaOY9XAiDAM8TyPKIoYqdj3A7T1TJa1zQ329nfVoY9t2ziOiy16VGoG4t4gKt0i3ge4joMQAtd1KZTuqNd1CsUi1acajWaTl1YbbXvniEx2i/NcLqVPaGEYEfg+nj+m37X5EBbReEwQBKn76qylHvf7FqZp0uv1vkfW9WeKilIuV+i0O5hGN21/bqPB2494lc311WxhYxhmSppQJ5rEqpv00mS9vAJLpDrKJPl6mMz2yUIuLbiSqEZD6SIrD8jqoypqTT/nr1+eUubUGSmddQiNBlKJL69v4NX5V8FP5WhfeubYmfAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/4bf017b92784add47596484330ae7121/8ac56/15_parametric_approach.webp 240w,
/static/4bf017b92784add47596484330ae7121/d3be9/15_parametric_approach.webp 480w,
/static/4bf017b92784add47596484330ae7121/b1337/15_parametric_approach.webp 643w&quot;
              sizes=&quot;(max-width: 643px) 100vw, 643px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/4bf017b92784add47596484330ae7121/8ff5a/15_parametric_approach.png 240w,
/static/4bf017b92784add47596484330ae7121/e85cb/15_parametric_approach.png 480w,
/static/4bf017b92784add47596484330ae7121/b5bda/15_parametric_approach.png 643w&quot;
            sizes=&quot;(max-width: 643px) 100vw, 643px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/4bf017b92784add47596484330ae7121/b5bda/15_parametric_approach.png&quot;
            alt=&quot;15_parametric_approach.png&quot;
            title=&quot;15_parametric_approach.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Parametric Model(x, W) =&gt; y&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x : 입력값&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;W : 가중치&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;y : CIFAR-10의 각 10개의 클래스 점수, 점수가 높을 수록 해당 클래스일 확률이 높다는 것을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;파라미터 등장! &lt;u&gt;&lt;strong&gt;학습 데이터의 정보를 요약하여 파라미터에 모아둔다.&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;test time에 training data가 더 이상 필요없어져 속도가 증가한다.&lt;/li&gt;
&lt;li&gt;딥러닝은 함수 &lt;strong&gt;&lt;em&gt;f&lt;/em&gt;&lt;/strong&gt; 의 구조를 적절하게 잘 설계하는 것이 주요 task라 볼 수 있다.&lt;/li&gt;
&lt;li&gt;어떤 식으로 가중치와 데이터를 조합할 것인가를 고민하는 과정이 다양한 NN 아키텍쳐를 설계하는 과정이 될 것이다.&lt;/li&gt;
&lt;li&gt;가장 쉬운 방법 : &lt;u&gt;가중치와 데이터를 그냥 곱하는 것&lt;/u&gt; → &lt;strong&gt;Linear classifier&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 820px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/dbd41e231cdb57d4b2beaa02d4f44a9a/9f82e/16_parametric_approach.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABpklEQVQoz42Sy24TUQyG5zlZsIEVbNhUfQGE4AHoEomuQGJZ0m4QTduECVKSadokjZQ0w6AmzeXM5DbJ3M75ejITRZXaIixZtmyf3/bvY4ACZKpq7WrxZoKxN2QgbhFTQTzzKP3oc/g9ovwrRK4UMlG6/qEaEw8cB8JwDaULlaTWrFI0i5R+m+TNPI5V4fDTV6qmTfXnFf2LJe45BC4PxPjy7YC9vQOOj81tMEwCGo5FvWcRLASUy3BWRP3tZfllRLySxFFCkiRIKYmiSFs94cudHZ69eM67929ZrQKEEEynM/p9h0rjD36pxaJUZDIWuIMBrudi29dY5xa1ixqVSplWq0Wz2WCsa4zdDx95/eYVn/f30+5Zt5goDBiLJdfWFYHmJdT8hJqX9SSj0ZB6va6B7RRsOBqlb9fTGvnTAkdHOfInJ2lBt2vj+/52/flssvEU/yNG7+ZGg3TpdNq02x3m8zlJHGcQ/hJyOW39FE5Jub2m3PjyXiy98lOdVBCg90Lpg6jLSzSx2Yzq8e+SpTTgY8k0rXlTVhVVKKBOz2Cx2HT69+p3+y+kdCmVFjwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/dbd41e231cdb57d4b2beaa02d4f44a9a/8ac56/16_parametric_approach.webp 240w,
/static/dbd41e231cdb57d4b2beaa02d4f44a9a/d3be9/16_parametric_approach.webp 480w,
/static/dbd41e231cdb57d4b2beaa02d4f44a9a/b1f58/16_parametric_approach.webp 820w&quot;
              sizes=&quot;(max-width: 820px) 100vw, 820px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/dbd41e231cdb57d4b2beaa02d4f44a9a/8ff5a/16_parametric_approach.png 240w,
/static/dbd41e231cdb57d4b2beaa02d4f44a9a/e85cb/16_parametric_approach.png 480w,
/static/dbd41e231cdb57d4b2beaa02d4f44a9a/9f82e/16_parametric_approach.png 820w&quot;
            sizes=&quot;(max-width: 820px) 100vw, 820px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/dbd41e231cdb57d4b2beaa02d4f44a9a/9f82e/16_parametric_approach.png&quot;
            alt=&quot;16_parametric_approach.png&quot;
            title=&quot;16_parametric_approach.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;f(x, W) = Wx&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;입력 이미지 32x32x3 → 평탄화 : 3072x1 dim → 10-class score&lt;/li&gt;
&lt;li&gt;(10x3072) * (3072x1) = (10x1) → W의 shape는 (10x3072)가 되어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;bias&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;class수과 같은 1차원 벡터&lt;/li&gt;
&lt;li&gt;데이터와 무관하게 특정 클래스에 우선권을 부가한다. 학습 이미지에 불균형이 있는 상황 등에 유용할 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;계산 예시
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 663px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4109c1f74f8dc320ec8ec1acbaeaf26e/0786c/17_parametric_approach.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABn0lEQVQoz4WR627aQBSE/f5v0Fa0UpU+QaVUakVIgJK2KQRxieO2lItZMMZeg23wDfNl7YQ2Un90pNE5OruaPTujHY9HDocDSZIQRRFCCMR8zmIhWKje8zzSNC1Z3D0Ripo/8e9cUyd/xOI4Zh8pximR4j5W8yQjzXJc1yUMQ054FP0XmrfxME0Te7VSW2REUhDM7/DFPbulga/6yJlhWRbrtUO2kwQLQynmSFNHTodE+z2Beqz4qfah+onK2Tsqb17zezzGmxrMvlUx21eI2wbmTQ1L77CybbzNFt8yWfauOWQZs06Tyfc6/naLfLJG+/j5hhdvz3hVeclkOmX0w6JxMeRL06BV16lXB3TbI2wlOBcmhj5R8yGrla3qgEatp3ze4LhOaZ3W7uu8Pz+ndllFuh5ja0Sjf0n9tsZXvcVV94Luzw5SSsIgRKxNrgdNskNGq9eg3qmp7WTpcZGBVqQVq0CSJC1N3YQSe7vk7lefvtHF8gTOdl2m7fs+uzjEkgvyPC/r0hUqSOVhEDx++Xlaz3tPejgqhBMKgYL/wwONcVYFxvdV/QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/4109c1f74f8dc320ec8ec1acbaeaf26e/8ac56/17_parametric_approach.webp 240w,
/static/4109c1f74f8dc320ec8ec1acbaeaf26e/d3be9/17_parametric_approach.webp 480w,
/static/4109c1f74f8dc320ec8ec1acbaeaf26e/c294c/17_parametric_approach.webp 663w&quot;
              sizes=&quot;(max-width: 663px) 100vw, 663px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/4109c1f74f8dc320ec8ec1acbaeaf26e/8ff5a/17_parametric_approach.png 240w,
/static/4109c1f74f8dc320ec8ec1acbaeaf26e/e85cb/17_parametric_approach.png 480w,
/static/4109c1f74f8dc320ec8ec1acbaeaf26e/0786c/17_parametric_approach.png 663w&quot;
            sizes=&quot;(max-width: 663px) 100vw, 663px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/4109c1f74f8dc320ec8ec1acbaeaf26e/0786c/17_parametric_approach.png&quot;
            alt=&quot;17_parametric_approach.png&quot;
            title=&quot;17_parametric_approach.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(0.2 × 56)+(-0.5 x 231)+(0.1 × 24)+(2 × 2)+1.1 = -96.8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;linear classifier는 각 클래스를 구분시켜 주는 선형의 경계를 그어주는 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;linear-classification이-직면할-수-있는-문제&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#linear-classification%EC%9D%B4-%EC%A7%81%EB%A9%B4%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EB%AC%B8%EC%A0%9C&quot; aria-label=&quot;linear classification이 직면할 수 있는 문제 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;linear classification&lt;/strong&gt;이 직면할 수 있는 문제&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 636px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2fc702216507eaa8131b6707fb69682f/9be90/18_parametric_approach.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB6klEQVQoz0WRC3OiQBCE+f//6Opyl7pSIy8R8ZUYTYweRuUhoAgI+N1IvMpWbdXu9HbPTrcyXRakaUaR5+T3fb1euS3Xq5m+F5yznMuloCxL7hDeocSZF8THTOqXpnbjKZvnBf5+jx/4xHFMFEX8X3l0JFxvCYOASLCiKL6x5MTm5Z395yenNP0W9J0R3m4nggGxiAW+T13XzYN4uWJnWngbVxodvkh3LPV8PMNi+7FquFX1VVeMjxDjPWChW6SWxcEwqLOMOkk49eVu27x1TcJej0LOpTSUjqSDAbHgm06H2NApHZtiNkPRVyfUdcpS7VHpGoWmUZ/P1GHAUTMYvkQ8DgLMSUikmlTbT6gurOwFi5FL8ueRwBqxtN8opImivXqoc49ZRydRNQ5dlfKccfV3jPQXVGfP5uEBzVrT1+eU7loES1aqzVIfsvv5Qz5jY1tLEplC8Vpt/FaLrjakPdvTnm5ILhKlt2V8Exz5/P39iGq7DESwEsGbx8d2i+TpqcFiOTd3sUzJdV3GVLEGczT3jP6RcKzEXUm9Gfk55Jft0xv7JJpJLSPfBC/CmY53DLVn4XfJxPvccVAyUc3kq874DctNsVYxp1LSPBykboovNtt7YLlpUO69JulcAomcqWA9Go1+n3wy4R9l85XcHx0lJwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/2fc702216507eaa8131b6707fb69682f/8ac56/18_parametric_approach.webp 240w,
/static/2fc702216507eaa8131b6707fb69682f/d3be9/18_parametric_approach.webp 480w,
/static/2fc702216507eaa8131b6707fb69682f/6d494/18_parametric_approach.webp 636w&quot;
              sizes=&quot;(max-width: 636px) 100vw, 636px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/2fc702216507eaa8131b6707fb69682f/8ff5a/18_parametric_approach.png 240w,
/static/2fc702216507eaa8131b6707fb69682f/e85cb/18_parametric_approach.png 480w,
/static/2fc702216507eaa8131b6707fb69682f/9be90/18_parametric_approach.png 636w&quot;
            sizes=&quot;(max-width: 636px) 100vw, 636px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/2fc702216507eaa8131b6707fb69682f/9be90/18_parametric_approach.png&quot;
            alt=&quot;18_parametric_approach.png&quot;
            title=&quot;18_parametric_approach.png&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;
다양한 사례들이지만 결국 선분 하나로 데이터를 분류할 수 없다는 문제로 정리도니다.&lt;/p&gt;
&lt;h3 id=&quot;summary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#summary&quot; aria-label=&quot;summary permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;summary&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;linear classifier의 수식 → 단순 행렬과 벡터의 곱&lt;/li&gt;
&lt;li&gt;가중치 행렬 w를 학습시키고 나면 새로운 학습 데이터에도 스코어를 매길 수 있다.&lt;/li&gt;
&lt;li&gt;W를 어떻게 구할 수 있는지는 배우지는 않았다. → 다음 언제가에 계속..&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;</content:encoded></item><item><title><![CDATA[pg-promise basic usage]]></title><description><![CDATA[pg-promise 기본 사용법]]></description><link>https://suheeeee-dev.netlify.app/posts/2021-03-21/pg-promise-basic-usage</link><guid isPermaLink="false">https://suheeeee-dev.netlify.app/posts/2021-03-21/pg-promise-basic-usage</guid><pubDate>Sun, 21 Mar 2021 16:26:32 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f59ec9edbe39b4b1ffaab3debe32a4ec/2bef9/banner.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 31.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9UlEQVQY02NoPKn5v/mM+v+m0xpgjMyGYZCajstK/2Nnev9X9m76rxlc818jqBaM1QProOw6MGZANhCZbrug+r/1vOr/lnNq/9svqvyvOaz7Xzey4r+afz3YEBXfRrhhEBqLgSDcclbtf+0R3f8pi1z/Z6+x+1+01fx/5kqH//FzvP571sf9dy5L+W9XkPHfpSL5v1ZoNX4Xgg0EuqjmkN7/hLme/9OWOv8v2mLxP3G++3/b/EywIfaFGWDsVJpK2EBkuvWcKti13dcU/odPDPyv4NHyX9Wv4b8q0Muq/g3EexnOPgVxbfkeI0jYBdSjRAauSAEAo6QJ4t1yTX0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/f59ec9edbe39b4b1ffaab3debe32a4ec/8ac56/banner.webp 240w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d3be9/banner.webp 480w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/e46b2/banner.webp 960w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/a9a89/banner.webp 1024w&quot;
              sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/f59ec9edbe39b4b1ffaab3debe32a4ec/8ff5a/banner.png 240w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/e85cb/banner.png 480w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d9199/banner.png 960w,
/static/f59ec9edbe39b4b1ffaab3debe32a4ec/2bef9/banner.png 1024w&quot;
            sizes=&quot;(max-width: 960px) 100vw, 960px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/f59ec9edbe39b4b1ffaab3debe32a4ec/d9199/banner.png&quot;
            alt=&quot;banner&quot;
            title=&quot;banner&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ref. v 9.3.3&lt;br&gt;
&lt;a href=&quot;https://www.npmjs.com/package/pg-promise&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://www.npmjs.com/package/pg-promise&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;http://vitaly-t.github.io/pg-promise/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://vitaly-t.github.io/pg-promise/&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://github.com/vitaly-t/pg-promise/wiki&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://github.com/vitaly-t/pg-promise/wiki&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;기본 사용법 + 쓸 거 같은 기능 정리 + 예시&lt;/p&gt;
&lt;br&gt;
&lt;h2 id=&quot;init&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#init&quot; aria-label=&quot;init permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;init&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pgp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;pg-promise&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  promiseLib&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; promise
  &lt;span class=&quot;token comment&quot;&gt;// Overrides the default (ES6 Promise) promise library for its internal use.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Database connection details&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// more details : https://github.com/vitaly-t/pg-promise/wiki/Connection-Syntax&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cn &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  host&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;localhost&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
  port&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  database&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;products&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  user&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;user-name&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;    
  password&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;user-password&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; db &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;pgp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// const db = pgp(&apos;postgres://john:pass123@localhost:5432/products&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id=&quot;database-function-for-running-query&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#database-function-for-running-query&quot; aria-label=&quot;database function for running query permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Database function for running query&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://vitaly-t.github.io/pg-promise/Database.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://vitaly-t.github.io/pg-promise/Database.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;any&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#any&quot; aria-label=&quot;any permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;any&lt;/h3&gt;
&lt;p&gt;0 이상의 결과(row)를 반환하는 쿼리&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT * FROM users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//[ { name : &quot;aaa&quot;, email : &quot;aaa@email.address&quot; }, &lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//  { name : &quot;bbb&quot;, email : &quot;bbb@email.address&quot; }, ... ]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;each&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#each&quot; aria-label=&quot;each permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;each&lt;/h3&gt;
&lt;p&gt;any의 결과로 얻은 각 row에 대해 함수를 실행  → (rows). forEach()&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; index &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT * FROM users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;row&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  row&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; row&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; index&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;token comment&quot;&gt;// [{ name : &quot;aaa1&quot;, ... }, { name : &quot;bbb2&quot;, ... }, ... ]&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;func&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#func&quot; aria-label=&quot;func permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;func&lt;/h3&gt;
&lt;p&gt;SELECT * FROM funcName(values)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// function defined in postgresql&lt;/span&gt;
create or replace &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
returns Date &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; $cur$
  begin
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  end&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
$cur$ language plpgsql&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// node&lt;/span&gt;
db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;foo&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// [ { &quot;foo&quot;: &quot;2019-10-03T15:00:00.000Z&quot; } ]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;map&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#map&quot; aria-label=&quot;map permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;map&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Creates a new array with the results of calling a provided function on every element in ther array of rows resolved by method any.&lt;/code&gt;라고 명시되어 then의 parm이 map 내부 return 값들의 배열이 되기를 기대하였으나, any의 결과를 return 한다.&lt;br&gt;
api 문서와 다른 예시를 보았을 때 단독 사용보다는 task/tx와 함께 사용되는 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://vitaly-t.github.io/pg-promise/Database.html#map/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://vitaly-t.github.io/pg-promise/Database.html#map/&lt;/a&gt;
&lt;a href=&quot;https://codeday.me/ko/qa/20190406/259937.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;https://codeday.me/ko/qa/20190406/259937.html&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT * FROM users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;row&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; row&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// expect&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//    [ &quot;aaa&quot;, &quot;bbb&quot;, ... ]&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// result&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//    [ { name : &quot;aaa&quot;, email : &quot;aaa@email.address&quot; }, &lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//      { name : &quot;bbb&quot;, email : &quot;bbb@email.address&quot; }, ... ]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;multi&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#multi&quot; aria-label=&quot;multi permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;multi&lt;/h3&gt;
&lt;p&gt;return data를 가지도 별다른 행위를 하지 않는 복수의 쿼리를 실행하며, 쿼리들의 수행 결과들의 배열을 반환한다. BEGIN/COMMIT를 사용하지 않는 이상 쿼리들은 단일 트랜젝션으로 수행된다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;multi&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT * FROM users;SELECT * FROM class&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&gt; users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;users&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&gt; class&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// &gt;&gt;&gt;&gt;&gt; users&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// [ { name : &quot;aaa&quot;, email : &quot;aaa@email.address&quot; }, &lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//   { name : &quot;bbb&quot;, email : &quot;bbb@email.address&quot; }, ... ]&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// &gt;&gt;&gt;&gt;&gt; class&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// [ { name : &quot;c1&quot;, room : &quot;1&quot; }, &lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//   { name : &quot;c2&quot;, room : &quot;2&quot; }, ... ]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// error&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;none&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#none&quot; aria-label=&quot;none permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;none&lt;/h3&gt;
&lt;p&gt;return 되는 데이터가 존재하지 않는 쿼리. return이 존재한다면 reject 된다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;UPDATE users SET last_locations=$1 WHERE email=$2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;value&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; email&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt; success&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;one&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#one&quot; aria-label=&quot;one permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;one&lt;/h3&gt;
&lt;p&gt;단 하나의 row를 return 하는 쿼리. return이 0 또는 2 이상이면 reject 된다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;one&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT count(*) FROM Users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;count&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;count&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// integer&lt;/span&gt;
   &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;query&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#query&quot; aria-label=&quot;query permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;query&lt;/h3&gt;
&lt;p&gt;query(query, values, qrm), qrm(&lt;a href=&quot;http://vitaly-t.github.io/pg-promise/global.html#queryResult&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Query Result Mask&lt;/a&gt;)의 입력값 형태의 리턴을 가지는 쿼리를 실행.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT name FROM Users where name=\&apos;xxx\&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;queryResult&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;one &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;queryResult&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;none&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;result&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result&quot; aria-label=&quot;result permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;result&lt;/h3&gt;
&lt;p&gt;return data에 대한 어떠한 기댓값이 없는 쿼리. 성공 시 &lt;a href=&quot;https://node-postgres.com/api/result&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Result&lt;/a&gt;를 결과값으로 가진다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;DELETE FROM users WHERE name=\&apos;kkk\&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// Result {&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   command: &apos;DELETE&apos;,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   rowCount: 1,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   oid: null,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   rows: [],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   fields: [],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   _parsers: [],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   _types:&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   TypeOverrides {&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//     _types:&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//     { getTypeParser: [Function: getTypeParser],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//       setTypeParser: [Function: setTypeParser],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//       arrayParser: [Object],&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//       builtins: [Object] },&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//     text: {},&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//     binary: {} },&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   RowCtor: null,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   rowAsArray: false,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   duration: 5 }&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;task&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#task&quot; aria-label=&quot;task permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;task&lt;/h3&gt;
&lt;p&gt;Executes a callback &lt;u&gt;&lt;em&gt;function&lt;/em&gt;&lt;/u&gt; with automatically managed connection.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;task&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT email FROM congress_participants WHERE congress_id=\&apos;C1\&apos; and role = \&apos;visitor\&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;row&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; row&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;rows&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; str &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;token string&quot;&gt;&apos;(\&apos;&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; rows&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;\&apos;, \&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;\&apos;)&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT * from users where email IN &apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; str&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;tx&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#tx&quot; aria-label=&quot;tx permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;tx&lt;/h3&gt;
&lt;p&gt;Executes a callback &lt;u&gt;&lt;em&gt;function as a &lt;strong&gt;transaction&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;, with automatically managed connection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it executes &lt;strong&gt;BEGIN&lt;/strong&gt; just before invoking the callback function&lt;/li&gt;
&lt;li&gt;it executes &lt;strong&gt;COMMIT&lt;/strong&gt;, if the callback didn’t throw any error or return a rejected promise&lt;/li&gt;
&lt;li&gt;it executes &lt;strong&gt;ROLLBACK&lt;/strong&gt;, if the callback did throw an error or return a rejected promise&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;tx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;one&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;INSERT INTO users(email, name) VALUES($1, $2) RETURNING email&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;nnn@email.address&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;nnn&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;email&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;one&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;INSERT INTO Users(name, age) VALUES($1, $2) RETURNING id&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Mike&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;INSERT INTO congress_participants(email, congress_id, role) VALUES($1, $2, $3)&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;user&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;eamil&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;C1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;visitor&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt; success&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;&gt;&gt;&gt;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;queryresulterror&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#queryresulterror&quot; aria-label=&quot;queryresulterror permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;QueryResultError&lt;/h3&gt;
&lt;p&gt;함수가 reject 될 시 발생하는 에러. api 문서에서 각 함수의 하단부에 어떤 값으로 리턴될지 명시되어 있다.&lt;br&gt;
&lt;a href=&quot;http://vitaly-t.github.io/pg-promise/errors.QueryResultError.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;http://vitaly-t.github.io/pg-promise/errors.QueryResultError.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 576px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.58333333333334%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+klEQVQoz41TaW/aQBDlhwcpfGgDlHCUQwar5jAJTWhTc8QO3vUNBGxX4h+9zmxaqKpW6ofnmVnvvp3jbcF2HCyXK0jpIc/z/0KWZUjT9K8oJEkC3/cRhiGiKEIUx2RjxMpGCnGcgPcx+N/hcFCkfyIlFPggE3qeDyEkWU9BEi6xTxW8+UII7Hc7pMcjUiI+Hl7VBUeKs4wyZGYmtG0b2+1WHeJsmcz3A5WpIiQEQQBJazKMCYmC49IldMZ1xVvJ/AmIgAlNc4r+YABd1zF/fECv24HW6ynbaX8kv4t2T0NdN1HpT1DRxqhqI9w9zM99VYSn0wk7KqNYLKJ4dYXhxMS99YzmYISOMUVDM9D5NIE2ukOdfN0gkvGQYGBmjjH/PMN3HtY5w4AzdGAMh+j3+7DWNr44Hiw3wLcXHyuyC/YdiSeK1y71e5fiOcmxTjLY2xxye7hkyA3l/rRaLZTLZSqxi0e6tdmo47ZWQ/nmBvXbGj5Uq6hWKsq+q9RQbbbxvtZAVzewP6YXQgbLo1QqoXR9jdlXC/dOiOGTg5G1gWm9YEJga9DadLGBcDeQwsVyYcGTAvlP6ShCnqZlLbBarZQsWDIbQdOT3tt0wwgbV8Kl2KV1jydNMmIlDGiI/Dh+aVPJZr/fq7EL2sTlqxdxFmyqbP4bsn+Ak/sBe7m1BR49I9QAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/5e42fef760c29ad72b714e733eb498bd/8ac56/query_result_error.webp 240w,
/static/5e42fef760c29ad72b714e733eb498bd/d3be9/query_result_error.webp 480w,
/static/5e42fef760c29ad72b714e733eb498bd/6264f/query_result_error.webp 576w&quot;
              sizes=&quot;(max-width: 576px) 100vw, 576px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/5e42fef760c29ad72b714e733eb498bd/8ff5a/query_result_error.png 240w,
/static/5e42fef760c29ad72b714e733eb498bd/e85cb/query_result_error.png 480w,
/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png 576w&quot;
            sizes=&quot;(max-width: 576px) 100vw, 576px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/5e42fef760c29ad72b714e733eb498bd/533c1/query_result_error.png&quot;
            alt=&quot;query-result-error&quot;
            title=&quot;query-result-error&quot;
            loading=&quot;lazy&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;db&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;one&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;SELECT name FROM Users where name=\&apos;xxx\&apos;&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;count&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;then&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;count&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  
&lt;span class=&quot;token comment&quot;&gt;// QueryResultError {&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    code: queryResultErrorCode.noData&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    message: &quot;No data returned from the query.&quot;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    received: 0&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//    query: &quot;SELECT name FROM Users where name=&apos;xxx&apos;&quot;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// }&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h3 id=&quot;return-되는-row에-따른-함수-정리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#return-%EB%90%98%EB%8A%94-row%EC%97%90-%EB%94%B0%EB%A5%B8-%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC&quot; aria-label=&quot;return 되는 row에 따른 함수 정리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;return 되는 row에 따른 함수 정리&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;left&quot;&gt;function&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;expects number of rows(n)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;any(=manyOrNone)&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;0 or more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;none&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;one&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;oneOrNone&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;1 or null(none)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot;&gt;many&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;1 or more&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id=&quot;helpers&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#helpers&quot; aria-label=&quot;helpers permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Helpers&lt;/h2&gt;
&lt;h3 id=&quot;update&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#update&quot; aria-label=&quot;update permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;update&lt;/h3&gt;
&lt;p&gt;update(data, columns, table, options), 하나 혹은 배열 객체에 대한 UPDATE 쿼리를 생성한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; data_single &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; email&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;aaa@email.address&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last_location&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;S1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;helpers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data_single&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;last_location&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos; WHERE email = &apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; data_single&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;email&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// UPDATE &apos;data_single&apos; SET &apos;last_location&apos; = &apos;S1&apos; WHERE email = &apos;aaa@email.address&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; data_multi &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; email&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;aaa@email.address&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last_location&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;S1&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
			        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; email&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;bbb@email.address&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; last_location&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;S2&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;helpers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;?email&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;last_location&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;users&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos; WHERE v.email = t.email&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// UPDATE &apos;data_multi&apos; AS t SET &apos;last_location&apos; = v.&apos;last_location&apos; &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   FROM (VALUES(&apos;aaa@email.address&apos;,&apos;S1&apos;),(&apos;bbb@email.address&apos;,&apos;S2&apos;))&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   AS v(&apos;email&apos;, &apos;last_location&apos;)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//   WHERE v.email = t.email&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br&gt;
&lt;h4 id=&quot;values&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#values&quot; aria-label=&quot;values permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;values&lt;/h4&gt;
&lt;p&gt;values(data, columns), 쿼리에서 사용할 수 있는 쉼표로 구분된 문자열을 생성한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;javascript&quot;&gt;&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; dataSingle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;val&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; msg&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;hello&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; dataMulti &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;val&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; msg&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;hello&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;val&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;456&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; msg&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;world!&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;helpers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dataSingle&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//(123,&apos;hello&apos;)&lt;/span&gt;

pgp&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;helpers&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;values&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;dataMulti&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;val&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;msg&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//(123,&apos;hello&apos;),(456,&apos;world!&apos;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item></channel></rss>