<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>준나이의 블로그</title>
    <link>https://joonable.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 11 Jul 2026 05:16:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>준나이</managingEditor>
    <image>
      <title>준나이의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/2871617/attach/6cd794c33a2646d7aa0585beed598d3e</url>
      <link>https://joonable.tistory.com</link>
    </image>
    <item>
      <title>Locating and Editing Factual Associations in GPT (2023) 논문 리뷰 - 1</title>
      <link>https://joonable.tistory.com/47</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;autoregressive transformer language model(LM)에서 factual associations(사실 관계)를 저장하는 장소와 이를 기억해내는 능력을 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;causal intervention(= causal tracing):&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;LM 내 어떤 module(= neural activations, layers, NN)이 model이 사실관계를 예측할때 결정적인 역할을 하는가?를 분석하기 위한 실험&lt;/li&gt;
&lt;li&gt;결과를 통해 model의 중간 layer 내에 있는 feed-forward layers(MLP)가 subject tokens를 처리 할 때 하는 연산(computations)이 target(=object)를 prediction 할 때 영향을 끼치는 것을 밝혀 냄&lt;/li&gt;
&lt;li&gt;이 computations가 정말 사실관계를 기억해내는 능력과 관련이 있는지 확인하기 위해 RANK-ONE-MODEL-EDITING(ROME)을 통해 feed-forward weights를 수정해서 저장된 사실관계를 update하는 실험을 추가로 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;ROME (RANK-ONE-MODEL-EDITING)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;ROME은 standard zero-shot relation extraction (zsRE)에 효과적&lt;/li&gt;
&lt;li&gt;ROME을 specificity와 generalisation 모두 유지해야해서 모델 입장에서 다소 어려운 counterfacutal을 담고 있는 dataset을 가지고 evaluation을 추가로 진행&lt;/li&gt;
&lt;li&gt;결과를 통해 mid-layer feed-forward modules가 사실관계를 저장하는데 중요한 역할을 하는것을 증명하고 computational mechanisms의 직접적인 수정을 할 수 있는 method를 제안 (model editing을 위한 실현가능한 approach가 될 수 있음)  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;이 논문에서는 &amp;#39;large LM이 사실관계를 어디에 저장하는가?&amp;#39;에 대한 물음에 대한 답으로, GPT 내 일어나는 localised computation이 사실관계에 대응되고 직접수정이 가능하다는 증거를 제시함&lt;/li&gt;
&lt;li&gt;LLM은 사실관계를 예측할 수 있는 능력을 갖추고 있음&lt;/li&gt;
&lt;li&gt;e.g. &amp;quot;The space needle is located in the city of ___ &amp;quot; 라는 빈칸 문장이 주어졌을때, &amp;quot;Seattle&amp;quot;을 예측 할 수 있음&lt;/li&gt;
&lt;li&gt;이 논문에서는 GPT 같은 autoregressive transformer model에 어떻게 사실관계가 저장되는가에 대한 실험을 함&lt;/li&gt;
&lt;li&gt;BERT와 같은 masked models에 대한 연구는 어느정도 진행됐는데, unidirectional attention &amp;amp; generation capabilities에 대한 연구를 한다는 점에서 기존 연구와는 다름&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;experiment 1: causal tracing&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;하나의 subject와 관련된 사실정보를 떠올리는데 영향을 끼치는 특정한 modules를 찾기위해 원인 영향 분석(causal mediation analysis)을 통해 GPT 내부에 있는 hidden state activations의 영향도(causal effects)를 추적&lt;/li&gt;
&lt;li&gt;feed-forward MLP가 subject해당하는 tokens 중 마지막 token을 처리할 때 결정적인 역할을 한다는 것을 밝혀냄&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;experiment 2: ROME&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;ROME을 도입하여 model weights에 FFN의 행동을 결정하는 parameters를 수정하여 위에서 발견한 점들을 test&lt;/li&gt;
&lt;li&gt;평가를 통해 mid-layer MLP modules가 표면적인 관계(specific surface forms)를 넘어서 일반화할 수 있는 사실관계를 저장하고, subject에 specific한 상태를 유지하는 것을 확인&lt;/li&gt;
&lt;li&gt;ROME이 다른 model editing approaches와 비슷한 성능을 발휘한다는 것을 szRE를 통해 확인할 수 있었음&lt;/li&gt;
&lt;li&gt;더 어려운 case에 대한 ROME의 영향을 평가하기 위해, counterfactual assertions가 담긴 새로운 dataset 도입  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Interventions on Activations for Tracing Information Flow&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;각각의 사실을 예측하는데 가장 큰 causal effect를 미치는 특정 hidden states를 분석하고 식별하기 위해, 첫번째로 facts가 저장된 위치정보를 찾음&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;data&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;fact = knowledge tuple로 표현 (subject $s$, relation $r$, object $o$)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;model&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;qutoregressive transformer language model (GPT) $G$에 $s$와 $r$을 유도하기 위해, $s$와 $r$을 표현하는 prompt $p$를 도입하여 $o$를 맞게 예측하는지 실험&lt;/li&gt;
&lt;li&gt;$G: X \rightarrow Y$&lt;/li&gt;
&lt;li&gt;$V$: vocabulary&lt;/li&gt;
&lt;li&gt;$x$: token sequences&lt;/li&gt;
&lt;li&gt;$y$: probability distribution&lt;/li&gt;
&lt;li&gt;prediction: next-token continuations of $x$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;internal computation&lt;/h5&gt;
&lt;p&gt;$$h_i^{(l)} = h_i^{(l-1)} + a_i^{(l)} + m_i^{(l)} $$&lt;br&gt;$$a_i^{(l)} = attn^{(l)}\Bigl( h_1^{(l-1)}, h_2^{(l-1)}, \ldots , h_i^{(l-1)} \Bigl) $$&lt;br&gt;$$m_i^{(l)} = W_{proj}^{(l)}\sigma \Bigl( W_{fc}^{(l)} \gamma \Bigl( a_i^{(l)} + h_i^{(l-1)} \Bigl) \Bigl) $$&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$h_i^{(l)}$: a series of hidden state vector (witin transformer layer $l$ and at ith token)&lt;/li&gt;
&lt;li&gt;$a_i^{(l)}$: global attention&lt;/li&gt;
&lt;li&gt;$m_i^{(l)}$: local MLP&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2.1. Causal Tracing of Facutal Associations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;올바른 사실을 예측하는데 각각의 states가 기여하는 바를 계산하기 위해, 모델 G를 세가지 방법으로 run 시켜서 내부의 activations를 수집 및 분석함&lt;/li&gt;
&lt;li&gt;1) 올바른 fact를 예측하는 clean run&lt;/li&gt;
&lt;li&gt;2) 결과값이 손상된 corrupted run&lt;/li&gt;
&lt;li&gt;3) 하나의 stat가 가진 prediction을 복원하는 능력을 test하기 위한 corrupted-with-restoration&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;clean run:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;factual prompt $x$를 $G$에 통과시키고 모든 hidden activations $\{h_i^{(l)} | i \in [1,T], l \in [1,L] \}$을 수집&lt;/li&gt;
&lt;li&gt;e.g. prompt: &amp;quot;The Space Needle is in downtown _____&amp;quot;, $o$: &amp;quot;Seattle&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;corrupted run:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;$G$를 run 시키기 전에 subject에 해당하는 token에 noise를 추가&lt;/li&gt;
&lt;li&gt;$x$는 embedding layer를 통과하여 $[ h_1^{(0)}, h_2^{(0)}, \ldots, h_T^{(0)} ]$로 embedded됨&lt;/li&gt;
&lt;li&gt;$h_i^{(0)} := h_i^{(0)}+\epsilon$: 여기에 noise $\epsilon$를 추가하여 input 값을 임의로 바꿈&lt;/li&gt;
&lt;li&gt;그 다음에 corrupted activations $\{h_{i*}^{(l)} | i \in [1,T], l \in [1,L] \}$를 수집&lt;/li&gt;
&lt;li&gt;subject에 추가된 noise 때문에 정답을 예측할 확률은 낮아짐&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;corrupted-with-restoration run:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;corrupted run처럼 모델을 실행시키다가 token $\hat{i}$ and layer $l$에서 clean activation인 $h_{\hat{i}}^{(l)}$을 출력하도록 강제함&lt;/li&gt;
&lt;li&gt;나머지 계산은 원래대로 진행&lt;/li&gt;
&lt;li&gt;몇몇의 clean states는 결과를 correct fact로 이끌 것이고, 이는 causal importance를 나타낼것&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;metric&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;$\mathbb{P}[0]$, $\mathbb{P}_{*}[0]$, $\mathbb{P}_{*, clean h_{i}^{(l)}}[0]$: clean, corrupted, and corrupted-with-restoration run 이후 $o$를 예측할 확률 &lt;/li&gt;
&lt;li&gt;total effect: $TE = \mathbb{P}[0] - \mathbb{P}_{*}[0]$&lt;/li&gt;
&lt;li&gt;indirect effect: $IE = \mathbb{P}_{*,clean h_{i}^{(l)}}[0] - \mathbb{P}_{*}[0]$&lt;/li&gt;
&lt;li&gt;average total effect: $ATE$&lt;/li&gt;
&lt;li&gt;average indirect effect: $AIE$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2.2. Causal Tracing Results&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;문장 내 위치와 components(individual states, MLP layers, attention layers)를 이용해서 조건을 다양하게 설정하여 $ATE$ 18.6% 산출 (Figure 2)&lt;/li&gt;
&lt;li&gt;prediction 직전 위치 (late site)에 causal states가 높게 등정된건 어떻게 보면 당연한 일인데, 그에 반해 15th layer 내 subject의 마지막 token(early site)에서 $AIE$값이 높게 나왔다는건 새로운 발견임&lt;/li&gt;
&lt;li&gt;causal effects에 대한 기여도를 MLP와 attention 모듈 관점에서 나눴을 때, MLP가 early site에서 결정적인 역할을 한다는 것을 보여줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;figure 3&lt;/h5&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUXnlU/btsfcNti0pM/eEbrzGMneuqAg088NIebWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUXnlU/btsfcNti0pM/eEbrzGMneuqAg088NIebWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUXnlU/btsfcNti0pM/eEbrzGMneuqAg088NIebWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUXnlU%2FbtsfcNti0pM%2FeEbrzGMneuqAg088NIebWk%2Fimg.png&quot; width=&quot;100%&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;early site에서 MLP module이 하는 역할을 알아보기 위해 modified causal graph로 간접적인 영향도를 분석함&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(a) 각 모듈의 contribution을 corrupted input을 이용해서 측정&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(b) causal effects를 측정할 때 MLP modules의 효과를 분리시키기 위해 ith token에서 MLP modules를 잘라내고 corrupted state 상태로 freezing 시킴으로써, clean state의 추가에 영향을 받지 않게됨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(c) MLP가 절단된 모델과 original 모델의 $AIE$ 비교&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(d) MLP를 잘라낸 모델의 lowest layers는 causal effects를 잃게됨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(f) 그에 반해 highest layers의 causal effects는 MLP의 존재여부에 큰 영향을 받지 않음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;(e) 이 결과는 MLP가 middle layers에서 fact 정보를 기억해내는데 중요한 역할을 함을 알 수 있음&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;가설: &amp;quot;localised midlayer MLP가 key-value mapping 역할을 하면서 subject에 대한 사실정보를 떠올린다&amp;quot;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2.3. The Licalised Factual Association Hypothesis&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;3.2.에서의 causal traces의 결과로 사실관계정보를 저장하기 위한 특정한 machanism을 사실이라고 상정함&lt;/li&gt;
&lt;li&gt;각각의 midlayer MLP modules는 subject를 이노딩한 input을 받고, 해당 subject에 관해 기억하고 있는 속성을 출력&lt;/li&gt;
&lt;li&gt;middle layer MLP outputs은 정보를 축적하고, 더해진 정보는 high layers에 있는 attention에 의해 마지막 token으로 복사됨&lt;/li&gt;
&lt;li&gt;이 가설은 사실관계가 저당된 위치를 3개의 dimension에 걸쳐 국한시킴: 1) MLP modules 2) 특정한 middle layers 3) subject의 마지막 token을 처리할때 (다른 연구들과도 일치)&lt;/li&gt;
&lt;li&gt;가설을 test하기 위해 중간 레이어 $l^*$에 있는 하나의 MLP module을 집중적으로 분석하여 임의의 fact 정보를 저장하기 위해 weights를 명시적으로 수정해도 되는지를 알아봄&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/47</guid>
      <comments>https://joonable.tistory.com/47#entry47comment</comments>
      <pubDate>Sun, 14 May 2023 22:47:32 +0900</pubDate>
    </item>
    <item>
      <title>CONTROL PREFIXES for Parameter-Efficient Text Generation (2021) 논문리뷰</title>
      <link>https://joonable.tistory.com/46</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;h5&gt;prefix-tuning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;large pre-trained model(PLM)을 downstream task로 adaptation 시키기위한 가볍지만 강력한 기술&lt;/li&gt;
&lt;li&gt;하지만 같은 level의 dataset으로 학습된 prompt를 모든 examples에 사용함&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;control-prefixes&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;prefix-tuning을 확장해서, input-dependent한 information을 추가로 포함시켜 dynamic prompt화 시킨 기술&lt;/li&gt;
&lt;li&gt;prompt-tuning과 controlled generation의 이점들을 모두 이용할 수 있게됨&lt;/li&gt;
&lt;li&gt;attribute-level representation을 PML의 layers와 통합시키고 text를 원하는 방향으로 생성 수 있도록 guide할 수 있음&lt;/li&gt;
&lt;li&gt;GEM benchmarks 중에서 5 dataset을 실험에 활용&lt;/li&gt;
&lt;li&gt;추가 params가 0.1 ~ 3%에 불과한 parameter-efficient한 방법  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PLM을 downstream tasks로 adaptation 시키기는게 text generation분야의 일반적 접근 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;fine-tuning의 한계&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;PLM의 모든 parameters를 대상으로 tuning시켜 task마다 LM을 별도로 만들어야 함&lt;/li&gt;
&lt;li&gt;PLM의 크기가 수백만에서 수십억에 달하기 때문에 현실적으로 이용하기 힘듦&lt;/li&gt;
&lt;li&gt;다른 task를 푸는데도 도움이 될 수 있는 정보들을 그대로 overwriting 시킴&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;기존 prompt-tuning의 한계&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;많은 researchers는 PLM의 parameters를 고정시켜 문제를 해결하려고함&lt;/li&gt;
&lt;li&gt;prmpt tuning은 input에 tuned prompt를 덧붙여 downstream tasks로 adaptation 시키는 방법&lt;/li&gt;
&lt;li&gt;하지만 input-dependent한 dynamic prompt 영역에 대한 연구는 부족&lt;/li&gt;
&lt;li&gt;기존 controlled generation 기법들은 task에 대한 성능과는 관련없이 특정한 text를 생성시키는게 목표이거나, attribute-level parmameters 뿐만 아니라 PLM까지 모두 update됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;dynamic prompting method &amp;quot;control prefix&amp;quot;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;prefix-tuning을 확장시켜 PLM의 모든 lyaers에 static task-specific prompt를 통합시킴&lt;/li&gt;
&lt;li&gt;PLM의 parameters는 fixed된 상태에서 datapoint-specific attributes가 input-level에서 가이드하는 역할을 함&lt;/li&gt;
&lt;li&gt;이를 위해 control prefixes가 주어진 guidance에 따라 input을 변경시킴&lt;/li&gt;
&lt;li&gt;이러한 dynamic prompts는 static prompt parameters와 같이 작동하여 frozen PLM을 finer-grained control로 확장시킴&lt;/li&gt;
&lt;li&gt;선택된 attributes에는 input에 대한 추가정보(e.g. data-to-text triple set의 domain)를 주거나 생성 됐으면 하는 output의 특성(e.g. text길이)을 명시할 수 있음&lt;/li&gt;
&lt;li&gt;각각의 dataset에 specific한 추가적인 input-level information을 이용해서 다양한 text generation tasks를 평가&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;experiment&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;기존 방법론들을 상회하는 성능을 보여줌 (WebNLG, DART, E2E Clean)&lt;/li&gt;
&lt;li&gt;higher human-assessed performance for summerisation on SUM&lt;/li&gt;
&lt;li&gt;attribute-level information을 이용할 수 있는 dataset에 focus를 둠 (실험 시)&lt;/li&gt;
&lt;li&gt;하지만 attribute-level information을 이용할 수 없는 경우가 일반적이기 때문에 control prefixes를 이용한 zero-shot learning이 효율적일 수도 있다는 것을 함께 보여줌  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Related Work&lt;/h3&gt;
&lt;h5&gt;prompt tuning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;prompt tuning: discrete한 prompting과는 다르게 soft prompt는 gradient descent를 이용한 labelled data의 정보를 최대로 이끌어냄&lt;/li&gt;
&lt;li&gt;prompt embedding tuning: input embedding에 덧붙여지는 prompt embedding을 학습시킴&lt;/li&gt;
&lt;li&gt;prefix-tuning: NLG에 특화된 prompt embedding tuning으로 모든 examples이 함께 사용하는 학습가능한 K-V pairs가 존재하고 left context를 attention 시키는데 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Controlled generation&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;controlled generation은 다양한 종류의 guiance를 이용해서 prompt learning이 부족한 부분을 채워줌&lt;/li&gt;
&lt;li&gt;각각의 language를 인코딩한 control tokens으로 이용한 multilingual translation model&lt;/li&gt;
&lt;li&gt;하지만 이러한 모델은 contorl prefixes 뿐만 아니라 PLM의 paramters도 학습시켜야함&lt;/li&gt;
&lt;li&gt;대안으로 plug-and-play 방식들도 존재하는데, topic이나 sentiment같은 생성되는 글의 성격을 control 할 수 있음&lt;/li&gt;
&lt;li&gt;하지만 추가적은 computation으로 inference시에 느린 단점이 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Dynamic prompts&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;input에 denpendent하다는 특징을 갖고있는 dynamic prmpts에 대한 연구는 거의 없음&lt;/li&gt;
&lt;li&gt;가장 비슷한 연구로는 dynamic prompts를 구성하기 위해 attribute alignment function을 사용한 방법이 존재&lt;/li&gt;
&lt;li&gt;하지만 이 방법은 static한 component는 사용하지 않고, task에 대한 성능은 고려하지 않고 특정한 target 속성을 생성하는 것을 목적으로 함&lt;/li&gt;
&lt;li&gt;control prefixes는 task를 명시할 수 있는 static prompt component도 사용해서 task 성능도 향상시킴  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Contorl Prefixes&lt;/h3&gt;
&lt;h4&gt;3.1. Background&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;이 연구는 조건부 확률 $P(Y|X)$를 objective로 하는 seq2seq tasks를 대상으로 함&lt;/li&gt;
&lt;li&gt;$X$:tokenised input, $Y$: output sequences (e.g. summerisation: $X$=article, $Y$=highlight)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;PLM ($\phi$)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;enc-dec models decoding auto-regressively - T5-large, BART$_LARGE&lt;/li&gt;
&lt;li&gt;$\phi$ 는 학습 시 frozen&lt;/li&gt;
&lt;li&gt;$d$: hidden state dimension, $L$: the number of layers&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;attention class $(E, D_c, D_m)$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;각 layer에 존재하는 3가지 attention ($E$ = encoder self-attention, $D_c$: decoder cross-attention, $D_m$: decoder masked-attention)&lt;/li&gt;
&lt;li&gt;l-th layer의 attention computation을 위해 $Q, K, V$ 존재 ($Q_l \in \mathbb{R}^{N \times d}$, $K_l, V_l \in \mathbb{R}^{M \times d}$)&lt;/li&gt;
&lt;li&gt;$N$: the number of tokens relating queries, $M$: the number of tokens relating keys and values&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. Intuition&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;frozen PLM은 자연어에 대한 폭넓은 이해를 갖고있고 이는 tasks에 공유될 수 있는 parameter-efficient한 방법에 시작점을 제공함&lt;/li&gt;
&lt;li&gt;여기에 trainable task-specific parameters를 더해서 model이 특정한 task와 관련된 정보를 학습할 수 있도록 함&lt;/li&gt;
&lt;li&gt;여기에 attribute-level parameters를 추가함으로써 모델이 원하는 방향대로 output을 생성할 수 있도록 datapoint-level information을 제공해줌&lt;/li&gt;
&lt;li&gt;general task-specific parameters는 각각의 input $X$의 모듈화된 가이드 신호(guide signal)에 따라 따라 변화하는 control prefixes에 맞게 adaptation 됨&lt;/li&gt;
&lt;li&gt;여기서 guide signal로 attributes를 discrete labels로 이용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.3. Description&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$P_{\theta}$: a general task prefix (=task-specific parameters)&lt;/li&gt;
&lt;li&gt;$C_{\theta}$: a set of control prefixes (=attribute-level parameters)&lt;/li&gt;
&lt;li&gt;input $X$를 처리할 때 어떤 control prefixes를 사용할지 나타내는 guidance $G$를 필요로 함&lt;/li&gt;
&lt;li&gt;corpus $Z = \{\langle X^j,Y^j,G^j \rangle \}_{j=1,\ldots,N}$&lt;/li&gt;
&lt;li&gt;$G^j$: 모든 conditional attribute-level information for the sample $j$&lt;/li&gt;
&lt;li&gt;gradient descent를 통해 최종적으로 inference parameters $\phi$를 최적화시키는 것이 목적 ($\phi$는 fixed)&lt;br&gt;$$ \theta^* = \arg\max_{\theta} \sum^{N}_{j=1} \log p(X^j, G^j; P_{\theta}, C_{\theta}, \phi)$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;General Prefix&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;attention $(E, D_c, D_m)$마다 K-V pairs의 prefix가 각각 학습됨 &lt;/li&gt;
&lt;li&gt;$P=\{P_1, \ldots , P_2 \}, P_l \in \textbb{R}^{\rho \times 2d}$&lt;/li&gt;
&lt;li&gt;$\rho$ = prompt length&lt;/li&gt;
&lt;li&gt;prefix-tuning에서는 l-th layer에서 일어나는 attention을 위해 $K^l$, $V^l$은 다음과 같이 agumented 됨&lt;br&gt;$$ K_{l}&amp;#39; = [P_{l,K} ; K_l], V_{l}&amp;#39; = [P_{l,V} ; K_l] $$ &lt;/li&gt;
&lt;li&gt;$ K_l&amp;#39;, V_l&amp;#39; \in \mathbb{R}^{(\rho + M)\times dL}$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Control Prefixes&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;하나의 attribute가 R개의 labels를 가질 수 있다고 가정 (e.g. news domain: sport, technology, ...)&lt;/li&gt;
&lt;li&gt;$C_{\theta} = \{C_{\theta,1},\ldots,C_{\theta,R}\}$&lt;/li&gt;
&lt;li&gt;$C_{\theta,r} \in \mathcal{R}^{\rho_c \times 6dL} $: r-th attribute label에 대해서 학습한 control prefix&lt;/li&gt;
&lt;li&gt;$\rho_c$: control prompt length (attribute에 따라 달라짐)&lt;/li&gt;
&lt;li&gt;$\mathcal{A}$: $G$가 가리키는 attribute label에 상응하는 control prefix를 반환하는 함수&lt;br&gt;$$ K_{l}&amp;#39;&amp;#39; = [\mathcal{A}(G)_{l,K} ; P_{l,K} ; K_l], V_{l}&amp;#39;&amp;#39; = [\mathcal{A}(G)_{l,V} ; P_{l,V} ; K_l]$$ &lt;/li&gt;
&lt;li&gt;$ K_l&amp;#39;&amp;#39;, V_l&amp;#39;&amp;#39; \in \mathbb{R}^{(\rho_c + \rho + M)\times d} $&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Shared Re-parameterisation&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;기존 연구에 의해 학습가능한 parameters 수를 늘려서 prefix optimisation을 안정화 시킬수 있다는 것이 밝혀짐&lt;/li&gt;
&lt;li&gt;위의 연구에서는 prefix를 re-parameterisation하기 위해 1층 짜리 MLP를 사용했는데, 이 논문에서는 각각의 attention에 대응되도록 2층짜리 MLP를 3개 이용함&lt;/li&gt;
&lt;li&gt;각각의 attnetion class $[E, D_c, D_m]$ 마다, $P=MLP(\tilde{P})$ 이고 중간 hidden size $k$는 800으로 설정 ($\tilde{P} \in \mathbb{R}^{\rho \times d}$)&lt;/li&gt;
&lt;li&gt;MLP와 $\tilde{P}$는 $\tilde{\theta}$에 의해 parameterised 됨&lt;/li&gt;
&lt;li&gt;여기서 $\theta$는 $\tilde{\theta}$의 function이고 $|\theta| &amp;lt; |\tilde{\theta}|$&lt;/li&gt;
&lt;li&gt;학습완료 후 $\theta$는 저장하고 $\tilde{\theta}$는 폐기해도 됨&lt;/li&gt;
&lt;li&gt;general prefix $P_{\theta}$처럼 contorl prefix $C_{r,\theta} = \{C_{r}^{E}, C_{r}^{D_c}, C_{r}^{D_m}\}$는 각각의 attention를 위해 구성됨 &lt;/li&gt;
&lt;li&gt;MLP 또한 위처럼 $MLP^E, MLP^{D_c}, MLP^{D_m}$ 존재&lt;/li&gt;
&lt;li&gt;over-parameterisation은 optimisation landscape을 더 부드럽게 하는 효과가 있음&lt;/li&gt;
&lt;li&gt;3개의 분리된 re-parameterisation은 각각의 prefix element가 control과 시너지를 낼 수 있게함&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/46</guid>
      <comments>https://joonable.tistory.com/46#entry46comment</comments>
      <pubDate>Sat, 13 May 2023 21:40:16 +0900</pubDate>
    </item>
    <item>
      <title>[P-tuning] GPT Understands, Too (2021) 논문리뷰</title>
      <link>https://joonable.tistory.com/45</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstarct&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Problem: 전통적인 fine-tuning이 적용된 GTPs는 NLU tasks에서 좋은 performance를 보여주지 못함&lt;/li&gt;
&lt;li&gt;P-tuning: 학습가능한 trainable continuous prompt embedding을 도입하여, NLU tasks에서 BERT 계열 모델들에 상응하거나 이를 상회하는 성능을 이끌어냄&lt;/li&gt;
&lt;li&gt;benchmarks: LAMA (knowlege probing) benchmar, SuperGLUE&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;h5&gt;pre-trained language model(PLM)의 한계 (특히 GPT)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;LM을 pre-training 하는 것은 많은 tasks를 통해 성능이 증명됨&lt;/li&gt;
&lt;li&gt;pre-training을 통해 LM은 contextualised text representation을 학습할 뿐만 아니라, grammar, syntactic, commonsense, 그리고 world-knowledge 또한 습득할 수 있음&lt;/li&gt;
&lt;li&gt;training objective에 따라 pre-trained model은 3가지로 구분가능&lt;/li&gt;
&lt;li&gt;unidirectional LM for NLG (GPT), bidirectional LM for NLU (BERT), hybrid LM for combining two paradigms (XLNet)&lt;/li&gt;
&lt;li&gt;GPT 계열의 모델들은 NLU 관련 tasks에서 뛰어난 성능을 보여주지 못해서, GPT는 NLU에 적합하지 않다는 편견이 존재함&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Prompting의 한계&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;GPT3와 hand-crafted prompts를 이용한 few-shot learning은 GPT 모델도 NLU tasks에서 충분히 좋은 성능을 낼 수 있음을 보여줌&lt;/li&gt;
&lt;li&gt;하지만 best performance를 낼 수 있는 prompt를 손으로 구성하고 찾는건 (impractically) 매우 힘든일이고 수많은 validation set을 필요로 함&lt;/li&gt;
&lt;li&gt;prompt engineering은 overfitting을 초래하고 adversarial prompt를 허용함&lt;/li&gt;
&lt;li&gt;그래서 최근 연구들은 자동으로 discrete한 형태의 prompts를 찾는데 관심이 집중돼있으나, NN 자체가ㅏ continuous한 값을 다루기 때문에 성능이 sub-optimal 하다는 한계가 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;P-Tuning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;continuous한 형태의 prompt를 찾아서 GPTs와 NLU tasks 사이의 가교 역할을 함&lt;/li&gt;
&lt;li&gt;적은 수의 continuous free parameters를 prompt로 이용해서 pre-trained model의 input으로 넣어줌&lt;/li&gt;
&lt;li&gt;continuous prompts는 gradient descent를 통해 optimisation 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Experiment&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;knowledge pobing: PLM의 parameter는 fixed 시킨 상태에서 hancraft prompts와 p-tuning 비교&lt;/li&gt;
&lt;li&gt;SuperGLUE: few-shot과 full-superivsed settings에서 p-tuning과 fine-tuning 방식 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;contributions&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;GPT가 NLG에만 강하고 NLU에는 취약하다는 편견을 없앰&lt;/li&gt;
&lt;li&gt;P-tuning이 적용된 BERT 계열, GPT 계열 모델이 few-shot과 fully-supervised settings에서 모두 좋은 성능을 내는걸로 보아 pre-tuning 단계에서 예상보다 더 많은 world knowledge와 prior-task knowledge를 얻는 걸 알 수 있음&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Motivation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;GPT3와 DALLE로 인해, 거대한 모델이 만병통치약인것처럼 여겨졌지만, 그 뒤에는 challeges가 존재했음&lt;/li&gt;
&lt;li&gt;handcrafted prompts가 모델이 downstream tasks를 잘 처리할 수 있도록 하지만, handcrafted prompts를 찾는 것은 수 많은 validation set을 요구하고 performance 또한 일관되지 않음&lt;/li&gt;
&lt;li&gt;단순히 prompt 내 token의 위치가 하나만 바껴도 모델 결과가 너무 많이 달라짐&lt;/li&gt;
&lt;li&gt;이러한 문제 떄문에 최근 연구들은 discrete한 형태의 prmpts를 자동으로 찾을 수 있도록하는데 초점이 맞춰져 있음 &lt;/li&gt;
&lt;li&gt;mining training corpus, gradient searching, using seperate model 등의 기법이 이용됨&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Method: P-tuning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;P-tuning은 discrete한 prompts와 유사하지만 input을 직접적으로 바꾸지 않고, pre-trained 모델의 input embedding을 미분가능한 output embedding으로 바꿈(?)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.1. Architecture&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;pre-trained model을 $\mathcal{M}$ 이라고 했을 때, discrete한 tokens의 sequence로 이루어진 $\mathbf{x}_{1:n} = \{ x_0, x_1,\ldots, x_n \}$은 pre-trained embedding layer $\mathbf{e} \in \mathcal{M}$에 의해 input embedding 형태 $\{\mathbf{e}(x_0), \ldots, \mathbf{e}(x_n)\}$ 로 mapping 됨. &lt;/li&gt;
&lt;li&gt;특정 시나리오에서 context $\mathbf{x}$에 대한 조건으로 downstream tasks를 위해 target tokens $\mathbf{y}$의 embedding 값을 사용하기도 함&lt;/li&gt;
&lt;li&gt;e.g. pre-training: $\mathbf{x}$ = unmaksed tokens, $\mathbf{y}$ = [MASK]&lt;/li&gt;
&lt;li&gt;e.g. sentence classification: $\mathbf{x}$ = sentence tokens, $\mathbf{y}$ = [CLS]&lt;/li&gt;
&lt;li&gt;prompt $\mathbf{p}$의 역할은 prompt 자신과, context $\mathbf{x}$, target $\mathbf{y}$를 template $T$ 형태로 정리한 것&lt;/li&gt;
&lt;li&gt;예를 들어 한 나라의 수도를 예측한다고 했을떄, template은 &amp;quot;The capital of Britain is [MASK]&amp;quot;가 될 것이고, &amp;quot;The capital of ... is ...&amp;quot;는 prompt, Britain은 context, [MASK]가 target이 됨.&lt;/li&gt;
&lt;li&gt;prompt는 flexible 해서 context을 넣을 수도 있고 target에 넣을 수도 있음&lt;/li&gt;
&lt;li&gt;$\mathcal{V}$는 vocabulary를 의미하고 $[P_i]$는 $T$ 내 ith prompt token 임&lt;/li&gt;
&lt;li&gt;결과적으로 Template은 다음과 같은 형태가 됨 :&lt;br&gt;$$T = \{ [P_{0:i}], \mathbf{x}, [P_{i+1:m}], \mathbf{y} \}$$&lt;/li&gt;
&lt;li&gt;$[P_i] \in \mathcal{V}$를 만족하는 discrete한 prompts의 template은 다음과 같은 형태가 됨 :&lt;br&gt;$$T = \{ \mathbf{e}([P_{0:i}]), \mathbf{e}(\mathbf{x}), \mathbf{e}([P_{i+1:m}]), \mathbf{e}(\mathbf{y}) \}$$&lt;/li&gt;
&lt;li&gt;$[P_i]$가 pseudo tokens처럼 간주되는 P-tuning은 다음과같은 형태가 됨&lt;br&gt;$$T = \{ h_0, \ldots , h_i, \mathbf{e}(\mathbf{x}), h_{i+1}, \ldots , h_m, \mathbf{e}(\mathbf{y}) \}$$&lt;/li&gt;
&lt;li&gt;여기서 $h_i(0&amp;lt;i&amp;lt;m)$는 학습가능한 embedding tensor이고 다음 downstream loss function $\mathcal(L)$에 의해 optimisation 됨&lt;br&gt;$$\hat{h}_{0:m} = arg \min_h \mathcal{L(M(\mathbf{x, y}))}$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. Optimisation&lt;/h4&gt;
&lt;h5&gt;두 가지 optimisation challenges&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Discreteness: $\mathcal{M}$의 original embedding layer $\mathbf{e}$는 pre-training을 거치면서 discrete 하게 변했는데, 그에 반해 $h$는 random distribution으로 initialisation 돼서 SGD에 의해 optimised 되는데, 이는 local minima에 빠질 가능성이 높음&lt;/li&gt;
&lt;li&gt;Associations: prompt embedding $h_i$의 값이 서로 의존적이어야 하기 떄문에, $h_i$를 서로 연결시키는 mechanism이 필요함&lt;/li&gt;
&lt;li&gt;Discreteness와 Association problems 모두 해결하기 위해, P-tuning에서는 매우 작은 NN으로 구성된 prompt encoder를 이용해서 $h_i$를 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;prompt encoder&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;prompt encoder로 bidirectional LSTM 구조에 discreteness를 촉진시키기위해 two-layer MLP와 ReLU를 사용&lt;/li&gt;
&lt;li&gt;real input embedding $h_i$는 다음과 같이 유도됨&lt;br&gt;$$h_i = MLP([\overrightarrow{h_i}]:[\overleftarrow{h_i}]) = MLP([LSTM(h_{0:i}):LSTM(h_{i:m})])$$&lt;/li&gt;
&lt;li&gt;LSTM 떄문에 parameter 수가 더 추가 되지만 $\mathcal(M)$에 비하면 훨씬 작음&lt;/li&gt;
&lt;li&gt;inference 시에는 LSTM은 무시하고 $h_i$만 사용하면 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;anchor tokens&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;anchor tokens를 추가하는 것이 NLU tasks에 도움을 줌.&lt;/li&gt;
&lt;li&gt;각각의 component를 characterise 시키는 역할을 함&lt;/li&gt;
&lt;li&gt;e.g. RTE Task, [PRE][prompt tokens][HYP]?[prompt tokens][MASK]처럼 ?를 anchor token으로 사용할 수 있는데, 이는 [HYP]가 의문형이라는 것을 나타내고 나아가 성능에 큰 영향을 끼침&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Experiments&lt;/h3&gt;
&lt;h4&gt;4.1. knowledge probing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fact retrieval이라고도 불리며, PLM이 pre-tuning을 통해 얼마나 많은 world knowledge를 습득했는지 평가하기 위해 사용&lt;/li&gt;
&lt;li&gt;LAMA: knowledge-base에서 뽑아낸 triples로 빈칸 맞추기 test를 하는 dataset&lt;/li&gt;
&lt;li&gt;e.g. triple(Dante, born-in, florence) -&amp;gt; &amp;quot;Dante was born in [MASK]&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.1.1. Datases and Formulation&lt;/h5&gt;
&lt;h5&gt;Datasets&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;LAMA는 모든 정답을 single-token format으로 답해야함&lt;/li&gt;
&lt;li&gt;GPT와 BERT가 커버하는 vocabularies가 다르기 때문에, 두 vocabularies의 intersection으로만 이루어진 dataset 구성&lt;/li&gt;
&lt;li&gt;prompt searching은 prompts를 찾기위해 data가 추가로 더 필요한데, 이는 AutoPrompts에서 사용된 setting을 따라서 추가로 prompts 학습&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Evaluation&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;LAMA는 hand-crafted prompt를 task 마다 제공&lt;/li&gt;
&lt;li&gt;bidirectional masked LMs: [$textbf{x}$] = subject entity, [$textbf{y}$] = [MASK]&lt;/li&gt;
&lt;li&gt;unidirectional masked LMs: TransformerXL에 사용된 LAMA의 original setting을 따름, model의 output을 target position 전에 사용&lt;/li&gt;
&lt;li&gt;template: (3, sub, 3, obj, 3) or (3, sub, 3, obj) (3은 prompt tokens 갯수)&lt;/li&gt;
&lt;li&gt;anchor token은 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.1.2. Results:&lt;/h5&gt;
&lt;h5&gt;General performance&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;P-tuning의 성능이 기존의 결과를 압도하면서, parameter를 frozen된 상태로 prompt learning만으로 더 많은 knowledge를 얻을 수 있다는 것을 보여줌&lt;/li&gt;
&lt;li&gt;discrete prompt를 찾는 AutoPrompts보다도 훨씬 더 나은 성능을 보여줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;P-tuning v.s. Fine-tuning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;질문: unidirectional models과 bidirectional models에 P-tuning이 적용 됐을 때, 향상되는 성능의 정도가 비슷한가?&lt;/li&gt;
&lt;li&gt;methods: manual prompt (MP), fine tuning (FT), MP+FT, P-tuning&lt;/li&gt;
&lt;li&gt;P-tuning &amp;gt; fine-tuning based methods: catastrophic forgetting 발생&lt;/li&gt;
&lt;li&gt;MP+FT에서 BERT에 비해 GPT는 큰 효과를 보지 못함&lt;/li&gt;
&lt;li&gt;P-tuning은 unidirectional LMs와 좀 더 밀접한 관계를 갖고 있음&lt;/li&gt;
&lt;li&gt;megatronLM은 아예 FT을 OOM 때문에 진행할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.2. SuperGLUE&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;8개의 NLU tasks로 실험&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;NLU tasks는 빈칸 채우기 문제로 재구성&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;fully-supervised setting&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathcal{D_{train}}$과 $\mathcal{D_{dev}}$를 이용해서 hyper-parameter tuning 및 model selection을 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;few-shot setting&lt;ul&gt;
&lt;li&gt;SuperGLUE few-shot 버전인 FewGLUE 사용&lt;/li&gt;
&lt;li&gt;각 task마다 32개의 training dataset $\mathcal{D_{train32}}$와 $\mathcal{D_{unlabelled}}$ 존재&lt;/li&gt;
&lt;li&gt;사용하지 않는 training set 중에 32개를 임의로 뽑아서 $\mathcal{D_{dev32}}$ 구성 (성능에 큰 영향을 끼침)&lt;/li&gt;
&lt;li&gt;FT, PET FT, PET zero-shot 등 여러 methods와 함께 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;P-tuning은 unidirectional, bidirectional 모두 적용가능하고 공정한 비교를 위해 size가 비슷한 모델끼리 비교&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.2.1. Fully-supervised Learning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;BERT 계열 모델의 경우 대부분의 tasks에서 P-tuning이 MP, FT, FT+MP의 성능을 뛰어넘음&lt;/li&gt;
&lt;li&gt;성능이 안 좋게 나온 이유는 해당 task에 사용된 data가 많아서 FT에 더 유리한 환경이었으리라 예쌍&lt;/li&gt;
&lt;li&gt;GPT 계열 모델들도 좋은 성능을 보여줌&lt;/li&gt;
&lt;li&gt;P-tuning은 NLU task에 대해서 unidirectional, bidirectional 성능을 모두 올려줌&lt;/li&gt;
&lt;li&gt;P-tuning이 적용된 BERT 계열과 GPT 계열 모델들의 성능을 비교했을 떄, 오히려 GPT가 더 높은 성능을 보여 줌으로써 앞서 말한 편견을 없애는데 기여&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;4.2.2. Few-shot Learning&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;PET/iPET는 기존에 SuperGLUE에서 SotA 달성 (효율적이지만 노가다를 많이 필요로 하고 sub-optimal함)&lt;/li&gt;
&lt;li&gt;few-shot learning은 semantics, format, grammar와는 상관관계가 뚜렷히 없음 (LM과 사람의 시각이 다름을 보여줌)&lt;/li&gt;
&lt;li&gt;manual prompt에서의 약간의 변화도 성능에 지대한 영향을 끼침&lt;/li&gt;
&lt;li&gt;best-performing prompt를 찾는건 불가능에 가깝고, continuous한 형태의 P-tuning이 더 우수함&lt;/li&gt;
&lt;li&gt;공정한 비교를 위해 PET에 적용되는 data agumentation, ensemble, distilation 등을 제거하고 model selection과 hyper-parameter tuning의 영향을 없애기 위해 $\mathcal{D_{dev32}}$로 재실험&lt;/li&gt;
&lt;li&gt;P-tuning이 모든 tasks에서 PET의 성능을 압도함&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/45</guid>
      <comments>https://joonable.tistory.com/45#entry45comment</comments>
      <pubDate>Sat, 13 May 2023 04:29:28 +0900</pubDate>
    </item>
    <item>
      <title>Prefix-Tuning: Optimizing Continuous Prompts for Generation (2021) 논문 리뷰</title>
      <link>https://joonable.tistory.com/44</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fine-tuining&lt;ul&gt;
&lt;li&gt;Fine-tuining은 large pre-trained language models(LM)로 downstream tasks를 수행하기 위해 널리 사용되는 방법&lt;/li&gt;
&lt;li&gt;하지만 LM의 parameters를 모두 update해야해서 각 task마다 LM의 full copy를 필요로 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Prefix-tuning&lt;ul&gt;
&lt;li&gt;fine-tuning 보다 더 가벼운 대안으로 LM의 parameters는 freezing 시킨 채, prefix라고 불리는 작은 continuous task-specific vector를 최적화하는 방법&lt;/li&gt;
&lt;li&gt;prompting에서 영감을 받았으며, prefix는 virtual tokens 처럼 동작하며 prefix 뒤에 나오는 tokens에 영향을 줌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Experiment&lt;ul&gt;
&lt;li&gt;tasks: table-to-text task (GPT2), summerisation task (BART)&lt;/li&gt;
&lt;li&gt;results:&lt;ul&gt;
&lt;li&gt;full dataset setting에서는 fine-tuning 결과와 comparable&lt;/li&gt;
&lt;li&gt;low dataset setting, extrapolation에서는 fine-tuning 결과를 outperform&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fine-tuning&lt;ul&gt;
&lt;li&gt;LMs을 downstream tasks에서 활용하기 위한 일반적인 방법&lt;/li&gt;
&lt;li&gt;하지만 각 task마다 별도의 LMs 두어야해서 매우 비쌈&lt;/li&gt;
&lt;li&gt;e.g. GPT2(774M), GPT3(175B)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Adapter-tuning&lt;ul&gt;
&lt;li&gt;pre-trained LMs 내 layers 사이에 task-specific layers를 추가하는 방법&lt;/li&gt;
&lt;li&gt;약 2-4%의 추가 parameters를 필요로 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Prompting (= in-context learning)&lt;ul&gt;
&lt;li&gt;GPT3에 사용된 방법으로 task-specific tunning을 사용하는 대신, 자연어로된 instruction과 몇 가지 examples를 input text에 덧붙이는 방법&lt;/li&gt;
&lt;li&gt;약 2-4%의 추가 parameters를 필요로 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Prefix-tuning&lt;ul&gt;
&lt;li&gt;natural language generation (NLG) tasks를 위한 fine-tuning을 대체할 수 있는 비교적 가벼운 방법&lt;/li&gt;
&lt;li&gt;하나의 data table의 description을 생성해내는 task를 고려할 때 (table-to-text task), input은 linearised table이 되고 output은 textual description이 됨 (e.g. input = {name: starbucks, type: coffee shop}, output = starbucks serves coffee)&lt;/li&gt;
&lt;li&gt;정확히는 prefix라고 불리는 continuous task specific vectors를 input에 덧붙이는 방법&lt;/li&gt;
&lt;li&gt;Transformer는 prefix 이후에 오는 tokens를 위해 prefix를 virtual tokens처럼 첨조 (하지만 prompting과는 다르게 prefix는 실제 tokens로 이루어지지 않음)&lt;/li&gt;
&lt;li&gt;task마다 LM의 모든 parameters를 tuning 시켜 각 copy를 따로 저장해야하는 fine-tuning 과는 다르게, prefix-tuning은 prefix만 optimisation 시키면 돼서 훨씬 효율적임&lt;/li&gt;
&lt;li&gt;prefix-tuning은 task마다 prefix를 별도로 저장할 수 있어서 모듈화 관점에서도 더 나은 모델&lt;/li&gt;
&lt;li&gt;personalisation 문제에 측면에서 각 user를 task라고 생각했을 때, data cross-contamination을 막을 수 있는 등 여러 이점이 존재&lt;/li&gt;
&lt;li&gt;table-to-text generation task과 summerisation task를 downstream tasks로 실험 했고, 각각 GPT2와 BART가 pre-trained LM으로 사용됨&lt;/li&gt;
&lt;li&gt;full dataset setting에서는 fine-tuning고 필적할만한 결과를 보여줬고, low dataset setting과 extrapolation에서는 fine-tuning 보다 더 나은 성능을 보여줌&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Replated Work&lt;/h3&gt;
&lt;h4&gt;Fine-tuning for natural language generation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;NLG tasks와 관련된 기존 연구들 소개&lt;/li&gt;
&lt;li&gt;이 논문에서는 prefix-tuning에 table-to-text generation과 summerisation만 실험하지만 machine translation과 dialogue generation 같은 다양한 tasks에도 적용 가능함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Lightwiehgt fine-tuning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;pre-trained model의 parameters 대부분을 freezing 시키고, 작은 trainable moudles를 추가하여 model을 update 하는 방법&lt;/li&gt;
&lt;li&gt;key challenge: 높은 성능을 낼 수 있는 modules의 architecture 및 pre-trained model 내 parameters를 알아내는 것&lt;/li&gt;
&lt;li&gt;removing parameters: pre-trained model 내 몇몇 weights를 masking 시켜 무력화시킴&lt;/li&gt;
&lt;li&gt;adding parameters: task-specific layers(adapters)를 pre-trained LM의 layers 사이에 추가 (약 3.0% 추가 parameters 필요하고 이는 prefix-tuning 대비 약 30배에 해당하는 수치)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Prompting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;자연어로된 instruction과 예제 몇개를 text input에 덧붙여서 output을 생성시키는 방법&lt;/li&gt;
&lt;li&gt;GPT3는 prompt를 manually 설계하여 각기 다른 tasks 결과를 생성시키는데 사용하고, in-context learning이라고도 불림&lt;/li&gt;
&lt;li&gt;하지만 in-context learning은 LMs이 처리할 수 있는 sequence의 길이에 제약을 받음&lt;/li&gt;
&lt;li&gt;prompt engineering:&lt;ul&gt;
&lt;li&gt;topic이나 sentiment를 control 할 수 있는 keywords를 이용해 prompting하는 방법&lt;/li&gt;
&lt;li&gt;e.g. AutoPrompt: sentiment 내 factual knowledge를 유도할 수 있는 discrete한 형태의 sequence를 찾는 방법&lt;/li&gt;
&lt;li&gt;prefix-tuning은 discrete보다 더 expressive한 continous vectors를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;continuous vectors 예시&lt;ul&gt;
&lt;li&gt;input text를 continuous vector represention으로 최적화하여 pre-trained LM이 임의의 문장을 reconstruct 할 수 있는 방식이 존재 (input-specific)&lt;/li&gt;
&lt;li&gt;prefix-tuning은 task-specific한 방법으로 하나의 task 내 instances에 적용가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Contorallable generation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;pre-trained model을 sentence-level atrribute에 충족하도록 유도하는 방법&lt;/li&gt;
&lt;li&gt;e.g. training time: pre-trained LM을 keyword나 URL 같은 metadata도 고려할 수 있도록 학습&lt;/li&gt;
&lt;li&gt;e.g. decoding time: weighed decoding이나 과거의 activations를 지속적으로 udpate 시킬 수 있음&lt;/li&gt;
&lt;li&gt;하지만 NLG 같은 tasks 적용할 수 있는 이렇다 할만한 정교한 방법이 없음&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Problem Statement&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;input: a context $x$&lt;/li&gt;
&lt;li&gt;output: a sequence of tokens $y$&lt;/li&gt;
&lt;li&gt;table-to-text: $x$ = a linearised data table, $y$ = a textual description&lt;/li&gt;
&lt;li&gt;summerisation: $x$ = an article, $y$ = a short summary3.1. Autoregressive LM&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.1. Autoregressive LM (GPT)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$P_{\phi}(y|x)$: Transformer-based autoregressive model parameterised by $\phi$&lt;/li&gt;
&lt;li&gt;$z=[x;y]$: concatenation of $x$ and $y$&lt;/li&gt;
&lt;li&gt;$\mathtt{X_{idx}}$: a sequence of $x$ indicies&lt;/li&gt;
&lt;li&gt;$\mathtt{Y_{idx}}$: a sequence of $y$ indicies&lt;/li&gt;
&lt;li&gt;$h_i = [h_i^{(1)}; ... ; h_i^{(n)}]$: concatenation of all activation layers at time step $i$&lt;br&gt;$$ h_i = LM_{\phi}(z_i, h_{&amp;lt;i})$$&lt;/li&gt;
&lt;li&gt;autoregressive Transformer model은 $z_i$의 $h_i$와 left context에 해당하는 지난 activations을 계산&lt;/li&gt;
&lt;li&gt;$h_i$의 마지막 layer는 다음 token을 예측하기 위해 사용&lt;/li&gt;
&lt;li&gt;$P_{\phi}(z_{i+1}|h_{\leq i}) = softmax(W_{\phi}h_i^{(n)})$: pre-trained matrix인 $W_{\phi}$는 $h_i^{(n)}$과 mapping되어서 vocabulary의 logits을 구하게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. Encoder-Decoder Architecture (BART)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$x$: bidirectional encoder에 의해 인코딩 됨&lt;/li&gt;
&lt;li&gt;$y$: decoder에 autoregressively predict 됨&lt;/li&gt;
&lt;li&gt;이외 notations는 상동&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.3. Method: Fine-tuning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$\phi$: pretrained parameters&lt;/li&gt;
&lt;li&gt;$p_{\phi}$: trainable LM distribution으로 다음 log-likelihood를 objective function으로 설정하여 학습&lt;br&gt;$$\max_{\phi} \log p_{\phi}(y|x) = \sum_{i\in\mathtt{Y_{idx}}} \log p_{\phi}(z_i|h_{&amp;lt;i})$$&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Prefix-Tuning&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;conditonal generation tasks를 위해 fine-tuning을 대체할 수 있는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.1. Intuition&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prompting은 모델 내부에 존재하는 parameters를 직접적으로 update 하지 않아도 모델을 원하는 방향으로 유도할 수 있다는 것을 보여줌&lt;/li&gt;
&lt;li&gt;e.g. 특정한 toaken($Obama$)를 생성시키고 싶을 때, 같이 등장하는 collocation($Barack$)을 context로 input에 덧붙일 수 있음&lt;/li&gt;
&lt;li&gt;prefix-tuning은 단순히 하나의 단어나 문장을 넘어서, NLG tasks를 잘 풀 수 있는 context를 찾는것&lt;/li&gt;
&lt;li&gt;context 역할: $x$를 인코딩할 때는 무엇을 extract 할지 가이드를 해주고, $y$를 생성할 때는 next token distribution에 영향을 줌 (하지만 이러한 context가 실제로 존재하는지는 미지수)&lt;/li&gt;
&lt;li&gt;prompting처럼 자연어로 instruction을 주는 것은 사람에게는 효과적이지만 대부분은 pre-trained model에서는 큰 효과를 보기 힘듦&lt;/li&gt;
&lt;li&gt;data 기반으로 context를 구하는건 도움이 될 수 있지만, discrete한 경우에는 계산상에 어려움을 겪을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.2. Method&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prefix-tuning은 $z=[prefix;x;y]$ 혹은 $z=[prefix;x;prefix&amp;#39;;y]$ 를 pre-trained LM에 input으로 사용할 수 있도록 prefix를 붙임&lt;/li&gt;
&lt;li&gt;$\mathtt{P_{idx}}$: a sequence of $prefix$ indicies&lt;/li&gt;
&lt;li&gt;$|\mathtt{P_{idx}}|$: the length of $prefix$&lt;/li&gt;
&lt;li&gt;prefix parameters를 저장하기 위해 $\theta$로 표현되는 $P_{\theta} \in \mathbb{R}^{|\mathtt{P_{idx}}| \times dim(h_i)}$를 initialisation&lt;/li&gt;
&lt;li&gt;cost function은 3.3. 에서 언급한 log-likelihood 사용하지만, pre-trained LM의 parameters인 $\phi$은 fixed된 상태에서 $\theta$만 학습시킴&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;$h_i$&lt;ul&gt;
&lt;li&gt;$i \in \mathtt{P_{idx}}$ 일 때 $P_{\theta}[i,:]$: $P_{\theta}$의 값을 그대로 복사해옴&lt;/li&gt;
&lt;li&gt;$i \notin \mathtt{P_{idx}}$ 일 때 $LM_{\phi}(z_i, h_{&amp;lt;i})$: prefix activations이 항상 left context로 존재해서 오른쪽에 존재하는 activations에 영향을 끼치기 때문에, 이 경우에도 $h_i$는 여전에 $P_{\theta}$에 depent함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.3. Parameterasation of $P_{\theta}$&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;실험적으로 $P_{\theta}$를 직접적으로 학습시키는 것은 학습을 불안정하게하고 성능을 하락 시킴&lt;br&gt;$$P_{\theta}[i,:] = MLP_{\theta}(P&amp;#39;_{\theta}[i,:])$$&lt;/li&gt;
&lt;li&gt;사이즈가 더 작은 matrix $P&amp;#39;&lt;em&gt;{\theta}$와 large feed-forward network을 이용해서 $P&lt;/em&gt;{\theta}$를 reparameterisation 함&lt;/li&gt;
&lt;li&gt;$P_{\theta}$와 $P&amp;#39;_{\theta}$의 row 수는 동일하고 column의 dimension만 다름&lt;/li&gt;
&lt;li&gt;traning이 완료되면, $P&amp;#39;&lt;em&gt;{\theta}$는 제거하고 $P&lt;/em&gt;{\theta}$만 저장해서 사용가능&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Experimental Setup&lt;/h3&gt;
&lt;h4&gt;5.1. Datasets and Metrics&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;table-to-text task&lt;ul&gt;
&lt;li&gt;datasets: E2E, WebLNG, DART&lt;/li&gt;
&lt;li&gt;metrics: BLUE, METEOR, TER, ROUGE, BertScore, BLEURT etc&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;summarisation task&lt;ul&gt;
&lt;li&gt;datasets: XSUM&lt;/li&gt;
&lt;li&gt;metrics: ROUGE family&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5.2. Methods&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;table-to-text task: fine-tuning, fine-tuning only the top 2 layers, and adapter-tuning&lt;/li&gt;
&lt;li&gt;summarisation task: fine-tuning BART&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5.3. Architectures and Hyperparameters&lt;/h4&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;h3&gt;6. Main Results&lt;/h3&gt;
&lt;h4&gt;6.1. Table-to-text Generation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prefix-tuning을 위해 단 0.1%의 task-specific parameters를 추가해서 fine-tuning에 상응하고 lightweight baselines 보다는 높은 성능 기록&lt;/li&gt;
&lt;li&gt;parameter 수를 조정하여 실험한 결과, prefix-tuning이 더 Pareto efficient 함을 알 수 있음&lt;/li&gt;
&lt;li&gt;training 시 보지 못한 categories와 domains에 대한 일반화 능력도 더 뛰어남 (extrapolation performance)&lt;/li&gt;
&lt;li&gt;more time- and space-efficient, more epressive&lt;/li&gt;
&lt;li&gt;scales from GPT to GPT_large&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;6.2. Summerisation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fine-tuning 보다는 낮은 결과 기록&lt;/li&gt;
&lt;li&gt;논문 저자는 XSUM(summerisation task에 사용된 dataset)이 table-to-text task에 사용된 datasets가 다르기 때문이라 설명&lt;/li&gt;
&lt;li&gt;XSUM은 4배 이상 많은 examples을 가지고 있고 text 길이 또만 약 17 배 이상 더 길면서, summerisation task 자체가 더욱 복잡한 task이기 때문&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;6.3. Low-data Setting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;매우 적은 수의 parameters 추가만으로 fine-tuning 기록을 모두 상회 (추가되는 parameters 수를 늘리면 격차도 더 벌어짐)&lt;/li&gt;
&lt;li&gt;qulititive evaluation에서도 더욱 신뢰할만한 결과를 보여줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;6.3. Extrapolation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;두 tasks에서 모두 extrapolation에 대해 더 나은 성능을 보여줌&lt;/li&gt;
&lt;li&gt;adatper-tuning도 좋은 performance를 보여주는 것으로 보아, LM parameter를 유지시키는 것이 extrapolation에 긍정적인 영향을 끼치는 것을 보여줌&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;7. Intrinsic Evaluation&lt;/h3&gt;
&lt;h4&gt;7.1. Prefix Length&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prefix의 길이가 길수록 어느 정도 threshold까지는 성능이 계속 증가하다가 threshold 이후 약간의 성능 하락이 존재&lt;/li&gt;
&lt;li&gt;inference speed 측면에서는 GPU 떄문에 큰 영향을 받지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;7.2. Full vs Embedding-only&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;이 부분은 자세히 이해가 안돼서 생략&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;7.3. Prefixing vs Infixing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prefixing $[prefix;x;y]$이 inifixing $[x;infix;y]$ 보다 더 뛰어남&lt;/li&gt;
&lt;li&gt;prefixing은 $x$, $y$에 모두 영향을 끼치는데 반해 infixing은 $y$에만 영향을 끼치기 때문인라 설명&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;7.4. Initialisation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;low-data setting에서 initialisation은 더욱 중요하게 작용&lt;/li&gt;
&lt;li&gt;ramdom initialisation의 경우 낮은 성능, 높은 분산을 기록&lt;/li&gt;
&lt;li&gt;real words를 이용해서 initialisation 할 경우, generalisation 측면에서 더 높은 성능을 보여줌&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;8. Discussion&lt;/h3&gt;
&lt;h4&gt;8.1. Personalisation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;prefix-tuning은 task마다 독립적으로 학습을 수행 할 수 있다는 이점이 있음&lt;/li&gt;
&lt;li&gt;이는 수 많은 사용자들에게 개인화된 정보를 제공해야하는 presonalisation 분야에 큰 장점으로 작용 (user privacy, modularity, efficiency)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;8.2. Batching Acress users&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;다수의 user도 하나의 batch의 배치로 구성할 수 있음&lt;/li&gt;
&lt;li&gt;sequence 앞에 위치한 prefix 부분만 따로 처리하면 Transformer layers는 동일하기 때문에 효율적인 training이 가능해짐&lt;/li&gt;
&lt;li&gt;그에 반해 adapter-tuning은 task-specific paramters가 Transformer layers 사이에 위치하므로 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;8.3. Inductive Bias of Prefix-tuning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;아직 open question이지만, prefix-tuning과 adapter-tuning은 pre-trained model의 parameters를 update하지 않으므로 generalisation 더 유리&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;9. Conclustion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;fine-tuning을 좀 더 가볍게 대체할 수 있는 continuous prefix를 덧붙이는 방법인 prefix-tuning 제안&lt;/li&gt;
&lt;li&gt;추가되는 parameters 수가 1000 배 이상 더 적음에도 불구하고, fine-tuning 모델에 full data setting에서는 상응할만한 결과를 low data setting과 explolation setting 에서는 상회하는 결과를 보여줌&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/44</guid>
      <comments>https://joonable.tistory.com/44#entry44comment</comments>
      <pubDate>Sun, 7 May 2023 23:06:00 +0900</pubDate>
    </item>
    <item>
      <title>AdapterHub: A Framework for Adapting Transformers (2020)</title>
      <link>https://joonable.tistory.com/43</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기존 fine-tuining 방식의 한계&lt;ul&gt;
&lt;li&gt;현재 NLP 분야의 작업 방식은 수백만에서 수십억에 이르는 paramters를 갖고 이쓴ㄴ pre-trained model을 downloading and fine-tuning 하는 과정이 포함됨&lt;/li&gt;
&lt;li&gt;이렇게 규모가 큰 모델을 저장하고 공유하는 것은 대체로 느리고, 비싸고, 그리고 많은 시간이 필요해서 project의 진전을 저해시키다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;기존 adapters의 한계&lt;ul&gt;
&lt;li&gt;adapter: 적은 수의 parameters로 이루어진 학습된 NN&lt;/li&gt;
&lt;li&gt;모델 전체를 fine-tuning 해야하는 수고로움을 덜어주지만, adapter를 공유하고 결합하는 방식은 그리 직관적이지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;AdapterHub&lt;ul&gt;
&lt;li&gt;다양한 tasks와 languages를 위해 학습된 adapter를 동적으로 모델에 장착할 수 있게 도와주는 framework&lt;/li&gt;
&lt;li&gt;huggingface library 상에서 만들어져서 쉽고 빠르게 adapter를 적용할 수 있도록 도와줌&lt;/li&gt;
&lt;li&gt;downloading, sharing, training과 같은 과정이 단 몇 줄의 code 추가로 이뤄짐&lt;/li&gt;
&lt;li&gt;이 framework은 scalable하고 쉽게 task-specific adapter를 공유 할 수 있게함&lt;/li&gt;
&lt;li&gt;자원이 한정적인 상황에서 특히 유용함&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Transformer-based language models&lt;ul&gt;
&lt;li&gt;방대한 양의 data로 pre-training 된 model로 target task에 맞게 fine-tuining 하는 과정을 거치게 됨&lt;/li&gt;
&lt;li&gt;e.g. &lt;/li&gt;
&lt;li&gt;많은 NLP tasks에서 SotA 달성&lt;/li&gt;
&lt;li&gt;(현재까지 model의 발전으로 보아) performance에 model size가 큰 영향을 끼치는 것을 알 수 있음&lt;/li&gt;
&lt;li&gt;model size가 billions에 이르는 현재 상황에서, fine-tuning을 논외하고, 다양한 tasks를 training하거나 sharing하는 것은 엄두도 내기 힘든 일임&lt;/li&gt;
&lt;li&gt;이것은 modular architecture, task composition, 그리고 large pre-trained model에 biases나 external information을 injecting 하는 것을 불가능 하게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Adapters&lt;ul&gt;
&lt;li&gt;full fine-tuining과 동등한 performance를 낼 수 있는 상대적으로 가벼운(lightweight) fine-tuning 전략&lt;/li&gt;
&lt;li&gt;transformer의 모든 layer에 추가된 적은 수의 weights로 이루어짐&lt;/li&gt;
&lt;li&gt;weights가 fine-tuining 될 떄, original model은 frozen 상태가 됨&lt;/li&gt;
&lt;li&gt;tasks 사이에서 효율적인 parameter sharing을 가능하게해서 많은 task에서 높은 성능을 보여줌&lt;/li&gt;
&lt;li&gt;하지만 이를 재사용하고 공유하는 과정은 그리 명확하지 않음&lt;/li&gt;
&lt;li&gt;model을 공유할 떄는 단순히 model weights만 필요한 것이 아니라, model architecture, language, task와 같은 중요한 정보가 필요&lt;/li&gt;
&lt;li&gt;다양한 목적(task, language, domain)을 가지고 학습된 모델을 손쉽게 결합할 수 있음&lt;/li&gt;
&lt;li&gt;intermediate task learning, composing information from many tasks, 그리고 training models for very low-resource language 같은 연구를 가능하게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;AdapterHub&lt;ul&gt;
&lt;li&gt;seamless한 traning &amp;amp; sharing을 도와줌&lt;/li&gt;
&lt;li&gt;Huggingface framework 상에서 동작하므로, 기존 코드에서 단 몇 줄의 code 추가로 adapter를 pre-trained 모델과 결합 시킬 수 있음&lt;/li&gt;
&lt;li&gt;researchers와 practitioners로 하여금 adapter에 쉽게 접근하고 공유할 수 있게 도와줌&lt;/li&gt;
&lt;li&gt;이를 위한 website 또한 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;contributions&lt;ul&gt;
&lt;li&gt;adapter를 쉽게 training하고 sharing 할 수 있는 framework 제안&lt;/li&gt;
&lt;li&gt;huggingface와 결합하여 두 중릐 code 추가만으로 adapter를 train 시킬 수 있음&lt;/li&gt;
&lt;li&gt;adapter weights만 자동으로 추출하여 pre-trained 모델과는 별도로 저장 (저장공간 save 가능)&lt;/li&gt;
&lt;li&gt;open-source framework과 website 제공&lt;/li&gt;
&lt;li&gt;adapter composition과 adapter stacking out-of-box를 제공하여, 추후에 다양한 분야로 확장할 수 있게 도와줌&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Adapters&lt;/h3&gt;
&lt;h4&gt;2.1. Adapter Architecture&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;거대한 pre-trained 모델의 parameters ($\Theta$) 안에 작은 수의 adapter parameter ($\Phi$)가 추가된 NN module&lt;/li&gt;
&lt;li&gt;$\Phi$가 특정한 task를 학습하는 동안 $\Theta$는 fixed 됨&lt;/li&gt;
&lt;li&gt;pre-trained model 내부에서 (intermediate layers) task-specific representation을 encoding 하는 방법을 학습&lt;/li&gt;
&lt;li&gt;기본적으로 task 하나당 하나의 adapter가 학습되는데, 이는 parallel하게 학습거나 각 weight를 조합 할 수 있게끔 도와줌&lt;/li&gt;
&lt;li&gt;대부분의 adapters는 주로 pre-trained 모델 내부에서 학습 (transformer layer가 $l$ 일때, adapter layer는 $\Phi_l$) &lt;/li&gt;
&lt;li&gt;$\Phi$의 위치나 아키텍쳐에 따라서 모델에 긍정적이거나 부정적인 결과를 초래&lt;/li&gt;
&lt;li&gt;down- and up-projection layer와는 다르게, 모든 transformer layer에 adapter weights를 부여 할 것인지, 새로운 LayerNorm을 적용할 것인지 여부에는 literature 마다 서로 다른 이견이 존재함&lt;/li&gt;
&lt;li&gt;AdapterHub에서는 위와 같은 니즈를 충족시키고, adapter의 표준화 및 그에 따른 확장성에 입각한 configuration file을 제공함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2.2. Why Adapter?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;adapters는 scalability, modularity, 그리고 composition 측면에서 fully fine-tuned model보다 더 많은 이점을 가지고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Task-Specific Layer-Wise Representation Learning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;adapter는 모든 transformer layer에서 representations를 adapting 함으로써 fully fined-tuned model과 필적할만한 성능을 보여줌&lt;/li&gt;
&lt;li&gt;이 논문에서는 1개 fully fine-tuned model과 각기 다른 구조를 가진 2개의 adapters model의 성능을 GLUE benchmark로 비교&lt;/li&gt;
&lt;li&gt;performance 측면에서는, adapter의 구조가 큰 영향을 끼치지 않는 것을 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Small, Scalable, Sharable&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fully fine-tuned model은 task마다 별도의 pre-trained model을 필요로 하는데, 이는 iterating &amp;amp; parallelising training을 저해시킴&lt;/li&gt;
&lt;li&gt;특히 저장공간이 충분하지 않는 경우 문제가 더욱 악화됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Small, Scalable, Sharable&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fully fine-tuned model은 task마다 별도의 pre-trained model을 필요로 하는데, 이는 iterating &amp;amp; parallelising training을 저해시킴 (특히 저장공간이 충분하지 않는 경우 문제가 더욱 악화됨)&lt;/li&gt;
&lt;li&gt;그에 반해 adpater는 1MB 미만의 저장공간을 추가로 필요로 하고, 99% 이상의 parameter가 학습 도중에 frozen 됨&lt;/li&gt;
&lt;li&gt;각각의 task를 학습한 adapter는 inference 시 각자 가진 information을 공유할 수 있음&lt;/li&gt;
&lt;li&gt;adapter가 가진 이러한 특성 덕분에 에너지 및 저장공간을 절약할 수 있고, reproductivity를 높여서 쉽게 이전 모델을 재실행하거나 평가할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Modularity of Representations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;캡슐화된 adapter architecture가 갖고 있는 강력한 호환성 (task가 다르더라도 input &amp;amp; output shape이 같음) 때문에 components의 모듈화가 가능해짐&lt;/li&gt;
&lt;li&gt;e.g. adapter layer는 층층ㅊ히 쌓거나 동적으로 교체 가능&lt;/li&gt;
&lt;li&gt;adpater는 researchers와 practitioners에게 더 많은 source를 제공하고, 효율적으로 모듈화된 방식으로 이를 결합할 수 있게 도와줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Non-Interfering composition of Information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;multi-task learning 분야에서 다른 tasks간 parameter를 share하는 것은 많은 관심을 받고 있는 중요한 영역임&lt;/li&gt;
&lt;li&gt;하지만 multi-task learning은 2가지 큰 문제를 갖고 있음&lt;ul&gt;
&lt;li&gt;catastrophic forgetting: 다양한 정보가 순차적으로 모델에 주입될 때, 기학습된 정보가 사라지는 것&lt;/li&gt;
&lt;li&gt;catastrophic interference: 새로운 task 혹은 다른 distribution을 가진 task weight가 모델에 더해질 떄 performance가 떨어지게 되는 것&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. AdapterHub&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;components:&lt;ul&gt;
&lt;li&gt;huggingface 상에서 동작하는 library&lt;/li&gt;
&lt;li&gt;website: pre-trained adapters의 정보를 제공하고, 이를 편하게 filtering 할 수 있는 기능 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;life-cycle of adapters&lt;ul&gt;
&lt;li&gt;①: 새로운 adpater weights $\Phi$를 pre-trained model $\Theta$에 도입&lt;/li&gt;
&lt;li&gt;②: $\Theta$를 frozen 시킨 상태에서, $\Phi$가 downstream task를 학습&lt;/li&gt;
&lt;li&gt;③: 학습된 $\Phi&amp;#39;$를 추출하여 open-sourcing&lt;/li&gt;
&lt;li&gt;④: configuration filters를 활용하여 adapters를 시각화함 (website)&lt;/li&gt;
&lt;li&gt;⑤: $\Phi&amp;#39;$를 downloading 혹은 caching하여 $\Theta$에 장착시킴&lt;/li&gt;
&lt;li&gt;⑥: trained adapter transformer model로 inference 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;① Adapters in Transformer Layers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;기존 코드에 단 코드 두줄의 추가만 필요로 함&lt;/li&gt;
&lt;li&gt;ready-made configuration files (for well-known architectures): adapters는 동적으로 설정하여 (dynamically configurable) 다양한 구조의 architecture를 정의하는 것이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;② Traning Adapters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;training은 full fine-tuning과 같은 방식으로 동작&lt;/li&gt;
&lt;li&gt;새로운 weights $\Phi$가 추가된 모든 transformer layers $\Theta$에 정보가 전파됨&lt;/li&gt;
&lt;li&gt;하지만 $\Theta$는 frozen 된 상태에서, $\Phi$와 prediction head (final output layer)만 학습됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;③ Extracting and Open-Sourcing Adapters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$\Theta$는 학습하지 않으므로 weights에 변화가 없어서, $\Phi$와 predictionn head만 checkpoints에 저장 (저장공간 save)&lt;/li&gt;
&lt;li&gt;학습이 완료되면, adapter parameters와 adapter configuration file이 server에 upload&lt;/li&gt;
&lt;li&gt;몇가지 test가 자동으로 수행되고, 이를 통과하면 모든 유저가 손 쉽게 접근할 수 있도록 site에 등록됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;④ Finding Pre-Trained Adapters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;website(AdapterHub.ml)는 현재 이용가능한 adapters를 조망할 수 있음&lt;/li&gt;
&lt;li&gt;사용자에게 필요한 adapters를 찾을 수 있도록 hierachical structure와 다양한 search options 제공&lt;/li&gt;
&lt;li&gt;hierachical structure:&lt;ul&gt;
&lt;li&gt;1st level: language/task&lt;/li&gt;
&lt;li&gt;2nd level: dataset for higher level NLP tasks &lt;/li&gt;
&lt;li&gt;3rd level: domains&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;⑤ Stiching-In Pre-Trained Adapters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;필요한 adapters를 website에서 선택하여, configuration 및 weights를 불러옴&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;⑥ Inference with Adapters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fully fine-tuned model과 동일한 방식으로 inference가 이뤄짐&lt;/li&gt;
&lt;li&gt;desingated task의 inference를 위해 추가적으로 학습이 이뤄질 수 있는데, 이때 prediction heads와 adapter weights를 함께 upload 할 수 있는 기능을 제공함&lt;/li&gt;
&lt;li&gt;이것들은 further research로 학습된 adapter를 새로운 task에 transferring 하거나 다수의 adapters를 stacking 하거나 다양한 adapters로 부터 얻은 정보를 fusing하거나, 다른 modalities를 위한 adapters를 풍부하게 하는 방식으로 사용될 수있음&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Conclustion and Future Work&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;AdapterHub: 새롭고 사용하기 간편한 framework로 쉽게 adpaters를 training하고 communitiy에 공유함으로써, 단순하고 효과적인 transfer learning을 가능케 함&lt;/li&gt;
&lt;li&gt;Adapters: 작은 nueral modules로 거대한 pre-trained transformer models에 장착하면서, 다양한 languates와 tasks 넘나들며 transfer learning 분야를 단순화, 가속화, 그리고 촉진시키는 역할을 함&lt;/li&gt;
&lt;li&gt;huggingface 상에서 동작하며 단 2줄의 코드만 추가하면 됨&lt;/li&gt;
&lt;li&gt;AdapterHub는 full fine-tuning과 비교했을 때 reproductivility와 much better efficiency를 향상 및 새로운 tasks 와 새로운 models에 대한 확장성 및 접근성을 용이하게 함&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/43</guid>
      <comments>https://joonable.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 3 May 2023 03:16:26 +0900</pubDate>
    </item>
    <item>
      <title>K-ADAPTER: Infusing Knowledge into Pre-Trained Models with Adapters (2020)</title>
      <link>https://joonable.tistory.com/42</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;problem: 기존에는 pre-trained model에 새로운 knowledge를 주입(inject)하기 위해 pre-trained model 자체를 fine-tuning 했는데, 각기 다른 많은 knowledge가 한번에 주입될 경우, 모델이 갖고 있던 정보가 사라지는 문제 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;K-Adapter:&lt;ul&gt;
&lt;li&gt;pre-trained model의 parameters는 freeze 시킨 상태에서, versatile knowledge-infused model 개발&lt;/li&gt;
&lt;li&gt;주입하려는 knowledge의 수만 큼 NN 기반의 adpater가 plug-in 처럼 존재,&lt;/li&gt;
&lt;li&gt;adapter 간에 공유되는 information이 존재하지 않아서, continual learning 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;case study:&lt;ul&gt;
&lt;li&gt;injected knowledge&lt;ul&gt;
&lt;li&gt;factual knowledge from Wikipedia and Wikidata&lt;/li&gt;
&lt;li&gt;linguistic knowledge via dependency parsing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;results (experiment)&lt;ul&gt;
&lt;li&gt;knowledge를 요구하는 (knowledge-driven) tasks (e.g. relation classification, entity typing, QA)&lt;/li&gt;
&lt;li&gt;performance: combined adapters &amp;gt; each adapter &amp;gt; other baselines  &lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기존 language representation models 한계&lt;ul&gt;
&lt;li&gt;language representation models: masked language modelling (MLM)과 같은 unsupervised 방식으로 대량의 데이터를 학습한 모델 (e.g. BERT, GTP, XLNET, RoBERTa, T5)&lt;/li&gt;
&lt;li&gt;language representation models은 많은 downstream tasks에서 SotA를 달성&lt;/li&gt;
&lt;li&gt;하지만 unsupervised 방식은 풍부한 지식(rich knowledge)를 파악하는데에는 한계가 존재&lt;ul&gt;
&lt;li&gt;entity 간의 표면적인 관계는 추론 가능하지만, 실질적인 사실 정보는 파악하지 못함&lt;/li&gt;
&lt;li&gt;BERT의 경우 부정(negation)의 의미를 파악하지 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;language representation models에 knowledge를 주입하게되는 결정적인 동기로 작용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;기존 knowledge injection 연구&lt;ul&gt;
&lt;li&gt;Augment LM objective with knowledge-driven objectives (참고: 자세히는 모르겠는데 objective 설정이 논문의 저자가 행한 방식과는 다르다는걸 언급하는 것 같음)&lt;/li&gt;
&lt;li&gt;pre-trained model 내 parameters 또한 update&lt;/li&gt;
&lt;li&gt;문제점 : 각기 다른 정보를 한 모델에 주입하는데 어려움이 있음&lt;ul&gt;
&lt;li&gt;기존 모델이 갖고있던 정보가 점점 사라짐&lt;/li&gt;
&lt;li&gt;모델은 모든 knowledge가 섞인 (entangled) representation을 생성하므로, 각각의 knowledge가 실제로 효과를 갖는지 파악하기 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;K-Adapter&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;다수의 knowledge를 large pre-trained model에 주입할 수 있는 framework&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pre-trained model은 fixed 된 상태에서, 각각의 knowledge마다 각기 다른 adapter를 두어 별도의 representation을 생성시킴&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;adapter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;knowledge-specific model&lt;/li&gt;
&lt;li&gt;pre-trained model 외부에서 plug-in 되는 형태&lt;/li&gt;
&lt;li&gt;pre-trained model의 intermeidate layer의 output hidden-state를 input으로 받음&lt;/li&gt;
&lt;li&gt;e.g. RoBERTa의 0, 11, 23번째 Transformer layer를 통해 생성된 vector representation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;architecture for case study:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RoBERTa(base pre-trained model) + factual adapter + linguistic adapter&lt;/li&gt;
&lt;li&gt;각각의 지식이 infused된 2개의 adapters를 각각 pre-training 시킴&lt;/li&gt;
&lt;li&gt;adapter의 경우, trainalbe parameter 수가 훨씬 적어서 메모리 측면에서 훨씬 효율적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;experiment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(knowledge-driven) knowledge를 요구하는 3가지 tasks를 6가지 dataset으로 실험&lt;br&gt;
&lt;br&gt;
&lt;br&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Related Work&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;지금까지 연구와는 knowledge sources와 training에 사용된 objective에서 차이를 보임&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;previous works + models 소개&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contribution&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;두 가지 objectives를 모두 고려&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fact-related objective (e.g. predication prediction)&lt;/li&gt;
&lt;li&gt;linguistic-related objective (e.g. dependency relation prediction)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;지식이 주입되는 과정에서 pre-trained model은 fixed 됨&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;continual learning: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;각각의 adapter가서로 entangled 되지 않음&lt;/li&gt;
&lt;li&gt;parallel하게 각각의 adapter pre-training 가능&lt;/li&gt;
&lt;li&gt;이전에 주입된 지식이 사라지거나 하는 문제에서 자유로워짐&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. K-Adapter&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;다수의 knowledge가 각기 다른 NN(adapter)에 주입됨&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이는 기존 pre-trained model이 가진 정보는 유지시키고, continual learning을 가능하게 함&lt;/li&gt;
&lt;li&gt;다른 지식을 갖고 있는 adapter마다 별도의 vector representation 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;adapters&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;knowledge-specific models (적은 수의 parameters를 가짐)&lt;/li&gt;
&lt;li&gt;pre-trained model 외부에서 동작&lt;/li&gt;
&lt;li&gt;pre-trained model의 intermeidate layer의 output hidden-states를 input으로 받음&lt;/li&gt;
&lt;li&gt;e.g. RoBERTa의 0, 11, 23번째 Transformer layer를 통해 생성된 vector representation&lt;/li&gt;
&lt;li&gt;pre-training 시, 각각의 adapter는 독립적으로 각기 다른 task를 pre-train함 (pre-trained model은 freezing)&lt;/li&gt;
&lt;li&gt;architecture for case study:&lt;ul&gt;
&lt;li&gt;RoBERTa(base pre-trained model) + factual adapter + linguistic adapter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.1. Adapter Structure&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;knowledge-specific adapter&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;기존 adapter는 adapter layers가 pre-trained model 내부에 존재하는데, k-adapter는 pre-trained model 외부에서 존재&lt;/li&gt;
&lt;li&gt;architecture&lt;ul&gt;
&lt;li&gt;각각의 k-adapter는 N개의 transformer, K개의 adapter layers, 2개의 prrojection layers를 가짐&lt;/li&gt;
&lt;li&gt;두 projection layer사이에는 skip connection 존재&lt;/li&gt;
&lt;li&gt;각각의 adapter를 위해 adapter layers가 pre-trained model의 transformer layer 에 plug 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;input &amp;amp; output&lt;ul&gt;
&lt;li&gt;adapter input: pre-trained model에 있는 transformer layer의 output hidden feature와 이전 adpater의 output feature를 concat하여 adapter의 input으로 사용&lt;/li&gt;
&lt;li&gt;final output (as input for downstream tasks): pre-trained model과 모든 adapter의 final hidden states를 결합하여 final output feature로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;pre-training: 각각의 adapter는 각기 다른 task를 독립적으로 학습&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;downstream task&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fine-tuning은 기존 pre-trained 모델과 유사하게 동작 (참고: Appendix에서만 자세하게 다루는데 약점이라 일부러 숨긴것 같음)&lt;/li&gt;
&lt;li&gt;input = concat final outputs from pre-trained model and adapters &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. Pre-training settings&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;pre-trained model: RoBERTa$_{LARGE}$ 사용 (L=24, H=1024, A=16, 355M)&lt;/li&gt;
&lt;li&gt;adapter layer parameter 소개&lt;/li&gt;
&lt;li&gt;pre-trained model의 0, 11, 23 번째 transformer layer가 adapter layers와 plug 됨 (RoBERTa의 L이 24개 이므로 처음, 중간, 끝에 해당하는 layer임을 알 수 있음)&lt;/li&gt;
&lt;li&gt;adapter 간에는 별도로 parameter를 공유하지 않음&lt;/li&gt;
&lt;li&gt;각각의 adapter는 42M parameters를 갖음 (space &amp;amp; time complexity가 낮음)&lt;/li&gt;
&lt;li&gt;RoBERTa parameters는 fixed되고, adapter parameter는 랜덤하게 초기화된 후 학습됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.3. Facutal Adapter (facAdapter)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;사실과 관련된 기본적인 정보를 갖고 있음&lt;/li&gt;
&lt;li&gt;relation classification task를 통해 pre-training&lt;ul&gt;
&lt;li&gt;data: entities 간의 관계 from Wikipedia and Wikidata&lt;/li&gt;
&lt;li&gt;entities간의 relation classification&lt;/li&gt;
&lt;li&gt;input: entity paris based on its context&lt;/li&gt;
&lt;li&gt;facAdapter와 RoBERTa의 final hidden states를 concat하여 input으로 사용&lt;/li&gt;
&lt;li&gt;pooling layer 통해 각 entities의 representation을 apply&lt;/li&gt;
&lt;li&gt;두 entity representations 를 concat해서 relation classification을 수행하는데 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.4. Linguistic Adapter (linAdapter)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;syntatic and semantic information을 갖고 있음&lt;/li&gt;
&lt;li&gt;depency relation prediction task를 통해 pre-training&lt;ul&gt;
&lt;li&gt;data: dependency relationships among words (Book Corpus를 Stanford parser를 이용해서 parsing한 결과)&lt;/li&gt;
&lt;li&gt;주어진 문장 내 각 token의 head index를 predict&lt;/li&gt;
&lt;li&gt;RoBERTa와 linAdapter의 final hidden states를 concat하여 input으로 사용&lt;/li&gt;
&lt;li&gt;linear layer를 각 token의 input representation에 적용하여 classification 수행  &lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Experiments&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3가지 task (Entity typing, QA, Relation classification)를 실험하여 결과를 공유하고 있는데 특별히 insightful한 내용은 있지 않음&lt;/li&gt;
&lt;li&gt;ablation experiment&lt;ul&gt;
&lt;li&gt;facAdapter, linAdapter: 결국 2개의 adapters를 모두 갖고 있는 모델이 높은 성능을 보임&lt;/li&gt;
&lt;li&gt;knowledge를 pre-training 않은 K-adapter 모델과도 비교 했는데 성능이 매우 낮게 나와서 knowledge infusion의 효과를 수치로 보여줌  &lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Conclusion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;K-Adapter: large pre-trained models에 knowledge를 infuse 하기 위해 사용&lt;/li&gt;
&lt;li&gt;original parameters of pre-trained models은 바뀌지 않음&lt;/li&gt;
&lt;li&gt;continual knowledge infusion 가능&lt;/li&gt;
&lt;li&gt;facAdapter, linAdapter를 이용하여 Entity typing, QA, Relation classification를 모두 수행 (adapter를 하나만 쓰는 경우도 성능이 좋았지만 2개 모두 쓰는 경우가 제일 좋았음)&lt;/li&gt;
&lt;li&gt;K-Adapter가 RoBERTa 보다 더 풍부한 factual and commonsense knowledge를 파악하는 것을 알 수 있음  &lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Appendix&lt;/h3&gt;
&lt;h4&gt;C. Applying K-adapter on Downstream Tasks&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;pre-trained model의 representation과 adapters의 representation를 조합하는게 key&lt;/li&gt;
&lt;li&gt;pre-trained model는 general informaion을 adapters의 representation은 specific knowledge를 제공&lt;/li&gt;
&lt;li&gt;기존 pre-trained model은 its output feature를 task-specific layer에 feeding함&lt;/li&gt;
&lt;li&gt;K-adapter&lt;br&gt;1) fine-tuning&lt;br&gt;2) pre-trained model과 adapters의 output features를 concat&lt;br&gt;3) task-specific layer에 feeding&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;E. Fine-tuining Details&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;fine-tuning 시에는 adapter 내에 있는 parameters는 fixed&lt;/li&gt;
&lt;li&gt;RoBERTa 내 parameter는 huggingface checkpoint 기준으로 initialisation 후, 학습 시킴&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/42</guid>
      <comments>https://joonable.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 2 May 2023 05:20:48 +0900</pubDate>
    </item>
    <item>
      <title>BERT and PALs: Projected attention layers for efficient adaptation in multi-task learning (2019) 논문리뷰</title>
      <link>https://joonable.tistory.com/41</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} });&lt;/script&gt;&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;

