<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>수민 님의 블로그</title>
    <link>https://powderblue0.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 09:36:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>powderblue0</managingEditor>
    <image>
      <title>수민 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7700060/attach/4439150435ca41ec823daf8039d9e0af</url>
      <link>https://powderblue0.tistory.com</link>
    </image>
    <item>
      <title>[재료역학] 못의 체결 원리와 전단류의 계산</title>
      <link>https://powderblue0.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부재란 무엇인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체결제의 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전단공식(Shear Formula)의 유도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 전단류를 따져야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전단류의 계산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;못의 체결간격 결정&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;부재란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 사용할 부재(Member)라는 용어에 대해 먼저 한 번 짚고 넘어가도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부재(Member) 혹은 건축부재(Structural Member)라 함은 &lt;b&gt;건설 구조물의 뼈대를 이루는 데 중요한 요소가 되는 여러가지 재료&lt;/b&gt;를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건축에서 주로 쓰이는 용어인데, 이러한 부재에 작용하는 힘(응력)과 변형(변형량) 간의 관계를 기술하는 재료역학(혹은 고체역학)에서도 부재(Member)라는 표현을 두루 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재료역학에서 배우는 대표적인 부재로는 기둥(Column), 보(Beam), 축(Shaft)등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1774884805285&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;건설자재 / 건설부재&quot; data-og-description=&quot;건설자재와 건설부재는 건설 분야에서자주 사용되는 용어로, 서로 다른 개념을 나타냅니다.&amp;nbsp;▣ 건설자재&amp;nbsp;건축 구조물을 짓기 위해 사용하는 재료를 뜻합니다. 예를&amp;nbsp;들어,&amp;nbsp;철근,&amp;nbsp;시멘트,&amp;nbsp;벽&quot; data-og-host=&quot;archigov19.tistory.com&quot; data-og-source-url=&quot;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&quot; data-og-url=&quot;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d4XnFu/dJMb82eM6GR/rsW7m9idJNQFYHwZKsRF81/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311,https://scrap.kakaocdn.net/dn/dT9nG1/dJMb84XYO39/8MZY4zxOKSBw3gtvkPofxk/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311,https://scrap.kakaocdn.net/dn/p6L0d/dJMb85WTpvp/SsHhiogqmYMl1EOmJEyk91/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311&quot;&gt;&lt;a href=&quot;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://archigov19.tistory.com/entry/%EA%B1%B4%EC%84%A4%EC%9E%90%EC%9E%AC-%EA%B1%B4%EC%84%A4%EB%B6%80%EC%9E%AC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d4XnFu/dJMb82eM6GR/rsW7m9idJNQFYHwZKsRF81/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311,https://scrap.kakaocdn.net/dn/dT9nG1/dJMb84XYO39/8MZY4zxOKSBw3gtvkPofxk/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311,https://scrap.kakaocdn.net/dn/p6L0d/dJMb85WTpvp/SsHhiogqmYMl1EOmJEyk91/img.png?width=560&amp;amp;height=311&amp;amp;face=0_0_560_311');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;건설자재 / 건설부재&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;건설자재와 건설부재는 건설 분야에서자주 사용되는 용어로, 서로 다른 개념을 나타냅니다.&amp;nbsp;▣ 건설자재&amp;nbsp;건축 구조물을 짓기 위해 사용하는 재료를 뜻합니다. 예를&amp;nbsp;들어,&amp;nbsp;철근,&amp;nbsp;시멘트,&amp;nbsp;벽&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;archigov19.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 이는 건설자재와는 다른 용어이니 혼동하지 말도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;체결제의 종류&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부재의 체결과 이에 이어지는 조립부재에서의 전단류의 경우 재료역학 7장(횡전단)에서 다루는 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전단류 등에 대해 알아보기 전에, 부재 체결(締結)이 어떤 것인지에 대해 먼저 이해하는 것이 좋다. (체결은 난 처음에 體結인 줄 알았는데 締結이다..여튼)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;체결제는 크게는 연속 체결제와 간헐 체결제로 나누어 볼 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;연속 체결제: 접착제, 본드, 용접 등 &lt;br /&gt;간헐 체결제: 못, 볼트와 너트 등&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pnekx/dJMcaibJK2P/5H2IWrA9XcJkOifugWHlR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pnekx/dJMcaibJK2P/5H2IWrA9XcJkOifugWHlR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pnekx/dJMcaibJK2P/5H2IWrA9XcJkOifugWHlR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpnekx%2FdJMcaibJK2P%2F5H2IWrA9XcJkOifugWHlR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;730&quot; height=&quot;188&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 우리에게 가장 친숙한 간헐 체결제인 못의 경우를 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;못의 경우 '&lt;b&gt;위에서 아래로 내려박는'&lt;/b&gt; 체결제이기에 언뜻 생각하면 전단이 아니라 수직력과 관련된 것으로 착각할 수도 있다. 그러나 못을 나무 사이에 끼워넣는 해우이의 목적은 따지자면 수직력이 아니라 전단력을 견디기 위함이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqGT3Z/dJMcaiW2QD3/doBY6nRT3nTCiXPCZ3cKFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqGT3Z/dJMcaiW2QD3/doBY6nRT3nTCiXPCZ3cKFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqGT3Z/dJMcaiW2QD3/doBY6nRT3nTCiXPCZ3cKFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqGT3Z%2FdJMcaiW2QD3%2FdoBY6nRT3nTCiXPCZ3cKFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;746&quot; height=&quot;229&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;부재의 체결은 항상 견딜 수 있는 전단력의 크기와 관련이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해보면 간단한데, 두 물체를 연결할 때 염두에 두어야 하는 것은 이 두 물체가 눌리는 것(= 수직력에 대한 저항)이 아닌 이 두 물체가 미끄러져서 분리되는 (= 전단력에 대한 저항)이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG7fOV/dJMcacJmm4x/UZf70s3KQ6TABXRdmzkCEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG7fOV/dJMcacJmm4x/UZf70s3KQ6TABXRdmzkCEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG7fOV/dJMcacJmm4x/UZf70s3KQ6TABXRdmzkCEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG7fOV%2FdJMcacJmm4x%2FUZf70s3KQ6TABXRdmzkCEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;331&quot; height=&quot;331&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니까 못을 박는 방향인 위아래로의 변형에 대한 저항이 아니라, 못을 박는 방향의 수직한 방향으로의 변형에 대한 저항을 고려해야 한다는 것이다. (= 부재 사이의 미끄러짐을 방지, 즉 &lt;b&gt;전단하중에의 저항&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 내용이지만 언뜻 보면 헷갈릴 수도 있는 부분이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전단공식(Shear Formula)의 유도&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부재의 체결은 견딜 수 있는 전단력의 크기와 관련이 있다고 했으니, 여기서 전단 공식(Shear Formula)의 유도 과정을 다시 한 번 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 응력공식의 유도는 평형(Equilibrium) 개념에서부터 시작한다. 즉, &quot;어떠한 물체가 평형이면 그 물체를 작게 자른 물체도 평형&quot;이라는 단순한 개념에서부터 모든 응력 공식은 시작되는 것이다. 이러한 과정을 통해 유도된 전단공식은 다음과 같다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WtCja/dJMcacP6yXV/8JFXfWp2q5CeKaOSs4KhR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WtCja/dJMcacP6yXV/8JFXfWp2q5CeKaOSs4KhR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WtCja/dJMcacP6yXV/8JFXfWp2q5CeKaOSs4KhR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWtCja%2FdJMcacP6yXV%2F8JFXfWp2q5CeKaOSs4KhR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;93&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 1차 단면보멘트인 Q의 계산에 집중할 필요가 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니, 더 정확히는 Q의 계산에 쓰이는 A'의 선정에 집중할 필요가 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mb6mM/dJMcaaY2GqB/mZnxMwh4BsmZcg5zCQAKz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mb6mM/dJMcaaY2GqB/mZnxMwh4BsmZcg5zCQAKz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mb6mM/dJMcaaY2GqB/mZnxMwh4BsmZcg5zCQAKz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmb6mM%2FdJMcaaY2GqB%2FmZnxMwh4BsmZcg5zCQAKz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;88&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 A'는 다음과 같은 기준으로 결정한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;전단에 의한 힘이 A'의 면적에 작용하는 굽힘응력의 차이를 메꾼다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZdR8Z/dJMcahRoNSM/ywmOvbjkKi8UmdfPA1cNLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZdR8Z/dJMcahRoNSM/ywmOvbjkKi8UmdfPA1cNLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZdR8Z/dJMcahRoNSM/ywmOvbjkKi8UmdfPA1cNLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZdR8Z%2FdJMcahRoNSM%2FywmOvbjkKi8UmdfPA1cNLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;695&quot; height=&quot;278&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1479&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFxxNH/dJMcaadHfop/NO6THxaIUAJeOToKSZKuM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFxxNH/dJMcaadHfop/NO6THxaIUAJeOToKSZKuM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFxxNH/dJMcaadHfop/NO6THxaIUAJeOToKSZKuM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFxxNH%2FdJMcaadHfop%2FNO6THxaIUAJeOToKSZKuM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;659&quot; height=&quot;249&quot; data-origin-width=&quot;1479&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 그림에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A'를 결정할 때는 전단응력이 작용하고 있는, 그러니까 전단류가 흐르는 연분홍색 면을 보는 게 아니라, 굽힘응력(sigma들)의 차이가 발생하고 있는 빨간색 단면을 보아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;왜 전단류를 따져야 하는가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 못에 대한 이야기로 돌아가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까도 설명했듯, 못은 간헐 체결제에 해당한다. 접착제처럼 부재에 넓게 바르는 체결제는 단위 면적당 힘 (= 전단응력)을 따져야겠지만 못과 같은 간헐 체결제의 경우에는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단위 길이당 가해지는 힘&lt;/b&gt;이 더 중요해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 단위길이에 대해 정의한 전단류를 계산하게 된다. 공식은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmbhVh/dJMcaa5Xey9/2znMkdJLZzxl0576H1Euu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmbhVh/dJMcaa5Xey9/2znMkdJLZzxl0576H1Euu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmbhVh/dJMcaa5Xey9/2znMkdJLZzxl0576H1Euu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmbhVh%2FdJMcaa5Xey9%2F2znMkdJLZzxl0576H1Euu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;104&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하자면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;연속 체결제 &amp;rarr; 단위 면적당 전단력 (=전단응력)이 중요함 &lt;br /&gt;&lt;br /&gt;간헐 체결제 &amp;rarr; 단위 길이당 전단력 (=전단류)이 중요함&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전단류의 계산&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 상황을 보면서 전단류를 계산해보자. 다음은 일정 간격 당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 못 하나로 두 개의 부재를 결합하는 상황과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 못 두 개로 세 개의 부재를 결합하는 상황이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhPjcc/dJMcabX5GxP/kg20DSBiplKfkUetDQapuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhPjcc/dJMcabX5GxP/kg20DSBiplKfkUetDQapuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhPjcc/dJMcabX5GxP/kg20DSBiplKfkUetDQapuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhPjcc%2FdJMcabX5GxP%2Fkg20DSBiplKfkUetDQapuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;728&quot; height=&quot;294&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 그림과 같은 서로 다른 두 상황에서의 부재 체결 상황을 생각해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) 두 부재를 연결하는 경우&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2140&quot; data-origin-height=&quot;757&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J9J7Z/dJMcafMYXcP/z6UFJbNlkpREO2ZOgiSwTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J9J7Z/dJMcafMYXcP/z6UFJbNlkpREO2ZOgiSwTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J9J7Z/dJMcafMYXcP/z6UFJbNlkpREO2ZOgiSwTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9J7Z%2FdJMcafMYXcP%2Fz6UFJbNlkpREO2ZOgiSwTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2140&quot; height=&quot;757&quot; data-origin-width=&quot;2140&quot; data-origin-height=&quot;757&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 상황의 경우에는 두 개의 부재를 단순 체결하는 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 전단응력(혹은 전단류도 마찬가지)는 두 부재가 맞닿아 있는, 연분홍색 영역에 작용하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어찌 보면 당연하지만 이게 헷갈릴 때는, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;두 부재가 &amp;lsquo;어떤 상황에서 분리가 되는지&amp;rsquo;&lt;/span&gt;를 따져보면 된다. 연결된 두 물체가 외부 힘을 이기지 못하고 분리가 되는 순간은, 두 물체가 전단력에 의해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;양옆으로 &amp;lsquo;미끄러지는&amp;rsquo; 순간&lt;/span&gt;이며 이때 색칠한 연분홍색 영역이 뜯어지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상황 파악을 했다면 그 다음으로는, 실제로 전단류를 계산하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2SgPb/dJMcac3JxGI/RgFf3DbLqfTYksaQdf5PKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2SgPb/dJMcac3JxGI/RgFf3DbLqfTYksaQdf5PKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2SgPb/dJMcac3JxGI/RgFf3DbLqfTYksaQdf5PKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2SgPb%2FdJMcac3JxGI%2FRgFf3DbLqfTYksaQdf5PKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;104&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다음 공식을 통해 전단류를 실제로 계산할 때는 빨간색으로 색칠된 영역을 A&amp;rsquo;로 선정해 주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 한 번 말하지만 A&amp;rsquo;의 선정 기준은 항상&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&quot;전단에 의한 힘이 A&amp;rsquo; 면적에 작용하는 굽힘응력의 차이를 메꾼다.&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연분홍색 영역에 작용하는 전단응력(전단류도 마찬가지)은 A&amp;rsquo; 영역에 작용하는 굽힘응력 차이를 메꾸는 역할을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 I를 계산할 떄는 회색 영역을 기준으로 해야 한다. I는 단순히 &lt;b&gt;단면의 형상을 나타내는 값&lt;/b&gt;이므로 전체 단면을 기준으로 계산한다. 계산 과정의 경우 평행축 정리를 사용해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0EHrB/dJMcacQdYoF/Kv1KTHSY1dO5lSDJ2R4KC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0EHrB/dJMcacQdYoF/Kv1KTHSY1dO5lSDJ2R4KC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0EHrB/dJMcacQdYoF/Kv1KTHSY1dO5lSDJ2R4KC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0EHrB%2FdJMcacQdYoF%2FKv1KTHSY1dO5lSDJ2R4KC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;121&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) 세 부재를 연결하는 경우&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 물체를 연결하는 상황에서도 마찬가지로 진행해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2127&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oDxyK/dJMcaiCS9OK/qGwEISHhwNv3OYJ8ZRDVek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oDxyK/dJMcaiCS9OK/qGwEISHhwNv3OYJ8ZRDVek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oDxyK/dJMcaiCS9OK/qGwEISHhwNv3OYJ8ZRDVek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoDxyK%2FdJMcaiCS9OK%2FqGwEISHhwNv3OYJ8ZRDVek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2127&quot; height=&quot;650&quot; data-origin-width=&quot;2127&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이 경우에는 맨 위의 부재를 중심으로 두 개의 부재를 추가적으로 연결하고 있기 때문에, 위의 부재를 기준으로 양옆에 동일한 크기의 전단류가 동일한 방향으로 흐르게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우에는 A&amp;rsquo;와 I를 그림과 같이 적절히 선정 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mqq5m/dJMcaju1uIU/4jDMw2P5Kzy2zSKAbbxpDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mqq5m/dJMcaju1uIU/4jDMw2P5Kzy2zSKAbbxpDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mqq5m/dJMcaju1uIU/4jDMw2P5Kzy2zSKAbbxpDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMqq5m%2FdJMcaju1uIU%2F4jDMw2P5Kzy2zSKAbbxpDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;104&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 값을 구해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;못의 체결 간격 결정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 7장에서 요구하는 문제해결 능력의 경우, 못의 전단강도(혹은 힘 F_fail)이 주어졌을 때 주어진 상황에서 못의 체결 간격을 결정하는 것에 초점이 맞춰져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmB9f2/dJMcacWYDgX/xT1sD2tVA6UkmLaPtfZa91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmB9f2/dJMcacWYDgX/xT1sD2tVA6UkmLaPtfZa91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmB9f2/dJMcacWYDgX/xT1sD2tVA6UkmLaPtfZa91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmB9f2%2FdJMcacWYDgX%2FxT1sD2tVA6UkmLaPtfZa91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;329&quot; height=&quot;72&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 못의 체결 간격을 결정하는 경우에는 다음과 같은 공식을 쓴다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAPpWm/dJMb990iEU2/55bab2Jo1ehAwsLxTzKEk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAPpWm/dJMb990iEU2/55bab2Jo1ehAwsLxTzKEk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAPpWm/dJMb990iEU2/55bab2Jo1ehAwsLxTzKEk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAPpWm%2FdJMb990iEU2%2F55bab2Jo1ehAwsLxTzKEk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;659&quot; height=&quot;91&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;못이 최대로 견딜 수 있는 전단력, 즉 전단 강도인 F_fail이 알려져 있을 떄, 필요로 하는 체결 간격 s_req는 다음과 같이 계산한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상.&lt;/p&gt;</description>
      <category>4대 역학</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/25</guid>
      <comments>https://powderblue0.tistory.com/25#entry25comment</comments>
      <pubDate>Thu, 9 Apr 2026 12:41:56 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] DL 용어정리(아키텍처, 파이프라인 등)</title>
      <link>https://powderblue0.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/21&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771919121611&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[딥러닝] ANN 모델링의 주요 개념&quot; data-og-description=&quot;지난 글:https://powderblue0.tistory.com/20 [딥러닝] ANN(인공신경망)의 원리이번 글에서는 딥러닝의 기본이 되는 ANN(Artificial Nerual Network, 인공신경망)의 원리에 대해 설명합니다. 사실 직관적으로 이해하&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/21&quot; data-og-url=&quot;https://powderblue0.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pDJKR/dJMb8Z3ofSp/IeYNAIsVGHjuNZnMDARFk1/img.png?width=800&amp;amp;height=370&amp;amp;face=0_0_800_370,https://scrap.kakaocdn.net/dn/N1dsc/dJMb8WMmx9U/RMIkOyrKMwTevGbJkMynK1/img.png?width=800&amp;amp;height=370&amp;amp;face=0_0_800_370,https://scrap.kakaocdn.net/dn/9Il9F/dJMb8XR2AWm/jS6QArmIALBNKg5lSpMBEK/img.png?width=1995&amp;amp;height=1033&amp;amp;face=0_0_1995_1033&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pDJKR/dJMb8Z3ofSp/IeYNAIsVGHjuNZnMDARFk1/img.png?width=800&amp;amp;height=370&amp;amp;face=0_0_800_370,https://scrap.kakaocdn.net/dn/N1dsc/dJMb8WMmx9U/RMIkOyrKMwTevGbJkMynK1/img.png?width=800&amp;amp;height=370&amp;amp;face=0_0_800_370,https://scrap.kakaocdn.net/dn/9Il9F/dJMb8XR2AWm/jS6QArmIALBNKg5lSpMBEK/img.png?width=1995&amp;amp;height=1033&amp;amp;face=0_0_1995_1033');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[딥러닝] ANN 모델링의 주요 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 글:https://powderblue0.tistory.com/20 [딥러닝] ANN(인공신경망)의 원리이번 글에서는 딥러닝의 기본이 되는 ANN(Artificial Nerual Network, 인공신경망)의 원리에 대해 설명합니다. 사실 직관적으로 이해하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 딥러닝에서 많이 나오는 용어들에 대해 정리해두려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 이것저것 공부하면서 자주 보이는 용어들은 많은데 정작 그 의미에 대해 잘 모르거나, 모르는 채로 사용하는 용어들이 많다고 느껴서(일단나부터^^) 공부하는 김에 정리해둠..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 글이 매우 길고 말이 매우 많으니 주의하세요 ^^7&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;0. 신경망이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 아키텍쳐란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 파이프라인이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 모델 학습 구조 관련&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 3.1. Multi-modal이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 3.2. Multi-task란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 3.3. End-to-End 모델이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;0. 신경망이란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mAU4d/dJMcajnGQ7d/alfNErKOZfAYy9yYCNwfIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mAU4d/dJMcajnGQ7d/alfNErKOZfAYy9yYCNwfIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mAU4d/dJMcajnGQ7d/alfNErKOZfAYy9yYCNwfIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmAU4d%2FdJMcajnGQ7d%2FalfNErKOZfAYy9yYCNwfIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;593&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 딥러닝을 배우기 시작할 때, 초반에는 ANN, DNN, CNN, RNN 같이 ONN(뭐시기 뭐시기 NN)으로 끝나는 개념들을 차례대로 접하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 말하는 NN은 Neural Network의 약자로, 번역하면 '신경망'입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기서 말하는 &lt;b&gt;신경망(Neural Network)&lt;/b&gt;는 기본적으로 인간 뇌 구조의 모방입니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;인간의 뇌 구조를 모방&lt;/span&gt;한 모든 모델을 신경망 모델이라고 부른다고 봐도 될 것 같습니다. 그러니까 CNN, RNN 같이 NN으로 끝나는 애들은 다 신경망의 종류에 해당합니다. 하나하나 설명해보자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1) ANN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ANN은 Artificial Neural Network의 약자로, 직역하면 &amp;lsquo;인공신경망&amp;rsquo;입니다. ANN이라고 해서 신경망이랑 뭐가 다른 게 아니라, 요즘에는 사실상 Neural Network와 같은 의미로 쓰입니다. 특정한 모델을 일컫는 용어가 아니라, 신경망을 사용한 기계학습 그 자체를 의미하는 단어로 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2) DNN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DNN은 Deep Neural Network의 약자로, 직역하면 &amp;lsquo;깊은 인공신경망&amp;rsquo;입니다. ANN이 중간층이 1~2개인 신경망을 뜻한다면, DNN은 중간층이 그보다 많은 모든 모델을 일컫는 단어입니다. (그러니까, 그냥 '깊어진' 인공신경망)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 대부분의 모델은 복잡한 학습을 위해 중간층을 많이많이 넣습니다. 그러니까 대부분의 모델이 DNN이라고 봐도 무방합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3) CNN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN은 Convolutional Neural Network의 약자입니다. 직역하면 &amp;lsquo;합성곱 신경망&amp;rsquo;입니다. (CNN 및 컨볼루션 관련 내용은 기회가 된다면 나중에 자세히 정리해두려고 해요...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 Fully Connected Layer(FC Layer)와는 아예 다른 방식(합성곱 연산)으로 데이터를 인식하는 방식을 사용합니다. 이미지 인식에서 자주 쓰이고, 가장 큰 특징은 &lt;b&gt;특징 추출(특징 인식)&lt;/b&gt;이라고 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4) RNN&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RNN은 Recurrent Neural Network의 약자로, 직역하면 &amp;lsquo;순환 신경망&amp;rsquo; 정도가 되겠습니다. 말 그대로 순환적 학습을 하고, 시계열 데이터 같은 순차적 데이터 처리에 적합합니다. 핵심은 &amp;lsquo;이전 출력과 다음 입력 간의 연결&amp;rsquo; 정도로 말할 수 있을 것 같네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 설명은 위키독스 참고하면 좋을 것 같습니다. 위키독스 최고에용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wikidocs.net/240098&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikidocs.net/240098&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771919993643&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;2-3-2 신경망의 종류와 구조&quot; data-og-description=&quot;### **2.3.2 신경망의 종류와 구조** 딥러닝은 다양한 신경망 구조를 통해 복잡한 문제를 해결합니다. 각 신경망은 특정한 유형의 데이터와 문제에 적합하도록 설계되어 있습&amp;hellip;&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/240098&quot; data-og-url=&quot;https://wikidocs.net/240098&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0qq88/dJMb8SpEVGP/85IenA614VRHAGq4aFCE2K/img.png?width=308&amp;amp;height=400&amp;amp;face=0_0_308_400&quot;&gt;&lt;a href=&quot;https://wikidocs.net/240098&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/240098&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0qq88/dJMb8SpEVGP/85IenA614VRHAGq4aFCE2K/img.png?width=308&amp;amp;height=400&amp;amp;face=0_0_308_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;2-3-2 신경망의 종류와 구조&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;### **2.3.2 신경망의 종류와 구조** 딥러닝은 다양한 신경망 구조를 통해 복잡한 문제를 해결합니다. 각 신경망은 특정한 유형의 데이터와 문제에 적합하도록 설계되어 있습&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 아키텍처(Architecture)란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍쳐(Architecture)라는 말을 영어로 직역하면 '건축 양식' 쯤 되겠지만, 딥러닝에서 쓰이는 아키텍처라는 말은 '설계도'에 가깝습니다. 즉, 모델의 전체적인 구조를 나타내는 정보를 아키텍처라 합니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;'자동차의 설계도 같은 거'&lt;/span&gt; 라고&amp;nbsp; 생각하면 편할 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 아키텍처는 보통 다음과 같은 정보를 포함합니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;몇 개의 레이어로 구성되어 있는지&lt;/li&gt;
&lt;li&gt;그 사이의 연결은 어떻게 되어 있는지&lt;/li&gt;
&lt;li&gt;어디서 어떤 활성화 함수들이 사용되는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 모델의 설계도를 뜻하는 용어이기 때문에, 동일한 아키텍쳐('설계도'에 해당)로 다양한 모델(설계도를 보고 완성한 '완성품'에 해당)들이 있을 수 있습니다. 자세한 내용은 아래 링크에 잘 정리되어 있습니다. (진짜 잘 정리되어 있음)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@jolabokaflod/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80%EB%94%A5%EB%9F%AC%EB%8B%9D&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@jolabokaflod/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80%EB%94%A5%EB%9F%AC%EB%8B%9D&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771920226281&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;아키텍처란?&quot; data-og-description=&quot;딥러닝에서 아키텍처는 기본적으로 뉴럴 네트워크의 구조나 디자인을 의미합니다. 아키텍처는 어떻게 레이어가 배열되는지, 뉴런들이 어떻게 연결되는지, 어떤 활성화 함수를 사용하는지 등을&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@jolabokaflod/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80%EB%94%A5%EB%9F%AC%EB%8B%9D&quot; data-og-url=&quot;https://velog.io/@jolabokaflod/아키텍처란딥러닝&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tlJcy/dJMb8TB6AeE/YVwNKCar42Y7Sca3oNLgx0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://velog.io/@jolabokaflod/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80%EB%94%A5%EB%9F%AC%EB%8B%9D&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@jolabokaflod/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80%EB%94%A5%EB%9F%AC%EB%8B%9D&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tlJcy/dJMb8TB6AeE/YVwNKCar42Y7Sca3oNLgx0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;아키텍처란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;딥러닝에서 아키텍처는 기본적으로 뉴럴 네트워크의 구조나 디자인을 의미합니다. 아키텍처는 어떻게 레이어가 배열되는지, 뉴런들이 어떻게 연결되는지, 어떤 활성화 함수를 사용하는지 등을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작게는 위에서 설명한 CNN, RNN 등도 딥러닝 아키텍처로 보기도 하고, 여기서 발전한 유명한 아키텍처들도 많습니다. 예를 들어 CNN에서 ResNet, VGG 등의 아키텍처가, RNN에서 LSTM이나 GRU 등의 아키텍처가 발전해왔어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 Transformer의 아키텍처는 다음과 같이 생겼습니다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;933&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m940C/dJMcaiI61xX/8v4yYoKekcpvpqdbPqcN70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m940C/dJMcaiI61xX/8v4yYoKekcpvpqdbPqcN70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m940C/dJMcaiI61xX/8v4yYoKekcpvpqdbPqcN70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm940C%2FdJMcaiI61xX%2F8v4yYoKekcpvpqdbPqcN70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;762&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;933&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Transformer라는 건 &lt;i&gt;Attention is All You Need&lt;/i&gt; (놀랍게도 이게 논문 제목입니다...간지) 에서 제시된 모델로 RNN 없이 Attention이라는 기법(Mechanism)을 이용해 시퀀스를 처리하는 그런 모델인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 Transformer가 뭔지는 중요한 게 아니고, 핵심은 Transformer 같은 복잡한 모델들조차 각자의 아키텍처를 가진다는 점입니다. (마치 설계도가 없는 자동차가 존재하지 않듯이 말이죠)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 특정 모델의 구조 등을 설득하기 위해서는 아키텍처의 시각화가 필수입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로, 아키텍처 내에서 반복되는 구조가 있을 경우 그 단위를 &lt;b&gt;블록(Block)&lt;/b&gt;이라고 부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 파이프라인(Pipeline)이란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍처가 모델의 정적인 구조에 집중한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프라인(Pipeline)이라는 건 모델의 동적인 흐름의 구조를 설명할 때 쓰이는 용어입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6xYla/dJMcaf6IKyk/ikJR75aFu94qir06dJKvo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6xYla/dJMcaf6IKyk/ikJR75aFu94qir06dJKvo0/img.png&quot; data-alt=&quot;사진은 Hidden Techinical Debt in Machine Learning Systems 라는 논문에 나오는 사진으로, 기계학습 과정에서 거쳐야 하는 여러 과정들의 중요성을 설명합니다 어쩌구&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6xYla/dJMcaf6IKyk/ikJR75aFu94qir06dJKvo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6xYla%2FdJMcaf6IKyk%2FikJR75aFu94qir06dJKvo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;474&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진은 Hidden Techinical Debt in Machine Learning Systems 라는 논문에 나오는 사진으로, 기계학습 과정에서 거쳐야 하는 여러 과정들의 중요성을 설명합니다 어쩌구&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 기계학습(머신러닝)은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;데이터 구축 &amp;rarr; 전처리 &amp;rarr; 모델 학습 &amp;rarr; 결과 도출&lt;/i&gt; 의 과정을 거치는데, 이 과정이 논리적으로 진행되었으며 성능이 좋다고 설득하기 위해서는 이러한 과정들이 어떻게 진행되었는지를 보여줄(시각화) 필요성이 존재합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정 설명을 위해 정리해야 하는 것이 파이프라인입니다. (ML의 Pipeline 혹은 워크플로우, Workflow라고도 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771921185842&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;머신 러닝 파이프라인이란 무엇인가요? | IBM&quot; data-og-description=&quot;머신 러닝(ML) 파이프라인은 ML 모델 작업 프로세스를 간소화하기 위해 상호 연결된 일련의 데이터 처리 및 모델링 단계입니다.&quot; data-og-host=&quot;www.ibm.com&quot; data-og-source-url=&quot;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&quot; data-og-url=&quot;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4FNAu/dJMb8WewB8u/0ywJ88XGZ5uNLA6k0ao0YK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot;&gt;&lt;a href=&quot;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ibm.com/kr-ko/think/topics/machine-learning-pipeline&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4FNAu/dJMb8WewB8u/0ywJ88XGZ5uNLA6k0ao0YK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;머신 러닝 파이프라인이란 무엇인가요? | IBM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;머신 러닝(ML) 파이프라인은 ML 모델 작업 프로세스를 간소화하기 위해 상호 연결된 일련의 데이터 처리 및 모델링 단계입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ibm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니까 작은 프로젝트를 진행할 때도 그냥 내 맘대로 막 진행할 것이 아니라, 파이프라인을 정리해서 내가 무엇을 어떻게 처리하였는지를 보여줘야, 설득이 가능하다는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 파이프라인을 관리하는(기업 등에서 이를 영구적으로 관리하기 위함, 매 업데이트마다 파이프라인을 다시 짤 수는 없으니까요.) 시스템인 MLOps라는 것도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/what-is/mlops/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://aws.amazon.com/ko/what-is/mlops/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771921264275&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MLOps란?- 기계 학습 운영 설명 - AWS&quot; data-og-description=&quot;MLOps란 무엇이며 기업에서 기계 학습을 운영하는 방법과 이유, AWS에서 MLOps를 사용하는 방법에 대해 알아봅니다.&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/what-is/mlops/&quot; data-og-url=&quot;https://aws.amazon.com/ko/what-is/mlops/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/what-is/mlops/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/what-is/mlops/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MLOps란?- 기계 학습 운영 설명 - AWS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MLOps란 무엇이며 기업에서 기계 학습을 운영하는 방법과 이유, AWS에서 MLOps를 사용하는 방법에 대해 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 모델 학습 구조 관련&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.1. Multi-modal이란 무엇인가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multi-modal 이란 모델이 받는 Input 형태와 관련된 용어로, 말 그대로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다수(Multi, 그러니까 두 개 이상)의 데이터 형태(Modal)를 입력값으로 받는 모델을 뜻합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트 데이터&lt;/li&gt;
&lt;li&gt;이미지 데이터&lt;/li&gt;
&lt;li&gt;비디오 데이터&lt;/li&gt;
&lt;li&gt;음성 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등등...의 데이터 형태 중 두 개 이상을 입력으로 받으면 Multi-modal 모델이라고 부를 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MNh31/dJMcabQMqB1/NWCLBjP3Hds0A6jDKYdFSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MNh31/dJMcabQMqB1/NWCLBjP3Hds0A6jDKYdFSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MNh31/dJMcabQMqB1/NWCLBjP3Hds0A6jDKYdFSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMNh31%2FdJMcabQMqB1%2FNWCLBjP3Hds0A6jDKYdFSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1100&quot; height=&quot;561&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 서로 다른 형태의 입력이 들어오면 모델은 어떻게 이를 합쳐서 처리하느냐? 에 대해서는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 모두 벡터(Embedding Vector, 혹은 그냥 Embedding이라고도 부릅니다. ) 형태로 바꿔주는 일련의 과정이 필요합니다. 이러한 역할을 Encoder가 주로 하는데, 각 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;데이터 형태 별로 독립적인 Encoder가 필요&lt;/span&gt;합니다. (왜냐하면, 데이터 형태가 다르면 이를 벡터로 바꿔주는 과정 또한 달라지기에)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 사진을 보면 이미지 데이터는 Image Encoder가, 오디오 데이터는 Audio Encoder가, 비디오 데이터는 Video Encoder가 각각 처리한다는 것을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 처리된 벡터들은 하나의 공간(Embedding 차원)으로 옮겨져, 학습하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 여기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771921501947&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Exploring Multimodal Large Language Models: A Step Forward in AI&quot; data-og-description=&quot;In the dynamic realm of artificial intelligence, the advent of Multimodal Large Language Models (MLLMs) is revolutionizing how we interact&amp;hellip;&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&quot; data-og-url=&quot;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cm6Cs0/dJMb83kpU5Y/lCFpFaH1r4hevKlkpYurxk/img.png?width=1200&amp;amp;height=477&amp;amp;face=0_0_1200_477&quot;&gt;&lt;a href=&quot;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/@mouneshpatil001/exploring-multimodal-large-language-models-a-step-forward-in-ai-4a96bbc245a3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cm6Cs0/dJMb83kpU5Y/lCFpFaH1r4hevKlkpYurxk/img.png?width=1200&amp;amp;height=477&amp;amp;face=0_0_1200_477');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Exploring Multimodal Large Language Models: A Step Forward in AI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;In the dynamic realm of artificial intelligence, the advent of Multimodal Large Language Models (MLLMs) is revolutionizing how we interact&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.2. Multi-task란 무엇인가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서는 Multi-modal을 설명했는데 Multi-task라는 것도 있습니다. 이거는 Multi-modal보다도 쉽습니다. 그냥 Task를 여러 개 수행하는 모델이라는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 내가 원하는 대로 Task를 무한으로 늘릴 수도 있습니다. (뭐 물론 구현만 잘 된다면..) 이미지와 그에 맞는 음성을 같이 출력하면서, 설명도 같이 출력하는 모델이라던지, 하는 형태로요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multi-modal이 각 데이터 형태에 맞는 Encoder를 필요로 했다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multi-task의 경우 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;각 Task마다의 Loss Function을 다르게 설정&lt;/span&gt;을 해줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 아래와 같이 state 예측(분류)과 power 예측(회귀)를 둘 다 하는 Multi-task의 경우 분류와 회귀에 맞는 손실함수를 각각 정의해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771921648014&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 손실함수 및 optimizer 정의
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion_state = nn.CrossEntropyLoss()      # 분류의 경우
criterion_power = nn.MSELoss()               # 회귀의 경우

