<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>아날로그 인간의 컴공 되기</title>
    <link>https://mari970.tistory.com/</link>
    <description>컴공 AI 개발자가 되기 위한 노역입니다</description>
    <language>ko</language>
    <pubDate>Wed, 26 Aug 2026 11:19:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>섬섬옥수수</managingEditor>
    <image>
      <title>아날로그 인간의 컴공 되기</title>
      <url>https://tistory1.daumcdn.net/tistory/4934000/attach/39e11ae4a9f546c7a0f0deaf1e469977</url>
      <link>https://mari970.tistory.com</link>
    </image>
    <item>
      <title>Visual Instruction Tuning (LLaVA paper) 논문 정리</title>
      <link>https://mari970.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2304.08485&quot;&gt;https://arxiv.org/pdf/2304.08485&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;5:1-5:125&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;많이 사용하는 비전-언어모델 튜닝에 많이 사용된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;5:1-5:125&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;5:1-5:125&quot; data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;machine 이 만들어낸 instruction following 데이터셋은 새로운 task 에서 zero shot 성능을 강화할 수 있었지만, multi-modal 분야에서는 비교적 덜 연구되어왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;10:1-10:147&quot; data-ke-size=&quot;size16&quot;&gt;이 논문에서는 처음으로 language-only GPT-4 모델을 이용하여 언어-이미지 멀티모달 instruction 데이터셋을 생성한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;12:1-12:235&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;12:1-12:235&quot; data-ke-size=&quot;size16&quot;&gt;이 생성된 데이터를 사용하여 &lt;b&gt;LLaVA: Large Language and Vision Assistant&lt;/b&gt; 를 소개한다. 이는 end-to-end로, 학습된 언어모델에 vision encoder 를 연결하여 general-purpose 비전-언어모델을 만든다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;12:1-12:235&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;14:1-14:63&quot; data-ke-size=&quot;size16&quot;&gt;평가를 위해 2가지 evaluation benchmark 를 만들었다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;14:1-14:63&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;16:1-16:142&quot; data-ke-size=&quot;size16&quot;&gt;GPT-4 와 비교하여 꽤 좋은 실험 결과를 얻었다. 생성한 visual instruction tuning data, our model, 와 code 는 public 이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;16:1-16:142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;16:1-16:142&quot; data-ke-size=&quot;size26&quot;&gt;3. GPT-assisted Visual Instruction Data Generation&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nleJA/btsNSNxRCbl/Fsk7EnKT5KLrA1qnKbZZ71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nleJA/btsNSNxRCbl/Fsk7EnKT5KLrA1qnKbZZ71/img.png&quot; data-alt=&quot;Visual Instruction Tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nleJA/btsNSNxRCbl/Fsk7EnKT5KLrA1qnKbZZ71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnleJA%2FbtsNSNxRCbl%2FFsk7EnKT5KLrA1qnKbZZ71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;431&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Instruction Tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-sourcepos=&quot;16:1-16:142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;16:1-16:142&quot; data-ke-size=&quot;size16&quot;&gt;GPT 를 프롬프팅하기 위해 context 로 이미지 설명 캡션이랑 bounding box 좌표가 컨텍스트로 주어진다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;23:1-23:112&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;23:1-23:112&quot; data-ke-size=&quot;size16&quot;&gt;그리고 그에 대한 3가지 response 를 얻는다. GPT 에서는 이미지를 따로 주지는 않는다.**&lt;/p&gt;
&lt;p data-sourcepos=&quot;23:1-23:112&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-sourcepos=&quot;23:1-23:112&quot; data-ke-size=&quot;size26&quot;&gt;4. Visual Inst Tuning&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1 구조&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/px38W/btsNQFO5xWF/o1amaZwL3kumT02OKKcKX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/px38W/btsNQFO5xWF/o1amaZwL3kumT02OKKcKX0/img.png&quot; data-alt=&quot;Visual Instruction Tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/px38W/btsNQFO5xWF/o1amaZwL3kumT02OKKcKX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpx38W%2FbtsNQFO5xWF%2Fo1amaZwL3kumT02OKKcKX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;206&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Instruction Tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 모델로는 Vicuna fϕ(&amp;middot;) 를 사용,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;31:1-31:96&quot; data-ke-size=&quot;size16&quot;&gt;Xv 는 이미지 input 으로, visual encoder 로는 CLIP 의 ViT-L/14 를 사용. =&amp;gt; Zv = g(Xv)&lt;/p&gt;
&lt;p data-sourcepos=&quot;33:1-33:112&quot; data-ke-size=&quot;size16&quot;&gt;여기서도 text embedding space 에 이미지 임베딩을 연결하기 위해 linear layer W를 사용한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;33:1-33:112&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ppIET/btsNQH7fPUz/MThs7Xg97k1DaJGZQpw0n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ppIET/btsNQH7fPUz/MThs7Xg97k1DaJGZQpw0n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ppIET/btsNQH7fPUz/MThs7Xg97k1DaJGZQpw0n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FppIET%2FbtsNQH7fPUz%2FMThs7Xg97k1DaJGZQpw0n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;34&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;44&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;Hv 는 visual token 이다. (하지만 기본적인 linear layer 말고 더 복잡한 매핑을 할 수 있다, future work)&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;4.2 Training&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;71&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UWzkj/btsNSzta0kL/mHYN7XeV19D7ACAIkUgjQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UWzkj/btsNSzta0kL/mHYN7XeV19D7ACAIkUgjQ0/img.png&quot; data-alt=&quot;Visual Instruction Tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UWzkj/btsNSzta0kL/mHYN7XeV19D7ACAIkUgjQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUWzkj%2FbtsNSzta0kL%2FmHYN7XeV19D7ACAIkUgjQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;63&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;71&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Instruction Tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 인풋 Xv 에 대한 멀티턴 대화 데이터 (X1q, X1a, &amp;middot; &amp;middot; &amp;middot; , XTq, XTa) 를 생성한다. (T 는 멀티턴 total 개수)&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-44:142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-44:142&quot; data-ke-size=&quot;size16&quot;&gt;멀티턴의 모든 답변을 assistant 의 response 로 처리하고 t번째 Xt_instruct = instruction 을 아래 식과 같이 정리한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-44:142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR80b4/btsNR3amjwb/UlNbxYOgZyRr9hvysPQVUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR80b4/btsNR3amjwb/UlNbxYOgZyRr9hvysPQVUk/img.png&quot; data-alt=&quot;Visual Instruction Tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR80b4/btsNR3amjwb/UlNbxYOgZyRr9hvysPQVUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR80b4%2FbtsNR3amjwb%2FUlNbxYOgZyRr9hvysPQVUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;71&quot; data-origin-width=&quot;739&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Instruction Tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 table 2에서 설명한 multi-modal instruction 시퀀스의 통합 형식이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;50:1-50:77&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;50:1-50:77&quot; data-ke-size=&quot;size16&quot;&gt;기존의 auto-regressive 학습을 통해 LLM 을 instruction-tuning 한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;52:1-52:100&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;52:1-52:100&quot; data-ke-size=&quot;size16&quot;&gt;길이 L 인 타겟 Xa 에 대한 probability 는 아래 식과 같다. &amp;theta; 는 trainable parameter,&lt;/p&gt;
&lt;p data-sourcepos=&quot;52:1-52:100&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/swDsv/btsNR9ogRRh/alKfJC3Op2uehJrSP4b8b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/swDsv/btsNR9ogRRh/alKfJC3Op2uehJrSP4b8b0/img.png&quot; data-alt=&quot;Visual Instruction Tuning&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/swDsv/btsNR9ogRRh/alKfJC3Op2uehJrSP4b8b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FswDsv%2FbtsNR9ogRRh%2FalKfJC3Op2uehJrSP4b8b0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;210&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Visual Instruction Tuning&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 위 그림 설명 : 2 turn conversation 에 대한 설명이고, 은 '###' 이다. (Vicuna-v0 사용)&lt;/p&gt;
&lt;p data-sourcepos=&quot;58:1-58:59&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;58:1-58:59&quot; data-ke-size=&quot;size16&quot;&gt;위 그림에서 초록색 부분만 loss 를 계산한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;58:1-58:59&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-sourcepos=&quot;58:1-58:59&quot; data-ke-size=&quot;size20&quot;&gt;Stage 1: Pre-training for Feature Alignment&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋은 CC3M 에서 595K 개의 image-text pairs 를 필터링한다. 이 데이터를 사용하여 3번의 데이터 생성 방법에 따라 instruction-following 데이터로 변환된다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;63:1-63:49&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;63:1-63:49&quot; data-ke-size=&quot;size16&quot;&gt;각 샘플은 single turn 대화로 처리된다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;65:1-65:283&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;65:1-65:283&quot; data-ke-size=&quot;size16&quot;&gt;X_instruct 를 만들기 위해 이미지 Xv와 질문 Xq 를 랜덤으로 샘플링한다. 이때 Xq는 assistant 에 이미지를 간단하게 설명해달라고 하는 언어 명령어이다. Xa 는 기존 데이터셋의 원래 있던 캡션으로, ground-truth 로 사용된다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;67:1-67:111&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;67:1-67:111&quot; data-ke-size=&quot;size16&quot;&gt;training 에서는 LLM 과 visual encoder 둘 다 freeze 하고 projection 파라미터 &amp;theta; 만 학습시킨다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;67:1-67:111&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-sourcepos=&quot;67:1-67:111&quot; data-ke-size=&quot;size20&quot;&gt;Stage 2: Fine-tuning End-to-End&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항상 visual encoder 는 freeze 하고, projection layer 와 LLM 만 업데이트한다.&lt;/p&gt;</description>
      <category>LLM 관련 논문 정리</category>
      <category>LLaVA</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/115</guid>
      <comments>https://mari970.tistory.com/115#entry115comment</comments>
      <pubDate>Sat, 10 May 2025 12:44:36 +0900</pubDate>
    </item>
    <item>
      <title>Learning transferable visual models from Natural language supervision 논문 정리</title>
      <link>https://mari970.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CLIP papaer&lt;/p&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/2103.00020&quot;&gt;https://arxiv.org/pdf/2103.00020&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 컴퓨터 비전 시스템은 시각적 개념을 추가로 학습시키기 위해서 항상 새로운 데이터가 필요하다는 단점이 있다. 이미지에 대한 raw text 를 학습하는 것(아마도 캡션) 은 유망한 방법이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;8:1-9:148&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;8:1-9:148&quot; data-ke-size=&quot;size16&quot;&gt;어떤 캡션이 어떤 이미지를 설명하는 것인지 를 학습하는 pre-training 방법이 이미지 representation 을 학습하는 데에 얼마나 효율적인지 보인다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;8:1-9:148&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;8:1-9:148&quot; data-ke-size=&quot;size16&quot;&gt;약 400 million (image, text) pairs 데이터셋을 사용한다. pre-training 이후 자연어를 이용하여 이미 학습되었거나 새로운(downstream task) 비전 개념에 대해 모델이 알 수 있다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;11:1-11:147&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;11:1-11:147&quot; data-ke-size=&quot;size16&quot;&gt;OCR, action recognition in videos, geo-localization 등의 30가지의 다양한 컴퓨터 비전 태스크를 사용하여 benchmarking 하였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;13:1-13:93&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/OpenAI/CLIP&quot;&gt;https://github.com/OpenAI/CLIP&lt;/a&gt; : 학습 코드와 pre-trained 모델의 weight 확인 가능.&lt;/p&gt;
