關於 Prompt engineering 我只是略懂:徹底解析什麼是超參數?

什麼是 Hyperparameter?

超參數在 Transformer 架構和 GPT 模型中的定義

在 Transformer 架構和 GPT 模型中,超參數是在訓練模型之前設定的參數,它們控制著模型的結構(如層數、隱藏單元的大小等)和訓練過程(如學習率、批次大小等)。這些參數不會在學習過程中被模型自動調整,而是需要由研究人員或開發人員事先決定。例如,在 GPT 模型中,超參數可以包括編碼層的數量、每個層中的注意力頭數量、學習率等。

超參數的功能

超參數的主要功能是控制學習過程和模型的行為,它們對模型能否有效學習和一般化至未見數據有很大的影響。例如,學習率決定了模型權重更新的速度,太高可能導致學習過程不穩定,太低則可能使學習進展過慢。層數和隱藏單元的大小直接影響模型的容量,即其學習複雜關係的能力。

超參數對 GPT 模型的重要性

對於 GPT 模型來說,超參數的設定對於達到高效學習和優異性能至關重要。不恰當的超參數設定可能導致模型 #過擬合(學習過多訓練數據中的雜訊,而無法一般化到新數據)或 #Underfitting(學習能力不足,無法捕捉數據中的關鍵模式)。此外,超參數還影響模型的訓練時間和資源消耗,適當的設定可以使訓練更高效,降低計算成本。

為什麼用戶需要了解超參數

用戶需要了解超參數,因為這可以幫助他們更好地配置模型以達到特定的性能目標。通過調整超參數,用戶可以影響模型的學習效率、預測準確性和運行時間。此外,了解超參數對模型性能的影響可以幫助用戶進行故障診斷,識別性能問題的根源,並進行必要的調整。

Hyperparameter 的類型

Transformer 架構的大型語言模型有許多超參數,這些超參數對模型的學習過程、性能和生成的文本質量有重要影響。以下是一些核心超參數的解釋:

模型大小相關的超參數

  • Layers:Transformer 模型中 Encoder 和 Decoder 的層數。增加層數可以提高模型的學習能力,但也會增加計算成本和過擬合的風險。
  • Hidden Size:每一層內部的隱藏單元數量。這個參數影響了模型的容量,更大的隱藏層維度允許模型捕捉更複雜的特徵,但同時計算成本也更高。
  • Attention Heads:多頭注意力機制中的頭數。多頭注意力可以讓模型在不同的子空間學習到資訊,提高模型的表達能力。

訓練過程相關的超參數

  • Batch Size:每次訓練更新權重時使用的樣本數量,較大的批次大小可以提高訓練穩定性和效率,但也需要更多的記憶體。
  • Learning Rate:在訓練過程中更新模型權重的速率,學習率過高可能導致訓練不穩定,過低則可能導致學習過慢。
  • Learning Rate Warmup:訓練初期逐漸增加學習率到初始設定值的過程,這有助於提高模型訓練的穩定性。
  • Weight Decay:一種正規化技術,用於防止模型權重變得過大,從而避免過擬合。

生成過程相關的超參數(特定於生成任務)

  • Max Generation Length:模型推論生成文本時可用的最大 token 數量。
  • Temperature:控制模型推論結果隨機性的參數,設定較低的 Temperature 會使模型的推論總是從機率最高的可能性中進行挑選作為輸出,高 Temperature 則會使模型推論的結果更多樣化且更具創造力。
  • Top-K :在生成每個新 token 時,僅考慮機率最高的 K 個 token 作為下一個 token 的候選。
  • Top-P(Nucleus Sampling):選擇累積機率高於 P 的最小 token 集合作為下一個 token 的候選。

其他超參數

Dropout:在訓練過程中隨機丟棄一定比例的輸出,用於防止過擬合,提高模型的通用化能力。

上述列表中的超參數我們會在以下章節逐一說明。

Transformer 架構下通用的 Hyperparameter

LLM 推論過程中可用的 Hyperparameter

Max output tokens、Temperature、Top-K 和 Top-P 可以被視為一種「超參數」(Hyperparameter),但它們與傳統意義上控制模型架構和訓練過程的超參數略有不同,這些參數主要用於控制生成模型,如 GPT 與 Gemini 的文本生成階段,而不是模型訓練階段。

