論文解讀:EMNLP 2021-SimCSE: Simple Contrastive Learning of Sentence Embeddings


論文
代碼

對於這篇經典論文的講解已經有很多,這里推薦兩個感覺講的很清楚的講解1講解2,相信看了這兩篇論文后對整體的內容已經大致清楚,但是對於SimCSE如何減少各向異性的證明可能還會比較模糊(公式太多了/(ㄒoㄒ)/~~)。因此本文將會這部分進行比較詳細的說明。參考自參考1參考2

各向異性說明

參考1中進行了很形象的說明,這里在重復一遍。

  • 各向異性:詞向量是有維度的,每個維度上基向量單位向量長度不一樣,就是各向異性的。這樣就會造成我們計算向量相似度的時候產生偏差,如下圖是舉例:

  • 上圖中,基向量是非正交(x,y),且各向異性(基向量單位向量長度不一樣),計算向量x1與x2的cos相似度為0,x1與x3的cos相似度為0(正交),但是我們從幾何角度上看,其實x1是與x3更相似的,所以導致計算相似度結果也會有問題。

琴生不等式(Jensen's Inequality)

  • 舉個很簡單的例子,如果一個凹函數,例如\(y=x^2\).和一個凸函數例如\(y=log(x)\)

上圖中,很顯然對於凹函數:\(\frac{f(x1)+f(x2)}{2}\ge f(\frac{x1+x2}{2})\),而對於凸函數正相反。將這個原理擴展到n個變量,就是琴生不等式。

alignment和uniformity

對比學習的目標是從數據中學習到一個優質的語義表示空間,那么如何評價這個表示空間的質量呢?在講解1講解2已經介紹了所采用的alignment和uniformity,即對齊和均勻性兩個標准。alignment計算距離正樣本間的距離,而uniformity計算向量整體分布的均勻程度。我們希望這兩個指標都盡可能低,也就是一方面希望正樣本要挨得足夠近,另一方面語義向量要盡可能地均勻分布在超球面上,因為均勻分布信息熵最高,分布越均勻則保留的信息越多,“拉近正樣本,推開負樣本”實際上就是在優化這兩個指標。

  • 對於alignment和uniformity分別可以用以下兩個函數進行定義。

\[\ell_{\text {align }} \triangleq \underset{\left(x, x^{+}\right) \sim p_{\text {pos }}}{\mathbb{E}}\left\|f(x)-f\left(x^{+}\right)\right\|^{2} \]

\[\ell_{\text {uniform }} \triangleq \log \underset{x, y \stackrel{i . i d}{\sim} p_{\text {data }}}{\mathbb{E}} \quad e^{-2\|f(x)-f(y)\|^{2}} \]

降低各向異性證明

  • 本文作者提出可以通過隨機采樣dropout mask來生成\({x^+_i}\),在標准的Transformer中,dropout mask被放置在全連接層和注意力求和操作上,由於dropout mask是隨機生成的,所以在訓練階段,將同一個樣本分兩次輸入到同一個編碼器中

    \(\begin{aligned} \ell_{i} &=-\log \frac{e^{\operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{i}^{(1)}\right) / \tau}}{\sum_{j=1}^{N} e^{\operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{j}^{(1)}\right) / \tau}} \\ &=-\log \left(e^{\operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{i}^{(1)}\right) / \tau}\right)+\log \sum_{j=1}^{N} e^{\operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{j}^{(1)}\right) / \tau} \\ &=-\frac{1}{\tau} \operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{i}^{(1)}\right)+\log \sum_{j=1}^{N} e^{\operatorname{sim}\left(\boldsymbol{h}_{i}^{(0)}, \boldsymbol{h}_{j}^{(1)}\right) / \tau} \end{aligned}\)

上式就是模型的訓練目標(損失函數),經過化簡(log與e抵消)可以得到上面的結果,上面的結果可以進一步進行如下變形。

  • 如上式,Wang and Isola (2020)證明了當負樣本數量趨於無窮大時,對比學習的訓練目標可以分別正比於如上兩個式子,漸近表示為下式,其中E代表的是求期望。

  • 其中第一項表示拉近正樣本,第二項表示推開負樣本,其中兩個f相乘代表着兩個向量之間的內積,那么內積越大就代表着距離越近。所以紅線框中的內容是代表的是與正樣本之間的距離,因此要足夠大(即兩個向量相近),同理藍色線框要足夠的小。借助Jensen不等式進一步推導第二項的下界,結果如下:

  • 我們只需把f(x)看作凸函數log(x)即可化解出結果。其中hi代表的是一個句向量,體現在矩陣中代表某一行。我們希望藍色框越小越好,那么兩個內積和一定越來越小

但是需要指出,其實\(h^T_i h_j\)位置並不對,但是只需最后可以用矩陣內積來表示即可。更詳細的內容可以看參考2

損失函數的改進

這是我在閱讀arxiv論文時發現的一篇文章,通過很簡單的加入高斯噪聲的方法,解決對比學習對增加batchsize不敏感的問題。

  • 目標:理論上在 unsup-SimCSE 中使用更大的批次以獲得更充分的樣本比較並避免過度擬合。但是,增加批量大小並不總是會帶來改進,反而會在批量大小超過閾值時導致性能下降。通過統計觀察,我們發現這可能是由於增加批量大小后引入了低置信度負對。為了緩解這個問題,我們在 InfoNCE 損失函數上引入了一種簡單的平滑策略,稱為高斯平滑 InfoNCE(GS-InfoNCE)。

  • 方法:作者認為這個原因是由於增加batchsize后加入了很多重復的樣本,而當這些樣本互為負樣本時(因為實際上的損失函數要對一個batchsize內的所有取平均值)會造成混亂(因為實際上是很相似的)。作者通過高斯噪聲的加入(相當於加入一個絕對負樣本),確保了即使有重復樣本的加入,也可以達到互相遠離的效果。

\[\ell_{i}=-\log \frac{e^{\operatorname{sim}\left(\mathbf{h}_{i}, \mathbf{h}_{i}^{+}\right) / \tau}}{\sum_{j=1}^{N} e^{\operatorname{sim}\left(\mathbf{h}_{j}, \mathbf{h}_{i}\right) / \tau}+\lambda \cdot \sum_{k=1}^{M} e^{\operatorname{sim}\left(\mathbf{g}_{k}, \mathbf{h}_{i}\right) / \tau}} \]

  • 代碼:

  • 結果顯示確實比原本的有所提高,由於實現比較簡單,可以供大家嘗試一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM