<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>팔딱팔딱 자연어</title>
    <link>https://4n3mone.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 11:29:25 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>4n3mone</managingEditor>
    <image>
      <title>팔딱팔딱 자연어</title>
      <url>https://tistory1.daumcdn.net/tistory/5907142/attach/d00c0b26381f4c7eab9e6499166811b5</url>
      <link>https://4n3mone.tistory.com</link>
    </image>
    <item>
      <title>진짜로 '잘' 아세요? Attention &amp;amp; Self Attention (feat. 혁펜하임의 &amp;lt;Easy! 딥러닝&amp;gt;)</title>
      <link>https://4n3mone.tistory.com/18</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;들어가며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 과 에이전트의 시대로 접어든 지금일수록( &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;DeepSeek로 인해 다시금 점화되었죠.&lt;/span&gt;), 이론에 대한 원리를 더 확실히 알고 있는 것이 중요하다고 생각합니다. 단순히 AI 툴을 사용하는 '소비자' 가 아니라 AI 개발을 하고, 제품과 서비스를 만드는 '생산자'의 입장에 계신 분들이라고 한다면 더더욱 그렇습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 좋은 기회로 혁펜하임님이 출판하신 딥러닝 책 &amp;lt;Easy! 딥러닝&amp;gt; 을 제공받아 리뷰를 할 수 있게 되었습니다. 본 리뷰에서는 크게 두 가지 관점에서 이 책을 추천드리는 이유를 말씀드리겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추천드리는 이유 1. AI를 쉽게 설명할 필요가 있을 때&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 관련해서 일을 하다 보면, 관련 직종이 아닌 사람들로부터 흔히 이런 질문을 받곤 합니다. '인공지능(딥러닝)이 뭐야?', '그게 그렇게 대단한 거야?', '무슨 원리로 돌아가는 거야?'&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 질문들에 대답하기 위해서 '경사하강법' 혹은 '역전파' 등이 무엇인기 에 대해서 설명할 수는 없는 노릇입니다. 회사 생활을 하면서도 마찬가지 입니다. 특히 대기업 쪽에서 일을 할수록, 본인이 개발한 제품 혹은 코드, 기술에 대해서 잘 모르는 사람에게 알기 쉽게 설명을 해야 할 일이 많이 생깁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20250301_173148944.jpg&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Beh3H/btsMAW3EaU7/xkiK7LPJHF4ppLqeZ5nUU1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Beh3H/btsMAW3EaU7/xkiK7LPJHF4ppLqeZ5nUU1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Beh3H/btsMAW3EaU7/xkiK7LPJHF4ppLqeZ5nUU1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBeh3H%2FbtsMAW3EaU7%2FxkiK7LPJHF4ppLqeZ5nUU1%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;1358&quot; height=&quot;712&quot; data-filename=&quot;KakaoTalk_20250301_173148944.jpg&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 경우 이 책에 나와 있는 친절한 설명들을 읽어 보는 것이 매우 도움이 많이 됩니다. 인공지능/머신러닝/딥러닝에 대한 쉽게 이해할 수 있는 설명부터, 옵티마이저 / MLP / CNN 등과 같은 약간 더 깊은 이해가 필요한 개념들에 대해서도 책을 읽으면서 따라오기만 했다면 충분히 이해할 수 있을 만큼 친절하고 쉬운 설명이 들어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 자연어처리 리서치 엔지니어로써 직장생활을 하면서 외부인이나 회사 임원분에게 새로 나온 개념 (RAG, Agent 등..)에 대해서 알기 쉽게 설명을 해야 할 일이 종종 생기는데, 이 책에 그런 개념이 직접 나와 있지는 않지만 설명을 어떤 식으로 해야 하는 지에 대한 영감을 얻을 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론, 당연하게도 딥러닝이라는 분야에 관해서 접해본 적이 없는 분들이 이 책을 읽어도 너무 도움이 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;추천드리는 이유 2.&lt;span&gt; '진짜로' 잘 알고 있는지 확인하고 싶을 때&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;AI 개발자로써 서비스, 제품 개발을 열심히 하다 보면 가장 많이 사용하는 것은 이런 것들입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740818525918&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from openai import OpenAI&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혹은 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740818597234&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from transformers import AutoModelForCausalLM, AutoTokenizer&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간편하게 추상화해놓은 이런 코드들을 사용하다가 보면 어느샌가 현타(?) 에 빠지기 마련입니다. 딥 러닝, 인공지능을 처음 배울 때에는 모델 레이어를 직접 쌓고 데이터셋을 구성해서 학습도 시켰는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 사용하는 코드가 무엇인지도 모른 체로 그냥 코드 자동완성 AI가 시키는 대로 Tab, Enter 키만 생각 없이 누르면서 코딩(코딩이라고 부를 수 있을까요?)을 하는 일도 비일비재 합니다.&lt;/p&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;이런 문명의 이기의 유혹에 무저항으로 당해버린 저와 같은 AI 개발자 들에게도 예전에 배웠던 AI 지식들을 다시 확인해야 할 때가 때때로 찾아옵니다. 이직 인터뷰를 준비할 때, 새로 나왔다는 핫한 논문을 읽을 때 등...&lt;/p&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;&amp;lt;Easy! 딥러닝&amp;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-filename=&quot;KakaoTalk_20250301_173133923_02.jpg&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CnOwN/btsMykk0aXb/TaxtV1sofGuoQd8ymmz01K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CnOwN/btsMykk0aXb/TaxtV1sofGuoQd8ymmz01K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CnOwN/btsMykk0aXb/TaxtV1sofGuoQd8ymmz01K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCnOwN%2FbtsMykk0aXb%2FTaxtV1sofGuoQd8ymmz01K%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;1500&quot; height=&quot;964&quot; data-filename=&quot;KakaoTalk_20250301_173133923_02.jpg&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;964&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;easy! 딥러닝&amp;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;저 또한 개발자로 일하면서 가끔씩 '이거 뭐였더라?' 하는 순간이 찾아오기 마련인데, 책장 속에 이 책을 꽂아 두었다가 해당 부분을 꺼내서 보게 될 같습니다. 특히 챕터 8인 '왜 RNN보다 트랜스포머가 더 좋다는 걸까?' 챕터 부분은 책을 읽다가 개인적으로 너무 감명깊은 설명이라 바로 책의 앞 부분으로 가서 한 번 더 읽을 정도였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;마치며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능 기술의 발전은 이미 거품이 아닌 현실이 되었고, 현실 세계에 가치를 가져다 주고 있는 해자가 되고 있습니다. 인공지능 분야에서 이미 종사하고 있는 사람, 그리고 인공지능에 처음 관심을 가지기 시작한 사람 모두에게 이 책을 추천합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;본 게시글은 혁펜하임의 &amp;lt;Easy! 딥러닝&amp;gt; 책의 리뷰어 활동으로 작성되었습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;도서 구매 링크 1 (교보문고):&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://product.kyobobook.co.&quot;&gt;https://product.kyobobook.co.&lt;/a&gt;&lt;a style=&quot;background-color: #ffffff; color: #1155cc; text-align: start;&quot; href=&quot;https://product.kyobobook.co.kr/detail/S000214848175&quot; data-saferedirecturl=&quot;https://www.google.com/url?q=https://product.kyobobook.co.kr/detail/S000214848175&amp;amp;source=gmail&amp;amp;ust=1740898677842000&amp;amp;usg=AOvVaw3IIzN0b56AzSYZMEI31JJu&quot;&gt;kr/detail/S000214848175&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;도서 구매 링크 2 (출판사 자사몰):&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://shorturl.at/&quot;&gt;https://shorturl.at/&lt;/a&gt;&lt;a style=&quot;background-color: #ffffff; color: #1155cc; text-align: start;&quot; href=&quot;https://shorturl.at/yqZpW&quot; data-saferedirecturl=&quot;https://www.google.com/url?q=https://shorturl.at/yqZpW&amp;amp;source=gmail&amp;amp;ust=1740898677842000&amp;amp;usg=AOvVaw2oiLkVcgeewOmUsuLCdt2R&quot;&gt;yqZpW&lt;/a&gt;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>딥러닝</category>
      <category>딥러닝책추천</category>
      <category>딥시크</category>
      <category>에이전트</category>
      <category>인공지능</category>
      <category>자연어처리</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/18</guid>
      <comments>https://4n3mone.tistory.com/18#entry18comment</comments>
      <pubDate>Sat, 1 Mar 2025 18:10:36 +0900</pubDate>
    </item>
    <item>
      <title>[NLP] solar-pro-preview살펴보기</title>
      <link>https://4n3mone.tistory.com/17</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wnV9o/btsJHAQTBwy/adDKzZWMSQ0hJJxzVO1nYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wnV9o/btsJHAQTBwy/adDKzZWMSQ0hJJxzVO1nYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wnV9o/btsJHAQTBwy/adDKzZWMSQ0hJJxzVO1nYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwnV9o%2FbtsJHAQTBwy%2FadDKzZWMSQ0hJJxzVO1nYk%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;431&quot; height=&quot;412&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 9월 11일 업스테이지에서 solar-pro-preview, solar-pro-preview-instruct 가 오픈소스 모델로 출시되었습니다. 업스테이지에서 처음으로 공개했던 모델 SOLAR 10.7B보다 2배 이상 큰 파라미터 수를 가지고 있으며, 단일 GPU에서 효율적으로 실행할 수 있다고 합니다. 본 포스트에서는 solar-pro-preview 모델의 특징에 대해 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Spec&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;solar-pro-preview 모델의 간략한 스펙은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 34.7675%; height: 56px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.805%; height: 17px;&quot;&gt;# params&lt;/td&gt;