這些參數對於調整生成文本的質量和風格非常關鍵,它們影響生成過程的確定性、創意程度和多樣性,由於這些參數需要在使用模型生成文本之前設定,並且對輸出有顯著影響,所以它們符合超參數的定義:在模型運行前設定的,影響模型行為的參數,雖然它們直接影響的是生成過程而不是訓練過程,了解這些超參數對於有效利用生成模型、調整生成內容以滿足特定需求和偏好非常重要。

以下我們將逐一深入解釋這些 Hyperparameter 對模型推論的影響。

超參數:Max output tokens

定義

在 LLM 如 GPT 系列中,「Max output tokens」是指在進行文字生成時,模型能夠生成的最大 token 數量。一個 token 大約對應於四個字元,因此 100 個 tokens 大概等於 60-80 個單詞,這個超參數允許使用者指定模型推論生成結果的長度範圍,透過設定較低的值來獲得更短的回應,或者設定較高的值以產生更長的文字。

作用

  • 控制輸出長度:在 LLM 的應用中能夠控制生成內容的長度是非常重要的,這影響到模型的應用場景,比如簡短的回答適合快速查詢,而長篇文章生成則適用於內容創作。
  • 資源管理:生成長度的控制是控制算力消耗與推論成本的重要方式,長文本的生成需要更多的計算時間和記憶體,限制輸出 token 數量可以幫助在有限的資源下高效運行模型。
  • UX:根據用戶的需求調整回應長度,可以提升用戶體驗。例如,當用戶需要快速獲取資訊時,較短的回應可以避免信息過載;反之,當用戶尋求詳細的解釋或故事時,較長的文本則更為合適。
  • 提高準確性和相關性:通過精確控制生成文本的長度,可以在一定程度上提高文本的準確性和針對性。避免過長的文本可能會偏離主題,確保信息的緊湊和相關性。
  • 適應不同場景:不同的應用場景可能需要不同長度的文本輸出。例如,自動生成的電子郵件可能需要比社交媒體帖子更長的文本。能夠調整這一超參數讓模型在各種情境下都能發揮作用。

超參數:Temperature

定義

「Temperature」(溫度)是一個控制 LLM 推論結果樣本選擇隨機性的超參數,當應用 Top-K 或 Top-P 抽樣策略時,Temperature 用來調節在每一步生成過程中選擇下一個 token 時的隨機性程度(Degree of randomness)。Temperature 較低時,模型在選擇下一個 token 時會趨向於選擇機率最高的 token;而 Temperature 較高時,LLM 在選擇 token 時引入更多隨機性,從而增加推論結果的多樣性和創造性。Temperature 設為 0 時,選擇過程採用完全確定性(Deterministic),總是選擇最高機率的回應。

作用

  • 控制生成文本的多樣性和創造性:Temperature 允許調節生成文本的創新度,對於需要創造性或多樣性回答的情境特別重要,這使模型能夠適應從嚴格的資訊查詢到創造性寫作的各種應用。
  • 提高模型適應性:通過調整 Temperature,模型可以更好地適應不同的使用場景,從提供確定性資訊到探索性問答或創意生成。
  • 增強用戶體驗:Temperature 設定對於滿足用戶期望和提升 UX 有很大的幫助,使用較低的 Temperature 生成的回應可能更加直接和相關,而較高的 Temperature 則能產生更富有創意和意想不到的回答。
  • 避免過度通用的回應:透過提高 Temperature,可以避免模型生成過於通用或簡短的回答而是誘發 LLM 去生成更有吸引力且具有深度的內容。

超參數:Top-K

定義

「Top-K」是一種在大型語言模型(如 GPT 系列)文本生成過程中用於控制 token 選擇的超參數,Top-K 決定了從模型語料庫中選擇下一個 token 時考慮的候選 token 數量。例如,Top-K 為 1(即 Greedy decoding)意味著下一個選擇的 token 用遠都會是所有 token 中機率最高的那一個;而 Top-K 為 3 則意味著從機率最高的三個 token 中選擇出下一個 token,選擇過程中會結合 Temperature 來引入隨機性。

