<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>유니의 공부</title>
    <link>https://process-mining.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 9 Jun 2026 06:21:25 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>yunhuijang</managingEditor>
    <image>
      <title>유니의 공부</title>
      <url>https://tistory1.daumcdn.net/tistory/3092183/attach/824347f22c8b4368a221074af417e04a</url>
      <link>https://process-mining.tistory.com</link>
    </image>
    <item>
      <title>단백질 구조의 4단계 (protein structure hierarchy)</title>
      <link>https://process-mining.tistory.com/226</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단백질 구조는 아미노산 서열 시퀀스로 표현되는 1차 구조로 시작해, 알파헬릭스, 베타시트로 구성되는 로컬한 구조 정보를 표현하는 2차 구조, 글로벌한 좌표 정보를 표현하는 3차 접힘(folding) 구조, 그리고 다수의 단백질 체인들이 결합되는 4차 구조로 이루어져 있다. 서로 다른 단백질들이 산소를 운반하는 헤모글로빈 단백질이 될지, 눈 근육에 있는 미오신 단백질이 될지는 아미노산 서열 시퀀스와 이로 인한 단백질 접힘으로 결정된다. 이번 글에서는 단백질의 모든 것을 결정하는 단백질 구조의 4단계에 대해 알아보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NAhEd/dJMcagZl7h1/1oM6KIselWWFfTBxXepoF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NAhEd/dJMcagZl7h1/1oM6KIselWWFfTBxXepoF0/img.png&quot; data-alt=&quot;단백질 구조의 4단계 (출처: https://www.khanacademy.org)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NAhEd/dJMcagZl7h1/1oM6KIselWWFfTBxXepoF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNAhEd%2FdJMcagZl7h1%2F1oM6KIselWWFfTBxXepoF0%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;365&quot; height=&quot;465&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;단백질 구조의 4단계 (출처: https://www.khanacademy.org)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;아미노산&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단백질의 구조에 대해 논하기 전에, 단백질을 구성하는 기본 요소인 아미노산(amino acid; residue)에 대해 먼저 알아보겠다. 지구상에 존재하는 모든 종류의 단백질은 단 20개의 아미노산으로 구성된다. 이 아미노산은 앞서 말했듯 단백질의 가장 기본이 되는 구성 요소이고, 쉽게 말해 자연어의 단어가 하는 것과 같은 역할을 한다. 아래 그림을 보면, 20개 종류의 아미노산을 한 번에 파악할 수 있다.&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;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Eo6e/dJMcaaSpwVE/7VYX300DS4skYQqhtGIRy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Eo6e/dJMcaaSpwVE/7VYX300DS4skYQqhtGIRy1/img.png&quot; data-alt=&quot;20개의 아미노산 종류 (출처: 위키피디아)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Eo6e/dJMcaaSpwVE/7VYX300DS4skYQqhtGIRy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Eo6e%2FdJMcaaSpwVE%2F7VYX300DS4skYQqhtGIRy1%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;555&quot; height=&quot;444&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;20개의 아미노산 종류 (출처: 위키피디아)&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s857u/dJMb99MGl7o/bkfdJY1gQNeiKzuHDRGLO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s857u/dJMb99MGl7o/bkfdJY1gQNeiKzuHDRGLO0/img.png&quot; data-alt=&quot;아미노산의 기본 구조 (출처: 위키피디아)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s857u/dJMb99MGl7o/bkfdJY1gQNeiKzuHDRGLO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs857u%2FdJMb99MGl7o%2FbkfdJY1gQNeiKzuHDRGLO0%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;250&quot; height=&quot;178&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;179&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;각 아미노산은 위와 같은 공통적인 기본적인 구조를 가지고 있다. 구체적으로 설명하면, 중심 탄소가 아미노기(amino group; NH2)와 카복실기(carboxyl group;COOH)와 결합된 공통적인 구조를 가지고 있고, 이것에 각 아미노산의 고유한 특성을 부여하는 R group (side chain)이 붙어 있는 형태이다. 이렇게 아미노산은 R group의 종류에 따라 아래와 같이 고유한 화학적 특성을 가지게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKbVUM/dJMcaiizRQb/sEwAJ4hZbI2lzdX3NKiyA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKbVUM/dJMcaiizRQb/sEwAJ4hZbI2lzdX3NKiyA1/img.png&quot; data-alt=&quot;화학 특성에 따른 아미노산의 종류 (출처: https://sungsoo-ahn.github.io/protein-ai-s26)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKbVUM/dJMcaiizRQb/sEwAJ4hZbI2lzdX3NKiyA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKbVUM%2FdJMcaiizRQb%2FsEwAJ4hZbI2lzdX3NKiyA1%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;664&quot; height=&quot;258&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화학 특성에 따른 아미노산의 종류 (출처: https://sungsoo-ahn.github.io/protein-ai-s26)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 그림을 간단히 살펴보면, 아미노산마다 분자량(molecular weight)도 다 다르고, 극성을 띄는지 띄지 않는지(소수성), 양전하인지 음전하인지의 분자적 특성도 모두 다름을 알 수 있다. 이렇게 서로 다른 아미노산의 특성은 단백질의 접힘(folding)이 결정될 때, 중요한 영향을 미친다. 예를 들어, 극성을 띄지 않는 nonpolar 아미노산들은 물을 싫어하기(소수성) 때문에, 단백질의 내부로 뭉치는 경향이 있는 식이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1차 구조 (primary structure)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 단백질의 1차 구조는 아래 그림과 같이 아미노산의 시퀀스 서열 그 자체를 의미하고, 자연어로 치면 문장의 역할을 한다. 이 때는 단백질 내부 원자의 위치나 접힘, 로컬한 구조 등을 모두 고려하지 않고 아미노산의 순서 만을 고려한다.&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;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLCvAX/dJMcaakyiQq/8XWa20SpsVVVKLVBTrWMk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLCvAX/dJMcaakyiQq/8XWa20SpsVVVKLVBTrWMk0/img.jpg&quot; data-alt=&quot;단백질의 1차 구조 (https://www.creative-biostructure.com)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLCvAX/dJMcaakyiQq/8XWa20SpsVVVKLVBTrWMk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLCvAX%2FdJMcaakyiQq%2F8XWa20SpsVVVKLVBTrWMk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;476&quot; height=&quot;319&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;단백질의 1차 구조 (https://www.creative-biostructure.com)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 아미노산은 본인의 amino group과 옆에 있는 아미노산의 carboxyl group 사이의 peptide bond로 연결된다. 이렇게 연결된 N-C-C- 구조를 단백질의 backbone 구조라고 부른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CNqX6/dJMcabKy8GU/M5dp6qi4y2mUkcfzUMLsak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CNqX6/dJMcabKy8GU/M5dp6qi4y2mUkcfzUMLsak/img.png&quot; data-alt=&quot;아미노산의 펩타이드 결합 (출처: https://rotel.pressbooks.pub)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CNqX6/dJMcabKy8GU/M5dp6qi4y2mUkcfzUMLsak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCNqX6%2FdJMcabKy8GU%2FM5dp6qi4y2mUkcfzUMLsak%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;287&quot; height=&quot;229&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아미노산의 펩타이드 결합 (출처: https://rotel.pressbooks.pub)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;단순해 보일 수 있으나, 여기에는 막대한 정보가 담겨 있다. 각 위치에 20개의 아미노산이 위치할 수 있고 단백질이 수백에서 수천 개의 아미노산 길이를 가질 수 있으므로, 가능한 서열의 수는 천문학적으로 많고, 이러한 막대한 조합의 단백질 종류들은 종마다 개체마다 다른 특성을 가질 수 있게 하는 핵심적 요인이고, 긴 단백질 시퀀스 내에서 하나의 아미노산만 바뀌어도 질병을 유발할 수 있다. 예를 들어, 헤모글로빈 단백질 내의 단 하나의 아미노산 E가 V로 대체되면 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;겸상 적혈구 질환(Sickle cell disease)을 유발한다. 즉, 단 하나의 아미노산이 단백질의 전체 폴딩 구조를 변환시켜 화학적 성질을 변화하게 만드는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;2차 구조 (secondary structure)&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;단백질의 2차 구조는 1차 구조 내의 local segment(예를 들어, 연속된 아미노산 8개 등)가 규칙적이고 반복적인 기하학적 구조로 접히는 것을 의미한다. 이러한 로컬 구조는 단백질의 carboxyl oxygen (C=O)와 amide hydrogen (N-H) 사이의 수소 결합으로 만들어진다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmghXQ/dJMcagkKN9X/WUFtHe1k0m5T5jz8kephJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmghXQ/dJMcagkKN9X/WUFtHe1k0m5T5jz8kephJ0/img.jpg&quot; data-alt=&quot;단백질의 2차 구조 (https://www.creative-biostructure.com)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmghXQ/dJMcagkKN9X/WUFtHe1k0m5T5jz8kephJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmghXQ%2FdJMcagkKN9X%2FWUFtHe1k0m5T5jz8kephJ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;346&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;610&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;단백질의 2차 구조 (https://www.creative-biostructure.com)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이러한 2차 구조에는 주로 알파 헬릭스와 베타 시트의 두 가지 형태가 있다. 알파 헬릭스는 위 그림의 오른쪽처럼 수소결합이 나선 축과 평행한 형태로 구성되어 나선형으로 꼬인 구조를 의미한다. 이 수소 결합은 약 3.6개의 아미노산마다 한 개 형성된다. 베타 시트는 그림의 왼쪽처럼 수소 결합이 세그먼트를 가로지르는 형태로 구성되어 두 개 이상의 세그먼트가 나란히 놓인 구조를 의미한다. 이 때, 하나의 세그먼트는 베타 strand라고 표현한다. 마지막으로, 이러한 알파 헬릭스 혹은 베타 시트 모두에 포함되지 않고, 이들을 연결하는 비정형적인 구간을 보통 loop라고 부른다. 이러한 loop는 구조적인 유연성을 부여하여 단백질이 복잡한 3차 구조로 folding할 수 있게 돕는 역할도 하고, 단백질 표면에 주로 노출되어 다른 분자 혹은 단백질과의 상호작용(binding)에 있어 핵심적인 역할을 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3차 구조 (tertiary structure)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단백질의 3차 구조는 이러한 2차 구조들이 모여서 folding하는 완전한 3차원 구조를 의미한다. 이 구조를 통해 단백질은 완전한 기능성을 갖추게 된다. 이를 일어나게 하는 데에는 크게 네 가지 요인이 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;color: #000000;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;29,0,0&quot;&gt;소수성 효과 (Hydrophobic effect):&lt;/b&gt;&lt;span&gt; 위에서 설명한 소수성의 nonpolar&lt;/span&gt; side chain이 물을 피하여 단백질 내부로 이동하여 소수성 코어를 형성한다.&lt;/li&gt;