&lt;h3&gt;Abstract&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Multi-task learning 시, task 간 information을 공유하는 것은 일반적인 방법이고, 이 때 필요한 parameter 수를 줄이는 것은 중요&lt;/li&gt;
&lt;li&gt;기존에는 각 task 마다 모델을 별도로 fine-tuning 해야해서 $I$개의 task가 있으면 $I$개의 모델을 별도로 필요로 함&lt;/li&gt;
&lt;li&gt;이 논문에서는 적은 수의 parameter를 이용해서 하나의 모델로 다양한 task를 수행할 수 있는 방식을 소개  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;h5&gt;Adaptation을 위한 기존 연구&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pre-trained 모델의 모든 parameters를 share 하는 방식&lt;/li&gt;
&lt;li&gt;하지만 input + output shape이 동일해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;논문에서 제안하는 방식&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;대부분의 parameters share (generalistion performance 증가)&lt;/li&gt;
&lt;li&gt;적은 수의 task-specific paramters 추가 (specific-task performance 증가)&lt;/li&gt;
&lt;li&gt;기존 sota에 상응하거나 이를 상회하는 모델을 만들어보자&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;parameters를 share하지 않을 경우&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;task 마다 별도의 모델 사용 -&amp;gt; space complexity 증가, over head 증가&lt;/li&gt;
&lt;li&gt;중복 연산 -&amp;gt; energy cost 증가&lt;/li&gt;
&lt;li&gt;battery life가 한정적인 mobile device의 경우에는 문제가 더 심각해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;기존 BERT fine-tuning 방식&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;BERT의 top(output에 근접한 부분)에 별도의 output layer를 추가하여 fine-tuning&lt;/li&gt;
&lt;li&gt;이 때, BERT 모델 전체가 fine-tuning 되므로 task 마다 별도의 모델이 필요하게 됨&lt;/li&gt;
&lt;li&gt;위의 방식은 시간적, 공간적 측면에서 매우 비효율적임&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;contribution&lt;/h5&gt;
&lt;p&gt;1) Projected Attention Layer (PAL): 적은 차원의 Multi-head attention(MHA)를 기존 BERT layer에 parallel 하게 추그&lt;br&gt;2) sceduling training: dataset 내 data가 task 별로 imbalanced 한 경우 생기는 문제를 해결하기 위해 별도의 sampling 기법 사용&lt;br&gt;3) self-attention 기반 모델에 적용도리 수 있는 다른 adaptation 기법을 empirical하게 비교  &lt;/p&gt;
&lt;h3&gt;2. Background&lt;/h3&gt;
&lt;h5&gt;Multi-task learning sharing approaches&lt;/h5&gt;
&lt;p&gt;1) hard parameter sharing: shared hidden layers + task-specific output layers&lt;br&gt;2) soft parameter sharing: task 마다 별도의 모델 + 모델 내 parameter 간의 distance에 regularisation 적용 (e.g. L2 norm, trace norm)&lt;br&gt;3) 이 논문에서는 hard parameter sharing 방식을 사용: adapter를 기존 shared layer에 추가하고 별도의 output layer를 사용함 &lt;/p&gt;
&lt;h4&gt;2.1. Adaptation Parameters&lt;/h4&gt;
&lt;h5&gt;Learning hidden unit contributions (LHUC)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;각 hidden layer에 learnable scalar를 추가하여, 이를 곱한 값을 output으로 활용&lt;/li&gt;
&lt;li&gt;매우 적은 parameters를 추가로 요구함&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Residual adapter modules&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;computer vision 분야에서 사용하기 위해 제안됨&lt;/li&gt;
&lt;li&gt;각 모듈은 1 x 1 filter bank와 skip connection을 갖고 있음&lt;/li&gt;
&lt;li&gt;추가하는 방식에 따라 $in series$ (각 layer 사이에 추가) $parallel$ (input을 별도로 feeding) 방식으로 나뉨 (뒤에서도 이 두 방식을 모두 언급하는데 $in series$는 성능이 안 좋아서 빠짐)&lt;/li&gt;
&lt;li&gt;각 task 마다 $CxC$ amtrix를 별도로 필요로 하는데 low-rank approximation을 통해 필요한 parameter 수를 줄일 수 있고, 이 논문에서도 많이 사용하게 됨 (자세한 설명은 뒤에서)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2.2. Fine-tuning Approaches&lt;/h4&gt;
&lt;h5&gt;transfer learning trend&lt;/h5&gt;
&lt;p&gt;1) language modelling 하는 방식으로 모델을 pre-train 시킨 후&lt;br&gt;2) 각 task에 맞게 output layer를 붙여서 fine-tuning 하는 방식&lt;/p&gt;
&lt;h5&gt;BERT&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;위의 방식을 차용하는 모델로는 BERT가 대표적&lt;/li&gt;
&lt;li&gt;pre-trained 방식&lt;br&gt;  1) maksed language modelling&lt;br&gt;  2) sentence classification&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;auto-encoding model:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;predction 시 left + right direction 모두 참조 (참고: 반대로는 autu-regressive model이 있는데 RNN, GPT가 대표적)&lt;/li&gt;
&lt;li&gt;transfomer encoder 기반 모델 (GPT는 decoder 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Houlsby&amp;#39;s approach&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;이 논문의 low-rank layers와 비슷한 방식의 adapter 제안&lt;/li&gt;
&lt;li&gt;다만, adapter training 중에는 bert model은 freeze 시킴 (학습 시 연산량을 대폭 줄일 수 있음 - time complexity 감소)&lt;/li&gt;
&lt;li&gt;하지만 이 논문에서는 위와 다르게 BERT 모델 전체를 fine-tuning&lt;ul&gt;
&lt;li&gt;단점1: interference + forgetting of stored memory (interference 뒤에서 언급)&lt;/li&gt;
&lt;li&gt;단점2: train 시, 하나의 batch에 모든 task example을 필요로 함&lt;/li&gt;
&lt;li&gt;하지만 요구되는 parameter 수는 위 방식보다 적음 (space complexity 감소)  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Adapting Self Attention&lt;/h3&gt;
&lt;h4&gt;3.1. Model Architecture and Multi-head Attention&lt;/h4&gt;
&lt;h5&gt;기존 BERT 모델 architecture 소개&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;input: a sequnce (tokens - hidden vectors)&lt;/li&gt;
&lt;li&gt;output: a vector representation of that sequence&lt;/li&gt;
&lt;li&gt;first token $[CLS]$: final state of $[CLS]$ 가 classification 혹은 regression task를 위한 vector로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Multi-head attention - $MH(\vec{h})$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;$n$ different dot-product attention&lt;/li&gt;
&lt;li&gt;attention: a sequnce element with a weighted sum of the hidden states of all the seqence elements&lt;/li&gt;
&lt;li&gt;MHA: the weights in the sum use dot-product similarity between transformed hidden states&lt;/li&gt;
&lt;li&gt;각각의 head마다 dot-product attention을 적용한 final hidden state 산출&lt;/li&gt;
&lt;li&gt;$n$ 개 heads를 모두 concat해서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Self attention - $SA(\vec{h})$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;$\vec{h}$와 $MH(\vec{h})$ (MHA 적용한 결과값)를 더한 값을 (정확히는 residual connection) layer normalisation ($LN$)시키고, 그 결과 값을 feed forward network ($FFN$)에 통과시킴&lt;br&gt;$$SA(\vec{h}) = FFN(LN(\vec{h}) + MH(\vec{h}))$$&lt;br&gt;$$FFN(\vec{h}) = W_2f(W_1)\vec{h} + b_1) + b_2$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;Bert Layer - $BL(\vec{h})$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;최종적으로 다시 한번 $\vec{h}$와 $MH(\vec{h})$를 더한 값을 LN에 통과시켜 output 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;output:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;최종적으로 $[CLS]$의 final state를 사용 -&amp;gt; pooling layer 라고 불림 ($d x d$ linear transformation)&lt;/li&gt;
&lt;li&gt;pooling layer에 non-linearity function 적용 후, output space로 projection&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.2. Adding Parameters to the Top&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;task-spcific layer를 BERT 모델 상단에 추가하는 방식&lt;/li&gt;
&lt;li&gt;BERT 자체는 그대로 두고, TOP에 task-specific function$TS()$ 추가&lt;br&gt;$$\vec{h^f} = TS(BERT(\vec{{h_t}}^l_{t=0}))$$&lt;/li&gt;
&lt;li&gt;$\vec{h^f}$: final hidden state for $[CLS]$&lt;/li&gt;
&lt;li&gt;BERT layers ($from 0 to l$) 를 모두 통과하여 얻은 $[CLS]$에 $TS()$를 적용하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;$BERT()$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;모든 task 수행 시 동일하게 공유하므로, $n$개의 task를 진행하도 1회만 FF 시켜도됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;$TS()$&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;비교적 가벼움 + 여러 가지중 선택가능 -&amp;gt; experiment section에서 성능 비교 예정&lt;/li&gt;
&lt;li&gt;linear transform + non-linearity function: 가장 간단 + 비교적 적은 수의 parameter가 추가로 필요&lt;/li&gt;
&lt;li&gt;BERT layers: 각 task 마다 BERT layer 별도로 추가&lt;/li&gt;
&lt;li&gt;$V^Dg(V^E\vec{h})$: low-rank approximation + $g()$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;low-rank approximation&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;encoder matrix $V^E$ ($d_s x d_m$)&lt;/li&gt;
&lt;li&gt;decoder matrix $V^D$ ($d_m x d_s$)&lt;/li&gt;
&lt;li&gt;$d_s &amp;lt; d_m$: 원래는 $d_m x d_m$ 가 필요한데, $d_s$를 작게 설정하여 parameter 수를 줄일 수 있음 ($d_m$: model size)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;$g()$&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;$MHA$: Projected Attention (a residual connection + layer-norm 은 optional)&lt;/li&gt;
&lt;li&gt;$FFN$: one or two layer feed-forward network (followed by a residual connection + layer-norm)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3.3. Adding Parameters to the Top&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;BERT 모델 자체에 task-spcific layer를 추가하여, $BERT()$ function을 바꾸는 방식 (residual adapter modules에서 아이디어를 얻음)&lt;/li&gt;
&lt;li&gt;위에서 언급한대로 추가하는 위치에 따라 $in parallel$ 방식과 $serial$로 나뉘는데 $in parallel$만 성능이 좋음 (이유는 뒤에서 설명)&lt;br&gt;$$\vec{h^{l+1}} = LN(\vec{h^l} + SA(\vec{h^l}) + TS(\vec{h^l}))$$&lt;br&gt;$$TS(\vec{h}) = V^Dg(V^E\vec{h})$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;$g()$&lt;/h5&gt;
&lt;p&gt;1) idendity function (just low-rank layer)&lt;br&gt;2) MHA&lt;br&gt;3) PAL: MHA + shared $V^D$, $V^E$ across layers (not tasks)&lt;br&gt;4) FFN + shared $V^D$, $V^E$  &lt;/p&gt;
&lt;h3&gt;4. Multi-task Training and Experiment Setup&lt;/h3&gt;
&lt;h4&gt;4.1. Sampling Tasks&lt;/h4&gt;
&lt;h5&gt;1) round robin:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;가장 간단한 방식으로 task 별로 순서를 두어 돌아가면서 공평하게 각 task를 훈련  &lt;/li&gt;
&lt;li&gt;data가 task 별로 imbalanced 한 경우, over fitting o&amp;amp; under fitting 문제가 생길 수 있음  &lt;/li&gt;
&lt;li&gt;각 task마다 regularisation hyper parameter를 추가하여 문제를 완화시킬 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;2) propotional&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;dataset 내 각 task data의 비율을 이용하여 sampling  &lt;/li&gt;
&lt;li&gt;모든 task data가 균등하게 학습되는 장점이 있지만  &lt;/li&gt;
&lt;li&gt;비교적 많은 step을 학습한 하나의 task가 다른 tasks의 성능을 떨어뜨리는 interference가 발생할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;3) square root sampling or annealed sampling&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;위의 문제를 해결하기 위해 고안된 방법  &lt;/li&gt;
&lt;li&gt;$\alpha$ = 0.5 인경우 square root sampling  &lt;/li&gt;
&lt;li&gt;E: the total number of epochs  &lt;/li&gt;
&lt;li&gt;e: the current epoch&lt;br&gt;$$p_i \propto N_i^{\alpha}$$&lt;br&gt;$$\alpha = 1 - 0.8\frac{e-1}{E-1}$$  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.2. Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;hyper parameters 소개&lt;/li&gt;
&lt;li&gt;MHA 시, head의 수는 큰 영향을 끼치지 않음&lt;/li&gt;
&lt;li&gt;pre-trained model을 이용하는게 scratch 부터 학습하는 것보다 더 높은 성능을 보여줌&lt;/li&gt;
&lt;li&gt;BERT를 freezing 시키면서 PAL과 다른 방식들을 실험하기는 하지만, 주로 BERT 까지 fine-tuning 하는 방식을 주로 실험&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4.3. Details of GLUE Tasks&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;GLUE 내 9가지 task 중에 Winograd NLI를 제외한 8가지 task를 사용  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Expriments and Discussion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;각각의 task 를 학습한 8개의 fine-tuned BERT와 주로 비교 (성능의 최대치라고 가정)&lt;/li&gt;
&lt;li&gt;data의 수가 가장 적은 RTE task 에서 가장 높은 성능 향상이 있었는데, 다른 task로 부터 shared된 information을 직간접적으로 이용하기 떄문이라 추측&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5.1. PALs and Alternative&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;low-rank layer와 PALs가 주로 가장 좋은 성능을 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;5.2. Where should we add Adaptation Modules?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;$within &amp;gt; top$&lt;/li&gt;
&lt;li&gt;$every layer &amp;gt; final half &amp;gt; first half$ : 하지만 sharing operation 관점에서는 every layer가 최악의 선택임 (PALs는 task-specific layer라서 각 task 마다 매번 다른 $BERT()$를 수행해야 하므로)&lt;/li&gt;
&lt;li&gt;$parallel &amp;gt; serial$: $parallel$는 작은 변화 (perturbation) 임에 비해, $serial$는 기존에 모델이 갖고있는 knowledge 자체를 바꾸기 때문이라 추측  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;6. Further Discussion&lt;/h3&gt;
&lt;h6&gt;1) annealing method&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;어떻게 training examples를 scheduling 할 것인가?  &lt;/li&gt;
&lt;li&gt;data size에 대한 sampling probability가 미치는 영향을 점진적으로 감소시킴  &lt;/li&gt;
&lt;li&gt;평균적인 성능 뿐만 아니라 다른 seed에 따른 평균의 분산도 증가시킴&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;2) Projected Attention Layers &amp;amp; low-rank transformations&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Projected Attention Layers: parameter 수 대비 다른 방식들에 비해 높은 성능을 보여줌  &lt;/li&gt;
&lt;li&gt;Low-rank transformations: 가장 간단한 방식임에도 불구하고 좋은 성능을 보여줌  &lt;/li&gt;
&lt;li&gt;parameter 수에 제약이 없는 경우: 기존 BERT 모델의 $top$에 BERT layer 추가하는 방식 추천  &lt;/li&gt;
&lt;li&gt;shared operation 제약 없는 경우: PALs to $every layer$ 추천  &lt;/li&gt;
&lt;li&gt;adapting only the final half of the base model을 이용하면 performance 와 sharing operation 에서 모두 이득을 볼 수 있음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Data Science/Paper Review</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/41</guid>
      <comments>https://joonable.tistory.com/41#entry41comment</comments>
      <pubDate>Mon, 1 May 2023 03:55:50 +0900</pubDate>
    </item>
    <item>
      <title>matplotlib 에서 latex 쓰기</title>
      <link>https://joonable.tistory.com/40</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1668801305464&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