num_epochs = 50       

total_losses = []     
state_losses = []
power_losses = []&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.3. End-to-End 모델이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Multi-modal이나 Multi-task 모델의 경우 예전부터 있던 개념인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 뜨는 개념 중에 End-to-End(E2E) 라는 게 있습니다. 간단히 소개만 할 겸 가져왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;End-to-End란 말그대로 처음부터 끝까지를 한 번에 학습하는 모델을 만들겠다는 것이 핵심입니다. 한국어로는 '종단 간 학습 모델'이라고 번역하는데, 용어가 영 멋이 없는 것 같긴 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 중간 단계를 하나하나 학습시키는 게 아닌, &lt;b&gt;입력부터 출력까지를 하나의 연결된 과정으로 보고, 그 전체를 학습시키겠다&lt;/b&gt;는 뜻입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hyunhp.tistory.com/674&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hyunhp.tistory.com/674&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771921779180&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[딥러닝] End to End model (E2E model) 해설, 정리, 요약&quot; data-og-description=&quot;안녕하세요, HELLO End to End model은 수동 피처 엔지니어링 (manual feature engineering)이나 중간 처리 단계 없이 입력 데이터에서 출력 데이터로 직접 작업을 수행하는 방법을 학습하는 일종의 머신러닝 &quot; data-og-host=&quot;hyunhp.tistory.com&quot; data-og-source-url=&quot;https://hyunhp.tistory.com/674&quot; data-og-url=&quot;https://hyunhp.tistory.com/674&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LAcqE/dJMb8WMmyrb/kJWjLBiQz1FLnXQPNuIgqk/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300,https://scrap.kakaocdn.net/dn/hxGZv/dJMb9lk39aS/oWekSLGv5pjvFKdC6i5QL1/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300,https://scrap.kakaocdn.net/dn/kkAiF/dJMb82Mz4qU/lwXdhXMxTJYGDXehSqt62K/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300&quot;&gt;&lt;a href=&quot;https://hyunhp.tistory.com/674&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hyunhp.tistory.com/674&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LAcqE/dJMb8WMmyrb/kJWjLBiQz1FLnXQPNuIgqk/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300,https://scrap.kakaocdn.net/dn/hxGZv/dJMb9lk39aS/oWekSLGv5pjvFKdC6i5QL1/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300,https://scrap.kakaocdn.net/dn/kkAiF/dJMb82Mz4qU/lwXdhXMxTJYGDXehSqt62K/img.png?width=420&amp;amp;height=300&amp;amp;face=0_0_420_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[딥러닝] End to End model (E2E model) 해설, 정리, 요약&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요, HELLO End to End model은 수동 피처 엔지니어링 (manual feature engineering)이나 중간 처리 단계 없이 입력 데이터에서 출력 데이터로 직접 작업을 수행하는 방법을 학습하는 일종의 머신러닝&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hyunhp.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이게 요즘 왜 뜨냐? 면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 끝까지를 한꺼번에 학습시키면 조금 더 복잡한 과제를 풀 수 있기 때문입니다. E2E는 보통 Speech Recognition(음성 인식)이나 대표적으로는 Autonomous Driving(자율주행)에 자주 쓰이곤 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771921830657&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;End-to-end learning, the (almost) every purpose ML method&quot; data-og-description=&quot;Can E2E be used to solve every Machine Learning problems?&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&quot; data-og-url=&quot;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdS4Hu/dJMb8XR2Beu/XLdrKoCa39zii7vr2ECeEk/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800&quot;&gt;&lt;a href=&quot;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/data-science/e2e-the-every-purpose-ml-method-5d4f20dafee4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdS4Hu/dJMb8XR2Beu/XLdrKoCa39zii7vr2ECeEk/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;End-to-end learning, the (almost) every purpose ML method&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Can E2E be used to solve every Machine Learning problems?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거 영어긴 한데 진짜 좋은 글이니 추천&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 되면 CNN도 쭉 정리하는 글을 써보겠습니다.....근데 곧 개강이라 못할듯.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝, 딥러닝</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/24</guid>
      <comments>https://powderblue0.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 24 Feb 2026 17:31:16 +0900</pubDate>
    </item>
    <item>
      <title>[Physical AI] Diffusion-VLA: VLA의 행동 생성</title>
      <link>https://powderblue0.tistory.com/23</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 지난 글에 미처 정리하지 못한 Physical AI에 대한 부분과, 더 나아가 이러한 모델들이 실제로 어떤 원리로 행동을 생성하게 되는지에 대한 내부 구조들을 들여다보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I. 요즘 뜨는 Physical AI&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;II. VLA는 로봇의 행동을 어떻게 생성하는가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;III. 사고 과정(Reasoning)의 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IV. Diffusion Model이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;V. Diffusion과 VLA의 결합: DiVLA&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;I. 요즘 뜨는 Physical AI&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 VLA에 대해 설명하기 전에 2025년부터 뜨고 있는 Physical AI에 대해 먼저 말해 봅시다. 다음은 엔비디아에서 올린 Physical AI에 대한 소개 영상입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AYSfcgVv9-U&amp;amp;t=1s&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=AYSfcgVv9-U&amp;amp;t=1s&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=AYSfcgVv9-U&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/eUouc/dJMb9efagRu/8ID3VkQDu83ceCQlNJLA20/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/b0coer/dJMb9g47ul5/FAW8acnc18iUaGKTdSq6r0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bmjSb7/dJMb9bvYD6l/MdEuF8AmAdgkKvZIU7hud0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Introducing Generative Physical AI&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/AYSfcgVv9-U&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐 요즘 이런 게 트렌드라는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소위 Physical AI라고 불리는 것들은 &quot;단순히 로보틱스/ 제어 + AI 를 결합하는 것&quot;에서 무엇이 더 발전한 것인가? 그리고 이것이 왜 트렌드가 되고 있는가? 에 대해 조금 정리해두려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@1212ac31a500435/186&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://brunch.co.kr/@1212ac31a500435/186&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771227713895&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;20화 2025 AI 트렌드 Physical AI?&quot; data-og-description=&quot;지난 CES 2025 기조연설에서 젠슨 황은 '피지컬(Physical&amp;middot;물리적) AI'에 대해서 이야기했습니다. &amp;lsquo;피지컬 AI&amp;rsquo;&amp;nbsp;&amp;nbsp;기존의 소프트웨어 중심 인공지능에서 벗어나, 물리적 기기에 탑재되는 인공지능(AI) &quot; data-og-host=&quot;brunch.co.kr&quot; data-og-source-url=&quot;https://brunch.co.kr/@1212ac31a500435/186&quot; data-og-url=&quot;https://brunch.co.kr/@1212ac31a500435/186&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/v5xgg/dJMb8TB5UvY/zX3Ri134c8qWySzXhIhgAk/img.jpg?width=500&amp;amp;height=304&amp;amp;face=0_0_500_304,https://scrap.kakaocdn.net/dn/czNGyP/dJMb8TB5UvZ/wIqwZBzEwQKvZMgK661BUK/img.png?width=850&amp;amp;height=640&amp;amp;face=0_0_850_640&quot;&gt;&lt;a href=&quot;https://brunch.co.kr/@1212ac31a500435/186&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://brunch.co.kr/@1212ac31a500435/186&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/v5xgg/dJMb8TB5UvY/zX3Ri134c8qWySzXhIhgAk/img.jpg?width=500&amp;amp;height=304&amp;amp;face=0_0_500_304,https://scrap.kakaocdn.net/dn/czNGyP/dJMb8TB5UvZ/wIqwZBzEwQKvZMgK661BUK/img.png?width=850&amp;amp;height=640&amp;amp;face=0_0_850_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;20화 2025 AI 트렌드 Physical AI?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 CES 2025 기조연설에서 젠슨 황은 '피지컬(Physical&amp;middot;물리적) AI'에 대해서 이야기했습니다. &amp;lsquo;피지컬 AI&amp;rsquo;&amp;nbsp;&amp;nbsp;기존의 소프트웨어 중심 인공지능에서 벗어나, 물리적 기기에 탑재되는 인공지능(AI)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;brunch.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 로보틱스 + AI의 접근방식은 강화학습(Reinforcement Learning)을 주된 툴로서 이용하였습니다. 몬테카를로 트리 탐색 등의 최적화 이론과 강화학습을 기반으로 하는 최적제어에 초점을 맞춰 왔다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(강화학습, 최적제어&amp;hellip; 같은 건 제가 이번 학기에 공부할 예정이기 때문에 배우고 나서 기회가 되면 정리하러 올게요..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 로보틱스 및 제어 기술에 있어서, 기존 기술과 &lt;b&gt;Physical AI는 무엇이 다른가? 그리고 무엇이 더 발전한 것인가?&lt;/b&gt; 에 대해서는 다음과 같이 정리할 수 있겠습니다. (이하는 그냥 제 뇌피셜)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우선은 LLM의 등장을 꼽을 수 있습니다. 단순한 보조적 툴로서의 도움을 받을 수 있는 것 말고도, 파인튜닝 과정을 추가하여 로보틱스에서 인간이 로봇에게 언어로서 작업 지시가 가능해지고, 추론 과정까지도 추가할 수 있게 되었습니다.&lt;/li&gt;
&lt;li&gt;또한, 멀티모달(Multi-modal) 모델의 등장을 꼽을 수 있겠습니다. 인간의 텍스트 명령과 더불어 로봇의 시각적 피드백이 가능해졌습니다. 로봇이 실시간으로 수집한 시각 데이터를 반영할 수 있게 된 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 둘을 합치면 더 나아가서는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 명령 (= 자연어 명령, 즉 인간의 언어적 혹은 음성 명령)만으로 로봇제어를 할 수 있는 가능성이 제시된 것이라고 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;II. VLA는 로봇의 행동을 어떻게 생성하는가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로는 VLA를 접하면서 제가 가장 궁금했었던, &quot;그래서 로봇의 행동을 어떻게 생성하는가?&quot;에 대해 정리해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8VYaX/dJMcafewHNt/mCuAfcAht4HGZjnG97t7D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8VYaX/dJMcafewHNt/mCuAfcAht4HGZjnG97t7D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8VYaX/dJMcafewHNt/mCuAfcAht4HGZjnG97t7D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8VYaX%2FdJMcafewHNt%2FmCuAfcAht4HGZjnG97t7D1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1298&quot; height=&quot;641&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서 OpenVLA의 아키텍쳐와 작동 원리에 대해 정리해 두었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/22&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771228323935&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Physical AI] VLA(비전-언어-행동) 모델 개요&quot; data-og-description=&quot;새로운 연구주제를 정하려고 이것저것 알아보다가 요즘은 이런 게 유행이라길래 가져왔습니다.요즘 인공지능 커뮤니티에서도 자주 언급되고, 국내외 대학에서 논문들이 끊임없이 나오는 주제&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/22&quot; data-og-url=&quot;https://powderblue0.tistory.com/22&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JZmZ5/dJMb9lL7T80/wMkQwYXKqCN6UThVkENulK/img.png?width=800&amp;amp;height=321&amp;amp;face=0_0_800_321,https://scrap.kakaocdn.net/dn/cnoAmV/dJMb9iaNtNJ/uT8m7oyRJWS5ZSyTSlKMO1/img.png?width=800&amp;amp;height=321&amp;amp;face=0_0_800_321,https://scrap.kakaocdn.net/dn/bjoMW4/dJMb9b3OpKq/kk8ygWQNOtvkOgvkoIswY1/img.png?width=1255&amp;amp;height=697&amp;amp;face=0_0_1255_697&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/22&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JZmZ5/dJMb9lL7T80/wMkQwYXKqCN6UThVkENulK/img.png?width=800&amp;amp;height=321&amp;amp;face=0_0_800_321,https://scrap.kakaocdn.net/dn/cnoAmV/dJMb9iaNtNJ/uT8m7oyRJWS5ZSyTSlKMO1/img.png?width=800&amp;amp;height=321&amp;amp;face=0_0_800_321,https://scrap.kakaocdn.net/dn/bjoMW4/dJMb9b3OpKq/kk8ygWQNOtvkOgvkoIswY1/img.png?width=1255&amp;amp;height=697&amp;amp;face=0_0_1255_697');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Physical AI] VLA(비전-언어-행동) 모델 개요&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;새로운 연구주제를 정하려고 이것저것 알아보다가 요즘은 이런 게 유행이라길래 가져왔습니다.요즘 인공지능 커뮤니티에서도 자주 언급되고, 국내외 대학에서 논문들이 끊임없이 나오는 주제&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 기술의 경우 (Autoregression Model)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;행동을 생성하는 것이 아닌 행동 명령 토큰을 생성하는&quot; 방식으로 작동됩니다.&amp;nbsp;즉 Transformer, 그러니까 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Decoder가 생성하는 토큰을 기준으로 행동을 그대로 옮기는&lt;/span&gt; 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일종의&lt;b&gt;&lt;span data-token-index=&quot;1&quot;&gt; &amp;ldquo;다음 토큰 예측&amp;rdquo;&lt;/span&gt;&lt;/b&gt;의 원리,&lt;b&gt;&lt;span data-token-index=&quot;3&quot;&gt; 이미지 + 언어 &amp;rArr; 토큰&lt;/span&gt;&lt;/b&gt; 의 구조였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 뒤에 나오는 Diffusion 기술이 추가된 Diffusion-VLA와 구분하기 위해 Autoregression Model이라고 부르겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;III. 사고 과정(Reasoning)의 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 Autoregression Model의 &amp;lsquo;다음 토큰 예측&amp;rsquo;의 원리에서 발전하여, &lt;b&gt;로봇의 자체적인 사고 과정을 추가&lt;/b&gt;하는 방법으로 로봇의 행동을 생성하는 방법이 제시된 것이 DiVLA입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히는 Diffusion-VLA라고 Diffusion 모델과 VLA를 결합한 모델인데 Diffusion 모델 자체나 DiVLA의 아키텍쳐에 대해서는 아래에서 조금 더 자세히 정리하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 &lt;b&gt;다음 토큰 예측의 원리가 아닌 다른 원리로 어떻게 로봇의 행동을 생성할 것인가?&lt;/b&gt; 에 대해 정리해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브에 자세히 설명해둔 영상이 있습니다. 아래에 정리한 내용은 영상의 설명들을 참고한 내용입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_lHYOCWnJGM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=_lHYOCWnJGM&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=_lHYOCWnJGM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cAtkzp/dJMb8VNrFRz/eQbR9mP4jPKOiQjSdKivpk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'Diffusion-VLA' 로봇개발자라면 이제 반드시 이 내용 알아야 합니다 l Physical AI, 최신 로봇 AI 핵심 논&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/_lHYOCWnJGM&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상에서 소개하고 있는 것은 Diffusion-VLA: Generalizable and Interpretable Robot Foundation Model via Self-Generated Reasoning이라는 논문에 소개된, Diffusion-VLA (줄여서 DiVLA) 모델입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 &quot;다음 토큰 예측&quot;의 대안으로 제시된 것이 Diffusion Policy입니다. 간단히 정리하자면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;로봇이 직접 Reasoning을 하는, 행동에 대한 사고를 하는 과정을 도입&lt;/span&gt;한 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1788&quot; data-origin-height=&quot;1003&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLIy8m/dJMcacowCxw/LhAwFRqG8wiqhGwUmIVjw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLIy8m/dJMcacowCxw/LhAwFRqG8wiqhGwUmIVjw1/img.png&quot; data-alt=&quot;영상에 나온 거 캡쳐본입니당~~ 자세한 건 영상 보세용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLIy8m/dJMcacowCxw/LhAwFRqG8wiqhGwUmIVjw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLIy8m%2FdJMcacowCxw%2FLhAwFRqG8wiqhGwUmIVjw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1788&quot; height=&quot;1003&quot; data-origin-width=&quot;1788&quot; data-origin-height=&quot;1003&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;영상에 나온 거 캡쳐본입니당~~ 자세한 건 영상 보세용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상 내용을 정리하자면 해당 모델은 Diffusion Policy에 따라 이산적인 행동 생성이 아니라 &amp;rarr; &lt;b&gt;행동의 시퀀스를 생성합니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행동을 하나하나 예측하는 것이 아니라 행동의 덩어리(Chunk)를 예측하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;연속적인 행동의 시퀀스 자체를 만들어내는&lt;/span&gt; 것이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;IV. Diffusion Model이란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데, 여기서 말하는 이 Diffusion이라는 개념을 그냥 DiVLA 수준에서만 이해하기에는 부족합니다. 왜냐하면, 이 Diffusion Model이라는 게 원래는 로봇 제어가 아니라 이미지 생성에서 널리 사용되는 생성모델이기 때문이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion Model에 대한 설명은 이미지던 로봇의 행동(Action)이던, &lt;b&gt;그것을 어떻게 생성할 것인가?&lt;/b&gt; 하는 질문에서 시작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion Model의 Diffusion이란 말 그대로 발산이라는 뜻입니다. 정확히는 Diffusion-based Generative Model 그러니까 확산 기반의 생성 모델이라고 부릅니다. 이러한 '발산'이 어디서부터 어디로, 무엇이 발산되는 건지에 대해 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DIffusion Model의 핵심은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;노이즈만 가득한 곳에서, 노이즈를 점점 제거하면서 무언가를 생성&lt;/span&gt;하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://process-mining.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://process-mining.tistory.com/182&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771229504237&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Diffusion model 설명 (Diffusion model이란? Diffusion model 증명)&quot; data-og-description=&quot;Diffusion model은 데이터를 만들어내는 deep generative model 중 하나로, data로부터 noise를 조금씩 더해가면서 data를 완전한 noise로 만드는 forward process(diffusion process)와 이와 반대로 noise로부터 조금씩 복&quot; data-og-host=&quot;process-mining.tistory.com&quot; data-og-source-url=&quot;https://process-mining.tistory.com/182&quot; data-og-url=&quot;https://process-mining.tistory.com/182&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/46Vww/dJMb8Z3nA6O/BiMOr9jWZ0tX93ghKXsxEk/img.png?width=800&amp;amp;height=140&amp;amp;face=738_85_768_117,https://scrap.kakaocdn.net/dn/DugLu/dJMb8YXHNyy/I2Egh9NskrQMYdzzzF5DC1/img.png?width=800&amp;amp;height=140&amp;amp;face=738_85_768_117,https://scrap.kakaocdn.net/dn/lNKfn/dJMb8U8PXX0/aQvhkoktS7VTwYsuluXOhK/img.png?width=654&amp;amp;height=221&amp;amp;face=0_0_654_221&quot;&gt;&lt;a href=&quot;https://process-mining.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://process-mining.tistory.com/182&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/46Vww/dJMb8Z3nA6O/BiMOr9jWZ0tX93ghKXsxEk/img.png?width=800&amp;amp;height=140&amp;amp;face=738_85_768_117,https://scrap.kakaocdn.net/dn/DugLu/dJMb8YXHNyy/I2Egh9NskrQMYdzzzF5DC1/img.png?width=800&amp;amp;height=140&amp;amp;face=738_85_768_117,https://scrap.kakaocdn.net/dn/lNKfn/dJMb8U8PXX0/aQvhkoktS7VTwYsuluXOhK/img.png?width=654&amp;amp;height=221&amp;amp;face=0_0_654_221');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Diffusion model 설명 (Diffusion model이란? Diffusion model 증명)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Diffusion model은 데이터를 만들어내는 deep generative model 중 하나로, data로부터 noise를 조금씩 더해가면서 data를 완전한 noise로 만드는 forward process(diffusion process)와 이와 반대로 noise로부터 조금씩 복&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;process-mining.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 작동 과정을 살펴보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우선 기존 데이터(X0이라고 하겠습니다.)에 조금씩 노이즈를 추가합니다. 이때 추가되는 노이즈는 가우시안 노이즈로, 모델 학습이 아닌 수학적인 과정입니다.&lt;/li&gt;
&lt;li&gt;이러한 과정을 거쳐 완전한 노이즈로 만듭니다. (Xt라고 하겠습니다.)&lt;/li&gt;
&lt;li&gt;여기에 Diffusion Model은 이 완전한 노이즈를 다시 디노이징(De-noising, Reverse Process)하는 과정을 배웁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지를 구분해서 기억하면 되겠습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Forward Process: 데이터(X0)로부터 noise를 점점 더해서, 완전한 노이즈(Xt) 로 나아가는 과정&lt;br /&gt;&amp;rarr; 모델 학습은 Forward Process를 기반으로 함.&lt;br /&gt;&lt;br /&gt;Reverse Process: 완전한 노이즈(Xt)로부터 데이터(X0)를 복원하는 과정 &lt;br /&gt;&amp;rarr; 모델의 실제 생성 과정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 토끼 이미지를 생성하는 과정을 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;951&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AaxFO/dJMcahJ96G2/oobQHS63vlDwj9eHNO6e71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AaxFO/dJMcahJ96G2/oobQHS63vlDwj9eHNO6e71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AaxFO/dJMcahJ96G2/oobQHS63vlDwj9eHNO6e71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAaxFO%2FdJMcahJ96G2%2FoobQHS63vlDwj9eHNO6e71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;696&quot; data-origin-width=&quot;1043&quot; data-origin-height=&quot;951&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 생성의 과정을 살펴보면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령을 입력하면, Encoder가 텍스트를 embedding 벡터로 바꿉니다.&lt;/li&gt;
&lt;li&gt;이후 랜덤 노이즈의 이미지를 생성합니다. 마치 빈 스케치북에 그림을 그리는 것과 같습니다.&lt;/li&gt;
&lt;li&gt;텍스트 벡터를 참고하여, 요청한 '토끼 이미지'와 가까운 방향으로 노이즈를 제거합니다. (De-noising)&lt;/li&gt;
&lt;li&gt;이를 반복하면 토끼 이미지가 생성됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;V. Diffusion과 VLA의 결합: DiVLA&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 설명한 Diffusion Model의 핵심 내용을 정리한다면, Noising을 통해 학습을 진행하고, De-noising을 반복해서 요청한 데이터를 생성하는 것이라고 볼 수 있겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion-VLA(이하 DiVLA)는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;로봇의 행동(Action) 생성을 Diffusion 방식으로 처리한 모델&lt;/span&gt;입니다. 즉, 기존 Vision Encoder와 Text Encoder에 Diffusion-based Action Generator(디퓨전 기반의 행동 생성)을 추가한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 2025년 Diffusion-VLA: Generalizable and Interpretable Robot Foundation Model via Self-Generated Reasoning 논문에서 제시된 모델입니다. 논문은 아래 링크에서 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2412.03293&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2412.03293&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771230173036&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Diffusion-VLA: Generalizable and Interpretable Robot Foundation Model via Self-Generated Reasoning&quot; data-og-description=&quot;In this paper, we present DiffusionVLA, a novel framework that seamlessly combines the autoregression model with the diffusion model for learning visuomotor policy. Central to our approach is a next-token prediction objective, enabling the model to reason &quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2412.03293&quot; data-og-url=&quot;https://arxiv.org/abs/2412.03293v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byZxh9/dJMb8SXt8aX/uA5YF7cP4UpNmIfke4NVbk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/ehyUlX/dJMb8YXHNAf/neFxlwGiGL7K53xGj1HpOk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2412.03293&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2412.03293&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byZxh9/dJMb8SXt8aX/uA5YF7cP4UpNmIfke4NVbk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/ehyUlX/dJMb8YXHNAf/neFxlwGiGL7K53xGj1HpOk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Diffusion-VLA: Generalizable and Interpretable Robot Foundation Model via Self-Generated Reasoning&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;In this paper, we present DiffusionVLA, a novel framework that seamlessly combines the autoregression model with the diffusion model for learning visuomotor policy. Central to our approach is a next-token prediction objective, enabling the model to reason&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DiVLA의 아키텍쳐는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;928&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3EX0e/dJMb99SR0S4/PC0kCt7mknQxVEeb2jbcd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3EX0e/dJMb99SR0S4/PC0kCt7mknQxVEeb2jbcd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3EX0e/dJMb99SR0S4/PC0kCt7mknQxVEeb2jbcd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3EX0e%2FdJMb99SR0S4%2FPC0kCt7mknQxVEeb2jbcd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1198&quot; height=&quot;928&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;928&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vision+Language의 멀티모달 Input을 받는 것까지는 기존 OpenVLA와 동일합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후로는 완전한 랜덤 행동 노이즈를 생성합니다. 그리고 Input으로 받은 정보(= Vision+Language 정보)를 토대로 Reverse Process를 진행합니다. 이러한 Diffusion 방식으로 &lt;b&gt;행동의 시퀀스&lt;/b&gt;를 생성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771230334909&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Vision Encoder]  &amp;rarr;  
                     &amp;rarr;  Multimodal Fusion &amp;rarr;  Diffusion Action Head &amp;rarr; Action trajectory
[Language Encoder] &amp;rarr;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 말하는 &quot;행동의 시퀀스&quot;, 즉 &quot;행동들의 연속된 동장&quot;을 Action Trajectory라고 합니다. 기본적으로 이미지 생성 모델(Diffusion-based Image Generation)에서 출력을 이미지가 아닌 Action Trajectory로 바꾼 것일 뿐입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정을 거치면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 지시문을 바로 행동으로 맵핑하는(기존의 Autoregression Model의 행동 생성 과정) 것이 아닌, 로봇이 행동 생성 과정에서 자체적으로 Input에 대한 Diffusion의 Reverse Process를 거치면서 Reasoning(사고)을 하게 됩니다.&amp;nbsp; 그리고 이를 Chain of Thought, CoT(중간 추론 과정을 거치는 구조)라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;명령 &amp;rarr; 실행&lt;/b&gt;이 아니라, &lt;b&gt;명령&amp;rarr;사고&amp;rarr; 실행&lt;/b&gt;의 과정을 거칠 수 있도록 되는 것입니다.&lt;/p&gt;</description>
      <category>Physical AI</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/23</guid>
      <comments>https://powderblue0.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 16 Feb 2026 17:29:39 +0900</pubDate>
    </item>
    <item>
      <title>[Physical AI] VLA(비전-언어-행동) 모델 개요</title>
      <link>https://powderblue0.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 연구주제를 정하려고 이것저것 알아보다가 요즘은 이런 게 유행이라길래 가져왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 인공지능 커뮤니티에서도 자주 언급되고, 국내외 대학에서 논문들이 끊임없이 나오는 주제인 VLA(비전-언어-행동) 모델 입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제로 관련 논문들을 읽다 보면 state of the art 기술이라는 표현이 참 많이 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;개인적으로 트렌드를 따라가는 걸 좋아하는 편은 아닙니다. 그렇지만 2년 간 학부생활을 하면서 깨달은 건, &quot;대학은 정적인 것만을 공부하는 곳&quot;이라고 믿었던 것과는 달리, 대학도 학계도 트렌드에 민감한 곳이라는 것이었습니다. 어느 정도 무엇이 트렌드인지, 그래서 앞으로 연구 방향이나 기술은 어느 방향으로 흘러갈 것인지에 대해 알아둘 필요도 있다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서, 이번 글에서는 2025년 AI 트렌드라고도 할 수 있는 이른바 Physical AI의 핵심이 되는 모델인 VLA에 대해 정리해보려고 합니다. 그리고 더 나아가, 이 VLA가 &quot;왜&quot; 요즘 핫한 이슈가 되고 있는지에 대해서도 간단히 다루겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;I. VLA 모델이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;II. VLA의 아키텍쳐&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;III. OpenVLA 아키텍쳐 파헤치기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IV. AIHub 데이터 소개&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;V. 각종 논문리뷰 등&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;I. VLA 모델이란 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1HvYE/dJMcadAUeJS/hnqijGzwFRA0H4zQgTPztk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1HvYE/dJMcadAUeJS/hnqijGzwFRA0H4zQgTPztk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1HvYE/dJMcadAUeJS/hnqijGzwFRA0H4zQgTPztk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1HvYE%2FdJMcadAUeJS%2FhnqijGzwFRA0H4zQgTPztk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1404&quot; height=&quot;565&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;VLA 모델(Vision-Language-Action Model)이란 텍스트, 비디오, 시연(Demonstration)등의 Input을 받아 Action을 생성하는 로봇 파운데이션 모델이다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 것이 위키피디아 등에 적혀있는 설명입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서도 말했지만 요즘 뜨는 Physical AI의 연장선이자 최전선에 위치한 기술이라고 할 수 있겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 정리하자면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로봇의 Vision(시각)과 인간의 명령(Language)을 Input으로 받고&lt;/li&gt;