&lt;figure id=&quot;og_1746848023891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining),  Predict the most relevant text snippet given an image&quot; data-og-description=&quot;CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - openai/CLIP&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/OpenAI/CLIP&quot; data-og-url=&quot;https://github.com/openai/CLIP&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9ruNY/hyYPerYjP6/BsJfhinYODLMzKTunOEMoK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/gfHA6/hyYPiullmq/5Ax9P4YGrexkpabyM5WcKk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://github.com/OpenAI/CLIP&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/OpenAI/CLIP&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9ruNY/hyYPerYjP6/BsJfhinYODLMzKTunOEMoK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/gfHA6/hyYPiullmq/5Ax9P4YGrexkpabyM5WcKk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image - openai/CLIP&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Approach&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;1028&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J0hK5/btsNTms7Tbv/tkiIJiH1Simb17nP5FGoLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J0hK5/btsNTms7Tbv/tkiIJiH1Simb17nP5FGoLk/img.png&quot; data-alt=&quot;Learning transferable visual models from Natural language supervision&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J0hK5/btsNTms7Tbv/tkiIJiH1Simb17nP5FGoLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ0hK5%2FbtsNTms7Tbv%2FtkiIJiH1Simb17nP5FGoLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;346&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Learning transferable visual models from Natural language supervision&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-sourcepos=&quot;13:1-13:93&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-sourcepos=&quot;13:1-13:93&quot; data-ke-size=&quot;size23&quot;&gt;2.1. Natural Language Supervision&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자연어 안에 있는 supervision 으로 개념을 학습.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;22:1-22:212&quot; data-ke-size=&quot;size16&quot;&gt;이는 라벨링된 이미지와 비교 했을 때 1-of-N majority vote 를 사용하는 annotation 이 필요없다. 또한 unsupervised 나 self-supervised learning 처럼 제로샷에 flexible 할 수 있다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;22:1-22:212&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-sourcepos=&quot;22:1-22:212&quot; data-ke-size=&quot;size23&quot;&gt;2.2. Creating a Sufficiently Large Dataset&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 3가지 데이터셋이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;27:1-27:81&quot; data-ke-size=&quot;size16&quot;&gt;MS-COCO, Visual Genome : crowd-labeled 데이터셋, 100,000개 학습 데이터.&lt;/p&gt;
&lt;p data-sourcepos=&quot;27:1-27:81&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;29:1-29:218&quot; data-ke-size=&quot;size16&quot;&gt;YFCC100M : 100 million 이미지, 라벨의 퀄리티가 다양하다. 그래서 자연어 제목과 description 만 가진 이미지를 추리면 6~15M 사이즈가 되는데 이는 ImageNet과 비슷한 크기이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;29:1-29:218&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;31:1-31:320&quot; data-ke-size=&quot;size16&quot;&gt;원래 natural language supervision은 매우 많은 양의 데이터셋에서 학습하는 것이 주요 motivation 이었기 때문에, 새로운 400 million (image, text) pairs 데이터셋을 구축하기로 한다. 이때 데이터셋에 포함된 최대 word 개수는 GPT-2 를 학습한 WebText 와 비슷한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;31:1-31:320&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;33:1-33:53&quot; data-ke-size=&quot;size16&quot;&gt;이 데이터셋 이름은 WebImageText (WIT) 이다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;33:1-33:53&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-sourcepos=&quot;33:1-33:53&quot; data-ke-size=&quot;size23&quot;&gt;2.3. Selecting an Efficient Pre-Training Method&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 VirTex 와 비슷하게 이미지 cnn 과 텍스트 transformer 를 함께 학습하여 이미지 캡션을 학습하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;38:1-38:245&quot; data-ke-size=&quot;size16&quot;&gt;bag-of-words encoding baseline 로 시작하여 predictive objective 를 그림 2처럼 contrastive objective로 바꾼다. ImageNet 데이터셋 기준으로 zero-shot transfer 속도에서 효율성이 4배 향상되는 것을 확인하였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;38:1-38:245&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;40:1-40:155&quot; data-ke-size=&quot;size16&quot;&gt;N개의 (image, text) 쌍의 batch 가 주어졌을 때 CLIP 은 batch 안에서 N &amp;times; N 의 가능한 (image, text) 조합을 예측하도록 학습된다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;40:1-40:155&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;42:1-42:244&quot; data-ke-size=&quot;size16&quot;&gt;이를 위해 멀티모달 임베딩 space 에서 batch 안의 N 개 pair 의 text 와 이미지 임베딩은 cos similarity 가 서로 크도록, 나머지 N^2-N 의 틀린 쌍에 대해서는 유사도를 최소화하도록 joint 학습한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;42:1-42:244&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-45:64&quot; data-ke-size=&quot;size16&quot;&gt;이 유사도를 사용하여 symmetric cross entropy loss 를 최적화한다. (그림 3=수도코드) 이는 contrastive learning의 InfoNCE loss 등과 비슷하다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;44:1-45:64&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;47:1-47:177&quot; data-ke-size=&quot;size16&quot;&gt;CLIP 은 이미지 인코더를 ImageNet 데이터셋으로 초기화하거나 텍스트 인코더를 pre-trained weight로 초기화하지 않고 scatch 부터 학습하였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;47:1-47:177&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;49:1-49:245&quot; data-ke-size=&quot;size16&quot;&gt;그리고, representation 과 contrastive embedding space 사이에 non-linear projection 을 사용하지 않았다. 그 대신 linear projection 만 사용하여 인코더의 representation 을 멀티모달 임베딩 space 에 매핑하였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;49:1-49:245&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;51:1-52:136&quot; data-ke-size=&quot;size16&quot;&gt;이 두 버전 사이 training 효율성 차이는 확인하지 못했고, 근데 non linear 는 self-supercised representation 학습 방법에서만 이미지 디테일에 대해 적응된다고 짐작한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;51:1-52:136&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;54:1-54:315&quot; data-ke-size=&quot;size16&quot;&gt;또한 이 연구에서는 CLIP 의 pre-training 데이터셋의 대부분 쌍 데이터가 1문장으로 이루아져잇기 때문에 텍스트 중에서 1개 문장을 균일하게 샘플링하는 텍스트 transformation 함수 t_u 를&amp;nbsp; zhang 논문(아마 medical 적용 visual 모델) 에서 제거하엿다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;56:1-56:56&quot; data-ke-size=&quot;size16&quot;&gt;또한 이미지 transformation 도 간략화하였다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;56:1-56:56&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;58:1-58:133&quot; data-ke-size=&quot;size16&quot;&gt;Resized 이미지에서 랜덤 square crop 하는 것은 학습에서만 사용되는 데이터 augmentation 에서만 사용한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;60:1-60:200&quot; data-ke-size=&quot;size16&quot;&gt;마지막으로 softmax의 logit 을 조절하는 temeprature 타우를 학습중에 log-parameterized multiplicative 스칼라로 사용하여 하이퍼 파라미터로 튜닝할 필요없이한다.&lt;/p&gt;
&lt;p data-sourcepos=&quot;60:1-60:200&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-sourcepos=&quot;60:1-60:200&quot; data-ke-size=&quot;size23&quot;&gt;2.4. Choosing and Scaling a Model&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 인코더는 2가지 모델을 고려중.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-sourcepos=&quot;64:1-67:0&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-sourcepos=&quot;64:1-65:0&quot;&gt;ResNet-50 (ResNet-D improvements, antialiased rect-2 blur pooling) : global average pooling 을 attantion pooling 으로 대체. 이거는 멀티 헤드 QKV 어텐션을 1개 레이어로 구현한건데 이때 이미지 쿼리가 gap pooling 을 거침.&lt;/li&gt;
&lt;li data-sourcepos=&quot;66:1-67:0&quot;&gt;ViT : 기존 모델에 layer norm 을 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-sourcepos=&quot;68:1-68:79&quot; data-ke-size=&quot;size16&quot;&gt;그리고 텍스트 인코더는 63M transformer 를 사용., Max seq len=76(?)&lt;/p&gt;
&lt;p data-sourcepos=&quot;68:1-68:79&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-sourcepos=&quot;70:1-70:153&quot; data-ke-size=&quot;size16&quot;&gt;마지막 레이어의 [EOS] 를 feature representation 을 사용하여 layer norm 하고 linear projection 한 후 멀티모달 임베딩으로 사용.&lt;/p&gt;
&lt;p data-sourcepos=&quot;70:1-70:153&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-sourcepos=&quot;70:1-70:153&quot; data-ke-size=&quot;size23&quot;&gt;2.5. Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mixed-precision, gradient checkpointing 사용 등 학습 조건 기술,,&lt;/p&gt;</description>
      <category>LLM 관련 논문 정리</category>
      <category>clip</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/114</guid>
      <comments>https://mari970.tistory.com/114#entry114comment</comments>
      <pubDate>Sat, 10 May 2025 12:37:13 +0900</pubDate>
    </item>
    <item>
      <title>E5-V: Universal Embeddings with Multimodal Large Language Models 논문 정리</title>
      <link>https://mari970.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/pdf/2407.12580&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2407.12580&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&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;869&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ6ImT/btsNRM02jk1/uhTV4yXOlt63guZI3ZFr91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ6ImT/btsNRM02jk1/uhTV4yXOlt63guZI3ZFr91/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ6ImT/btsNRM02jk1/uhTV4yXOlt63guZI3ZFr91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ6ImT%2FbtsNRM02jk1%2FuhTV4yXOlt63guZI3ZFr91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;324&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;** Multimodal large language models (MLLMs)** 은 비전 및 언어 이해에 매우 큰 발전이지만, 이를 이용한 멀티모달 정보 를 표현하는 데에는 (임베딩) 많은 연구가 이루어지지 않았다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;논문에서는&amp;nbsp;새로운&amp;nbsp;구조인&amp;nbsp;E5-V&amp;nbsp;를&amp;nbsp;제안하여&amp;nbsp;**universal&amp;nbsp;multimodal&amp;nbsp;embeddings**&amp;nbsp;을&amp;nbsp;하도록&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;방법은&amp;nbsp;파인튜닝&amp;nbsp;없이도&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;modality(이미지나&amp;nbsp;텍스트&amp;nbsp;등)&amp;nbsp;의&amp;nbsp;input&amp;nbsp;사이&amp;nbsp;갭을&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;이는&amp;nbsp;이미지-텍스트&amp;nbsp;pair&amp;nbsp;로&amp;nbsp;학습하는&amp;nbsp;기존의&amp;nbsp;멀티모달&amp;nbsp;학습보다&amp;nbsp;training&amp;nbsp;costs를&amp;nbsp;95%&amp;nbsp;까지&amp;nbsp;줄였고,&amp;nbsp;멀티모달&amp;nbsp;학습데이터&amp;nbsp;수집&amp;nbsp;필요를&amp;nbsp;없앴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Related Work&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Multimodal Large Language Models&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MLLMs 는 멀티모달 LLM 이다. BLIP, KOSMOS, LLaMA-Adapter, LLaVA 등&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;2.2 Multimodal Embeddings&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLIP&amp;nbsp;은&amp;nbsp;multimodal&amp;nbsp;embeddings&amp;nbsp;의&amp;nbsp;시초다.&amp;nbsp;text-image&amp;nbsp;retrieval&amp;nbsp;에서&amp;nbsp;좋은&amp;nbsp;성능을&amp;nbsp;나타낸다. &lt;br /&gt;이미지와&amp;nbsp;텍스트에&amp;nbsp;대해&amp;nbsp;서로&amp;nbsp;다른&amp;nbsp;인코더를&amp;nbsp;사용하여&amp;nbsp;contrastive&amp;nbsp;학습으로&amp;nbsp;align&amp;nbsp;한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;CLIP&amp;nbsp;은&amp;nbsp;모델&amp;nbsp;framework&amp;nbsp;로&amp;nbsp;인해&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;한계가&amp;nbsp;있는데,&amp;nbsp;첫&amp;nbsp;번째는&amp;nbsp;CLIP&amp;nbsp;의&amp;nbsp;텍스트&amp;nbsp;인코더가&amp;nbsp;짧은&amp;nbsp;이미지&amp;nbsp;캡션만&amp;nbsp;학습해서&amp;nbsp;복잡한&amp;nbsp;텍스트에&amp;nbsp;대해서는&amp;nbsp;low&amp;nbsp;capacity를&amp;nbsp;보인다는&amp;nbsp;것이다.&amp;nbsp;그래서&amp;nbsp;긴&amp;nbsp;문장에&amp;nbsp;대한&amp;nbsp;검색은&amp;nbsp;성능의&amp;nbsp;한계가&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;또한&amp;nbsp;서로&amp;nbsp;분리되어있는&amp;nbsp;이미지와&amp;nbsp;텍스트&amp;nbsp;인코더&amp;nbsp;때문에&amp;nbsp;composed&amp;nbsp;image&amp;nbsp;retrieval&amp;nbsp;과&amp;nbsp;같은&amp;nbsp;뭐지,,&amp;nbsp;엄청&amp;nbsp;인접해있는?&amp;nbsp;관련있는&amp;nbsp;이미지-텍스트에&amp;nbsp;대해서는&amp;nbsp;성능이&amp;nbsp;낮다. &lt;br /&gt;&lt;br /&gt;universal&amp;nbsp;multimodal&amp;nbsp;embedding&amp;nbsp;태스크에는&amp;nbsp;UNIIR&amp;nbsp;(CLIP을&amp;nbsp;파인튜닝한,)&amp;nbsp;라는&amp;nbsp;연구가&amp;nbsp;있다.&amp;nbsp;visual&amp;nbsp;과&amp;nbsp;텍스트&amp;nbsp;정보를&amp;nbsp;fuse&amp;nbsp;한다. &lt;br /&gt;&lt;br /&gt;또한 VISTA 나 UniVL-DR는 텍스트 인코더에 CLIP 출력값을 더 넣어준다. 하지만 이는 다른 단점도 존재한다. (생략)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. E5-V&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1 Unifying Multimodal Embeddings&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLIP&amp;nbsp;과&amp;nbsp;같은&amp;nbsp;모달리티&amp;nbsp;임베딩&amp;nbsp;연구들에서는&amp;nbsp;이미지와&amp;nbsp;텍스트&amp;nbsp;사이에&amp;nbsp;modality&amp;nbsp;gap&amp;nbsp;이&amp;nbsp;존재하는데&amp;nbsp;이는&amp;nbsp;성능에&amp;nbsp;안좋은&amp;nbsp;영향을&amp;nbsp;준다고&amp;nbsp;설명한다.&amp;nbsp;비슷하게&amp;nbsp;이&amp;nbsp;논문에서는&amp;nbsp;MLLM&amp;nbsp;에서&amp;nbsp;비슷한&amp;nbsp;문제점이&amp;nbsp;나타나는&amp;nbsp;것을&amp;nbsp;확인하였다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJwVA/btsNSzNu5Is/zaIxPYzp1mCIkrI8V0Aqz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJwVA/btsNSzNu5Is/zaIxPYzp1mCIkrI8V0Aqz1/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJwVA/btsNSzNu5Is/zaIxPYzp1mCIkrI8V0Aqz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJwVA%2FbtsNSzNu5Is%2FzaIxPYzp1mCIkrI8V0Aqz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;432&quot; height=&quot;345&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;위&amp;nbsp;그림&amp;nbsp;3.a&amp;nbsp;는&amp;nbsp;COCO&amp;nbsp;데이터셋의&amp;nbsp;이미지-캡션을&amp;nbsp;LLaVA-NeXT-8B&amp;nbsp;모델의&amp;nbsp;last&amp;nbsp;token&amp;nbsp;embeddings을&amp;nbsp;뽑아&amp;nbsp;PCA&amp;nbsp;로&amp;nbsp;표한한&amp;nbsp;그림이다. &lt;br /&gt;&lt;br /&gt;CLIP&amp;nbsp;과&amp;nbsp;비교하였을&amp;nbsp;때&amp;nbsp;MLLM&amp;nbsp;은&amp;nbsp;이미지와&amp;nbsp;텍스트를&amp;nbsp;같은&amp;nbsp;인코더로&amp;nbsp;표현하긴&amp;nbsp;하지만&amp;nbsp;임베딩은&amp;nbsp;modality&amp;nbsp;gap이&amp;nbsp;있음을&amp;nbsp;확인하였다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zWoSQ/btsNStGrbyy/UkUX5X0lpeE6k2C3wddBo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zWoSQ/btsNStGrbyy/UkUX5X0lpeE6k2C3wddBo0/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zWoSQ/btsNStGrbyy/UkUX5X0lpeE6k2C3wddBo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzWoSQ%2FbtsNStGrbyy%2FUkUX5X0lpeE6k2C3wddBo0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;339&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위&amp;nbsp;그림은&amp;nbsp;멀티&amp;nbsp;모달&amp;nbsp;임베딩을&amp;nbsp;위해&amp;nbsp;E5-V를&amp;nbsp;Single&amp;nbsp;modality를&amp;nbsp;학습시킨&amp;nbsp;것이다.&amp;nbsp;프롬프트로&amp;nbsp;멀티모달&amp;nbsp;표현을&amp;nbsp;같은&amp;nbsp;임베딩&amp;nbsp;공간에&amp;nbsp;표현한다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;멀티모달&amp;nbsp;임베딩을&amp;nbsp;unify&amp;nbsp;하기&amp;nbsp;위해&amp;nbsp;MLLM&amp;nbsp;에&amp;nbsp;prompt-based&amp;nbsp;표현&amp;nbsp;방법을&amp;nbsp;제안한다. &lt;br /&gt;&lt;br /&gt;즉,&amp;nbsp;멀티모달&amp;nbsp;입력을&amp;nbsp;단어로&amp;nbsp;표현하도록&amp;nbsp;MLLM&amp;nbsp;에게&amp;nbsp;inst&amp;nbsp;를&amp;nbsp;주는&amp;nbsp;것이다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;때&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;프롬프트를&amp;nbsp;사용한다. &lt;br /&gt;&lt;br /&gt;`&amp;lt;text&amp;gt;&amp;nbsp;\n&amp;nbsp;Summary&amp;nbsp;of&amp;nbsp;the&amp;nbsp;above&amp;nbsp;sentence&amp;nbsp;in&amp;nbsp;one&amp;nbsp;word:` &lt;br /&gt;&lt;br /&gt;`&amp;lt;image&amp;gt;&amp;nbsp;\n&amp;nbsp;Summary&amp;nbsp;above&amp;nbsp;image&amp;nbsp;in&amp;nbsp;one&amp;nbsp;word:` &lt;br /&gt;&lt;br /&gt;그림&amp;nbsp;3.b&amp;nbsp;를&amp;nbsp;보면&amp;nbsp;이렇게&amp;nbsp;프롬프트를&amp;nbsp;사용하여&amp;nbsp;이미지를&amp;nbsp;표현하면&amp;nbsp;텍스트와&amp;nbsp;이미지&amp;nbsp;사이&amp;nbsp;modality&amp;nbsp;gap&amp;nbsp;을&amp;nbsp;없앨&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;프롬프트 디자인은 멀티모달 input 의 의미를 추출하는 부분과 이를 'in one word' 라는 표현을 사용하여 next token embeddings 에 의미를 압축하고 멀티모달 임베딩으로 통합한다.&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;3.2 Single Modality Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멀티모달&amp;nbsp;임베딩을&amp;nbsp;학습하기&amp;nbsp;위해&amp;nbsp; &lt;br /&gt;&lt;br /&gt;임베딩에&amp;nbsp;modality&amp;nbsp;gap&amp;nbsp;이&amp;nbsp;없기&amp;nbsp;때문에&amp;nbsp;텍스트&amp;nbsp;쌍에&amp;nbsp;대해서만&amp;nbsp;학습하여&amp;nbsp;단일&amp;nbsp;모달리티&amp;nbsp;표현&amp;nbsp;기능을&amp;nbsp;멀티&amp;nbsp;모달로&amp;nbsp;변환할&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;그러므로&amp;nbsp;멀티모달&amp;nbsp;training&amp;nbsp;data&amp;nbsp;나&amp;nbsp;이미지와&amp;nbsp;합성된&amp;nbsp;input&amp;nbsp;에&amp;nbsp;의존하지&amp;nbsp;않는다. &lt;br /&gt;&lt;br /&gt;E5-V&amp;nbsp;는&amp;nbsp;MLLMs을&amp;nbsp;contrastive&amp;nbsp;learning&amp;nbsp;을&amp;nbsp;사용하여&amp;nbsp;텍스트&amp;nbsp;쌍을&amp;nbsp;학습한다.&amp;nbsp;학습&amp;nbsp;동안은&amp;nbsp;visual&amp;nbsp;입력이&amp;nbsp;들어가지&amp;nbsp;않고,&amp;nbsp;MLLM&amp;nbsp;에서&amp;nbsp;modality&amp;nbsp;encoder&amp;nbsp;와&amp;nbsp;projector&amp;nbsp;를&amp;nbsp;뺀&amp;nbsp;LLM&amp;nbsp;부분만&amp;nbsp;학습시킨다. &lt;br /&gt;&lt;br /&gt;멀티모달&amp;nbsp;데이터셋과&amp;nbsp;관련없는&amp;nbsp;NLI&amp;nbsp;dataset의&amp;nbsp;sentence&amp;nbsp;pairs&amp;nbsp;(x_i,&amp;nbsp;x_i^+,&amp;nbsp;x_i^&amp;minus;)&amp;nbsp;를&amp;nbsp;사용한다.&amp;nbsp;각각&amp;nbsp;input,&amp;nbsp;pos,&amp;nbsp;neg&amp;nbsp;이다. &lt;br /&gt;&lt;br /&gt;위에&amp;nbsp;있는&amp;nbsp;프롬프트인&amp;nbsp;`&amp;lt;text&amp;gt;&amp;nbsp;\nSummary&amp;nbsp;above&amp;nbsp;sentence&amp;nbsp;in&amp;nbsp;one&amp;nbsp;word:`&amp;nbsp;를&amp;nbsp;사용하여&amp;nbsp;위&amp;nbsp;의&amp;nbsp;sentence&amp;nbsp;pair&amp;nbsp;를&amp;nbsp;&amp;nbsp;(hi,&amp;nbsp;h+i,&amp;nbsp;h&amp;minus;i)&amp;nbsp;임베딩으로&amp;nbsp;바꾼다. &lt;br /&gt;&lt;br /&gt;그리고&amp;nbsp;아래&amp;nbsp;objective&amp;nbsp;식으로&amp;nbsp;나타낼&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZT5mS/btsNTxH4VD5/KD1JhKXktAZRfUlKY3Rak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZT5mS/btsNTxH4VD5/KD1JhKXktAZRfUlKY3Rak1/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZT5mS/btsNTxH4VD5/KD1JhKXktAZRfUlKY3Rak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZT5mS%2FbtsNTxH4VD5%2FKD1JhKXktAZRfUlKY3Rak1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;84&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;위&amp;nbsp;식에서&amp;nbsp;&amp;tau;&amp;nbsp;=&amp;nbsp;temperature&amp;nbsp;hyperparameter,&amp;nbsp;N&amp;nbsp;=&amp;nbsp;batch&amp;nbsp;size &lt;br /&gt;&lt;br /&gt;멀티모달&amp;nbsp;학습과&amp;nbsp;비교하여&amp;nbsp;single&amp;nbsp;modality&amp;nbsp;training은&amp;nbsp;멀티모달&amp;nbsp;검색&amp;nbsp;task&amp;nbsp;에서&amp;nbsp;더&amp;nbsp;좋은&amp;nbsp;성능을&amp;nbsp;얻고,&amp;nbsp;학습&amp;nbsp;cost&amp;nbsp;도&amp;nbsp;훨신&amp;nbsp;적었다.(Table&amp;nbsp;7) &lt;br /&gt;&lt;br /&gt;----- &lt;br /&gt;**&amp;nbsp;학습에&amp;nbsp;사용한&amp;nbsp;Dataset&amp;nbsp;:&amp;nbsp;&amp;nbsp;Simcse:&amp;nbsp;Simple&amp;nbsp;contrastive&amp;nbsp;learning&amp;nbsp;of&amp;nbsp;sentence&amp;nbsp;embeddings. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd07el/btsNS2VXzUg/gUaKsO7VIRtgk2c33G2OWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd07el/btsNS2VXzUg/gUaKsO7VIRtgk2c33G2OWK/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd07el/btsNS2VXzUg/gUaKsO7VIRtgk2c33G2OWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd07el%2FbtsNS2VXzUg%2FgUaKsO7VIRtgk2c33G2OWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;329&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;-----&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;4. Experiments&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;E5-v&amp;nbsp;의&amp;nbsp;backbone&amp;nbsp;으로&amp;nbsp;LLaMA-3&amp;nbsp;8B&amp;nbsp;를&amp;nbsp;기반으로&amp;nbsp;한&amp;nbsp;LLaVA-NeXT-8B를&amp;nbsp;사용했고,&amp;nbsp;CLIP&amp;nbsp;ViT-L&amp;nbsp;를&amp;nbsp;visual&amp;nbsp;encoder&amp;nbsp;로&amp;nbsp;사용했다. &lt;br /&gt;QLora&amp;nbsp;사용. &lt;br /&gt;&lt;br /&gt;contrastive learning 에서는 마지막 token 임베딩을 임베딩으로 사용.&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;4.1 Text-Image Retrieval&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;zero-shot image 및 text retrieval &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7tYMN/btsNTl14m0f/lA3iz81Ve28SgnUpG0rmwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7tYMN/btsNTl14m0f/lA3iz81Ve28SgnUpG0rmwk/img.png&quot; data-alt=&quot;E5-V: Universal Embeddings with Multimodal Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7tYMN/btsNTl14m0f/lA3iz81Ve28SgnUpG0rmwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7tYMN%2FbtsNTl14m0f%2FlA3iz81Ve28SgnUpG0rmwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;255&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;E5-V: Universal Embeddings with Multimodal Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Flickr30K&amp;nbsp;와&amp;nbsp;COCO&amp;nbsp;벤치마크&amp;nbsp;데이터셋을&amp;nbsp;사용하여&amp;nbsp; &lt;br /&gt;&lt;br /&gt;*&amp;nbsp;coco&amp;nbsp;dataset&amp;nbsp;:&amp;nbsp;330K&amp;nbsp;이미지&amp;nbsp;데이터셋,&amp;nbsp;object&amp;nbsp;detection,&amp;nbsp;caption&amp;nbsp;등&amp;nbsp;데이터셋 &lt;br /&gt;*&amp;nbsp;Flickr30K&amp;nbsp;:&amp;nbsp;위와&amp;nbsp;비슷한&amp;nbsp;bb&amp;nbsp;와&amp;nbsp;caption이&amp;nbsp;있는&amp;nbsp;이미지&amp;nbsp;데이터셋&lt;/p&gt;</description>
      <category>LLM 관련 논문 정리</category>
      <category>e5-v</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/113</guid>
      <comments>https://mari970.tistory.com/113#entry113comment</comments>
      <pubDate>Sat, 10 May 2025 12:18:58 +0900</pubDate>
    </item>
    <item>
      <title>RAGAS 라이브러리 평가지표 설명</title>
      <link>https://mari970.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Faithfulness : answer 는 검색된 context 에 기반해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 이를 위해 answer 에서 statement 를 뽑아 각 statement가 context 로부터 추론되었는지 binary 로 점수를 매기고, 평균을 낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-sourcepos=&quot;5:1-6:0&quot;&gt;answer relevance : 생성된 answer 가 질문을 해결할 수 있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 이를 위해 LLM 이 생성한 답변에서 질문을 역생성하고 그 질문와 오리지널 질문을 서로 임베딩 유사도를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-sourcepos=&quot;7:1-8:0&quot;&gt;context precision : 여러 개 청크에서 ground truth 답변과 관련된 context 가 상위에 있는지 평가한다.&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 data-sourcepos=&quot;9:1-9:200&quot;&gt;context recall : 검색된 context 가 gt 답변과 얼마나 일치하는지 평가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: ground truth 답변을 statement 로 나눈 후 각 statement 가 검색된 context 에 귀속되는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>LLM 관련 논문 정리</category>
      <category>ragas</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/112</guid>
      <comments>https://mari970.tistory.com/112#entry112comment</comments>
      <pubDate>Sat, 10 May 2025 12:14:41 +0900</pubDate>
    </item>
    <item>
      <title>Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models (EEVE) 논문 정리</title>
      <link>https://mari970.tistory.com/111</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Abstract&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EEVE-Korean-v1.0 이라는 모델을 소개한다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모델은 영어와 한국어 text 이해 둘다 좋은 성능을 가지는 한국어 version 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;기존의 영어 중심 모델들은 영어에 특화된 tokenizer 를 사용하기 때문에 한국어를 처리할 때 비효율적이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이 논문에서는 새로운 &amp;ldquo;어휘 확장 방식&amp;rdquo;(Vocabulary Expansion) 을 제안한다.&lt;/p&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억개 토큰만으로 비영어 언어 성능을 크게 향상시킬 수 있음을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EEVE-Korean-10.8B-v1.0은 &lt;span data-token-index=&quot;1&quot;&gt;2024년 1월 기준 Open Ko-LLM Leaderboard&lt;/span&gt;에서 대부분의 instruction-tuned LLM들을 능가하며, &lt;span data-token-index=&quot;3&quot;&gt;Hugging Face 리더보드 기준으로 공개된 모델 중 최고의 한국어 사전학습(pre-trained) 모델&lt;/span&gt;로 평가받고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Introduction&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비영어 언어에 대해 tokenizer 가 비효율적이라는 뜻은 예를 들면 한국어를 사용할 때, 영어와 비교했을 때 같은 semantic 의미를 가짐에도 불구하고 훨씬 많은 토큰 수로 나뉜다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 그 결과 더 긴 responce time 과 더 짧은 context length 와 더 높은 API cost 라는 단점을 가지게 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 자주 사용하지만 긴 단어들을 따로 tokenizer 에 추가하는 것이 중요하다. 하지만 이는 어렵다고 알려져 있다 : 왜냐하면 다른 연구에서 말하길 이는 trillion 단위의 학습토큰이 필요하다고 했기 때문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 efficient and effective vocabulary expansion(EEVE)를 제안한다.&lt;/p&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-10.7B를 사용하여 EEVE-Korean-10.8B-v1.0 와 Phi-2 모델을 사용하여 EEVE-Korean-2.8B-v1.02 를 한국어-중심 pre-training 을 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Efficient and Effective Vocabulary Expansion&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문의 핵심 가정 : foundation 모델은 이미 방대한 영어 text 로 학습되어있어서 충분한 이해와 reasoning 능력을 가지고 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 이용하여 영어에서 한국어(비영어 언어) 로 transfer 시켜서 처음부터 한국어를 학습하는 거 보다 더 효율적으로 성능을 올릴 수 있도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7단계로 이루어진 학습방법 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1 Preliminary 1: Tokenizer Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적은 base 모델의 성능을 최대한 활용하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 base model 의 vocabulary 은 유지한 채로 한국어 corpus 에서 최소 6000번 이상 등장한 token 들 중 가장 높은 8960개 추가하였다. &amp;rarr; 그래서 총 40960개 (오리지널 token size : 32000)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 어휘확장을 함으로서 한국어 text 처리 시 소모되는 token 수가 약 3배 감소했다. 그래서 전체 학습 과정에서 연산 비용을 절감했다.&lt;/p&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 data-token-index=&quot;0&quot;&gt;&amp;rarr; 즉, 기존 한국어 토큰들은 sub-word 로 쪼개져있기만 해서 비효율적으로 처리된다는 것이 문제. 그래서 한국어 전용 토큰을 더 추가한다는 것이다.&lt;/span&gt;&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;2.2 Preliminary 2: Subword-based Embeddings Initialization&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰 통합 과정은 실제 학습이 일어나기 전에 진행된다. 이때는 모델의 parameter 에 새로운 입력 임베딩(embed_tokens)과 출력 임베딩(lm_head)을 도입한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새롭게 추가된 토큰의 임베딩은 해당 토큰을 구성하는 subword 토큰의 임베딩 평균값을 사용하는 방식은 택한다.&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;새로 추가된 출력 임베딩은 해당 토큰을 구성하는 첫번째 subword 토큰의 임베딩으로 초기화된다.&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;h3 data-ke-size=&quot;size23&quot;&gt;2.3 Multi-stage Training&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFB1I/btsNMafpo2K/Nkdy2FjSxRMuyxuRw0ykbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFB1I/btsNMafpo2K/Nkdy2FjSxRMuyxuRw0ykbK/img.png&quot; data-alt=&quot;Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFB1I/btsNMafpo2K/Nkdy2FjSxRMuyxuRw0ykbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFB1I%2FbtsNMafpo2K%2FNkdy2FjSxRMuyxuRw0ykbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1506&quot; height=&quot;817&quot; data-origin-width=&quot;1506&quot; data-origin-height=&quot;817&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Stage 1 (new input embeddings)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 다른 모든 파라미터는 고정(freeze)한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계의 핵심 가설은 causal language modeling 에서 input 과 output token sequence 를 구분할 수 있으면 오리지널 tokeniser 와 새로운 tokenizer 로 동시에 사용하여 모델이 새로운 임베딩을 효율적으로 학습할 수 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 모델이 old token 으로부터 임베딩 공간에서 구축된 지식을 사용할 수 있다. &amp;rarr; 뭔소리지ㅜㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 입력 출력 시퀀스에 서로 다른 tokenizer 를 동시에 사용하는 것은 입출력 시퀀스 불일치로 인해 teacher forcing 적용이 어려워지는 등의 구현상 문제를 야기한다.&lt;/p&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.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;즉, 전체 단어 토큰을 새로운 토크나이저로 입력받고 그에 해당하는 첫번째 sub-word 토큰을 출력하는 방식으로 학습한다.&lt;/p&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;이 과정은 그림 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;단, 이 단계에서는 아직 모델이 같은 hidden state 를 공유하는 서로 다른 토큰들을 구분하지는 못하는 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yeKEn/btsNJUSR1Mj/7dRKkFvqPUdm2wB2TJJuQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yeKEn/btsNJUSR1Mj/7dRKkFvqPUdm2wB2TJJuQK/img.png&quot; data-alt=&quot;Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yeKEn/btsNJUSR1Mj/7dRKkFvqPUdm2wB2TJJuQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyeKEn%2FbtsNJUSR1Mj%2F7dRKkFvqPUdm2wB2TJJuQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;521&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Efficient and Effective Vocabulary Expansion Towards Multilingual Large Language Models&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(그림2 설명)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새롭게 추가된 토큰들의 output 임베딩을 해당 토큰을 구성하는 첫 번째 서브워드 토큰의 출력 임베딩으로 초기화한다.&lt;/p&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;ldquo;하세요&amp;rdquo;라는 새로 추가된 토큰을 예측할 때, 그 첫 번째 서브워드인 &amp;ldquo;하&amp;rdquo;의 출력 임베딩을 사용하도록 초기화한다.&lt;/p&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;ldquo;하세요&amp;rdquo;를 예측하기 위한 last hidden representation 이, 기존 서브워드 &amp;ldquo;하&amp;rdquo;를 예측할 때와 동일한 로짓(logits)을 생성하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설령 정답(gold token)으로 &amp;ldquo;하세요&amp;rdquo;를 직접 제공하더라도, 실제로 계산되는 그래디언트(gradient)는 결국 서브워드 &amp;ldquo;하&amp;rdquo;를 기준으로 업데이트된다.&lt;/p&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;ldquo;하세요&amp;rdquo;라는 입력 토큰을 받아, 그 의미를 바탕으로 &lt;span data-token-index=&quot;1&quot;&gt;서브워드 &amp;ldquo;하&amp;rdquo;를 예측하도록 학습&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;rarr; 그니까 인풋 임베딩을 추가했을때 임풋에서 &amp;ldquo;하세요&amp;rdquo; 였어도, output 에서는 freeze 되어있으니까 그냥 억지로 &amp;ldquo;하&amp;rdquo; 의 output 임베딩 부분으로 매핑해준다는 거네.&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;Stage 2 (new output embeddings)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 논문의 목표는 다양한 문맥에서 새로 추가된 토큰을 정확하게 생성할 수 있는 능력을 향상시키는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 lm_head 출력 임베딩만 조정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델의 나머지 파라미터를 freeze 하는 이유는 현재 모델이 불안정한 상태이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력과 출력 임베딩을 동시에 학습하려 하면 converge (수렴) 에 어려움이 생기고 모델 성능 최적화에 방해가 된다.&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;rarr; 맞징 왜냐하면 맨밑까지 갈 필요가 없으니까)&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;Stage 3 (new input and output embeddings)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3단계에서는 입력 임베딩(embed_tokens)이 여전히 output 임베딩의 initial 값에 기반하여 최적화된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계에서는 새로 추가된 input 과 output 의 임베딩들이 동시에 업데이트된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input 과 output 의 정렬을 통해 모델은 새로운 토큰들을 이해(입력)와 생성(출력) 모두에 활용하는 방법을 학습된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Stage 4 (all output embeddings)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 단계까지는 base 모델의 모든 파라미터를 freeze 했기 때문에 기존 토크나이저와 새로운 토크나이저 간의 logit 이 서로 다른 scale 을 가지거나 하는 경우 등 전체 어휘로 같이 사용되기에 최적화가 덜되기 때문에 기존 토큰 임베딩 업데이트를 시작한다.&lt;/p&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;Stage 5 (new input and all output embeddings)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기에서는 모든 출력 임베딩 fine-tuning 을 하는 동시에 새로 추가된 input 임베딩도 학습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 입력 토큰들에 대해서도 잘 prediction 하도록 하는것이 목표이다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Stage 6 (all layers)&lt;/h4&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;기존의 모든 모델 파라미터를 QLoRA&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;Stage 7 (internal layers)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 일종의 &lt;b&gt;&amp;ldquo;쿨다운(cool down)&amp;rdquo; 단계&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Implementation Details&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. Datasets&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pre-training 에 사용한 데이터셋 : 한국어 웹사이트 내용, 영어 vocabulary, 한국어 AI Hub 의 parallel corpus 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pre-processing 규칙 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. perplexity-based filtering 2. n-gram repetition 필터링 3. stopword-based filtering&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 pre-training 데이터셋으로 3.2M documents (6.7GB) 사용.&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;646&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccxmer/btsNKejhdaI/qJc3kBVh8pSio2PsMlBaB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccxmer/btsNKejhdaI/qJc3kBVh8pSio2PsMlBaB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccxmer/btsNKejhdaI/qJc3kBVh8pSio2PsMlBaB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccxmer%2FbtsNKejhdaI%2FqJc3kBVh8pSio2PsMlBaB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;282&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;364&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;위의 표는 기존 solar모델과 eeve 모델의 tokenizer 사용시 pre-training 데이터셋의 토큰수가 얼마나 줄어들었는지 확인할 수 있다. (=거의 반이나 줄었다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;phi-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;Transformer 모델들의 computational cost 가 token length 에 따라 quadratic 하게 증가하는 것을 고려하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째, 같은 시퀀스를 처리하는데 같은 GPU 에서 4배 더 오래 걸린다. (&amp;rarr;왜 4배지?: token 길이가 2배 길어지면 computational cost 는 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;두번째는 우리의 모델이 같은 데이터셋으로 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;fine-tuning 에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLaMAFactory의 Direct Preference Optimization (DPO) 를 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터셋은 Orca, UltraFeedback, 등을 한국어로 번역하여 사용.&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;3.2 Training&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습에 사용한 framework 는 pre-training 은 Axolotl을, fine-tuning 에는 LLama-factory 를 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPU 는 8 x NVIDIA H100 GPUs 80GB 에 64 core CPU 를 사용하였다.&lt;/p&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;EEVE-Korean-10.8B-v1.0&lt;/b&gt; 모델의 경우 : bf16 precision 환경에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;seq len : 4096, gradient accumulation steps : 4, micro batch size: 8 로 설정하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EEVE-Korean-2.8B-v1.0&lt;/b&gt; 모델은 seq len 2048, gradient accumulation step 16, micro-batch size 16의 설정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화에는 AdamW 옵티마이저(Loshchilov and Hutter, 2018)를 사용했으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lr scheduler 는 cosine scheduler으로, 워밍업 단계 10 스텝 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lr은 10.8B 모델에는 4e-5, 작은 모델에는 2e-4를 사용. (큰 모델일수록 작은 lr 을 사용해야한다?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 단계에서는 loss가 수렴할 때까지 학습을 지속했으며, 400 global step 이전에 loss가 수렴하는 현상을 관찰 (긍정적)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 7단계의 학습 전략을 사용했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.8B 모델의 경우 출력 임베딩만 최적화하는 단계들이 연산 부담이 크지 않기 때문에, 전체 사전학습(pre-training) 과정이 이틀 이내에 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Evaluation&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2 Results&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EEVE-Korean-10.8B-v1.0&lt;/b&gt;은 평균 성능에서 동일한 크기의 다른 사전학습(pretrained) 모델들보다 우수한 성능을 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주목할 만한 점은, EEVE-Korean은 한국어 성능을 향상시키면서도 영어 성능을 저하시키지 않은 유일한 사례라는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 다른 결과로는, 영어 데이터셋에 대한 preference tuning은 오히려 모델의 한국어 작업 성능을 떨어뜨리는 결과를 낳았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, LLaMA-2-chat 계열 모델들은 LLaMA-2 체크포인트에 preference tuning을 적용한 버전으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어 작업 성능은 향상되었다 (예: LLaMA-2-7B: 0.7774 &amp;rarr; LLaMA-2-7B-chat: 0.7976, 영어 BoolQ).&lt;/p&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-7B: 0.5242 &amp;rarr; LLaMA-2-7B-chat: 0.5157, 한국어 BoolQ).&lt;/p&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 데이터셋으로 preference tuning을 적용한 경우,영어 작업 성능이 저하되지 않았고, 오히려 향상되는 결과도 관찰되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 한국어와 영어 토큰 간의 임베딩 공간이 잘 정렬되어 있어,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 언어에 대해 파인튜닝을 하더라도 모델 파라미터에 큰 변화가 발생하지 않기 때문이라고 추정한다.&lt;/p&gt;</description>
      <category>LLM 관련 논문 정리</category>
      <category>eeve</category>
      <category>efficient and effective vocabulary expansion towards multilingual large language models</category>
      <category>vocabulary expansion</category>
      <category>YANOLJA</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/111</guid>
      <comments>https://mari970.tistory.com/111#entry111comment</comments>
      <pubDate>Mon, 5 May 2025 17:00:42 +0900</pubDate>
    </item>
    <item>
      <title>Parse Tree : Dependency 와 Constituency</title>
      <link>https://mari970.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Parse tree 는 크게 2가지 종류로 나눌 수 있다. 바로 위 제목의 Dependency tree 와 Constituency tree 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서로 다른 assumption(가정)을 기반으로 하고 똑같이 sequence 에서 문법 정보를 추출하는것을 목표로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Constituency parsing&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Constituency parse 는 context-free grammar 를 기반으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문장이 constituent 단위로 나뉘고, 즉 sun-phrase 들은 grammar 의 특정 카테고리에 포함된다.&lt;/p&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 computer on the table, the nice sunset 등은 다 noun phrase 이고, eat a pizza 는 verb phrase 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rule 집합을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 VP -&amp;gt; VNP 는 VP=verb phrase 를 V 와 Noun phrase 로 표현할 수 있다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C 파스트리는 항상 문장의 word 를 terminal nodes 로 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대게 각 word 는 pos tag (noun, adjective, verb, etc&amp;hellip;) 를 담고잇는 parent node 를 가진다. 이 친구들은 생략될수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 다른 nonterminal node 들은 문장의 constituent(구성요소?)들을 표현한다. 그리고 보통 non terminal node은 verb phrase, noun phrase, or prepositional phrase (PP) 중 하나이다.&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;513&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WjKW1/btsMh7Y50ov/f5L10iHESGw5c9JJLZHtdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WjKW1/btsMh7Y50ov/f5L10iHESGw5c9JJLZHtdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WjKW1/btsMh7Y50ov/f5L10iHESGw5c9JJLZHtdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWjKW1%2FbtsMh7Y50ov%2Ff5L10iHESGw5c9JJLZHtdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;513&quot; height=&quot;639&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;639&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;위를 'i saw a fox' 예를 들면, root 아래 첫번째 단계에서 문장은 noun phrase 인 I 1개 단어와 saw a fox 라는 verb phrase 로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 grammar가 S-&amp;gt;NPVP 의 룰을 가진다는 뜻이고, 이는 문장이 np(noun phrase) 와 vp(verb phrase) 의 concat으로 만들어진다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비슷하게 vp는 v와 또다른 np 로나눌수잇다. 이도 또다른 grammar 의 rule 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, c파싱은 context free 그래머에서 문장의 syntactic 표현을 포함하는 트리를 만든다. 이는 매우 hierarchixal 하고 문장을 single phrasal constituents로 나눈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Dependency parsing&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;은 c파싱과 반대로, phrasal constituent(구성요소)나 sub phrase 를 사용하지않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신, syntax를 단어간의 dependency들로 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프에서 단어 사이의 typed edge 로 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;G=(V,E) 에서 V는 단어들의집합이고, edge는 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;그래프는 아래 3가지 조건을 만족해야한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;들어오는 edge 가 없는 단일 Root 노드가 반드시 잇어야한다.&lt;/li&gt;