import numpy.random as rnd
import scipy.stats
import scipy.special
import matplotlib
import matplotlib.pyplot as plt

# 다음과 같이 선언
matplotlib.rcParams['text.latex.preamble']=[r&quot;\usepackage{amsmath}&quot;]
matplotlib.rc('text', usetex=True)

# 다음과 같이 사용
eps_std = 0.63
plotv = np.linspace(-2, 3, 500)
p_v_c_s = np.vstack([scipy.stats.norm.pdf(plotv, loc=l, scale=eps_std) for l in [0, 1]]).T
lines = plt.plot(plotv, p_v_c_s)
plt.legend(lines, ['S=0', 'S=1'])
plt.xlabel('$v$')
plt.ylabel('$p(v|s)$')
plt.title(f&quot;Density of observing $V$ given $S$, $\sigma={eps_std}$&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Unknown.png&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U0rHH/btrRBboEVOV/RopIbKUEb6yL9FvFINU7r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U0rHH/btrRBboEVOV/RopIbKUEb6yL9FvFINU7r0/img.png&quot; data-alt=&quot;출력되는 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U0rHH/btrRBboEVOV/RopIbKUEb6yL9FvFINU7r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU0rHH%2FbtrRBboEVOV%2FRopIbKUEb6yL9FvFINU7r0%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;382&quot; height=&quot;274&quot; data-filename=&quot;Unknown.png&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력되는 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT/Python</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/40</guid>
      <comments>https://joonable.tistory.com/40#entry40comment</comments>
      <pubDate>Sat, 19 Nov 2022 05:00:08 +0900</pubDate>
    </item>
    <item>
      <title>np.unravel_index() 설명 및 사용예시 정리</title>
      <link>https://joonable.tistory.com/39</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Function Signature&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;numpy.unravel_index(indices, shape, order='C')&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;shape = (M, N) 으로 주어질 때, Matrix&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(M, N)&amp;nbsp;&lt;/span&gt;내 원소는 0 부터 M * N-1 까지 존재한다고 가정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;indicies =&amp;nbsp;&lt;/span&gt;index: int (or indicies: list of int)가 위치한 좌표를 나타냄&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시1 :&lt;/h4&gt;
&lt;pre id=&quot;code_1668441406737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;np.unravel_index(6, (3, 4))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shape: (3, 4) -&amp;gt; np.arange(12).reshape(3, 4) = 0~11 로 채워진 M = 3, N =4인 matrix&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2 (return j)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&amp;nbsp;&lt;b&gt;(return i)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;6 (index)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(1, 2)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예시2 : np.argmax() 한계 극복&lt;/h3&gt;
&lt;pre id=&quot;code_1668441531797&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
from PIL import Image

img = ... # 원본 이미지 e.g. 풍경 사진
template = ... # 원본과 맵핑하고 싶은 템플릿 e.g. 나무 템플릿
corr_img = ... # 원본과 이미지를 cross-correlation 하여 구한 값

# corr_img 중 에서 가장 correlation 이 높은 pixel을 argmax로 구한 후, 
# 정확한 좌표값을 corr_img.shape 해서 구할 수 있음
# np. argmax() 만 사용해서는 안 됨
high_corr_y, high_corr_x = np.unravel_index(np.argmax(corr_img, None), corr_img.shape)

# high_corr_y, high_corr_x 를 이용하여 template이 실제로 잘 맵핑 됐는지 확인 수 있음
Image.fromarray(
	img[high_corr_y:high_corr_y+template.shape[0], 
    	high_corr_x:high_corr_x+template.shape[1]]
).show()&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;[참고]&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.unravel_index.html&quot;&gt;https://numpy.org/doc/stable/reference/generated/numpy.unravel_index.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48135736/what-is-an-intuitive-explanation-of-np-unravel-index&quot;&gt;https://stackoverflow.com/questions/48135736/what-is-an-intuitive-explanation-of-np-unravel-index&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>IT/Python</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/39</guid>
      <comments>https://joonable.tistory.com/39#entry39comment</comments>
      <pubDate>Tue, 15 Nov 2022 01:06:39 +0900</pubDate>
    </item>
    <item>
      <title>Elastic Search DSL search query 기초</title>
      <link>https://joonable.tistory.com/38</link>
      <description>&lt;h2&gt;index 정보 호출&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# es 내에 설치된 모든 index(=table) 정보 호출
GET _cat/indices&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;mapping 정보 호출&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# index의 mapping(=schema) 정보 호출
GET dev_recommend_storage_cst_mart/_search&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - match_all&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# index 내 모든 documents return
GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;match_all&amp;quot;: {}
  }
}
# GET dev_recommend_storage_prd_mart/_search 와 동일&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - term (query vs. filter)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# score가 반환되는 일반 query
# gendr_cd가 &amp;quot;F&amp;quot; documents return
GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;term&amp;quot;: {&amp;quot;gendr_cd&amp;quot;: &amp;quot;F&amp;quot;}
  }
}