&lt;li&gt;이에 대한 적절한 Action을 출력하는 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vision의 경우 이미지의 형태로, Language(명령)의 경우 텍스트의 형태로 입력됩니다. 즉, 이미지와 언어를 동시에 입력받는 멀티모달(Multi-modal) 모델인 것입니다. (자연어처리 + 컴퓨터비전이 합쳐진 것이라고 볼 수도 있겠구요.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Action의 경우 로봇의 움직임과 관련된 여러 벡터 형태(x축방향 변화, 각도 변화 등)로 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLA의 아키텍쳐를 자세히 살펴봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;II. VLA의 아키텍쳐&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLA에 대해 어떤 교수님이 한글로 정리해두신 개쩌는 html 링크를 발견했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771225573733&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;VLM (Vision-Language Model)&quot; data-og-description=&quot;[Home] AI로 돌아가기   관련 문서: Wikipedia - Multimodal AI | Wikipedia - CLIP | Wikipedia - Transformer VLM (Vision-Language Model; 비전 언어 모델) VLM은 이미지(또는 비디오)와 텍스트를 동시에 이해하고 생성하는 &quot; data-og-host=&quot;www.kim2kie.com&quot; data-og-source-url=&quot;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&quot; data-og-url=&quot;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LHxaI/dJMb9g47ufk/HhkyfOmMcaEkKAWdMrIHE0/img.png?width=1280&amp;amp;height=378&amp;amp;face=0_0_1280_378&quot;&gt;&lt;a href=&quot;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.kim2kie.com/res/html/0_formula/00%20AI/VLM.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LHxaI/dJMb9g47ufk/HhkyfOmMcaEkKAWdMrIHE0/img.png?width=1280&amp;amp;height=378&amp;amp;face=0_0_1280_378');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;VLM (Vision-Language Model)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[Home] AI로 돌아가기   관련 문서: Wikipedia - Multimodal AI | Wikipedia - CLIP | Wikipedia - Transformer VLM (Vision-Language Model; 비전 언어 모델) VLM은 이미지(또는 비디오)와 텍스트를 동시에 이해하고 생성하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kim2kie.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;링크에 소개된 아키텍쳐는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DNpwZ/dJMcabQF8js/URHZkc9V1HbG1wRHqaQhGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DNpwZ/dJMcabQF8js/URHZkc9V1HbG1wRHqaQhGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DNpwZ/dJMcabQF8js/URHZkc9V1HbG1wRHqaQhGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDNpwZ%2FdJMcabQF8js%2FURHZkc9V1HbG1wRHqaQhGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;478&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍쳐와 관련하여 핵심이 되는 내용만을 정리하면 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비전-언어 모델(Vision-Language Model)을 Fine Tuning하여 구성된다. (그릐고 여기에 Action 출력을 추가한 것)&lt;/li&gt;
&lt;li&gt;이미지 관찰 + 자연어 설명(= 캡션)을 잠재공간 내의 분포로 변환&lt;/li&gt;
&lt;li&gt;비전-언어 인코더 (=Vision Transformer)와 이를 동작으로 변환하는 동작 디코더를 결합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 영어로 되어있긴 하지만 VLA에 대한 개념적인 설명부터 간단한 구현방법까지 정리해둔 페이지가 있으니 참고하시면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://substack.com/home/post/p-180266695&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://substack.com/home/post/p-180266695&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771225755000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Building Vision-Language-Action Model from scratch&quot; data-og-description=&quot;Understand what are VLAs? How to build VLAs from scratch?!&quot; data-og-host=&quot;substack.com&quot; data-og-source-url=&quot;https://substack.com/home/post/p-180266695&quot; data-og-url=&quot;https://substack.com/home/post/p-180266695&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cjFNwU/dJMb8T9VMhU/da2V6Z4vPOjx2hXogafhv1/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bn1VPe/dJMb8YpRKZz/OWUYgXE8MhlWpoAo6XlQoK/img.jpg?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800&quot;&gt;&lt;a href=&quot;https://substack.com/home/post/p-180266695&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://substack.com/home/post/p-180266695&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cjFNwU/dJMb8T9VMhU/da2V6Z4vPOjx2hXogafhv1/img.jpg?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320,https://scrap.kakaocdn.net/dn/bn1VPe/dJMb8YpRKZz/OWUYgXE8MhlWpoAo6XlQoK/img.jpg?width=1600&amp;amp;height=800&amp;amp;face=0_0_1600_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Building Vision-Language-Action Model from scratch&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Understand what are VLAs? How to build VLAs from scratch?!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;substack.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 아키텍쳐와 관련하여, &lt;b&gt;&quot;그래서 이게 왜 인기인가?&quot;&lt;/b&gt;라는 질문에 대해 생각해보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q3Tgu/dJMcaaYxBDY/GzYLFk1TkqgJ1xnYwE7KOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q3Tgu/dJMcaaYxBDY/GzYLFk1TkqgJ1xnYwE7KOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q3Tgu/dJMcaaYxBDY/GzYLFk1TkqgJ1xnYwE7KOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq3Tgu%2FdJMcaaYxBDY%2FGzYLFk1TkqgJ1xnYwE7KOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;381&quot; data-origin-width=&quot;1014&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지는 위에 첨부한 링크에 있는 내용을 그대로 가져온 겁니다. single model to perceive, reason AND act라고 되어 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말 그대로 모든 게 짬뽕되어 있는 (&quot;complex stacks of systems&quot;) 기술이다 보니 더욱 더 핫해질 수 밖에 없는 기술입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 '비전 + 언어'를 합쳐서 Input으로 받는 &lt;b&gt;멀티모달 모델&lt;/b&gt;이라는 점도 흥미롭고, 이를 통해 &lt;b&gt;실제로 Action까지 출력&lt;/b&gt;하는 파이프라인이 주는 이점도 흥미롭습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 얼마나 아이디어만으로도 개쩌는 거냐면 우리가 시리나 빅스비한테 &quot;오늘 날씨 알려줘&quot;, 혹은 &quot;10분 타이머 설정해줘&quot;라고 명령하던 것들이 &quot;저기 있는 우유 좀 가져다 줘&quot;라던지, 더 나아가서는 &quot;내 책상 좀 정리해줘&quot;까지도 발전할 수 있다는 말이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;III. OpenVLA의 아키텍쳐 파헤치기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLA는 대략 2020년부터 뜨기 시작한 최신 기술입니다. VLA의 시작은 구글 DeepMind가 개발한 RT-2부터 시작되었다고 할 수 있습니다. (RT-2는 RT-1을 전신으로 하지만, 대부분은 RT-2를 VLA의 시작점이라고 보는 편.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 2024년 VLA 기술을 오픈소스화한 OpenVLA가 등장했습니다. 논문 OpenVLA: An Open-Sourse Vision-Language-Action Model에서 공개한 아키텍쳐에 대해 자세히 정리해보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2406.09246&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2406.09246&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771226358323&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;OpenVLA: An Open-Source Vision-Language-Action Model&quot; data-og-description=&quot;Large policies pretrained on a combination of Internet-scale vision-language data and diverse robot demonstrations have the potential to change how we teach robots new skills: rather than training new behaviors from scratch, we can fine-tune such vision-la&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2406.09246&quot; data-og-url=&quot;https://arxiv.org/abs/2406.09246v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cmgXrn/dJMb8RjYgw9/eDmmjP4QzKrg9Um5PhK4P1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/YgNq4/dJMb8SXt7YH/as80VuJR3DKpwa4b32vTeK/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2406.09246&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2406.09246&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cmgXrn/dJMb8RjYgw9/eDmmjP4QzKrg9Um5PhK4P1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/YgNq4/dJMb8SXt7YH/as80VuJR3DKpwa4b32vTeK/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;OpenVLA: An Open-Source Vision-Language-Action Model&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Large policies pretrained on a combination of Internet-scale vision-language data and diverse robot demonstrations have the potential to change how we teach robots new skills: rather than training new behaviors from scratch, we can fine-tune such vision-la&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O2IGN/dJMcaf6CF0P/vC6f3Ntz5zfOg0Sjo07Om0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O2IGN/dJMcaf6CF0P/vC6f3Ntz5zfOg0Sjo07Om0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O2IGN/dJMcaf6CF0P/vC6f3Ntz5zfOg0Sjo07Om0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO2IGN%2FdJMcaf6CF0P%2FvC6f3Ntz5zfOg0Sjo07Om0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1298&quot; height=&quot;641&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 아키텍쳐에서 OpenVLA는 어떻게 &lt;b&gt;&quot;로봇의 Vision(시각)과 인간의 명령(Language)을 Input으로 받고, 이에 대한 적절한 Action을 출력&quot;&lt;/b&gt; 하는지의 과정에 대해 자세히 들여다봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아키텍쳐에도 굉장히 직관적으로 표현이 되어 있는데,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지 Input를 보고 &amp;lsquo;어떤 물체가, 어디에&amp;rsquo; 있는지를 알아낸다. &amp;lsquo;어떤 물체&amp;rsquo;를 보고 있는지는 SigLIP 모델이, &amp;lsquo;어디에&amp;rsquo; 있는지는 DINOv2 모델이 알아낸다.&lt;/li&gt;
&lt;li&gt;명령 Input의 경우 Llama Tokenizer로 전달된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 두 정보(이미지, 텍스트)가 모두 Llama-2 7B로 들어가게 됩니다. (Llama는 GPT와 맞먹을 정도로 굉장히 널리 쓰이는 LLM 모델입니다.) 대신 이 모델에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&amp;lsquo;적절한 Action을 출력하게끔&amp;rsquo; 하는 파인튜닝 과정&lt;/span&gt;을 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 &amp;lsquo;명령 이해&amp;rsquo;와 &amp;lsquo;그에 따른 행동 출력&amp;rsquo;의 경우 단순히 &lt;b&gt;명령 문장의 토크나이징 &amp;rarr; 다음 토큰 예측&lt;/b&gt;의 원리로 진행되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 &amp;lsquo;행동 명령&amp;rsquo;만 텍스트 토큰이 아니라 &amp;lsquo;로봇의 언어&amp;rsquo;로 번역한 &amp;lsquo;행동 토큰&amp;rsquo;(예를 들어, 팔을 오른쪽으로 10cm 움직이라는 명령)으로 출력되는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;IV. AIHub 데이터 소개&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLA 연구에 사용되는 대표적인 데이터셋으로는 구글에서 제공하는 Open X-Embodiment 데이터셋이나 구글 DeepMind의 RT-1 Dataset 등이 오픈소스로 접근 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://robotics-transformer-x.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://robotics-transformer-x.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771226709964&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Open X-Embodiment: Robotic Learning Datasets and RT-X Models&quot; data-og-description=&quot;Project page for Open X-Embodiment: Robotic Learning Datasets and RT-X Models.&quot; data-og-host=&quot;robotics-transformer-x.github.io&quot; data-og-source-url=&quot;https://robotics-transformer-x.github.io/&quot; data-og-url=&quot;https://robotics-transformer-x.github.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEoeZ1/dJMb8SXt7ZB/NwzUokAjEdZYJubtpenwrK/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642,https://scrap.kakaocdn.net/dn/5SmOx/dJMb8SXt7ZA/fK7JUaLMdKWjN444YnKcbK/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642,https://scrap.kakaocdn.net/dn/JKdAi/dJMb8RROeO6/tWka90KmiC9VgWJzJwgaak/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642&quot;&gt;&lt;a href=&quot;https://robotics-transformer-x.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://robotics-transformer-x.github.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEoeZ1/dJMb8SXt7ZB/NwzUokAjEdZYJubtpenwrK/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642,https://scrap.kakaocdn.net/dn/5SmOx/dJMb8SXt7ZA/fK7JUaLMdKWjN444YnKcbK/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642,https://scrap.kakaocdn.net/dn/JKdAi/dJMb8RROeO6/tWka90KmiC9VgWJzJwgaak/img.png?width=2040&amp;amp;height=642&amp;amp;face=0_0_2040_642');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Open X-Embodiment: Robotic Learning Datasets and RT-X Models&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Project page for Open X-Embodiment: Robotic Learning Datasets and RT-X Models.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;robotics-transformer-x.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 위에서도 설명한 바와 같이 2020년부터 쭉 트렌드를 유지하던 주제라, AIHub에서도 여러 데이터를 제공하고 있습니다. 세 가지 정도만 간단하게 소개하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 제조환경 사람-로봇 공유작업 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?pageIndex=1&amp;amp;currMenu=115&amp;amp;topMenu=100&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;searchKeyword=&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71820&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?pageIndex=1&amp;amp;currMenu=115&amp;amp;topMenu=100&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;searchKeyword=&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71820&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771226757785&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&quot; data-og-host=&quot;www.aihub.or.kr&quot; data-og-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?pageIndex=1&amp;amp;currMenu=115&amp;amp;topMenu=100&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;searchKeyword=&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71820&quot; data-og-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?aihubDataSe=data&amp;amp;currMenu=115&amp;amp;dataSetSn=71820&amp;amp;pageIndex=1&amp;amp;searchKeyword=&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;topMenu=100&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nEW1T/dJMb8SXt7ZF/kN8C9X0Rhk4Dkhxay2Uo1K/img.png?width=1071&amp;amp;height=897&amp;amp;face=0_0_1071_897,https://scrap.kakaocdn.net/dn/daBKQd/dJMb8YXHNpV/bsKVljmHppoTGAwAKWc2O0/img.png?width=1584&amp;amp;height=540&amp;amp;face=0_0_1584_540,https://scrap.kakaocdn.net/dn/bYRRXY/dJMb8U8PXNS/RJkdkBA6nJQsqbsckE1c00/img.png?width=1436&amp;amp;height=366&amp;amp;face=0_0_1436_366&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?pageIndex=1&amp;amp;currMenu=115&amp;amp;topMenu=100&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;searchKeyword=&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71820&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?pageIndex=1&amp;amp;currMenu=115&amp;amp;topMenu=100&amp;amp;srchOptnCnd=OPTNCND001&amp;amp;searchKeyword=&amp;amp;srchDetailCnd=DETAILCND001&amp;amp;srchOrder=ORDER001&amp;amp;srchPagePer=20&amp;amp;srchDataRealmCode=REALM011&amp;amp;srchDataRealmCode=REALM012&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71820&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nEW1T/dJMb8SXt7ZF/kN8C9X0Rhk4Dkhxay2Uo1K/img.png?width=1071&amp;amp;height=897&amp;amp;face=0_0_1071_897,https://scrap.kakaocdn.net/dn/daBKQd/dJMb8YXHNpV/bsKVljmHppoTGAwAKWc2O0/img.png?width=1584&amp;amp;height=540&amp;amp;face=0_0_1584_540,https://scrap.kakaocdn.net/dn/bYRRXY/dJMb8U8PXNS/RJkdkBA6nJQsqbsckE1c00/img.png?width=1436&amp;amp;height=366&amp;amp;face=0_0_1436_366');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 가정환경 사람-로봇 공유작업 데이터&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71821&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71821&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771226805009&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&quot; data-og-host=&quot;www.aihub.or.kr&quot; data-og-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71821&quot; data-og-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?aihubDataSe=data&amp;amp;currMenu=115&amp;amp;dataSetSn=71821&amp;amp;topMenu=100&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fnLYF/dJMb8TB5Us3/UrvBbbfyMUfH2ZkdOcUyrK/img.png?width=1152&amp;amp;height=895&amp;amp;face=0_0_1152_895,https://scrap.kakaocdn.net/dn/bI1L5h/dJMb8PGsvc0/9TOGM7R7ku8ccCFi6uAor0/img.png?width=1584&amp;amp;height=540&amp;amp;face=0_0_1584_540,https://scrap.kakaocdn.net/dn/FsbVl/dJMb8WevWJX/pF09Kj5mwbeIKAGkaw3s9k/img.png?width=1436&amp;amp;height=366&amp;amp;face=0_0_1436_366&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71821&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71821&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fnLYF/dJMb8TB5Us3/UrvBbbfyMUfH2ZkdOcUyrK/img.png?width=1152&amp;amp;height=895&amp;amp;face=0_0_1152_895,https://scrap.kakaocdn.net/dn/bI1L5h/dJMb8PGsvc0/9TOGM7R7ku8ccCFi6uAor0/img.png?width=1584&amp;amp;height=540&amp;amp;face=0_0_1584_540,https://scrap.kakaocdn.net/dn/FsbVl/dJMb8WevWJX/pF09Kj5mwbeIKAGkaw3s9k/img.png?width=1436&amp;amp;height=366&amp;amp;face=0_0_1436_366');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) 대규모 물리환경 로봇조작 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71825&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71825&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771226844314&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&quot; data-og-host=&quot;www.aihub.or.kr&quot; data-og-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71825&quot; data-og-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?aihubDataSe=data&amp;amp;currMenu=115&amp;amp;dataSetSn=71825&amp;amp;topMenu=100&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ddFZdx/dJMb88eWXZv/U9BpBNezShpvV4dhVKNMlk/img.png?width=1140&amp;amp;height=558&amp;amp;face=0_0_1140_558,https://scrap.kakaocdn.net/dn/qHFGc/dJMb87NSHvl/xx7RWoEW0cyIr8c1lSYmZ1/img.png?width=879&amp;amp;height=548&amp;amp;face=0_0_879_548,https://scrap.kakaocdn.net/dn/bjY8ai/dJMb8865dwq/cPvz2qixkqKpS1QaQhazuK/img.png?width=787&amp;amp;height=608&amp;amp;face=0_0_787_608&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71825&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=data&amp;amp;dataSetSn=71825&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ddFZdx/dJMb88eWXZv/U9BpBNezShpvV4dhVKNMlk/img.png?width=1140&amp;amp;height=558&amp;amp;face=0_0_1140_558,https://scrap.kakaocdn.net/dn/qHFGc/dJMb87NSHvl/xx7RWoEW0cyIr8c1lSYmZ1/img.png?width=879&amp;amp;height=548&amp;amp;face=0_0_879_548,https://scrap.kakaocdn.net/dn/bjY8ai/dJMb8865dwq/cPvz2qixkqKpS1QaQhazuK/img.png?width=787&amp;amp;height=608&amp;amp;face=0_0_787_608');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째의 '대규모 물리환경 로봇조작 데이터'의 경우 &lt;b&gt;&quot;한글 기반 데이터셋으로 OpenVLA를 구현할 수 있는가?&quot;&lt;/b&gt;에 집중하여 서술하고 있습니다. 실제 데이터의 경우 json 파일 형식으로 되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 연구에 쓰이는 데이터셋과 달리 한국어 기반으로 제작된 데이터셋이라는 점이 이점이 될 수 있으니 참고용으로 보시길 바라겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;V. 각종 논문리뷰 등&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VLA는 현 시점에서 다양한 세부적인 주제로 논문이 쏟아져나오는 주제이므로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문을 하나하나 찾아보고 읽는 건 힘듭니다. 중요한 논문만 골라보고 싶거나 한글로 된 정보가 필요하다면 논문 리뷰글을 찾아보는 게 도움이 되기 때문에 논문리뷰글을 따로 정리해두려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771227022229&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;시리즈 | VLA 논문 리뷰 - nyl0522.log&quot; data-og-description=&quot;[ Abstract ] 대규모, 다양한, 특정 Task에 얽매이지 않은 데이터셋으로부터 transferring knowledge을 함으로써, 모델은 특정 Task를 추가 데이터 없이 바로 수행하거나 소량의 과제별 데이터셋만으로도 높&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&quot; data-og-url=&quot;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJz0vd/dJMb85vLdwk/GpAhrcXM4wIglk2VKO6TrK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bzonXA/dJMb9b3OpFe/2atU6tGFRKtcCVqIHxg061/img.png?width=1280&amp;amp;height=665&amp;amp;face=0_0_1280_665,https://scrap.kakaocdn.net/dn/bHX9a9/dJMb9aKBrH5/xwunlptCBULdBnh4edGfHk/img.png?width=1015&amp;amp;height=826&amp;amp;face=0_0_1015_826&quot;&gt;&lt;a href=&quot;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@nyl0522/series/VLA-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJz0vd/dJMb85vLdwk/GpAhrcXM4wIglk2VKO6TrK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/bzonXA/dJMb9b3OpFe/2atU6tGFRKtcCVqIHxg061/img.png?width=1280&amp;amp;height=665&amp;amp;face=0_0_1280_665,https://scrap.kakaocdn.net/dn/bHX9a9/dJMb9aKBrH5/xwunlptCBULdBnh4edGfHk/img.png?width=1015&amp;amp;height=826&amp;amp;face=0_0_1015_826');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;시리즈 | VLA 논문 리뷰 - nyl0522.log&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[ Abstract ] 대규모, 다양한, 특정 Task에 얽매이지 않은 데이터셋으로부터 transferring knowledge을 함으로써, 모델은 특정 Task를 추가 데이터 없이 바로 수행하거나 소량의 과제별 데이터셋만으로도 높&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굉장히 잘 정리되어있는 글이 있어서 가져왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어가면 RT-1부터 RT-2, Open X-Embodiment, OpenVLA까지의 VLA 기술의 전반적인 굵직한 흐름에 따라 논문리뷰가 정리되어 있습니다. 마일스톤적인 논문들이기에 읽으면 도움이 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래는 그냥 개인적으로 흥미롭게 읽은 논문인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mimic-video.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mimic-video.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771227093965&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;mimic-video: Video-Action Models for Generalizable Robot Control Beyond VLAs&quot; data-og-description=&quot;Prevailing Vision-Language-Action Models (VLAs) for robotic manipulation are built upon vision-language backbones pretrained on large-scale, but disconnected static web data. As a result, despite improved semantic generalization, the policy must implicitly&quot; data-og-host=&quot;mimic-video.github.io&quot; data-og-source-url=&quot;https://mimic-video.github.io/&quot; data-og-url=&quot;https://mimic-video.github.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bMsFlb/dJMb8865dxA/W91kn0hqAkjdUVSNlfg0LK/img.png?width=2541&amp;amp;height=1005&amp;amp;face=0_0_2541_1005,https://scrap.kakaocdn.net/dn/cvgdLV/dJMb9g47ukI/G4FyWS3aU43bVCE5Kr6g3k/img.png?width=2366&amp;amp;height=945&amp;amp;face=0_0_2366_945,https://scrap.kakaocdn.net/dn/jqjBT/dJMb84p44Cj/eBHWhqen57Vypcr9yf8qt0/img.png?width=2366&amp;amp;height=851&amp;amp;face=0_0_2366_851&quot;&gt;&lt;a href=&quot;https://mimic-video.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mimic-video.github.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bMsFlb/dJMb8865dxA/W91kn0hqAkjdUVSNlfg0LK/img.png?width=2541&amp;amp;height=1005&amp;amp;face=0_0_2541_1005,https://scrap.kakaocdn.net/dn/cvgdLV/dJMb9g47ukI/G4FyWS3aU43bVCE5Kr6g3k/img.png?width=2366&amp;amp;height=945&amp;amp;face=0_0_2366_945,https://scrap.kakaocdn.net/dn/jqjBT/dJMb84p44Cj/eBHWhqen57Vypcr9yf8qt0/img.png?width=2366&amp;amp;height=851&amp;amp;face=0_0_2366_851');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;mimic-video: Video-Action Models for Generalizable Robot Control Beyond VLAs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Prevailing Vision-Language-Action Models (VLAs) for robotic manipulation are built upon vision-language backbones pretrained on large-scale, but disconnected static web data. As a result, despite improved semantic generalization, the policy must implicitly&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mimic-video.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bENO5L/dJMcafewG19/gtu9wqBVzOalrwVH0bAsX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bENO5L/dJMcafewG19/gtu9wqBVzOalrwVH0bAsX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bENO5L/dJMcafewG19/gtu9wqBVzOalrwVH0bAsX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbENO5L%2FdJMcafewG19%2Fgtu9wqBVzOalrwVH0bAsX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1255&quot; height=&quot;697&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Vision-Language-Action의 파이프라인 대신 Video-Action이라는 새로운 파이프라인을 제시한 연구입니다. (일명 VAM, Video-Action Model)&lt;/p&gt;</description>
      <category>Physical AI</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/22</guid>
      <comments>https://powderblue0.tistory.com/22#entry22comment</comments>
      <pubDate>Mon, 16 Feb 2026 16:32:19 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] ANN 모델링의 주요 개념</title>
      <link>https://powderblue0.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;593&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q48c1/dJMcacovYJz/IpJssqKRczK1QZFOKxwink/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q48c1/dJMcacovYJz/IpJssqKRczK1QZFOKxwink/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q48c1/dJMcacovYJz/IpJssqKRczK1QZFOKxwink/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq48c1%2FdJMcacovYJz%2FIpJssqKRczK1QZFOKxwink%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;593&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;593&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/20&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771167076532&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[딥러닝] ANN(인공신경망)의 원리&quot; data-og-description=&quot;이번 글에서는 딥러닝의 기본이 되는 ANN(Artificial Nerual Network, 인공신경망)의 원리에 대해 설명합니다. 사실 직관적으로 이해하기에 어려운 부분은 없는데, 많은 개념이 나오는 만큼 쉽게 까먹게 &quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/20&quot; data-og-url=&quot;https://powderblue0.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oD2YH/dJMb87NSFlP/DU6BOBNaE3kKzdgoWjZVZ1/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/A4nZC/dJMb83kperM/iSQeLtKOEzGh1PTuN9do4K/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/m3DZJ/dJMb87f2HTL/xQ3guCDoyJO66iW7tssQ6K/img.png?width=1905&amp;amp;height=895&amp;amp;face=0_0_1905_895&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oD2YH/dJMb87NSFlP/DU6BOBNaE3kKzdgoWjZVZ1/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/A4nZC/dJMb83kperM/iSQeLtKOEzGh1PTuN9do4K/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/m3DZJ/dJMb87f2HTL/xQ3guCDoyJO66iW7tssQ6K/img.png?width=1905&amp;amp;height=895&amp;amp;face=0_0_1905_895');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[딥러닝] ANN(인공신경망)의 원리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 딥러닝의 기본이 되는 ANN(Artificial Nerual Network, 인공신경망)의 원리에 대해 설명합니다. 사실 직관적으로 이해하기에 어려운 부분은 없는데, 많은 개념이 나오는 만큼 쉽게 까먹게&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서는 ANN의 기본적인 학습 과정에 대해 정리했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝은 많은 시행착오들을 거치며 발전해 왔습니다. 이론에서 나오는 대부분의 개념은 '원리 적용 &amp;rarr; 문제발생 &amp;rarr; 문제해결'의 흐름을 따라 진행됩니다. 그러나 그 흐름을 한번에 배우려고 하면 나오는 개념이 너무 많고 용어도 길고 헷갈리는지라, 한번에 배우려고 했다가는 오히려 아무것도 못 얻어가는 경우가 많다고 항상 느낍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번 글에서는 &lt;b&gt;&quot;실제로 모델을 만들 때 무엇을 알고 있어야 하고, 무엇을 유의해야 하는지&quot;&lt;/b&gt;에 조금 더 집중한 내용들을 정리하려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Activation Function은 어디에 넣는가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1.1. 활성화함수의 두 가지 역할&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1.2. 중간층에서의 비선형성 부여 (ReLU)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1.3. Task에 맞는 형태의 Output 출력&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. OverShooting(오버슈팅) 발생 시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.1. OverShooting 현상이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.2. 오버슈팅 발생의 신호&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.3. 오버슈팅의 해결 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Early Stopping &amp;amp; Scheduler&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3.1. Early Stopping (조기종료)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3.2. Scheduler&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Activation Function은 어디에 넣는가?&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.1. 활성화함수의 두 가지 역할&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서 '비선형성 확보를 위해 활성화함수가 필요하다'고 설명한 부분에 이어 조금 더 자세히 설명해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;실제로 모델을 만들고, 레이어들을 쌓아가는 과정에서 활성화함수의 역할은 두 가지&lt;/span&gt;로 나눌 수 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;(1) Hidden Layer에서의 비선형성 부여&lt;br /&gt;(2) 모델 Task에 맞는 형태의 Output 출력&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 둘을 나눠서 이해해야 실제로 코드를 작성할 때 헷갈리지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.2. 중간층에서의 비선형성 부여 (ReLU)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hidden Layer는 입력값을 받는 레이어와 출력값을 내는 레이어를 제외한 중간 부분을 통틀어 지칭합니다. Hidden Layer는 '중간층'이라고 번역되어 설명되고는 한데, '중간층'이라는 용어가 조금 더 직관적이니까 앞으로는 '중간층'이라고 부르겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1995&quot; data-origin-height=&quot;1033&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xt0sI/dJMcadt8NZa/XF5vuFqz9EcOfcMbjdqT41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xt0sI/dJMcadt8NZa/XF5vuFqz9EcOfcMbjdqT41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xt0sI/dJMcadt8NZa/XF5vuFqz9EcOfcMbjdqT41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxt0sI%2FdJMcadt8NZa%2FXF5vuFqz9EcOfcMbjdqT41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1995&quot; height=&quot;1033&quot; data-origin-width=&quot;1995&quot; data-origin-height=&quot;1033&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 설명에서의 '비선형성 확보를 위해 활성화함수가 필요하다'는 설명에 해당하는 것은 중간층에 해당하는 설명입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이어의 계산 과정에서 &quot;Input에 가중치를 곱한 후 모두 더하는 과정&quot;을 여러 번 반복해도 결국엔 선형적 결합으로만 남기 때문에, 이 &lt;b&gt;선형 관계를 비틀어주기 위해&lt;/b&gt; 비선형 활성화함수를 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAvQwg/dJMcadgEOSx/SoOY0GUZq1q9Ej8D1Idji1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAvQwg/dJMcadgEOSx/SoOY0GUZq1q9Ej8D1Idji1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAvQwg/dJMcadgEOSx/SoOY0GUZq1q9Ej8D1Idji1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAvQwg%2FdJMcadgEOSx%2FSoOY0GUZq1q9Ej8D1Idji1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;339&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보이는 것처럼 비선형 활성화함수에는 여러 종류가 있는데,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 쓰이는 것, 즉 알아둬야 할 것은 ReLU, Sigmoid, tanh 이렇게 세 개입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ReLU함수의 경우 음수에서는 0값을 가지고, 양수에서는 들어온 함수값을 그대로 뱉는, 단위 Ramp 함수와 동일합니다. (동일한 공식을 가지는 함수고, 쓰이는 용어만 다름)&lt;/li&gt;