&lt;li style=&quot;color: #000000;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;29,1,0&quot;&gt;수소 결합 (Hydrogen bonds):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2차 구조의 골격 외에도 polar side chain 간에 형성된다.&amp;nbsp;&lt;/li&gt;
&lt;li style=&quot;color: #000000;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;29,2,0&quot;&gt;이온 결합 (&lt;b data-path-to-node=&quot;29,2,0&quot; data-index-in-node=&quot;0&quot;&gt;Ionic bonds)&lt;/b&gt; / salt bridges:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;반대 전하를 띤 side chain, 즉 양전하 side chain과 음전하 side chain 간에 형성된다.&lt;/li&gt;
&lt;li style=&quot;color: #000000;&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;29,3,0&quot;&gt;이황화 결합 (Disulfide bonds):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;두 cysteine 아미노산의 -SH 그룹 간의 공유 결합으로, 3차 구조에서 가장 강력한 결합이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 3차 구조는 1차 구조에 의해 전적으로 결정된다. 즉, 단백질을 화학적으로 다시 풀어 놓아도 자발적으로 1차 구조가 내재적으로 가지고 있는 3차 구조로 다시 folding한다는 것이다. 이렇게 1차 구조 시퀀스가 주어졌을 때, 3차 구조를 예측하는 방법론 중 하나가 그 유명한 Alphafold이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4차 구조 (quatenary structure)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단백질의 4차 구조는 단백질들이 하나의 고립된 체인으로 작동하지 않고, 여러 체인들이 결합하여 더 큰 복합체를 형성한 것을 말한다. 예를 들어, 아래 그림과 같이 헤모글로빈은 4개의 체인으로 구성된 복합체이다. 중요하지는 않지만, 재미를 위해 설명하자면 각 체인 간의 상호작용이 헤모글로빈이 폐에서 산소를 적재하여 조직에서 효율적으로 방출할 수 있도록 도와준다. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;첫 번째 체인이 산소와 결합하면 미세한 구조적 변화가 다른 체인으로 전파되어 산소 친화력을 높이고, 네 번째 체인은 첫 번째보다 훨씬 더 높은 친화력으로 산소와 결합하는 식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLFIMA/dJMcahxeaJE/UcQGvjKdxkqu4QquPkoxRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLFIMA/dJMcahxeaJE/UcQGvjKdxkqu4QquPkoxRK/img.png&quot; data-alt=&quot;헤모글로빈의 4차 구조 (출처: 위키피디아)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLFIMA/dJMcahxeaJE/UcQGvjKdxkqu4QquPkoxRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLFIMA%2FdJMcahxeaJE%2FUcQGvjKdxkqu4QquPkoxRK%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;250&quot; height=&quot;250&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;헤모글로빈의 4차 구조 (출처: 위키피디아)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 글의 핵심은 네 가지 구조 모두 궁극적으로 1차 구조에 의해 결정된다는 것이다. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;1차 서열에서 4차 구조로 이어지는 이러한 계층적 결정론은, 우리가 단백질의 아미노산 시퀀스를 읽을 수 있다면 원칙적으로 그 형태와 기능에 관한 모든 것을 알 수 있음을 시사한다. 그렇기 때문에 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;1차 서열로부터 3차 구조를 예측하는 단백질 접힘(Protein folding) 문제는 계산 생물학에서 가장 어려운 과제 중 하나였다.&lt;span&gt; 하지만 Alphafold는 이를 해결했고, &lt;a href=&quot;https://alphafold.ebi.ac.uk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;전체 구조 데이터베이스&lt;/a&gt;를 공개하기도 하였다. &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;단백질 구조의 이해는 신약 개발의 토대가 되고, AI는 이 모든 과정을 가속화하고 있으며, 단백질 구조를 밝혀내는 것은 이 패러다임이 시작되는 출발점이 되는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/AI4Science</category>
      <category>AI</category>
      <category>ai4science</category>
      <category>AlphaFold</category>
      <category>ML</category>
      <category>Protein</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/226</guid>
      <comments>https://process-mining.tistory.com/226#entry226comment</comments>
      <pubDate>Tue, 7 Apr 2026 23:45:46 +0900</pubDate>
    </item>
    <item>
      <title>2025년 돌아보기</title>
      <link>https://process-mining.tistory.com/225</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;음력 2월이면 신년 아닙니까? 2025 돌아보기 갑니다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;학업과 연구&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;학교를 옮긴 첫 해. 이제는 제발 나의 마지막 학력이길 바랍니다.. 매년 같은 목표 (1저자 2개 내submit 2저자 3개 submit) 를 항상 목표로 하고 있고, 올해도 성공했다. Accept은 내가 정할 수 있는 영역이 아니기 때문에 목표가 아니다 ㅎㅎ 작년은 예상치 못하게 비행기를 20번 탄 야간 끔찍한 해였고, 학교 다니면서 독일 이후로 처음으로 길게 외국에서 생활을 해 본 해였다. 몬트리올 (많이) 춥지만 평화로운 도시였고, 모든 것이 balanced 도시라 아주 좋았다. 사람도 엄청 많지 않고, 집값도 엄청 비싸지 않은데, 모든 프랜차이즈는 다 있고, 지하철도 많고 버스도 잘 다니고 치안도 좋고.. &amp;nbsp;한국이 엄청 멀다는 것과 겨울이 진짜 미친 추위 (그 전에 도망나옴) 라는 단점이 있지만 아주 잘 즐기다가 왔다. 회사도 컬쳐도 좋고 워라밸도 좋고 연봉도 적당히 좋고 사람들도 좋아서 나의 영어한정 90 I 성향만 빼면 아주 즐거웠다. 일만 하면서 다니기에 딱이었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배운 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;가장 큰 것은 아무래도 오랜만에 긴 시간 해외에서 체류하고 영어로 일하면서 영어 심폐소생한 점인 것 같다. 맨날 읽고 들어도 한국에서 생활하다 보면 말할 일이 거의 없어서 영어가 많이 퇴화하고, 캐나다 생활하는 중에 학회+한국 3주 다녀왔더니 그냥 다시 제자리 broken English되는 것 보면서 진짜 신기하다고 생각했지만.. 아무튼 일하면서 많이 회복이 된 것 같다. 쓸데없는 코리안 겸손+머쓱+할 말 못함 콜라보 나는 정말 한국인 치고 덜한 편이라고 생각했는데 외국 회사 가 보니까 그냥 코리안 그 자체인 것을 인지해서 그 부분도 좀 많이 고칠 수 있었다. 사회 생활과 면접은 기세다(!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;작년에 &quot;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;Science+LLM 논문 리뷰를 받아 보니 가시밭길 같고, 분야도 살~짝 애매한 것 같기도 하고, 지금 하고 있는 실험 결과도 쉽지 않은데.. 또 언제 도망갈지 알 수 없다&quot; 라고 썼었는데, 아직은 (약간 틀어서?) 계속하고 있다. Small molecule에서 좀 벗어나려고 노력 중이라 회사에서도 처음 해보는 분야로 연구를 했었고, 지금도 또 도망가려고 하고 있다. 기존에 하던 분야에서 틀어서 agent 쪽으로 하고 있는데 이거도 리뷰 받아보니까 ㅋㅋㅋ 다를 바가 없음. 꽃이 지고서야 봄인 걸 알았습니다..&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;일상과 취미&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;&amp;nbsp;항상 같은 걸 지키려고 노력하는 일상과 취미. 올해는 캐나다에 있었기 때문에 독일어와 영어 스피킹 같은 것 하지 않고 그냥 현실 영어 스피킹 박치기 했다. 올해 한 줄 요약은 비행기에 질려 버린 자, 긴 비행 시간에 강제로 독서 많이 하다 정도 되겠다. (아 한 해가 너무 지나버려서 2025 yearly report 보려면 돈 내야함 ㅋㅋㅋ 이건 못 내지)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;&amp;nbsp;항상 해오던 취미들 먼저 말해보면, 독서 24권 목표를 처음으로 초과 달성해서 28권을 읽었다. 기억에 남는 두 권은 사피엔스 읽으려고 마음 먹은지 10년 만에 드디어 완독했다는 것과 (지금 생각해보면 안 읽으려는 의지가 대단하다..), 죽은 왕녀의 파반느였고, 올해는 재테크 공부를 책과 영상으로 좀 많이 하려고 노력했다. 술, 요리 항상 하던 대로 하고 있고 생면파스타 제면기와 솥밥용 솥이 장비에 추가되었고, 몬트리올 회사 근처에 이탈리안 마트가 있어서 관찰레 진짜 질리도록 먹고 그리치아 마스터해서 좋았다. 운동도 뭐 매년 같고.. 새로 한 운동은 없다. 그냥 러닝 헬스 배드민턴 클라이밍 돌려하는 중. 여행은 진짜 비행기 세 보니까 20번 타서 좀 놀랐다. 방콕, 에센, 함부르크, 마요르카, &amp;nbsp;바르셀로나, 비엔나, 부다페스트, 몬트리올, 뉴욕, 캘거리, 상하이 정도 다녀왔는데 이 정도면 우주방사능 피폭 의심해봐야 할 듯.. 기억에 남는 것은 마요르카에서 발목 부술 뻔 해서 코끼리 발목으로 다니기, 뉴욕 메츠 야구장, 상하이 음식 진짜 짱이다 정도이다 (이건 몬트리올에서 음식에 당하다가 와서 그럴 수도 있음).&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7213.jpg&quot; data-origin-width=&quot;4063&quot; data-origin-height=&quot;4208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UM5lT/dJMcahcMGDD/C5ihvWjfOJnjmQJ5xrtBhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UM5lT/dJMcahcMGDD/C5ihvWjfOJnjmQJ5xrtBhK/img.jpg&quot; data-alt=&quot;Oriental dokkaebi halloween&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UM5lT/dJMcahcMGDD/C5ihvWjfOJnjmQJ5xrtBhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUM5lT%2FdJMcahcMGDD%2FC5ihvWjfOJnjmQJ5xrtBhK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;334&quot; height=&quot;346&quot; data-filename=&quot;IMG_7213.jpg&quot; data-origin-width=&quot;4063&quot; data-origin-height=&quot;4208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Oriental dokkaebi halloween&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;추가된 키워드는 크게 없는데, 처음으로 멍멍이와 단둘이 1주 생활을 해 봤다는 점이 특이한 점이라면 특이한 점이다. 몬트리올 왕멍멍이들 뛰어 다니는 공원을 매일 하루에 두세번 갔는데, 약간 번거롭긴 했지만 꽤 즐거웠다. 한 번씩 사진첩 올려서 아련하게 얼굴 본다.. 하지만 내가 내 의지로 키울지는.. 친구들 펫시터 정도가 딱 적당해 보인다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;최근 사진 보기.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MVlGT/dJMb99Z9XVy/U1d0H0oMHfFdm3zY7AIoK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MVlGT/dJMb99Z9XVy/U1d0H0oMHfFdm3zY7AIoK0/img.png&quot; data-alt=&quot;귀엽지만 그냥 더 긁으라는 신호이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MVlGT/dJMb99Z9XVy/U1d0H0oMHfFdm3zY7AIoK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMVlGT%2FdJMb99Z9XVy%2FU1d0H0oMHfFdm3zY7AIoK0%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;270&quot; height=&quot;427&quot; data-filename=&quot;최근 사진 보기.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;귀엽지만 그냥 더 긁으라는 신호이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;블로그&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;&amp;nbsp;이거 이제 더 쓰기도 미안하다.. 조회수 백만 찍기는 했는데.. 그냥 졸업하고 성실히 할게 블로그야 미안하다. 이게 개인 홈페이지나 링크드인이 있다 보니 개인적으로 블로그를 예전에 봤었다는 분들이 나의 기대보다 꽤 있어서 그 때마다 열심히 써야겠다고 다짐만 하는데... 핑계를 대자면 인간이 1년에 쓸 수 있는 글 총량이 정해져 있는데 논문+리버털 하면 총량 뚝딱임 ㅎ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFOqO/dJMcagkDqEV/Dabw0Rk1wmUk62qa8BIG7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFOqO/dJMcagkDqEV/Dabw0Rk1wmUk62qa8BIG7K/img.png&quot; data-alt=&quot;우하향 거의 S&amp;amp;amp;P&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFOqO/dJMcagkDqEV/Dabw0Rk1wmUk62qa8BIG7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFOqO%2FdJMcagkDqEV%2FDabw0Rk1wmUk62qa8BIG7K%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;598&quot; height=&quot;242&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우하향 거의 S&amp;amp;P&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;정리&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span style=&quot;caret-color: #666666; background-color: #ffffff;&quot;&gt;&amp;nbsp;올해는 잘 놀았다~ 도 아니고 잘 일했다~ 도 아니고 그냥 평범했던 것 같은데 이건 모든 사람이 한 해 한 해 지날수록 느끼는 감정이라고 생각한다. 서울 3개월 잘 살아남은 것+캐나다 6개월 잘 살아남은 것+해외 회사 다닐 수는 있구나 를 확인한 것에 의의를 두겠다. 3월이 된 이제서야 서울 산 세월이랑 캐나다 산 세월이 거의 비슷해졌다. 어쩐지 서울이 어렵더라; 6월에 또 나가야하는디 잘 다녀 오겠슴다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/225</guid>
      <comments>https://process-mining.tistory.com/225#entry225comment</comments>
      <pubDate>Sun, 29 Mar 2026 18:17:23 +0900</pubDate>
    </item>
    <item>
      <title>Normalizing flow 설명</title>
      <link>https://process-mining.tistory.com/224</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Normalizing flow는 invertible transformation을 활용하여 어떤 쉬운 분포로부터 실제 데이터 분포 사이의 transformation을 학습하는 생성 모델이다. &lt;a href=&quot;https://process-mining.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Diffusion model&lt;/a&gt;로부터 시작되었고 flow matching까지 이어지는 생성 모델의 흐름은 정규 분포처럼 샘플링이 쉬운 데이터 분포로부터 어떤 하나의 값을 샘플링하여 이로부터 실제 데이터가 이루고 있는 복잡한 분포의 샘플을 얻어낸다는 프레임워크를 따른다. Normalizing flow의 개념을 이해하는 것이 flow matching을 이해하는 것과 직접적으로 관련이 있지는 않지만, 어떤 두 분포 사이의 transformation을 학습한다는 프레임워크를 공유하기 때문에, flow matching에 대한 글을 쓰기에 앞서 normalzing flow를 설명한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Overview&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Normalizing flow는 정규 분포와 같은 쉬운 pror 분포 $p_0(z_0)$로부터 우리가 원하는 데이터가 배치되어 있는 target 분포 $p_K(z_K=x)$로의 transformation을 invertible한 매핑 f로 표현하는 생성 모델을 말한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2936&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blc3Jg/btsPLNYja5O/pXf21qE5qN87PtVnRiH2C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blc3Jg/btsPLNYja5O/pXf21qE5qN87PtVnRiH2C1/img.png&quot; data-alt=&quot;Overview of normalizing flow&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blc3Jg/btsPLNYja5O/pXf21qE5qN87PtVnRiH2C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblc3Jg%2FbtsPLNYja5O%2FpXf21qE5qN87PtVnRiH2C1%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;2936&quot; height=&quot;884&quot; data-origin-width=&quot;2936&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Overview of normalizing flow&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정을 통해 쉬운 prior 분포로부터 뽑은 noise를 우리가 원하는 데이터로 매핑할 수 있게 되고, 이러한 과정이 생성 모델의 역할을 하는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Change of variables&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Normalizing flow를 이해하기 위해서는 change of variables와 Detemeniant에 대한 이해가 필수적이다. 이를 최대한 쉽게 설명해보겠다. 우리가 어떤 평균이 0이고 분산이 1인 표준 정규 분포를 따르는 random variable X (아래 그림에서 파란색 선)를 가지고 있다고 하자. 그렇다면 Y=f(X)=1/3X 라는 random variable의 분포는 어떻게 표현할 수 있을까? 우리가 모든 X 값에 대해서 3을 나누기 때문에, 그 값의 분포는 아래 그림의 초록색과 같이 쪼그라들 것이다. 하지만 이렇게 값이 쪼그라들게 되면 적분했을 때 값이 1이 되어야 한다는 확률 분포의 성질(conserving probability mass)을 만족하지 못한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QTJRA/btsPPktg1fo/NOOFwszs5KVUuqdHCfRbtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QTJRA/btsPPktg1fo/NOOFwszs5KVUuqdHCfRbtk/img.png&quot; data-alt=&quot;분포의 변화&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QTJRA/btsPPktg1fo/NOOFwszs5KVUuqdHCfRbtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQTJRA%2FbtsPPktg1fo%2FNOOFwszs5KVUuqdHCfRbtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;326&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;분포의 변화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그맇기 때문에 우리는 확률 분포의 성질을 만족할 수 있도록 다시 전체 값에 3을 곱하여 빨간 선과 같이 Y의 확률 분포를 만들어준다. 이 때 3을 f inverse function의 x에 대한 determinant라고 부른다. 이를 식으로 표현하면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v1Hu8/btsPMpCQKoo/nv66WGYN0K5LefxPyOyMxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v1Hu8/btsPMpCQKoo/nv66WGYN0K5LefxPyOyMxk/img.png&quot; data-alt=&quot;p(y)의 분포 표현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v1Hu8/btsPMpCQKoo/nv66WGYN0K5LefxPyOyMxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv1Hu8%2FbtsPMpCQKoo%2Fnv66WGYN0K5LefxPyOyMxk%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;703&quot; height=&quot;143&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;p(y)의 분포 표현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;즉, 한 마디로 정리하면 어떤 두 분포 사이의 transformation이 필요할 때, 두 분포의 크기 차이를 맞춰주기 위해서 inverse function의 determinant를 곱해준다는 것이다. 이 determinant는 확률 분포의 volume이 줄어들거나 늘어나는 것을 조절하는 역할을 하고, change of variables는 이렇게 x의 density를 y로 바꾸는 등의 행동을 의미한다. 위와 같이 식이 정의되기 때문에, f는 1) 항상 역함수를 구할 수 있는 invertible한 함수여야 하고, 2) determinant를 구하기 쉬워야 한다.&amp;nbsp;이는 우리가 앞서 말한 문제 세팅인 간단한 prior 분포로부터 우리가 원하는 target 분포로 transformation을 할 때에도 그대로 적용된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Training of normalizing flow&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그럼 결국 normalzing flow의 목표는 분포 사이의 transformation을 잘 해주는 적절한 $f_\theta$를 찾는 것이다. 이 때, 이 f는 1) 항상 역함수를 구할 수 있는 invertible한 함수이고, 2) determinant를 구하기 쉬운 형태로 정의된다. 이 적절한 f를 찾기 위해서는 적절한 objective를 가지고 학습을 진행해야 한다. 이 때 적절한 objective로는 다른 ML 알고리즘들처럼 data point x의 negative log-likelihood를 최소화하는 것이 사용된다. 이를 식으로 표현하면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GPiKC/btsPPmq5K4W/Vj88LZ3kQxHCkXK7BTdFck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GPiKC/btsPPmq5K4W/Vj88LZ3kQxHCkXK7BTdFck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GPiKC/btsPPmq5K4W/Vj88LZ3kQxHCkXK7BTdFck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGPiKC%2FbtsPPmq5K4W%2FVj88LZ3kQxHCkXK7BTdFck%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;2052&quot; height=&quot;216&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777; text-align: center;&quot;&gt;Normalizing flow의 학습 objective&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;image&quot; data-ke-style=&quot;alignCenter&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;/figure&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 식에서 y는 데이터 포인트, x는 샘플링한 노이즈를 의미한다. 이 식은 위에서 설명한 change-of-variable 식에서 y를 데이터 포인트, x를 샘플링한 노이즈라고 생각하고 대입하면 도출된다. 이를 minimize하는 $f_\theta$를 찾음으로써 p는 점점 실제 데이터의 분포와 비슷하게 학습되고, 결국 prior 분포에 $f_\theta$를 적용함으로써 실제 데이터를 샘플링할 수 있게 되는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Pros &amp;amp; cons&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Pros&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;NF의 가장 큰 장점은 lieklihood를 완전히 정확하게 구할 수 있다는 점이다. VAE와 같이 어떤 variational bound를 활용해 학습하는 것이 아닌 정확한 MLE 식을 통해 학습되기 때문에 density를 정확하게 계산할 수 있다는 이점이 있다. 또한 noise로부터 data 혹은 data로부터 noise의 관계가 식을 통해 완전히 정확하게 매핑되고, sampling을 할 때에도 이 식을 계산만 하면 되기 때문에 샘플링 속도가 굉장히 빠르다는 이점이 있다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Cons&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;NF의 단점은 f의 형태가 자유롭지 못하고, 역함수가 정의될 수 있고 determinant를 구하기 쉬운 형태로 제한된다는 것이다. 이러한 f에 대한 제한은 데이터가 완전히 유연하게 만들어지도록 하지는 못하기 때문에 샘플링을 할 때에 제약이 있을 수 있다. 또한 determinant의 계산 자체가 아무리 쉽게 만든다고 해도 높은 차원으로 갈수록 굉장히 시간이 오래 걸리고 복잡하다는 문제도 있다.&lt;/p&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;이번 글에서는 normalzing flow가 무엇인지에 대해 알아보았다. 다음 글에서는 이를 continous time transformation으로 확장한 continous normalinzg flow에 대해 알아보겠다.&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/Deep Learning</category>
      <category>flow matching</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/224</guid>
      <comments>https://process-mining.tistory.com/224#entry224comment</comments>
      <pubDate>Sun, 10 Aug 2025 06:12:32 +0900</pubDate>
    </item>
    <item>
      <title>ESM-3 설명 (Simulating 500 million years of evolution with a language model 논문 리뷰)</title>
      <link>https://process-mining.tistory.com/223</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ESM-3는 단백질의 구조, 시퀀스, 그것의 기능까지 모두 고려한 multi-modal protein language model로, &amp;nbsp;&lt;a href=&quot;https://process-mining.tistory.com/222&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ESMFold&lt;/a&gt;에서 한 발 더 나아가 기능까지 고려한 것이 특징이다. 각 modality를 따로 학습하거나 downstream task에서만 합친 것이 아니라, pre-training 단계에서부터 이들을 통합하여 학습함으로써 서로 정보를 보완하며 학습할 수 있도록 한 것이 특징이다. 이번 글에서는 ESM-3가 무엇이고 어떻게 작동하는지에 대해 알아보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Motivation&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기존의 ESMFold는 단순히 단백질의 시퀀스로부터 구조를 예측하는 하나의 태스크만을 진행할 수 있었다. 하지만 이러한 구조 예측에서 나아가, 해당 단백질이 특정 환경의 체내에서 어떤 기능을 하는지, 단백질의 구조가 기능에 어떤 영향을 미치는지 등도 단백질을 이해하는 데에 중요한 요소이고, 다양한 downstream task를 수행하는 데에 영향을 미친다. 그렇기 때문에 &lt;b&gt;단백질의 시퀀스, 구조, 기능을 모두 다룰 수 있는 multi-modal 모델&lt;/b&gt;이 필요해졌고 이에 ESM-3가 제안되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_f8e0339709548880f0d46f34283f7890.png&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Eip2C/btsPrco98bH/gwkloycskg1HWru1Bk57e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Eip2C/btsPrco98bH/gwkloycskg1HWru1Bk57e0/img.png&quot; data-alt=&quot;ESM-3의 multi-modality&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Eip2C/btsPrco98bH/gwkloycskg1HWru1Bk57e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEip2C%2FbtsPrco98bH%2Fgwkloycskg1HWru1Bk57e0%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;639&quot; height=&quot;260&quot; data-filename=&quot;upload_f8e0339709548880f0d46f34283f7890.png&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM-3의 multi-modality&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Architecture&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;기존 ESMFold는 masked language modeling (MLM)을 활용해서 학습을 진행해왔다. 하지만 이러한 학습 방식은 단백질이 아미노산 하나씩을 채우는 방식으로 evolve하지 않고, 구조적 기능적으로 아미노산 시퀀스를 종합적으로 고려하여 3차원 구조로 folding하는 방식으로 evolve하기 때문에 실제로 어떻게 작동하는지와는 거리가 있다. 이에 ESM-3는 시퀀스, 구조, 기능을 모두 jointly modeling하여 단백질의 특성을 좀 더 현실적으로 고려할 수 있는 학습 방식을 제시하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_554922a0a4133e6c831594aa573e29ed.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byArT5/btsPpVoSNIm/nCSEQWOTGdY9VtGX36l77K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byArT5/btsPpVoSNIm/nCSEQWOTGdY9VtGX36l77K/img.png&quot; data-alt=&quot;ESM-3 architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byArT5/btsPpVoSNIm/nCSEQWOTGdY9VtGX36l77K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyArT5%2FbtsPpVoSNIm%2FnCSEQWOTGdY9VtGX36l77K%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;441&quot; height=&quot;432&quot; data-filename=&quot;upload_554922a0a4133e6c831594aa573e29ed.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM-3 architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Multi-modal MLM with consistent tokenization&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ESM-3는 앞서 설명했듯 single modality (sequence)의 구멍을 채우는 방식으로 학습하는 것이 아닌, 모든 modality를 고려하는 방식으로 학습을 진행한다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기존의 방법들이 각 모달리티의 representation을 따로 학습하고 이를 마지막 단계에서 합친 것과는 다르게, ESM-3는 모든 모달리티에 대해 통합된 tokenziation 방법을 적용한다. 구체적으로, sequence는 기존과 같은 방법으로 각 residue별로 하나씩 tokenize하고, 3차원 구조 정보는 각 아미노산을 둘러싸고 있는 atom 정보를 discretize하며, function 정보는 각 residue의 function 정보 (catalytic site 등)를 하나씩 tokenize한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_8bb036ca586dec773b2388274f5b2d04.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbp1SZ/btsPrK0cWF1/HFOYB6OCh1WgcYkHK0Obj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbp1SZ/btsPrK0cWF1/HFOYB6OCh1WgcYkHK0Obj0/img.png&quot; data-alt=&quot;Structure tokenization&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbp1SZ/btsPrK0cWF1/HFOYB6OCh1WgcYkHK0Obj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbp1SZ%2FbtsPrK0cWF1%2FHFOYB6OCh1WgcYkHK0Obj0%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;369&quot; height=&quot;475&quot; data-filename=&quot;upload_8bb036ca586dec773b2388274f5b2d04.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Structure tokenization&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 통일된 tokenization 구조는 각 representation이 학습 과정에서 align될 수 있게 하고, 따라서 각 모달리티가 서로의 학습에 추가적인 정보를 제공하여 더 학습이 잘 될 수 있게 도와준다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Geometric attention&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Geometric attention은 3D 좌표 정보를 더 효과적으로 처리하기 위한 장치로, 기존의 attention layer를 SE(3)-invariant하게 대체하는 것이다. 여기서 SE(3)-invariant하다는 것은 쉽게 얘기하면 돌리거나 이동시켜도 그 특성이 그대로 유지되는 것을 말한다. 구체적으로, attention은 각 residue 사이의 거리를 기반으로 하는 distance-based attention과 각 residue 사이의 상대적인 방향을 기반으로 하는 direction-based attention을 결합한다. 이러한 정보는 각 residue 사이의 관계를 효과적으로 모델링하여 최종적으로 단백질이 어떻게 folding될 것인지, 즉 3D 구조 정보가 어떻게 될 것인지를 예측하는 데에 도움을 준다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Alignment&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, ESM-3는 MLM pre-training 이후에 단백질이 evolve하는 과정과 비슷한 training objective를 가지는 alignment-based fine-tuning 과정을 거친다. 이는 RLHF와 약간 비슷하게, 각 protein pair를 비교하여 더 높은 점수를 가지는 단백질을 priortize하도록 진행된다. 이 때, 이 점수는 원하는 property (cRMSD, pTM 등)로 다양하게 결정될 수 있다. 이렇게 더 높은 점수를 가지는 단백질의 likelihoood를 높이는 방식으로 학습을 진행함으로써 모델이 function에 대한 고려까지 할 수 있게 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_34abfbad807fd61c602a0f5ae36edafd.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cctOqA/btsPrhc6hnK/qvlZGdJ8SdQ2dHUavFnyAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cctOqA/btsPrhc6hnK/qvlZGdJ8SdQ2dHUavFnyAk/img.png&quot; data-alt=&quot;ESM-3의 alignment&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cctOqA/btsPrhc6hnK/qvlZGdJ8SdQ2dHUavFnyAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcctOqA%2FbtsPrhc6hnK%2FqvlZGdJ8SdQ2dHUavFnyAk%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;614&quot; height=&quot;229&quot; data-filename=&quot;upload_34abfbad807fd61c602a0f5ae36edafd.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM-3의 alignment&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Experiments&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Unconditional generation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;우선, 가장 기본적인 unconditional generation 결과에 대해 살펴보겠다. 아래 그림에서 회색이 실제 단백질의 space, 색이 있는 부분이 ESM-3의 space인데, 실제에 잘 부합하도록 단백질을 고르게 생성하고 있음을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_f634eb8a39f9f880979782dac9e3027b.png&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ko5Yf/btsPpTdjLsq/YjWGWTp78LzYcXXyq7Qps1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ko5Yf/btsPpTdjLsq/YjWGWTp78LzYcXXyq7Qps1/img.png&quot; data-alt=&quot;ESM-3의 unconditional generation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ko5Yf/btsPpTdjLsq/YjWGWTp78LzYcXXyq7Qps1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKo5Yf%2FbtsPpTdjLsq%2FYjWGWTp78LzYcXXyq7Qps1%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;1224&quot; height=&quot;602&quot; data-filename=&quot;upload_f634eb8a39f9f880979782dac9e3027b.png&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM-3의 unconditional generation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Conditional generation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다음은 ESM-3의 진가가 가장 잘 드러나는 conditional generation이다. ESM-3는 다양한 모달리티를 모두 input으로 받을 수 있기 때문에 시퀀스가 주어졌을 때 구조를 예측하는 것 뿐만 아니라, 구조가 주어졌을 때 시퀀스를 예측하거나, 원하는 기능이 주어졌을 때 시퀀스를 예측하는 것 등 모든 것이 가능하다. 그 예시로, 아래 그림과 같이 symmetry라는 structural 정보를 조건으로 주었을 때, 아래와 같이 대칭의 단백질을 잘 생성하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_958b4336eb2ab76c50bb6a0709ffd144.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4T2Ml/btsPp7Cjvx5/RI8iaO893jvX1XFzJrEBUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4T2Ml/btsPp7Cjvx5/RI8iaO893jvX1XFzJrEBUK/img.png&quot; data-alt=&quot;ESM-3의 symmetric conditional generation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4T2Ml/btsPp7Cjvx5/RI8iaO893jvX1XFzJrEBUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4T2Ml%2FbtsPp7Cjvx5%2FRI8iaO893jvX1XFzJrEBUK%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;494&quot; height=&quot;614&quot; data-filename=&quot;upload_958b4336eb2ab76c50bb6a0709ffd144.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM-3의 symmetric conditional generation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 두 개 이상의 modality를 condition으로 주는 것으로 확장할 수도 있다. 예를 들어, 아래 그림에서는 structural fold와 functional site의 두 개의 모달리티를 조건으로 하는 multi-objective 단백질 structure를 예측하도록 하였는데, 이것 또한 조건에 잘 부합하도록 생성하는 것이 가능하다는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_f84815fa5d6ca3ebfbd17093ab8053dc.png&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSGcm/btsPqI3oUha/m8vlj9duVJvnPelyUIEHzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSGcm/btsPqI3oUha/m8vlj9duVJvnPelyUIEHzK/img.png&quot; data-alt=&quot;Prompting multi modalities&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSGcm/btsPqI3oUha/m8vlj9duVJvnPelyUIEHzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSGcm%2FbtsPqI3oUha%2Fm8vlj9duVJvnPelyUIEHzK%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;319&quot; height=&quot;511&quot; data-filename=&quot;upload_f84815fa5d6ca3ebfbd17093ab8053dc.png&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Prompting multi modalities&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;&amp;nbsp;이번 글에서는 ESM-3에 대해 알아보았다. ESM-3는 MSA 없이 language model만을 활용하여 단백질의 구조 예측을 가능하게 한 ESMFold를 확장하여 시퀀스, 구조, 기능의 모달리티를 모두 반영한 language model을 만들었고, 이를 통해 multimodal controllable generation이 가능하게 하였다. 이러한 ESM 시리즈의 발전은 LLM이 단순히 단백질의 세계를 이해하는 데에만 도움을 줄 뿐만 아니라, 과학적인 발견(scientific discovery)까지 가능하게 할 수도 있다는 것을 보인다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;References&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] Hayes, T., et al. Simulating 500 million years of evolution with a language model. Science, 2025.&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;[2] Baek, M., et al. Accurate prediction of protein structures and interactions using a three-track neural network. Science, 2021.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[3] Lin, Z., et al. Evolutionary-scale prediction of atomic-level protein structure with a language model. Science, 2023.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[4] Jumper, J., et al. Highly accurate protein structure prediction with AlphaFold. Nature, 2021.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[5] Devlin, J., et al. BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL-HLT, 2019.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[6]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://blog.ml6.eu/unlocking-the-secrets-of-life-ai-protein-models-demystified-f286b222d571&quot;&gt;https://blog.ml6.eu/unlocking-the-secrets-of-life-ai-protein-models-demystified-f286b222d571&lt;/a&gt;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/AI4Science</category>
      <category>ai4science</category>
      <category>LLM</category>
      <category>Protein</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/223</guid>
      <comments>https://process-mining.tistory.com/223#entry223comment</comments>
      <pubDate>Sun, 20 Jul 2025 04:32:02 +0900</pubDate>
    </item>
    <item>
      <title>ESMFold 설명 (Evolutionary-scale prediction of atomic level protein structure with a language model 논문 리뷰)</title>
      <link>https://process-mining.tistory.com/222</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ESMFold는 아미노산으로 이루어진 protein sequence가 주어졌을 때 이 단백질을 구성하는 모든 원자들의 structure를 예측하는 full atomic-level structural prediction 모델로, AlphaFold가 사용했던 비효율적인 MSA 기법에 의존하지 않는 LLM 기반 모델이다. 계산이 복잡하고 비용이 많이 드는 MSA 방법을 사용하지 않음으로써, ESMFold 모델은 기존에 시간이 오래 걸리던 단백질의 구조 예측 (structure prediction)을 높은 정확도를 유지하면서 가속화하였다. 이번 글에서는 ESMFold가 무엇이고, 어떻게 작동하는지에 대해 알아보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*이 글에서 &amp;nbsp;protein structure prediction은 단백질의 1차 구조(&lt;a href=&quot;https://www.khanacademy.org/science/biology/macromolecules/proteins-and-amino-acids/a/orders-of-protein-structure&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;protein sequence&lt;/a&gt;)가 주어졌을 때, 그것의 3차 구조(tertiary structure)를 예측하는 것을 의미한다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Motivation&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 protein structure prediction은 물리 기반의 simulation을 바탕으로 이루어졌기 때문에 그 속도가 매우 느렸고, 비용도 많이 들었다. 이러한 전통적인 방법을 완전히 탈피하였던 것이 바로 AlphaFold2의 등장이다. AlphaFold2는 multiple sequence alignment (MSA)와 Transformer를 활용하여 protein sequence로부터 이의 3차원 구조(좌표)를 예측하였다. MSA는 간단히 설명하면, 서로 다른 단백질의 sequence들로부터 공통적인 부분(conserved position)이 어딘지를 찾아내고, 이러한 공통적인 부분이 공통의 조상으로부터 온 중요한 부분이라고 가정하며 패턴을 분석하는 것을 말한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_deb08b81ac7889a525e379fee3d3a1e8.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjoIfb/btsPj5LkRLt/PZ9zFWhViInnM2XLKZuD9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjoIfb/btsPj5LkRLt/PZ9zFWhViInnM2XLKZuD9k/img.png&quot; data-alt=&quot;Multiple seuqnce alignment (MSA)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjoIfb/btsPj5LkRLt/PZ9zFWhViInnM2XLKZuD9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjoIfb%2FbtsPj5LkRLt%2FPZ9zFWhViInnM2XLKZuD9k%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;644&quot; height=&quot;364&quot; data-filename=&quot;upload_deb08b81ac7889a525e379fee3d3a1e8.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Multiple seuqnce alignment (MSA)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이러한 MSA는 AlphaFold2의 핵심이 되는 구성 요소 중 하나이지만, 엄청나게 많은 양의 단백질 시퀀스를 동시에 파악하여 공통되는 부분을 찾아야 하기 때문에 계산하는 데에 비용이 많이 든다는 단점을 가진다. 이에 ESMFold 및 그것의 후속작 ESM3 모델은 이러한 MSA 과정을 패스하고, 단백질 시퀀스 자체를 글이라고 생각한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_2acb2cdbb86b6b81e95e183efc95ff9b.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UUck5/btsPjf2iUKy/UaUmPuCxzkawvowGqDqFi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UUck5/btsPjf2iUKy/UaUmPuCxzkawvowGqDqFi0/img.png&quot; data-alt=&quot;ESM 시리즈의 모델 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UUck5/btsPjf2iUKy/UaUmPuCxzkawvowGqDqFi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUUck5%2FbtsPjf2iUKy%2FUaUmPuCxzkawvowGqDqFi0%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;622&quot; height=&quot;225&quot; data-filename=&quot;upload_2acb2cdbb86b6b81e95e183efc95ff9b.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;507&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESM 시리즈의 모델 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;커다란 LLM에 엄청나게 많은 양의 단백질 시퀀스를 학습&lt;/b&gt;시켜 이로부터 모델이 자연스럽게 rich embedding을 얻을 수 있게 하는 것이다. 이를 통해 마치 GPT가 문법, 수학 문제 푸는 법 등을 자연스럽게 학습하듯이 protein language model은 단백질이 접히는(folding) 패턴, 구조적으로 어떤 형태가 되어야 하는지, 단백질이 어떻게 작동하는지 등을 자연스럽게 학습하는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Architecture&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESMFold는 ESM-2, folding trunk, structure module의 세 개으 구성요소로 이루어져 있다. 한 줄로 요약하면, ESM-2는 protein sequence로부터 embedding을 학습하고, folding trunk는 이를 활용해 representation을 업데이트하며, structure module은 단백질의 3D 구조를 예측한다. 그럼 각각의 구성 요소에 대해 알아보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_8cba9f94ec81c2c0404f634bd246ce13.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Uu1X/btsPjjp7Dmd/Jm6PLBavCcstWOx16vJnv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Uu1X/btsPjjp7Dmd/Jm6PLBavCcstWOx16vJnv0/img.png&quot; data-alt=&quot;ESMFold architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Uu1X/btsPjjp7Dmd/Jm6PLBavCcstWOx16vJnv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Uu1X%2FbtsPjjp7Dmd%2FJm6PLBavCcstWOx16vJnv0%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;589&quot; height=&quot;256&quot; data-filename=&quot;upload_8cba9f94ec81c2c0404f634bd246ce13.png&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ESMFold architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ESM-2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ESM-2는 sequence의 embedding을 학습하기 위해 maksed language modeling (MLM) objective를 활용한다. 즉, BERT처럼 시퀀스 내의 각 아미노산(residue)를 마스킹하여 이것이 무엇인지를 예측하는 것을 training objective로 사용하는 것이다. 이를 통해 모델은 아미노산 간의 dependency를 학습하고, 이에 따라 적절한 각 protein sequence의 representation을 학습한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Folding trunk&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Folding trunk는 여러 개의 folding block들로 구성되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_d6a9c820ce26aa877d1afd3c2c201b59.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDzRA/btsPpPu2Y7N/1StMtKfaqK8azXjkGkavJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDzRA/btsPpPu2Y7N/1StMtKfaqK8azXjkGkavJk/img.png&quot; data-alt=&quot;Folding block architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDzRA/btsPpPu2Y7N/1StMtKfaqK8azXjkGkavJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDzRA%2FbtsPpPu2Y7N%2F1StMtKfaqK8azXjkGkavJk%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;579&quot; height=&quot;274&quot; data-filename=&quot;upload_d6a9c820ce26aa877d1afd3c2c201b59.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Folding block architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 folding block은 단백질 시퀀스의 representation과 이 단백질 시퀀스 내의 모든 아미노산 간의 pair representation을 반복적으로 업데이트한다. 이러한 업데이트 방식은 각 아미노산의 local한 구조 정보와 각 아미노산이 pair로 서로 상호작용하는 global한 구조 정보를 모두 반영한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Structure module&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Structure module은 앞 단계에서 업데이트한 sequence representation과 pair representation을 받아 equivariant transformer를 활용하여 단백질의 3D 구조를 예측한다. 이 때, equivariant transformer를 사용하는 이유는 단백질의 3차원 구조가 돌아가거나 이동한다면 그것이 가지는 physical property 또한 그에 맞추어서 바뀌어야 하기 때문이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Experiments&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Structure prediction accuracy&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 중요한 것은 이 모델이 단백질의 3차원 구조를 얼마나 잘 예측하는지일 것이다. ESMFold는 계산이 복잡한 MSA에 의존하지 않음에도 불구하고 기존의 단백질 구조 예측 모델들의 성능과 비슷한 성능을 보여주었다. 뿐만 아니라, 기존 모델들에서 MSA를 생략하였을 때와 비교하면 훨씬 좋은 성능을 보였다. 이는 MSA 없이 language model에만 의존하는 ESMFold의 구조가 잘 작동함을 증명한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;upload_075c08d3800921ce7107272b43a0f4f0.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf2PLO/btsPqk9kicf/nwd4I0yGUhmKoqLdurSNiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf2PLO/btsPqk9kicf/nwd4I0yGUhmKoqLdurSNiK/img.png&quot; data-alt=&quot;Structure prediction accuracy of ESMFold&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf2PLO/btsPqk9kicf/nwd4I0yGUhmKoqLdurSNiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf2PLO%2FbtsPqk9kicf%2Fnwd4I0yGUhmKoqLdurSNiK%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;492&quot; height=&quot;295&quot; data-filename=&quot;upload_075c08d3800921ce7107272b43a0f4f0.png&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Structure prediction accuracy of ESMFold&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-filename=&quot;upload_dbb51ee987ff1f0c237cda8e18efe9c9.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1wVlE/btsPqUCfDtm/6uCnNxv0lxaVgzEURpSgP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1wVlE/btsPqUCfDtm/6uCnNxv0lxaVgzEURpSgP1/img.png&quot; data-alt=&quot;Successful structural prediction&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1wVlE/btsPqUCfDtm/6uCnNxv0lxaVgzEURpSgP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1wVlE%2FbtsPqUCfDtm%2F6uCnNxv0lxaVgzEURpSgP1%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;364&quot; height=&quot;308&quot; data-filename=&quot;upload_dbb51ee987ff1f0c237cda8e18efe9c9.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Successful structural prediction&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Speed&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MSA를 생략함으로써 ESMFold는 기존의 베이스라인들보다 60배 정도 빠른 inference time을 가진다. 이러한 특성은 ESMFold가 거대한 크기의 단백질 데이터셋에 대해서 효율적으로 구조 예측을 할 수 있음을 보여준다.&lt;/p&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;이번 글에서는 ESMFold가 MSA 없이 어떻게 단백질 구조 예측을 성공적으로 하였는지에 대해 알아보았다. 다음 글에서는 이의 발전된 모델인 &lt;a href=&quot;https://process-mining.tistory.com/223&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ESM-3&lt;/a&gt;에 대해 알아보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무도 안 읽을 것 같은 AI4Science 시리즈 시작! 마치 블로그 시작할 때처럼..&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] Hayes, T., et al. Simulating 500 million years of evolution with a language model. Science, 2025.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;[2] Baek, M., et al. Accurate prediction of protein structures and interactions using a three-track neural network. Science, 2021.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[3] Lin, Z., et al. Evolutionary-scale prediction of atomic-level protein structure with a language model. Science, 2023.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[4] Jumper, J., et al. Highly accurate protein structure prediction with AlphaFold. Nature, 2021.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[5] Devlin, J., et al. BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL-HLT, 2019.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;[6] &lt;a href=&quot;https://blog.ml6.eu/unlocking-the-secrets-of-life-ai-protein-models-demystified-f286b222d571&quot;&gt;https://blog.ml6.eu/unlocking-the-secrets-of-life-ai-protein-models-demystified-f286b222d571&lt;/a&gt;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/AI4Science</category>
      <category>ai4science</category>
      <category>LLM</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/222</guid>
      <comments>https://process-mining.tistory.com/222#entry222comment</comments>
      <pubDate>Sat, 19 Jul 2025 11:24:42 +0900</pubDate>
    </item>
    <item>
      <title>Self-consistency CoT 설명</title>
      <link>https://process-mining.tistory.com/221</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Self-consistency CoT&lt;/b&gt;는 greedy하게 하나의 reasoning trace만을 생성하던 기존의 CoT 방식에서 벗어나, &lt;b&gt;다양한 reaosning trace를 샘플링하여 이들 중 가장 높은 빈도로 consistent하게 등장하는 답을 최종 답으로 채택&lt;/b&gt;하는 방법을 말한다. 인간은 어떤 문제에 대한 해답을 찾을 때 한 개의 방법만을 생각해보는 것이 아닌, 다양한 방향으로 문제를 푸는 방법을 생각해보고, 결론이 같다면 이를 최종 답으로 선택하고는 한다. 이번 글에서는 이러한 점에 착안한 self-consistency가 무엇인지에 대해 알아보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Overview&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Self-consistency 방법은 아래 그림과 같이 정말 간단하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAkyU/btsPkviHqaU/yWYdDYs0HCybWZQ0uzkly0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAkyU/btsPkviHqaU/yWYdDYs0HCybWZQ0uzkly0/img.png&quot; data-alt=&quot;Overview of self-consistency&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAkyU/btsPkviHqaU/yWYdDYs0HCybWZQ0uzkly0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAkyU%2FbtsPkviHqaU%2FyWYdDYs0HCybWZQ0uzkly0%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;691&quot; height=&quot;314&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Overview of self-consistency&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 CoT prompting 방법 (그림에서 위)은 앞서 설명했듯 하나의 가장 가능성이 높은 reasoning path만을 greedy하게 생성하여 이를 따라 정답을 도출해내곤 했다. 하지만 이러한 방법은 딱 한 개의 reaosning path만을 생성하기 때문에 만약 이것이 가능성이 높음에도 불구하고 틀렸을 경우, 이를 보정할 방법이 전혀 존재하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;하지만 self-consistency 방법은 (그림에서 아래) &lt;b&gt;다양한 reasoning path들을 생성&lt;/b&gt;한다. 그림에서는 총 3개의 reasoning path를 생성했다. 이 때, 초록색으로 표현된 두 개의 reasoning path는 18이라는 같은 답을, 빨간색으로 표현된 한 개의 reasoning path는 26이라는 답을 도출했다. 이에 대해 &lt;b&gt;majority voting&lt;/b&gt; 방식을 통해 reasoning path들을 marginalize하여 가장 높은 빈도로 도출된 답인 18을 최종 답으로 제시하는 것이다.&amp;nbsp;이 때, 다양한 reasoning path를 샘플링하는 데에는 temperature sampling, top-k sampling, nucleus sampling 등 어떠한 샘플링 방법도 모두 활용될 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Experiments&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Self-consistency 방법은 그것의 간단함에 비해 성능의 향상에는 효과가 컸다. 예를 들어, 다음 표는 수학 reasoning의 정답 정확도를 나타내는데, 단순 CoT prompting보다 self-consistency 방법의 성능이 훨씬 높은 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H2l6a/btsPkr1HUpm/bxEhQ6qBmRmkPxHq4G1Zc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H2l6a/btsPkr1HUpm/bxEhQ6qBmRmkPxHq4G1Zc0/img.png&quot; data-alt=&quot;Self-consistency의 수학 reasoning 성능 향상&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H2l6a/btsPkr1HUpm/bxEhQ6qBmRmkPxHq4G1Zc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH2l6a%2FbtsPkr1HUpm%2FbxEhQ6qBmRmkPxHq4G1Zc0%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;272&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Self-consistency의 수학 reasoning 성능 향상&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그렇다면 self-consistency가 다양한 reasoning trace를 생성하는 것을 통해 성능을 향상시키는데, 얼마나 다양한 샘플들을 생성해야할까? 이에 대한 대답은 아래 차트에서 알 수 있다. 보통 10개 정도의 샘플로도 큰 향상을 얻었고, 20-30개 이상 정도에서는 수렴하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nSTZh/btsPlfzriAZ/5YMdzD7KXYlU9pIEwVRq90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nSTZh/btsPlfzriAZ/5YMdzD7KXYlU9pIEwVRq90/img.png&quot; data-alt=&quot;Self-consistency with the number of diverse reasoning paths&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nSTZh/btsPlfzriAZ/5YMdzD7KXYlU9pIEwVRq90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnSTZh%2FbtsPlfzriAZ%2F5YMdzD7KXYlU9pIEwVRq90%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;725&quot; height=&quot;129&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Self-consistency with the number of diverse reasoning paths&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;또한 모델의 사이즈가 변함에 따라 self-consistency의 효과가 적어질 수도 있지 않을까? 라는 의문이 들 수 있다. 모델의 사이즈가 커질수록 reasoning 능력이 뛰어날 것이고, 그렇다면 한 번의 greedy decoding으로 옳은 정답을 바로 도출할 수도 있을 것이기 때문이다. 하지만 아래 실험에서 이는 사실이 아니고, self-consistency 방식이 다양한 model scale에서 모두 성능 향상을 보였음을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ep9cp/btsPkaskvUL/3K6xHwSq6IBPEi9bPXzXkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ep9cp/btsPkaskvUL/3K6xHwSq6IBPEi9bPXzXkK/img.png&quot; data-alt=&quot;Self-consistency across model scales&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ep9cp/btsPkaskvUL/3K6xHwSq6IBPEi9bPXzXkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEp9cp%2FbtsPkaskvUL%2F3K6xHwSq6IBPEi9bPXzXkK%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;277&quot; height=&quot;180&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Self-consistency across model scales&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 글에서 self-consistency가 무엇인지에 대해 알아보았다. 약간은 오래된 방법이기는 하지만, 최근에는 이를 활용한 fine-tuning 및 self-improving 등 다양한 후속 연구들이 나왔기 때문에 LLM decoding의 기초가 되는 논문으로 알아두는 것이 좋다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Wang, et al. Self-consistency improves chain of thought reasoning in language models.&amp;nbsp;ICML 2023.&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/LLM</category>
      <category>LLM</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/221</guid>
      <comments>https://process-mining.tistory.com/221#entry221comment</comments>
      <pubDate>Wed, 16 Jul 2025 10:54:44 +0900</pubDate>
    </item>
    <item>
      <title>RLHF 설명 (Training language models to follow instructions with human feedback 논문 리뷰)</title>
      <link>https://process-mining.tistory.com/220</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;RLHF는 reinforcement learning from human feedback의 줄임말로, 학습을 데이터셋에만 의존하지 않고 사람의 피드백을 강화학습에 결합하여 사람의 생각과 리워드 모델의 결과가 일치하도록 하는 것을 말한다. 이러한 RLHF는 처음에 language model을 optimize하는 방법으로 제시되어, ChatGPT의 성능을 올리는 데에도 활용되었다고 알려져 있다. 이번 글에서는 이 RLHF가 무엇인지에 대해 알아보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Motivation&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;옛날의 ChatGPT 버전에게 &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;640&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byBLou/btsLDkMEnHy/6D7kwEOOYPmsCz3ex1gld0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byBLou/btsLDkMEnHy/6D7kwEOOYPmsCz3ex1gld0/img.png&quot; data-alt=&quot;세종대왕 맥북 던짐 사건&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byBLou/btsLDkMEnHy/6D7kwEOOYPmsCz3ex1gld0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyBLou%2FbtsLDkMEnHy%2F6D7kwEOOYPmsCz3ex1gld0%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;349&quot; height=&quot;218&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;세종대왕 맥북 던짐 사건&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이런 글이 만들어졌을 때, 사람이라면 이를 보고 당연히 잘못된 글이라는 것을 판단할 수 있다. 하지만 데이터셋을 활용하여 supervised learning으로 학습된 생성 모델은 이를 스스로 판단할 수 없다는 한계점을 가진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; data-alt=&quot;Supervised learning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRPH8O%2FbtsLEZmXg72%2FbRRCwpBWw4koHxKNI6eIs0%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;333&quot; height=&quot;152&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Supervised learning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그렇다면 사람은 이러한 것이 잘못되었다 혹은 다른 것이 더 좋다, 신뢰할 수 있다고 판단할 수 있는 능력을 갖추었으니, 이러한 사람의 생각을 모델이 따르도록 학습하면 저런 말도 안 되는 글이 생성되는 것을 막을 수 있지 않을까? 이러한 아이디어에서 출발한 연구가 바로 RLHF이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Method&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGRUmz/btsLFfC5daP/UMKpIinG9or1Gh4TLlDvO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGRUmz/btsLFfC5daP/UMKpIinG9or1Gh4TLlDvO0/img.png&quot; data-alt=&quot;RLHF의 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGRUmz/btsLFfC5daP/UMKpIinG9or1Gh4TLlDvO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGRUmz%2FbtsLFfC5daP%2FUMKpIinG9or1Gh4TLlDvO0%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;487&quot; height=&quot;322&quot; data-origin-width=&quot;1382&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RLHF의 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;RLHF는 1) supervised fine-tuning (SFT), 2) reward model training, 3) RL with trained reward model의 세 단계로 이루어진다. 한 줄로 요약하면, 1) 우선 어떤 query가 주어졌을 때 그럴듯한 대답을 생성하는 모델을 학습하고 (SFT), 2) 이를 사람의 피드백을 반영할 수 있도록 fine-tuning하여 이를 기반으로 reward를 모델링하고, 3) 마지막으로 이 학습된 reward를 maximize하는 방향으로 RL을 진행하는 것이다. 이러한 과정을 통해 모델은 사람의 선호를 따르도록 학습된다. 그럼 이제부터 각 단계들에 대해 구체적으로 살펴보겠다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Supervised fine-tuning (SFT)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Supervised fine-tuning은 &lt;b&gt;데이터셋들을 기반으로 어떤 query q가 주어졌을 때 이에 따라 원하는 대답 $x_0$을 생성할 수 있도록 모델 $p_\theta$을 학습&lt;/b&gt;하는 과정이다. 우리는 여기에서 학습되는 모델 $p_\theta$를 policy라고 부르겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; data-alt=&quot;Supervised fine-tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RPH8O/btsLEZmXg72/bRRCwpBWw4koHxKNI6eIs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRPH8O%2FbtsLEZmXg72%2FbRRCwpBWw4koHxKNI6eIs0%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;333&quot; height=&quot;152&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Supervised fine-tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, generative model로는 어떤 모델이든 활용될 수 있지만 RLHF 논문에서는 pre-trained language model (GPT-3)을 활용하였다. 하지만 이러한 SFT의 문제점은 앞서 설명했듯이 사람의 선호를 반영하지 못하고 데이터셋만을 충실하게 학습할 수밖에 없다는 점이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reward model training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;SFT의 이러한 문제를 해결하기 위해 reward model training 단계에서 &lt;b&gt;사람의 선호를 반영할 수 있는 학습&lt;/b&gt;을 진행한다. 만약 사람이 세종대왕 맥북 던짐 사건에 대해 GPT가 설명한 글을 보고, 별로라고 피드백을 준다고 하자. 그러면 이 피드백에 따라 모델은 세종대왕 맥북 던짐 사건에 대해 그렇게 대답하는 것에 대한 reward를 줄이는 방향으로 policy를 학습하는 것이다. 즉, reward를 maximize할 수 있는 방향으로 policy를 학습하게 된다. 이를 식으로 나타내면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJihGW/btsLDL4i381/C7CNEYwKparhpX9SMStOv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJihGW/btsLDL4i381/C7CNEYwKparhpX9SMStOv0/img.png&quot; data-alt=&quot;Policy의 reward maximization 학습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJihGW/btsLDL4i381/C7CNEYwKparhpX9SMStOv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJihGW%2FbtsLDL4i381%2FC7CNEYwKparhpX9SMStOv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;53&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Policy의 reward maximization 학습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 사람의 피드백을 어떻게 reward에 적절하게 반영할 수 있을까? 만약 사람이 주어진 글들에 대해 100점, 70점 이렇게 숫자로 점수를 매긴다고 하자. 그러면 이를 기억하기도 어렵고, 적절하게 점수를 매기기가 쉽지 않을 것이다. 그러므로 점수를 absolute하게 매기는 것이 아니라, 두 개의 선택지가 주어졌을 때 어떤 것이 더 나은지를 판단함으로써 reward를 학습한다. 다음으로, 모든 주어진 글들을 사람이 다 평가하는 것은 비용 측면에서 비효율적이다. 이를 해결하기 위해 모든 것을 사람이 비교하는 것이 아니라, 일부는 사람이 판단해놓고 이 선호 데이터를 기반으로 학습한 proxy 모델을 활용한다. 우리의 proxy 모델을 $p_\delta$, 선호 데이터셋(preference dataset)을 D라고 할 때, proxy 모델의 다음과 같은 식을 따른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Fsbn/btsLFCY8J0t/dLanK9OKoK3T41KoxE3Ddk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Fsbn/btsLFCY8J0t/dLanK9OKoK3T41KoxE3Ddk/img.png&quot; data-alt=&quot;Proxy 모델의 학습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Fsbn/btsLFCY8J0t/dLanK9OKoK3T41KoxE3Ddk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Fsbn%2FbtsLFCY8J0t%2FdLanK9OKoK3T41KoxE3Ddk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;61&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxy 모델의 학습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 proxy 모델의 선호를 reward의 차이로 표현하면 다음과 같이 표현할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTrTi/btsLC0nBjZS/3EUJ3Y3byxCdOcyQkpkKZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTrTi/btsLC0nBjZS/3EUJ3Y3byxCdOcyQkpkKZK/img.png&quot; data-alt=&quot;Proxy 모델의 선호를 reward의 차이로 표현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTrTi/btsLC0nBjZS/3EUJ3Y3byxCdOcyQkpkKZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTrTi%2FbtsLC0nBjZS%2F3EUJ3Y3byxCdOcyQkpkKZK%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;38&quot; data-origin-width=&quot;1130&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxy 모델의 선호를 reward의 차이로 표현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 우리의 최종 reward 모델의 학습은 다음 식을 따라서 이루어질 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b08XHr/btsLDvN9Wpf/htZ7z4qAT0dELdu140RkyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b08XHr/btsLDvN9Wpf/htZ7z4qAT0dELdu140RkyK/img.png&quot; data-alt=&quot;Reward 모델의 학습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b08XHr/btsLDvN9Wpf/htZ7z4qAT0dELdu140RkyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb08XHr%2FbtsLDvN9Wpf%2FhtZ7z4qAT0dELdu140RkyK%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;632&quot; height=&quot;47&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Reward 모델의 학습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;RL with trained reward model&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;마지막으로, 이렇게 학습된 &lt;b&gt;reward 모델을 활용해서 강화학습을 통해 policy를 학습&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;810&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9rWE1/btsLEpsSxCB/YOMGyjkm3DOePEScDxMjXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9rWE1/btsLEpsSxCB/YOMGyjkm3DOePEScDxMjXk/img.png&quot; data-alt=&quot;학습된 reward 모델을 활용한 policy 학습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9rWE1/btsLEpsSxCB/YOMGyjkm3DOePEScDxMjXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9rWE1%2FbtsLEpsSxCB%2FYOMGyjkm3DOePEScDxMjXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;405&quot; height=&quot;51&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;학습된 reward 모델을 활용한 policy 학습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;하지만 이렇게 reward만을 최대화하는 방향으로 모델을 학습하면 local maxima에 빠질 수 있다는 문제가 있다. 이를 해결하기 위해 KL penalty를 적용한 PPO를 활용하여, 이를 최대한 방지해준다. 따라서 우리의 RLHF의 최종적인 학습 objective는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/np2N4/btsLDcnLkZW/82h8aKuna4ltFfVEcJ7OB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/np2N4/btsLDcnLkZW/82h8aKuna4ltFfVEcJ7OB0/img.png&quot; data-alt=&quot;RLHF의 최종 학습 objective&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/np2N4/btsLDcnLkZW/82h8aKuna4ltFfVEcJ7OB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnp2N4%2FbtsLDcnLkZW%2F82h8aKuna4ltFfVEcJ7OB0%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;1846&quot; height=&quot;102&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RLHF의 최종 학습 objective&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 학습 objective를 좀 더 구체적으로 설명하면, 첫 번째 term은 위에서 설명했던 reward를 최대화하는 역할을 하고, 두 번째 term은 soft-RL에서의 entropy의 역할을 하여 exploration을 돕고, 마지막 세 번째 term은 SFT 모델(이후 단계에서는 변하지 않은, 최초의 SFT 모델)을 따르는 데이터가 만들어질 수 있도록 하여 완전히 말도 안 되는 데이터가 생성되는 것을 방지한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Experiments&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&amp;nbsp;&lt;/b&gt;이러한 RLHF는 LLM의 성능 향상에 큰 기여를 했다. 아래 그림에서 노란색과 빨간색이 RLHF를 적용한 것, 초록색이 SFT만 한 것, 그리고 파란색은 그냥 GPT인데 RLHF가 SFT보다 훨씬 성능이 높은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q0UWX/btsLFAfYiu5/xLpuuvoKyy7UpYORevOahk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q0UWX/btsLFAfYiu5/xLpuuvoKyy7UpYORevOahk/img.png&quot; data-alt=&quot;RLHF의 우수한 성능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q0UWX/btsLFAfYiu5/xLpuuvoKyy7UpYORevOahk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq0UWX%2FbtsLFAfYiu5%2FxLpuuvoKyy7UpYORevOahk%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;352&quot; height=&quot;252&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RLHF의 우수한 성능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RLHF는 원래 제시되었던 LLM의 성능을 향상시키는 것 외에도 이미지 생성 등 다양한 분야에서도 성능 향상을 보였다고 한다.&amp;nbsp;이번 글에서는 RLHF가 무엇인지에 대해 알아보았다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/Deep Learning</category>
      <category>LLM</category>
      <category>RL</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/220</guid>
      <comments>https://process-mining.tistory.com/220#entry220comment</comments>
      <pubDate>Sun, 5 Jan 2025 23:11:10 +0900</pubDate>
    </item>
    <item>
      <title>2024년 돌아보기</title>
      <link>https://process-mining.tistory.com/219</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이제 좀 안정적으로 대학원 다니나 했는데 또 신변에 변화가 생겨버린 2024년 돌아보기~&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;학업과 연구&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;올해는 인공지능대학원에서의 두 번째 해였다. 작년에 쓴 글을 보니 첫 온전한 한 해를 대학원에서 보낸 사람답게 학회도 처음 가 보고, 논문도 처음 써 보고, 이런 글들이 있어서 너무 옛날 같고 감회가 새롭다. 우선 목표 달성치로 보면 1저자 2개 accept 2저자 하나 accept 새로운 거 아무 저자로 2개 submit이라는 아주 당찬 포부를 가지고 있었는데, 다행히도 다 성공했다. 근데 지금 돌이켜보니 목표에 포함되어 있지 않기는 했지만, 1저자 2개는 submit하고 싶었는데 못 해서 좀 아쉽다. 학회도 비엔나 ICLR이랑 밴쿠버 NeurIPS 두 번 다녀 왔고, 비엔나에서 약간의 깨달음을 얻고 밴쿠버를 가서 엄청 가시적인 성과는 없지만 내가 느끼기에 알차게 다녀왔다. 그리고 올해는 뭔가 운이 좀 좋아서, 대통령과학장학금+삼성휴먼테크+QIFK 삼단 콤보도 달성하고, 학회 travel grant도 받고 여러 모로 나쁘지 않았던 한 해였다. 앞으로는 이런 해가 있기 쉽지 않을 것 같은데, 절대적인 지표는 절대 아니지만 그나마 가시적인 성과 상으로는 괜찮았다고 평가할 수 있을 것 같다. 근데 상이고 장학금이고 뭐고 연구 좀 더 잘해야 할 듯.. 요즘은 연구도 타고 나는 부분이 상당하다고 느껴지는데 쉽지 않다. 성실로 채울 수 없는 간극.. 사실 그렇게 대단히 성실하지도 않음&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배운 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;배운 것 이거 언제까지 유지할 지 모르겠지만 ㅋㅋ 1년 뒤에 보는 맛이 있으므로.. (라고 2022년에도 써 놓은 것 보고 조금 놀람 ㅋㅋㅋ) 이게 몇 문단으로 딱 엮기에는 올해는 전반적으로 공부한 것이 너무 퍼져있었다. 사실 퍼져 있는건 핑계고 공부를 많이 안 한 것 같기도 하다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;올해는 연구실 내적으로나 외적으로나 사회생활을 열심히 하려고 노력했다. 연구실 내에서도 좀 다양하게 많은 것들에 참여하려고 노력했고, 학회든 다른 상 받는 자리든 가서 좀 본인마케팅을 해보려고 노력했던 것 같다. 밖에서 블로그 보신다는 분들을 꽤 많이 만났는데, 좀 열심히 써야겠다고 매년 다짐한다.. 이제 &quot;열심히 써야겠다&quot; 라고 안 쓰고 &quot;열심히 써야겠다고 매년 다짐한다&quot;고 씀.. 왜냐면 찔려서.. 회사들 면접도 나름 꽤 봤었는데, 잘 되지는 않았지만.. 좀 깨닫는 바가 있었다. 논문 더 쓰고 다시 도전.. 링크드인과 X도 시작..은 했는데 원래 SNS 열심히 하는 체질이 아니라 꾸준하게는 못하겠다 그냥 광고판 정도로 쓰는 걸로. 그리고 세상이 좁다는 걸 더더욱 느끼는데, 좀 더 친절한 사람이 되어야겠다는 생각이 들었던 한 해였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;작년에는 그래프 쪽으로 좀 공부를 했다면 올해는 좀 더 science와 LLM 쪽으로 초점을 맞추어서 공부를 (조금) 진행했다. 2저자 들어간 논문들이 평소 관심사와 굉장히 달랐지만 그 덕에 다른 분야들 맛보기도 하고, 아주 대충은 파악이 돼서 좋은 경험이었다. Science+LLM 논문 리뷰를 받아 보니 가시밭길 같고, 분야도 살~짝 애매한 것 같기도 하고, 지금 하고 있는 실험 결과도 쉽지 않은데.. 또 언제 도망갈지 알 수 없다 ㅎㅎ&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일상과 취미&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;올해 나름 나쁘지 않았었는데 캐나다 15일 크리 맞고 약간 모든 게 무너졌다. 다행인건 새 마음을 먹을 연말이 얼마 안 남은 채로 무너졌다는거..? ㅋㅋㅋㅋ 오 근데 작년이랑 비교해보니 전반적으로 향상했다. 그럼 된겨~ 올해 한 줄 요약은 이것저것 새로운 것 많이 해 본 재밌었던 해로 하겠다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_0476.jpg&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;1841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BZSr0/btsLBqZhafS/ORIKTcthBmHpJDqoC9szc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BZSr0/btsLBqZhafS/ORIKTcthBmHpJDqoC9szc0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BZSr0/btsLBqZhafS/ORIKTcthBmHpJDqoC9szc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBZSr0%2FbtsLBqZhafS%2FORIKTcthBmHpJDqoC9szc0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;632&quot; data-filename=&quot;IMG_0476.jpg&quot; data-origin-width=&quot;1125&quot; data-origin-height=&quot;1841&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 해오던 독서와 요리와 술과 운동과 여행과 독일어, 그리고 올해는 +밴드 +낚시 라는 키워드가 추가됐고, 운동도 필라테스랑 배드민턴 레슨, 그리고 클라이밍(모레 갈거임)을 추가했다. 우선 새 키워드들부터 좀 살펴보면, 자랑스러운 ㅋㅋ 체크셔츠 밴드는 캐나다에서 돌아오자마자 대상포진+약간의 삑사리와 함께 연구실 구성원들 앞에서 작은 콘서트를 잘 마무리했다. &amp;nbsp;3년 뒤 모두가 서울로 오면 재결합하는걸로.. 앗 체크셔츠 재결합 장기하와얼굴들 재결합보다 빠르다&lt;/p&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;1081&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB2LRg/btsLBZfTbi4/C2eQdnTQNS4VjYuhar1IM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB2LRg/btsLBZfTbi4/C2eQdnTQNS4VjYuhar1IM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB2LRg/btsLBZfTbi4/C2eQdnTQNS4VjYuhar1IM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB2LRg%2FbtsLBZfTbi4%2FC2eQdnTQNS4VjYuhar1IM0%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;442&quot; height=&quot;332&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1081&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;낚시는 많이 가 보지는 않았고, 다른 도시에서 포항으로 낚시하러 오던데 포항 살면서 한 번을 안 가? 에서 시작되어서 두 번 가 봤다. 참가자미랑 삼치/방어(가서 복어만 10마리 잡음) 요렇게 갔었는데, 나름의 재미가 있어서 내년에 포항 무늬오징어 원정 올 예정. 근데 최근에 대방어 36,000 갓성비 왕맛집 가서 사먹고 약간 현타오긴함. 배를 사던가 해야지..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;1400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccicDF/btsLz6t09wr/bRBVvJW8UTqEoAiX8Gm0n0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccicDF/btsLz6t09wr/bRBVvJW8UTqEoAiX8Gm0n0/img.png&quot; data-alt=&quot;쫄.. 물고기 무서움&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccicDF/btsLz6t09wr/bRBVvJW8UTqEoAiX8Gm0n0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccicDF%2FbtsLz6t09wr%2FbRBVvJW8UTqEoAiX8Gm0n0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;266&quot; height=&quot;355&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;1400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쫄.. 물고기 무서움&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;필라테스는 올해 하반기부터 시작해서 아직까지는 나름 꾸준히 가고 있다. 하기 전에는 솔직히 이게 운동이 돼? 하는 생각을 가지고 있었는데 항상 다녀오면 이틀씩 몸이 쑤신다. 근데 필라테스 다니니까 유산소를 너무 안 하게 되는 것 같아서 좀 고민.. 헬스는 유산소 기계가 있으니까 찔려서 하게 되는데 필라테스는 그게 안 된다. 날 풀리면 등산을 좀 빡세게 다니던가 아님 다시 헬스로 돌아갈지도.. 미뤄 왔던 배드민턴 레슨도 드디어 처음 받아봤다. 나름의 재미가 있긴 했는데 예상했지만 배드민턴계는 동호회+기존 멤버 텃세가 좀 심해서.. 다시 받을 것 같지는 않다. 클라이밍은 내일 가 보고 인상 깊으면 다시 후기 남기는걸로. 고소공포증 엄청 심한데 과연 올라갈 수 있을지부터 떨어지는 것도 못 할 것 같아서 좀 걱정이다. 아 그리고 놀랍게도 요즘은 옷에 좀 관심이 생겨서 아주 조금씩 야금야금 사 모으는 중이다. 무려 귀를 뚫음.. 이 대부분의 새로운 취미에 연구실 내 사회생활(?)이 많은 기여를 했는데 함께 해준 연구실 구성원들에게 감사하다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 해 오던 친구들로 가 보면, 올해는 드디어 20권 돌파! 해서 책 21권 읽었고 인상 깊었던 책은 [파친코]였다. 최근 읽은 한국 소설 중에 가장 흡입력 있어서 진짜 순삭했다. 요리는 항상 그렇듯이 목표를 초과달성하는데. 올해는 한식과 중식을 좀 더 해보고 싶어서 그 쪽을 많이 해보려고 노력했고, 갈비찜에 재능을 찾은 것 같다. 하지만~ 가장 기억에 남는 요리는 갈비라구이다. 어쩔 수 없는 서양요리맨.. 내년은 좀 더 fine한 플레이팅도 연구해보고, 이걸 위해서 학원도 다닐까 고민도 하고 있다. 집을 3차 장소가 아니라 음식 사진찍고 싶은 1차 장소로 만드는 게 목표랄까.. 독일어는 작년의 내가 독일어권 학회 가서 독일어로 소통하기라는 목표를 가지고 있었는데, 비엔나 가서 나름 나쁘지 않게 주문+관광은 할 수 있었던 것 같다. 하지만 더더 수련이 필요하다. 영어는 외국 나갈 때마다 아 더 잘 해야 하는데 하고 한국 오면 또 안 해버리는 간사한 나. 한 달에 세 번 실화냐.. 내년은 최소 주 2회 간다..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;여행은 올해는 학회 포함해서 세 곳, 북해도, 비엔나, 몬트리올-토론토-밴쿠버 이렇게 다녀왔다. 북해도 3월에 갔는데 사람 없고 눈은 쌓여 있어서 아주 좋았고, 음식이 아주아주 맛있고 술도 싸서 엄청 춥기는 했지만 좋았다. 지금 돌이켜보면 눈 하루종일 완전 맞고 먹은 시오쇼가라멘이랑 조개내장초밥, 눈 오던 요이치 증류소에서 테이스팅하던 것 이렇게 생각난다. 비엔나에서도 그린칭에서 와이너리 세 군데 돌아다니던 것, 캐나다에서도 나이아가라 보면서 호텔에서 와인 마시고 나이아가라 와이너리 세 군데 돌아다니면서 테이스팅 13잔 격파한 것 이렇게 기억난다. 뭔 주정뱅이도 아니고.. 맞나..&lt;/p&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;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIOo7y/btsLyXR18cI/mgVXJfxmKe0lXVPC7Gpa7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIOo7y/btsLyXR18cI/mgVXJfxmKe0lXVPC7Gpa7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIOo7y/btsLyXR18cI/mgVXJfxmKe0lXVPC7Gpa7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIOo7y%2FbtsLyXR18cI%2FmgVXJfxmKe0lXVPC7Gpa7K%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;354&quot; height=&quot;354&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;블로그&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 올해도 불성실했다. 사실 이거 쓰면서 작년 돌아보기 글 봤다가 11개래서 하나라도 더 쓰려고 부랴부랴 2개 써서 12개 맞췄다 ㅋㅋㅋㅋㅋ 뭔 의미가 있냐고.. 진작 그랬으면 100개 썼겄다. 그래도 올해 좀 뿌듯한 건 올해 쓴 글들이 나름 상위권에 최근 조회수 상위권에 랭크돼서, 소재를 잘 찾았나? 하는 생각이 들었다. 그리고 목표 중 하나였던 구독자 100명을 (100번째 구독자는 지인찬스를 통해 ㅋㅋㅋ thanks..) 완성했다.&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;1812&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UPJud/btsLBJkgJEL/9T4kQjoKpgmCjnjpGtKXo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UPJud/btsLBJkgJEL/9T4kQjoKpgmCjnjpGtKXo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UPJud/btsLBJkgJEL/9T4kQjoKpgmCjnjpGtKXo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUPJud%2FbtsLBJkgJEL%2F9T4kQjoKpgmCjnjpGtKXo1%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;600&quot; height=&quot;252&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해도 역시.. 우상향하지 못한 블로그.. 미안하다 블로그야 주인이 불성실하다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;올해 알차고 재밌었다! 1저자 두 개 못 내서 좀 아쉽지만 논문도 몇 개 붙고, 이것저것 장학금도 받고, 취미도 다양하게 좀 탐색해보려고 노력했다. 이것저것 열심히 해 보려고 노력했던 한 해였던 것 같다. 대학원생이 삶이 이 정도 재밌었으면 안 될 것 같기는 한데.. 좀 자제가 필요하다는 생각이 들면서도 아 누워서 유튜브 보는 것보단 낫잖아~ 하는 생각이 들기도 한다 ㅎㅎ 근데 이거 쓰다가 21년 돌아보기 봤는데 &quot;나와 대학원생의 삶을 분리해서 둘을 잘 밸런싱하는 한 해&quot;가 되었으면 좋겠다고 써 있다. 저 때 너무 고생해서 이렇게 된거군! 깨달아버림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;마지막으로, 어쩌다 보니 포항에서의 마지막 해가 되어버렸다. 집도 오래 살 생각으로 꾸미고 오만거 다 사고 하기도 했고, 이렇게 포항 생활을 끝내고 싶지는 않았는데 ㅎㅎ 새로 나온 학생증을 보니 좀 뒤숭숭하다. 그래도 학회 여러 번 가 보고 느끼는 것인데, 옮기는 장점이 분명히 있을 것 같다. &amp;nbsp;포항 10년맨으로써 인정하고 싶지 않지만 포항의 인지도.. 생각보다 쉽지 않았다.. 이제 다시 지방에서 살려면 오랜 세월이 흘러야할 것 같은데, 복잡한 서울도 또 그곳만의 재미가 있을 것 같다. 내년은 쉴 때도 되도록 누워있지 않을 수 있는 에너지를 가진 한 해, 그리고 스스로 모든 것에 성실했다고 생각할 수 있는 한 해가 되면 좋겠다.&amp;nbsp;&lt;/p&gt;</description>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/219</guid>
      <comments>https://process-mining.tistory.com/219#entry219comment</comments>
      <pubDate>Sun, 29 Dec 2024 23:44:45 +0900</pubDate>
    </item>
    <item>
      <title>Tree-of-thoughts 설명 (ToT 설명)</title>
      <link>https://process-mining.tistory.com/218</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;Tree-of-thoughts는 더 많은 exploration과 중간 reasoning 과정의 평가를 통해 더 나은 의사 결정을 가능&lt;/b&gt;하게 하는 &lt;a href=&quot;https://process-mining.tistory.com/217&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CoT&lt;/a&gt;의 발전된 버전 중 하나로, 줄여서 ToT라고도 부른다. 다양한 search나 planning 알고리즘들이 tree 형태로 의사 결정 과정을 expansion하여 이 중에 최적의 결정을 선택하고는 하는데, ToT도 이와 비슷하게 동시에 다양한 reasoning 과정들을 탐색하여 복잡한 문제를 더 정확하게 풀 수 있도록 한다. 이번 글에서는 이러한 ToT가 어떻게 작동하는지에 대해 알아보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Overview&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Tree-of-thoughts는 앞서 설명한 것처럼 tree 형태로 다양한 reasoning 브랜치들을 생성하여, 이 중에 가장 나은 선택지들만을 선택하여 확장해나가는 방식으로 reasoning을 진행한다. 아래 그림에서 살펴볼 수 있듯이 기존의 CoT가 하나의 시퀀스 형태로 reasoning을 진행해왔다면, ToT는 tree 형태로 복수의 reasoning을 진행하여 그 중 가장 나은 reasoning을 선택하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tyTfK/btsLBgikCuo/D0WcS55ntiPmsrA1YitxAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tyTfK/btsLBgikCuo/D0WcS55ntiPmsrA1YitxAk/img.png&quot; data-alt=&quot;CoT와 ToT&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tyTfK/btsLBgikCuo/D0WcS55ntiPmsrA1YitxAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtyTfK%2FbtsLBgikCuo%2FD0WcS55ntiPmsrA1YitxAk%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;339&quot; height=&quot;251&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CoT와 ToT&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ToT의 핵심 특징으로는 1) 동시에 다양한 reasoning을 진행함으로써 얻는 exploration 능력, 2) 중간 단계를 평가함으로써 얻는 높은 정확도, 그리고 3) hierarchical한 multi-level reasoning이 가능해 optimization이나 planning 문제 등을 더 잘 풀 수 있다는 점을 들 수 있다. 이러한 장점을 이해할 수 있는 예시를 하나 살펴보자. 아래 그림과 같이 네 개의 숫자를 활용해서 사칙연산으로 24를 만드는 게임을 하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; data-alt=&quot;24 게임을 푸는 ToT 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8wWkk%2FbtsLz5owX8w%2F5ZLdFEuwPqJKORQImc6koK%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;269&quot; height=&quot;287&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;24 게임을 푸는 ToT 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 우리가 기존의 CoT처럼 한 번에 하나의 reasoning 단계만을 거쳐왔다면, 맨 처음 오른쪽에 있는 4+9=13을 선택해서 절대로 답을 맞출 수 없는 상황이 될 수도 있을 것이다. 하지만 위 그림처럼 ToT를 활용하여 문제를 풀면, 동시에 생성한 reasoning step 중 정답으로 갈 수 있는 가능성이 있는 선택지가 있을 것이고, 해당 선택지에서 branching을 계속 진행하면 정답에 도달할 확률이 더 높아질 것이다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Method&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이제 이러한 ToT가 어떤 요소들로 구성되어 있는지를 알아보자. ToT는 1) thought decomposition, 2) thought generator, 3) state evaluator, 4) search algorithm으로 구성되어 있다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Thought decomposition&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;Thought decomposition은 문제를 어떤 단계로 나눌지&lt;/b&gt;를 정의하는 것이다. 위에서 살펴본 예시처럼 우리가 24 게임을 할 때, 저렇게 하나의 식으로 하나의 단계를 표현할 수도 있겠지만, 두 개의 식으로 하나의 단계를 표현할 수도 있고, 하나의 숫자 혹은 연산자로 각 단계를 표현할 수도 있을 것이다. 각 단계를 작은 단위로 쪼개게 되면 더 다양한 생성을 할 수 있다는 장점을 가질 것이고, 각 단계를 큰 단위로 쪼개게 되면 단계를 평가하기가 쉽고 더 빠르게 답에 도달할 수 있다는 장점을 가진다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Thought generator&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;Thought generator는 reasoning 단계를 어떻게 생성할 것인지&lt;/b&gt;를 결정한다. 이는 LLM을 활용해서 생성하는 것을 기본으로 하고, ToT 논문에서는 thought generator 방법을 두 개 제시한다. 첫 번째는 i.i.d sample prompt로, LLM의 input으로 propose prompt를 여러 번 넣어 thought를 생성하는 것을 말한다. 이러한 방법은 thought가 좀 더 풍부해진다는 장점을 가진다. 두 번째는, 아래 그림과 같은 sequential propose prompt이다. 즉, input을 여러 번 넣지 않고, 여러 thought를 한 번에 sequential하게 생성하는 것을 말한다.&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;1160&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Cm1O/btsLz1lXXHz/CHbJY1A3ja0PgovBKUGY11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Cm1O/btsLz1lXXHz/CHbJY1A3ja0PgovBKUGY11/img.png&quot; data-alt=&quot;Sequential propose prompt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Cm1O/btsLz1lXXHz/CHbJY1A3ja0PgovBKUGY11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Cm1O%2FbtsLz1lXXHz%2FCHbJY1A3ja0PgovBKUGY11%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;533&quot; height=&quot;90&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Sequential propose prompt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;State evaluator&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; State evaluator는 각 state가 계속 branch를 확장해도 될 만큼 좋은 state인지를 평가한다. 이 또한 LLM을 활용하는데, 이 방법에는 두 가지가 있다. 첫 번째는 각 state의 value를 LLM으로 평가하는 방법이다. 예를 들어, 아래 예시처럼 어떤 답을 만들었을 때 이 답이 확실한지(sure), 그럴듯한지(likely), 혹은 아예 불가능한 답인지(impossible)를 LLM이 평가하게 하여 sure과 likely들만 branching하는 식이다.&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;1150&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkkEKA/btsLAek385M/B4HxKVH3vPiDe8UoptQLt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkkEKA/btsLAek385M/B4HxKVH3vPiDe8UoptQLt0/img.png&quot; data-alt=&quot;Value evaluation&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkkEKA/btsLAek385M/B4HxKVH3vPiDe8UoptQLt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkkEKA%2FbtsLAek385M%2FB4HxKVH3vPiDe8UoptQLt0%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;501&quot; height=&quot;102&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Value evaluation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;두 번째는 voting이다. &amp;nbsp;현재 단계에서 만들어진 모든 state들을 input으로 넣고, LLM이 이들을 대상으로 투표하게 하여 가장 그럴듯한 것들을 branching하는 식이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Search algorithm&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Search algorithm은 여러 개의 reasoning 단계들을 어떻게 확장해나가는지의 방식을 의미한다. 이에는 BFS와 DFS가 있다. 우선, BFS의 경우 위에서 살펴봤던 예시(아래 그림)처럼 가장 가능성이 높은 state들을 각 단계마다 일정 개수만큼 남겨놓고, 이들을 확장해나가는 방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; data-alt=&quot;24 게임을 푸는 ToT의 BFS 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8wWkk/btsLz5owX8w/5ZLdFEuwPqJKORQImc6koK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8wWkk%2FbtsLz5owX8w%2F5ZLdFEuwPqJKORQImc6koK%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;198&quot; height=&quot;212&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;24 게임을 푸는 ToT의 BFS 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다음으로, DFS의 경우 아래 그림처럼 처음부터 끝까지 답을 한 번 sequential하게 만들고, 위로 한 단계 올라가서(backtracking) 다시 다른 답을 확장하고, 이를 반복하는 방식이다.&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;462&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqmY4A/btsLBhBAmDe/unMA4kNwYXG71ghLF3VbFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqmY4A/btsLBhBAmDe/unMA4kNwYXG71ghLF3VbFk/img.png&quot; data-alt=&quot;Crossword 게임을 푸는 ToT의 DFS 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqmY4A/btsLBhBAmDe/unMA4kNwYXG71ghLF3VbFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqmY4A%2FbtsLBhBAmDe%2FunMA4kNwYXG71ghLF3VbFk%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;187&quot; height=&quot;235&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Crossword 게임을 푸는 ToT의 DFS 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Experiments&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;실험 결과는, 예상할 수 있듯이 ToT 방식으로 다양한 문제들을 풀었을 때 CoT 방식보다 좋은 성능을 보였다고 한다.&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;592&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNIRGT/btsLB3o065D/QWGRaedqnD01fhH8kgZBaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNIRGT/btsLB3o065D/QWGRaedqnD01fhH8kgZBaK/img.png&quot; data-alt=&quot;ToT의 좋은 성능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNIRGT/btsLB3o065D/QWGRaedqnD01fhH8kgZBaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNIRGT%2FbtsLB3o065D%2FQWGRaedqnD01fhH8kgZBaK%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;299&quot; height=&quot;182&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ToT의 좋은 성능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;하지만 ToT를 활용할 때는 다양한 reasoning 단계들을 생성하기 때문에 당연히 더 비용이 더 많이 들고, 시간도 오래 걸린다는 단점을 가진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 글에서는 ToT가 무엇인지에 대해 알아보았다. 앞으로 다양한 LLM 관련 연구들도 차차 다루어보겠다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Yao, S., Yu, D., Zhao, J., Shafran, I., Griffiths, T., Cao, Y., &amp;amp; Narasimhan, K. Tree of thoughts: Deliberate problem solving with large language models.&lt;i&gt;&lt;span&gt; NeurIPS 2023&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/LLM</category>
      <category>LLM</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/218</guid>
      <comments>https://process-mining.tistory.com/218#entry218comment</comments>
      <pubDate>Sat, 28 Dec 2024 16:55:25 +0900</pubDate>
    </item>
    <item>
      <title>Chain-of-thoughts 설명 (CoT 설명)</title>
      <link>https://process-mining.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Chain-of-thoughts는 large language model(LLM)이 최종적인 답까지 도달하기 전에 중간 reasoning 단계들을 더해줌으로써 LLM의 reasoning 능력과 함께 정확한 답을 도출할 수 있게 하는 것을 의미하고, 줄여서 CoT라고도 한다. 비교적 최근에 나온 모델 중 하나인 GPT-o1이 이러한 CoT를 기반으로 아래 그림처럼 다양한 문제를 해결하는 성능을 굉장히 많이 끌어 올렸다고 해 화제가 되기도 하였다. 나보다 IQ 높은 듯.. 이번 글에서는 최근 LLM의 핵심적인 성능 향상 기반 중 하나인 CoT가 무엇인지에 대해 알아보겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yRtrk/btsLASaUAOW/pn6ZxQlaqmkT7hbp9wbhqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yRtrk/btsLASaUAOW/pn6ZxQlaqmkT7hbp9wbhqK/img.jpg&quot; data-alt=&quot;o1의 IQ 테스트에서의 높은 성능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yRtrk/btsLASaUAOW/pn6ZxQlaqmkT7hbp9wbhqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyRtrk%2FbtsLASaUAOW%2Fpn6ZxQlaqmkT7hbp9wbhqK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;346&quot; height=&quot;259&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;o1의 IQ 테스트에서의 높은 성능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Overview&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;CoT&lt;/b&gt;는 앞서 설명한 것처럼 &lt;b&gt;여러 단계의 중간 reasoning 단계들을 통해 답을 더 쉽게 도출할 수 있게&lt;/b&gt; 하는 프레임워크를 말한다. 답을 바로 말하는 것이 아닌, 사람이 복잡한 문제를 해결하는 방법처럼 step-by-step reasoning을 통해서 문제를 해결함으로써, 정확한 답을 도출하는 데에 도움을 준다. 뿐만 아니라, LLM이 어떻게 답을 도출하는지의 과정을 보여줌으로써 black-box였던 LLM의 답 도출 과정의 interpretability를 올리는 데에도 기여하고 있다고 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;예를 들어, 우리가 12+13+17=?라는 문제를 풀고 있다고 하자. 물론 이러한 간단한 문제는 우리가 바로 암산을 할 수도 있겠지만, &quot;12+13=25이고, 25+17=42이니까 최종 정답은 42이다.&quot;라는 중간 reasoning 단계들을 거치면 훨씬 더 복잡한 문제들을 더 정확하게 해결할 수 있을 것이다. 이러한 단계들을 넣어주거나, LLM이 만들 수 있도록 유도하는 것이 CoT의 생성 과정이라고 할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Few-shot CoT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;가장 먼저 제시된 CoT의 개념은 few-shot CoT이다. Few-shot CoT는 여러 개의 비슷한 문제를 해결하는 예시 CoT들을 LLM에 입력해서, 이를 기반으로 LLM이 비슷한 reasoning 단계를 따라갈 수 있도록 유도하는 것이다. 아래 그림을 살펴보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgWsfh/btsLz26pLlN/EOIpoJnwfkjK2LLTKNv3Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgWsfh/btsLz26pLlN/EOIpoJnwfkjK2LLTKNv3Q1/img.png&quot; data-alt=&quot;Few-shot CoT prompting의 예시. 색칠된 부분이 reasoning step.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgWsfh/btsLz26pLlN/EOIpoJnwfkjK2LLTKNv3Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgWsfh%2FbtsLz26pLlN%2FEOIpoJnwfkjK2LLTKNv3Q1%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;482&quot; height=&quot;238&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Few-shot CoT prompting의 예시. 색칠된 부분이 reasoning step.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;우선, 위 그림은 풀려고 하는 문제와 비슷한 문제들의 예시와 함께 현재 해결하려고 하는 문제를 model input에 넣고, LLM이 해당 문제의 정답을 output으로 도출하는 상황이다. 기존의 few-shot standard prompting 방법(그림에서 왼쪽)을 보면, 답을 만들어야 하는 A (answer): 부분에 직접적인 답만 제시했기 때문에, LLM이 이러한 문제를 푸는 데에 어려움을 &amp;nbsp;겪고 있는 것을 알 수 있다. 이에 반해 few-shot chain-of-thought prompting 방법(그림에서 오른쪽)은 비슷한 문제들의 예시를 넣을 때, 답만 제시하는 것이 아닌 이를 해결하는 데에 필요한 reasoning 단계들까지 함께 넣어주어 LLM이 이를 따라할 수 있게 유도한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1358&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUoKru/btsLBkELNSA/urxscFUrn4ZGWxGOE2y9j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUoKru/btsLBkELNSA/urxscFUrn4ZGWxGOE2y9j1/img.png&quot; data-alt=&quot;CoT로 오른 성능. 파란 색이 CoT이고 위로 갈수록 높은 성능.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUoKru/btsLBkELNSA/urxscFUrn4ZGWxGOE2y9j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUoKru%2FbtsLBkELNSA%2FurxscFUrn4ZGWxGOE2y9j1%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;500&quot; height=&quot;146&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CoT로 오른 성능. 파란 색이 CoT이고 위로 갈수록 높은 성능.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;하지만 이러한 방법에는 비슷한 예시 CoT를 하나씩 manual하게 입력해주어야 한다는 한계점이 있다. 그래서 우리가 풀고자 하는 문제와 비슷한 문제가 존재하지 않거나, 새로운 도메인에 이를 적용해야 한다면 적용이 힘들다는 문제가 생기는 것이다. 이러한 문제를 해결하기 위해서 zero-shot CoT가 등장하였다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Zero-shot CoT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Zero-shot CoT는 정말 간단하게 prompt에 &quot;Let's think step by step.&quot;이라는 문장을 넣어준다. 즉, LLM이 예시 없이 스스로 step-by-step으로 생각할 수 있도록 &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;1696&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qG9Lp/btsLBYOMAkC/ywtdRwndnAsFV4yX4FxmEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qG9Lp/btsLBYOMAkC/ywtdRwndnAsFV4yX4FxmEK/img.png&quot; data-alt=&quot;Few-shot CoT와 zero-shot CoT의 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qG9Lp/btsLBYOMAkC/ywtdRwndnAsFV4yX4FxmEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqG9Lp%2FbtsLBYOMAkC%2FywtdRwndnAsFV4yX4FxmEK%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;538&quot; height=&quot;278&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Few-shot CoT와 zero-shot CoT의 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위 그림을 보면, few-shot CoT는 예시에 reasoning 단계들을 manual하게 넣어주어야 했지만, zero-shot CoT는 그냥 단계별로 생각해보라는 prompt를 넣음으로써 reasoning이 자동으로 되도록 유도하는 것을 확인할 수 있다. 구체적으로는, 다음과 같은 two-stage 방법을 통해 최종 정답을 도출한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1706&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qzK0v/btsLz4iQikb/kLozShNL6l9uEpRqOleFpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qzK0v/btsLz4iQikb/kLozShNL6l9uEpRqOleFpK/img.png&quot; data-alt=&quot;Zero-shot CoT의 two-stage prompting&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qzK0v/btsLz4iQikb/kLozShNL6l9uEpRqOleFpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqzK0v%2FbtsLz4iQikb%2FkLozShNL6l9uEpRqOleFpK%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;563&quot; height=&quot;214&quot; data-origin-width=&quot;1706&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zero-shot CoT의 two-stage prompting&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 1) question과 &quot;Let's think step by step.&quot;을 LLM의 input으로 넣어 reasoning을 생성하고, 2) 이 reasoning을 이전의 input에 붙여서 LLM에 넣어 최종 정답을 도출한다. 이러한 간단한 방법으로도 아래 표처럼 few-shot CoT에 비해 성능을 향상시켰다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lB6xR/btsLyTIA0aA/RbARuQJcKOOaVo1inAR6s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lB6xR/btsLyTIA0aA/RbARuQJcKOOaVo1inAR6s1/img.png&quot; data-alt=&quot;Zero-shot CoT의 향상된 성능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lB6xR/btsLyTIA0aA/RbARuQJcKOOaVo1inAR6s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlB6xR%2FbtsLyTIA0aA%2FRbARuQJcKOOaVo1inAR6s1%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;463&quot; height=&quot;155&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Zero-shot CoT의 향상된 성능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 글에서는 CoT가 무엇인지에 대해 가장 기본적인 두 논문의 설명을 통해 알아보았다. 이후 다양한 CoT를 향상시키는 방법들 뿐만 아니라, 최근 o1의 성능을 향상시키는 데에 결정적인 역할을 한 tree-of-thought까지 등장하였는데, 이들에 대해 다음 글들에서 다루어보겠다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;References&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Wei, J., et al. (2022). Chain-of-thought prompting elicits reasoning in large language models.&amp;nbsp;&lt;i&gt;NeurIPS 2022.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;2. &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Kojima, T., et al. (2022). Large language models are zero-shot reasoners.&lt;i&gt;&lt;span&gt; NeurIPS 2022&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Machine Learning - Thoery/LLM</category>
      <category>LLM</category>
      <author>yunhuijang</author>
      <guid isPermaLink="true">https://process-mining.tistory.com/217</guid>
      <comments>https://process-mining.tistory.com/217#entry217comment</comments>
      <pubDate>Sat, 28 Dec 2024 14:40:06 +0900</pubDate>
    </item>
  </channel>
</rss>