# score가 반환 안되는 filter query
# gendr_cd가 &amp;quot;F&amp;quot; documents return
GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;filter&amp;quot;: {
        &amp;quot;term&amp;quot;: {&amp;quot;gendr_cd&amp;quot;: &amp;quot;F&amp;quot;}
      } 
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - terms&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# score가 반환되는 일반 query
# gendr_cd가 &amp;quot;F&amp;quot;, &amp;quot;M&amp;quot;인 documents return
GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;terms&amp;quot;: {&amp;quot;gendr_cd&amp;quot;: [&amp;quot;M&amp;quot;, &amp;quot;F&amp;quot;]}
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - ids&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# search query : index 내 _id값이 일치하는 document 검색 
GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;ids&amp;quot;: {&amp;quot;values&amp;quot;: &amp;quot;1203925&amp;quot;} # list로 arguments를 넘기면 복수개 검색
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - _source&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# search query : 원하는 field(&amp;quot;cust_no&amp;quot;, &amp;quot;gendr_cd&amp;quot;, &amp;quot;age5_unit_cd&amp;quot;)만  리턴
GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;_source&amp;quot;: [&amp;quot;cust_no&amp;quot;, &amp;quot;gendr_cd&amp;quot;, &amp;quot;age5_unit_cd&amp;quot;], 
  &amp;quot;query&amp;quot;: {
    &amp;quot;ids&amp;quot;: {&amp;quot;values&amp;quot;: &amp;quot;1203925&amp;quot;} # list로 arguments를 넘기면 복수개 검색
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - compound 1 (query vs. filter)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;must&amp;quot;: [
        {&amp;quot;term&amp;quot;: {&amp;quot;age_rank1&amp;quot;: &amp;quot;32&amp;quot;}},
        {&amp;quot;term&amp;quot;: {&amp;quot;man_prd&amp;quot;: 0}},
        {&amp;quot;term&amp;quot;: {&amp;quot;prop&amp;quot;: &amp;quot;100%&amp;quot;}},
        {&amp;quot;range&amp;quot;: {&amp;quot;num&amp;quot;: {&amp;quot;gte&amp;quot;: 50}}}
      ]
    }
  }
}

GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;filter&amp;quot;: {
        &amp;quot;bool&amp;quot;: {
          &amp;quot;must&amp;quot;: [
            {&amp;quot;term&amp;quot;: {&amp;quot;age_rank1&amp;quot;: &amp;quot;32&amp;quot;}},
            {&amp;quot;term&amp;quot;: {&amp;quot;man_prd&amp;quot;: 0}},
            {&amp;quot;term&amp;quot;: {&amp;quot;prop&amp;quot;: &amp;quot;100%&amp;quot;}},
            {&amp;quot;range&amp;quot;: {&amp;quot;num&amp;quot;: {&amp;quot;gte&amp;quot;: 50}}}
          ]
        }
      }
    }
  }
}

# https://www.elastic.co/guide/en/elasticsearch/reference/6.8/compound-queries.html&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - compound2 (query vs. filter)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;must&amp;quot;: [
          {&amp;quot;terms&amp;quot;: {&amp;quot;age_rank1&amp;quot;: [&amp;quot;32&amp;quot;, &amp;quot;31&amp;quot;]}},
          {&amp;quot;range&amp;quot;: {&amp;quot;num&amp;quot;: {&amp;quot;gte&amp;quot;: 50, &amp;quot;lt&amp;quot;: 100}}}
        ],
        &amp;quot;must_not&amp;quot;: [
          {&amp;quot;term&amp;quot;: {&amp;quot;man_prd&amp;quot;: 1}}
        ],
        &amp;quot;should&amp;quot;: [
          {&amp;quot;term&amp;quot;: {&amp;quot;prop&amp;quot;: &amp;quot;100%&amp;quot;}},
          {&amp;quot;terms&amp;quot;: {&amp;quot;age_rank2&amp;quot;: [&amp;quot;32&amp;quot;, &amp;quot;31&amp;quot;]}}
        ]
    }
  }
}

GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;filter&amp;quot;: {
        &amp;quot;bool&amp;quot;: {
          &amp;quot;must&amp;quot;: [
              {&amp;quot;terms&amp;quot;: {&amp;quot;age_rank1&amp;quot;: [&amp;quot;32&amp;quot;, &amp;quot;31&amp;quot;]}},
              {&amp;quot;range&amp;quot;: {&amp;quot;num&amp;quot;: {&amp;quot;gte&amp;quot;: 50, &amp;quot;lt&amp;quot;: 100}}}
            ],
            &amp;quot;must_not&amp;quot;: [
              {&amp;quot;term&amp;quot;: {&amp;quot;man_prd&amp;quot;: 1}}
            ],
            &amp;quot;should&amp;quot;: [
              {&amp;quot;term&amp;quot;: {&amp;quot;prop&amp;quot;: &amp;quot;100%&amp;quot;}},
              {&amp;quot;terms&amp;quot;: {&amp;quot;age_rank2&amp;quot;: [&amp;quot;32&amp;quot;, &amp;quot;31&amp;quot;]}}
            ]
        }  
      }
    }
  }
}

# https://www.elastic.co/guide/en/elasticsearch/reference/6.8/compound-queries.html&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;search query - script&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# prop : %제거 → int 변환 → 0.01 곱셈 → 0.5보다 작은 경우 리턴
GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;script&amp;quot;: {
      &amp;quot;script&amp;quot;: &amp;quot;Integer.parseInt(doc[&amp;#39;prop&amp;#39;].value.replace(&amp;#39;%&amp;#39;, &amp;#39;&amp;#39;)) * 0.01 &amp;lt; 0.5&amp;quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;참고 : search query - function_score&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;GET dev_recommend_storage_cst_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;function_score&amp;quot;: {
      &amp;quot;query&amp;quot;: {
        &amp;quot;match_all&amp;quot;: {}
      },
      &amp;quot;functions&amp;quot;: [
        {
          &amp;quot;gauss&amp;quot;: {
            &amp;quot;avg_prc&amp;quot;: {
              &amp;quot;origin&amp;quot;: 156465,
              &amp;quot;scale&amp;quot;: 2000
            }
          } 
        }  
      ]
    }
  }
}
# functions : 다수의 function을 다수의 field에 적용할 수 있음 
# function 종류 : gauss, exp, linear 등이 존재
# 각 field에 대한 score를 어떻게 종합해서 보여줄지 정할 수 있음 (min, max, avg, sum)
# https://www.elastic.co/guide/en/elasticsearch/reference/6.8/query-dsl-function-score-query.html&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;참고 : search query - script score&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;GET dev_recommend_storage_prd_mart/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;function_score&amp;quot;: {
      &amp;quot;query&amp;quot;: {
        &amp;quot;bool&amp;quot;: {
          &amp;quot;filter&amp;quot;: {
            &amp;quot;bool&amp;quot;: {
              &amp;quot;must&amp;quot;: [
                {&amp;quot;term&amp;quot;: {&amp;quot;age_rank1&amp;quot;: &amp;quot;61&amp;quot;}},
                {&amp;quot;term&amp;quot;: {&amp;quot;man_prd&amp;quot;: 0}},
                {&amp;quot;term&amp;quot;: {&amp;quot;prop&amp;quot;: &amp;quot;100%&amp;quot;}},
                {&amp;quot;range&amp;quot;: {&amp;quot;num&amp;quot;: {&amp;quot;gte&amp;quot;: 50}}}
              ]
            }
          }
        }
      },
      &amp;quot;functions&amp;quot;: [{
          &amp;quot;script_score&amp;quot; : {
            &amp;quot;script&amp;quot; : { 
              &amp;quot;source&amp;quot;: &amp;quot;&amp;quot;&amp;quot;
                if (doc[&amp;#39;age_rank2&amp;#39;].value != &amp;quot;0&amp;quot; ) {
                  71 - Math.abs(Integer.parseInt(doc[&amp;#39;age_rank2&amp;#39;].value) - Integer.parseInt(doc[&amp;#39;age_rank1&amp;#39;].value))}
                else { 0  }&amp;quot;&amp;quot;&amp;quot;}},
          &amp;quot;weight&amp;quot;: 0.5
        },{
          &amp;quot;script_score&amp;quot; : {
            &amp;quot;script&amp;quot; : { 
              &amp;quot;source&amp;quot;: &amp;quot;&amp;quot;&amp;quot;
                if (doc[&amp;#39;age_rank3&amp;#39;].value != &amp;quot;0&amp;quot; ) {
                  71 - Math.abs(Integer.parseInt(doc[&amp;#39;age_rank3&amp;#39;].value) - Integer.parseInt(doc[&amp;#39;age_rank1&amp;#39;].value))}
                else {0}&amp;quot;&amp;quot;&amp;quot;}},
          &amp;quot;weight&amp;quot;: 0.3
        }
      ], 
      &amp;quot;score_mode&amp;quot;: &amp;quot;sum&amp;quot;, 
      &amp;quot;boost_mode&amp;quot;:&amp;quot;sum&amp;quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>IT/Elasticsearch</category>
      <author>준나이</author>
      <guid isPermaLink="true">https://joonable.tistory.com/38</guid>
      <comments>https://joonable.tistory.com/38#entry38comment</comments>
      <pubDate>Mon, 19 Apr 2021 13:17:46 +0900</pubDate>
    </item>
  </channel>
</rss>