
阿里妹導讀
什麼是Prompt?
Prompt(提示詞)是大模型的輸入,也是呼叫大模型能力的介面,用以激發或引導大模型生成特定型別的回答。
這個定義很標準,並不需要多餘的解釋,我們繼續追問。
為什麼需要Prompt?
直接回答這個問題可能會有些抽象,此處引入ICIO框架,ICIO的核心思想,是透過明確定義任務的各個方面,來提高AI響應時的效率和準確性。它是業內廣泛認為最為簡單且易於遵循的提示框架,因其簡單性而受到青睞。
在ICIO的框架的設計中,Prompt可能包含四要素:
-
Instruction(指令):這是最重要的部分,它直接告訴模型需要執行的具體任務。
-
Context(上下文/背景):上下文提供了任務執行所需的背景資訊,幫助模型理解任務的情景和環境。
-
Input Data(輸入資料):輸入資料是模型需要處理的具體資訊。
-
Output Indicator(輸出指示器):輸出指示器告訴模型使用者期望的輸出型別或格式。
其中除了指令以外,其他要素都是可選的,說明指令對於大模型來說是最重要的,其他要素都是對指令的補充。這意味著:
提示詞最基本的作用是溝通和引導,其核心是要清晰地傳達使用者的意圖,而上下文和輸入輸出等內容,是對意圖的補充,幫助大模型更快、更準確地理解意圖。
什麼是優質Prompt?
優質的Prompt,可以清晰地傳達使用者的意圖。
那麼如何做到清晰呢?
當A的提問話術為“我配XXXX嗎?”,B應當如何思考。
A的預期
理想情況下,B會在腦海中構建一個關於這個問題的上下文框架,根據A的人物性格特性,理解到A的這種表達方式是想要B為自己做一些事情,更多是期待獲得某種情感上的回應,進而基於這個框架來形成回答:“沒問題,你想要的我都會幫你實現”。
B的回答
如果B的回覆,是告訴A你想要的也可以自己來實現。這個回答可能會讓A不高興,因為B沒有真正理解A的意圖,A實際上是希望B能幫忙做XXXX。
可以看出,在這個語境中,我們的GPT B的關注點,落在了“事件”上,而非“配”上,導致B誤以為A是簡單的想要XXXX,進而導致了其不符合預期的輸出。
這種預期上的差異,一方面來源於GPT B的效能不足,另一方面是A的Prompt不夠好,導致B對上下文中資訊的捕捉不夠充分,進而沒能充分理解A的意圖。所以,要想做到清晰,指令很重要,而指令背後的上下文,也很重要。
好,提到上下文和理解,我們繼續問下一個問題。
GPT如何理解Prompt?
GPT的結構

GPT的模型結構
上圖是GPT模型的基本結構,GPT模型源自於Transformer模型。由於Transformer模型最初的設計是進行類似文字翻譯的序列到序列的任務,而GPT模型的目標是進行預測性的生成式任務,比如預測下一個單詞的機率分佈,並不需要Encoder來處理輸入序列,因此進行了簡化。
GPT模型使用了Transformer的解碼器部分,且捨棄瞭解碼器中的交叉注意力層,但是保留了最核心的兩層
-
掩碼多頭自注意力層(Masked Multi Self Attention Layers,對應Transformer的Masked Multi-Head Attention,簡稱MHA)
-
前置反饋網路層(Feed Forward Networks Layers,簡稱FFN)
其中,自注意力層的功能是理解輸入內容,它使模型能夠在處理序列時捕捉到輸入資料之間的依賴關係和上下文資訊,GPT亮亮對麥琳情緒的捕捉就在此發生。FFN層會對自注意力層的輸出進行進一步的非線性變換,以提取更高級別的特徵,類似於我們的大腦在思考如何回應,進而基於已有的資訊和知識,產生新的內容。
本篇並不打算深入討論FFN,因為在FNN層,Prompt對大模型輸出的影響是透過自注意力層的輸出間接產生的,且FNN層的非線性變換很難用語言表述清楚。
而在自注意力層,Prompt的影響相對可以解釋,其重點在於:Prompt會影響自注意力層對上下文資訊的捕捉。
自注意力機制
老規矩,從問題出發,掩碼多頭自注意力層是如何捕捉上下文資訊的?
在一次大模型的執行過程中,Prompt首先會透過Tokenization(分詞)形成一個token(詞元)序列,首先透過Embedding(詞嵌入)轉變成高維空間中的向量。在向量空間中,每一個點代表一個實體,可以是單詞、短語、句子等任何需要被AI處理的資料,這些點在向量空間中的位置和分佈反映了實體之間的相似性和關係,其所在空間的每一個方向都代表了資料的某種屬性或特徵。
Embedding產生的原始的向量的語義,就是詞本身的語義,但是在不同的上下文語境中,相同的詞也會有不同的含義。比如“蘋果”這個詞,在“蘋果公司的財報”、“蘋果的口感”這兩句話中,分別代表著蘋果公司和水果。因此大模型需要對原始向量“蘋果”,基於上下文中“公司”、“財報”、“口感”等資訊,來進行向量的調整,豐富其語義。
Prompt對上下文資訊的理解,就體現在如何基於原始向量產生新向量的過程中。
為了實現這種能力,GPT引入了自注意力機制,它是GPT的自注意力層的核心,它的核心思想是模仿人類的注意力,即在處理大量資訊時,能夠聚焦於當前任務最相關的部分,而忽略其他不太重要的資訊。
透過自注意力機制的計算,序列中的每一個token都會評估其他token對於豐富自身資訊的重要性,來得到其與其他token的注意力權重。
舉個例子,輸入“有一天,一位勇敢的探險家”來要求GPT進行文章續寫,對於其中token“探險家”而言,它會去評估“有一天”、“一位”、“勇敢的”對於自身的重要性,發現從語義、語法等角度分析,“勇敢的”對於自身的內容理解相對重要,就會給其賦予更高的權重,此時我們可以說,“探險家”注意到了“勇敢的”。
迴歸到Prompt對模型輸出的影響上,我們可以認為:Prompt的不同部分對輸出結果影響的大小,主要體現在注意力權重的分配上。

縮放點積點積注意力(左)和多頭注意力(右),引自《Attention Is All You Need》
單頭注意力(縮放點積注意力)
上圖來自於論文《Attention Is All You Need》中對於注意力的描述,其中Multi-Head Attention(簡稱MHA)就是我們平時說的注意力層。多頭注意力是由多個並行執行的縮放點積注意力組成,其中縮放點積注意力的目的,是幫助模型在大量資料中快速找到並專注於那些對當前任務最有價值的資訊。換句話說,就是計算注意力大小的權重。
縮放點積注意力的過程,可以概括為:
1.首先透過給予輸入資料形成的嵌入矩陣與Wq、Wk、Wv的權重矩陣分別相乘,獲得Q、K、V三個矩陣。
2.透過Q與K的點積運算結果來評估不同詞元之間的相似度。
3.進行掩碼操作,避免當前詞元之後的詞元的上下文資訊對當前詞元產生影響(GPT屬於因果解碼器,這種掩碼方式體現了因果解碼器的基本特性)。
4.進行歸一化操作,將點積形式的權重轉化為總和為1的注意力分佈。
5.最後將注意力分佈與K所對應的V相乘,加權求和,得到一個矩陣向量,該向量就是我們所希望求解的上下文向量。
有些抽象?別急,讓我們來一步一步慢慢分析。
在論文中,對於縮放點積注意力的計算過程,選擇了使用一個非常簡潔的公式來表達,如下圖:

縮放點積注意力機制公式
如何理解這個公式?首先,我們輸入的token序列,在經過詞嵌入後會形成嵌入矩陣X,並與模型透過預訓練獲得的Wq、Wk、Wv這三個權重矩陣分別相乘,分別獲得三個核心的矩陣向量Q、K、V。

QKV計算公式,引自《A Survey of Large Language Models》
他們分別代表著什麼?我們繼續以“有一天,一位勇敢的探險家”這句話舉例。

用圖書館中查詢書籍來舉例,也許會更通俗一點。有一天,你剛看完《流浪地球》,心潮澎湃,希望去找一些與科幻有關的書,此時:
-
Q:代表了你的需求,比如“我希望找一些和科幻有關的書”;
-
K:代表了書籍的特徵,比如我最喜歡的《三體》這本書,就包含了“科幻”、“社會批判”、“宇宙社會學”等標籤;
-
V:代表了書籍的內容,你透過特徵找到了《三體》,知道了它的作者是劉慈欣,內容摘要、以及它幾十萬字的精彩內容;
那麼這三個向量是如何得到注意力的權重的?讓我們來到“探險家”的計算過程中。“探險家”所提供的Q,會分別與序列中的其他token的K計算點積,獲得與其他token的語義相似度,進而得到注意力的分數,公式如下(T是矩陣轉置,目的是匹配矩陣的維度,dk是K的維度,除以其平方根是為了縮放點積,確保數值穩定)

