---
# System prepended metadata

title: '[GAI文章閱讀]INSTRUCTZERO: EFFICIENT INSTRUCTION OPTIMIZATION FOR BLACK-BOX LARGE LANGUAGE MODELS'
tags: ['[GAI文章閱讀]']

---

# INSTRUCTZERO: EFFICIENT INSTRUCTION OPTIMIZATION FOR BLACK-BOX LARGE LANGUAGE MODELS

:::info
:bulb: 最近因為GAI(生成式AI)興起，所以一起進來看看這些相關的文章。
:::
![image](https://hackmd.io/_uploads/H1xCYfcq6.png)

### :small_blue_diamond: **Date:** 2024-02-02 
:small_blue_diamond: Paper published in 2023-08




### Prompt engineering

我們最近都見識到了LLM的厲害，不過起初LLM對給的指示很敏感，容易因為換句話說就出錯，所以慢慢衍生出了Prompt engeering(如:APE)的工作。前陣子看新聞就看到了高薪徵聘prompt工程師的新聞。


Prompt engineering主要是在銜接人類和機器模型的差距，模型被訓練好是一回事，能夠知道我們在問甚麼是一回事。人類的語言裡面常常會有換句話說(Paraphrasing)的情形，同一個問題有好幾種不同的問法，可以得到同一種答案。


在提示工程裡面有分成硬提示(hard prompt)和軟提示(soft prompt)，硬提示就是一個「確切」、「特定」的提示或問題，像是「今天天氣如何」、「甚麼是LLM」等等。而說到模型要辨認的內容就不是我們人類會看到的這些確切的文字了，而是經過轉換後得到的向量空間，可以理解成機器的語言(不是程式語言，機器也是要轉換我們寫的code變成一些複雜的數字符號才能讀懂我們要表達的指令)，而這種轉換為機器看得懂的指令的向量就是所謂的軟提示(soft prompt)。


### Automatic prompt engineering,APE
是一種取prompt的方式，一般prompt engineering可以透過人工篩選、自動篩選以及現在這種貝葉斯優化的篩選方式。  


BTW，這篇文章是針對Instructions，hard prompt進行優化。  


### 為何需要InstructZero

我知道大家都很博學多聞，聽過了很多種語言模型，大的小的方的扁的，但不得不說目前最通用、大街小巷隨隨便便都叫得出來的應該還是非咱們老大哥OpenAI的「ChaptGPT」莫屬。前陣子鬧得沸沸揚揚的CEO之亂，在此再次恭喜Sam Altman光榮回歸。:clap::clap::clap:

>(ChaptGPT)Given their APIs only, it is
infeasible to develop gradient-based instruction optimization that requires back-propagation through these models. — INSTRUCTZERO

在本文中提到，像ChatGPT這種大型語言模型通常我們是摸不到BP(倒傳遞)那塊的，甚麼意思:sweat_smile:？就是我們一般是以API的形式把他import到我們的程式中直接使用，對一般人來說是非常簡單明瞭，但是對於那些覺得ChatGPT不夠聰明的工程師來說，無法把它直接抓過來優化，心就是癢癢的:imp::imp::imp::anger:。所以如果你覺得ChatGPT很笨的話，很抱歉！請忍耐一下~等下一次OpenAI幫你更新模型它就會更聰明了 XDD

所以這篇文章究竟提出甚麼？

它提出了一種不需要碰到模型本身的下指令方法，幫我們調整更好的指令給機器做計算。說到這個就想說，其實平常人和人在說話的時候也很需要這種演算法，問問題是很有技巧的耶！經常聽了一遍問題之後還是不知道對方想要問甚麼問題的人請舉手:hand:


一言不合就上圖，圖解釋得比我好	:baby:
下圖是INSTRUCTZERO的表現 : 



![image](https://hackmd.io/_uploads/B1LBHmq5p.png)

### In context learning 上下文學習
看這篇文章看到一半，發現了一個新概念，叫做上下文學習，這種學習模式尤其和貝葉斯優化很有關係，所以筆記一下。


ICL是來自於GPT-3的文章內容定義出來的詞彙，是LLM後續衍生出來的一種「能力」，模型會依據給的範例輸入和對應的範例輸出學習，讓我們在給予新的(沒看過也行)輸入時給出正確的輸出。這樣一來，可以運用這種自動標記、自動映射的能力省下標記的工作。

譬如像是:  

![image](https://hackmd.io/_uploads/SJENYzysT.png)

###### 上下文學習的兩個範例，其中向語言模型 (LM) 提供訓練範例清單（黑色）和測試輸入（綠色），並要求透過預測下一個要填入的標記/單字來進行預測（橘色）在空白處。

貝葉斯優化是基於機率模型。高斯隨機模型把每個點都視為有一個高斯分布，而不是只是點本身的資訊。


### InstructZero 基本概念  
第一次接觸到prompt工程的研究，在很多專有名詞都還沒搞懂的時候，重複盯著這張圖看了很久。看著熟悉的圖示，好像有點懂又感覺完全沒看懂。  
尤其是這種迭帶的算法，一開始總不知道要從哪裡看起，對於迭帶更新的概念還是覺得很迷欸。

![image](https://hackmd.io/_uploads/rkwtqUksT.png)

來跟大家分享一個小技巧，關於這種迭帶過程的算法，一律從左上角當作第一步(好爛的小技巧:dizzy_face:)。雖然知道這些變數都是要持續不段更新的東西，但還是要硬起來假設第一步是已知的！跟雞生蛋，蛋生雞的問題一樣，解題重點不在這件事本身，而是你要有個起使假設 :thumbsup:  
在這裡我們就當作手裡剛好有個Soft prompt，也剛好有input X和output Y(X,Y是固定的，只有prompt martrix會被更新)，這三個東西會先被丟到一個開源的模型(Open-source LLM)裡面幫我們做翻譯。先前說到soft prompt是一堆數字，就是在這裡會被翻譯成人看得懂的文字，因為這是要給我們偉大的ChatGPT看的，想想我們平常是用甚麼語言跟ChatGPT聊天?沒錯，人的語言！所以在這裡就是要翻譯準備丟到ChatGPT裡面的。  
從Soft prompt經過開源模型翻譯過來的叫做Instruction，也就是人看得懂的指示，在圖上適用v表示。這個Instruction會連同X(input)一起放到黑盒子LLM裡面(eg.ChatGPT)，然後我們會得到機器的回答。  

如果不清楚的話這樣說好了，在這裡X就可以是一籃子的水果，有草莓、蕃茄、西瓜、木瓜、巴辣、香蕉、蘋果，然後那個Instruction就可以是:請問X裡面有哪個水果是黃色的?  
機器(ChatGPT)就會跟你說 : 香蕉  

圖上機器是用f(.)表示。所以機器出來會是f([v;X])。然後！然後！還沒結束！重點還在後頭！  
機器出來的這個結果，可以把它想成一個預測值(Y')，他要跟我們真正的答案(Y)做比較，這裡就會算出一個分數(score)做指標來進行後面的貝葉斯優化。

我覺得到這一步才是InstructZero的重點，前面都只是拿別人訓練好的模型玩玩:joy:到這裡，可以看到我們手上有了三樣東西:  
a. 一開始丟進去的soft prompt  
b. open-source出來的instruction  
c. 剛剛算出來的score  

只有這三種東西最終會進入到貝葉斯優化的程序，在這一步會優化一次一次迭帶找到最好的soft prompt，所以一開始我們假設的那個soft prompt是甚麼不重要，因為他最終會被更新到最好的。  

來整理InstructZero大致上的迭帶步驟 :   

>**1.把soft prompt,input X, output Y(answer)放進open-source LLM，產生instruction**  

>**2.將instruction和input X放進黑盒子LLM，產生機器的答案Y'**  

>**3.計算機器給的解答Y'=f([v;X])與ground truth的得分，h(f([v;X]),y)**  

>**4.將soft prompt,instruction,score帶進貝葉斯優化中進行優化找出最佳prompt(此時得分最高)**

:mag_right:過程中不會優化到兩個LLM本身，



### InstructZero 結果
![image](https://hackmd.io/_uploads/SJEHDDkjT.png)

（1）APE，它生成使用比INSTRUCTZERO中的開源LLM更強大的LLM(即ChatGPT1）進行指令  
（2）Uniform（純粹探索），與INSTRUCTZERO使用相同的模型，繪製相同的總數透過均勻採樣soft prompt，沒有進行貝葉斯優化。  

### 參考資料

[原文連結](https://arxiv.org/abs/2306.03082)  

[APE:Large Language Models Are Human-Level Prompt Engineers](https://arxiv.org/abs/2211.01910)  

關於上下文學習(ICL)，我是從這下面的網址看來的內容做整理:  
1.[The Stanford AI Lab Blog
](https://ai.stanford.edu/blog/understanding-incontext/)  
2.[LLM Note Day 20 - 上下文學習 In-Context Learning](https://ithelp.ithome.com.tw/m/articles/10333095)