&lt;li&gt;Sigmoid의 경우 자연상수를 포함한 공식으로 정의되는 연속함수이고,&lt;/li&gt;
&lt;li&gt;tanh함수의 경우 Hyperbolic Tangent를 의미하며 말 그대로 탄젠트 함수의 역함수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중 tanh, Sigmoid의 경우 역전파 시 Output &amp;rarr; Input 방향으로 나아가면서 각 weight 미분값의 계산 결과가 점점 사라지는, 이른바 Gradient Vanishing(기울기 손실) 문제를 야기하기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 그냥 ReLU를 사용합니다. &lt;b&gt;&quot;그냥 ReLU를 사용한다&quot;&lt;/b&gt;만 기억하면 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 코드에서는 중간층에서, Linear 레이어 뒤에 항상 ReLU를 붙여줘야 합니다. 이전에서 설명했듯이, Linear 레이어 두 개를 붙여 써도, 수학적으로는 하나의 Linear 레이어를 쓴 것과 동일한 효과를 내기 때문에 중간에 ReLU 층을 추가해 주는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771170300570&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self, input_dim):
        super().__init__()
        
        self.linear1 = nn.Linear(input_dim, 32)
        self.linear2 = nn.Linear(32,10)
        self.relu = nn.ReLU()
               
    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)      # 비선형 활성화함수
        x = self.linear2(x)
        
        return x&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 위 코드에서 중간에 x = self.relu(x)를 넣지 않는다면, linear1과 linear2를 연달아 쓰는 의미가 없어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 맨 마지막 linear2 층 뒤에 relu를 넣어주지 않는 이유는 중간층이 아니라, 단순히 출력값을 뱉는 마지막 출력층이기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.3. Task에 맞는 형태의 Output 출력&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화함수는 중간층에서는 비선형성을 부여하는 역할을 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Output 층에서는 Task에 맞는 형태의 Output을 출력하게끔 하는 역할을 합니다. 모델의 Task는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 회귀 (2) 이진분류 (3) 다중분류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 나눌 수 있는데, 회귀의 경우 숫자 자체를 예측하는 것이기 때문에 별다른 Output값 형태 조정이 필요하지 않습니다. 예를 들어 예측한 값이 0.88이면, 0.88 그대로 출력하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이진분류는 다릅니다. 0.88이 나온다면 0과 1 중에서 1에 가깝다고 판단하고, 1이라는 값을 출력해야 합니다. 이러한 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;출력 방식의 조정&lt;/span&gt;을 위해서도 활성화함수가 사용됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단&lt;b&gt; Output의 출력 상태 조절&lt;/b&gt;을 위해 마지막층에 활성화함수가 쓰인다는 사실만 기억하고, 이를 이진분류의 경우와 다중분류의 경우로 나눠서 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(1) 이진분류의 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이진분류의 경우 결과값이 0 혹은 1이어야 한다는 출력 형태의 제한이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 두 가지 형태로 구현할 수 있는데,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0 혹은 1의 형태가 나오도록, Sigmoid 함수를 모델 안에 넣는 경우 (별도의 Loss 함수 조정 없이)&lt;/li&gt;
&lt;li&gt;0 혹은 1의 형태가 나오도록 Loss 함수를 설정하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 Loss 함수 조정 없이, Sigmoid 함수를 모델 안에 넣는 경우는 다음과 같습니다. (이진분류이기 때문에 Loss함수는 BCE Loss를 사용한다고 가정합니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1771170668801&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

class BinaryModel(nn.Module):
    def __init__(self, input_dim):
        super().__init__()
        self.linear1 = nn.Linear(input_dim, 32)
        self.relu = nn.ReLU()
        self.linear2 = nn.Linear(32, 1)   # 이진분류이기 때문에 output_dim = 1
        self.sigmoid = nn.Sigmoid()  # 확률로 변환

    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)
        x = self.sigmoid(x)  # 마지막층에 sigmoid 활성화함수 포함
        return x


model = BinaryModel(input_dim=10)  
criterion = nn.BCELoss()     # BCELoss() 사용함&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 위 코드와 달리 Sigmoid 층을 모델 안에 (Output층에) 넣는 게 아니라, 아예 Loss 함수를 다르게 설정해서 0 혹은 1의 형태가 나오도록 조정하는 방법도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BCEWithLogitsLoss는 말그대로 Loss를 계산하는 과정에서 Sigmoid의 역할이 포함되기 때문에, Output층에 별도의 활성화함수를 넣을 필요가 없습니다. 정확히 말하면 Output층에 별도의 활성화함수를 추가해서는 &quot;안 되는&quot; 것입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771170723083&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

class BinaryModel(nn.Module):
    def __init__(self, input_dim):
        super().__init__()
        self.linear1 = nn.Linear(input_dim, 32)
        self.relu = nn.ReLU()
        self.linear2 = nn.Linear(32, 1)

    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)  # Output층에 Sigmoid 없음
        return x


model = BinaryModel_BCEWithLogits(input_dim=10)
criterion = nn.BCEWithLogitsLoss()    # BCEWighLogitLoss() 사용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의 경우 BCEWithLogitsLoss 불러올 때 대문자 소문자 구별만 잘 해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 다중분류의 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중분류의 경우도 동일한 흐름으로 진행됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원하는 레이블 출력이 나오도록, LogSoftmax 함수를 모델 안에 넣는 경우&lt;/li&gt;
&lt;li&gt;원하는 레이블 출력이 나오도록 , Loss 함수를 CrossEntropyLoss로 설정하는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 다중분류의 경우 후자의 경우를 압도적으로 많이 씁니다. 아니 그냥 후자의 경우만 쓴다고 생각하셔도 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771170842287&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn

class MulticlassModel(nn.Module):
    def __init__(self, input_dim):
        super().__init__()
        self.linear1 = nn.Linear(input_dim, 32)
        self.relu = nn.ReLU()
        self.linear2 = nn.Linear(32, 4)

    def forward(self, x):
        x = self.linear1(x)
        x = self.relu(x)
        x = self.linear2(x)  # 별도의 활성화함수 없음
        return x


model = MultiClassModel_CE(input_dim=10)
criterion = nn.CrossEntropyLoss()   # CrossEntropyLoss() 사용&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. OverShooting(오버슈팅) 발생 시&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1. OverShooting 현상이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서 모델 학습 과정에서의 파라미터 업데이트는 손실함수의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;가장 가파른 내리막길의 방향으로 파라미터를 한 걸음 이동시키는&lt;/span&gt; 원리로 진행된다고 설명한 바 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8VvY1/dJMcajnAQdX/PToLjkK6lFQM6bGwGeUz21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8VvY1/dJMcajnAQdX/PToLjkK6lFQM6bGwGeUz21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8VvY1/dJMcajnAQdX/PToLjkK6lFQM6bGwGeUz21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8VvY1%2FdJMcajnAQdX%2FPToLjkK6lFQM6bGwGeUz21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;738&quot; height=&quot;436&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 실제 모델의 학습 과정에서는 OverShooting(오버슈팅) 현상이 일어나기도 하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Over Shotting(오버슈팅) 현상이란 파라미터 업데이트 과정에서 최소점을 향해 한 걸음씩 앞으로 나아가다가, 최소점을 지나버리는 현상입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkteJ/dJMcah4q9VP/LU5vlCEHaPmObeCCFZTh71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkteJ/dJMcah4q9VP/LU5vlCEHaPmObeCCFZTh71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkteJ/dJMcah4q9VP/LU5vlCEHaPmObeCCFZTh71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkteJ%2FdJMcah4q9VP%2FLU5vlCEHaPmObeCCFZTh71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;737&quot; height=&quot;196&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학적으로 보면 이런데, 코드 작성하면서 수학 공식까지 같이 적을 거 아니니까 스킵하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오버슈팅 현상의 근본적인 원인은 &quot;앞으로 한 걸음 나아갈&quot; 때 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&quot;한 걸음의 크기가 너무 커서&quot;&lt;/span&gt; 발생하는 것입니다. 여기서 말하는 &quot;한 걸음의 크기&quot;를 learning rate(코드에서는 lr)라 합니다. 우선은 오버슈팅 발생을 의심해볼 만한 신호들에 대해 알아봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.2. 오버슈팅 발생의 신호&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 학습 과정에서 오버슈팅이 발생했다고 의심할 수 있는 신호는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫째는, Epoch에 따른 Loss 그래프가 안정적으로 감소하지 않는 경우입니다. 들쭉날쭉하게 진동하는 경우와, 수렴하지 않고 출렁이는 경우를 모두 포함합니다.&lt;/li&gt;
&lt;li&gt;둘째는, Epoch에 따른 Loss 그래프가 발산하는 경우입니다. 첫 번째 상황에서 더욱 악화된 상태로, Loss가 줄어들지 않고 오히려 증가하는 경우입니다.&lt;/li&gt;
&lt;li&gt;셋째는, weight값이 커졌다 작아졌다를 반복하는 경우입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로는 안정적인 학습을 위해 Epoch에 따른 Loss 그래프를 확인할 필요가 있고, 그래프가 여러분들이 아는 그런 이상적인 형태에서 벗어난 경우 의심해 볼 만 하다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUjCN9/dJMcagdpeGB/vGZCN4oPiQO2KuKKFDkxU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUjCN9/dJMcagdpeGB/vGZCN4oPiQO2KuKKFDkxU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUjCN9/dJMcagdpeGB/vGZCN4oPiQO2KuKKFDkxU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUjCN9%2FdJMcagdpeGB%2FvGZCN4oPiQO2KuKKFDkxU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;368&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진은 아래 링크에서 가져온 건데, 읽어볼 만 한 내용이니 참고하세용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771171352124&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;LSTM Epoch Size Choice&quot; data-og-description=&quot;Epoch size represents the total number of iterations the data is run through the optimizer[18] Too few epochs, then the model will prematurely stop learning and will not grasp the full knowledge of&amp;hellip;&quot; data-og-host=&quot;deepdatascience.wordpress.com&quot; data-og-source-url=&quot;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&quot; data-og-url=&quot;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dqTpla/dJMb9c9uc9I/z3aIE92A4QhF1GiGah2Mpk/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368,https://scrap.kakaocdn.net/dn/cu3gg1/dJMb9eTLWWR/E8iKbCgr5kFClMTCVlwqG0/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368,https://scrap.kakaocdn.net/dn/eg6Qar/dJMb9kl87cY/yGELxdAwpKdb5VLCCl5hO1/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368&quot;&gt;&lt;a href=&quot;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://deepdatascience.wordpress.com/2016/11/18/lstm-epoch-size/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dqTpla/dJMb9c9uc9I/z3aIE92A4QhF1GiGah2Mpk/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368,https://scrap.kakaocdn.net/dn/cu3gg1/dJMb9eTLWWR/E8iKbCgr5kFClMTCVlwqG0/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368,https://scrap.kakaocdn.net/dn/eg6Qar/dJMb9kl87cY/yGELxdAwpKdb5VLCCl5hO1/img.jpg?width=425&amp;amp;height=368&amp;amp;face=0_0_425_368');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;LSTM Epoch Size Choice&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Epoch size represents the total number of iterations the data is run through the optimizer[18] Too few epochs, then the model will prematurely stop learning and will not grasp the full knowledge of&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;deepdatascience.wordpress.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.3. 오버슈팅의 해결 방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(1) lr 줄이기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오버슈팅의 근본적인 원인은 &lt;b&gt;&quot;한 걸음 나아갈 때의 그 한 걸음이 너무 크다&quot;&lt;/b&gt;, 즉 learning rate가 너무 크게 설정되어 있기 때문이기에, 기본적인 해결 방법은 일단 learning rate를 줄이는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 Optimizer를 선언할 때 lr를 같이 선언한 것을 기억하신다면, 단순히 여기서 설정하는 lr의 크기를 더 줄여주면 됩니다. lr는 보통 0.01에서 시작하고, 줄일 떄는 1/10배씩 줄이는 것이 통상적입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니까, 0.01에서 0.01 &amp;rarr; 1e-4 &amp;rarr; 1e-5 의 순으로 줄여나가는 것이죠.&lt;/p&gt;
&lt;pre id=&quot;code_1771171474889&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.optim as optim

optimizer = optim.SGD(model.parameters(), lr=0.01)
optimizer = optim.SGD(model.parameters(), lr=1e-3)
optimizer = optim.SGD(model.parameters(), lr=1e-4)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게는 이런 식으로 줄여 나가면 됩니다. 여기서 1e-4의 경우 10의 -4승을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lr를 조금 더 효율적으로 줄이는 방법으로는 Scheduler를 이용하는 방법도 있는데 이건 '3.2.Scheduler'에서 자세히 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) Momentum 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Momentum은 옵티마이저의 발전 과정에서 나온 개념인데, 경사하강법에서 &quot;어떻게 나아갈지&quot;를 결정하는 최적화 알고리즘에 해당합니다. 정확히는 &quot;Momentum 알고리즘&quot;이라는 표현이 맞다고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 원리는 이전의 이동 방향을 기억해서, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;현재 기울기와 과거 기울기의 누적을 반영하여 이동&lt;/span&gt;하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 자체에 대한 자세한 설명은 아래 링크에서 참고하시면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bruders.tistory.com/93&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bruders.tistory.com/93&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771171731959&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;최적화 알고리즘 (ft. Momentum, RMSprop, Adam)&quot; data-og-description=&quot;경사 하강법보다 빠른 몇 가지 최적화 알고리즘이 존재한다. 그 알고리즘들을 이해하기 위해서는 먼저 지수 가중 평균(Exponentially weighted averages)을 이해해야한다지수 가중 평균에 대한 글은 아래&quot; data-og-host=&quot;bruders.tistory.com&quot; data-og-source-url=&quot;https://bruders.tistory.com/93&quot; data-og-url=&quot;https://bruders.tistory.com/93&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqF780/dJMb9fZrCc1/jZHdgYDCn5bIwmuTe3ZUK1/img.png?width=800&amp;amp;height=449&amp;amp;face=0_0_800_449,https://scrap.kakaocdn.net/dn/c2L8kb/dJMb9eTLWXj/L3VB5CLfnE2NGrMbbniKiK/img.png?width=800&amp;amp;height=449&amp;amp;face=0_0_800_449,https://scrap.kakaocdn.net/dn/tWz8f/dJMb9cBEpG1/J4epX5TsNy0HIqYrSxT6l1/img.png?width=1596&amp;amp;height=711&amp;amp;face=0_0_1596_711&quot;&gt;&lt;a href=&quot;https://bruders.tistory.com/93&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bruders.tistory.com/93&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqF780/dJMb9fZrCc1/jZHdgYDCn5bIwmuTe3ZUK1/img.png?width=800&amp;amp;height=449&amp;amp;face=0_0_800_449,https://scrap.kakaocdn.net/dn/c2L8kb/dJMb9eTLWXj/L3VB5CLfnE2NGrMbbniKiK/img.png?width=800&amp;amp;height=449&amp;amp;face=0_0_800_449,https://scrap.kakaocdn.net/dn/tWz8f/dJMb9cBEpG1/J4epX5TsNy0HIqYrSxT6l1/img.png?width=1596&amp;amp;height=711&amp;amp;face=0_0_1596_711');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;최적화 알고리즘 (ft. Momentum, RMSprop, Adam)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;경사 하강법보다 빠른 몇 가지 최적화 알고리즘이 존재한다. 그 알고리즘들을 이해하기 위해서는 먼저 지수 가중 평균(Exponentially weighted averages)을 이해해야한다지수 가중 평균에 대한 글은 아래&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bruders.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 작성 시 중요한 건 파라미터로 momentum이 추가된다는 것이고 &lt;b&gt;보통은 0.9를 쓴다&lt;/b&gt;는 사실만 기억하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771171788504&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.optim as optim
optimizer = optim.SGD(model.parameters(),lr=1e-3,momentum=0.9)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밑에서도 설명하겠지만 요즘은 Momentum과 RMSProp를 결합한 Adam이 압도적으로 많이 쓰이기 때문에, 개인적으로는 실제 모델링 과정에서 모멘텀 알고리즘 자체에 대해 자세히 알 필요는 없다고 생각합니다. (그러니까 웬만하면 Adam 쓰세여 여러분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(3) RMSProp 혹은 Adam 이용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RMSProp 알고리즘의 경우 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;기울기가 큰 방향으로는 lr를 줄이고, 반대로 울기가 작은 방향은 lr를 증가시키는&lt;/span&gt; 등 lr를 기울기에 따라 유동적으로 조절하는 것이 핵심입니다. 그리고 이러한 RMSProp을 Momentum과 결합한 것이 Adam 옵티마이저인 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국에는 &lt;b&gt;&quot;파라미터를 어떻게 오버슈팅 없이 업데이트 시킬 것인가?&quot;&lt;/b&gt; 하는 질문에서 출발하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Momentum &amp;rarr; RMSProp &amp;rarr; Adam 이런 식으로 발전해온 것이기 때문에, 특별한 사유가 없는 이상 Adam을 이용하시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771172087771&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.optim as optim
optimizer = optim.RMSprop(model.parameters(),lr=1e-3,
                          alpha=0.99)
optimizer = optim.Adam(model.parameters(),lr=1e-3,
                       betas=(0.9, 0.999))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 살펴보자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RMSProp는 alpha라는 파라미터가 추가되는데, 통상적으로 0.99 기본값 유지하여 사용하는 경우가 대부분이고, Adam의 경우는 betas가 추가되는데 이것도 통상적으로 기본값 그대로 씁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Early Stopping &amp;amp; Scheduler&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 설명한 것들의 연장선에서, 실제로 많이 쓰이는 Early Stopping과 Scheduler에 대해 조금 더 자세히 정리해보겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.1. Early Stopping (조기종료)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 모델을 학습시키는 과정에서는 모델을 처음 학습시킬 때 적절한 epoch를 알기 어렵기에, 우선 임의의 epoch를 정하여 사용하게 됩니다. 그런데 임의의 epoch를 사용하였을 때의 문제점은 과적합 발생 가능성이 있다는 것이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 방지하기 위해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;모델이 어느 정도 학습을 했다고 판단하면, 모델의 학습을 자동으로 중단&lt;/span&gt;하는 Early Stopping(조기종료)가 널리 사용됩니다. (사실상 Early Stopping의 개념 자체는 어렵지 않습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실전에서는 적당한 epoch 설정 후 모델 학습을 시킨 다음, 모델 성능이 과하게 좋은 경우 과적합을 의심해보고 이를 해결하기 위해 Early Stopping을 추가적으로 시도하는 것도 좋지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 그냥 처음부터 Early Stopping을 적용하여 과적합의 발생 가능성을 사전에 방지합니다. (어디서 한 말은 아니고, 그냥 제 경험상 그렇습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드를 보고 알아봅시다. (DataLoader를 사용한 코드라 복잡할 수도 있지만, 중요한 건 if-else 문이 포함된 맨 마지막 부분입니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1771172472085&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch

patience = 5
best_val_loss = float('inf')
counter = 0

for epoch in range(100):

    model.train()    # 모델 학습 과정
    for x, y in train_loader:
        optimizer.zero_grad()
        output = model(x)
        loss = criterion(output, y)
        loss.backward()
        optimizer.step()

    model.eval()    # 모델 평가 과정
    val_loss = 0
    with torch.no_grad():
        for x, y in val_loader:
            output = model(x)
            loss = criterion(output, y)
            val_loss += loss.item()

    val_loss /= len(val_loader)
    print(f&quot;Epoch {epoch}, Val Loss: {val_loss:.4f}&quot;)
    
    # Early Stopping 부분
    if val_loss &amp;lt; best_val_loss:    
        best_val_loss = val_loss
        counter = 0
        torch.save(model.state_dict(), &quot;best_model.pt&quot;)  # Best Model 저장
    else:
        counter += 1

    if counter &amp;gt;= patience:
        break&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 작성 시 통상적으로 patience 변수와 counter 변수를 선언해서, counter가 patience를 넘어가면 학습을 중지하는 루프를 써줍니다. 여기서 counter 변수는 성능이 개선되지 않은 epoch를 세는 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드의 핵심이 되는 부분만을 놓고 보면 바로 이해 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771172605321&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    if val_loss &amp;lt; best_val_loss:    # 가장 좋은 모델
        best_val_loss = val_loss
        counter = 0
        torch.save(model.state_dict(), &quot;best_model.pt&quot;)  # Best Model 저장
    else:
        counter += 1     # 성능 개선이 되지 않는 경우, counter += 1

    if counter &amp;gt;= patience:   # counter가 patience를 넘어가면, 학습 종료
        print(&quot;Early Stopping 발생&quot;)
        break&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.2. Scheduler&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scheduler는 위에서 서술한 learning rate의 연장선에 있는 개념으로, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;학습 도중에 learning rate를 자동으로 조절&lt;/span&gt;하는 장치입니다. 딥러닝 과정에서 오버슈팅이 발생한 경우 혹은 오버슈팅 발생이 의심되는 경우 사용 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 다음과 같습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 초반에는 큰 lr를 사용하여 빠르게 탐색을 진행하고,&lt;br /&gt;- 후반에는 작은 lr를 사용하여 안정적인 수렴을 목표로 함.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종류는 여러 가지가 있는데, 좀 많으니까 설명은 생략하겠습니다... 궁금하신 분들 아래 링크 한 번 읽어보세요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hichoe95.tistory.com/131&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hichoe95.tistory.com/131&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771172771207&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드&quot; data-og-description=&quot;학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드 포스트 요약: 주요 PyTorch 학습률 스케줄러인 StepLR, ExponentialLR, CosineAnnealingLR, OneCycleLR, ReduceLROnPlateau의 동작 원리와 설정 방법을 상세히 설명하고,&quot; data-og-host=&quot;hichoe95.tistory.com&quot; data-og-source-url=&quot;https://hichoe95.tistory.com/131&quot; data-og-url=&quot;https://hichoe95.tistory.com/131&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vaNoL/dJMb8RROcM9/iefkw8cp4RDlWpLiTyhvY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/barRIm/dJMb8T9VKnq/XK7km2tnkKNRdFDeEgMYVk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bFXxVF/dJMb8QeiuYB/8NvbtePxEal2kFyDet2vf1/img.jpg?width=2268&amp;amp;height=4032&amp;amp;face=0_0_2268_4032&quot;&gt;&lt;a href=&quot;https://hichoe95.tistory.com/131&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hichoe95.tistory.com/131&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vaNoL/dJMb8RROcM9/iefkw8cp4RDlWpLiTyhvY1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/barRIm/dJMb8T9VKnq/XK7km2tnkKNRdFDeEgMYVk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bFXxVF/dJMb8QeiuYB/8NvbtePxEal2kFyDet2vf1/img.jpg?width=2268&amp;amp;height=4032&amp;amp;face=0_0_2268_4032');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;학습률 스케줄러(Learning Rate Scheduler) 완벽 가이드 포스트 요약: 주요 PyTorch 학습률 스케줄러인 StepLR, ExponentialLR, CosineAnnealingLR, OneCycleLR, ReduceLROnPlateau의 동작 원리와 설정 방법을 상세히 설명하고,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hichoe95.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 코드를 살펴보면 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771172833368&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.optim as optim

optimizer = optim.Adam(model.parameters(), lr=0.1)
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 Optimizer를 기존의 선언과 동일한 방법으로 선언해줍니다. 이후 scheduler를 알맞게 선언합니다. 변수 선언 순서는 반드시 Optimizer &amp;rarr; Scheduler 순서어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터로 들어있는 step_size = 10이라는 것은 10 epoch마다 lr을 줄인다는 의미이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gamma = 0.1이라는 것은 lr을 줄일 때, 0.1배씩 줄여나간다는 것입니다. gamma = 10이 아님에 주의하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 학습코드에서는 학습루프 안에 optimizer.step()을 넣는 것까지는 동일하고, epoch가 끝나고 나서 scheduler.step()도 추가해줘야 합니다. (StepLR의 경우)&lt;/p&gt;
&lt;pre id=&quot;code_1771172949364&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = MyModel(input_dim=100)
criterion = nn.CrossEntropyLoss()

num_epochs = 30

for epoch in range(num_epochs):
    model.train()
    total_loss = 0.0

    for inputs, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        total_loss += loss.item()

    scheduler.step()   # epoch 끝나고 나서 scheduler.step()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 제가 사용한 예시는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V01cA/dJMb996ploi/OtdsJZFMgGt6a2HJ4IiVe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V01cA/dJMb996ploi/OtdsJZFMgGt6a2HJ4IiVe1/img.png&quot; data-alt=&quot;Scheduler 사용하지 않은 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V01cA/dJMb996ploi/OtdsJZFMgGt6a2HJ4IiVe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV01cA%2FdJMb996ploi%2FOtdsJZFMgGt6a2HJ4IiVe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;606&quot; height=&quot;420&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Scheduler 사용하지 않은 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 이미지는 Scheduler를 사용하지 않은 경우의 Epoch에 따른 Loss 그래프이고,&lt;/p&gt;
&lt;pre id=&quot;code_1771173161146&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.optim as optim

criterion = nn.BCEWithLogitsLoss()  
optimizer = optim.Adam(model_sc.parameters(), lr=0.01)

scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=100, gamma=0.5)      # 100 epoch마다 lr을 0.5배로 줄임

num_epochs = 1000
train_losses = []
test_losses = []

for epoch in range(num_epochs + 1):
    pred = model_sc(X_train)
    loss = criterion(pred, y_train)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    scheduler.step()        # 스케쥴러 업데이트&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 scheduler를 선언하고 업데이트 과정을 추가해주면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5h3Ly/dJMcabpDPR0/03KdMpdzteCW2b9vyiYeL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5h3Ly/dJMcabpDPR0/03KdMpdzteCW2b9vyiYeL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5h3Ly/dJMcabpDPR0/03KdMpdzteCW2b9vyiYeL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5h3Ly%2FdJMcabpDPR0%2F03KdMpdzteCW2b9vyiYeL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;588&quot; height=&quot;402&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 조금은 안정적으로 변하게 됩니다. (실제로 모델 예측 성능은 크게 증가하진 않았으나, 안정적인 학습이 가능)&lt;/p&gt;</description>
      <category>머신러닝, 딥러닝</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/21</guid>
      <comments>https://powderblue0.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 16 Feb 2026 01:34:26 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝] ANN(인공신경망)의 원리</title>
      <link>https://powderblue0.tistory.com/20</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X9yR9/dJMcaiPKt0h/E6R3lyBsMuSt33LnLkUWpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X9yR9/dJMcaiPKt0h/E6R3lyBsMuSt33LnLkUWpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X9yR9/dJMcaiPKt0h/E6R3lyBsMuSt33LnLkUWpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX9yR9%2FdJMcaiPKt0h%2FE6R3lyBsMuSt33LnLkUWpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1832&quot; height=&quot;850&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 딥러닝의 기본이 되는 ANN(Artificial Nerual Network, 인공신경망)의 원리에 대해 설명합니다. 사실 직관적으로 이해하기에 어려운 부분은 없는데, 많은 개념이 나오는 만큼 쉽게 까먹게 되는 것 같아서 정리해 두려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝이란 건 결국 &quot;생각하는 신경망&quot;의 설계, 즉 &lt;b&gt;생각하는 방법의 설계&lt;/b&gt;와도 같습니다. 이번 글의 경우&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;딥러닝 모델을 실제로 만들 때 알고 있어야 하는 부분&lt;/li&gt;
&lt;li&gt;전체적인 학습의 흐름&lt;/li&gt;
&lt;li&gt;개념적으로 헷갈릴 수도 있는 부분들&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위주로 정리하려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터 준비: Feature Data와 Target Data&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 데이터를 작은 단위로 나눈다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.1. Batch의 개념&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.2. BGD, SGD, MGD의 차이 알기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2.3. DataLoader를 이용한 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 레이어 통과&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3.1. ANN의 기본 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3.2. 활성화함수의 필요성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 최종 예측값의 손실 계산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.1. 전체적인 학습 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4.2. Loss Function과 Cost Function은 어떻게 다른가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 파라미터의 업데이트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;5.1. 파라미터 업데이트 과정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;5.2. PyTorch 예시 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 데이터 준비: Feature Data와 Target Data&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습 모델을 만들기 전에 먼저 확실하게 정해두고 시작해야 하는 것이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 모델이 해결해야 하는 과제가 무엇인지 (과제정의, 회귀인지 분류인지)&lt;br /&gt;- Feature와 Target이 각각 무엇인지&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 모델을 만들든, 얼마나 복잡한 과제를 해결하든, 어떤 데이터 (시계열데이터/ 텍스트데이터/ 이미지데이터/ 간단한 csv 파일 등등..) 든 이 두 가지는 항상 명확히 정해두고 시작해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;895&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vopqe/dJMcahi5kd2/mwIYfSiR5KjdQLdeyMK8P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vopqe/dJMcahi5kd2/mwIYfSiR5KjdQLdeyMK8P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vopqe/dJMcahi5kd2/mwIYfSiR5KjdQLdeyMK8P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVopqe%2FdJMcahi5kd2%2FmwIYfSiR5KjdQLdeyMK8P0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1905&quot; height=&quot;895&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;895&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째로 언급한 '모델이 해결해야 하는 과제'의 경우, 무언가를 시작할 때 그것의 목적을 정하는 과정을 뜻합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번쨰로 언급한 'Featrue와 Target의 정의'는 쉽게 말해, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;모델이 무엇을 받고 무엇을 내뱉을지&lt;/span&gt;를 명확히 해주어야 한다는 뜻입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Feature Data는 Input Data이다.&lt;/li&gt;
&lt;li&gt;Target Data는 Output Data이다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 쉽게는 다음과 같이 생각하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feature와 Target이 될 데이터들을 정의하고, 그에 맞게 데이터를 준비했다면, 데이터를 작은 단위로 나눠주는 과정을 거칩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 데이터를 작은 단위로 나눈다.&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.1. Batch의 개념&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지도학습에서 Batch의 개념은,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'데이터가 1000개 있을 때, 이 데이터를 하나하나 학습시킬 것인가?'의 질문에서 시작합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 이야기하자면 Batch는 &lt;b&gt;모델의 파라미터를 한 번 업데이트하기 위해 사용되는 데이터의 묶음&lt;/b&gt;을 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 지도학습의 개념을 설명할 때 수험생키우기에 주로 비유를 하곤 하는데,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxIrpq/dJMcagj8ygg/sK4Tik221rPvrgcpEEDsjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxIrpq/dJMcagj8ygg/sK4Tik221rPvrgcpEEDsjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxIrpq/dJMcagj8ygg/sK4Tik221rPvrgcpEEDsjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxIrpq%2FdJMcagj8ygg%2FsK4Tik221rPvrgcpEEDsjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;296&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 '무언가를 배우는 과정' 즉 '학습'을 위해서는 '정답을 확인'하는 시간이 필요한데 (수험생이 틀렸는지 아닌지를 알기 위해 채점을 해야 수험생이 잘 배울 수 있는 것과 같은 논리입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이떄 Batch의 설정은 1000개의 문제를 풀 때, '몇 문제를 풀 때마다 정답지를 보고 채점을 할 것인지'를 정하는 과정에 해당합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.2. BGD, SGD, MGD의 차이 알기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의서의 '몇 문제를 풀 때마다 정답지를 확인할지'에 대한 대답은 세 가지로 나눌 수 있습니다. 일일히 설명하는 건 시간낭비니까, 간단하게 표로 대체할게요..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PuCqK/dJMcafevGi4/pRcXXkwS83npB9moMUBAQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PuCqK/dJMcafevGi4/pRcXXkwS83npB9moMUBAQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PuCqK/dJMcafevGi4/pRcXXkwS83npB9moMUBAQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPuCqK%2FdJMcafevGi4%2FpRcXXkwS83npB9moMUBAQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;233&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 건 BGD &amp;rarr; SGD &amp;rarr; MGD 순으로 발전해왔고, 요즘은 MGD(Mini-Batch GD)를 사용한다는 것입니다. 그래서 보통 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;'데이터를 배치 단위로 나눈다'라고 하면 MGD를 사용한다는 뜻&lt;/span&gt;이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헷갈릴 수 있는데, 그러니까 BGD(Batch Gradient Descent)는 이름과는 달리 실제로 배치 단위로 데이터를 나누는 건 아니라는 뜻이 됩니다. 이는 Batch라는 용어가 초기 하나의 데이터셋을 지칭하는 용어에서 데이터의 묶음을 지칭하는 용어로 변화했기 때문...이지만 이런 건 중요하진 않고, 중요한 건 MGD니까 그것만 기억하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 사용되는 용어는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Batch Size(배치 사이즈): 한 번에 학습할 데이터의 개수&lt;/li&gt;
&lt;li&gt;iteration: 전체 데이터를 한 번 다 훑기 위해 배치를 몇 번 돌렸는가?&lt;/li&gt;
&lt;li&gt;epoch: 전체 데이터셋을 총 몇 번 반복해서 보았는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 1000개 데이터에서 Batch Size가 32라면 1000개의 데이터를 담고 있는 데이터셋을 한 번 학습하기 위해서는 1000&amp;divide;32 = 31.25 , 즉 올림하여 32회의 iteration이 필요한 것이 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;32회의 iteration을 돌면 그것이 1 epoch가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.3. DataLoader를 이용한 코드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이토치의 경우 DataLoader를 이용하여 데이터를 간단하게 나눌 수 있습니다. 가장 간단한 코드는 다음과 같고&lt;/p&gt;
&lt;pre id=&quot;code_1771071260139&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from torch.utils.data import DataLoader
loader = DataLoader(dataset=data, batch_size=32, shuffle=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 train 데이터와 test 데이터를 구분하다 보니 다음과 같이 사용하게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1771071285125&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from torchl.utils.data import DataLoader
train = DataLoader(dataset=train, batch_size=32, shuffle=True)
test = DataLoader(dataset=test, batch_size=32, shuffle=False)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 test 데이터는 shuffle=False로 설정해 줍니다. 왜냐하면 각기 다른 모델의 성능을 비교할 때, 매번 같은 순서로 test 데이터를 돌려야 같은 기준으로 평가가 가능하기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 레이어 통과&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.1. ANN의 기본 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ANN의 가장 작은 단위인 노드(node)부터 설명을 하기에는 제가 지식도 부족하고 하니, 이번 글에서는 꼭 알아야 한다 싶은 것들만(Layer부터) 정리해두려고 합니다. 노드부터 시작되는 개념은 아래 링크 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://insoobaik.tistory.com/663&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://insoobaik.tistory.com/663&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771071421535&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ANN(Artificial Neural Network)에 대하여&quot; data-og-description=&quot;■ ANN(Artificial Neural Network)&amp;nbsp;ANN은 생물학적 신경망을 본떠 만든 컴퓨팅 시스템으로, 데이터 처리와 패턴 인식에 사용된다. ANN은 뉴런으로 불리는 노드의 집합으로 구성되며, 뉴런은 층(layer)로 조&quot; data-og-host=&quot;insoobaik.tistory.com&quot; data-og-source-url=&quot;https://insoobaik.tistory.com/663&quot; data-og-url=&quot;https://insoobaik.tistory.com/663&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/moPvX/dJMb9b3OjdC/dmq3A4tKtgTCRzwUKnGzT1/img.png?width=709&amp;amp;height=437&amp;amp;face=0_0_709_437,https://scrap.kakaocdn.net/dn/bq3gLg/dJMb9bvYxUX/BHN7O2krxnHhYVe8aEopJK/img.png?width=709&amp;amp;height=437&amp;amp;face=0_0_709_437,https://scrap.kakaocdn.net/dn/ltGYD/dJMb9kTZbRL/74vpxKZc0p6X5guBFtTVe0/img.png?width=646&amp;amp;height=522&amp;amp;face=0_0_646_522&quot;&gt;&lt;a href=&quot;https://insoobaik.tistory.com/663&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://insoobaik.tistory.com/663&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/moPvX/dJMb9b3OjdC/dmq3A4tKtgTCRzwUKnGzT1/img.png?width=709&amp;amp;height=437&amp;amp;face=0_0_709_437,https://scrap.kakaocdn.net/dn/bq3gLg/dJMb9bvYxUX/BHN7O2krxnHhYVe8aEopJK/img.png?width=709&amp;amp;height=437&amp;amp;face=0_0_709_437,https://scrap.kakaocdn.net/dn/ltGYD/dJMb9kTZbRL/74vpxKZc0p6X5guBFtTVe0/img.png?width=646&amp;amp;height=522&amp;amp;face=0_0_646_522');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ANN(Artificial Neural Network)에 대하여&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;■ ANN(Artificial Neural Network)&amp;nbsp;ANN은 생물학적 신경망을 본떠 만든 컴퓨팅 시스템으로, 데이터 처리와 패턴 인식에 사용된다. ANN은 뉴런으로 불리는 노드의 집합으로 구성되며, 뉴런은 층(layer)로 조&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;insoobaik.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ANN 기반의 모델은 여러 레이어(Layer)로 구성됩니다. 가장 간단한 형태의 레이어를 보자면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1990&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEfCmi/dJMcabJVW9Y/BMrrZWKtHg6GBvxwXBDxjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEfCmi/dJMcabJVW9Y/BMrrZWKtHg6GBvxwXBDxjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEfCmi/dJMcabJVW9Y/BMrrZWKtHg6GBvxwXBDxjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEfCmi%2FdJMcabJVW9Y%2FBMrrZWKtHg6GBvxwXBDxjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1990&quot; height=&quot;581&quot; data-origin-width=&quot;1990&quot; data-origin-height=&quot;581&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ANN을 구성하는 레이어라는 건 쉽게 말하면, Input을 받아서 Output을 출력하는 하나의 층입니다. Output을 계산할 때는 위의 이미지와 같이, 우선 각 Input에 적절한 가중치 weight(w)를 곱한 값을 모두 더한 후, 적절한 bias(b)를 더한 가중합을 계산합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bat4jH/dJMcabb3E9s/RvutMB8vczMMz7epLeeXmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bat4jH/dJMcabb3E9s/RvutMB8vczMMz7epLeeXmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bat4jH/dJMcabb3E9s/RvutMB8vczMMz7epLeeXmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbat4jH%2FdJMcabb3E9s%2FRvutMB8vczMMz7epLeeXmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1832&quot; height=&quot;850&quot; data-origin-width=&quot;1832&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이어를 여러 층으로 겹치면 이런 느낌이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.2. 활성화함수의 필요성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 '각 Input의 가중치와, 적절한 bias를 계산하는 것을 반복하는 것만으로 우너하는 Task를 수행하는 모델을 만들 수 있는가?' 라는 질문을 던질 수 있습니다. 대답은 No입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 수학적으로 &quot;Input에 가중치를 곱한 후 모두 더하는&quot; 과정을 여러 번 반복해도 결국엔 선형적 결합으로만 남기 때문입니다. 선형대수학적으로 설명한다면 '걸국 선형 관계는 선형 관계인 채로 남을 뿐'이라는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btlgcO/dJMcaaEfx3k/yJXwkkqIUdftPgy6FSLBJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btlgcO/dJMcaaEfx3k/yJXwkkqIUdftPgy6FSLBJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btlgcO/dJMcaaEfx3k/yJXwkkqIUdftPgy6FSLBJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtlgcO%2FdJMcaaEfx3k%2FyJXwkkqIUdftPgy6FSLBJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;603&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이를 해결하고 비선형성을 추가해 이 &lt;b&gt;선형 관계를 비틀어주기 위해&lt;/b&gt; 비선형 활성화함수(Activation Function)이 필요한 것입니다. 우선은 '비선형성 확보를 위해 활성화함수가 필요하다'까지만 정리하고, 자세한 내용은 다음에 기회가 되면 정리하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화함수도 여러 종류가 있는데, 더 궁금하신 분은 아래 글 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wikidocs.net/250622&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikidocs.net/250622&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771071759243&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;3. 활성화 함수: 종류와 선택 기준&quot; data-og-description=&quot;활성화 함수는 인공신경망에서 입력 신호를 출력 신호로 변환하는 역할을 한다. 활성화 함수는 신경망의 비선형성을 도입하여 복잡한 문제를 해결할 수 있도록 도와준다. 이 장에서는 &amp;hellip;&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/250622&quot; data-og-url=&quot;https://wikidocs.net/250622&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bP480M/dJMb9aKBk8M/wzU0pZAdYKs7kmPjGsEYO1/img.jpg?width=100&amp;amp;height=130&amp;amp;face=0_0_100_130,https://scrap.kakaocdn.net/dn/dAf74F/dJMb82eJhgl/VuVXxI7pzjqfOjFcB3q9K1/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063,https://scrap.kakaocdn.net/dn/17KaU/dJMb86OX3fw/bfXwkahRLKPJKQ9lKPVHqk/img.jpg?width=800&amp;amp;height=640&amp;amp;face=0_0_800_640&quot;&gt;&lt;a href=&quot;https://wikidocs.net/250622&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/250622&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bP480M/dJMb9aKBk8M/wzU0pZAdYKs7kmPjGsEYO1/img.jpg?width=100&amp;amp;height=130&amp;amp;face=0_0_100_130,https://scrap.kakaocdn.net/dn/dAf74F/dJMb82eJhgl/VuVXxI7pzjqfOjFcB3q9K1/img.png?width=1063&amp;amp;height=1063&amp;amp;face=0_0_1063_1063,https://scrap.kakaocdn.net/dn/17KaU/dJMb86OX3fw/bfXwkahRLKPJKQ9lKPVHqk/img.jpg?width=800&amp;amp;height=640&amp;amp;face=0_0_800_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;3. 활성화 함수: 종류와 선택 기준&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;활성화 함수는 인공신경망에서 입력 신호를 출력 신호로 변환하는 역할을 한다. 활성화 함수는 신경망의 비선형성을 도입하여 복잡한 문제를 해결할 수 있도록 도와준다. 이 장에서는 &amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 최종 예측값의 손실 계산&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.1. 전체적인 학습 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 준비 &amp;rarr; 데이터를 작은 단위로 나눈다 &amp;rarr; 레이어를 통과한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;까지 설명했는데, 실제로 모델이 어떻게 '학습'을 하는지, 즉 어떻게 배워나가는지의 구조는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1807&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKSguU/dJMcahQTjTO/ZS9Ak4NsgSRKRsOFCNzba1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKSguU/dJMcahQTjTO/ZS9Ak4NsgSRKRsOFCNzba1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKSguU/dJMcahQTjTO/ZS9Ak4NsgSRKRsOFCNzba1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKSguU%2FdJMcahQTjTO%2FZS9Ak4NsgSRKRsOFCNzba1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1807&quot; height=&quot;653&quot; data-origin-width=&quot;1807&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 레이어를 통과시켜서 답(y-hat)을 내고, 이것을 정답인 y와 비교해서 &quot;얼마만큼 차이가 나는지&quot;를 계산한 뒤, 이에 맞춰서 각 레이어의 파라미터 (그러니까 weight와 bias)를 업데이트 하는 과정으로 학습을 하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;정답과 얼마만큼 차이나는지&lt;/b&gt;는 단순 뺼셈으로 계산하는 것이 아니라 모델의 Task에 따라 적절한 Loss Function을 계산하는 과정을 거칩니다. 다시 말해, Loss Function 이라는 건 특정한(고정된) 공식을 가진 함수가 아니라, &quot;정답과 얼마만큼 차이나는지&quot; 즉 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;예측갑솨 실제값의 차이를 표현하는 지표&lt;/span&gt;라고 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 Task에 따라 서로 다른 Loss Function을 계산합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hyoung-2y.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hyoung-2y.tistory.com/36&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1771072130365&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Loss function 이란?&quot; data-og-description=&quot;손실 함수는 비용함수(Cost Function)이라고도 불린다. 손실 함수는 '인공지능' 과목에 포함되는 Machine Learning 최적화의 기본 원리이며 기초적인 개념이다. 위의 그림은 일반적인 통계학적 모델의 형&quot; data-og-host=&quot;hyoung-2y.tistory.com&quot; data-og-source-url=&quot;https://hyoung-2y.tistory.com/36&quot; data-og-url=&quot;https://hyoung-2y.tistory.com/36&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d5qkQo/dJMb9eTLSVC/tkRxRvPD5RBmlmnLGae2q1/img.png?width=511&amp;amp;height=201&amp;amp;face=0_0_511_201,https://scrap.kakaocdn.net/dn/cTFlA5/dJMb8YpREHJ/nBF2sXJb2RItPDEF54yzG0/img.png?width=511&amp;amp;height=201&amp;amp;face=0_0_511_201,https://scrap.kakaocdn.net/dn/Qio88/dJMb9efaavo/NVomtmXwl1ul3fA3Eceoh1/img.png?width=681&amp;amp;height=309&amp;amp;face=0_0_681_309&quot;&gt;&lt;a href=&quot;https://hyoung-2y.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hyoung-2y.tistory.com/36&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d5qkQo/dJMb9eTLSVC/tkRxRvPD5RBmlmnLGae2q1/img.png?width=511&amp;amp;height=201&amp;amp;face=0_0_511_201,https://scrap.kakaocdn.net/dn/cTFlA5/dJMb8YpREHJ/nBF2sXJb2RItPDEF54yzG0/img.png?width=511&amp;amp;height=201&amp;amp;face=0_0_511_201,https://scrap.kakaocdn.net/dn/Qio88/dJMb9efaavo/NVomtmXwl1ul3fA3Eceoh1/img.png?width=681&amp;amp;height=309&amp;amp;face=0_0_681_309');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Loss function 이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;손실 함수는 비용함수(Cost Function)이라고도 불린다. 손실 함수는 '인공지능' 과목에 포함되는 Machine Learning 최적화의 기본 원리이며 기초적인 개념이다. 위의 그림은 일반적인 통계학적 모델의 형&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hyoung-2y.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4.2. Loss Function과 Cost Function은 어떻게 다른가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명한 모델의 학습 원리의 핵심은, 모델이 예측한 값(y-hat)과 실제 정답값(y)가 얼마나 다른지를 계산해서, 그 값을 토대로 파라미터를 개선시켜 나간다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 손실 계산을 위해 사용되는 Loss Function의 개념과 Cost Function의 개념은 혼용해서 사용하는 경우가 있는데, 둘은 엄연히 말하면 다른 개념입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S7wOu/dJMcaioKnPL/26p5JAl1FvOLwamwuX0aH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S7wOu/dJMcaioKnPL/26p5JAl1FvOLwamwuX0aH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S7wOu/dJMcaioKnPL/26p5JAl1FvOLwamwuX0aH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS7wOu%2FdJMcaioKnPL%2F26p5JAl1FvOLwamwuX0aH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;665&quot; height=&quot;190&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표에서와 같이, Loss Function은 하나의 데이터에 대해 오차를 계산하는 것을 뜻하고, Cost Function은 전체 데이터셋에서 각 데이터에 대해 오차를 계산하여 평균을 낸 것입니다. 즉, Loss Function은 '지금 이 데이터가 얼마나 틀렸는지'를 나타내고, Cost Function은 '모델이 해당 데이터셋을 전체적으로 이해하고 있는지'를 나타냅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러니까 &lt;b&gt;모델이 학습을 할 때 줄여나가는 값&lt;/b&gt;은 Cost Function이라는 것입니다. 이걸 Loss Function으로 설명하는 경우도 있는데, 정확히는 Cost Function.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 파라미터의 업데이트&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5.1. 파라미터 업데이트 과정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실 계산에 대해서도 설명했으니, 학습 과정에서의 마지막 부분(Backpropagation과 Optimizer)에 대해 설명해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;그래서 실제로 파라미터를 어떻게 업데이트 할 것인가?&quot; 에 해당하는 부분입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 여기서부터는 다양한 방법론이 존재하고, 수학적인 원리도 나오기 때문에 나오는 용어들이 급증하기 때문에 많이 복잡해집니다. 그래서 필요없는 것들은 제쳐두고 핵심만 정리해두겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lX5Bs/dJMcaajWpte/oXjdw0cccS6uKvb19a9C20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lX5Bs/dJMcaajWpte/oXjdw0cccS6uKvb19a9C20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lX5Bs/dJMcaajWpte/oXjdw0cccS6uKvb19a9C20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlX5Bs%2FdJMcaajWpte%2FoXjdw0cccS6uKvb19a9C20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;462&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(1) Backpropagation (역전파)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 상식적으로 '파라미터를 업데이트하려면, 업데이트할 파라미터를 알아야 한다'는 사실부터 출발합니다. 파라미터 업데이트의 가장 첫 과정은 먼저 각 레이어의 weight를 계산하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이떄 '정답에서부터 얼마나 틀렸는지'를 보고 계산하는 것이기 때문에 (가장 정확히 설명하자면, 손실함수의 기울기를 보고 각 레이어의 weight의 미분값을 구합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;weight를 계산하는 방향은 Input에서 Output을 향하는 방향이 아니라, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Output에서 Input을 향하는 &quot;반대&quot; 방향&lt;/span&gt; 순서로 레이어들을 봅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이 과정을 역(Back)전파라고 부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LtZYL/dJMcadAThUV/WsK7CVj2D5W0EfT92Twy41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LtZYL/dJMcadAThUV/WsK7CVj2D5W0EfT92Twy41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LtZYL/dJMcadAThUV/WsK7CVj2D5W0EfT92Twy41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLtZYL%2FdJMcadAThUV%2FWsK7CVj2D5W0EfT92Twy41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;223&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 원리를 따지자면 미분의 Chain Rule까지도 설명해야 하지만, 그게 무슨 개념인지는 알테니 스킵하겠습니다. 궁금하면...찾아보시던가요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) Gradient Descent (경사하강법)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역전파를 통해 각 레이어의 weight를 계산하고 나면, '그러면 이걸 이제 어떻게 업데이트 할 건데?'라는 질문이 남게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &quot;어떻게&quot;에 대한 대답이 Gradient Descent입니다. 그러니까 경사하강법이라는 것은, 하나의 원리입니다. 더 정확히 말하면, &lt;b&gt;경사 하강법 알고리즘&lt;/b&gt;이라는 표현이 가장 정확합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dj3BIF/dJMcabb3Fvd/THafrYzkChl5JA0olNkrKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dj3BIF/dJMcabb3Fvd/THafrYzkChl5JA0olNkrKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dj3BIF/dJMcabb3Fvd/THafrYzkChl5JA0olNkrKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdj3BIF%2FdJMcabb3Fvd%2FTHafrYzkChl5JA0olNkrKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;481&quot; height=&quot;284&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원리를 조금 설명해보자면, 손실함수의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;가장 가파른 내리막길의 방향으로 파라미터를 한 걸음 이동하는&lt;/span&gt; 원리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(3) Optimizer (옵티마이저)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gradient Descent가 &quot;원리&quot;에 해당했다면, Optimizer는 실제로 파라미터를 업데이트하는 &quot;주체&quot;라고 설명하는 것이 적절할 것 같습니다. 실제로 코드에서도 그러한 흐름을 보입니다. (코드는 밑에 있어요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경사하강법이라는 원리를 사용하여, Optimizer가 실제로 파라미터를 &quot;얼마나 큰 보폭으로 (lr, Learning Rate)&quot;, &quot;어느 방향으로&quot; 이동시킬지 결정하기 때문에, '주체'가 되는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5.2. PyTorch 예시 코드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 코드에서는 Backpropagation을 통해 계산한 각 weight을 .grad에 저장합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 옵티마이저가 .grad에 저장한 값들을 꺼내서, 그 값들을 업데이트합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 Optimizer에도 여러 종류가 있는데, 그 종류를 하나하나 따져가면서 모델을 만드실 게 아니라면, 그냥 통상적으로는 Adam을 씁니다. 자세히 알려고 하지 마세요. 그냥 Adam 쓰세요~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1771073835034&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F  

criterion = nn.MSELoss()      
optimizer = optim.Adam(model.parameters(), lr=0.001)
epochs = 1000 

for epoch in range(epochs + 1):

    pred = model(x)
    loss = criterion(pred, y) 

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 Optimizer가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;파라미터를 업데이트하는 주체&lt;/span&gt;라고 설명한 것은 보이는 것과 같이 실제로도 코드가 그렇게 돌아가기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드의 일부분을 뜯어보자면&lt;/p&gt;
&lt;pre id=&quot;code_1771074098343&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch
import torch.optim as optim
optimizer = optim.Adam(model.parameters(), lr=learning_rate)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 Optimizer를 선언한 다음 그 변수가 주체가 되어&lt;/p&gt;
&lt;pre id=&quot;code_1771074119543&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;optimizer.step()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과 같이 작동하는 것을 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝, 딥러닝</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/20</guid>
      <comments>https://powderblue0.tistory.com/20#entry20comment</comments>
      <pubDate>Sat, 14 Feb 2026 22:02:42 +0900</pubDate>
    </item>
    <item>
      <title>[Nilm] (6)-UK-DALE 데이터</title>
      <link>https://powderblue0.tistory.com/19</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BKMDt/dJMcab36ybQ/s9fHoV9FywER6049tQkJIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BKMDt/dJMcab36ybQ/s9fHoV9FywER6049tQkJIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKMDt/dJMcab36ybQ/s9fHoV9FywER6049tQkJIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBKMDt%2FdJMcab36ybQ%2Fs9fHoV9FywER6049tQkJIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1710&quot; height=&quot;720&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 이전 Nilm 관련 글들의 흐름과는 조금 벗어나, 새롭게 UK-DALE 데이터에 대해 정리해보고자 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글은 UK-DALE 데이터와 UK-DALE의 다운로드 방법에 대한 정리글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nilm의 연장선에서 이 내용을 정리하는 것도 있지만, 제가 UK-DALE 데이터의 다운로드를 시도했었을 때 다양한 시행착오들이 있었고, 당시에 &lt;b&gt;한국어로 정리된 다운로드 방법 관련 글이 하나도 없었기에&lt;/b&gt; (ㅠㅠ) 그냥 제가 한 번 정리해보려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 시작하기 전에 혹시라도 이번 글로 제 블로그를 처음 접하는 분이시라면, UKDALE 관련 글 이전에 아래 글 참고하시면 좋을 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/10&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769873256867&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (1)-NILM 기술의 이해&quot; data-og-description=&quot;이번 글에서는 Nilm 기술의 개념에 대해 설명하고, 심화적인 이해에 필요한(필요할지도 모르는?) 교류전력 개념을 설명합니다. 교류전력 파트의 경우 제가 아는 모든 지식을 최대한 쉽게 풀어 설&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/10&quot; data-og-url=&quot;https://powderblue0.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b3L79z/dJMb9lk18KR/SYaj7njLc3z9bvSk895qZ1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/bF4lfS/dJMb9hCWhS5/anC3w4DegzPDYkEBDOAQv0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/cCGPVC/dJMb9b3M3wG/Qzg3vFBj94ZI5U26BibG80/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/10&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b3L79z/dJMb9lk18KR/SYaj7njLc3z9bvSk895qZ1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/bF4lfS/dJMb9hCWhS5/anC3w4DegzPDYkEBDOAQv0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/cCGPVC/dJMb9b3M3wG/Qzg3vFBj94ZI5U26BibG80/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (1)-NILM 기술의 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 Nilm 기술의 개념에 대해 설명하고, 심화적인 이해에 필요한(필요할지도 모르는?) 교류전력 개념을 설명합니다. 교류전력 파트의 경우 제가 아는 모든 지식을 최대한 쉽게 풀어 설&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 데이터 다운로드 방법의 경우 데이터 버전이 꾸준히 업데이트 되는 것을 반영하지 못할 수도 있는 점 양해 바랍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;UK-DALE 데이터란?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UK-DALE 다운로드 링크&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 다운로드&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;고주파 데이터 다운로드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저주파 데이터 다운로드&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UK-DALE 결측치 관련 참고논문&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*UK-DALE은 오픈소스 데이터이긴 하지만, 비슷하게 생긴 서로 다른 다운로드 링크가 많으므로 블로그에 첨부된 링크별 설명을 잘 참고하시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;UK-DALE 데이터란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UK-DALE 데이터는 기본적으로 Nilm 연구를 위한 데이터셋입니다. NILM 연구에 있어서는 교과서적인 데이터라고 볼 수 있습니다. (Nilm 연구에서 미국의 REDD와 함께 가장 널리 쓰이는 데이터셋 중 하나입니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MOON9/dJMcahQNHlX/PW387LseJJCkf4GAJOUQo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MOON9/dJMcahQNHlX/PW387LseJJCkf4GAJOUQo0/img.png&quot; data-alt=&quot;J.Kelly, W.Knottenbelt &amp;quot;The UK-DALE dataset ...&amp;quot; 중 일부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MOON9/dJMcahQNHlX/PW387LseJJCkf4GAJOUQo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMOON9%2FdJMcahQNHlX%2FPW387LseJJCkf4GAJOUQo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1098&quot; height=&quot;769&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;J.Kelly, W.Knottenbelt &quot;The UK-DALE dataset ...&quot; 중 일부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UK-DALE은 Jake Kelly와 William Knottenbelt가 작성한 논문 The UK-DALE dataset, domestic appliance-level electricity demand and whole-house demand from five UK homes 에서 처음 소개된 데이터셋입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1404.0284&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1404.0284&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769873428904&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The UK-DALE dataset, domestic appliance-level electricity demand and whole-house demand from five UK homes&quot; data-og-description=&quot;Many countries are rolling out smart electricity meters. These measure a home's total power demand. However, research into consumer behaviour suggests that consumers are best able to improve their energy efficiency when provided with itemised, appliance-by&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1404.0284&quot; data-og-url=&quot;https://arxiv.org/abs/1404.0284v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b0403r/dJMb87NRiu3/W7F0cF2Qp8FauxioKvyt9K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/EcFoT/dJMb895Yzwr/2MUhgcjOKmUvnCxiAzhVWk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1404.0284&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1404.0284&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b0403r/dJMb87NRiu3/W7F0cF2Qp8FauxioKvyt9K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/EcFoT/dJMb895Yzwr/2MUhgcjOKmUvnCxiAzhVWk/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The UK-DALE dataset, domestic appliance-level electricity demand and whole-house demand from five UK homes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Many countries are rolling out smart electricity meters. These measure a home's total power demand. However, research into consumer behaviour suggests that consumers are best able to improve their energy efficiency when provided with itemised, appliance-by&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리 긴 논문이 아니니(그래프 첨부된 거랑 참고문헌 제외 8~10페이지 정도?) UK-DALE 데이터를 사용하실 분들은 논문 한 번 정독해보시는 것도 추천드립니다. 데이터 확보 방법 및 확보된 데이터에 대한 자세한 설명이 나와있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 데이터는 영국 내 5개 가정집(house1부터 house5까지) 2012년부터 2015년까지 측정한 전력 데이터셋이며, 오픈되어 있어서 누구나 다운로드 받을 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 데이터 수집 기간은 2012년부터 2015년까지로 밝혀져 있는데 가장 활발히 연구되는 house1의 경우 2012년 11월부터 2017년 4월까지의 데이터가 확보되어 있다고 적혀있긴 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 다운로드에 대한 전체적인 개요는 아래 페이지에서 확인 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jack-kelly.com/data/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jack-kelly.com/data/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1769873618795&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UK Domestic Appliance-Level Electricity (UK-DALE) dataset&quot; data-og-description=&quot;I try to mitigate climate change using computer science. I co-founded Open Climate Fix, a non-profit research lab focused on reducing greenhouse gas emissions. Previously, I was a Research Engineer at DeepMind, where I used machine learning to predict wind&quot; data-og-host=&quot;jack-kelly.com&quot; data-og-source-url=&quot;https://jack-kelly.com/data/&quot; data-og-url=&quot;http://jack-kelly.com/data/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jack-kelly.com/data/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jack-kelly.com/data/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UK Domestic Appliance-Level Electricity (UK-DALE) dataset&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I try to mitigate climate change using computer science. I co-founded Open Climate Fix, a non-profit research lab focused on reducing greenhouse gas emissions. Previously, I was a Research Engineer at DeepMind, where I used machine learning to predict wind&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jack-kelly.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;UK-DALE 다운로드 링크&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 html 링크에 들어가면 데이터에 대한 설명 및 다운로드 링크가 알잘딱깔쌈뽕하게 정리되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769873724634&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UKERC Energy Data Centre - UK Domestic Appliance Level Electricity (UK-DALE)&quot; data-og-description=&quot;Other information The (V, I) characteristic in the .FLAC files is uncalibrated. Calibration files are provided in the top-level directory for the data set. The recommended procedure for processing the data is to convert from FLAC (a lossless audio compress&quot; data-og-host=&quot;dap.ceda.ac.uk&quot; data-og-source-url=&quot;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&quot; data-og-url=&quot;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dap.ceda.ac.uk/edc/efficiency/residential/EnergyConsumption/Domestic/UK-DALE-2017/ReadMe_DALE-2017.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UKERC Energy Data Centre - UK Domestic Appliance Level Electricity (UK-DALE)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Other information The (V, I) characteristic in the .FLAC files is uncalibrated. Calibration files are provided in the top-level directory for the data set. The recommended procedure for processing the data is to convert from FLAC (a lossless audio compress&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dap.ceda.ac.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 전부 영어로 작성되어 있다보니 + html 특유의 가독성 떨어짐으로 인해 페이지는 다소 복잡합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심을 정리하자면 UK-DALE은 세 개의 데이터로 나누어져 있다고 보면 됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;16kHz의 고주파 데이터셋 (house1만 제공)&lt;/li&gt;
&lt;li&gt;1/6Hz의 Disaggregated 데이터셋 (개별기기 측정데이터)&lt;/li&gt;
&lt;li&gt;1Hz의 Main(Aggregated) 데이터셋 (전체 전력 측정데이터)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 편의상 1의 데이터를 '고주파 데이터', 2와 3의 경우를 '저주파 데이터'라고 부르겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 html 링크 말고 바로 다운로드 가능한 링크를 찾으신다면, 고주파 데이터와 저주파 데이터의 다운로드 링크는 각각 다음과 같습니다. (바로 링크로 들어가셔도 되지만, 진짜진짜 데이터 다운로드가 필요하신 분들은, 아래 '데이터 다운로드'까지 꼭 읽어보세요!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고주파 데이터(16kHz): &lt;a href=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=cd1ed6c7-752b-4dad-acf9-a9bd9f63d87a&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=cd1ed6c7-752b-4dad-acf9-a9bd9f63d87a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;저주파 데이터 (Disaggregated data &amp;amp; Main(Aggregated) data): &lt;a href=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1769874119079&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;UKERC EDC: Data&quot; data-og-description=&quot;The Energy Data Centre (EDC) works in collaboration with the CEDA Archive to provide this information The EDC recently relocated the data to new locations to strengthen our preservation processes and improve the management of our data. Unfortunately we can&quot; data-og-host=&quot;ukerc.rl.ac.uk&quot; data-og-source-url=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&quot; data-og-url=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ukerc.rl.ac.uk/cgi-bin/dataDiscover.pl?Action=detail&amp;amp;dataid=7d78f943-f9fe-413b-af52-1816f9d968b0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UKERC EDC: Data&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Energy Data Centre (EDC) works in collaboration with the CEDA Archive to provide this information The EDC recently relocated the data to new locations to strengthen our preservation processes and improve the management of our data. Unfortunately we can&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ukerc.rl.ac.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 오픈소스여서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&quot;누구나 다운로드 받을 수 있다&quot;고 해서 &quot;쉽게 다운로드 받을 수 있다&quot;는 의미는 아니라고 &lt;/span&gt;생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UK-DALE의 가장 정확한 데이터는 모두 UKERC라는 UK Energy Research Center의 홈페이지에서 다운로드 받아야 합니다. 그런데 여기 홈페이지가 좀 중구난방이여서(그리고 당연하게도 싹다 영어임..) 복잡한데다가 데이터센터다 보니 데이터의 정확한 명칭으로 검색해야 한다는 어려움이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 UKERC 홈페이지에서의 검색보다는 아래 정리된 링크로 바로 접속하는 것이 좋습니다. 데이터 다운로드의 세부적인 과정은 고주파 데이터와 저주파 데이터로 나누어서 정리하도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) 고주파 데이터 다운로드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고주파(16kHz) 데이터는 5개 가정집 중 house1에 대해서만 데이터가 제공되고 있습니다. 고주파 데이터 다운로드를 시도하는 경우, 중요하게 생각해야 할 점은 이 데이터는 정말 말그대로 16kHz의 &quot;고주파&quot;라는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16kHz는 1초동안 16,000번 측정되었다는 것을 의미합니다. CD에 들어가는 음악이 약 44kHz인 것을 생각해보면, 16kHz 수준의 전력 데이터는 &quot;전력량&quot;이라는 숫자를 토대로 데이터를 들여다본다는 접근이 아닌, 전력을 하나의 &quot;파동&quot;으로서 접근하겠다(스파크&amp;nbsp; 이상탐지 등) 는 말이 됩니다. (그러니까, 보통의 전력 데이터 접근 방법과는 다른 방법이라는 뜻입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 불구하고 고주파 데이터의 다운로드를 시도하실 저같은 분들은 아래 링크로 들어가시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769874800960&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CEDA Archive Web Browser&quot; data-og-description=&quot;This website uses cookies. By continuing to use this website you are agreeing to our use of cookies.&amp;nbsp; OK Find out more&quot; data-og-host=&quot;data.ceda.ac.uk&quot; data-og-source-url=&quot;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&quot; data-og-url=&quot;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://data.ceda.ac.uk/edc/d1/887733b3-4c04-471f-9404-9f7459c4a1a0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CEDA Archive Web Browser&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This website uses cookies. By continuing to use this website you are agreeing to our use of cookies.&amp;nbsp; OK Find out more&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;data.ceda.ac.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zpnH7/dJMcagj3bEP/ZaYTO2VsDEpVXkLoClFuF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpnH7/dJMcagj3bEP/ZaYTO2VsDEpVXkLoClFuF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpnH7/dJMcagj3bEP/ZaYTO2VsDEpVXkLoClFuF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzpnH7%2FdJMcagj3bEP%2FZaYTO2VsDEpVXkLoClFuF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;449&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;링크에 들어가면 여러 가지 파일 폴더가 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고주파 데이터의 경우 데이터가 정말정말 크기 때문에 각 house별로, 그리고 각 파일별로 다운로드 링크가 따로 존재합니다. 이것저것 눌러보시고, 시험용으로 하나 정도만 먼저 다운로드 받아보시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고주파 데이터는 모두 flac 형식으로 존재합니다. flac 형식은 오디오 데이터를 저장하는 데이터형식인데, 위에서 설명한 것처럼&lt;b&gt; 오디오를 저장할 정도로 미세한 수준의 전력측정 데이터&lt;/b&gt;라고 보시면 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 다운로드해보면 이렇게 생겼습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8l7uQ/dJMcahXzRbC/tYqgjsjptNSHM3ID0nKZvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8l7uQ/dJMcahXzRbC/tYqgjsjptNSHM3ID0nKZvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8l7uQ/dJMcahXzRbC/tYqgjsjptNSHM3ID0nKZvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8l7uQ%2FdJMcahXzRbC%2FtYqgjsjptNSHM3ID0nKZvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1613&quot; height=&quot;393&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) 저주파 데이터 다운로드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 Nilm 연구가 활발히 이루어지는 것은 이 '저주파 데이터'의 경우입니다. 저주파(Low-frequency) 데이터의 경우 그냥 일반적인 전력 데이터의 형태입니다. 아래 링크에 들어가시면 zip 파일 형태로 다운로드 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769875022797&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CEDA Archive Web Browser&quot; data-og-description=&quot;This website uses cookies. By continuing to use this website you are agreeing to our use of cookies.&amp;nbsp; OK Find out more&quot; data-og-host=&quot;data.ceda.ac.uk&quot; data-og-source-url=&quot;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&quot; data-og-url=&quot;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://data.ceda.ac.uk/edc/d1/7d78f943-f9fe-413b-af52-1816f9d968b0/data/version_0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CEDA Archive Web Browser&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This website uses cookies. By continuing to use this website you are agreeing to our use of cookies.&amp;nbsp; OK Find out more&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;data.ceda.ac.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R8Xug/dJMcai3bXmY/VpJDAZy71pd6QmoFGt3u0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R8Xug/dJMcai3bXmY/VpJDAZy71pd6QmoFGt3u0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R8Xug/dJMcai3bXmY/VpJDAZy71pd6QmoFGt3u0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR8Xug%2FdJMcai3bXmY%2FVpJDAZy71pd6QmoFGt3u0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1437&quot; height=&quot;618&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어가시면 뵝는 것처럼 ukdale.h5.zip 파일과 ukdale.zip 파일이 존재합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(조금 헷갈리실 수도 있는데, .h5라고 되어있다고 해서 house5의 데이터라는 뜻이 아니라, h5라는 데이터 포멧의 형태라 ukdale.h5입니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oUALo/dJMcahcbeVz/p7uVCsrDGpNIghfUcxcQPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oUALo/dJMcahcbeVz/p7uVCsrDGpNIghfUcxcQPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oUALo/dJMcahcbeVz/p7uVCsrDGpNIghfUcxcQPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoUALo%2FdJMcahcbeVz%2Fp7uVCsrDGpNIghfUcxcQPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;536&quot; height=&quot;263&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NILMTK 라이브러리를 사용하시는 분들은 ukdale.h5.zip 다운로드 받으시면 되고, 그게 아니라면 ukdale.zip 파일 다운로드 받으시면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 github에서 별도의 메타데이터도 제공하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/nilmtk/nilm_metadata/tree/v0.2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/nilmtk/nilm_metadata/tree/v0.2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769875183524&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - nilmtk/nilm_metadata: A schema for modelling meters, measurements, appliances, buildings etc&quot; data-og-description=&quot;A schema for modelling meters, measurements, appliances, buildings etc - nilmtk/nilm_metadata&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/nilmtk/nilm_metadata/tree/v0.2&quot; data-og-url=&quot;https://github.com/nilmtk/nilm_metadata&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sQeDG/dJMb89x8vZE/2MoHNYVZNJ7DBzhv2TxgY1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/hoEYx/dJMb85WOdEO/GyJugOAsBSLmufhRXxeD50/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/nilmtk/nilm_metadata/tree/v0.2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/nilmtk/nilm_metadata/tree/v0.2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sQeDG/dJMb89x8vZE/2MoHNYVZNJ7DBzhv2TxgY1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/hoEYx/dJMb85WOdEO/GyJugOAsBSLmufhRXxeD50/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - nilmtk/nilm_metadata: A schema for modelling meters, measurements, appliances, buildings etc&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A schema for modelling meters, measurements, appliances, buildings etc - nilmtk/nilm_metadata&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ukdale.zip 파일을 다운로드 받는 경우 파일 폴더구조는 다음과 같이 생겼습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769939774786&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ukdale/
├── house_1/          
├── house_2/           
├── house_3/           
├── house_4/           
├── house_5/           
└── metadata/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dspLMd/dJMcahDe8hj/ieoPJ80CW8vNZpAkBARRQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dspLMd/dJMcahDe8hj/ieoPJ80CW8vNZpAkBARRQK/img.png&quot; data-alt=&quot;실제로 다운로드 받은 파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dspLMd/dJMcahDe8hj/ieoPJ80CW8vNZpAkBARRQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdspLMd%2FdJMcahDe8hj%2FieoPJ80CW8vNZpAkBARRQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1174&quot; height=&quot;435&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실제로 다운로드 받은 파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 대용량 데이터이기 때문에 house1~house5를 전부 압축해제하기보다는 house1의 데이터만 먼저 살펴보는 것이 좋습니다. (실제로도 house1의 데이터가 가장 활발히 연구되는 편입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저주파 데이터의 경우 .dat 형식으로 저장되어 있습니다. 그냥 pandas에서 csv 파일 불러오는 것과 동일하게 불러오되 각 열 이름(names = ['xxx','xxx']) 만 지정해주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769875266739&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd

# channel_1.dat 파일 불러오기
df = pd.read_csv(&quot;../data/ukdale/channel_1.dat&quot;, 
                 sep=' ',names=['timestamp', 'power'])

df['time'] = pd.to_datetime(df['timestamp'], unit='s')      # 타임스탬프를 시간으로 변환
df = df[['time', 'timestamp', 'power']]   # 원하는 순서로
df.drop(columns='timestamp', inplace=True)

display(df.head())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 다운로드된 데이터 일부를 살펴보면 다음과 같이 생겼습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwpP3R/dJMcagdifdD/m5FKVMpHrVLwycCVdKOgik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwpP3R/dJMcagdifdD/m5FKVMpHrVLwycCVdKOgik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwpP3R/dJMcagdifdD/m5FKVMpHrVLwycCVdKOgik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwpP3R%2FdJMcagdifdD%2Fm5FKVMpHrVLwycCVdKOgik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 다운로드받은 데이터를 기반으로 다양한 분석 및 Nilm 모델 빌드를 시도할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;UK-DALE 결측치 관련 참고논문&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 마무리하기 전에 UK-DALE 데이터를 다룰 때 참고하기 좋은 논문 하나를 추천하고 마무리하도록 하겠습니다. UK-DALE에는 몇 개의 결측치가 존재하는데, 그 결측치를 어떻게 처리할 것이냐의 문제가 생기게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 관련하여 Dengyu Shi의 &lt;i&gt;A PID-Controlled Non-Negative Tensor Factorization Model for Analyzing Missing Data in NILM &lt;/i&gt;이라는 논문이 있으니 필요하시다면 참고하시길&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2403.07012&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2403.07012&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769875522160&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;A PID-Controlled Non-Negative Tensor Factorization Model for Analyzing Missing Data in NILM&quot; data-og-description=&quot;With the growing demand for energy and increased environmental awareness, Non-Intrusive Load Monitoring (NILM) has become an essential tool in smart grid and energy management. By analyzing total power load data, NILM infers the energy usage of individual &quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2403.07012&quot; data-og-url=&quot;https://arxiv.org/abs/2403.07012v2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sYOep/dJMb9frAqaD/X0JJqFZmB0Kt2IlHepnWG1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bILi6d/dJMb9fZqg8H/mtFplqSbR1bCDDbjLAKWU0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2403.07012&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2403.07012&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sYOep/dJMb9frAqaD/X0JJqFZmB0Kt2IlHepnWG1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bILi6d/dJMb9fZqg8H/mtFplqSbR1bCDDbjLAKWU0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;A PID-Controlled Non-Negative Tensor Factorization Model for Analyzing Missing Data in NILM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;With the growing demand for energy and increased environmental awareness, Non-Intrusive Load Monitoring (NILM) has become an essential tool in smart grid and energy management. By analyzing total power load data, NILM infers the energy usage of individual&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Nilm 및 전력예측</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/19</guid>
      <comments>https://powderblue0.tistory.com/19#entry19comment</comments>
      <pubDate>Sat, 31 Jan 2026 23:31:07 +0900</pubDate>
    </item>
    <item>
      <title>[Nilm] (5)-1D CNN 베이스라인 모델</title>
      <link>https://powderblue0.tistory.com/18</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP7MEf/dJMcaaD8x3q/YYLct9MbTKFHKUhJHoMcHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP7MEf/dJMcaaD8x3q/YYLct9MbTKFHKUhJHoMcHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP7MEf/dJMcaaD8x3q/YYLct9MbTKFHKUhJHoMcHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP7MEf%2FdJMcaaD8x3q%2FYYLct9MbTKFHKUhJHoMcHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1710&quot; height=&quot;720&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서는 전처리한 '고양시 전력데이터'에 대하여 각각 FFT 분석과 이상탐지 분석을 실시한 결과에 대해 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/17&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769776161925&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (4)-FFT와 이상탐지&quot; data-og-description=&quot;지난 글에서는 데이터 선정 과정과 다운로드한 &amp;quot;대용량 데이터&amp;quot;를 어떻게 &amp;quot;다룰 수 있는 수준&amp;quot;까지 줄였는지에 대해 정리하였습니다. 아래에서 지난 글을 확인할 수 있으니 참고 바랍니다. https:/&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/17&quot; data-og-url=&quot;https://powderblue0.tistory.com/17&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOAcRE/dJMb8PGq2UO/rCaS9CIlWEuiMiPTkXtiC0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/d3XhzU/dJMb8WeutJC/oQstnD1Kbyl8IU8k3109G0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/J5Oqd/dJMb8WMkrQG/mKqw2usPp6oGucQKYlSAcK/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/17&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOAcRE/dJMb8PGq2UO/rCaS9CIlWEuiMiPTkXtiC0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/d3XhzU/dJMb8WeutJC/oQstnD1Kbyl8IU8k3109G0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/J5Oqd/dJMb8WMkrQG/mKqw2usPp6oGucQKYlSAcK/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (4)-FFT와 이상탐지&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 데이터 선정 과정과 다운로드한 &quot;대용량 데이터&quot;를 어떻게 &quot;다룰 수 있는 수준&quot;까지 줄였는지에 대해 정리하였습니다. 아래에서 지난 글을 확인할 수 있으니 참고 바랍니다. https:/&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 본격적으로 모델 빌드 과정에 대해 서술해보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 목표는 전체 전력에서 개별 전력을 분해해내는(=Nilm) 것이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 복잡한 모델을 만들 경우 아무것도 없는 상태부터 모델을 만드는 것이 아닌, 기존에 존재하는 모델을 참고 혹은 일부 참고하여 베이스라인을 미리 잡아두는 것이 적절합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우 이전 '(3)-데이터 선정과 전처리'글에서 잠깐 언급했던 UNet 모델을 참고하였습니다. 결론적으로 말하면 성공적이었다고 할 수는 없으나, 모델 빌딩 과정과 과정에서 겪은 다양한 어려움 등에 대해 정리해두려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;참고논문 정리(Multi-task NILM Model)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1D CNN과 UNet은 무엇인가?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;베이스라인 모델(Baseline Model)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 전처리 과정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1D CNN 모델 만들기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1D CNN 모델 학습과정&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1D CNN 모델학습 결과&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고논문 정리(Multi-task NILM Model)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 베이스라인에 참고한 논문은 Anthony Faustine의 &lt;i&gt;UNet-NILM: A Deep Neural Network for Multi-tasks Appliances State Detection and Power Estimation in NILM &lt;/i&gt;입니다. 전체 논문은 구글에 논문 제목 그대로 검색하거나 아래 링크에서 보실 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3427771.3427859&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dl.acm.org/doi/10.1145/3427771.3427859&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769776471893&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;Chapter&quot; data-og-title=&quot;UNet-NILM | Proceedings of the 5th International Workshop on Non-Intrusive Load Monitoring&quot; data-og-description=&quot;Energy disaggregation, a.k.a. Non-Intrusive Load Monitoring, aims to separate the energy consumption of individual appliances from the readings of a mains power meter measuring the total energy consumption of, e.g., a whole house. Energy consumption of ...&quot; data-og-host=&quot;dl.acm.org&quot; data-og-source-url=&quot;https://dl.acm.org/doi/10.1145/3427771.3427859&quot; data-og-url=&quot;https://dl.acm.org/doi/10.1145/3427771.3427859&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VktAr/dJMb83SdHFP/nPy3XPfZfvcStqhyHqNQx1/img.jpg?width=132&amp;amp;height=171&amp;amp;face=0_0_132_171&quot;&gt;&lt;a href=&quot;https://dl.acm.org/doi/10.1145/3427771.3427859&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dl.acm.org/doi/10.1145/3427771.3427859&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VktAr/dJMb83SdHFP/nPy3XPfZfvcStqhyHqNQx1/img.jpg?width=132&amp;amp;height=171&amp;amp;face=0_0_132_171');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UNet-NILM | Proceedings of the 5th International Workshop on Non-Intrusive Load Monitoring&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Energy disaggregation, a.k.a. Non-Intrusive Load Monitoring, aims to separate the energy consumption of individual appliances from the readings of a mains power meter measuring the total energy consumption of, e.g., a whole house. Energy consumption of ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dl.acm.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b14D7O/dJMcaihRvoc/LhtiaBWw1M39JxhSeLoKS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b14D7O/dJMcaihRvoc/LhtiaBWw1M39JxhSeLoKS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b14D7O/dJMcaihRvoc/LhtiaBWw1M39JxhSeLoKS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb14D7O%2FdJMcaihRvoc%2FLhtiaBWw1M39JxhSeLoKS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1310&quot; height=&quot;781&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 Nilm에서의 분류와 회귀 과제 정의에 대해 다음과 같이 설명한 바 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Nilm을 분류 문제로 바라볼 경우 &amp;lsquo;전력량 분해&amp;rsquo;는 전체 전력을 보고 &amp;lsquo;각 기기가 켜져 있는지, 혹은 꺼져 있는지&amp;rsquo; 즉 ON/OFF 상태를 예측하는 이진 분류(Classification) 문제가 되고&lt;br /&gt;&lt;br /&gt;Nilm을 회귀 문제로 바라볼 경우 &amp;lsquo;전력량 분해&amp;rsquo;는 전체 전력에서 &amp;lsquo;각 기기가 얼마만큼의 전력량을 사용하고 있는지&amp;rsquo;를 예측하는 회귀(Regression) 문제가 되는 것&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문에 소개된 UNet 모델의 핵심은, 제목 그대로 Regression과 Classification을 동시에 수행하는 Multi-task 모델을 만든 것에 있습니다. Abstract에 나온 부분을 그대로 인용하자면, &lt;i&gt;appliances&amp;rsquo; state detection and power estimation&lt;/i&gt; 라고 명시되어 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 &lt;i&gt;The UNet-NILM is a one-dimenstional CNN based on the U-Net architecture&lt;/i&gt; 라고도 서술되어 있는데, &quot;1D CNN을 기반으로 (즉, 1D 버전의 컨볼루션 레이어를 사용) UNet 아키텍쳐에 맞게 모델을 설계한 것이다&quot; 라고 이해하시면 될 것 같습니다. UNet모델을 기존의 CNN 모델과 비교한 결과 UNet 모델의 성능이 더 좋다는 것이 논문이 낸 결론입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 논문의 핵심 내용을 요약하자면&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개별 전력량 예측(회귀)와 개별 기기 ON/OFF 여부(이진분류)를 모두 판단(Multi-task)하는 모델&lt;/li&gt;
&lt;li&gt;기존 CNN모델과 비교했을 때, UNet 아키텍쳐의 모델이 더 성능이 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 설명을 위해 개별 기기의 전력량 예측(회귀)는 &lt;b&gt;Power Prediction&lt;/b&gt;, 개별 기기의 ON/OFF 상태 판정(이진분류)는 &lt;b&gt;State Prediction&lt;/b&gt;이라고 부르겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1D CNN과 UNet은 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;말이 나온 김에 1D CNN과 UNet에 대해서도 정리해봅시다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) 1D CNN이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biB09y/dJMcafk8MMp/2nakKl7Ik0EAQNCpH9W5k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biB09y/dJMcafk8MMp/2nakKl7Ik0EAQNCpH9W5k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biB09y/dJMcafk8MMp/2nakKl7Ik0EAQNCpH9W5k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiB09y%2FdJMcafk8MMp%2F2nakKl7Ik0EAQNCpH9W5k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;308&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SRDdev/Dogs_vs_Cats-CNN&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/SRDdev/Dogs_vs_Cats-CNN&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769777029564&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SRDdev/Dogs_vs_Cats-CNN: Binary Image Classification . This project uses basic Machine Learning Algorithms to different&quot; data-og-description=&quot;Binary Image Classification . This project uses basic Machine Learning Algorithms to differentiate between  Cats &amp;amp;  Dogs - GitHub - SRDdev/Dogs_vs_Cats-CNN: Binary Image Classification . This ...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SRDdev/Dogs_vs_Cats-CNN&quot; data-og-url=&quot;https://github.com/SRDdev/Dogs_vs_Cats-CNN&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dtnCi2/dJMb9b3MYlg/LBBkLqAa6EcEOIKkeHGqX0/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_125_1049_213,https://scrap.kakaocdn.net/dn/do74i7/dJMb9kTXRDx/95BbFkCJ90wKb15C5hGL7k/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_125_1049_213&quot;&gt;&lt;a href=&quot;https://github.com/SRDdev/Dogs_vs_Cats-CNN&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SRDdev/Dogs_vs_Cats-CNN&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dtnCi2/dJMb9b3MYlg/LBBkLqAa6EcEOIKkeHGqX0/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_125_1049_213,https://scrap.kakaocdn.net/dn/do74i7/dJMb9kTXRDx/95BbFkCJ90wKb15C5hGL7k/img.png?width=1200&amp;amp;height=600&amp;amp;face=969_125_1049_213');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - SRDdev/Dogs_vs_Cats-CNN: Binary Image Classification . This project uses basic Machine Learning Algorithms to different&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Binary Image Classification . This project uses basic Machine Learning Algorithms to differentiate between  Cats &amp;amp;  Dogs - GitHub - SRDdev/Dogs_vs_Cats-CNN: Binary Image Classification . This ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 링크 참고하시면 조와요 ^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 CNN(Convolutional Neural Network)의 핵심은&lt;b&gt; 특징 추출&lt;/b&gt;에 있습니다. 보통 컨볼루션을 설명하기 위해 이미지 분석을 예로 들고는 하는데, 가장 CNN 원리에 들어맞는 설명이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 컨볼루션 레이어로 강아지 이미지를 학습하게 되면, 필터가 이동하면서 이미지의 특징(예를 들어 강아지의 귀, 코, 눈, 꼬리 등)을 잡아내고, &quot;강아지 같다&quot;라는 결론을 내는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUxEK9/dJMcabJP0Rt/X4bFvbP37cKJqlUmDnd2Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUxEK9/dJMcabJP0Rt/X4bFvbP37cKJqlUmDnd2Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUxEK9/dJMcabJP0Rt/X4bFvbP37cKJqlUmDnd2Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUxEK9%2FdJMcabJP0Rt%2FX4bFvbP37cKJqlUmDnd2Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;321&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지의 경우는 가로와 세로가 있기 때문에 2D CNN에 해당하고, 여기서 다루는 전력 데이터의 경우 가로x세로의 형태가 아니라 &lt;b&gt;시간축을 기준으로 쭉 나열&lt;/b&gt;되어 있는 구조이기 때문에 1D CNN인 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;시간축을 따라 1차원적으로 필터가 지나가면서 특징을 잡아내게 (=특징 추출)&lt;/span&gt; 되는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) UNet이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UNet은 모델 아키텍쳐에 해당되는데, 여기서 아키텍쳐(Architecture)라는 것은 '어떤 구조를 가지는가' 즉 '모델의 설계도, 설계 방식'에 해당합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MYwCS/dJMcaaYqViq/SAYDgHWS54uJVB7jSreFS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MYwCS/dJMcaaYqViq/SAYDgHWS54uJVB7jSreFS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MYwCS/dJMcaaYqViq/SAYDgHWS54uJVB7jSreFS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMYwCS%2FdJMcaaYqViq%2FSAYDgHWS54uJVB7jSreFS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;596&quot; height=&quot;538&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 그림은 논문에서 UNet 모델을 설명할 때 첨부한 그림인데, 말 그대로 구조가 U자 처럼 생겨서 U-Net이라고 불리는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 간단하게 정리하자면 UNet의 경우 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;밑으로 내려가면서는 정보를 압축(= 특징 추출, Encoder)를 하고 다시 올라가는 부분에서는 정보 복원(= 해상도 복원, Decoder)&lt;/span&gt;를 하는 구조(설계구조)를 가집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기서 Skip-Connection이라는 개념도 등장하는데, 여기서부터는 저도 잘 몰라서 이에 대한 자세한 설명의 경우 아래 글에 잘 정리되어 있는 것 같으니 참고하시면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769777819480&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;U-Net 의 이해&quot; data-og-description=&quot;U-Net은 이미지 분할(Image Segmentation) 문제를 해결하기 위해 개발된 합성곱 신경망(CNN) 기반의 모델이다. 이 모델은 2015년에 Olaf Ronneberger와 그의 동료들에 의해 의료 영상 분석을 위해 제안되었으며&quot; data-og-host=&quot;ai-bt.tistory.com&quot; data-og-source-url=&quot;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&quot; data-og-url=&quot;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOwy3o/dJMb9kTXRHy/J9keBGkd5VuV7hsHGBUkIK/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476,https://scrap.kakaocdn.net/dn/cm55Re/dJMb9g451kh/Z7Lh0TFHvC0AjwZgu01970/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476,https://scrap.kakaocdn.net/dn/sexIg/dJMb9hCWc80/EP3FYOcsz4hCCgClN2T1BK/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476&quot;&gt;&lt;a href=&quot;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ai-bt.tistory.com/entry/U-Net-%EC%9D%98-%EC%9D%B4%ED%95%B4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOwy3o/dJMb9kTXRHy/J9keBGkd5VuV7hsHGBUkIK/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476,https://scrap.kakaocdn.net/dn/cm55Re/dJMb9g451kh/Z7Lh0TFHvC0AjwZgu01970/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476,https://scrap.kakaocdn.net/dn/sexIg/dJMb9hCWc80/EP3FYOcsz4hCCgClN2T1BK/img.png?width=721&amp;amp;height=476&amp;amp;face=0_0_721_476');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;U-Net 의 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;U-Net은 이미지 분할(Image Segmentation) 문제를 해결하기 위해 개발된 합성곱 신경망(CNN) 기반의 모델이다. 이 모델은 2015년에 Olaf Ronneberger와 그의 동료들에 의해 의료 영상 분석을 위해 제안되었으며&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ai-bt.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;베이스라인 모델(Baseline Model)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 처음으로 돌아가서, 저의 목적은 '전체 전력에서 개별 전력을 분해하는 모델을 만드는 것'이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 처음(제로베이스)부터 하나하나 만드는 게 아닌 다른 모델을 참고하여 가장 간단한 베이스라인(기본 모델)을 만들어 놓고, 점점 발전해나가자는 것이 목표였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇듯 모델 빌딩 과정에서 &lt;b&gt;베이스라인(가장 기본이 되는 모델, 가장 가벼운 모델)&lt;/b&gt;을 만들어두는 것이 중요한 이유는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;발전된 모델과의 비교 대상&amp;nbsp;&amp;rarr; 성능 개선의 비교 기준&lt;/li&gt;
&lt;li&gt;파이프라인 설정 &amp;rarr; 이후 과정에서의 정상 작동 확인&lt;/li&gt;
&lt;li&gt;디버깅의 용이성 &amp;rarr; 에러의 정확한 원인 파악에 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등등... 이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해보면 애초에 처음부터 완벽한 새로운 모델을 만드는 것은 말도 안 되는 일입니다. 그래서 저는 베이스라인 모델로 UNet 모델이 아닌 참고논문에서의 비교자료로 쓰인 CNN1D 모델을 먼저 만들기로 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 위 논문 &lt;i&gt;UNet-NILM: A Deep Neural Network for Multi-tasks Appliances State Detection and Power Estimation in NILM&lt;/i&gt;의 저자 Anthony Faustine이 올려둔 것을 참고하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/sambaiga/UNETNiLM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/sambaiga/UNETNiLM&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769778060707&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - sambaiga/UNETNiLM&quot; data-og-description=&quot;Contribute to sambaiga/UNETNiLM development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/sambaiga/UNETNiLM&quot; data-og-url=&quot;https://github.com/sambaiga/UNETNiLM&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHbSxV/dJMb82MxU47/oqLMoEuXOnIKCEDIC0Gwo1/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271,https://scrap.kakaocdn.net/dn/bJPZfM/dJMb83knPdJ/4UKX891Jff4WKe8WPwBsL1/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271&quot;&gt;&lt;a href=&quot;https://github.com/sambaiga/UNETNiLM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/sambaiga/UNETNiLM&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHbSxV/dJMb82MxU47/oqLMoEuXOnIKCEDIC0Gwo1/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271,https://scrap.kakaocdn.net/dn/bJPZfM/dJMb83knPdJ/4UKX891Jff4WKe8WPwBsL1/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - sambaiga/UNETNiLM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to sambaiga/UNETNiLM development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘에는 이런 식으로 코드와 논문을 같이 공개하는(혹은, 공개해야 하는) 경우가 대다수입니다. 보통 논문(Paper)를 먼저 공개하고 이후에 코드를 공유하는 식으로 진행되니 공부하시는 분들은 잘 써먹으세여~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 전처리 과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 데이터는 Pandas의 데이터프레임 형태로 존재합니다. 그리고 파이토치로 모델을 만들 것이기 때문에 이 시계열 전력 데이터(이전 글에서의 '고양시 전력데이터'를 그대로 사용합니다.)를 파치토치 텐서 형태로 바꿔줄 필요가 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 이전에 수행한 전처리에 더해 &lt;b&gt;모델에 돌릴 수 있는 형태로 만드는 추가 전처리 과정&lt;/b&gt;이 필요합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 추가 전처리 과정은 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;전체 전력량 기준으로 Min-Max Scaling&lt;/li&gt;
&lt;li&gt;Feature Data와 Target Data 만들기&lt;/li&gt;
&lt;li&gt;Pytorch 텐서 변환 과정&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과정을 하나하나 정리하자면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) 전체 전력량 기준으로 Min-Max Scaling&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 머신러닝 모델 학습 과정에서 스케일링은 필수적인 과정입니다. 적절한 스케일링을 통해 모델이 왜곡 없이 데이터를 받아들일 수 있게 해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케일링의 방법은 여러가지가 존재하나 중요한 것은 &lt;b&gt;모델이 왜곡없이(=다른 오해 없이) 받아들일 수 있는 형태로 하되 정보 손실을 최소화&lt;/b&gt; 하는 방법으로 스케일링 하는 것이 중요합니다. (누가 한 말은 아니고, 그냥 제 생각입니다...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 전력 데이터의 경우 '전체 전력대비 개별 기기의 전력'이라는 정보를 유지하기 위해 전체 전력량을 기준으로 Min-Max Scaling을 선택하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) Feature Data와 Target Data 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 만들기 전에 먼저 확실하게 정해두고 시작해야 하는 것이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델이 해결해야 하는 과제가 무엇인지 (과제정의: 회귀인지, 분류인지)&lt;/li&gt;
&lt;li&gt;Feature와 Target이 각각 무엇인지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과제 정의의 경우 위에서 충분히 정의하였으니 Feature와 Target이 무엇이 될지를 명확히 하고 가야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 모델이 무엇을 Input으로 받고 Output으로 무엇을 낼지를 정해줘야 한다는 것입니다. 해당 베이스라인 모델의 경우&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Input으로 전체 전력반의 active power(유효전력)을 받고&lt;/li&gt;
&lt;li&gt;Output으로 개별 기기의 유효전력(power)와 ON/OFF 상태(state)를 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해야 합니다. 예시로 Target Data를 만드는 과정은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769778689608&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 개별 기기의 데이터
target_dfs = [df_ch02, df_ch03, df_ch07, df_ch09, df_ch10,  df_ch23]

# 유효전력(power)와 ON/OFF 상태(state) 데이터
power_dfs = [
    df[['date_time', 'active_power']].rename(columns={'active_power': f'power_{i}'})
    for i, df in enumerate(target_dfs)]
state_dfs = [
    df[['date_time', 'active_inactive']].rename(columns={'active_inactive': f'state_{i}'})
    for i, df in enumerate(target_dfs)]

# 데이터셋 병합 과정
power_merged = power_dfs[0]
for df in power_dfs[1:]:
    power_merged = pd.merge(power_merged, df, on='date_time', how='outer')
state_merged = state_dfs[0]
for df in state_dfs[1:]:
    state_merged = pd.merge(state_merged, df, on='date_time', how='outer')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(3) Pytorch 텐서 변환과정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 설명했듯 현재 데이터는 Pandas의 DataFrame 형태로 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 파이토치를 사용해 만들 것이기 때문에 데이터를 적절한 텐서 형태로 만들어줘야 합니다. 구체적인 과정(파이프라인)은 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;우선 DataFrame을 array 형태로 변환&lt;/li&gt;
&lt;li&gt;텐서로 바꿔주기 전에, 시계열 데이터를 시간 순서대로 train test split&lt;/li&gt;
&lt;li&gt;Windowing 과정: 시퀀스 단위 재배치&lt;/li&gt;
&lt;li&gt;파이토치 텐서로 변환&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 과정에 대해 조금 더 자세히 설명해보자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시계열 데이터이기 때문에 데이터를 섞어서(shuffle) train 데이터와 test 데이터를 나누는 것이 아닌, 시간 순서대로 split해줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 여기서 말하는 Windowing 과정이란, 시계열 데이터를 &amp;ldquo;작은 조각의 학습 단위&amp;rdquo;로 쪼개는 작업입니다. 그리고 &amp;lsquo;시간에 따른 흐름&amp;rsquo;을 모델이 관찰할 수 있도록 이를 하나의 묶음(Sequence)로 만들어 줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 말한 &amp;lsquo;시퀀스 단위 재배치&amp;rsquo;는 이 시퀀스(묶음) 단위로 데이터를 재배치하는 과정을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1D CNN 모델 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 모델을 만드는 과정에서는 다음 코드를 참고하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769778917524&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;UNETNiLM/src/net/layers.py at master &amp;middot; sambaiga/UNETNiLM&quot; data-og-description=&quot;Contribute to sambaiga/UNETNiLM development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&quot; data-og-url=&quot;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b6eYIQ/dJMb8WMkr4y/m7jjkjxaWNDMG4OFMbeZuk/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271,https://scrap.kakaocdn.net/dn/dasTl1/dJMb8RjWOox/i4l8d87HPe12ypVdSX7kVk/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271&quot;&gt;&lt;a href=&quot;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/sambaiga/UNETNiLM/blob/master/src/net/layers.py&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b6eYIQ/dJMb8WMkr4y/m7jjkjxaWNDMG4OFMbeZuk/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271,https://scrap.kakaocdn.net/dn/dasTl1/dJMb8RjWOox/i4l8d87HPe12ypVdSX7kVk/img.png?width=346&amp;amp;height=271&amp;amp;face=0_0_346_271');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UNETNiLM/src/net/layers.py at master &amp;middot; sambaiga/UNETNiLM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to sambaiga/UNETNiLM development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 파이토치로 모델 만드는 과정에서 쓰인 레이어들도 다 가져오려고 했는데, 각 레이어들이 너무 무거워서 모델이 돌아가다가 중간에 멈춰버리는 문제점이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 실제로 쓰이는 부분들만을 가져와서(조건절 코드의 생략 등) 간단하게 레이어들을 선언하고, 모델을 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델에 쓰이는 각 레이어는(코드 생략) 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MLPLayer: 완전 연결층 블록으로, Linear 층 및 활성화함수 포함&lt;/li&gt;
&lt;li&gt;Conv1D: 컨볼루션 레이어의 기본 단위&lt;/li&gt;
&lt;li&gt;Encoder: 위에서 선언한 Conv1D 레이어를 쌓아올려, 특징 추출의 역할을 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 바탕으로 한 전체 모델은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769779055965&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class CNN1DModel(nn.Module):
    def __init__(self, in_size=1,
                 output_size=12,
                 d_model=128,
                 dropout=0.01,
                 seq_len=9,
                 n_layers=5,
                 n_quantiles=1,
                 pool_filter=16):
        super().__init__()
        self.enc_net = Encoder(n_channels=in_size, n_kernels=d_model, n_layers=n_layers, seq_size=seq_len)
        self.pool_filter = pool_filter
        self.mlp_layer = MLPLayer(in_size=d_model*pool_filter, hidden_size=1024, output_size=None)
        self.dropout = nn.Dropout(dropout)
        self.pool_filter = pool_filter
        self.n_quantiles = n_quantiles

        self.fc_out_state  = nn.Linear(1024, output_size*2)
        self.fc_out_power  = nn.Linear(1024, output_size*n_quantiles)

        # 출력 제약: 전력은 0 이상만 나오도록 ReLU
        self.power_act = nn.ReLU()

        nn.init.xavier_normal_(self.fc_out_state.weight)
        nn.init.xavier_normal_(self.fc_out_power.weight)
        self.fc_out_state.bias.data.fill_(0)
        self.fc_out_power.bias.data.fill_(0)

    def forward(self, x):
        x = x.permute(0,2,1)
        B = x.size(0)
        conv_out = self.dropout(self.enc_net(x))
        conv_out = F.adaptive_avg_pool1d(conv_out, self.pool_filter).reshape(x.size(0), -1)
        mlp_out  = self.dropout(self.mlp_layer(conv_out))

        states_logits   = self.fc_out_state(mlp_out).reshape(B, 2, -1)

        # 전력 출력 &amp;rarr; Linear + ReLU
        power_logits    = self.fc_out_power(mlp_out)
        power_logits    = self.power_act(power_logits)

        if self.n_quantiles &amp;gt; 1:
            power_logits = power_logits.reshape(B, self.n_quantiles, -1)

        return  states_logits,  power_logits&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 부분을 보시면 위에서의 설명대로 모델이 개별 기기의 ON/OFF 상태 예측(state_logits)와 개별 기기의 전력량 예측(power_logits)을 동시에 예측하는 Multi-task Model임을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1D CNN 모델 학습과정&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) Feature Data 구조 변경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 모델을 돌리는 과정에서는 이런저런 시행착오들이 존재하였습니다. 위에서 모델의 Feature Data(=Input)과 Target Data(=Output)에 대해 다음과 같이 정의하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Input으로 전체 전력반의 active power(유효전력)을 받고&lt;/li&gt;
&lt;li&gt;Output으로 개별 기기의 유효전력(power)와 ON/OFF 상태(state)를 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 Input으로 학습시킬 Feature Data의 일부는 다음과 같습니다. (전체 전력반의 유효전력)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btfphS/dJMcafrUtbi/oXSkdVlS7GACkQDk5Keh1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btfphS/dJMcafrUtbi/oXSkdVlS7GACkQDk5Keh1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btfphS/dJMcafrUtbi/oXSkdVlS7GACkQDk5Keh1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtfphS%2FdJMcafrUtbi%2FoXSkdVlS7GACkQDk5Keh1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 발생한 문제점은 Feature로 넣어줘야 하는 데이터가 시계열 데이터 특성 상 너무 &quot;세로로 긴&quot; 형태였다는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3eZG/dJMcacaUdiU/Sx1LNK2KaHXWtcDRuF9ocK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3eZG/dJMcacaUdiU/Sx1LNK2KaHXWtcDRuF9ocK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3eZG/dJMcacaUdiU/Sx1LNK2KaHXWtcDRuF9ocK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3eZG%2FdJMcacaUdiU%2FSx1LNK2KaHXWtcDRuF9ocK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;554&quot; height=&quot;280&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 확인해보면 데이터가 864,000개나 됩니다. 모델이 받는 데이터가 너무 길다보니 애초에 학습코드가 끊임없이 돌아가거나 돌아가다 멈추는 문제가 발생하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 대한 해결로 30개의 데이터들을 합쳐 하나로 &quot;옆으로 길게&quot; 나열하는 방법을 선택하게 됩니다. 즉, 00시 00분 0.1초부터 00시 00분 3.0초까지의 데이터를 하나의 행으로 옆으로 나란히 세우는 겁니다. 이렇게 되면 Feature Data의 shape을 (864000,2)에서 (28800,31)로 바꿀 수 있게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;573&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qq2wv/dJMcaivmQai/sWvO2d91k30PY8hmw2ibL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qq2wv/dJMcaivmQai/sWvO2d91k30PY8hmw2ibL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qq2wv/dJMcaivmQai/sWvO2d91k30PY8hmw2ibL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqq2wv%2FdJMcaivmQai%2FsWvO2d91k30PY8hmw2ibL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1698&quot; height=&quot;573&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;573&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이건 교수님이 해주신 조언이었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어차피 시간흐름에 따른 전력 흐름의 패턴을 찾는 것이 1D CNN모델의 역할이기 때문에, 이러한 &quot;옆으로 긴&quot; 형태로 바꿔줘도 무방할 것이라는 생각이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) 모델 학습 코드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 학습 코드의 경우 여느 파이토치 모델학습 코드와 다를 것은 없습니다. 다만 위에서 설명하였듯이 Power Prediction과 State Prediction을 동시에 수행하는 모델이기 때문에 이에 대한 criterion을 각각 정의해줘야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1769865210903&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 손실함수 및 optimizer 정의
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion_state = nn.CrossEntropyLoss()   # 우선은 클래스가 2개인 다중분류로, CrossEntropyLoss 사용
criterion_power = nn.MSELoss()

num_epochs = 50       # epoch 개수 설정

total_losses = []     # loss 값 저장용
state_losses = []
power_losses = []

for epoch in range(num_epochs):
    model.train()
    optimizer.zero_grad()

    states_logits, power_logits = model(x_train_tensor) 

    # 상태 예측 loss
    state_loss = 0
    for i in range(state_train_tensor.shape[1]):  # 12개 가전
        state_loss += criterion_state(states_logits[:, :, i], state_train_tensor[:, i])
    state_loss /= state_train_tensor.shape[1]

    # Loss 구하기
    power_loss = criterion_power(power_logits, power_train_tensor)

    total_loss = state_loss + power_loss
    total_loss.backward()
    optimizer.step()

    total_losses.append(total_loss.item())
    state_losses.append(state_loss.item())
    power_losses.append(power_loss.item())

    print(f&quot;[{epoch+1}/{num_epochs}] total_loss: {total_loss.item():.4f}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1D CNN 모델학습 결과&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 train 데이터에 대해 학습 과정에서의 Loss 변화를 그려보면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NZwWJ/dJMcab36wjs/HpwbkbOac0ZB3BkXTIFkv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NZwWJ/dJMcab36wjs/HpwbkbOac0ZB3BkXTIFkv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NZwWJ/dJMcab36wjs/HpwbkbOac0ZB3BkXTIFkv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNZwWJ%2FdJMcab36wjs%2FHpwbkbOac0ZB3BkXTIFkv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;989&quot; height=&quot;590&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가...문제가 있다는 걸 바로 볼 수 있는데 딱 봐도 State Loss는 둘째치고 Power Loss가 땅바닥을 기어다니는걸로 봐서 Power Prediction에 문제가 있다는 것을 알 수 있습니다. 문제점을 자세히 살펴보고 정리해본다면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제점 #1. R-squared 음수 출력&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 무엇이 문제인지 자세히 살펴봅시다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선은 State Prediction과 Power Prediction에 대해 평가지표를 각각 출력해 보았습니다. 설명한 바와 같이 전자의 경우는 분류 문제이고 후자의 경우는 회귀 문제이기 때문에, 평가지표를 다르게 해야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;State Prediction의 평가지표는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1365&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NAxOc/dJMcaihRRhU/VUMSuICdLjKwzjf7CTSX1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NAxOc/dJMcaihRRhU/VUMSuICdLjKwzjf7CTSX1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NAxOc/dJMcaihRRhU/VUMSuICdLjKwzjf7CTSX1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNAxOc%2FdJMcaihRRhU%2FVUMSuICdLjKwzjf7CTSX1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1365&quot; height=&quot;480&quot; data-origin-width=&quot;1365&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 Precision, Recall, F1-score는 낮지만 Accuracy만을 따졌을 떄는 조금은 봐줄 만한 점수가 나왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애초에 본 모델은 가장 기본적인 '베이스라인 모델'이므로 어느 정도의 성능은 기대하겠지만 평가지표에서 관찰해야 할 것은 &quot;모델의 성능이 얼마나 정확한가?&quot;를 볼 것이 아니라&lt;b&gt; &quot;모델이 내가 원하는 방향으로 돌아가고 있는가?&quot;&lt;/b&gt;를 따져야 합니다. Accuracy가 0.7은 넘었으므로 State Prediction은 적당히 작동되는 걸로 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 문제는 Power Prediciton의 평가지표를 출력해보면 R-squared가 음수가 나오는 처참한 결과가 나옵니다...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bulAvr/dJMcajuhkDv/2khvJKEMzPliPEKgaduEo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bulAvr/dJMcajuhkDv/2khvJKEMzPliPEKgaduEo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bulAvr/dJMcajuhkDv/2khvJKEMzPliPEKgaduEo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbulAvr%2FdJMcajuhkDv%2F2khvJKEMzPliPEKgaduEo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1051&quot; height=&quot;453&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇이 문제인지 몰라서 이것저것 인터넷을 뒤져 봤는데, 저의 상황에 맞는 정확한 답을 찾을 수는 없었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bluediary8.tistory.com/159&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bluediary8.tistory.com/159&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769865690382&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;테스트 데이터에서 회귀 모델의  결정계수가(R2) 음수가 나오는 이유&quot; data-og-description=&quot;회귀 모델의 결정계수(R2)는 회귀 모델의 성능 지표로서 사용이 가능하며, 다음과 같이 쓸 수 있습니다. R2의 범위는 0부터 1사이라는 것을 수식만 봐도 알 수 있는데, 테스트 데이터에서 R2를 뽑아&quot; data-og-host=&quot;bluediary8.tistory.com&quot; data-og-source-url=&quot;https://bluediary8.tistory.com/159&quot; data-og-url=&quot;https://bluediary8.tistory.com/159&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byvsUz/dJMb8RjWSVn/3ZmqtyjS7MV2eUyp44XxSk/img.png?width=800&amp;amp;height=172&amp;amp;face=0_0_800_172,https://scrap.kakaocdn.net/dn/bI0Plc/dJMb9dHiZly/56elx6fCtzPI4PrL9q0Lbk/img.png?width=800&amp;amp;height=172&amp;amp;face=0_0_800_172&quot;&gt;&lt;a href=&quot;https://bluediary8.tistory.com/159&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bluediary8.tistory.com/159&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byvsUz/dJMb8RjWSVn/3ZmqtyjS7MV2eUyp44XxSk/img.png?width=800&amp;amp;height=172&amp;amp;face=0_0_800_172,https://scrap.kakaocdn.net/dn/bI0Plc/dJMb9dHiZly/56elx6fCtzPI4PrL9q0Lbk/img.png?width=800&amp;amp;height=172&amp;amp;face=0_0_800_172');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;테스트 데이터에서 회귀 모델의 결정계수가(R2) 음수가 나오는 이유&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;회귀 모델의 결정계수(R2)는 회귀 모델의 성능 지표로서 사용이 가능하며, 다음과 같이 쓸 수 있습니다. R2의 범위는 0부터 1사이라는 것을 수식만 봐도 알 수 있는데, 테스트 데이터에서 R2를 뽑아&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bluediary8.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문제점 #2. Power가 모든 지점에서 0인 문제&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 원인을 찾기 위해 모델의 출력값을 관찰해보기로 했습니다. 실제로 모델이 낸 답이 무엇인지를 확인해보니, 왜 R-squared가 음수값이 나왔는지를 알 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 TV의 경우에 대해, test 데이터에 대해 모델이 낸 State Prediction과 Power Prediction의 답입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cliGDK/dJMcabiLzPa/pWdws3r9ZXMDw3zC4vDvUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cliGDK/dJMcabiLzPa/pWdws3r9ZXMDw3zC4vDvUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cliGDK/dJMcabiLzPa/pWdws3r9ZXMDw3zC4vDvUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcliGDK%2FdJMcabiLzPa%2FpWdws3r9ZXMDw3zC4vDvUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1013&quot; height=&quot;470&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFMWLl/dJMcaaRHl3F/DLcnmzZEKkGQ7McDhmRSx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFMWLl/dJMcaaRHl3F/DLcnmzZEKkGQ7McDhmRSx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFMWLl/dJMcaaRHl3F/DLcnmzZEKkGQ7McDhmRSx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFMWLl%2FdJMcaaRHl3F%2FDLcnmzZEKkGQ7McDhmRSx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1033&quot; height=&quot;470&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 그래프를 비교해보면 무엇이 문제인지를 바로 알 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 TV가 켜져있는지 or 꺼져있는지는 어느 정도로 예측하는 반면, TV가 사용한 전력량에 대해서는 모두 0으로 예측하고 있다는 것입니다. 다른 모든 기기에 대해 확인해보았을 때도, ON/OFF 상태는 적절한 수준으로 예측하고 있는 반면 각 기기가 사용하는 전력량은 모두 0으로 예측하고 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 낸 Power Prediction에 대한 답이 모두 0인 상황에서, R-squared를 계산하면 음수가 나오는 것은 당연한 결과였을 것입니다. (R-squared의 계산 공식에 비추어 볼 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 문제가 아니라 데이터의 문제가 아닐까도 생각해 보았습니다. 실제 데이터(정답 데이터)에서 TV의 사용 전력량이 0이었기 때문에 모델도 TV의 사용 전력량을 0으로 예측한 것이 아닐까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq0iPg/dJMcagdidey/2VWqOoFdU8hxn31Dp5KCQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq0iPg/dJMcagdidey/2VWqOoFdU8hxn31Dp5KCQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq0iPg/dJMcagdidey/2VWqOoFdU8hxn31Dp5KCQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq0iPg%2FdJMcagdidey%2F2VWqOoFdU8hxn31Dp5KCQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 실제 TV의 데이터는 다음과 같이, 명확한 전력량 사용이 존재하는 형태였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 제가 만든 베이스라인 모델은&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개별 기기의 ON/OFF 상태는 어느 정도로 적절하게 예측하지만,&lt;/li&gt;
&lt;li&gt;개별 기기의 전력량은 모두 0으로 예측하는 (= 개별 기기의 전력량은 파악하지 못하는)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상황인 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 제가 만든 Nilm의 1D CNN 베이스라인 모델에 대해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 참고 논문부터 간단한 이론, 모델 빌드 과정, 그리고 모델의 학습결과까지를 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말씀드리자면 저는 결국 모델이 왜 Power Prediction에 실패하는지에 대한 원인을 찾아내지 못했습니다. 그래서 다른 해결 방안으로 참고논문에서 모델학습에 사용한 UKDALE 데이터를 사용하여, 데이터 보완을 진행하는 방안을 선택하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 이 UKDALE 데이터에 대해 조금 더 자세히 정리해보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Nilm 및 전력예측</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/18</guid>
      <comments>https://powderblue0.tistory.com/18#entry18comment</comments>
      <pubDate>Fri, 30 Jan 2026 22:18:51 +0900</pubDate>
    </item>
    <item>
      <title>[Nilm] (4)-FFT와 이상탐지</title>
      <link>https://powderblue0.tistory.com/17</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xU0ZY/dJMcaia5sql/9UhXC4nuqIA6SqL6T5f0SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xU0ZY/dJMcaia5sql/9UhXC4nuqIA6SqL6T5f0SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xU0ZY/dJMcaia5sql/9UhXC4nuqIA6SqL6T5f0SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxU0ZY%2FdJMcaia5sql%2F9UhXC4nuqIA6SqL6T5f0SK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1710&quot; height=&quot;720&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글에서는 데이터 선정 과정과 다운로드한 &quot;대용량 데이터&quot;를 어떻게 &quot;다룰 수 있는 수준&quot;까지 줄였는지에 대해 정리하였습니다. 아래에서 지난 글을 확인할 수 있으니 참고 바랍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/16&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769609607086&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (3)-데이터 선정과 전처리&quot; data-og-description=&quot;이전까지의 글에서 Nilm 기술에 대한 소개와 Nilm 연구에 사용되는 데이터에 대해 정리하였습니다. 이제부터는 '그래서 제가 실제로 무엇을 하였는지'에 대해 정리해보려고 합니다. 이번 글에서는&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/16&quot; data-og-url=&quot;https://powderblue0.tistory.com/16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biuC6L/dJMb88FZAc1/m5h5PMPlJ0I9krKgDAT1I1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/4Wnzx/dJMb8U8OklV/gu1RsD7KJeajA7QxQBrfe1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/bSnSZV/dJMb9kTXFMd/iwN630o7XLIJvYy3SPdhOk/img.png?width=1435&amp;amp;height=891&amp;amp;face=0_0_1435_891&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biuC6L/dJMb88FZAc1/m5h5PMPlJ0I9krKgDAT1I1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/4Wnzx/dJMb8U8OklV/gu1RsD7KJeajA7QxQBrfe1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/bSnSZV/dJMb9kTXFMd/iwN630o7XLIJvYy3SPdhOk/img.png?width=1435&amp;amp;height=891&amp;amp;face=0_0_1435_891');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (3)-데이터 선정과 전처리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이전까지의 글에서 Nilm 기술에 대한 소개와 Nilm 연구에 사용되는 데이터에 대해 정리하였습니다. 이제부터는 '그래서 제가 실제로 무엇을 하였는지'에 대해 정리해보려고 합니다. 이번 글에서는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일련의 전처리 과정을 거쳐 다음과 같은 데이터를 얻었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NP4Qy/dJMcagEmFb0/q1mfoKhkpsEAei5I4Hyp1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NP4Qy/dJMcagEmFb0/q1mfoKhkpsEAei5I4Hyp1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NP4Qy/dJMcagEmFb0/q1mfoKhkpsEAei5I4Hyp1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNP4Qy%2FdJMcagEmFb0%2Fq1mfoKhkpsEAei5I4Hyp1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 전처리한 데이터에 대해 수행한 분석들 및 그 적용근거, 그리고 분석 결과까지를 요약해보도록 하겠습니다. 모델 빌드 전 데이터를 분석하는(EDA) 단계의 일부라고 보시면 될 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;왜 FFT여야 하는가?&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FFT 분석 과정 및 결과&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시계열 이상탐지(Abnomaly Detection)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이상탐지 결과&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분석 결과 정리&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;왜 FFT여야 하는가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 전처리 과정 이후 가장 먼저 한 것은 active power(유효전력)열에 대한 FFT분석이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고용으로 (2)편에서 FFT 설명할 때 올린 링크를 다시 첨부해두겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.nti-audio.com/ko/%EB%89%B4-%EC%8A%A4/fft%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%82%AC%ED%95%AD%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4&quot;&gt;https://www.nti-audio.com/ko/%EB%89%B4-%EC%8A%A4/fft%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%82%AC%ED%95%AD%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770190812211&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;FFT에 관한 몇 가지 사항을 정리해 봅시다&amp;hellip;&quot; data-og-description=&quot;&amp;quot;빠른 Fourier 변환 (FFT)&amp;quot;은 오디오 및 음향 측정 분야에서 중요한 측정 방법 입니다. 신호를 개별 스펙트럼 구성 요소로 변환하여 신호에 대한 주파수 정보를 제공 합니다. FFT는 기계 또는 시스템&quot; data-og-host=&quot;www.nti-audio.com&quot; data-og-source-url=&quot;https://www.nti-audio.com/ko/%EB%89%B4-%EC%8A%A4/fft%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%82%AC%ED%95%AD%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4&quot; data-og-url=&quot;https://www.nti-audio.com/ko/뉴-스/fft에-관한-몇-가지-사항을-정리해-봅시다&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYUyKP/dJMb81fNWyt/hSSOJJrTq7E8vwz5n3xnV0/img.jpg?width=540&amp;amp;height=373&amp;amp;face=0_0_540_373,https://scrap.kakaocdn.net/dn/bSkPIk/dJMb9jOijjs/zYUPPzaTgobn42MOQ1BZn1/img.jpg?width=540&amp;amp;height=373&amp;amp;face=0_0_540_373&quot;&gt;&lt;a href=&quot;https://www.nti-audio.com/ko/%EB%89%B4-%EC%8A%A4/fft%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%82%AC%ED%95%AD%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.nti-audio.com/ko/%EB%89%B4-%EC%8A%A4/fft%EC%97%90-%EA%B4%80%ED%95%9C-%EB%AA%87-%EA%B0%80%EC%A7%80-%EC%82%AC%ED%95%AD%EC%9D%84-%EC%A0%95%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYUyKP/dJMb81fNWyt/hSSOJJrTq7E8vwz5n3xnV0/img.jpg?width=540&amp;amp;height=373&amp;amp;face=0_0_540_373,https://scrap.kakaocdn.net/dn/bSkPIk/dJMb9jOijjs/zYUPPzaTgobn42MOQ1BZn1/img.jpg?width=540&amp;amp;height=373&amp;amp;face=0_0_540_373');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;FFT에 관한 몇 가지 사항을 정리해 봅시다&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&quot;빠른 Fourier 변환 (FFT)&quot;은 오디오 및 음향 측정 분야에서 중요한 측정 방법 입니다. 신호를 개별 스펙트럼 구성 요소로 변환하여 신호에 대한 주파수 정보를 제공 합니다. FFT는 기계 또는 시스템&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.nti-audio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmQ0Ay/dJMb996hHJK/VugRgZwXjs6MRzoXA8ImD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmQ0Ay/dJMb996hHJK/VugRgZwXjs6MRzoXA8ImD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmQ0Ay/dJMb996hHJK/VugRgZwXjs6MRzoXA8ImD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmQ0Ay%2FdJMb996hHJK%2FVugRgZwXjs6MRzoXA8ImD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;378&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 FFT분석을 한 이유는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;전체 전력량에서 개별 전력량을 분해&lt;/span&gt;한다는 Nilm 기술의 핵심과 가장 적합한 분석 방법이라고 생각했기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터에서 기본적으로 개별 기기의 소비량이 결합된 형태는 복잡한 파형을 형성하게 되는데, 이때 FFT분석을 할 경우&amp;nbsp; 복잡한 시간축의 신호를 주파수 축으로 변환(=푸리에 변환)하여 분석을 용이하게 만들어 줄 것이라 예상하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;FFT 분석 과정 및 결과&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제공받은 데이터의 22가지 수집 기기는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byV597/dJMcadngUFl/8qvqS7k9I2Qg4pwInLpjl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byV597/dJMcadngUFl/8qvqS7k9I2Qg4pwInLpjl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byV597/dJMcadngUFl/8qvqS7k9I2Qg4pwInLpjl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyV597%2FdJMcadngUFl%2F8qvqS7k9I2Qg4pwInLpjl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;634&quot; height=&quot;315&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로 예상하였던(기대했던?) FFT 결과는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모터가 없는 단순 ON/OFF 기기의 경우 주파수 피크가 미미할 것이다.&lt;/li&gt;
&lt;li&gt;반대로 모터나 컴프레셔가 있는 냉장고, 헤어드라이어 등은 특정 회전수(=주파수)의 피크가 나타날 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유의미한 FFT 분석의 경우 다음과 같이 주파수 도메인에서 뚜렷한 피크를 보이는 형태로 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, x축이 주파수(Frequency)인 그래프에서 눈에 띄는 피크가 존재하는, 아래와 같은 느낌의 결과를 기대했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JgQTa/dJMcac9IDNZ/Ai9pv5iiJIna3M4IuTFpL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JgQTa/dJMcac9IDNZ/Ai9pv5iiJIna3M4IuTFpL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JgQTa/dJMcac9IDNZ/Ai9pv5iiJIna3M4IuTFpL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJgQTa%2FdJMcac9IDNZ%2FAi9pv5iiJIna3M4IuTFpL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;616&quot; height=&quot;432&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이를 수행하기 위한 간단한 코드는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;active_power(유효전력)열에 대해 FFT를 수행하는 함수 fft()와 단순하게 시간에 대한 active_power(유효전력) 그래프를 그려주는 함수 graph()를 각각 선언하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 수집기기에 대해 FFT 분석을 해줄 것이기에, 이처럼 여러 번 반복할 작업의 경우 이렇게 함수 선언을 해주면 편해요.&lt;/p&gt;
&lt;pre id=&quot;code_1769607011011&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def fft(df):       # FFT 분석 함수
    df.index = pd.to_datetime(df.index)   # 시간인덱스를 datetime 형식으로 변경
    signal = df[&quot;active_power&quot;].values    # active power에 대해 FFT 수행

    time_diffs = df.index.to_series().diff().dt.total_seconds().dropna().values
    sampling_interval = np.median(time_diffs)
    fs = 1 / sampling_interval  # 샘플링 주파수

    # FFT 수행
    n = len(signal)
    fft_result = np.fft.fft(signal)
    freqs = np.fft.fftfreq(n, d=1/fs)
    power_spectrum = np.abs(fft_result)**2 / n

    mask = freqs &amp;gt; 0        # 양의 주파수만 추출
    freqs = freqs[mask]
    power_spectrum = power_spectrum[mask]

    plt.figure(figsize=(10, 4))
    plt.plot(freqs, power_spectrum, color='blue')
    plt.title(&quot;Power Spectrum of active_power (df1_active)&quot;)
    plt.xlabel(&quot;Frequency (Hz)&quot;)
    plt.ylabel(&quot;Power&quot;)
    plt.show()
    
def graph(df):        # active power 그래프 그리는 함수
    df = df.sort_index()

    plt.figure(figsize=(15, 5))
    plt.plot(df.index, df['active_power'], color='green', linewidth=0.5)
    plt.xlabel('Time')
    plt.ylabel('Active Power')
    plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 코드를 돌려보면 결과는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초록색 그래프가 시간 도메인으로 유효전력을 그렸을 때의 경우이고, 파란색의 경우가 FFT를 통해 주파수 도메인으로 유효전력을 그렸을 때의 그래프입니다. 대표적으로 TV와 선풍기를 살펴보면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/44Ubv/dJMcabC1tmf/1RZyJbfXLtRi3NMg5MCB71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/44Ubv/dJMcabC1tmf/1RZyJbfXLtRi3NMg5MCB71/img.png&quot; data-alt=&quot;TV (시간 도메인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/44Ubv/dJMcabC1tmf/1RZyJbfXLtRi3NMg5MCB71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F44Ubv%2FdJMcabC1tmf%2F1RZyJbfXLtRi3NMg5MCB71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TV (시간 도메인)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caGgy7/dJMcafyFAd9/k1Ck8oTkwVILqn8FWCk021/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caGgy7/dJMcafyFAd9/k1Ck8oTkwVILqn8FWCk021/img.png&quot; data-alt=&quot;TV (주파수 도메인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caGgy7/dJMcafyFAd9/k1Ck8oTkwVILqn8FWCk021/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaGgy7%2FdJMcafyFAd9%2Fk1Ck8oTkwVILqn8FWCk021%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;989&quot; height=&quot;390&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TV (주파수 도메인)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4trKT/dJMcagYCaSd/E6STCm26EZJCLWoJqQRlJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4trKT/dJMcagYCaSd/E6STCm26EZJCLWoJqQRlJ0/img.png&quot; data-alt=&quot;선풍기 (시간 도메인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4trKT/dJMcagYCaSd/E6STCm26EZJCLWoJqQRlJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4trKT%2FdJMcagYCaSd%2FE6STCm26EZJCLWoJqQRlJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;선풍기 (시간 도메인)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZrzex/dJMcadOi0l5/Kz77Ghf1S0WZFWG6GYmlL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZrzex/dJMcadOi0l5/Kz77Ghf1S0WZFWG6GYmlL1/img.png&quot; data-alt=&quot;선풍기 (주파수 도메인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZrzex/dJMcadOi0l5/Kz77Ghf1S0WZFWG6GYmlL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZrzex%2FdJMcadOi0l5%2FKz77Ghf1S0WZFWG6GYmlL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;989&quot; height=&quot;390&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;선풍기 (주파수 도메인)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 유의미한 결과는 없었다..고 볼 수 있습니다. 저기 저 파란색 그래프에서 뚜렷한 피크(삐쭉삐쭉한 느낌으로)가 보여야 하는데 그러지 않았기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ab9Kv/dJMb99SKxGz/T07mMJ2n0u4ZtHHm0ftqj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ab9Kv/dJMb99SKxGz/T07mMJ2n0u4ZtHHm0ftqj0/img.png&quot; data-alt=&quot;에어프라이어 (주파수 도메인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ab9Kv/dJMb99SKxGz/T07mMJ2n0u4ZtHHm0ftqj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAb9Kv%2FdJMb99SKxGz%2FT07mMJ2n0u4ZtHHm0ftqj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;989&quot; height=&quot;390&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;에어프라이어 (주파수 도메인)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그나마 제일 괜찮게 나온 결과는 이건데.. 사실 이렇게 좁은(1Hz~5Hz) 범위에서의 주파수 피크는 무의미하다고 봐야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FFT 분석 결과가 왜 유의미하지 않았는가? 라는 질문을 던지는 건 조금 어려울지도 모르겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 문제(마스킹 과정에서의 정보 오류)일 수도 있고, 샘플링의 문제일 수도 있고, 아니면 기기 내부 구조(모터, 컴프레셔 등)의 문제일 수도 있기 때문에 실패의 원인을 정확히 집어내기에는 한계가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 확실한 건, Nilm 분석에 있어서는 주파수 도메인으로 보는 것보다 시간 도메인 그대로 보는 것이 좋다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;시계열 이상탐지(Abnomaly Detection)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 시계열 데이터가 아닌 데이터에서의 이상탐지와 시계열 데이터에서의 이상탐지는 조금 결이 다르다고 생각합니다. 데이터에 시간축 하나가 더해지는 것만으로 &lt;b&gt;&quot;이상치를 어떻게 골라낼 것인가?&quot;&lt;/b&gt;의 질문은 매우 복잡해지기 때문이죠. 시계열 데이터의 이상치 탐색 방법에 대해서도 설명하는 게 맞지만, 아직 제 지식이 부족한 관계로...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 왜 이상탐지 분석을 수행했는지에 대해서만 정리하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간축을 중심으로 그린 유효전력 그래프를 다시 관찰해봅시다. (위에서 그린 초록색 그래프)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zoeNm/dJMcacaS9mM/c63qZY34Gy2qWnPFXzo35K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zoeNm/dJMcacaS9mM/c63qZY34Gy2qWnPFXzo35K/img.png&quot; data-alt=&quot;선풍기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zoeNm/dJMcacaS9mM/c63qZY34Gy2qWnPFXzo35K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzoeNm%2FdJMcacaS9mM%2Fc63qZY34Gy2qWnPFXzo35K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;선풍기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선풍기의 경우 유효전력 그래프를 쭉 그려보면 켜질 때마다 저런 식으로 &quot;급상승 후 약간의 감소를 보임&quot;의 패턴을 보입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/le2Yj/dJMcabXj9Sz/A3FKL3gaG4CyXknHXqPlVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/le2Yj/dJMcabXj9Sz/A3FKL3gaG4CyXknHXqPlVK/img.png&quot; data-alt=&quot;전기포트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/le2Yj/dJMcabXj9Sz/A3FKL3gaG4CyXknHXqPlVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fle2Yj%2FdJMcabXj9Sz%2FA3FKL3gaG4CyXknHXqPlVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전기포트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전기포트의 경우 잘 보이실진 모르겠는데, 켜지고 꺼질 때마다 &quot;급상승 후 유지, 꺼지기 직전에 아주 잠깐의 상승 피크를 보임&quot;의 패턴을 관찰할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 &quot;급상승&quot;과 같은, 눈에 띄는 모멘트들이 각 수집기기마다 존재했기에 이러한 포인트들을 잡아내는 것이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;전체 전력에서 개별 전력을 분해&lt;/span&gt;하는 데에 도움이 될 수 있을 것이라 판단했고, 이를 위해 이상탐지 분석을 진행하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이상탐지 결과&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 분전반의 active_power(유효전력)열에 대해 이상탐지를 시도한 결과입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3448&quot; data-origin-height=&quot;1722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VF3Vh/dJMcafMdjFB/8a2k50NFqLZ7QxthzEzBmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VF3Vh/dJMcafMdjFB/8a2k50NFqLZ7QxthzEzBmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VF3Vh/dJMcafMdjFB/8a2k50NFqLZ7QxthzEzBmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVF3Vh%2FdJMcafMdjFB%2F8a2k50NFqLZ7QxthzEzBmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3448&quot; height=&quot;1722&quot; data-origin-width=&quot;3448&quot; data-origin-height=&quot;1722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파란색 선이 전체 분전반(=전체적으로 사용한 전력의 총합을 측정한 것) 의 유효전력이고, 빨간색으로 표시된 점들이 이상치로 선정된 점입니다. 코드는 제가 아니라 다른 팀원이 돌려서 없긴 한데, 분석의 자세한 과정을 정리하면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 시간 구간(2,592,000개 샘플)에 대해 이상탐지&lt;/li&gt;
&lt;li&gt;약 0.5%(12,960건)가 이상치로 탐지되었으며&lt;/li&gt;
&lt;li&gt;이상치 5개 이상 연속 발생한 이상 구간만 유지하여 최종 12,200건 내외로 필터링&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 분석 그래프를 수집기기 차원에서 하나하나 살펴보면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2864&quot; data-origin-height=&quot;1462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb0yC3/dJMb996hPlV/G3ukvk0LJ8Aju7NdcP2fV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb0yC3/dJMb996hPlV/G3ukvk0LJ8Aju7NdcP2fV1/img.png&quot; data-alt=&quot;냉장고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb0yC3/dJMb996hPlV/G3ukvk0LJ8Aju7NdcP2fV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb0yC3%2FdJMb996hPlV%2FG3ukvk0LJ8Aju7NdcP2fV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2864&quot; height=&quot;1462&quot; data-origin-width=&quot;2864&quot; data-origin-height=&quot;1462&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;냉장고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;냉장고의 경우에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간색 점들이 전체 전력반의 유효전력 이상치이고, 파란색 음영 부분은 냉장고가 켜져있는 시점을 나타낸 것임을 참고하면, 냉장고가 '켜지는' 시점이 대부분 이상치로 판단되었다는 것을 알 수 있으며,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1051&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yg5Mo/dJMcacBWuBB/4xrl29mTxiiYgnL6LE20Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yg5Mo/dJMcacBWuBB/4xrl29mTxiiYgnL6LE20Bk/img.png&quot; data-alt=&quot;헤어드라이기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yg5Mo/dJMcacBWuBB/4xrl29mTxiiYgnL6LE20Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYg5Mo%2FdJMcacBWuBB%2F4xrl29mTxiiYgnL6LE20Bk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;1051&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1051&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;헤어드라이기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤어드라이기의 경우 헤어드라이기의 사용 시점을 음영으로 표시한 점을 고려하면, (잘 안보이실지도 모르겠는데) 전체 전력반의 유효전력이 급상승하는 지점이 사용 시점이라는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하자면 이상치는 주로 다음과 같은 패턴에서 발생하였다고 볼 수 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 급격한 전력 상승/하강 직후&lt;br /&gt;- 장시간 OFF 상태 이후 급격한 전력 상승이 관측되는 시점&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;분석 결과 정리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서 정리한 '고양시 전력데이터' 분석 결과를 정리하면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;FFT 분석에서는 유의미한 결과를 얻을 수 없었다. 즉, 해당 전력데이터의 경우 주파수 도메인으로 살피는 것보다 시간 도메인 그대로 분석 및 모델링 하는 것이 적절하다고 볼 수 있다.&lt;/li&gt;
&lt;li&gt;이상치 탐색결과 이상치 발생 지점은 전체 전력의 급상승/ 급하강 지점이다. 이 경우 개별 수집기기의 ON/OFF 순간과 연관된다고 볼 수 있다. 즉, 개별 기기의 전력사용으로 인해 전체 전력의 급상승 및 급하강이 발생하고, 이것이 이상치로 검출되는 것.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 실제 모델 빌드 과정에 대해 정리하도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/18?category=1523609&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/18?category=1523609&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770190925770&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (5)-1D CNN 베이스라인 모델&quot; data-og-description=&quot;지난 글에서는 전처리한 '고양시 전력데이터'에 대하여 각각 FFT 분석과 이상탐지 분석을 실시한 결과에 대해 정리하였습니다. https://powderblue0.tistory.com/17 [Nilm] (4)-FFT와 이상탐지지난 글에서는 데&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/18?category=1523609&quot; data-og-url=&quot;https://powderblue0.tistory.com/18&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cyC5IN/dJMb9hCWDDh/9ESKcehzIXkkcOuUp31gg0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/sUBL1/dJMb895YVto/oFYorPc4jdCuwFtOYptB0K/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/iMFTx/dJMb8SpDfBP/GsgnXOuQFFcvgrokFlw6sk/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/18?category=1523609&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/18?category=1523609&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cyC5IN/dJMb9hCWDDh/9ESKcehzIXkkcOuUp31gg0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/sUBL1/dJMb895YVto/oFYorPc4jdCuwFtOYptB0K/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/iMFTx/dJMb8SpDfBP/GsgnXOuQFFcvgrokFlw6sk/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (5)-1D CNN 베이스라인 모델&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 전처리한 '고양시 전력데이터'에 대하여 각각 FFT 분석과 이상탐지 분석을 실시한 결과에 대해 정리하였습니다. https://powderblue0.tistory.com/17 [Nilm] (4)-FFT와 이상탐지지난 글에서는 데&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Nilm 및 전력예측</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/17</guid>
      <comments>https://powderblue0.tistory.com/17#entry17comment</comments>
      <pubDate>Wed, 28 Jan 2026 23:13:48 +0900</pubDate>
    </item>
    <item>
      <title>[Nilm] (3)-데이터 선정과 전처리</title>
      <link>https://powderblue0.tistory.com/16</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqykKR/dJMcafrRirr/iqhjBAM6o8hibxo3umPrK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqykKR/dJMcafrRirr/iqhjBAM6o8hibxo3umPrK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqykKR/dJMcafrRirr/iqhjBAM6o8hibxo3umPrK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqykKR%2FdJMcafrRirr%2FiqhjBAM6o8hibxo3umPrK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1710&quot; height=&quot;720&quot; data-filename=&quot;nilm 설명2.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전까지의 글에서 Nilm 기술에 대한 소개와 Nilm 연구에 사용되는 데이터에 대해 정리하였습니다. 이제부터는 '그래서 제가 실제로 무엇을 하였는지'에 대해 정리해보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 다음과 같은 목차의 내용을 통해&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Nilm을 위한 데이터의 선정 과정과&lt;/li&gt;
&lt;li&gt;해당 데이터를 처리할 수 있는 선행연구 모델&lt;/li&gt;
&lt;li&gt;그리고 데이터의 전처리 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에 대해 정리합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;AIHub 제공 데이터&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nilm에서의 회귀와 분류&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Seq2Seq 모델과 UNet 모델&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 다운로드와 전처리&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;AIHub 제공 데이터&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 글은 다음 링크에서 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/15&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/15&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769275460708&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (2)-데이터에 대한 이해&quot; data-og-description=&quot;지난 글에 이어 Nilm을 이해하기 위한 기초지식들을 정리하겠습니다. 지난 글에서는 Nilm 기술이 무엇인지 그리고 회로 관련 기초지식에 대해 설명하였고 아래 링크 들어가시면 확인 가능합니다. &quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/15&quot; data-og-url=&quot;https://powderblue0.tistory.com/15&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjPtNG/dJMb86OV7nR/m3hl5rdK53CNFfjvKMkeK0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/CREsK/dJMb895XUPE/57AJKc6a4UDkzj7K3ZeJH1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/j3uhv/dJMb85vI9Ui/JwaExp5EhZnQfjSkUXZoL0/img.png?width=1957&amp;amp;height=734&amp;amp;face=0_0_1957_734&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/15&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/15&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjPtNG/dJMb86OV7nR/m3hl5rdK53CNFfjvKMkeK0/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/CREsK/dJMb895XUPE/57AJKc6a4UDkzj7K3ZeJH1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/j3uhv/dJMb85vI9Ui/JwaExp5EhZnQfjSkUXZoL0/img.png?width=1957&amp;amp;height=734&amp;amp;face=0_0_1957_734');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (2)-데이터에 대한 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에 이어 Nilm을 이해하기 위한 기초지식들을 정리하겠습니다. 지난 글에서는 Nilm 기술이 무엇인지 그리고 회로 관련 기초지식에 대해 설명하였고 아래 링크 들어가시면 확인 가능합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 글에서 Nilm 연구에 자주 사용되는 데이터셋에 대해 설명하였습니다. (UKDALE과 REDD)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 제가 이 주제를 접하고 처음 사용한 데이터는 UKDALE도 REDD도 아닌 AIHub에서 제공하는 데이터였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;dataSetSn=71685&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;dataSetSn=71685&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769275514502&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI-Hub&quot; data-og-description=&quot;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&quot; data-og-host=&quot;www.aihub.or.kr&quot; data-og-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;dataSetSn=71685&quot; data-og-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;dataSetSn=71685&amp;amp;topMenu=100&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ccUwOs/dJMb9kl69En/rac06KH6EJmrAGlppT22jK/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462,https://scrap.kakaocdn.net/dn/b55jRE/dJMb9eTJWvq/kcgBub9INf878uLbyflh1k/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462,https://scrap.kakaocdn.net/dn/Ah0xL/dJMb9dHilwT/FMPXBrVzk424EJ71rYFQh1/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462&quot;&gt;&lt;a href=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;dataSetSn=71685&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;dataSetSn=71685&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ccUwOs/dJMb9kl69En/rac06KH6EJmrAGlppT22jK/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462,https://scrap.kakaocdn.net/dn/b55jRE/dJMb9eTJWvq/kcgBub9INf878uLbyflh1k/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462,https://scrap.kakaocdn.net/dn/Ah0xL/dJMb9dHilwT/FMPXBrVzk424EJ71rYFQh1/img.png?width=586&amp;amp;height=462&amp;amp;face=0_0_586_462');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI-Hub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;샘플 데이터 ? ※샘플데이터는 데이터의 이해를 돕기 위해 별도로 가공하여 제공하는 정보로써 원본 데이터와 차이가 있을 수 있으며, 데이터에 따라서 민감한 정보는 일부 마스킹(*) 처리가 되&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.aihub.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 데이터 명칭은 &lt;i&gt;전기 인프라 지능화를 위한 가전기기 전력 사용량 데이터&amp;nbsp;&lt;/i&gt;입니다. 데이터 명칭이 너무 기니까 그냥 &lt;b&gt;&quot;고양시 전력데이터&quot;&lt;/b&gt;라고 부르겠습니다. (내맘임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AIHub에 소개되어 있는 데이터 관련 주요 정보들을 정리하자면&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 2023년 10월 한달(31일 간) 간 측정한 데이터&lt;br /&gt;- 경기도 고양시 110 가구에서 측정&lt;br /&gt;- 22종류의 가전기기 및 메인 분전반의 측정 데이터&lt;br /&gt;- 초당 30회 수집(주기 1/30초) / 총 40,641건의 데이터&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 가정용 전력 데이터이며 언급한 22종의 가전기기의 경우 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L1RTT/dJMcajgGF3H/ZhBSHXz7MLWniIOrGb4YI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L1RTT/dJMcajgGF3H/ZhBSHXz7MLWniIOrGb4YI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L1RTT/dJMcajgGF3H/ZhBSHXz7MLWniIOrGb4YI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL1RTT%2FdJMcajgGF3H%2FZhBSHXz7MLWniIOrGb4YI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;341&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 이 데이터셋을 선택한 이유를 말하자면 기존 영국(UKDALE)이나 미국(REDD)에서 측정한 데이터 위주의 연구와는 차별점을 두기 위해서 대한민국에서 측정한 데이터를 사용하고자 했습니다. (근데 뭐 그렇게까지 큰 의미는 없긴 했습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Nilm에서의 회귀와 분류&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능을 다룰 때 해결해야 할 과제가 회귀문제인지 분류문제인지를 결정하는 것은 중요한 일입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nilm은 쉽게 말해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;전력량 분해 기술&lt;/span&gt; 입니다. 이 경우 회귀 문제와 분류 문제를 어떻게 정의내릴 것이냐의 문제가 존재하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nilm을 분류 문제로 바라볼 경우 '전력량 분해'는 전체 전력을 보고 각 기기가 켜져 있는지, 혹은 꺼져 있는지,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉 ON/OFF 상태를 예측&lt;/b&gt;하는 이진분류 문제가 되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Nilm을 회귀 문제로 바라볼 경우 '전력량 분해'는 전체 전력을 보고 &lt;b&gt;각 기기가 얼마만큼의 전력량을 사용하고 있는지&lt;/b&gt;를 예측하는 회귀 문제가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;891&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HM46X/dJMcacWcsyJ/lldfDmR7JaWGjEkNnQkcEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HM46X/dJMcacWcsyJ/lldfDmR7JaWGjEkNnQkcEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HM46X/dJMcacWcsyJ/lldfDmR7JaWGjEkNnQkcEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHM46X%2FdJMcacWcsyJ%2FlldfDmR7JaWGjEkNnQkcEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1435&quot; height=&quot;891&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;891&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선행 연구들을 살펴보면(Method 부분) r의 경우가 회귀, c의 경우가 이진분류입니다. 회귀와 이진분류의 차이를 염두에 두고 선행연구로서 데이터를 학습시킬 두 가지 모델에 대해 설명해 보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Seq2Seq 모델과 UNet 모델&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AIHub라는 곳이 데이터를 소개할 때 모델도 같이 제시하는 경우가 많습니다. 해당 주제도 그러한 경우입니다. 위의 '고양시 데이터'에 대해 AIHub는 두 가지 모델을 제시하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=X2H45LFwjRU&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=X2H45LFwjRU&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=X2H45LFwjRU&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/uHQiU/dJMb9c9sfu8/v6A5GCVt8Dk6dHcA4XaTKk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/PJL2v/dJMb9cBCrdc/OjRjaNWxWyf1LhWuPuHWm0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/cnLsL7/dJMb9jgrvdL/vwm0y0gDUwsoJqSKZY8BTK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;전기 인프라 지능화를 위한 가전기기 전력 사용량 데이터-㈜우주텔레콤-인공지능 학습용 데이터&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/X2H45LFwjRU&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련 내용은 영상에 길게 소개되어 있긴 한데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세히 살펴본 사람 입장에서 오류가 있는 부분도 많기에 (오류라고 생각되는 부분은 데이터 제공측에 메일을 보내서 문의했는데 답장이 오지 않았음..;;;) 따로 찾아본 내용을 토대로 두 가지 모델을 소개하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(근데 따지자면 선행연구에 가까운 내용이라, 너무 깊게는 설명하지 않겠음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(1) Seq2Seq 모델&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Seq2Seq/ Seq2Point 모델의 경우 회귀 문제로 접근한 경우입니다. 즉 개별 기기의 전력 사용량 예측을 위한 모델이며, 모델의 구조는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1814&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FrhJP/dJMcahXxdx3/t9gKcGJPkAKkbKKuBZkQN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FrhJP/dJMcahXxdx3/t9gKcGJPkAKkbKKuBZkQN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FrhJP/dJMcahXxdx3/t9gKcGJPkAKkbKKuBZkQN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFrhJP%2FdJMcahXxdx3%2Ft9gKcGJPkAKkbKKuBZkQN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1814&quot; height=&quot;336&quot; data-origin-width=&quot;1814&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1612.09106&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/1612.09106&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769276357797&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Sequence-to-point learning with neural networks for nonintrusive load monitoring&quot; data-og-description=&quot;Energy disaggregation (a.k.a nonintrusive load monitoring, NILM), a single-channel blind source separation problem, aims to decompose the mains which records the whole house electricity consumption into appliance-wise readings. This problem is difficult be&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1612.09106&quot; data-og-url=&quot;https://arxiv.org/abs/1612.09106v3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2uQfs/dJMb8SpCe0i/2FPVaxeAVuNdhOB30PSmt1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bh6CaH/dJMb8U8NXfB/UwMWnFvXlkcFlbetyrIug0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1612.09106&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1612.09106&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2uQfs/dJMb8SpCe0i/2FPVaxeAVuNdhOB30PSmt1/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bh6CaH/dJMb8U8NXfB/UwMWnFvXlkcFlbetyrIug0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Sequence-to-point learning with neural networks for nonintrusive load monitoring&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Energy disaggregation (a.k.a nonintrusive load monitoring, NILM), a single-channel blind source separation problem, aims to decompose the mains which records the whole house electricity consumption into appliance-wise readings. This problem is difficult be&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 Chaoyun Zhang의 Sequence-to-point learning with neural networks for non-intrusive load monitoring이라는 논문에 소개되어있는 모델입니다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(2) UNet 모델&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UNet 모델의 경우 하나의 모델을 통해 회귀와 이진분류를 동시에 수행하는 Multi-task Model이라는 것이 가장 큰 특징입니다. Faustine의 UNet-NILM: A Deep Neural Network for Multi-tasks Appliances State Detection and Power Estimation in NILM이라는 논문에 소개되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.researchgate.net/publication/347145700_UNet-NILM_A_Deep_Neural_Network_for_Multi-tasks_Appliances_State_Detection_and_Power_Estimation_in_NILM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.researchgate.net/publication/347145700_UNet-NILM_A_Deep_Neural_Network_for_Multi-tasks_Appliances_State_Detection_and_Power_Estimation_in_NILM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba6hMJ/dJMcaf6sDJs/Prisb1pULNQMPbY0meVEM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba6hMJ/dJMcaf6sDJs/Prisb1pULNQMPbY0meVEM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba6hMJ/dJMcaf6sDJs/Prisb1pULNQMPbY0meVEM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba6hMJ%2FdJMcaf6sDJs%2FPrisb1pULNQMPbY0meVEM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;511&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목 그대로 두 가지 관점을 결합하였다는 측면에서 눈여겨볼 만한 선행연구라고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 글에서 정리하겠지만 이 '(2)UNet 모델'의 경우가 제가 베이스라인 모델을 만들 때 참고한 모델입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 다운로드와 전처리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 다운로드의 경우 위에서 언급하였듯이 AIHub가 제공하는 데이터를 다운로드 받았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 생각보다 대용량 데이터라 실제로 다운로드 받는 데에 여러 많고많은 우여곡절들이 있었지만 같이 프로젝트 진행하던 팀원들의 도움 끝에 다운로드에 성공하였고 전처리까지 무사히 진행했습니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 대용량 데이터를 다루게될 때 겪게 되는 현실적인 어려움들이 있는데, 나중에 기회가 된다면 따로 정리해보겠어요,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pkf9v/dJMcahwsn6o/UlShyXOvQinMMF6lmsyeD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pkf9v/dJMcahwsn6o/UlShyXOvQinMMF6lmsyeD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pkf9v/dJMcahwsn6o/UlShyXOvQinMMF6lmsyeD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpkf9v%2FdJMcahwsn6o%2FUlShyXOvQinMMF6lmsyeD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1096&quot; height=&quot;670&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원천데이터 예시는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 열(Feature)인 active_power, voltage, current, frequency,...에 대한 설명 및 그와 관련한 회로 지식은 (1)편에서 정리한 바 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://powderblue0.tistory.com/10&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1769533310138&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Nilm] (1)-Nilm 기술의 이해&quot; data-og-description=&quot;이번 글에서는 Nilm 기술의 개념에 대해 설명하고, 심화적인 이해에 필요한(필요할지도 모르는?) 교류전력 개념을 설명합니다. 교류전력 파트의 경우 제가 아는 모든 지식을 최대한 쉽게 풀어 설&quot; data-og-host=&quot;powderblue0.tistory.com&quot; data-og-source-url=&quot;https://powderblue0.tistory.com/10&quot; data-og-url=&quot;https://powderblue0.tistory.com/10&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLPSH7/dJMb8TB37Wl/ArBUpxgPB3U1QVTTgV5FV1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/HEmSG/dJMb8YpPY0S/RrJhs56m2UVnNoRpEowh10/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/lxfnK/dJMb8UHJL7Y/7zwnyS4MiXc2DQQLEdJZ91/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720&quot;&gt;&lt;a href=&quot;https://powderblue0.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://powderblue0.tistory.com/10&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLPSH7/dJMb8TB37Wl/ArBUpxgPB3U1QVTTgV5FV1/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/HEmSG/dJMb8YpPY0S/RrJhs56m2UVnNoRpEowh10/img.png?width=800&amp;amp;height=336&amp;amp;face=0_0_800_336,https://scrap.kakaocdn.net/dn/lxfnK/dJMb8UHJL7Y/7zwnyS4MiXc2DQQLEdJZ91/img.png?width=1710&amp;amp;height=720&amp;amp;face=0_0_1710_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Nilm] (1)-Nilm 기술의 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 Nilm 기술의 개념에 대해 설명하고, 심화적인 이해에 필요한(필요할지도 모르는?) 교류전력 개념을 설명합니다. 교류전력 파트의 경우 제가 아는 모든 지식을 최대한 쉽게 풀어 설&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;powderblue0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석 및 모델링을 위해 사용할 피쳐의 선택은 간단한 전류 지식을 바탕, 중요하다고 생각한 피쳐만을 남겼습니다. 아래에서도 말하겠지만 모든 열(Feature)을 살리는 것보다 다룰 수 있는 수준까지 데이터를 줄이는 것이 우선이라고 판단하였기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'고양시 전력데이터'의 데이터 수집 관련 정보를 다시 한 번 정리하면 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;- 2023년 10월 한달(31일 간) 간 측정한 데이터&lt;br /&gt;- 경기도 고양시 110 가구에서 측정&lt;br /&gt;- 22종류의 가전기기 및 메인 분전반의 측정 데이터&lt;br /&gt;- 초당 30회 수집(주기 1/30초) / 총 40,641건의 데이터&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 다루는 데에 있어서 가장 큰 어려움은 대용량이라는 점이었기에 기본적인 전처리는 &lt;b&gt;데이터를 다룰 수 있는 크기까지 줄이는 것&lt;/b&gt;에 집중하였습니다. 크게는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;110가구 중 1번째 가구의 데이터만을 이용함&lt;/li&gt;
&lt;li&gt;10월 한 달간의 데이터 중 10월 1일 데이터만을 추출&lt;/li&gt;
&lt;li&gt;샘플링 주기 0.033sec(1/30초)에서 0.1sec(1/10초)로 변환&lt;/li&gt;
&lt;li&gt;주요 피쳐 추출: active_power(유효전력), voltage(전압), current(전류), reactive_power(무효전력)&lt;/li&gt;
&lt;li&gt;ON/OFF 상태를 나타내는 active_inactive 피쳐의 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과 같은 과정을 거쳤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리 이후의 데이터는 다음과 같이 생겼습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XIZaG/dJMcafrRiOp/k8Jrjca8P9v2Nk9blkZwZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XIZaG/dJMcafrRiOp/k8Jrjca8P9v2Nk9blkZwZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XIZaG/dJMcafrRiOp/k8Jrjca8P9v2Nk9blkZwZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXIZaG%2FdJMcafrRiOp%2Fk8Jrjca8P9v2Nk9blkZwZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;497&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 csv 형태로만 보면 와닿지 않으니 전체 분전반의 그래프를 그려보면, 데이터는 대충 이렇게 생겼습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QjzyO/dJMcafk7Gtn/USLJ8jsWWr2iQYB08vVdZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QjzyO/dJMcafk7Gtn/USLJ8jsWWr2iQYB08vVdZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QjzyO/dJMcafk7Gtn/USLJ8jsWWr2iQYB08vVdZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQjzyO%2FdJMcafk7Gtn%2FUSLJ8jsWWr2iQYB08vVdZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;490&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;전체 분전반의 그래프에서 각 기기의 전력 사용량 및 ON/OFF 상태를 판단&lt;/span&gt;하는 것이 목적이라고 볼 수 있겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로서 이번 글에서 데이터의 선정 과정과 전처리 과정까지 정리하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 해당 데이터를 통해 어떠한 분석을 했으며 또 어떠한 결론을 도출해내었는지까지 정리해보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Nilm 및 전력예측</category>
      <author>powderblue0</author>
      <guid isPermaLink="true">https://powderblue0.tistory.com/16</guid>
      <comments>https://powderblue0.tistory.com/16#entry16comment</comments>
      <pubDate>Sun, 25 Jan 2026 02:47:41 +0900</pubDate>
    </item>
  </channel>
</rss>