作者:劉小虎,中國科學院計算技術研究所
組內現在正在做大模型相關,筆者負責prompt engineering,在實際工程中會發現prompt對模型的輸出影響巨大,可能一個字就會改變模型的輸出(筆者用的是量化后的7B model),而且換一個模型,就要改變手工制定的prompt,非常麻煩和受限。因此想到了Automatic prompt engineering。由此記錄自己的paper閱讀,肯定會有自己的理解錯誤的地方,如有發現請聯系筆者進行更正。
APE: Larger Language models are human-level prompt engineers
這篇論文的核心思路就是:
?從訓練集中生成候選prompt
?評估這些候選prompt,選出得分最高的prompt
?resample, 使用LLM 生成語義相近的prompt(2中得分最高的prompt),然后再進行評估,最終得到prompt
APE整體框架圖
APE算法
生成候選prompt
論文指出有三種生成候選prompt的方式
這個比較直觀,就是寫一段指令,然后將訓練集的輸入輸出給出,直接讓LLM自動生成prompt。這個生成prompt的模板不知道是哪的出處,有網友知道是哪的,可以直接指出。
?Reverse Mode Generation
這個也很直觀,就是填補空白的方式。但是這個方式怎么實現呢?我比較疑惑,不知道怎么實現這個填補空白的方式,因為LLM都是一個字一個字的自回歸生成。
?Customized Prompts
這一類就是自己根據task來設計了,論文給出了一個示例。我認為就是使用不同的模板來擴充了多樣性(可能是我的理解有錯誤)
評估候選prompt
?Execution accuracy
這種方式其實就是使用GT來進行比較。將得分最高的prompt扔進模型,得到結果和GT進行比較。
?Log probability
給定指令和問題后所得到的所需答案的對數概率
另外,這一步如果在全量訓練集上評估,則開銷非常大,因此作者提出一種multi-stage策略。大致思想是先在少量subset上評估,然后過濾掉比較差的,循環這一過程直到候選集足夠小,此時再在全量訓練集上進行評價、挑選。
Resample
使用的是蒙特卡羅搜索的方式。說的這么玄乎,其實還是使用LLM來生成prompt!但是這一步他是使用之前得分最高的prompt再次來生成語義相近的prompt。
這里可以是迭代的方式進行。怎么迭代呢?筆者是這樣認為的:
1、得到語義相近的prompt。
2、評估這些prompt。
3、得到得分最高的prompt 重復1、2步驟。
作者實驗發現,對于比較難的任務,進行resample能夠進一步提升效果。
ProTeGi (Automatic Prompt Optimization with “Gradient Descent and Beam Search)
這篇文章早就在arxiv上發出來了。當時的縮寫還是APO。今年被EMNLP2023收錄
首先讓我們先來看看這篇論文的整體框架圖。
ProTeGi總體框架圖
方法:利用數值梯度下降自動優化提示,同時結合beam search和bandit selection procedure提高算法效率。
優勢:無需調整超參數或模型訓練,ProTeGi可以顯著提高提示的性能,并具有可解釋性。
什么原理呢?
?得到當前prompt的“gradient”
這個“gradient”怎么得到的了呢,這是個啥玩意,怎么還有梯度?注意,注意。人家是帶引號的!比喻成梯度。這玩意有什么用呢。
文章指出給定一批error samples(當前prompt無法預測正確的),讓LLM給出當前prompt預測錯誤的原因,這一原因即文本形式的“gradient”。使用的還是LLM!
?將“gradient”輸入到LLM中,得到新的prompt
?和APE一樣,resample, 得到語義相近的prompt,然后迭代。
注意注意啊,每輪迭代中,最外層包含一個beam search過程,以便強化探索。這一塊就看不懂了, 也是本論文的貢獻之一。沒有想過改進,所以略過直接使用。
OPRO (Large Language Models as Optimizers)
paper:LargeLanguageModelsasOptimizers 鏈接:https://arxiv.org/abs/2309.03409 code:https://github.com/google-deepmind/opro
首先來看框架圖
然后接著看論文對meta-prompt的定義
blue 藍色的是 solution-score pairs 也就是 prompt + score。這個score怎么來的呢?使用LLM進行打分,也就是Figure 2 中的 objective function evaluator。這應該也是個LLM, 這個LLM和 LLM as optimizer 可以是同一個 也可以不是。** 注意,這個打分其實就是評估新生成的prompt在任務上的表現,說白了就是和GT進行對比(對了+1)**。
orange 橙色 就是指令 meta-instructions.
purple 紫色 就是task description,包含一些任務的examples、優化的目標等
因此, OPRO的核心思路是讓LLM基于過往的迭代記錄、優化目標,自己總結規律,逐步迭代prompt,整個過程在文本空間上完成。
PE2 (Prompt Engineering a Prompt Engineer)
paper:PromptEngineeringaPromptEngineer 鏈接https://arxiv.org/abs/2311.05661
這一篇paper 是 APE 和 APO (ProTeGi)的改進版,集成了這2個方法的優點。
這篇論文主要提出了一個meta-prompt的東東(等等,我去,這玩意和OPRO這篇論文里的好像啊)
提供更細節的指令和內容
?提供提示工程的教程
?2階段的任務描述
?step-by-step 推理的模板
?明確指定提示與輸入之間的相互關系
結合優化的概念
?batch size : 指的就是使用batch size失敗的例子
?step size : 指的就是改變原始的prompt中step size個字
?Optimization History and Momentum : 其實就是增加了以外的prompt和修改后的prompt
看完后驚呼道:這是真能寫啊。寫的玄乎又玄乎的。一圖勝千言
給我的感覺就是前面3篇論文的集成版本。
將OPRO中的meta-prompt的概念用到了 APO中了,然后豐富了模板的內容。有反思分析有推理,迭代的讓模型自動修改prompt。
審核編輯:黃飛
-
算法
+關注
關注
23文章
4599瀏覽量
92643 -
prompt
+關注
關注
0文章
14瀏覽量
2668 -
LLM
+關注
關注
0文章
273瀏覽量
306
原文標題:總結
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論