&lt;td style=&quot;width: 8.62026%; height: 17px;&quot;&gt;22.1B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.805%; height: 17px;&quot;&gt;context window&lt;/td&gt;
&lt;td style=&quot;width: 8.62026%; height: 17px;&quot;&gt;4k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 16.805%; height: 22px;&quot;&gt;지원 언어&lt;/td&gt;
&lt;td style=&quot;width: 8.62026%; height: 22px;&quot;&gt;en&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;context window가 최근 출시되는 다른 오픈소스 모델에 비해 꽤나 짧다는 점과, 지원 언어가 영어 한 가지라는 점이 눈에 띄네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 두 가지 사항 모두 solar pro 정식 출시할 때 개선해서 나온다고 하니 기대해 봐야 할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;/h2&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;430&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ipJk/btsJGmF4GEj/3Ffgy5UkuHN80YBDlXVArk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ipJk/btsJGmF4GEj/3Ffgy5UkuHN80YBDlXVArk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ipJk/btsJGmF4GEj/3Ffgy5UkuHN80YBDlXVArk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ipJk%2FbtsJGmF4GEj%2F3Ffgy5UkuHN80YBDlXVArk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;125&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 solar 10.7B는 transformers 라이브러리의 LlamaForCausalLM 구조를 채택하고 있기에, vllm을 포함한 다양한 서빙 라이브러리에서 문제 없이 동작했습니다.&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;253&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7OJ2A/btsJIoPviqw/GCUSKB7SkCg9ICtDGI3ng0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7OJ2A/btsJIoPviqw/GCUSKB7SkCg9ICtDGI3ng0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7OJ2A/btsJIoPviqw/GCUSKB7SkCg9ICtDGI3ng0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7OJ2A%2FbtsJIoPviqw%2FGCUSKB7SkCg9ICtDGI3ng0%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;253&quot; height=&quot;95&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이번에 출시된 solar-pro-preview 모델에서는 기존 transformers 라이브러리의 모델 클래스를 사용하지 않고, SolarForCausalLM이라는 새로운 아키텍쳐를 사용합니다. 따라서&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726907958073&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model = AutoModelForCausalLM.from_pretrained(
    &quot;upstage/solar-pro-preview-instruct&quot;,
    device_map=&quot;cuda&quot;,  
    torch_dtype=&quot;auto&quot;,  
    trust_remote_code=True,
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같이 모델을 사용할 때 trust_remote_code=True 라는 부분을 꼭 지정을 해줘야 하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 SolarForCausalLM 아키텍처는 다른 transformers의 LLM 아키텍처에 비해 어떤 점이 달라졌을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 지정 아키텍처를 사용하는 모델은 modeling_{model_name}.py 에 해당 모델의 아키텍처를 정의해서 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;solar-pro-preview 모델의 아키텍처 또한 허깅페이스 repo의 &lt;a href=&quot;https://huggingface.co/upstage/solar-pro-preview-instruct/blob/main/modeling_solar.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;modeling_solar.py&lt;/a&gt; 에 정의되어 있고, 각종 config 들은 &lt;a href=&quot;https://huggingface.co/upstage/solar-pro-preview-instruct/blob/main/configuration_solar.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;configuration_solar.py&lt;/a&gt;에서 불러와 사용하는 구조입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 solar의 model config를 살펴보면, 대부분은 llama나 mistral과 비슷한 구조를 가지나, 한 가지 추가된 사항이 있습니다.&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;306&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38x0q/btsJImEpoRd/NXv9KJJi61QVlJGkBAhezk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38x0q/btsJImEpoRd/NXv9KJJi61QVlJGkBAhezk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38x0q/btsJImEpoRd/NXv9KJJi61QVlJGkBAhezk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38x0q%2FbtsJImEpoRd%2FNXv9KJJi61QVlJGkBAhezk%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;613&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;695&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;SolarConfig라는 클래스를 초기화할 때, bskcn이라는 리스트 형태의 변수를 선언하는 것을 확인할 수 있습니다. 1~4번까지는 정수의 리스트, bskcn_tv 에는 0.9와 0.8이 들어있는 리스트 형태입니다. 이 값들이 어디에서 쓰이는 지 확인해 보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726908577128&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        # modeling_solar.py line 1051~
        # decoder layers
        all_hidden_states = () if output_hidden_states else None
        all_self_attns = () if output_attentions else None
        next_decoder_cache = None

        bskcn_1 = None
        bskcn_2 = None
        bskcn_tv = self.config.bskcn_tv[0] if self.training else self.config.bskcn_tv[1]
        for layer_idx, decoder_layer in enumerate(self.layers):
            if layer_idx in self.config.bskcn_1:
                bskcn_1 = hidden_states
            if layer_idx in self.config.bskcn_2:
                bskcn_2 = hidden_states
            if layer_idx in self.config.bskcn_3:
                hidden_states = (bskcn_1*bskcn_tv).to(hidden_states.device) + hidden_states*(1-bskcn_tv)
            if layer_idx in self.config.bskcn_4:
                hidden_states = (bskcn_2*bskcn_tv).to(hidden_states.device) + hidden_states*(1-bskcn_tv)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 solar 모델의 decoder 부분 forward 함수의 일부분입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 살펴보면 다음과 같은 로직이 적용되어있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bskcn_1: 12, 20, 32, 44번째 레이어에서 hidden states를 저장&amp;nbsp;&lt;/li&gt;
&lt;li&gt;bskcn_2: 20, 32번째 레이어에서 hidden states를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bskcn_3: 16, 24, 36, 48번째 레이어에서 bskcn_1의 hidden states를 현재 hidden states와 결합&lt;/li&gt;
&lt;li&gt;bskcn_4: 28, 40번째 레이어에서 bskcn_2의 hidden states를 현재 hidden states와 결합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 선언되었던&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bskcn_1,3 리스트는 hidden states를 저장할 리스트 인덱스&lt;/li&gt;
&lt;li&gt;bskcn_2,4 리스트는 미리 저장했던 hidden states와 현재 인덱스의 hideen state를 결합하는 인덱스&lt;/li&gt;
&lt;li&gt;bskcn_tv는 결합할 때의 가중치&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 되겠네요.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, &lt;u&gt;&lt;i&gt;모델이 훈련 중이라면 가중치를 0.9, 추론 중이라면 0.8으로 각각 다르게 설정&lt;/i&gt;&lt;/u&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;1638&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpLUvR/btsJGJA2Dpt/45jmcoZuBYcKovNItORzik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpLUvR/btsJGJA2Dpt/45jmcoZuBYcKovNItORzik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpLUvR/btsJGJA2Dpt/45jmcoZuBYcKovNItORzik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpLUvR%2FbtsJGJA2Dpt%2F45jmcoZuBYcKovNItORzik%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;1638&quot; height=&quot;434&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조를 claude에게 주고 시각화 해달라고 하니 이런 다이어그램이 나왔네요. 이해가 잘 가시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 구조는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ybPgy/btsJIP7aFhc/pooJkGgW8ymBrwZxxowipK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ybPgy/btsJIP7aFhc/pooJkGgW8ymBrwZxxowipK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ybPgy/btsJIP7aFhc/pooJkGgW8ymBrwZxxowipK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FybPgy%2FbtsJIP7aFhc%2FpooJkGgW8ymBrwZxxowipK%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;157&quot; height=&quot;321&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ResNet 등의 모델에서 사용하고 있는 skip connection기법 을 &lt;u&gt;&lt;i&gt;레이어 단위로, 가중치를 적용해서&lt;/i&gt;&lt;/u&gt; 하는 것이라고 할 수 있겠네요. LLM에서 이러한 모델 구조를 사용하는 것은 처음 본 것 같은데, 혹시 아니라면 댓글로 알려주시면 감사하겠습니다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 현재 공개된 solar-pro-preview의 hidden_layer 수는 32지만, bskcn 인덱스 리스트에는 32를 초과하는 36,40,48 등의 수도 있는 것을 확인할 수 있습니다. 이는 아마도 더 큰 모델(아마도 API 전용)을 위한 config가 아닐까 생각됩니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한국어는 어느정도 할까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;solar-pro-preview- 의 공식 지원 언어는 영어 하나뿐이지만, 그래도 한국 기업에서 만든 모델이어서 solar-pro-preview-instruct에 한국어 인스트럭트 벤치마크 Logickor 테스트를 돌려보았습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wyxdj/btsJIPMSaBX/mgIVpdJFGknd4ipKtuDik1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wyxdj/btsJIPMSaBX/mgIVpdJFGknd4ipKtuDik1/img.png&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;442&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.1171%; margin-right: 10px;&quot; data-widthpercent=&quot;32.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wyxdj/btsJIPMSaBX/mgIVpdJFGknd4ipKtuDik1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwyxdj%2FbtsJIPMSaBX%2FmgIVpdJFGknd4ipKtuDik1%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;409&quot; height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OnVvJ/btsJIQE0KdN/RswKwSaRbVaOUGIlvs8kx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OnVvJ/btsJIQE0KdN/RswKwSaRbVaOUGIlvs8kx0/img.png&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.2886%; margin-right: 10px;&quot; data-widthpercent=&quot;34.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OnVvJ/btsJIQE0KdN/RswKwSaRbVaOUGIlvs8kx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOnVvJ%2FbtsJIQE0KdN%2FRswKwSaRbVaOUGIlvs8kx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvOk28/btsJGwPt92a/UTCY6krVw30C1PqTNXjdSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvOk28/btsJGwPt92a/UTCY6krVw30C1PqTNXjdSK/img.png&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;441&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.2687%;&quot; data-widthpercent=&quot;33.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvOk28/btsJGwPt92a/UTCY6krVw30C1PqTNXjdSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvOk28%2FbtsJGwPt92a%2FUTCY6krVw30C1PqTNXjdSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;각각 default(0-shot), 1-shot, cot-1-shot&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;애초부터 영어만 지원하는 모델이었기 때문에 Logickor&amp;nbsp; 리더보드 상위 모델들과는 점수 차이가 많이 나는 모습이지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시를 1개 제공하는 것만으로도 점수가 크게 오르는 것(5.75-&amp;gt;6.55)을 보아 모델 자체의 추론 능력이 상당하다는 것을 확인할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 exaone이나 solar와 같이 한국 기업에서 자체적으로 개발한 언어 모델을 오픈 소스로 공개하는 일들이 많아지고 있어 정말 흥미진진한데요, 이에 자극을 받아 더욱 다양한 IT 기업에서 자체 언어 모델을 제작고 배포하는 일이 많아졌으면 하는 마음입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽어주셔서 감사합니다!&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>llm</category>
      <category>nlp</category>
      <category>Solar</category>
      <category>solar-pro</category>
      <category>solar-pro-preview</category>
      <category>Upstage</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/17</guid>
      <comments>https://4n3mone.tistory.com/17#entry17comment</comments>
      <pubDate>Sat, 21 Sep 2024 18:31:41 +0900</pubDate>
    </item>
    <item>
      <title>[NLP] Large Language Models are Superpositions of All Characters: AttainingArbitrary Role-play via Self-Alignment 논문 리뷰</title>
      <link>https://4n3mone.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2401.12474&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;arxiv&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/OFA-Sys/Ditto&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개요&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문은 LLM이 Role-Playing을 더 잘할 수 있도록 하는 방법론 Ditto를 설명하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알리바바 그룹의 &lt;a href=&quot;https://arxiv.org/pdf/2407.10671&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;qwen2&lt;/a&gt;에 적용되어 주목받기도 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Abstract&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DITTO는 LLM의 역할 수행 능력을 강화하기 위해 캐릭터 지식을 활용한 셀프 얼라인먼트 방법을 제시하며, 4000개의 캐릭터로 구성된 대규모 역할 수행 훈련 세트를 생성하여 모델을 fine-tuning합니다.&lt;/li&gt;
&lt;li&gt;평가 결과, DITTO는 다양한 파라미터 스케일에서 일관된 역할 정체성을 유지하며, 모든 오픈소스 역할 수행 기준을 능가하는 성능을 보여줍니다.&lt;/li&gt;
&lt;li&gt;역할 수행 도메인에서 최초로 교차 지도(cross-supervision) 정렬 실험을 통해, LLM의 본질적인 능력이 역할 수행 지식을 제한하지만, 역할 수행 스타일은 작은 모델의 지도로 쉽게 습득될 수 있음을 확인했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Role-Playing이란&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Role-play&lt;/b&gt;는 특정 캐릭터의 행동과 발화 스타일을 모방하는 대화 시스템을 개발하는 것을 목표로 합니다. 이를 통해 대형 언어 모델(LLM)이 특정 캐릭터의 &lt;b&gt;특징을 정확하게 반영&lt;/b&gt;하고 &lt;b&gt;대화 내용에 일관성을 유지&lt;/b&gt;하는지를 평가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Self-Algnment란&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Self-alignment&lt;/b&gt;란 약한 언어 모델(LLM)의 성능을 향상시키기 위한 방법으로, 더 강력한 모델(ex, gpt-4o)의 출력을 활용하지 않고, 모델 자체를 사용하여 자체적으로 조정(fine-tuning)하는 접근 방식을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Ditto Method&lt;/h4&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;818&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckNxFE/btsI1c4Vir2/V0YYwHg2cCupu1QWWUFyUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckNxFE/btsI1c4Vir2/V0YYwHg2cCupu1QWWUFyUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckNxFE/btsI1c4Vir2/V0YYwHg2cCupu1QWWUFyUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckNxFE%2FbtsI1c4Vir2%2FV0YYwHg2cCupu1QWWUFyUK%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;818&quot; height=&quot;416&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 캐릭터 지식 수집&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQKIP4/btsI24dhHL0/MTb0yayFbKSkpnxA1aZ1mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQKIP4/btsI24dhHL0/MTb0yayFbKSkpnxA1aZ1mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQKIP4/btsI24dhHL0/MTb0yayFbKSkpnxA1aZ1mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQKIP4%2FbtsI24dhHL0%2FMTb0yayFbKSkpnxA1aZ1mK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;410&quot; height=&quot;583&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 위키피디아에서 다양한 캐릭터 이름, 설명, 주요 속성을 수집(한국어, 영어)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. Dialogue Simulation&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1. Query Simulation&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj3xJa/btsI2phXQq4/PbaXSK6oz2gdjb8gaCNvl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj3xJa/btsI2phXQq4/PbaXSK6oz2gdjb8gaCNvl0/img.png&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;609&quot; data-is-animation=&quot;false&quot; style=&quot;width: 44.1224%; margin-right: 10px;&quot; data-widthpercent=&quot;44.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj3xJa/btsI2phXQq4/PbaXSK6oz2gdjb8gaCNvl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj3xJa%2FbtsI2phXQq4%2FPbaXSK6oz2gdjb8gaCNvl0%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;401&quot; height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zCaWq/btsI2IuMSg0/nnOQn0RVCJaSzZlZIFXy5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zCaWq/btsI2IuMSg0/nnOQn0RVCJaSzZlZIFXy5k/img.png&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;496&quot; data-is-animation=&quot;false&quot; style=&quot;width: 54.7148%;&quot; data-widthpercent=&quot;55.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zCaWq/btsI2IuMSg0/nnOQn0RVCJaSzZlZIFXy5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzCaWq%2FbtsI2IuMSg0%2FnnOQn0RVCJaSzZlZIFXy5k%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;496&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대상 캐릭터 A + 그 캐릭터와 상관이 없는 캐릭터 B를 각각 정함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM에게 각각의 정보를 전달하면서 A는 대달할 수 있지만 B는 대답할 수 없는 질문을 생성해달라고 부탁&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2. Response Simulation&lt;/h4&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;477&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sr459/btsI2qBbt3o/M1pQEecoe2vvupc8zzZ4Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sr459/btsI2qBbt3o/M1pQEecoe2vvupc8zzZ4Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sr459/btsI2qBbt3o/M1pQEecoe2vvupc8zzZ4Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSr459%2FbtsI2qBbt3o%2FM1pQEecoe2vvupc8zzZ4Y1%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;477&quot; height=&quot;489&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM에게 캐릭터의 정보를 제공한 뒤에 대답을 해달라고 요청함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(위키피디아에서 직접 정보 추출했으므로 환각이 적을 것이라고 기대)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;911&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qNVA0/btsI30hxtbi/yHSZeBFdg2kEACJo08iPfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qNVA0/btsI30hxtbi/yHSZeBFdg2kEACJo08iPfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qNVA0/btsI30hxtbi/yHSZeBFdg2kEACJo08iPfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqNVA0%2FbtsI30hxtbi%2FyHSZeBFdg2kEACJo08iPfK%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;911&quot; height=&quot;191&quot; data-origin-width=&quot;911&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;3902개 캐릭터의 정보를 탐은 QA 멀티턴 데이터를 제작함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 때, train 데이터는 seed LLM(qwen-chat), test 데이터는 gpt-4-turbo 사용&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. SFT&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 질문-답변 쌍으로 모델을 학습시킨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(질문에서 캐릭터에 대한 구체적인 지식보다는 간략한 정보로 대체)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 평가&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLMs-as-Judges 방법 채택하여 파인튜닝한 모델의 응답을 평가함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추론할 때에도 모델에게 간략한 정보만을 제공( &amp;ldquo;You are Edward III of England, king of England.&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.1. Consistent Role Identity&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E2nBj/btsI2ScTzgN/n7CFAqfFc7I0iKAQNxvBV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E2nBj/btsI2ScTzgN/n7CFAqfFc7I0iKAQNxvBV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E2nBj/btsI2ScTzgN/n7CFAqfFc7I0iKAQNxvBV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE2nBj%2FbtsI2ScTzgN%2Fn7CFAqfFc7I0iKAQNxvBV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;568&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;- LLM은 다중 턴 대화에서 지정된 역할을 매끄럽게 수행하며, 캐릭터 &lt;b&gt;일관성을 유지&lt;/b&gt;하고 이탈하지 않아야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 역할 일관성 평가를 네 가지 가능한 역할 후보가 포함된 다지선다 문제로 구조화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평가자 LLM이 이 문제를 맞추면 성공적으로 학습한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.2. Accurate Role-related Knowledge&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JRVaA/btsI2R59TFx/S9cPvtDj3hiArXkW7FD3EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JRVaA/btsI2R59TFx/S9cPvtDj3hiArXkW7FD3EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JRVaA/btsI2R59TFx/S9cPvtDj3hiArXkW7FD3EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRVaA%2FbtsI2R59TFx%2FS9cPvtDj3hiArXkW7FD3EK%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;557&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전의 단계에서 수집한 정확한 정보를 제공하고 모델의 응답에 환각 현상이 있었는지 점수를 매겨달라 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4.3. Unknown Question Rejection&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIzDcH/btsI1TjwuwI/StTdi3NbkUV3N7tKvblA9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIzDcH/btsI1TjwuwI/StTdi3NbkUV3N7tKvblA9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIzDcH/btsI1TjwuwI/StTdi3NbkUV3N7tKvblA9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIzDcH%2FbtsI1TjwuwI%2FStTdi3NbkUV3N7tKvblA9K%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;565&quot; height=&quot;560&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test set에 있는 관련 없는 질문을 모델에게 한 뒤 잘 reject했는지 LLM에게 판단하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;955&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nnw5v/btsI1WgSqvZ/ac5JN0EaXFW9iijeSTJjZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nnw5v/btsI1WgSqvZ/ac5JN0EaXFW9iijeSTJjZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nnw5v/btsI1WgSqvZ/ac5JN0EaXFW9iijeSTJjZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnnw5v%2FbtsI1WgSqvZ%2Fac5JN0EaXFW9iijeSTJjZK%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;955&quot; height=&quot;724&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;General Baselines 결과 : 상용모델 / 오픈소스 모델에게 WIKIROLEEVAL 태스크 수행한 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Role-play Expertise Baselines : 롤플레잉 전문 모델들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ours 모델 : QWEN1.8B~72B에게 DITTO 방법 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;롤플레잉 전문 모델들이 상용 모델보다 나은 결과를 보일 때도 있었음(특히 일관성)&lt;/li&gt;
&lt;li&gt;그러나 이들은 캐릭터에 대한 지식이 매우 모자랐음&lt;/li&gt;
&lt;li&gt;DITTO 방법으로 학습한 seed 모델들은 파라미터가 증가함에 따라 모든 능력이 향상됨&lt;/li&gt;
&lt;li&gt;특히 가장 큰 파라미터인 72B의 경우 상용 모델들을 상회하는 결과를 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리 품질 분석&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/51zDK/btsI2SEA5fu/UKnFTkMQkfNePbPtZhwUsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/51zDK/btsI2SEA5fu/UKnFTkMQkfNePbPtZhwUsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/51zDK/btsI2SEA5fu/UKnFTkMQkfNePbPtZhwUsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F51zDK%2FbtsI2SEA5fu%2FUKnFTkMQkfNePbPtZhwUsK%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;477&quot; height=&quot;425&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인간이 평가한 결과 #파라미터가 증가할 수록 스스로 생성하는 쿼리의 품질이 좋아짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;지식 주입 분석&lt;/h4&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;477&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnupgq/btsI3TW4p4C/q3rEq0rZ6LQPwTjpTehQa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnupgq/btsI3TW4p4C/q3rEq0rZ6LQPwTjpTehQa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnupgq/btsI3TW4p4C/q3rEq0rZ6LQPwTjpTehQa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnupgq%2FbtsI3TW4p4C%2Fq3rEq0rZ6LQPwTjpTehQa1%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;477&quot; height=&quot;237&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델이 같을 때, 쿼리에 지식을 주입하는 것이 더 효과를 보임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;교차 지도(cross-supervision) 학습 분석&lt;/h4&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;1111&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cz282D/btsI3K0o7v1/BvUXNtMExiSqWTOwDIrXV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cz282D/btsI3K0o7v1/BvUXNtMExiSqWTOwDIrXV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cz282D/btsI3K0o7v1/BvUXNtMExiSqWTOwDIrXV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcz282D%2FbtsI3K0o7v1%2FBvUXNtMExiSqWTOwDIrXV1%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;1111&quot; height=&quot;528&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할 정체성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일관된 역할 정체성은 감독이 좋지 않은 경우에도 모방 학습을 통해 지속적으로 이점을 얻음.&lt;/li&gt;
&lt;li&gt;시드 LLM은 감독에서 부적절한 시범이 있더라도 역할 수행 형식을 쉽게 배울 수 있음.&lt;/li&gt;
&lt;li&gt;역할 일관성은 학습하기 더 쉽고 감독 품질에 더 강인함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 관련 지표&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지식과 거부에 대한 성능은 모방 학습 후에 저하되는 경향이 있음.&lt;/li&gt;
&lt;li&gt;지식 관련 지표는 일관된 이점을 얻지 못하고, 모방 학습 후 성능이 저하될 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 포인트 위치&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일관성에 대한 데이터 포인트는 대각선 위에 위치하여, 모방 성능이 감독 성능보다 일관되게 높음을 의미함.&lt;/li&gt;
&lt;li&gt;지식과 거부에 대한 데이터 포인트는 대각선 아래에 위치하여, 모방 학습 후 성능이 저하되는 경향을 나타냄.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 제한&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지식은 큰 모델(지도)에서 작은 모델(학습)로 설정될 때, LLM의 내재된 능력에 의해 제한됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내재된 능력의 제한&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시드 LLM의 내재된 능력이 역할별 지식을 제한함.&lt;/li&gt;
&lt;li&gt;훨씬 더 강력한 LLM을 감독으로 사용하는 것이 미미한 개선만을 가져올 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;거부 지표&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역할별 지식에 의존하는 거부 지표에서도 유사한 결론이 도출됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결론&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;frontier 모델을 사용하지 않고 자기 자신의 응답 결과를 다시 사용하는 self-alignment 학습으로도 RP에 요구되는 '일관성'은 증가시킬 수 있었다. 그러나 '지식'의 경우에는 모델 자체의 능력에 크게 영향을 받는다는 것을 발견&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/16</guid>
      <comments>https://4n3mone.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 13 Aug 2024 15:49:18 +0900</pubDate>
    </item>
    <item>
      <title>chatglm LoRA 튜닝하기 (LoRA 안되는 LLM 모델 학습하는 방법)</title>
      <link>https://4n3mone.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://huggingface.co/THUDM/glm-4-9b-chat/tree/main&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;THUDM/glm-4-9b-chat&lt;/a&gt; 은 &lt;a href=&quot;https://lk.instruct.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LogiKor 리더보드&lt;/a&gt;에서 공개 모델 중 상당한 순위를 자랑하는 중국산 모델인데요,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 이 모델은&amp;nbsp; huggingface transformer 라이브러리에 등록되어있지 않아 인터넷에 공개되어있는 여러 예제 코드가 작동하지 않을 때가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720488160516&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=[&quot;q_proj&quot;, &quot;v_proj&quot;],
)
model = get_peft_model(model, peft_config)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드는 많이들 사용하는 LoRAConfig 세팅인데요, chatglm 모델에 다음과 같은 코드를 적용하면 이런 에러를 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720488251215&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ValueError: Target modules [&quot;q_proj&quot;, &quot;v_proj&quot;] not found in the base model. Please check the target modules and try again.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 chatglm의 모델링 코드 구조에서 &quot;q_proj&quot;, &quot;v_proj&quot; 가 없어서 존재하는 오류로, 실제 내부 코드 &quot;&lt;a href=&quot;https://huggingface.co/THUDM/glm-4-9b-chat/blob/main/modeling_chatglm.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;modeling_glm.py&lt;/a&gt;&quot; 를 들여다보면 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720488428273&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class SelfAttention(torch.nn.Module):
    &quot;&quot;&quot;Parallel self-attention layer abstract class.
    Self-attention layer takes input with size [s, b, h]
    and returns output of the same size.
    &quot;&quot;&quot;

    def __init__(self, config: ChatGLMConfig, layer_number, device=None):
        super(SelfAttention, self).__init__()
        self.layer_number = max(1, layer_number)

        self.projection_size = config.kv_channels * config.num_attention_heads

        # Per attention head and per partition values.
        self.hidden_size_per_attention_head = self.projection_size // config.num_attention_heads
        self.num_attention_heads_per_partition = config.num_attention_heads

        self.multi_query_attention = config.multi_query_attention
        self.qkv_hidden_size = 3 * self.projection_size
        if self.multi_query_attention:
            self.num_multi_query_groups_per_partition = config.multi_query_group_num
            self.qkv_hidden_size = (
                    self.projection_size + 2 * self.hidden_size_per_attention_head * config.multi_query_group_num
            )
        self.query_key_value = nn.Linear(config.hidden_size, self.qkv_hidden_size,
                                         bias=config.add_bias_linear or config.add_qkv_bias,
                                         device=device, **_config_to_kwargs(config)
                                         )

        self.core_attention = CORE_ATTENTION_CLASSES[config._attn_implementation](config, self.layer_number)

        # Output.
        self.dense = nn.Linear(self.projection_size, config.hidden_size, bias=config.add_bias_linear,
                               device=device, **_config_to_kwargs(config)
                               )&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상한점을 잘 모르시겠다면, transformers 라이브러리의 &lt;a href=&quot;https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;modeling_llama.py&lt;/a&gt; 를 한번 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720488588037&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class LlamaAttention(nn.Module):
    &quot;&quot;&quot;Multi-headed attention from 'Attention Is All You Need' paper&quot;&quot;&quot;

    def __init__(self, config: LlamaConfig, layer_idx: Optional[int] = None):
        super().__init__()
        self.config = config
        self.layer_idx = layer_idx
        if layer_idx is None:
            logger.warning_once(
                f&quot;Instantiating {self.__class__.__name__} without passing a `layer_idx` is not recommended and will &quot;
                &quot;lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` &quot;
                &quot;when creating this class.&quot;
            )

        self.attention_dropout = config.attention_dropout
        self.hidden_size = config.hidden_size
        self.num_heads = config.num_attention_heads
        self.head_dim = self.hidden_size // self.num_heads
        self.num_key_value_heads = config.num_key_value_heads
        self.num_key_value_groups = self.num_heads // self.num_key_value_heads
        self.max_position_embeddings = config.max_position_embeddings
        self.rope_theta = config.rope_theta
        self.is_causal = True

        if (self.head_dim * self.num_heads) != self.hidden_size:
            raise ValueError(
                f&quot;hidden_size must be divisible by num_heads (got `hidden_size`: {self.hidden_size}&quot;
                f&quot; and `num_heads`: {self.num_heads}).&quot;
            )

        self.q_proj = nn.Linear(self.hidden_size, self.num_heads * self.head_dim, bias=config.attention_bias)
        self.k_proj = nn.Linear(self.hidden_size, self.num_key_value_heads * self.head_dim, bias=config.attention_bias)
        self.v_proj = nn.Linear(self.hidden_size, self.num_key_value_heads * self.head_dim, bias=config.attention_bias)
        self.o_proj = nn.Linear(self.hidden_size, self.hidden_size, bias=config.attention_bias)
        self._init_rope()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞습니다. transformers 내부 코드의 modeling 코드에는 &quot;q_proj&quot;, &quot;v_proj&quot;가 존재하지만, chatglm의 커스텀 코드에는 존재하지 않는 다는 것을 확인할 수 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 LoRA 학습을 하기 위해서는 모델링 코드를 수정하거나(어려운 방법), 모델링 코드에서 지정해놓은 매개변수 이름으로 LoraConfig를 수정하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chatglm의 모델링 코드에서 [&quot;q_proj&quot;, &quot;v_proj&quot;] 와 유사한 기능을 하는 매개변수는 &quot;query_key_value&quot; 이므로, 다음과 같이 LoraConfig를 바꿔주면 학습을 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720489008630&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=[&quot;query_key_value&quot;],
)
model = get_peft_model(model, peft_config)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 유사한 방법으로 사용하던 LoraConfig가 작동하지 않는 커스텀 코드를 사용하는 모델에 대해 Lora 학습을 해볼 수 있겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 틀린 점이 있다면 댓글로 달아주세요!&lt;/p&gt;</description>
      <category>공부</category>
      <category>chatglm</category>
      <category>Lora</category>
      <category>Transformers</category>
      <category>자연어처리</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/15</guid>
      <comments>https://4n3mone.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 9 Jul 2024 10:38:08 +0900</pubDate>
    </item>
    <item>
      <title>[NLP] A Pretrainer&amp;rsquo;s Guide to Training Data:Measuring the Effects of Data Age, Domain Coverage,Quality, &amp;amp; Toxicity 논문 리뷰</title>
      <link>https://4n3mone.tistory.com/14</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xh9Ti/btsIdIbOMPD/3WHkdrLt7p3czxVkNuxv9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xh9Ti/btsIdIbOMPD/3WHkdrLt7p3czxVkNuxv9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xh9Ti/btsIdIbOMPD/3WHkdrLt7p3czxVkNuxv9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxh9Ti%2FbtsIdIbOMPD%2F3WHkdrLt7p3czxVkNuxv9K%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;1118&quot; height=&quot;408&quot; data-origin-width=&quot;1118&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Abstract&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 28개의 LLM을 사용해 사전 학습 데이터 설계의 영향을 조사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터의 &lt;b&gt;시간적 관련성(curated at different times)&lt;/b&gt;, &lt;b&gt;품질(quality)&lt;/b&gt; 및 &lt;b&gt;유해성(toxicity) 필터링&lt;/b&gt;, 그리고 다양한 &lt;b&gt;도메인 구성(domain composition)&lt;/b&gt;이 모델 성능에 미치는 영향을 분석&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;실험에 사용된 모델 &amp;amp; 데이터셋&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- C4(2020)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Common Crawl의 정제 버전, 다양한 웹 문서를 포함하며 영어 텍스트로 필터링되어 있고, 많은 언어 모델 훈련에 널리 사용되는 오픈소스 데이터셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- The Pile&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22개 출처의 데이터로 구성된 800GB 데이터셋 웹 스크랩과 다양한 분야의 텍스트를 포함&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;1126&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4ZGG/btsIdiYKg9K/gk5sN3KNjQb9o2pDEwPSqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4ZGG/btsIdiYKg9K/gk5sN3KNjQb9o2pDEwPSqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4ZGG/btsIdiYKg9K/gk5sN3KNjQb9o2pDEwPSqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4ZGG%2FbtsIdiYKg9K%2Fgk5sN3KNjQb9o2pDEwPSqK%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;1126&quot; height=&quot;543&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;데이터 평가 척도&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터셋의 나이&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mBJ1U/btsIdz649BM/AK4V3sBN1gMaXgwPFOzgEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mBJ1U/btsIdz649BM/AK4V3sBN1gMaXgwPFOzgEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mBJ1U/btsIdz649BM/AK4V3sBN1gMaXgwPFOzgEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBJ1U%2FbtsIdz649BM%2FAK4V3sBN1gMaXgwPFOzgEk%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;239&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pile에는 시간 데이터가 없어서 분석 불가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 도메인 필터링&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LPSBh/btsIeFSHHZa/TuyNvt3Q3rRHB20kSTeglk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LPSBh/btsIeFSHHZa/TuyNvt3Q3rRHB20kSTeglk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LPSBh/btsIeFSHHZa/TuyNvt3Q3rRHB20kSTeglk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLPSBh%2FbtsIeFSHHZa%2FTuyNvt3Q3rRHB20kSTeglk%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;456&quot; height=&quot;276&quot; data-origin-width=&quot;1135&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pile은 다양한 데이터 출처가 명시되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 내용 필터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Common Crawl과 같은 인터넷 소스에서 파생된 데이터셋은 저품질, 유해, 공격적 콘텐츠를 포함하므로 필터링이 필요함&lt;/li&gt;
&lt;li&gt;문서의 적절성을 판단하는 방법으로는 단순 특성 기반 필터, 부정적 정의 필터, 긍정적 정의 필터 등이 있음&lt;/li&gt;
&lt;li&gt;본 연구에서는 최신 언어 모델 개발에 널리 사용되는 두 가지 분류기 기반 필터(&lt;u&gt;&lt;i&gt;유해 콘텐츠 제거, 고품질 콘텐츠 유지&lt;/i&gt;&lt;/u&gt;)의 영향을 평가함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 품질 필터링&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본 연구에서는 PaLM과 GLaM에서 사용된 분류기를 활용하여 0(고품질)에서 1(저품질) 사이의 점수를 문서에 부여함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유해성 필터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유해 콘텐츠 식별을 위해 Jigsaw의 Perspective API를 사용&lt;/li&gt;
&lt;li&gt;이 API는 온라인 포럼 댓글을 기반으로 훈련되어 0(유해 가능성 낮음)에서 1(유해 가능성 높음) 사이의 점수를 부여&lt;/li&gt;
&lt;li&gt;연구에서는 다양한 독성 임계값(0.95, 0.9, 0.7, 0.5, 0.3)을 적용하여 문서를 필터링하고, 원본 C4 데이터셋에서 사용된 n-gram 기반 필터도 실험함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;성능 평가 척도&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 도메인 일반화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MRQA, UnifiedQA&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시간에 따른 불일치 (misalignment)&amp;nbsp; 평가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미세조정과 평가 시점 사이의 시간 간격이 증가할수록 테스트 성능이 저하된다는 연구 결과 있음&lt;/li&gt;
&lt;li&gt;PubCLS, NewSum, PoliAffs, TwiERC,&amp;nbsp; AIC 데이터셋으로 평가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유해적인 생성 평가&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Perspective API로 생성된 텍스트의 독성 점수를 측정하고, RealToxicityPrompts 데이터셋도 활용하여 평가함&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유해적 텍스트 인식 평가&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Social Bias Frames, DynaHate, Toxigen 등의 데이터셋을 사용함&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Impact of Data Curation on Data Characteristics&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; C4랑 Pile 비교하는 부분인데 생략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Impact of Dataset Age on Pretrained Models&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델과 평가 데이터셋 모두 시간이 지나면 낡아질 수 있음&lt;/li&gt;
&lt;li&gt;사전학습 데이터와 평가 데이터 간의 시간적 불일치는 미세조정으로 해결되지 않음&lt;/li&gt;
&lt;li&gt;시간적 불일치로 인해 서로 다른 시기에 학습된 모델들의 평가가 복잡해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btJmTx/btsIcURoPgL/dlkXmhVhe812hcNTqGXDJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btJmTx/btsIcURoPgL/dlkXmhVhe812hcNTqGXDJ1/img.png&quot; data-alt=&quot;pretrain year와 eval year가 가까워질수록 align 잘됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btJmTx/btsIcURoPgL/dlkXmhVhe812hcNTqGXDJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtJmTx%2FbtsIcURoPgL%2FdlkXmhVhe812hcNTqGXDJ1%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;277&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pretrain year와 eval year가 가까워질수록 align 잘됨&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;686&quot; data-origin-height=&quot;521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ8slI/btsId1PxZfk/7fNkWHa6Yu1pgTnEweiKP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ8slI/btsId1PxZfk/7fNkWHa6Yu1pgTnEweiKP0/img.png&quot; data-alt=&quot;시간적 불일치(x축)가 0에 가까워질수록 5개 데이터셋의 평균 상대 성능(y축)이 향상됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ8slI/btsId1PxZfk/7fNkWHa6Yu1pgTnEweiKP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ8slI%2FbtsId1PxZfk%2F7fNkWHa6Yu1pgTnEweiKP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;340&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;521&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시간적 불일치(x축)가 0에 가까워질수록 5개 데이터셋의 평균 상대 성능(y축)이 향상됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간적 성능 저하는 작은 모델보다 큰 모델에서 더 두드러지게 나타남, 이는 큰 모델이 시간적 정보에 더 민감할 수 있음을 시사함&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Impact of Quality &amp;amp; Toxicity Filters on Pretrained Models&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;품질 필터와 독성 필터는 매우 다른 효과를 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19MIi/btsId7oH361/vKSrnTmkhelthEnu0ziKCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19MIi/btsId7oH361/vKSrnTmkhelthEnu0ziKCk/img.png&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;576&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.9073%; margin-right: 10px;&quot; data-widthpercent=&quot;51.51&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19MIi/btsId7oH361/vKSrnTmkhelthEnu0ziKCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19MIi%2FbtsId7oH361%2FvKSrnTmkhelthEnu0ziKCk%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;1211&quot; height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kG81z/btsIe21gom4/DVlyss2SHkKI82wS0Mk0Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kG81z/btsIe21gom4/DVlyss2SHkKI82wS0Mk0Z1/img.png&quot; data-origin-width=&quot;1253&quot; data-origin-height=&quot;633&quot; data-is-animation=&quot;false&quot; style=&quot;width: 47.9299%;&quot; data-widthpercent=&quot;48.49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kG81z/btsIe21gom4/DVlyss2SHkKI82wS0Mk0Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkG81z%2FbtsIe21gom4%2FDVlyss2SHkKI82wS0Mk0Z1%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;1253&quot; height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;품질 필터는 모델의 QA 성능을 향상시킴(좌), 유해성 필터는 하락시킴(우)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;품질 필터는 훈련 데이터를 줄임에도 성능을 크게 향상시킴&lt;/li&gt;
&lt;li&gt;품질 필터링의 효과는 데이터셋 특성만으로 쉽게 예측되지 않음
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;도메인에 따라 다른 품질 필터를 적용해야 함 (어떤 데이터셋의 경우 역 필터가 가장 좋은 효과를 보임)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;독성 필터링은 일반화 능력과 독성 식별 능력을 희생하여 유해한 텍스트 생성 위험을 줄임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Impact of Domain Composition on Pretrained Models&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 데이터 소스를 포함시키는 것이 데이터 품질이나 크기보다 더 중요&lt;/li&gt;
&lt;li&gt;특정 데이터는 특정 평가에 도움이 되지만, 항상 이질적인 웹 도메인의 포함만큼 도움이 되지는 않음&lt;/li&gt;
&lt;li&gt;가능한 한 많은 사전 학습 데이터 소스를 포함하는 것이 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwcHd1/btsIeHJO8kz/xCkLlxeWFJhVmhAgQyWK71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwcHd1/btsIeHJO8kz/xCkLlxeWFJhVmhAgQyWK71/img.png&quot; data-alt=&quot;데이터셋의 각 도메인(y축)을 제거했을 때 도메인QA(x축)별 성능 차이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwcHd1/btsIeHJO8kz/xCkLlxeWFJhVmhAgQyWK71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwcHd1%2FbtsIeHJO8kz%2FxCkLlxeWFJhVmhAgQyWK71%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;1179&quot; height=&quot;498&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데이터셋의 각 도메인(y축)을 제거했을 때 도메인QA(x축)별 성능 차이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Discussion&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터셋은 크고, 다양하며, 고품질이어야 함&lt;/li&gt;
&lt;li&gt;사전 훈련 큐레이션의 선택은 모델에 큰 영향을 미침&lt;/li&gt;
&lt;li&gt;후속 미세 조정으로 이러한 영향을 쉽게 지울 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모델은 최신 데이터로 지속적으로 재훈련되어야 함&lt;/li&gt;
&lt;li&gt;새로운 데이터에 대한 미세 조정이 환각 문제를 악화시킬 수 있음(&lt;a href=&quot;https://www.youtube.com/watch?v=hhiLw5Q_UFg&amp;amp;ab_channel=BerkeleyEECS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;schulman, 2023&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;사전 훈련에서 다루지 않은 정보로 모델을 미세 조정할 때의 잠재적 부작용을 인식해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Book(전반적으로 높은 품질) 제외하고 품질 필터링이 데이터 수를 줄임에도 불구하고 항상 높은 효과를 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업/도메인의 성능은 단순히 저품질 데이터를 얼마나 제거했느냐에만 영향을 받는 것이 아님&lt;/li&gt;
&lt;li&gt;최고 또는 중간 품질의 데이터가 특정 측정 차원에서 얼마나 많이 대표되는지도 중요한 요소&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/14</guid>
      <comments>https://4n3mone.tistory.com/14#entry14comment</comments>
      <pubDate>Thu, 27 Jun 2024 09:37:05 +0900</pubDate>
    </item>
    <item>
      <title>ValueError: The input size is not aligned with the quantized weight shape. This can be caused by too large tensor parallel size.</title>
      <link>https://4n3mone.tistory.com/13</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;에러&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ValueError:&amp;nbsp;The&amp;nbsp;input&amp;nbsp;size&amp;nbsp;is&amp;nbsp;not&amp;nbsp;aligned&amp;nbsp;with&amp;nbsp;the&amp;nbsp;quantized&amp;nbsp;weight&amp;nbsp;shape.&amp;nbsp;This&amp;nbsp;can&amp;nbsp;be&amp;nbsp;caused&amp;nbsp;by&amp;nbsp;too&amp;nbsp;large&amp;nbsp;tensor&amp;nbsp;parallel&amp;nbsp;size.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문제상황&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPTQ (8bit) 로 양자화한 QWEN2-72B를 vllm으로 서빙하려고 할 때 해당 에러 발생&lt;/p&gt;
&lt;pre id=&quot;code_1718698918357&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;llm = LLM(model=model_path, tokenizer=model_path, tensor_parallel_size=2, quantization='gptq')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tensor_parallel_size를 1,2,4 무엇으로 해도 똑같은 에러가 발생함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;원인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 &lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;&lt;b&gt;&lt;i&gt;intermediate_size&lt;/i&gt;&lt;/b&gt;가 &lt;b&gt;&lt;i&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot;&gt;quantized group_size* tensor-parallel-size &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&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;
&lt;p&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;QWEN2의 intermediate_size는 29568이고, 나는 GPTQ의 group_size를 128로 양자화했었다.(거의 모든 예시 코드에서 128로 설정함)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;29568/128 = 231이고, 이는 1,2,4 아무것으로도 나누어지지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;해결방법&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;group_size=64 로 다시 GPTQ 양자화를 하여 해결하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;ref&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #1f2328;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;a href=&quot;https://github.com/vllm-project/vllm/issues/2699&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/vllm-project/vllm/issues/2699&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>공부</category>
      <category>llm</category>
      <category>MLOps</category>
      <category>qwen2</category>
      <category>vLLM</category>
      <category>자연어처리</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/13</guid>
      <comments>https://4n3mone.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 18 Jun 2024 17:27:11 +0900</pubDate>
    </item>
    <item>
      <title>[NLP] PROMETHEUS: INDUCING FINE-GRAINEDEVALUATION CAPABILITY IN LANGUAGE MODELS 논문 간단 리뷰</title>
      <link>https://4n3mone.tistory.com/12</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;1178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xQGL5/btsGu0MiPJT/0qk7dsZn0ffoHBIS8FCTwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xQGL5/btsGu0MiPJT/0qk7dsZn0ffoHBIS8FCTwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xQGL5/btsGu0MiPJT/0qk7dsZn0ffoHBIS8FCTwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxQGL5%2FbtsGu0MiPJT%2F0qk7dsZn0ffoHBIS8FCTwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;562&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;1178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2310.08491.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PROMETHEUS:&amp;nbsp;INDUCING&amp;nbsp;FINE-GRAINEDEVALUATION&amp;nbsp;CAPABILITY&amp;nbsp;IN&amp;nbsp;LANGUAGE&amp;nbsp;MODELS&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kaistAI/prometheus&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;깃허브&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://huggingface.co/datasets/kaist-ai/Feedback-Collection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;데이터셋&lt;/a&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://4n3mone.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FLASK&lt;/a&gt; 논문을 쓴 연구진들이 후속(?) 논문으로 작성한 Fine-grained LLM Evaluator 논문으로 ICLR 2024에 accept 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-4와 같은 priority LLM을 생성된 텍스트에 대한 평가자로 쓰는 것은 다음과 같은 한계가 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Closed-Source 생태계&lt;/b&gt; : 공정하지 못할 수 있고, 중립성과 자율성 부족&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;Uncontrolled visioning&lt;/b&gt; : 버전이 바뀌면 생성 결과를 재현하기 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;prohibited costs&lt;/b&gt; : 가격 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 연구진들은 오픈 소스, 재현 가능, 운용이 비싸지 않은 13B 프로메테우스 언어모델을 공개함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Feedback Collection 데이터셋&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로메테우스 모델은 LLaMA-2-chat 13B 모델을 Feedback Collection 데이터셋으로 파인튜닝한 모델임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;데이터셋을 구축할 때 연구자들이 신경 쓴 것&lt;/u&gt;은 다음의 4가지이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;최대한 많은 레퍼런스&lt;/b&gt;를 데이터셋에 포함시킬 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 답변 길이에 따라 점수가 편향되는것을 방지하기위해 &lt;b&gt;데이터셋에 포함되는 답변의 길이를 통제함&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 데이터셋 내에 포함되는 &lt;b&gt;점수의 분포를 균일&lt;/b&gt;하게 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 지침과 대응의 범위를 &lt;b&gt;사용자가 LLM과 상호작용하는 현실적인 상황으로 제한&lt;/b&gt;함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋의 &lt;u&gt;입력&lt;/u&gt; 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;인스트럭션&lt;/b&gt; : LLM에게 입력되는 프롬프트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;평가해야 할 응답&lt;/b&gt; : 인스트럭션에 대한 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;점수에 대한 기준&lt;/b&gt; : 평가 기준 + 1~5점을 주는 기준 두 가지로 구성되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;레퍼런스 응답&lt;/b&gt; : 5점을 받는 응답의 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋의 &lt;u&gt;출력&lt;/u&gt; 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;피드백&lt;/b&gt; : 응답이 왜 해당 점수를 받아야 하는지에 대한 근거(rationale). CoT와 유사한 형식을 띠고 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;점수&lt;/b&gt; : 1~5 사이의 정수 점수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6mjPR/btsGuNfARqU/90HScFNklVdNAxnijl8mIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6mjPR/btsGuNfARqU/90HScFNklVdNAxnijl8mIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6mjPR/btsGuNfARqU/90HScFNklVdNAxnijl8mIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6mjPR%2FbtsGuNfARqU%2F90HScFNklVdNAxnijl8mIK%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;781&quot; height=&quot;795&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;795&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;데이터셋 구축 과정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&lt;b&gt; Seed Rubric(시드 평가기준) 제작&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 사람이 직접 fine-grained 평가기준을 50개 제작함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;gpt-4를 통한 증강&lt;/b&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;809&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blf5UI/btsGuJjOTo8/sKMCRoJfdMTrkbO9ln6kdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blf5UI/btsGuJjOTo8/sKMCRoJfdMTrkbO9ln6kdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blf5UI/btsGuJjOTo8/sKMCRoJfdMTrkbO9ln6kdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblf5UI%2FbtsGuJjOTo8%2FsKMCRoJfdMTrkbO9ln6kdK%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;558&quot; height=&quot;449&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J95wG/btsGx1C01aq/xVFykBYJz5kTW2KDvRXx90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J95wG/btsGx1C01aq/xVFykBYJz5kTW2KDvRXx90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J95wG/btsGx1C01aq/xVFykBYJz5kTW2KDvRXx90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ95wG%2FbtsGx1C01aq%2FxVFykBYJz5kTW2KDvRXx90%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;553&quot; height=&quot;266&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시드 평가기준을 gpt-4를 통해 강건하고 다양한 1000개의 평가 기준으로 증강함 (In-Context-Learning 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 새로운 기준을 여러 개 만들고(&lt;b&gt;brainstorming&lt;/b&gt;), 그것을 다시 의역(&lt;b&gt;paraphrasing&lt;/b&gt;)해서 합치는 식으로 모델이 일반화할 수 있도록 함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 1000개의 기준을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 기준에 부합하는 인스트럭션 제작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: gpt-4에게 평가 기준과 &lt;b&gt;연관성 있는 인스트럭션을 제작&lt;/b&gt;하도록 해 총 2만개(각 기준당 20개) 제작함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 점수에 맞는 응답 예시 제작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: gpt-4에게 평가 &lt;b&gt;기준의 각 점수에 부합하는 응답 예시를 생성&lt;/b&gt;하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로는 20개의 인스트럭션, 5개의 점수&amp;amp;피드백 조합을 가지고 있는 기준이 1000개로 데이터셋이 구성됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Feedback Collection 데이터셋으로 llama-2-chat 7b와 13b를 훈련시켜 프로메테우스 모델을 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(현재 허깅페이스에 &lt;a href=&quot;https://huggingface.co/kaist-ai/prometheus-8x7b-v2.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;MoE 8*7B&lt;/a&gt;도 올라와있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;성능&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능을 측정하기 위해 데이터셋과 동일한 구조로 이루어진 &lt;b&gt;Feedback Bench&lt;/b&gt;(데이터셋에 있는 seen 1000개, 없는 unseen 50개 중 unseen 만 사용)를 제작하였음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기에 더해 &lt;b&gt;vicuna-bench와 mt-bench에서 각각 80개 프롬프트 추출&lt;/b&gt;해서 각 프롬프트에 맞는 기준 제작해서 사용하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존 flask 데이터셋에서 200개 프롬프트 추출&lt;/b&gt;하여 사용했음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 단순한 점수를 매기는 언어 모델이 아닌 &lt;b&gt;rewarding model로써의 사용 가능성도 가늠&lt;/b&gt;하기 위해 HHH alignment나 MT Bench Judgement와 같은 데이터셋에서도 실험을 진행함&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;650&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCtC2l/btsGwMmaFUz/EthLerLkankDhKW3rxa5UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCtC2l/btsGwMmaFUz/EthLerLkankDhKW3rxa5UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCtC2l/btsGwMmaFUz/EthLerLkankDhKW3rxa5UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCtC2l%2FbtsGwMmaFUz%2FEthLerLkankDhKW3rxa5UK%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;650&quot; height=&quot;397&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인간이 매긴 평가 결과와의 피어슨 상관계수가 gpt-4와 동등한 수준임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7Ejrn/btsGusbHEPE/HpC0ERtsI8IjWyRr4vc5Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7Ejrn/btsGusbHEPE/HpC0ERtsI8IjWyRr4vc5Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7Ejrn/btsGusbHEPE/HpC0ERtsI8IjWyRr4vc5Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Ejrn%2FbtsGusbHEPE%2FHpC0ERtsI8IjWyRr4vc5Pk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;375&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 피드백 퀄리티에 대한 win-rate 또한 gpt-4를 상회함&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;826&quot; data-origin-height=&quot;825&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMMnoh/btsGw2oO8WJ/igVQaWqRWVwJHitHCre32k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMMnoh/btsGw2oO8WJ/igVQaWqRWVwJHitHCre32k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMMnoh/btsGw2oO8WJ/igVQaWqRWVwJHitHCre32k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMMnoh%2FbtsGw2oO8WJ%2FigVQaWqRWVwJHitHCre32k%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;639&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;825&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 벤치에 관해 gpt-4가 평가한 점수와 프로메테우스가 평가한 점수의 상관계수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;llama-2 coarse 모델은 FLASK 데이터셋의 일부만 샘플링해서 파인튜닝한 llama-2 모델임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/to8pv/btsGuoGYtOl/7odSGxMWOcfX7SZBUPUb5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/to8pv/btsGuoGYtOl/7odSGxMWOcfX7SZBUPUb5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/to8pv/btsGuoGYtOl/7odSGxMWOcfX7SZBUPUb5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fto8pv%2FbtsGuoGYtOl%2F7odSGxMWOcfX7SZBUPUb5K%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;655&quot; height=&quot;301&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RLHF에 활용될 수 있는 ranking grading scheme 데이터셋에서도 괜찮은 성능을 보임&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 이것을 위한 데이터로 튜닝되지 않았음에도 이런 성능을 보이는것에 주목&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>prometheus</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/12</guid>
      <comments>https://4n3mone.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 10 Apr 2024 22:39:17 +0900</pubDate>
    </item>
    <item>
      <title>[NLP]FLASK: FINE-GRAINED LANGUAGE MODELEVALUATION BASED ON ALIGNMENT SKILL SETS 논문 리뷰</title>
      <link>https://4n3mone.tistory.com/11</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P69it/btsF2DwB7qh/HfoJwzL4ja2bfqutTTahXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P69it/btsF2DwB7qh/HfoJwzL4ja2bfqutTTahXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P69it/btsF2DwB7qh/HfoJwzL4ja2bfqutTTahXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP69it%2FbtsF2DwB7qh%2FHfoJwzL4ja2bfqutTTahXK%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;574&quot; height=&quot;398&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;887&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2307.10928.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FLASK: FINE-GRAINED LANGUAGE MODEL EVALUATION BASED ON ALIGNMENT SKILL SETS&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kaistAI/FLASK&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kaistai.github.io/FLASK/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Demo&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 소개드릴 논문은 FLASK라는 논문으로, &lt;a href=&quot;https://iclr.cc/virtual/2024/events/Spotlight&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ICLR 2024 Spotlight&lt;/a&gt;에 선정된 논문입니다. 저와 같이 LLM Evaluation에 관심을 갖고 계신 분들은 이 논문을 출판한 KAIST의 서민준 교수님 연구실의 다른 페이퍼들을 팔로잉 해보시는 것도 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 생성물이 인간이 원하는 방향과 얼마나 일치(align)하는 지 평가하는 것은 다음 의 두 가지 특징 때문에 한계점을 가지고 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;instrucion은 여러 능력의 조합을 요구하기 때문에 단일 메트릭으로 측정하기에는 한계가 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;instruction들은 task에 구애받지 않기 때문에 고정된 metric set으로 평가하는 것은 비현실적이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;현재 LLM의 평가는 ROUGE, 정확도와 같은 정량적이고 자동적인 평가방식이나 인간(혹은 언어모델)의 선호도를 전반적으로 평가(flan, chatbot-arena) 하는 평가 방식중 하나를 채택하고 있습니다. 그러나 이 논문에서는 두 가지 방법 모두 한계점이 있다고 지적합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;여러 메트릭을 채택하는 벤치마크는 각각이 다른 기술, 도메인 및 난이도를 대상으로 하기 때문에 확장성이 없습니다. 또한, 이러한 자동 메트릭에 의존하면 해석 가능성과 신뢰성이 제한되며, 자동 메트릭이 표면 형태에 민감하기 때문에 작업별 분석만 가능합니다. 게다가, 선호도에 기반한 단일 점수를 할당하는 것만으로는 응답을 평가할 여러 기준이 있을 수 있기 때문에 온전한 평가를 할 수 없습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;따라서 이 논문에서는 다양한 관점에서 모델의 생성 결과를 평가할 수 있는 &lt;b&gt;세분화된 평가 기준(Fine-grained Criteria)&lt;/b&gt;의 필요성을 주장합니다. 최근 여러 평가 세트를 복합적으로 사용해서 LLM을 평가하거나 세분화된 평가 기준을 사용하는 연구가 늘어나곤 있지만, 이 논문에서는 그런 연구들 또한 고정된 평가 세트를 사용하고 있기 때문에 한계점이 있다고 지적합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X5jnB/btsF3lbbuHF/VnoUWHrAMfpvKAf3C9aAkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X5jnB/btsF3lbbuHF/VnoUWHrAMfpvKAf3C9aAkk/img.png&quot; data-alt=&quot;기존 평가 방식 (a) / FLASK의 평가 방식 (b)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X5jnB/btsF3lbbuHF/VnoUWHrAMfpvKAf3C9aAkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX5jnB%2FbtsF3lbbuHF%2FVnoUWHrAMfpvKAf3C9aAkk%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;907&quot; height=&quot;366&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기존 평가 방식 (a) / FLASK의 평가 방식 (b)&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;FLASK에서는 4가지의 주요 능력을 정의하고 총 12개의 &lt;b&gt;세분화된 능력&lt;/b&gt;을 정의함으로써 복합적인 평가 프로토콜을 구축하고 태스크에 구애받지 않는 능력 평가를 할 수 있도록 시도했습니다. 주요 능력과 세분화된 능력은 각각 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 42.2093%; height: 17px;&quot;&gt;&lt;b&gt;Primary Abilities&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;&lt;b&gt;fine grained skills&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 42.2093%; height: 10px;&quot;&gt;논리적 사고(Logical Thinking)&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 10px;&quot;&gt;Logical Correctness, Logical Robustness, Logical Efficiency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 42.2093%; height: 17px;&quot;&gt;배경 지식(Background Knowledge)&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;Factuality, Commonsense Understanding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 42.2093%; height: 19px;&quot;&gt;문제 해결(Problem Handling)&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;Comprehension, Insightfulness, Completeness, Metacognition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 42.2093%; height: 17px;&quot;&gt;사용자와의 정렬 (User Alignment)&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;Conciseness, Readability, Harmlessness&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터셋 구축 : 평가 항목 수집&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FLASK 평가 데이터셋은 다양한 도메인, 난이도, 태스크를 포함하는 122개의 자연어처리 데이터셋으로부터 1740개의 평가 항목을 수집했습니다. 다양성을 위해서 단일 태스크 평가 데이터셋으로부터는 20개를 초과하여 수집하지 않았다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수집한 평가 항목에 대해 다음과 같은 라벨링을 언어모델을 통해 수행했습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;instruction을 수행하기 위해 필요되는 skill&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;target domain&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;instrruction의 난이도&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 연구에서는 언어 모델의 라벨링에 정당성을 부여하기 위해&lt;u&gt; 200개를 우선 샘플링한 후 인간 평가자와 언어 모델이 라벨링&lt;/u&gt;을 하도록 한 후, 피어슨 상관계수를 측정하여 인간과 언어 모델의 평가가 같은 경향성을 가진다고 판단하여 모든 데이터셋에 대해 gpt-4가 라벨링을 수행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 항목: Instruction을 평가하기 위해 요구되는 &lt;u&gt;핵심적인 능력 3가지를 12개의 세분화된 능력중에 고름&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 항목 : 위키피디아 분류에서 따온 다음의&amp;nbsp; 10가지 도메인 중 한 가지를 고름.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Humanities, Language, Culture, Health, History, Natural Science, Math, Social Science, Technology, and Coding&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 항목 : 다음과 같은 기준을 적용해 1~5의 점수로 분류합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;simple lifestyle knowledge(1), advanced lifestyle knowledge(2), formal education knowledge(3), major-level knowledge(4), and expert-level knowledge(5)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;데이터셋 구축 : 평가 점수 라벨링&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 구축한 평가 데이터셋에 대해 인간 평가자와 언어모델 평가자는 평가 대상 모델이 평가 항목 instruction에 대해서 작성한 답변, 3개의 세분화된 능력에 대한 평가 기준과 함께 전달받고 점수를 평가하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델이 평가할 경우 평가 전에 Chain-of-Thought(CoT) Prompting 기법을 응용하여 &lt;u&gt;점수에 대한 근거도 같이 작성&lt;/u&gt;하도록 유도했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FLASK-HARD&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난이도 평가에서 5점을 받은 89개 항목은 따로 분류하여 FLASK-HARD 서브셋으로 분류하였고, 위에서 평가한 능력별 점수(skill-specific score) 대신 &lt;u&gt;항목 특화 점수(instance-specific score)&lt;/u&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;항목 특화 점수는 각 평가 항목에 대해 언어 모델로 instruction을 수행하기 위해 지켜져야 할 체크리스트(각 세부능력과 연관된)를 생성하고, 이 체크리스트를 얼마나 지켰는지에 대한 점수를 매기는 방식으로 매겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FLASK의 신뢰성 평가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문에서는 대부분의 라벨링을 언어 모델을 통해 진행했기 때문에, 4장에서는 FLASK 평가 데이터셋에 대한 신뢰성을 검증합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인간과 언어모델의 평가 결과 유사성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnDRI/btsF5tOejDV/Ws8Q1s1zLG6PZWYHjP0EK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnDRI/btsF5tOejDV/Ws8Q1s1zLG6PZWYHjP0EK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnDRI/btsF5tOejDV/Ws8Q1s1zLG6PZWYHjP0EK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnDRI%2FbtsF5tOejDV%2FWs8Q1s1zLG6PZWYHjP0EK1%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;635&quot; height=&quot;352&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FLASK 평가 데이터셋에 대한 언어모델의 대답을 평가한 &lt;b&gt;인간과 언어모델의 평가 경향은 대체로 유사&lt;/b&gt;했으나, 두 평가자 모두 완벽하진 않았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인간의 경우 중간 점수에 평가가 쏠리는 경향(central tendency bias)을 보였고, 이에 따라 평가 점수가 정규분포에 다까웠습니다. 또한 코드와 같은 특정 도메인에서는 지식을 활용하기 때문에 더 쉽게 피로를 느꼈다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 평가자의 경우 길이가 길고 장황한 응답에 높은 점수를 주는 편향이 있기 때문에 인간과 다르게 BARD보다&amp;nbsp; GPT3.5에 더 높은 점수를 부여했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;FLASK 평가 결과 분석&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;현재 오픈소스 언어 모델들은 특정 능력에서 주요 모델들보다 확연히 뒤떨어지는 성능을 보인다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VEfye/btsF3T0MCYs/pg6BuV2nqLMxIR8Hgz6m51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VEfye/btsF3T0MCYs/pg6BuV2nqLMxIR8Hgz6m51/img.png&quot; data-alt=&quot;이 논문은 23년 7월에 공개되었다는 것을 참고하세요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VEfye/btsF3T0MCYs/pg6BuV2nqLMxIR8Hgz6m51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVEfye%2FbtsF3T0MCYs%2Fpg6BuV2nqLMxIR8Hgz6m51%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;361&quot; height=&quot;360&quot; data-origin-width=&quot;361&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이 논문은 23년 7월에 공개되었다는 것을 참고하세요.&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;오픈 소스 모델과 closed 모델은 &lt;b&gt;Problem Handling, User Alignment&lt;/b&gt;에서는 &lt;u&gt;큰 차이가 없었으나&lt;/u&gt;, &lt;b&gt;Logical Thinking과 Background Knowledge&lt;/b&gt;에서는 &lt;u&gt;차이가 두드러졌습니다.&lt;/u&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특정 스킬들은 모델 사이즈에 많이 구애받는다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwwZ2r/btsF2MHYXjR/d8Aio1AQm9wc9RlISTG3L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwwZ2r/btsF2MHYXjR/d8Aio1AQm9wc9RlISTG3L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwwZ2r/btsF2MHYXjR/d8Aio1AQm9wc9RlISTG3L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwwZ2r%2FbtsF2MHYXjR%2Fd8Aio1AQm9wc9RlISTG3L0%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;717&quot; height=&quot;578&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TULU라는 모델을 대상으로 7,13,30,65B로 사이즈를 올리면서 FLASK 평가를 실행한 결과 전반적으로 사이즈가 커질수록 성능이 좋아졌으나, &lt;b&gt;Logical Robustness&lt;/b&gt;, &lt;b&gt;Logical Correctness&lt;/b&gt;, 그리고 &lt;b&gt;Logical Efficiency&lt;/b&gt;에서는 그 증가폭이 훨씬 컸습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면에 특정 스킬들은 일정 사이즈 이상 올라가면 성능이 크게 차이나지 않는 것 또한 발견할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Logical Efficiency, Conciseness, , Insightfulness, Metacognition)&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;702&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM3zTV/btsF2OMwxoH/B2HymDgK195nAoKvcMqea1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM3zTV/btsF2OMwxoH/B2HymDgK195nAoKvcMqea1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM3zTV/btsF2OMwxoH/B2HymDgK195nAoKvcMqea1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM3zTV%2FbtsF2OMwxoH%2FB2HymDgK195nAoKvcMqea1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;210&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식과 난이도 측면에서는, &lt;b&gt;instruction의 난이도가 쉬울수록 성능에 모델 크기가 영향을 많이 준다&lt;/b&gt;고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FLASK-HARD에 관해서는 주요 모델들도 성능이 좋지 않다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vm09X/btsF2DEknsN/gkFK14B70IEK9khf6lifNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vm09X/btsF2DEknsN/gkFK14B70IEK9khf6lifNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vm09X/btsF2DEknsN/gkFK14B70IEK9khf6lifNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvm09X%2FbtsF2DEknsN%2FgkFK14B70IEK9khf6lifNK%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;960&quot; height=&quot;335&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;읽으면서 느낀 점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 12개의 세부 스킬에 대한 1~5점 평가 기준과 프롬프트가 상세히 적혀있는게 인상적이었고, 저도 추후 프로젝트 등지에서 유용하게 써먹을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하루가 멀다 하고 새로운 모델 학습 방법론, 모델 구조가 쏟아져 나오는 시기라서 그런지, 1년이 채 되지 않은 이 논문에 등장하는 언어 모델들 또한 조금은 outdated된걸로 느껴져서 아쉬웠습니다.(최근 논문들에서 거의 스탠다드 모델이 된 llama-2가 없는 것이 큰 것 같습니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데모 페이지에서라도 최근 언어 모델들을 많이 업데이트 해주셨으면 좋았겠다는 생각이 들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평가 데이터셋과 프로토콜이 아무리 체계적이고 인간과 align된 평가를 한다고 하더라도, 실제로 그것을 이용하는 곳이 많지 않으면 의미가 많이 퇴색되는 것 같습니다. 앞으로도 LLM Evaluation의 standard라고 칭할 수 있는 패러다임이 등장할 수 있을지 여부가 궁금합니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>llm</category>
      <category>nlp</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/11</guid>
      <comments>https://4n3mone.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 25 Mar 2024 21:47:23 +0900</pubDate>
    </item>
    <item>
      <title>[NLP]MoE(Mixture of Experts)과 Mixtral 살펴보기</title>
      <link>https://4n3mone.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MoE(Mixture of Experts)는 최근 DPO, DUS 등과 더불어 주목받고 있는 LLM의 성능을 높이기 위해 사용되는 방법론 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23년 12월에 Mixtral 8x7B가 공개되었고, 이 모델이 llama2-70B를 상회하는 성능을 보임에 따라 다른 많은 오픈소스 모델에서도 MoE 방법론을 채택하기 시작했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bneMM5/btsEoMJO5TX/GI8jSk4Jpk9ls5RNimrpbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bneMM5/btsEoMJO5TX/GI8jSk4Jpk9ls5RNimrpbk/img.png&quot; data-alt=&quot;24년 2월 기준 오픈소스 리더보드 순위, 상당 수의 모델이 MoE 구조를 채택함&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bneMM5/btsEoMJO5TX/GI8jSk4Jpk9ls5RNimrpbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbneMM5%2FbtsEoMJO5TX%2FGI8jSk4Jpk9ls5RNimrpbk%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;618&quot; height=&quot;284&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;24년 2월 기준 오픈소스 리더보드 순위, 상당 수의 모델이 MoE 구조를 채택함&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;본 포스트에서는 Mixtral 논문과 논문에서 다루고 있는 MoE 관련 개념을 다루도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MoE(Mixture of Experts)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*MoE 개념은 1991년에 처음 제시되었고 SVM, LSTM등의 고전적(?)인 기법에 먼저 사용되었으나 본 포스트에서는 트랜스포머 구조에서 적용되는 MoE를 위주로 다루겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Dense VS Sparse Expert&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEvdRi/btsEtu2YgoI/RqsgAklqKaiH0r0dj6Ewgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEvdRi/btsEtu2YgoI/RqsgAklqKaiH0r0dj6Ewgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEvdRi/btsEtu2YgoI/RqsgAklqKaiH0r0dj6Ewgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEvdRi%2FbtsEtu2YgoI%2FRqsgAklqKaiH0r0dj6Ewgk%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;1595&quot; height=&quot;414&quot; data-origin-width=&quot;1595&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인&amp;nbsp; Dense 트랜스포머 구조(왼쪽)에서는 토큰이 입력된 후 셀프 어텐션 연산을 거치고 나서 똑같은 FFN(Feed Forward network)으로 전달됩니다. 반면 Sparse Expert 모델 구조에서는 각 토큰이 다른 FFN으로 라우팅되어 연산됩니다. 여기서 각각의 FFN을 Expert라고 정의합니다. 이와 같은 구조를 적용하게 되면 Dense Model과 비교해서 연산량은 유사하지만, 각 토큰에 대해 더 특화된 파라미터(unique parameter)를 적용하여 성능을 향상시킬 수 있습니다. 이와 같은 과정은 학습, 추론 두 단계에서 모두 적용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;라우팅 알고리즘과 Top-K 라우팅&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTrDO/btsEuCfDWz6/u3Uhp4wQQFA0MvT9UaTFhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTrDO/btsEuCfDWz6/u3Uhp4wQQFA0MvT9UaTFhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTrDO/btsEuCfDWz6/u3Uhp4wQQFA0MvT9UaTFhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTrDO%2FbtsEuCfDWz6%2Fu3Uhp4wQQFA0MvT9UaTFhk%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;620&quot; height=&quot;577&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅 알고리즘이란 주어진 토큰을 어느 expert에 보내는지 결정하는 것을 의미하고, 이를 위해 학습 가능한 레이어가 이 과정을 담당합니다. 이것을 라우터(Router) 혹은 게이트 레이어(Gate Layer)라고 부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우터는 각 Expert당 하나의 벡터 값으로 이루어져 있으며, 토큰 입력이 들어오면 토큰의 임베딩 벡터와 각 expert를 담당하는 벡터의 합성곱(dot product)을 계산한 후(그림에서 Router Scores부분),&amp;nbsp; 소프트맥스 함수를 통해 어느 expert를 사용할 지 결정하게 됩니다. (그림에서 Nomalized Router Scores 부분)&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;1630&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0TOyx/btsEBXqy80V/gXX2ZfkCNiOFfGHqx6cMPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0TOyx/btsEBXqy80V/gXX2ZfkCNiOFfGHqx6cMPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0TOyx/btsEBXqy80V/gXX2ZfkCNiOFfGHqx6cMPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0TOyx%2FbtsEBXqy80V%2FgXX2ZfkCNiOFfGHqx6cMPK%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;1630&quot; height=&quot;534&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰을 몇 개의 expert에 라우팅하는지에 따라 Top-K 라우팅 알고리즘이라고 칭합니다. Top-1 라우팅의 경우 라우터 스코어가 가장 높은 expert에게 할당하고, Top-2 라우팅은 높은 점수 순으로 2개의 expert에게 토큰을 보내고 각 레이어를 통과한 값들이 가중합되어 다음 레이어로 보내게 됩니다.&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;1654&quot; data-origin-height=&quot;1006&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wXwlh/btsEBlFegpW/sgpHrNDCERrmfXhCkd3UT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wXwlh/btsEBlFegpW/sgpHrNDCERrmfXhCkd3UT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wXwlh/btsEBlFegpW/sgpHrNDCERrmfXhCkd3UT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwXwlh%2FbtsEBlFegpW%2FsgpHrNDCERrmfXhCkd3UT0%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;375&quot; height=&quot;228&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;1006&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도 다양한 라우팅 알고리즘이 존재하지만 본 포스트에서 다루고 있는 Mixtral은 Top-2 라우팅 알고리즘을 채택하였으므로 여기서는 다루지 않겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MoE 모델의 특징&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MoE 구조로 이루어진 모델은 다음과 같은 특징들을 지닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 같은 파라미터를 가진 Dense 모델과 비교해서 훈련과 추론 과정에서 적은 파라미터를 사용하며 그만큼 속도가 더 빠르고, 비용 측면에서 효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 많은 개수의 GPU/TPU 를 가지고 모델을 학습/추론할 때, 데이터 분산을 활용할 때 더욱 효과적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. (dense 모델과 비교하여) 학습 과정이 불안정할 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. (dense 모델과 비교하여) 새로운 도메인에 맞추어 파인 튜닝 되었을 때 성능이 떨어질 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Mixtral 8x7B&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mixtral 8x7B는 Mistral 7B의 구조를 기준으로 8개의 expert(FFN Block)을 사용하는 MoE 모델입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라우팅 알고리즘으로는 Top-2 라우팅을 채택하였으며, 기존 트랜스포머 구조의 FFN Sub-block을 8개의 SwiGLU sub-block 구조의 expert로 대체하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5YaCv/btsEELo1vsa/5ZfZ3ZG4WTwRGZOK7KGAyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5YaCv/btsEELo1vsa/5ZfZ3ZG4WTwRGZOK7KGAyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5YaCv/btsEELo1vsa/5ZfZ3ZG4WTwRGZOK7KGAyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5YaCv%2FbtsEELo1vsa%2F5ZfZ3ZG4WTwRGZOK7KGAyK%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;613&quot; height=&quot;117&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 수식은 n개의 expert로 이루어진 MixTral 구조의 토큰 x에 대한 출력값 y 계산 수식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 expert에 대한 routing score를 계산하고 소프트맥스함수를 거친 값이 Top 2안에 든다면 점수를 반영하여 expert에게 넘어가고, 그렇지 않다면 무시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 형식으로 살펴보면 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1707378172445&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import dataclasses
from typing import List

import torch
import torch.nn.functional as F
from simple_parsing.helpers import Serializable
from torch import nn


@dataclasses.dataclass
class MoeArgs(Serializable):
    num_experts: int
    num_experts_per_tok: int


class MoeLayer(nn.Module):
    def __init__(self, experts: List[nn.Module], gate: nn.Module, moe_args: MoeArgs):
        super().__init__()
        assert len(experts) &amp;gt; 0
        self.experts = nn.ModuleList(experts)
        self.gate = gate
        self.args = moe_args

    def forward(self, inputs: torch.Tensor):
        # Step 1 : Expert로 보내기 위한 gate linear layer 통과
        gate_logits = self.gate(inputs)
        # Step 2 : gate logits에 대해 Top-K개 Expert 뽑기
        weights, selected_experts = torch.topk(gate_logits, self.args.num_experts_per_tok)
        # Step 3 : Top-K개의 experts에 대한 weights 구하기 (by softmax)
        weights = F.softmax(weights, dim=1, dtype=torch.float).to(inputs.dtype)
        results = torch.zeros_like(inputs)

        # N개의 experts 돌면서 순회
        for i, expert in enumerate(self.experts):
            # Step 4 : i_th expert에 해당하는 tokens 뽑기
            batch_idx, nth_expert = torch.where(selected_experts == i)
            # Step 5 : i_th expert에 해당하는 token들 i_th expert에 통과
            # Step 6 : 통과된 결과값에 expert weight 반영
            results[batch_idx] += weights[batch_idx, nth_expert, None] * expert(
                inputs[batch_idx]
            )
        return results&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 코드 : &lt;a href=&quot;https://github.com/mistralai/mistral-src/blob/main/mistral/moe.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;미스트랄 깃허브&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석 : &lt;a href=&quot;https://sooftware.io/moe/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;김수환님 블로그&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전학습된 Mixtral을 Instruction+Feedback 데이터셋과 DPO 방법으로 파인튜닝한 Mixtral-Instruct는 mixtral 논문 작성일 기준으로 가중치가 공개된 LLM 중 MT-Bench에서 가장 높은 성능을 보여주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(포스트 작성 시점에서는 mistral사의 새 모델인 mistral-medium 모델보다 뒤처지지만, API based 모델이므로 여전히 open weight 중에서는 가장 높은 점수입니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl28TD/btsEEvfNRo4/XAdHipfbHWcNCfu7nganAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl28TD/btsEEvfNRo4/XAdHipfbHWcNCfu7nganAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl28TD/btsEEvfNRo4/XAdHipfbHWcNCfu7nganAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl28TD%2FbtsEEvfNRo4%2FXAdHipfbHWcNCfu7nganAk%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;635&quot; height=&quot;339&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;라우팅 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mixtral 연구진들은 각각의 expert가 도메인별로(수학, 생물학, 철학 등) 특화되어있는지를 검증하기 위해 Pile 데이터셋을 활용해 실험했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험 결과, 라우터들이 각각의 expert에게 토큰을 할당하는 패턴이 arxiv 논문 문서들,생물학 문서들(PubMed), 철학 문서들(PhilPapers)에서는 굉장히 유사하게 나타나는 반면, 수학 도메인 문서에서는 다른 분포를 가지는 것을 확인할 수 있었습니다.&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;1622&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chSIID/btsEBsYXnef/4IwH3WOjIaGw3VXQCEh5J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chSIID/btsEBsYXnef/4IwH3WOjIaGw3VXQCEh5J1/img.png&quot; data-alt=&quot;각 토큰이 어느 expert에게 라우팅되는지를 색으로 칠해 나타냄&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chSIID/btsEBsYXnef/4IwH3WOjIaGw3VXQCEh5J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchSIID%2FbtsEBsYXnef%2F4IwH3WOjIaGw3VXQCEh5J1%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;1622&quot; height=&quot;970&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;970&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 토큰이 어느 expert에게 라우팅되는지를 색으로 칠해 나타냄&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;그러나 코드, 수학문제, 자연어 구문 등의 다양한 도메인의 토큰이 어느 expert에게 할당되는지를 분석한 결과 각각의 expert들이 선택되는 기준은 도메인 그 자체보다는 문서에서 각 토큰이 가지는 구문적 성질에 더 좌우받는다는 것을 관측할 수 있었습니다. 그리고 이러한 현상은 입력과 출력에 깊게 관여받는 첫 번째 레이어와 마지막 레이어에서 더욱 두드러지게 나타났습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Refernce&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2401.04088.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Mixtral of Experts 논문&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2209.01667.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;A REVIEW OF SPARSE EXPERT MODELS IN DEEP LEARNING 논문&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sooftware.io/moe/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;김수환님 블로그 포스트&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://huggingface.co/mlabonne/phixtral-2x2_8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Phixstral : phi-2 모델에 MoE 방법론을 적용한 모델&lt;/a&gt; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://huggingface.co/models?other=moe&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;허깅페이스 MoE모델 모음&amp;nbsp;&lt;/a&gt;&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>llm</category>
      <category>Mistral 7B</category>
      <category>Mixtral</category>
      <category>Mixtral 8x7B</category>
      <category>nlp</category>
      <category>미스트랄</category>
      <category>믹스트랄</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/10</guid>
      <comments>https://4n3mone.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 8 Feb 2024 17:15:45 +0900</pubDate>
    </item>
    <item>
      <title>[NLP]OPENCHAT: ADVANCING OPEN-SOURCE LANGUAGEMODELS WITH MIXED-QUALITY DATA 논문 리뷰</title>
      <link>https://4n3mone.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2309.11235.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;논문 링크&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://huggingface.co/openchat/openchat_3.5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;허깅페이스&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/imoneoi/openchat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;깃허브&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0PYhw/btsz1lVLTda/cGIPJl2wILH1I5TPo7ZjE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0PYhw/btsz1lVLTda/cGIPJl2wILH1I5TPo7ZjE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0PYhw/btsz1lVLTda/cGIPJl2wILH1I5TPo7ZjE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0PYhw%2Fbtsz1lVLTda%2FcGIPJl2wILH1I5TPo7ZjE1%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;612&quot; height=&quot;178&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ChatGPT와 유사한 성능이 나오는 최초의 7B 언어모델&lt;/li&gt;
&lt;li&gt;다양한 벤치마크에서 오픈소스 언어 모델 중 1위 기록중&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;OpenChat 소개&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1688&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k9aaD/btszYJwcRxq/pFELNi9W81E19nGgosHsZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k9aaD/btszYJwcRxq/pFELNi9W81E19nGgosHsZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k9aaD/btszYJwcRxq/pFELNi9W81E19nGgosHsZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk9aaD%2FbtszYJwcRxq%2FpFELNi9W81E19nGgosHsZK%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;1688&quot; height=&quot;338&quot; data-origin-width=&quot;1688&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 LLM을 파인튜닝하는 방법론에는 SFT(Supervised Fine-Tuning)과 RLFT(Reinforcement Fine-Tuning)이 있는데, SFT는 데이터의 품질을 보장할 수 없다는 단점, RLFT에는 데이터를 구축하는 데에 비용이 많이 들어간다는 단점이 존재한다. OpenChat은 이러한 단점을 극복하기 위해 데이터 소스에 따라 강화학습 보상을 다르게 부여하는 &lt;b&gt;C(onditioned)-RLFT&lt;/b&gt; 방법론을 제시한다.&amp;nbsp; OpenChat13B 모델은 오픈 소스 13B 모델 중에서 가장 좋은 성능을 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SFT와 RLFT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPv2nZ/btsz1gUJjVZ/gB1InVTMgDUE8J4Nybg6Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPv2nZ/btsz1gUJjVZ/gB1InVTMgDUE8J4Nybg6Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPv2nZ/btsz1gUJjVZ/gB1InVTMgDUE8J4Nybg6Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPv2nZ%2Fbtsz1gUJjVZ%2FgB1InVTMgDUE8J4Nybg6Uk%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;110&quot; height=&quot;68&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스트럭션 xi와 응답 yi로 구성된 대화 데이터셋&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nWaMV/btszYDbNdkR/oMTkXkNDmpwc8gyz6pfh6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nWaMV/btszYDbNdkR/oMTkXkNDmpwc8gyz6pfh6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nWaMV/btszYDbNdkR/oMTkXkNDmpwc8gyz6pfh6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnWaMV%2FbtszYDbNdkR%2FoMTkXkNDmpwc8gyz6pfh6k%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;62&quot; height=&quot;64&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전학습된 언어 모델&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;170&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FGfyt/btszYFOeJLA/Jy55CFqVbaQVDzo2isjiK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FGfyt/btszYFOeJLA/Jy55CFqVbaQVDzo2isjiK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FGfyt/btszYFOeJLA/Jy55CFqVbaQVDzo2isjiK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFGfyt%2FbtszYFOeJLA%2FJy55CFqVbaQVDzo2isjiK0%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;65&quot; height=&quot;25&quot; data-origin-width=&quot;170&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파인튜닝된 언어 모델&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Supervised Fine-Tuning(SFT)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/szHPR/btszYHyo1lF/Kxz679Pal53kpzjUh8m9hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/szHPR/btszYHyo1lF/Kxz679Pal53kpzjUh8m9hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/szHPR/btszYHyo1lF/Kxz679Pal53kpzjUh8m9hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FszHPR%2FbtszYHyo1lF%2FKxz679Pal53kpzjUh8m9hK%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;54&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SFT는 대화 데이터셋을 MLE와 같은 지도학습으로 파인튜닝하는 기법이다. 파인튜닝한 모델이 높은 성능을 내기 위해서는 데이터셋 D가 굉장히 높은 품질을 가져야 하는데, 이는 SFT 방법에서는 데이터셋의 모든 데이터를 동등하게(uniformly) 다루기 때문이다. 그러나 SFT를 하기 위한 품질 높은 데이터셋을 구축하는 것은 굉장히 비용이 많이 드는 일이다. 따라서 현존하는 대부분의 오픈 소스 LLM들은 비용 문제로 인해 품질을 보장할 수 없는 데이터로 이루어진 대화 데이터를 파인튜닝에 사용한다. 이는 필연적으로 생성 결과물의 품질 하락으로 이루어질 수 밖에 없다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Reinforcement Learning Fine-Tuning(RLFT)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/momCQ/btszXLg1a8r/7J6d8DafCb4TrXcHA5hLqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/momCQ/btszXLg1a8r/7J6d8DafCb4TrXcHA5hLqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/momCQ/btszXLg1a8r/7J6d8DafCb4TrXcHA5hLqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmomCQ%2FbtszXLg1a8r%2F7J6d8DafCb4TrXcHA5hLqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;47&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RLFT는 인간 피드백이나 사전에 정의된 classifiers에 따라서 보상을 부여하는 구조로, 이 보상을 최대화하는 식으로 LLM을 파인튜닝한다. 보상 r(x,y)는 바람직한 반응에는 높은 값을, 나쁜 반응에는 낮은 값을 할당하며 파인튜닝된 LLM을 학습시킨다. 가장 많이 사용하는 강화학습을 활용한 LLM 파인튜닝 프레임워크는 KL-정규화 RL이다. 이는 파인 튜닝된 LLM에 KL 패널티를 부여하여 데이스 모델로부터 너무 멀어지지 않도록 한다. (수식에서 빼는 부분) 이는 강화학습의 보상을 최대화 하려나 원래 모델의 분표가 망가지는 (distribution collapse)일을 방지한다. RLFT에서 중요한 것은 높은 퀄리티의 보상 신호이다. 그러나 인간의 피드백을 모델을 학습시킬 수 있을 만큼 충분히 모으는 것은 비용이 많이 드는 일이고, 이는 오픈 소스 모델이 강화학습 기법을 학습에 도입하는 것을 망설이게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;OpenChat&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenChat은 위에서 소개한 방법들의 한계점을 극복하기 위해 완성도가 높지 않은 (sub-optimal) 데이터셋과 높은 퀄리티/전문가에 의해 제작된 데이터셋 모두를 활용하여 파인튜닝할 수 있는 방법론을 사용하였다. 가장 유명한 SFT 데이터셋인 ShareGPT (vicuna를 학습시킬 때 사용됨)은 gpt-4와 gpt-3.5 두 가지 소스로부터 가져온 데이터로 구성되어 있는데, 각각 높은 퀄리티 데이터셋과 낮은 퀄리티 데이터셋으로 간주할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;데이터의 퀄리티 차이만으로 정확한 보상 신호(fine-grained reward signals)를 주는 것은 불가능하지만, 내재적이거나(implicit) 약하고 거친 보상신호(coarse-grained reward imformation)로는 취급할 수 있다. 따라서 본 논문에서는 파인튜닝된 언어모델에 데이터 소스를 반영한 새로운 정규화 방법을 적용하는 것을 제안한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Class-Conditioned Dataset and Rewards&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mdCWt/btszX0L1amA/jwA4ALEkDj6C499yrGe99k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mdCWt/btszX0L1amA/jwA4ALEkDj6C499yrGe99k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mdCWt/btszX0L1amA/jwA4ALEkDj6C499yrGe99k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmdCWt%2FbtszX0L1amA%2FjwA4ALEkDj6C499yrGe99k%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;41&quot; height=&quot;26&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전문가 데이터셋&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c18uoY/btszYGTXAbs/7uDt4k2H6w7F2atbxDP3z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c18uoY/btszYGTXAbs/7uDt4k2H6w7F2atbxDP3z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c18uoY/btszYGTXAbs/7uDt4k2H6w7F2atbxDP3z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc18uoY%2FbtszYGTXAbs%2F7uDt4k2H6w7F2atbxDP3z0%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;41&quot; height=&quot;25&quot; data-origin-width=&quot;100&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차선책 데이터셋&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXoGUM/btsz1IXMdHQ/51sHdPtxBaOUn7DClRlNu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXoGUM/btsz1IXMdHQ/51sHdPtxBaOUn7DClRlNu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXoGUM/btsz1IXMdHQ/51sHdPtxBaOUn7DClRlNu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXoGUM%2Fbtsz1IXMdHQ%2F51sHdPtxBaOUn7DClRlNu1%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;231&quot; height=&quot;41&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 두 데이터셋의 소스를 라벨링하여 새로운 데이터셋을 구축한다. 이 데이터셋으로 다음과 같은 거친 보상 신호를 인코딩 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RgqL1/btsz213BRCl/eyL0nCdErTze3BEwbdXtMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RgqL1/btsz213BRCl/eyL0nCdErTze3BEwbdXtMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RgqL1/btsz213BRCl/eyL0nCdErTze3BEwbdXtMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRgqL1%2Fbtsz213BRCl%2FeyL0nCdErTze3BEwbdXtMk%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;744&quot; height=&quot;83&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차선책 데이터에 대한 보상을 전문가 데이터셋에 대한 보상보다 낮게 설정함으로써 파닝튜닝한 모델이 높은 퀄리티의 응답에 가깝게 학습되도록 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Fine-Tuning via C(onditioned)-RLFT&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 식에서 부여하는 보상이 매우 거친 방식으로 책정되었기 때문에 추가적인 정보를 제공해야 한다. &lt;span style=&quot;background-color: #fdfdfd; color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;오프라인 RL의 목표 조건 지도 학습에서 영감을 얻은 &lt;b&gt;C-RLFT&lt;/b&gt;를 소개합니다. 이는 목표/결과 조건 정책에서 적절한 정보를 조건화함으로써 최적화된 성능을 복구할 수 있다. C-RLFT의 핵심은 2가지이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;LLM을 파인튜닝 할 때 class-condition 에 따라 하는 것&lt;/li&gt;
&lt;li&gt;RL 정규화 시 원래의 사전학습 모델 대신 클래스 정보를 답고 있는 모델을 사용하는 것&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Class-conditioned policy&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현존하는 방법으로 바로 파인튜닝하는 것 대신 다음과 같이 데이터들의 소스를 반영한 토큰을 삽입하는 방법을 사용함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdeUGQ/btsz3ODiB4h/KNPdXZEjJ9Yl5vmFvK0131/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdeUGQ/btsz3ODiB4h/KNPdXZEjJ9Yl5vmFvK0131/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdeUGQ/btsz3ODiB4h/KNPdXZEjJ9Yl5vmFvK0131/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdeUGQ%2Fbtsz3ODiB4h%2FKNPdXZEjJ9Yl5vmFvK0131%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;1806&quot; height=&quot;470&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서 &amp;lt;|end.of.turn|&amp;gt; 토큰은 EOS 토큰과 유사한 기능을 하나, 사전학습 시 학습한 EOS 토큰과 모델이 착각하지 않도록 새로 추가한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Policy optimization&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C-RLFT에서는 거칠게 정제된(coarse-grained) 데이터 소스 보상 체계를 만들기 위해 위에서 설명했던 KL 정규화 강화학습 식에서 약간의 수정을 가했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crTnHm/btszYngr5J7/BrNcsCTkx0vxHG9kYOXG6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crTnHm/btszYngr5J7/BrNcsCTkx0vxHG9kYOXG6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crTnHm/btszYngr5J7/BrNcsCTkx0vxHG9kYOXG6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrTnHm%2FbtszYngr5J7%2FBrNcsCTkx0vxHG9kYOXG6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;75&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 원본 KL Regularized RL 식과 다른 점은 사전학습 모델 자리에 class-conditioned 데이터셋으로 학습된 모델이 들어갔다는 점이다. 이와 같은 구조를 채택한 이유는 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;현존하는 대부분의 오픈 소스 사전학습 LLM들은 API 기반 모델들(gpt-4 등)에 비해 성능이 좋지 못하다. 이는 곧 gpt-3.5로부터 모은 D_sub 데이터조차 사전학습 모델보다 퀄리티가 높다는 것을 의미한다.&lt;/li&gt;
&lt;li&gt;class-conditioned 방법으로 학습한 모델은 데이터 소스에 관한 추가 정보를 담고 있어서 데이터의 퀄리티를 차별화 할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 방법론의 목적함수는 다음과 같고, KL divergence의 값을 최소화하는 방향으로 학습된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btpYQW/btszX2cm7ia/kK7WD2Lq9CIhAKAV6d9h30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btpYQW/btszX2cm7ia/kK7WD2Lq9CIhAKAV6d9h30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btpYQW/btszX2cm7ia/kK7WD2Lq9CIhAKAV6d9h30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtpYQW%2FbtszX2cm7ia%2FkK7WD2Lq9CIhAKAV6d9h30%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;627&quot; height=&quot;180&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 목적함수는 정확한 보상 라벨링을 요구하지 않으며, 대신 모델의 생성물 결과의 좋고 나쁨을 구별하는 방법을 사용한다. 또한 사전학습된 모델을 사용하지 않음으로써 PPO를 사용하는 다른 강화학습 방법론들과 다르게 사전학습 모델을 로드할 필요가 없고, 그만큼 컴퓨팅 자원을 아낄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Model inference&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;높은 퀄리티의 결과물을 얻기 위해, 학습 시 사용했던 GPT-4 프롬프트를 추론 때에도 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cts12F/btsz5oYZGTB/qV9Xe3hzXaKMOhgHqEXizK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cts12F/btsz5oYZGTB/qV9Xe3hzXaKMOhgHqEXizK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cts12F/btsz5oYZGTB/qV9Xe3hzXaKMOhgHqEXizK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcts12F%2Fbtsz5oYZGTB%2FqV9Xe3hzXaKMOhgHqEXizK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;645&quot; height=&quot;45&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델 실험&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사용된 벤치마크&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AlpacaEval&lt;/li&gt;
&lt;li&gt;MT-bench&lt;/li&gt;
&lt;li&gt;Vicuna-bench&lt;/li&gt;
&lt;li&gt;AGIEval&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;베이스라인 모델&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;gpt-4&lt;/li&gt;
&lt;li&gt;gpt-3.5&lt;/li&gt;
&lt;li&gt;claude&lt;/li&gt;
&lt;li&gt;llama-2-chat (SFT, RLHF)&lt;/li&gt;
&lt;li&gt;wizardlm, guanaco, ultralm, vicuna (SFT)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;gpt에 의한 평가 벤치마크 실험&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BLdmM/btsz5BRrcaA/KaDUGSoFhOYmGguLTvUYDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BLdmM/btsz5BRrcaA/KaDUGSoFhOYmGguLTvUYDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BLdmM/btsz5BRrcaA/KaDUGSoFhOYmGguLTvUYDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBLdmM%2Fbtsz5BRrcaA%2FKaDUGSoFhOYmGguLTvUYDk%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;1884&quot; height=&quot;808&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AlpacaEval, MT-bench, Vicuna-bench와 같은 벤치마크들은 gpt-4 나 alpaca_eval_gpt와 같은 언어 모델을 평가자로 사용하고, 인간 평가와 비교했을 때 신뢰성이 있다고 주장되었다. 평가 결과 같은 13B수준 모델들 중에서는 vicuna-bench를 제외한 2개의 벤치마크에서 가장 좋은 성능을 보였으며, 파라미터가 더 많은 모델들과도 경쟁할만한 결과를 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfl6gm/btsz1R83NL9/0TSD46IkZR0YuyAnkUCq30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfl6gm/btsz1R83NL9/0TSD46IkZR0YuyAnkUCq30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfl6gm/btsz1R83NL9/0TSD46IkZR0YuyAnkUCq30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfl6gm%2Fbtsz1R83NL9%2F0TSD46IkZR0YuyAnkUCq30%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;1800&quot; height=&quot;624&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MT-bench 벤치마크 비교 결과 API 기반 언어 모델들보다는 떨어지지만 오픈 소스 언어 모델중에서는 가장 좋은 걸 확인할 수 있었다. (심지어 70B 모델보다도)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반화 성능을 확인하기 위해 AGIEval 벤치마크 점수를 확인 결과 llama-2-13b보다 평균 점수가 더 높은 것을 확인할 수 있다. (다른 베이스라인 모델들은 그렇지 못함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(mixed-quality data, ablation studies 생략)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Revealing secrets of C-RLFT&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2TxkG/btsz12bygKy/k7Ytp5QTH9MfVKyKofZAw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2TxkG/btsz12bygKy/k7Ytp5QTH9MfVKyKofZAw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2TxkG/btsz12bygKy/k7Ytp5QTH9MfVKyKofZAw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2TxkG%2Fbtsz12bygKy%2Fk7Ytp5QTH9MfVKyKofZAw0%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;1880&quot; height=&quot;706&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ablation studty에서 사용한 SFT 학습 방법만 사용한 openchat-13b와 C-RLFT를 적용한 원래 버전을 비교하기 위해 2000개의 gpt-4, gpt-3.5 대화를 무작위 선별해 임베딩을 추출했다. 그 후 UMAP 기법을 사용하여 차원축소 후 시각화 결과 두 가지 모델에서 모두 클러스터터가 어느정도 생성되어 있지만 SFT버전 모델의 임베딩은 대화 소스의 구분이 없는 반면 C-RLFT 버전은 데이터 소스에 따라 임베딩이 확연하게 다르게 나타나는 모습을 보인다.&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;830&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUKzM3/btsz3NEZivU/MSupTXq9XTPxYXhREiRwXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUKzM3/btsz3NEZivU/MSupTXq9XTPxYXhREiRwXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUKzM3/btsz3NEZivU/MSupTXq9XTPxYXhREiRwXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUKzM3%2Fbtsz3NEZivU%2FMSupTXq9XTPxYXhREiRwXK%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;368&quot; height=&quot;247&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추론 단계에서 사용한 class-conditioned prompt 를 바꾸어서 실험해본 결과 성능이 차이난다는것을 확인했다. 이는 곧 openchat 모델이 데이터의 다른 품질을 구분할 수 있으며 또한 gpt-4에서 얻은 데이터가 gpt-3.5에서 얻은 데이터보다 월등하다는 것 또한 의미한다.&lt;/p&gt;</description>
      <category>자연어처리</category>
      <category>llm</category>
      <category>nlp</category>
      <category>OpenChat</category>
      <author>4n3mone</author>
      <guid isPermaLink="true">https://4n3mone.tistory.com/9</guid>
      <comments>https://4n3mone.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 9 Nov 2023 14:58:24 +0900</pubDate>
    </item>
  </channel>
</rss>