注意力分數公式
有可能,“探險家”由於其也具有“冒險”、“勇氣”等關鍵特徵,其與“勇敢的”的點積相對更大,那麼其在歸一化後的佔比也會更高,在GPT的理解中,“勇敢的”對於“探險家”而言,就更重要。
另外說明一下,各位也許會看到“注意力函式”的描述。注意力函式有兩種,“點積注意力”和“加性注意力”。Transformer團隊在論文中明確提及,選擇點積注意力,因為它在計算上高效且能穩定梯度,同時能夠捕捉序列中元素間的長距離依賴關係。
之後進行掩碼(Mask),由於在因果解碼器中,當前詞元是無法看到自身之後的詞元的,所以需要將當前詞元之後的所有點積置為負無窮,以便使其在歸一化後的佔比為零。
這個分佈,就叫做注意力分佈,對應著下面表格中“探險家”所對應的那一列。它代表著從“探險家”的視角出發,每一個token對於自身內容理解的重要程度。

一個可能的softmax後的機率分佈(GPT生成,數值透過模擬產生)
softmax後獲得的權重,會分別與每一個K對應的V相乘,透過注意力權重加權求和,就可以得到一個向量,稱為上下文向量。

上下文向量的計算
上下文向量,就是Attention(Q, K, V)求解出來的值,其中包含了序列中與當前元素最相關的資訊,可以認為是GPT在結合了上下文的資訊後,對Prompt的理解的一種表示。
多頭注意力(MHA)
注意力機制並沒有結束,上面只是對於單頭注意力的分析。在論文中提到
Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this
這段表述的意思是,多頭注意力允許模型同時關注不同表示子空間中的資訊,使用單個注意力頭時,平均會抑制這一點。
因此Transformer引入了多頭注意力,這裡的多頭,指的是注意力函式例項。可以理解為,不同的頭,他們的Wq、Wk、Wv都不同,也就是詞元會從不同角度去發問,同時表達出不同角度的特徵。這對於充分捕獲上下文資訊,是有幫助的。

大語言模型架構配置表,其中N代表頭數,引自《A Survey of Large Language Models》
目前的大模型,上圖是從《大語言模型概述》中摘錄的配置表,可以看到都是多頭注意力機制(實際上大家使用的是在MHA的基礎上進行效能最佳化的版本,比如分組多頭注意力GQA,多查詢注意力MQA)。N代表頭數,可以看到GPT-3中有96個頭。

多頭注意力公式
每個頭都按照縮放點積注意力的方式進行運算後,會將他們的上下文向量,基於輸出投影矩陣Wo進行變換。論文中提到,由於每個頭的維度降低,總的計算成本與具有完整維度的單頭注意力相似。所以效能上相對於單頭注意力並沒有太大影響。
再之後,就是基於理解進行作答,這部分並不是本文關注的重點,簡單概括下:就是將上下文向量傳入前置反饋層(FNN),經過兩次線性變化加一次啟用函式來提取更深層次的特徵,再透過殘差連線和歸一化來加速收斂。最後在輸出層透過對線性變換後計算生成的logits進行歸一化,來得到下一個詞的機率分佈,透過解碼策略來選擇具體的token,然後將輸出的token作為Prompt的一部分再來一輪,由此往復,直至完成作答。
其中輸出層涉及到了大模型的解碼策略,其中GPT提供了常見的temperature、top-p等引數,這些引數的設定同樣會影響模型輸出的結果。
此外,AI就是最好的老師,非常推薦大家使用AI來獲取相關知識並輔助理解,會有事半功倍的效果。
部署Nginx並透過Ingress暴露和監控服務
在阿里雲容器服務(後簡稱ACK)叢集中透過YAML檔案快速部署一個Nginx應用並透過Nginx Ingress暴露和監控服務,結合使用ACK、日誌服務、專有網路搭建業務部署運維方案。
點選閱讀原文檢視詳情。