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