你理解的控制LLM幻覺的方法可能是錯的
那什么是粗暴的控制LLM的幻覺的方法呢?
正常你們大家學(xué)到的應(yīng)該是
temperature=0
top_k=1
top_p=0.1類似這種的但是這種是不是能解決幻覺呢?很顯然在做的各位試過,應(yīng)該是沒什么效果的。為什么呢?
正常來講,我們不是把生成next token的概率放到最大的那個token上了嗎?
今天先回憶個概念LLM是靠什么來決定next_token生成的,
就是Logit,就是softmax你的前向計算的最后一層(這么表達不精確,但是你可以認(rèn)為就算最后一層了)
過了output之后呢?要和詞表做一個矩陣乘,得到一個logit,但是這個不能直接用,需要給softmax轉(zhuǎn)換為對應(yīng)詞的概率,就是我剛才的公式
(不理解transformer架構(gòu)的兄弟可以參考我以前的博文,草履蟲也能學(xué)懂得Transformer系列
??https://mp.weixin.qq.com/s/Qi9-SqTGk5yHkF0WQ1CdYQ?token=1866303267&lang=en_US??
如果志在玩大模型,至少目前Transformer還是繞不開的基礎(chǔ))
1- 為什么temperature要設(shè)置低
溫度采樣是一種基本技術(shù),可控制 token 選擇的隨機性。它的工作原理是在應(yīng)用 softmax 函數(shù)之前縮放 logits(未歸一化的預(yù)測分?jǐn)?shù))。
其中:P(xi)是選擇 token ii的概率,Z i是選擇token ii的 logit,T就是溫度參數(shù)了
較低的溫度(T < 1)使分布更加尖銳,傾向于高概率 token。較高的溫度(T > 1)會使分布變平,增加選擇較低概率 token 的機會。
2- TOP P 和K 呢?
這就不仔細(xì)講了,TOP是核采樣,就是排序計算累加概率,知道累加概率超過p剩下的就不要了,然后歸一化,從里面選出來TOPK 不用說了把,選K個歸一化。
一般的理解認(rèn)為,如果把上述的設(shè)置都設(shè)置為最嚴(yán)格的,比如設(shè)置topK=0,TOP_P=1, 先把這兩個參數(shù)廢掉,然后temperature=0.0 就應(yīng)該是絕對無幻覺的答案了,如文章開頭說的,事實上是不行的,下面講一下為什么?因為LLM還有兩個比較關(guān)鍵的概念,當(dāng)然你也可以說這倆概念是人為加上的,引入這些概念的就是entropix采樣:
第一個注意力熵entropy:
理解語言模型中的熵
在語言模型的上下文中,熵衡量模型預(yù)測中的不確定性或隨機性。它量化了概率分布在可能的下一個 token 上的分散程度。
其中 pi是第 i 個 token 的概率。
較高的熵值表示模型對下一個 token 不確定,概率分布在許多選項上。相反,較低的熵表示模型更有信心,概率集中在較少的 token 上。
注意力熵方差 (Varentropy)
熵方差(Varentropy),或熵的方差,衡量了在單個位置上,不同可能的 token 之間的信息內(nèi)容(驚奇度)變化有多大。它提供了對模型不確定性和其對給定上下文的預(yù)測多樣性的洞察。
熵方差的計算涉及以下步驟:
步驟 1:計算概率和對數(shù)概率
使用 softmax 計算當(dāng)前位置上每個可能的 token 的概率,并計算它們的對數(shù)概率。
步驟 2:計算熵
計算當(dāng)前位置概率分布的熵。
步驟 3:計算熵方差
對于每個可能的 token,計算其信息內(nèi)容(負(fù)對數(shù)概率)與平均信息內(nèi)容(熵)之間的平方差。用它們的概率加權(quán)這些差異并將它們加總。
熵方差在識別模型正在考慮驚奇度水平非常不同的 token 的情況時特別有用。高熵方差可能表明上下文復(fù)雜或模糊,模型的預(yù)測更加多樣化或不確定。
在采樣決策中的意義
熵和熵方差的組合在 Entropix 的采樣策略中起著至關(guān)重要的作用。以下是它們?nèi)绾斡绊憶Q策過程:
- 低熵,低熵方差:表示高置信度和一致性。Entropix 在這些情況下可能會使用貪婪采樣。
- 高熵,低熵方差:表明一致的不確定性。這可能會觸發(fā)插入澄清(clarification insertion)或增加探索。
- 低熵,高熵方差:表示不同程度的置信度。Entropix 可能會采用探索采樣來調(diào)查不同的可能性。
- 高熵,高熵方差:代表高度不確定性和不一致性。這種情況通常會導(dǎo)致使用調(diào)整參數(shù)的高不確定性采樣。
在 Transformer 模型中,注意力通常以多頭注意力(multi-head attention)的形式實現(xiàn)。這意味著注意力機制并行應(yīng)用多次,允許模型同時關(guān)注輸入的各個不同方面。
Transformer 模型中的每個注意力頭計算一組注意力分?jǐn)?shù),確定在生成每個輸出 token 時,要將多少注意力放在輸入的不同部分。
注意力熵用于量化注意力在不同 token 上的不確定性或分散程度。
較高的注意力熵表示模型的注意力分散在許多 token 上,而較低的熵表示模型專注于少數(shù)特定的 token。
而如果分散在許多token上,也就是所謂的熵分散,代表模型此時根本不知道哪個token更合適
這個時候你比如temperature=0.0,你是選擇了一個所謂概率最高的,但是你其實也限制了模型探索的能力,這也是幻覺可能產(chǎn)生的開始
注意力一致性 (Agreement)
注意力一致性衡量不同注意力頭之間的注意力模式的一致程度。它通過將每個頭的注意力分布與平均注意力分布進行比較來計算
較低的一致性表明不同的頭正在關(guān)注輸入的各個不同方面,這可能表明上下文復(fù)雜或模糊。
這是第二個引入幻覺的可能性,因為上下文的理解不確認(rèn)
我們今天介紹的Entropix 使用這些基于注意力的指標(biāo)來指導(dǎo)其采樣決策。例如:
- 較高的注意力熵可能導(dǎo)致采樣中增加探索。
- 較低的注意力一致性可能導(dǎo)致溫度或 top-k 參數(shù)的調(diào)整。
所以大家基本就能看明白了,如果模型不確認(rèn)哪個token最優(yōu),那就增加一些探索的可能性,比如對上下文模糊,那就動態(tài)調(diào)整模型的配置參數(shù)
交互強度 (Interaction Strength)
交互強度定義為 Transformer 模型中所有層、頭和位置的注意力分?jǐn)?shù)的絕對值的平均值。在數(shù)學(xué)上,它可以表示為:
L代表層數(shù),H是注意力頭,N是序列長度,Alhji就是第l層第h頭種從位置i到位置j的注意力分?jǐn)?shù)
較高的交互強度值表示序列中 token 之間存在更強的關(guān)系
交互強度在 Entropix 的自適應(yīng)采樣過程中起著至關(guān)重要的作用。它影響采樣策略的幾個關(guān)鍵方面:
- 溫度調(diào)整:較高的交互強度可能導(dǎo)致溫度升高,當(dāng) token 之間連接緊密時,促進更多樣化的輸出。
- Top-k 參數(shù):交互強度用于動態(tài)調(diào)整 top-k 參數(shù),從而根據(jù) token 關(guān)系的強度允許更多或更少的候選 token。
- 探索與利用:在交互強度較高的場景中,采樣策略可能會傾向于更具探索性的行為,以捕獲 token 之間復(fù)雜的聯(lián)系。
說白了,我token之間交互強度高,證明我們之間的注意力更高,需要輸出更多元化,人話說就是更多探索路徑,來捕捉復(fù)雜的注意力
下面是entropix的完整采樣過程:
如上圖所示
數(shù)據(jù)流和決策過程
Entropix 系統(tǒng)在文本生成過程中遵循特定的流程:
步驟 1:Token 生成
語言模型處理輸入 token 并生成 logits 和注意力分?jǐn)?shù)。
步驟 2:指標(biāo)計算
指標(biāo)計算器基于模型輸出計算熵、熵方差、注意力熵、注意力一致性和交互強度。
步驟 3:策略選擇
自適應(yīng)采樣器分析計算出的指標(biāo),并選擇最合適的采樣策略。
步驟 4:參數(shù)調(diào)整
根據(jù)選擇的策略和指標(biāo),動態(tài)調(diào)整采樣參數(shù)(溫度、top-k、top-p、min-p)。
步驟 5:Token 采樣
應(yīng)用選擇的采樣策略來選擇下一個 token。
步驟 6:迭代
從步驟 1 開始重復(fù)該過程,并加入新生成的 token。
采樣策略
Entropix 采樣方法的核心是其策略選擇邏輯。該系統(tǒng)持續(xù)評估模型的輸出指標(biāo),并為每個 token 生成步驟選擇最合適的采樣方法。
自適應(yīng)采樣
當(dāng) logits 的熵和熵方差沒有落入極端類別時(與觸發(fā)專門采樣技術(shù)的場景不同),自適應(yīng)采樣策略就會啟動。它旨在平衡探索和利用,適應(yīng)當(dāng)前的上下文和模型狀態(tài)。
自適應(yīng)采樣過程
步驟 1:計算指標(biāo)
首先,模型的 logits 和注意力分?jǐn)?shù)中計算各種指標(biāo):
- Logits 熵和熵方差
- 注意力熵和熵方差
- 注意力一致性
- 交互強度
步驟 2:調(diào)整采樣參數(shù)
基于這些指標(biāo),動態(tài)調(diào)整采樣參數(shù):
- 溫度
- Top-p(核采樣閾值)
- Top-k
- 最小概率閾值 (min_p)
步驟 3:生成多個樣本
使用調(diào)整后的參數(shù)生成多個候選 token。樣本數(shù)量是可配置的,默認(rèn)為 12。(現(xiàn)在不是流行帶搜索的中間過程嗎,你可以理解為帶搜索的token生成)。
步驟 4:樣本評分
每個樣本都根據(jù)兩個因素評分:
- 來自模型 logits 的對數(shù)概率
- 從計算出的指標(biāo)導(dǎo)出的置信度分?jǐn)?shù)
步驟 5:選擇最佳樣本
得分最高的樣本被選為最終輸出 token。
生成多個樣本后,每個樣本都使用對數(shù)概率和置信度分?jǐn)?shù)的組合進行評分:
def score_sample(sample):
log_prob = jnp.sum(jax.nn.log_softmax(logits) * jax.nn.one_hot(sample, logits.shape[-1]))
confidence_score = (
(1 - metrics["logits_entropy"]) * 0.1 +
(1 - metrics["attn_entropy"]) * 0.2 +
(1 - metrics["logits_varentropy"]) * 0.3 +
(1 - metrics["attn_varentropy"]) * 0.4 +
metrics["agreement"] * 0.5 +
metrics["interaction_strength"] * 0.6
)
return log_prob + confidence_score
此評分函數(shù)平衡了 token 的可能性(log_prob)和從各種指標(biāo)導(dǎo)出的置信度度量。置信度分?jǐn)?shù)中每個組件的權(quán)重可以根據(jù)經(jīng)驗結(jié)果進行調(diào)整。
現(xiàn)在回到最開始我們說的集中情況來分析:
1-如果熵和熵方差都非常低時,模型對其預(yù)測非常有信心。在這種情況下,使用貪婪采樣,說白了模型知道它在干什么,它對自己的答案也足夠確認(rèn),那就選擇概率最高的,就是標(biāo)準(zhǔn)的logit。
2- 如果熵高,但是熵方差低,證明模型是不確定的,但是其不確定性是一致的,所以需要澄清,這個澄清就是以特殊token的形式。
如果插入了澄清token,那么下一個token就會動態(tài)調(diào)整temperature,用更高的溫度拿到更大的多樣性,來進行采樣,找到最合理的token!
其實某種程度上有點像李飛飛的S1的wait token。
3- 另外如果,模型熵很低,證明它很確認(rèn),但是熵的方差高,就證明它本身就看到了很多不同的可能性,那采樣的temperature就直接升高(基于交互強度指標(biāo))就可以了,top k當(dāng)然也順手就給升了。
4- 如果熵和熵方差都高,記憶是又不確定,又看到了好多的可能性,那就直接下猛藥,但是其實和3的請款一樣,也是升temperature,但是是基于熵方差的強度來調(diào)整temperature,而不是注意力一致性,另外此時因為熵升高,所以要降低top-p的參數(shù)來讓它收斂。
這就是entropix的思路,通過動態(tài)的采樣參數(shù)和澄清token來實現(xiàn)fitting化的采樣保證模型的輸出更合理化,更少幻覺,其實entropix的思路在OAI的o系列是有引入類似的概念的。
比如你們使用o系列api就會發(fā)現(xiàn)一個申請的問題,temperature和top p k都不允許設(shè)置
原因就是來自于這,所以大家理解了為什么temperature=0.0和有沒有幻覺并沒有本質(zhì)聯(lián)系的原因了嗎?
本文轉(zhuǎn)載自????熵減AI????,作者:周博洋