在每個 token 選擇步驟中,先根據機率選出 Top-K 個 token,然後進一步通過 Top-P(又稱 #核心抽樣)來過濾這些 token,最終利用 Temperature 抽樣來選擇最終的 token。

作用

  • 控制模型推論結果的隨機性:Top-K 允許調節 token 生成過程中的隨機性程度,從而影響推論結果的多樣性。較低的 Top-K 值產生的回應較少隨機,更加確定性;較高的 Top-K 值則能產生更多隨機和多樣化的回應。
  • 提升推論質量和相關性:通過限制僅從具有高機率 token 中選擇作為推論的下一顆 token,Top-K 幫助模型避免生成不相關或不合理的推論結果,從而提高生成內容的品質和針對性。
  • 平衡創新與準確性:Top-K 為 LLM 提供了一種機制去在創新性和準確性之間找到平衡。這對於各種應用場景,尤其是那些需要在保持推論結果豐富性和新穎性的同時,確保內容準確性和可靠性的應用場景中時。

超參數:Top-P

定義

「Top-P」(又稱為 #累積機率門閾值 或 #核心抽樣)是控制 LLM 在推論過程中 token 選擇的超參數。Top-P 超參數改變了模型選擇輸出 token 的方式,通過從最有可能到最不可能的 tokens 中選擇,直到這些 token 的機率加總達到設定的 Top-P 值。例如,如果有三個 token A、B 和 C,它們的機率分別為 0.3、0.2 和 0.1,並且設定的 Top-P 值為 0.5,則模型將通過使用 Temperature 從 A 或 B 中選擇下一個 token,並排除 C 作為候選 token。

作用

  • 控制推論結果的相關性與多樣性:Top-P 通過動態調整考慮的 token 範圍來平衡生成文本的相關性和多樣性。
  • 增強文本生成的自然性:Top-P 抽樣有助於模型避免過度依賴幾個高機率 tokens,使生成的文本更加自然和流暢。
  • 提高模型的適應性:Top-P 為模型提供了一種靈活的方式來適應不同類型的文本生成任務,無論是需要更確定性回答的查詢還是需要創造性和多樣性的內容創作。
  • 控制生成過程中的隨機性:通過調整 Top-P 值,可以細緻地控制生成過程中的隨機性程度,從而達到不同的生成效果。

OpenAI API 的特殊 Hyperparameter

超參數:presence_penalty

主要作用是調節 GPT 在推論生成的內容中引入新概念或詞彙的傾向性。透過調整此參數,可以影響模型在生成過程中選擇『尚未或少量出現過』的詞彙的機率,從而控制推論結果的創新性和主題廣度。

這個參數的值範圍是從 -2.0 到 2.0,當 presence_penalty 的值設為正數時,模型在生成文本時會更傾向於引入新的詞彙或概念,這有助於提升文本的創新性和探索新主題的能力;相反,如果設為負數,則模型會傾向於重複使用已經出現過的詞彙,從而可能增強文本對既定主題的聚焦和一致性。設為 0 表示不特別偏好新詞彙的引入或既有詞彙的重複。

在生成過程中,模型會計算每個可能的下一個詞彙的機率分布,presence_penalty 通過調整這些機率分布,影響詞彙被選擇的概率。具體來說,對於已經在文本中出現過或較常見的詞彙,根據 presence_penalty 的值,其被再次選擇的概率會被降低(正值時)或提高(負值時)。

假設你正在使用 OpenAI 的 GPT 模型來生成一篇關於「未來科技」的短文。你希望這篇短文能夠涵蓋多個不同的科技領域,比如人工智慧、量子運算、生物技術等,而不是重複地談論同一個領域。 這時,你可以通過提高 presence_penalty 的值來實現這個目標。設定一個正值的 presence_penalty(例如 0.5),GPT 在生成文本時會傾向於避免重複使用已經出現過的詞彙或概念。這樣,當模型在文本中提到「人工智慧」後,如果 presence_penalty 設定得足夠高,它在後續生成的文本中就會嘗試引入「量子運算」、「生物技術」等其他新的科技領域,從而使得整篇短文的內容更加豐富和多元。

不使用 presence_penalty(或設為 0)時,生成的文本可能是這樣的:

「未來科技將深刻改變我們的生活。人工智慧的發展速度驚人,人工智慧可以在許多領域中發揮作用,比如人工智慧在醫療診斷中的應用…」

這上面這段文本中,「人工智慧」這個概念被重複提及多次。但當你設定了較高 presence_penalty(例如 0.5)後,GPT 推論後生成的文本可能會有所不同:

「未來科技將深刻改變我們的生活。人工智慧的發展速度驚人,它可以幫助我們解決複雜的問題。而量子運算的突破則為我們提供了全新的算力形式。同時,生物技術的進步也使得深度客製化醫療成為可能…」 

在這個例子中,通過提高 presence_penalty,生成的文本中成功引入了多個不同的科技領域,使得內容更加多元和全面。

綜合上述我們可以理解到 presence_penalty 對生成文本的影響主要體現在:

  • 創新性:提升 presence_penalty 可以鼓勵模型探索和引入新概念,使得生成的內容更加創新和多元,這在需要大量創意輸出(如故事創作、創意寫作等)的場景中特別有用。
  • 主題探索:較高的 presence_penalty 值有助於模型在生成文本時涉獵更廣泛的主題和概念,這對於需要廣泛信息覆蓋或主題探索的應用場景(例如市場研究、內容發想等)非常有益。
  • 文本連貫性與聚焦:過高的 presence_penalty 可能會對文本的連貫性和主題聚焦帶來挑戰,因為頻繁引入新概念可能會使文本顯得雜亂無章或偏離核心主題。因此,適當調整此參數以達到創新性和連貫性之間的平衡非常重要。

超參數:frequency_penalty

用來調控 GPT 進行推論時特定詞彙出現的『頻率』,具體來說,它會降低已經出現過的詞彙再次出現的機率,從而幫助控制生成內容中詞彙的重複度。

根據 OpenAI API 文件中的說明,frequency_penalty 的值範圍是從 -2.0 到 2.0。當值設為正數時,模型越傾向於避免重複之前已經出現過的詞彙,這對於提升模型推論結果的多樣性和創新性有幫助;當值設為負數時,則相反,會增加某些詞彙重複出現的機率,這在某些情境下可能有其用途,比如強化某些概念或是維持特定的主題一致性。當值設為0時,表示不對詞彙出現的頻率做任何調整。

假設你正在使用 OpenAI 的 GPT 模型生成一篇關於「環境保護」的文章。你希望這篇文章能夠廣泛地探討各種環保主題,而不是重複地聚焦於某一小塊,比如一直談論「回收」。 在這種情況下,你可以通過提高 frequency_penalty 的值來幫助達成這一目標。

frequency_penalty 設定為正值(比如 0.5)時,如果某個詞彙在文本中已經出現過,這個參數就會降低該詞彙再次出現的概率。這樣做可以鼓勵模型探索新的詞彙和概念,從而使文章內容更加多樣化。

如果不使用 frequency_penalty(或設為 0)時,生成的文章可能是這樣的:

「環境保護是我們當今面臨的重大挑戰之一。回收是減少垃圾、保護環境的有效方法。通過回收,我們可以減少廢物,回收還可以幫助我們節省資源,回收紙張、塑膠和金屬是非常重要的…」 

上面這段推論出來的文本中,「回收」這個概念被重複多次提及,如果這不是我們預期的行為,可以透過設定較高 frequency_penalty(ex. 0.5)嘗試讓 GPT 推論的結果去涵蓋更多的「概念」:

「環境保護是我們當今面臨的重大挑戰之一。回收可以幫助減少廢物,保護自然資源。此外,節能減排也是環保的重要組成部分,它涉及到減少能源消耗和汽車排放。我們還可以通過植樹來增加綠色覆蓋率,對抗氣候變化。」 

在這個例子中,通過提高 frequency_penalty,生成的文章成功地覆蓋了「回收」、「節能減排」和「植樹」等多個環保主題,而不是僅僅集中在「回收」上。

  • 提高 frequency_penalty 可以使生成的文本更加多樣化,避免同一詞彙或短語的重複出現,讓整體內容更加豐富和有趣。
  • 透過調整這個參數,可以在一定程度上控制文本的主題聚焦,避免偏離核心主題,特別是在需要緊扣主題進行深入探討的應用場景。
  • 過高的 frequency_penalty 值可能會影響文本的連貫性和自然流暢度,因為避免重複使用某些詞彙可能會讓語句之間的銜接變得生硬。

“presence_penalty” v.s “frequency_penalty”?

雖然 presence_penaltyfrequency_penalty 都是用來調節生成文本中詞彙重複的概率,但它們的關注點略有不同。presence_penalty 更側重於詞彙是否出現過,即對新詞彙的引入給予獎勵或懲罰;而 frequency_penalty 則是根據詞彙出現的頻率來調整其選擇概率,對於反复出現的詞彙給予更直接的懲罰。

註:現階段 OpenAI 並沒有詳細的技術文件說明 presence_penalty 和 frequency_penalty 的具體數學公式。

未完待續 ..

Leave a Comment

Your email address will not be published. Required fields are marked *