&lt;li&gt;V 안에 있는 각 노드 v는 반드시 root 에서 v 로 가는 path 가 있어야한다.&lt;/li&gt;
&lt;li&gt;Root 외의 각 노드들은 각 1개의 들어오는 edge가 잇다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 하지만 결국 위 규칙처럼 acyclic 하기때문에 dependency 파스 그래프도 트리형태로나타낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 엣지는 2개 단어 사이의 문법적인 관계가 정의된 type 을 가진다.&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;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CeYW1/btsMivrQnQd/zlF17nWdjLY1hR5HKroCOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CeYW1/btsMivrQnQd/zlF17nWdjLY1hR5HKroCOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CeYW1/btsMivrQnQd/zlF17nWdjLY1hR5HKroCOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCeYW1%2FbtsMivrQnQd%2FzlF17nWdjLY1hR5HKroCOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;262&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;262&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;다음 그림처럼 2개 파싱에대한 결과는 매우 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기에서는 tree의 루트는 verb 동사이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;자연어 파싱의 도전과제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 문장이라도 유효한 여러 개의 파스트리가 잇을 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용 case&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 dependeny 파싱이 qa나 정보추출 등의 downstream 태스크에서 더 유용하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 쉽게 subject-verb-object triples 라는 semantic 관계를 더 잘 추출할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c파싱에서도 할수는잇지만 처리가더필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 d 파싱은 단어 순서가 자유로운 언어에서 사용하기 더 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로, 문장에서 sub-phrases 를 추출하려고하면 c파싱이 더 유리하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/cs/constituency-vs-dependency-parsing&quot;&gt;https://www.baeldung.com/cs/constituency-vs-dependency-parsing&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝 이모저모</category>
      <category>constituency tree</category>
      <category>dependency tree</category>
      <category>parse</category>
      <category>parsing</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/110</guid>
      <comments>https://mari970.tistory.com/110#entry110comment</comments>
      <pubDate>Thu, 13 Feb 2025 18:15:54 +0900</pubDate>
    </item>
    <item>
      <title>Deepspeed 에서 GPU 를 잘못 사용할 때 해결법</title>
      <link>https://mari970.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나는 os.environ[&quot;CUDA_VISIBLE_DEVICES&quot;] = '2,3&amp;rsquo; 인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cpu&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 에러는 gpu 를 0 번 쓰고 근데 그거도 모자라서 cpu 사용한다고 되어있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 찾아보니 : &lt;a href=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/DeepSpeed/issues/3070&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733037335066&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;[BUG] cannot set gpu 2,3 to train with deepspeed and trainer in huggingface &amp;middot; Issue #3070 &amp;middot; microsoft/DeepSpeed&quot; data-og-description=&quot;Describe the bug A clear and concise description of what the bug is. To Reproduce Steps to reproduce the behavior: Go to '...' Click on '....' Scroll down to '....' See error Expected behavior A cl...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot; data-og-url=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zZTyC/hyXGABPuC4/adk9nHCiWYjtYeEBgjJvk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/tjyTQ/hyXDgEYCSG/nrHhPmfWqQ7Wnrk8gwdEbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zZTyC/hyXGABPuC4/adk9nHCiWYjtYeEBgjJvk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/tjyTQ/hyXDgEYCSG/nrHhPmfWqQ7Wnrk8gwdEbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[BUG] cannot set gpu 2,3 to train with deepspeed and trainer in huggingface &amp;middot; Issue #3070 &amp;middot; microsoft/DeepSpeed&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Describe the bug A clear and concise description of what the bug is. To Reproduce Steps to reproduce the behavior: Go to '...' Click on '....' Scroll down to '....' See error Expected behavior A cl...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 DeepSpeed launcher (터미널에서 deepspeed 명령어를 사용하여 실행) 를 사용하면 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;CUDA_VISIBLE_DEVICES&lt;/span&gt; 를 사용해봣자 의미가 없다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동으로 gpu 0, 1 부터 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1733037658462&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;deepspeed --num_nodes=1 --num_gpus=2 dscoder_train.py --deepspeed config_deepspeed.json&lt;/code&gt;&lt;/pre&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;1183&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drt3MR/btsK2FKiM2x/Zwrgclt8O4RnKYDePnUT51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drt3MR/btsK2FKiM2x/Zwrgclt8O4RnKYDePnUT51/img.png&quot; data-alt=&quot;https://github.com/microsoft/DeepSpeed/issues/3070&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drt3MR/btsK2FKiM2x/Zwrgclt8O4RnKYDePnUT51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdrt3MR%2FbtsK2FKiM2x%2FZwrgclt8O4RnKYDePnUT51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;307&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://github.com/microsoft/DeepSpeed/issues/3070&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 깃허브 이슈에서 시키는 대로 해보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1733037763702&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; deepspeed --num_nodes=1 --num_gpus=2 --include localhost:2,3 dscoder_train.py --deepspeed config_deepspeed.json&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;  ValueError: Cannot specify num_nodes/gpus with include/exclude&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 --num_nodes 와--num_gpus 빼고 쓰면 워하는 gpu 의 메모리를 사용하는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python 및 Torch 코딩 이모저모</category>
      <category>CUDA_VISIBLE_DEVICES</category>
      <category>Deepspeed</category>
      <category>include localhost</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/109</guid>
      <comments>https://mari970.tistory.com/109#entry109comment</comments>
      <pubDate>Sun, 1 Dec 2024 16:48:15 +0900</pubDate>
    </item>
    <item>
      <title>device-side assert triggered error</title>
      <link>https://mari970.tistory.com/108</link>
      <description>&lt;pre id=&quot;code_1732582869040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.&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;이거는 GPU 에 코드 돌릴 때 나타나는 에러인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 잘못됬을 때 나타난다고 함..그니까 그냥 구현오류인거,,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732582917898&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CUDA Error: Device-Side Assert Triggered: Solved | Built In&quot; data-og-description=&quot;A CUDA Error: Device-Side Assert Triggered can either be caused by an inconsistency between the number of labels and output units or an incorrect input for a loss function. Follow this guide to fix it.&amp;nbsp;&quot; data-og-host=&quot;builtin.com&quot; data-og-source-url=&quot;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&quot; data-og-url=&quot;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4jHlW/hyXDmc6zIo/pBK2oqS39GdRKCkNjSKdy1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509,https://scrap.kakaocdn.net/dn/eNNxTM/hyXDlecED0/tr9kIbQWj99duMtk8Uo8A1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509,https://scrap.kakaocdn.net/dn/hyjyX/hyXDdULhrb/6YYtX021vOtFGegP64RHp1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509&quot;&gt;&lt;a href=&quot;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://builtin.com/software-engineering-perspectives/cuda-error-device-side-assert-triggered&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4jHlW/hyXDmc6zIo/pBK2oqS39GdRKCkNjSKdy1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509,https://scrap.kakaocdn.net/dn/eNNxTM/hyXDlecED0/tr9kIbQWj99duMtk8Uo8A1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509,https://scrap.kakaocdn.net/dn/hyjyX/hyXDdULhrb/6YYtX021vOtFGegP64RHp1/img.jpg?width=1200&amp;amp;height=635&amp;amp;face=221_243_464_509');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CUDA Error: Device-Side Assert Triggered: Solved | Built In&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A CUDA Error: Device-Side Assert Triggered can either be caused by an inconsistency between the number of labels and output units or an incorrect input for a loss function. Follow this guide to fix it.&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;builtin.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 에러는 보통&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;모델의 output 과 label 개수가 차이날때&lt;/li&gt;
