【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数
1. 介紹
SimCSE(Simple Contrastive Learning of Sentence Embeddings)是一種簡單在沒有監(jiān)督訓(xùn)練數(shù)據(jù)的情況下訓(xùn)練句子向量的對比學(xué)習(xí)方法。
這個(gè)方法是對同一個(gè)句子進(jìn)行兩次編碼。由于在 Transformer 模型中使用了 dropout,兩個(gè)句子表征的位置將略有不同。這兩個(gè)表征之間的距離將被最小化,而同一批中其他句子的其他表征的距離將被最大化(它們作為反例):
- 目標(biāo)函數(shù) Multiple Negatives Ranking Loss:
其中,z和z’ 是兩個(gè)不同的dropout隨機(jī)掩碼。hizi,hizi′h_i^{z_i},h_i^{z'_i}hizi??,hizi′?? 是相同句子xix_ixi?輸入相同編碼器,但使用兩個(gè)不同的dropout隨機(jī)掩碼而得到的向量。
1.1 對比學(xué)習(xí)損失函數(shù)的性質(zhì)
直觀來說,上文對比學(xué)習(xí)的損失函數(shù)要求第i個(gè)樣本和它的另一個(gè)augmentation的副本(即正樣本)之間的相似度盡可能大,而與其他的實(shí)例(負(fù)樣本)之間的相似度 盡可能小。然而,很多的損失可以達(dá)到這個(gè)要求,例如下面的最簡單的形式 :
然而實(shí)際訓(xùn)練過程,采用上述的簡單形式作為損失函數(shù)效果非常不好,下面給出了使用contrastive loss(Eq1)和簡單損失(Eq2)的性能對比,溫度系數(shù)采用0.07:
上面的結(jié)果顯示,在所有數(shù)據(jù)集上Contrastive Loss要遠(yuǎn)遠(yuǎn)好于Simple Loss。不同于Simple Loss,Contrastive Loss是一個(gè)困難樣本自發(fā)現(xiàn)的損失函數(shù)。我們可以上述公式看到,Simple Loss對所有的負(fù)樣本相似度給予了相同權(quán)重的懲罰( 損失函數(shù)對所有的負(fù)樣本相似度的梯度都是相同的)。而Contrastive Loss則更會(huì)自動(dòng)的給距離更近相似度更高的負(fù)樣本更多的懲罰。這一點(diǎn)可以通過對比損失對不同負(fù)樣本的相似度的懲罰梯度的簡單計(jì)算來觀察:
對正樣本的梯度:
對負(fù)樣本的梯度:
其中:
對于所有的負(fù)樣本比較來說,PijP_{ij}Pij?的分母項(xiàng)都是相同的。那么 sijs_{ij}sij? 越大(也就是負(fù)樣本越相似),則 PijP_{ij}Pij? 的分子項(xiàng)越大,梯度項(xiàng)也越大。也就是說,對比損失給予了更相似(困難)的負(fù)樣本更大的遠(yuǎn)離該樣本的梯度。 可以把不同的負(fù)樣本想像成同極點(diǎn)電荷在不同距離處的受力情況,距離越近的點(diǎn)電荷受到的庫倫斥力更大,而距離越遠(yuǎn)的點(diǎn)電荷受到的斥力越小。對比損失也是這樣的。這種性質(zhì)更有 利于形成在超球面均勻分布的特征。
為了驗(yàn)證上面表格中對比損失和簡單損失的差距確實(shí)是因?yàn)閷Ρ葥p失具有困難樣本自發(fā)現(xiàn)的特性,我們用一種顯式的困難樣本挖掘算法用于簡單損失上。即選取最相似的4096個(gè)樣本作為負(fù)樣本,并用的簡單損失作為損失函數(shù),采用顯式困難樣本挖掘算法的簡單損失函數(shù)效果大大提升,遠(yuǎn)遠(yuǎn)超過了溫度系數(shù)取0.07時(shí)的對比損失。結(jié)果如下表所示:
1.2 對比學(xué)習(xí)溫度系數(shù)的作用
除了上面介紹的困難樣本自發(fā)現(xiàn)的性質(zhì)之外,觀察梯度公式,我們可以容易地發(fā)現(xiàn),損失函數(shù)對正樣本的梯度絕對值等于所有對負(fù)樣本的梯度值絕對值的和,即
給予這個(gè)觀察,作者定義了對第j個(gè)負(fù)樣本的一個(gè)相對懲罰強(qiáng)度:
如果我們將負(fù)樣本的相似度由大到小排序,形成一個(gè)順序統(tǒng)計(jì)量,那么溫度系數(shù)的大小將決定了分布的陡峭程度,如下圖所示是負(fù)樣本懲罰梯度在不同溫度系數(shù)下與相似度的關(guān)系:
當(dāng)溫度系數(shù)很小時(shí),例如藍(lán)色線0.07,隨著相似度的增大將懲罰梯度劇烈的增大。而當(dāng)溫度系數(shù)逐漸增大,概率分布逐漸接近均勻分布,例如圖中的綠色線。那么對相似度大的負(fù)樣本的關(guān)注度就變小很多了。
上面論證了溫度系數(shù)的作用,即溫度系數(shù)決定了對比損失對困難負(fù)樣本的關(guān)注程度,越大的溫度系數(shù),往往一視同仁,不會(huì)太過關(guān)注更困難的負(fù)樣本;而溫度系數(shù)越小,則越關(guān)注與該樣本相似度非常大的困難負(fù)樣本,給予困難負(fù)樣本更大的梯度與正樣本分離。
2. 實(shí)驗(yàn)效果
發(fā)現(xiàn)效果會(huì)比我之前介紹的CT要好
3. 實(shí)現(xiàn)
sentence_transformers已經(jīng)把SimCSE已經(jīng)封裝成pip包,完整的訓(xùn)練流程例子可以參考《Sentence-BERT》。我們在此基礎(chǔ)上只用修改loss就能輕松的訓(xùn)練SimCSE了:
from sentence_transformers import SentenceTransformer, InputExample from sentence_transformers import models, losses from torch.utils.data import DataLoader# ……train_loss = losses.MultipleNegativesRankingLoss(model)# 訓(xùn)練模型 model.fit(train_objectives=[(train_dataloader, train_loss)],epochs=1,show_progress_bar=True )4. 有監(jiān)督的訓(xùn)練
SimCSE也可以用于有監(jiān)督的數(shù)據(jù)上訓(xùn)練。我們構(gòu)造的有監(jiān)督數(shù)據(jù)形式為(xi,xi+,xi?)(x_i,x_i^+,x_i^-)(xi?,xi+?,xi??)。簡單來說,就是在訓(xùn)練時(shí)不只是把xi?x_i^-xi??視為負(fù)例,且把同batch其他句子的正負(fù)例都視為句子i的負(fù)例:
目標(biāo)函數(shù)為:
實(shí)驗(yàn)效果:
Why does it work?
知乎上有同學(xué)提問《為什么SimCSE的效果這么好呢?》
如題,為何通過兩次dropout、"自己預(yù)測自己"的這種方法效果會(huì)這么好呢?通過dropout添加噪聲不會(huì)改變原來句子的語義嗎?
作者在論文中也嘗試做了解答:
Table3 中嘗試不同的dropout rate,并觀察所有變體的表現(xiàn)都低于默認(rèn)值Transformers 的 dropout rate p = 0.1。可以發(fā)現(xiàn),當(dāng) p增加時(shí),的確可能會(huì)添加過多的“噪聲不會(huì)改變原來句子的語義”,導(dǎo)致表現(xiàn)變差。
此外,我們發(fā)現(xiàn)兩個(gè)極端情況特別有趣:
“no dropout”(p = 0)和“fixed 0.1”(使用默認(rèn)值 dropout p = 0.1,但該對的 dropout 掩碼相同)
在這兩種情況下,結(jié)果對的embedding完全相同,它導(dǎo)致性能急劇下降。我們在訓(xùn)練期間每 10 步檢查一次這些模型的checkpoints,并可視化對齊和均勻性(alignment and uniformity)
Alignment:positive pairs Feature 之間的對齊性(緊密性)。相似的樣本具有相似的特征
Uniformity:特征在歸一化后在超平面上的均勻性。保留最大信息
這兩個(gè)指標(biāo)與對比學(xué)習(xí)的目標(biāo)非常一致:正實(shí)例應(yīng)該保持接近,隨機(jī)實(shí)例的嵌入應(yīng)該分散在超球面上。
如上圖所示,清楚地表明,從預(yù)訓(xùn)練的checkpoint開始,所有
模型大大提高了均勻性。
然而兩個(gè)特殊變體的對齊性也急劇下降,而無監(jiān)督 SimCSE 保持穩(wěn)定對齊性,這要?dú)w功于 dropout 的使用噪音。
它還表明,從預(yù)訓(xùn)練的checkpoint開始是至關(guān)重要的,因?yàn)樗峁┝肆己玫某跏紝R性。最后,“刪除一個(gè)詞”改善了對齊方式但獲得了較小的增益在均勻性指標(biāo)上,最終表現(xiàn)不如無監(jiān)督 SimCSE。
總結(jié)
以上是生活随笔為你收集整理的【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AWS 服务器登录和配置
- 下一篇: 微信登入,获取用户信息