&lt;li&gt;loss function 이 잘못됬을때&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생기는 문제라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그냥 저렇게 떡하니 문제만 나올뿐 어디가 어떻게 문제인지는 말 안해준다.&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;pre id=&quot;code_1732582943722&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dmesg&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;</description>
      <category>Python 및 Torch 코딩 이모저모</category>
      <category>CUDA error</category>
      <category>device-side assert triggered</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/108</guid>
      <comments>https://mari970.tistory.com/108#entry108comment</comments>
      <pubDate>Tue, 26 Nov 2024 10:03:00 +0900</pubDate>
    </item>
    <item>
      <title>RuntimeError: The server socket has failed to listen on any local network address.</title>
      <link>https://mari970.tistory.com/107</link>
      <description>&lt;pre id=&quot;code_1732066300807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;File &quot;/root/.venv/lib/python3.8/site-packages/torch/distributed/rendezvous.py&quot;, line 172, in _create_c10d_store
    return TCPStore(

RuntimeError: The server socket has failed to listen on any local network address. The server socket has failed to bind to [::]:29500 (errno: 98 - Address already in use). The server socket has failed to bind to 0.0.0.0:29500 (errno: 98 - Address already in use).
[2023-12-06 05:07:30,923] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 252082
[2023-12-06 05:07:30,925] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 252083
[2023-12-06 05:07:33,293] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 252084
[2023-12-06 05:07:35,615] [INFO] [launch.py:315:sigkill_handler] Killing subprocess 252085
[2023-12-06 05:07:38,218] [ERROR] [launch.py:321:sigkill_handler] ['/root/.venv/bin/python3', '-u', 'hf_trainer.py', '--local_rank=3', '--deepspeed', 'deepspeed_config.json'] exits with return code = 1&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;이런식으로 TCP 관련 코드에서 멈추면서 나는 다음과같은 에러는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니 학습을 시작하기도 전에 난 에러로, 다른 프로세스가 cpu 에서 돌고있거나 아니면 완전히 kill 되지 않았는데 돌리면 생기는 에러이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 ps -ef 를 해보면 알 수 있다.&lt;/p&gt;</description>
      <category>Python 및 Torch 코딩 이모저모</category>
      <category>runtimeerror: the server socket has failed to listen on any local network address.</category>
      <category>tcpstore</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/107</guid>
      <comments>https://mari970.tistory.com/107#entry107comment</comments>
      <pubDate>Wed, 20 Nov 2024 10:32:30 +0900</pubDate>
    </item>
    <item>
      <title>Softmax Overflow 와 Underflow 문제</title>
      <link>https://mari970.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;단순한&amp;nbsp;Softmax 함수는&amp;nbsp;numerical instability하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebW6rN/btsKOxR7n21/uFFXT0krj5I8zQh3tDjIc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebW6rN/btsKOxR7n21/uFFXT0krj5I8zQh3tDjIc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebW6rN/btsKOxR7n21/uFFXT0krj5I8zQh3tDjIc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebW6rN%2FbtsKOxR7n21%2FuFFXT0krj5I8zQh3tDjIc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;160&quot; height=&quot;59&quot; data-origin-width=&quot;160&quot; data-origin-height=&quot;59&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;e의 지수연산을 하게 되므로, 쉽게 오버플로 혹은 언더플로가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 [100, 200, 300] (너무 큰 값들의 list)을 soft max function에 단순 계산하게 된다면, overflow가 발생하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 값에만 1에 근사한 값이 들어가고 나머지 class에는 0에 가까운 값이 들어간다. ([0.000..., 0.000..., 1])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로, [1/1000, 1/2000, 1/3000](너무 작은 값들의 list)을 전사한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;under flow가 발생하여, soft max함수 결과는 각각의 성분에 동일하게(uniform하게) 들어가게 된다. ( [0.33333.., 0.33333..., 0.33333...] )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이 해결방안: parametric trick=상수를 분모 분자에 곱해주어 이를 shift해주고 안정적이게 mapping해주는 방법이다.&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;218&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvhkQl/btsKOx5Gxsz/fNF0DgukxkJGOR6ItKwVok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvhkQl/btsKOx5Gxsz/fNF0DgukxkJGOR6ItKwVok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvhkQl/btsKOx5Gxsz/fNF0DgukxkJGOR6ItKwVok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvhkQl%2FbtsKOx5Gxsz%2FfNF0DgukxkJGOR6ItKwVok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;218&quot; height=&quot;43&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9lpkq/btsKM2lxAPA/dhmU03fST5oX3IkW9zztRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9lpkq/btsKM2lxAPA/dhmU03fST5oX3IkW9zztRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9lpkq/btsKM2lxAPA/dhmU03fST5oX3IkW9zztRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9lpkq%2FbtsKM2lxAPA%2FdhmU03fST5oX3IkW9zztRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;103&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>머신러닝 이모저모</category>
      <category>Overflow</category>
      <category>Softmax</category>
      <category>underflow</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>섬섬옥수수</author>
      <guid isPermaLink="true">https://mari970.tistory.com/106</guid>
      <comments>https://mari970.tistory.com/106#entry106comment</comments>
      <pubDate>Tue, 19 Nov 2024 08:17:57 +0900</pubDate>
    </item>
  </channel>
</rss>