最小熵原理(四):“物以類聚”之從圖書館到詞向量

本篇我們介紹圖書館裏邊的套路。

先拋出一個問題:詞向量出現在什麼時候?是2013年Mikolov的Word2Vec?還是是2003年Bengio大神的神經語言模型?都不是,其實詞向量可以追溯到千年以前,在那古老的圖書館中...

 

圖書館一角(圖片來源於百度搜索)

圖書館一角(圖片來源於百度搜索)

 

走進圖書館 #

圖書館裏有詞向量?還是千年以前?在哪本書?我去借來看看。

放書的套路 #

其實不是哪本書,而是放書的套路。

很明顯,圖書館中書的擺放是有“套路”的:它們不是隨機擺放的,而是分門別類地放置的,比如數學類放一個區,文學類放一個區,計算機類也放一個區;同一個類也有很多子類,比如數學類中,數學分析放一個子區,代數放一個子區,幾何放一個子區,等等。讀者是否思考過,爲什麼要這麼分類放置?分類放置有什麼好處?跟最小熵又有什麼關係?

有的讀者可能覺得很簡單:不就是爲了便於查找嗎?這個答案其實不大準確。如果只是爲了方便找書,那很簡單,只要在數據庫上記錄好每一本書的座標,然後在地面上也註明當前座標,這樣需要借哪本書,在數據庫一查座標,然後就可以去找到那本書了,整個過程不需要用到“圖書分類”這一點。所以,如果單純考慮找書的難易程度,是無法很好的解釋這個現象。

省力地借書 #

其實原因的核心在於:我們通常不只是借一本書。

前面說了,只要建好索引,在圖書館裏找一本書是不難的,問題是:如果找兩本呢?一般情況下,每個人的興趣和研究是比較集中的,因此,如果我要到圖書館借兩本書,那麼可以合理地假設你要借的這兩本書是相近的,比如借了一本《神經網絡》,那麼再借一本《深度學習》的概率是挺大的,但再借一本《紅樓夢》的概率就很小了。藉助於數據庫,我可以很快找到《神經網絡》,那麼《深度學習》呢?如果這本書在附近,那麼我只需要再走幾步就可以找到它了,如果圖書是隨機打亂放置的,我可能要從東南角走到西北角,才找到我想要的另一本書《深度學習》,再多借幾本,我不是要在圖書館裏跑幾圈我才能借齊我要的書?

這樣一來,圖書分類的作用就很明顯了。圖書分類就是把相近的書放在一起,而每個人同一次要借的書也會相近的,所以圖書分類會讓大多數人的找書、借書過程更加省力!這又是一個“偷懶攻略”。也就是說,將我們要處理的東西分類放好,相近的放在一起,這也是滿足最小熵原理的。生活中我們會將常用的東西分類放在觸手可及的地方,也是基於同樣的原理。

圖書館規劃 #

下面我們再來從數學角度,更仔細地考察這個過程。

簡化的借書模型 #

假如我們到圖書館去借兩本書,分別記爲i,ji,j,假設借第一本書的成本是d(i)d(i),兩本書之間的成本函數爲d(i,j)d(i,j),這也就是說,找到第一本書ii後,我就要再花d(i,j)d(i,j)那麼多力氣才能找到第二本書jj。我們可以考慮這個過程對所有人的平均,即

S=∑i,jp(i)p(j|i)[d(i)+d(i,j)]=∑i,jp(i,j)[d(i)+d(i,j)](1)(1)S=∑i,jp(i)p(j|i)[d(i)+d(i,j)]=∑i,jp(i,j)[d(i)+d(i,j)]

其中p(i)p(i)ii這本書被借的概率,p(j|i)p(j|i)就是借了ii之後還會再借jj的概率。圖書館的要把書放好,那麼就要使得SS最小化。

 

現在我們以圖書館入口爲原點,在圖書館建立一個三維座標系,那麼每本書的位置都可以用一個向量vv來表示,不失一般性,我們可以簡單考慮d(i)d(i)爲這本書到圖書館原點的歐氏距離,d(i,j)d(i,j)爲兩本書的歐氏距離,那麼SS的表達式變爲:

S=∑i,jp(i)p(j|i)[‖vi‖+‖vi−vj‖]=∑i,jp(i,j)[‖vi‖+‖vi−vj‖](2)(2)S=∑i,jp(i)p(j|i)[‖vi‖+‖vi−vj‖]=∑i,jp(i,j)[‖vi‖+‖vi−vj‖]

讓我們再來解釋一下各項的含義,其中(i,j)(i,j)代表着一種借書習慣,即借了書ii還借書jjp(i,j)p(i,j)代表着這種借書習慣出現的概率,實際生活中可以通過圖書館的借書記錄去估算它;vi‖+‖vi−vj‖‖vi‖+‖vi−vj‖則代表着先借ii再借jj的總成本。其中vi‖‖vi‖這一項要儘量小,意味着我們要將熱門的書放在靠近出口(原點)的地方;而vi−vj‖‖vi−vj‖要儘量小,則告訴我們要把相近的書放在一起。

約束優化規劃 #

假如我們拿到了圖書館的借書記錄,也就是說已知p(i,j)p(i,j)了,那麼是不是可以通過最小化(2)(2)來得到圖書館的“最佳排書方案”了呢?思想對了,但還不完整,因爲很顯然式(2)(2)的最小值是0,只需要讓所有的vv都等於0,也就是說,所有的書都擠在出口的位置。

顯然這是不可能的,因爲實際上書不是無窮小的,兩本書之間有一個最小間距dmin>0dmin>0,所以完整的提法應該是:

S=minv∑i,jp(i)p(j|i)[‖vi‖+‖vi−vj‖]=∑i,jp(i,j)[‖vi‖+‖vi−vj‖]s.t.∀i≠j,‖vi−vj‖≥dmin(3)(3)S=minv∑i,jp(i)p(j|i)[‖vi‖+‖vi−vj‖]=∑i,jp(i,j)[‖vi‖+‖vi−vj‖]s.t.∀i≠j,‖vi−vj‖≥dmin

也就是說,這是一個帶約束的極值問題,解決了這個問題,我們就可以得到圖書館對圖書的最合理安排了(理論上)。當然,如果真的去給圖書館做規劃,我們還要根據圖書館的實際情況引入更多的約束,比如圖書館的形狀、過道的設置等,但(3)(3)已經不妨礙我們理解其中的根本思想了。

 

一般成本最小化 #

現在我們再將問題一般化,從更抽象的視角來觀察問題,能得到更深刻的認識。

均勻化與去約束 #

我們先將成本函數vi‖+‖vi−vj‖‖vi‖+‖vi−vj‖代換爲一般的f(vi,vj)f(vi,vj),即考慮

S=∑i,jp(i)p(j|i)f(vi,vj)=∑i,jp(i,j)f(vi,vj)(4)(4)S=∑i,jp(i)p(j|i)f(vi,vj)=∑i,jp(i,j)f(vi,vj)

同時vv可以不再侷限爲3維向量,可以是一般的nn維向量。我們依舊是希望成本最低,但是我們不喜歡諸如vi−vj‖≥dmin‖vi−vj‖≥dmin的約束條件,因爲帶約束的優化問題往往不容易求解,所以如果能把這個約束直接體現在ff的選擇中,那麼就是一個漂亮的“去約束”方案了。

 

怎麼實現這個目的呢?回到圖書館的問題上,如果沒有約束的話,理論最優解就是把所有圖書都擠在出口的位置,爲了防止這個不合理的解的出現,我們加了個約束“兩本書之間有一個最小間距dmin>0dmin>0”,防止瞭解的坍縮。其實有很多其他約束可以考慮,比如可以要求所有圖書必須儘量均勻地放滿圖書館,在這個希望之下,也能夠得到合理的解

“儘量均勻”其實可以理解爲某種歸一化約束,因爲歸一,所以不能全部集中在一點,因爲只有一點就不歸一了。“歸一”啓發我們可以往概率的方向想,也就是說,先構造概率分佈,然後作爲成本函數的度量。在這裏就不做太多牽強的引導了,直接給出其中一個選擇:

f(vi,vj)=−loge−‖‖vi−vj‖‖2Zi,Zi=∑je−‖‖vi−vj‖‖2(5)(5)f(vi,vj)=−log⁡e−‖vi−vj‖2Zi,Zi=∑je−‖vi−vj‖2

最小熵=最大似然 #

讓我們來分步理解一下這個式子。首先如果不看分母ZiZi,那麼結果就是

−log(e−‖‖vi−vj‖‖2)=‖‖vi−vj‖‖2(6)(6)−log⁡(e−‖vi−vj‖2)=‖vi−vj‖2

也就是說,這個ff相當於成本函數爲‖‖vi−vj‖‖2‖vi−vj‖2。然後,由於分母的存在,我們知道
∑je−‖‖vi−vj‖‖2Zi=1(7)(7)∑je−‖vi−vj‖2Zi=1

所以e−‖‖vi−vj‖‖2/Zie−‖vi−vj‖2/Zi實際上定義了一個待定的條件概率分佈q(j|i)q(j|i),說白了,這實際上就是對−‖‖vi−vj‖‖2−‖vi−vj‖2的一個softmax操作,而此時(4)(4)實際上就是:
S=−∑i,jp(i)p(j|i)logq(j|i)(8)(8)S=−∑i,jp(i)p(j|i)log⁡q(j|i)

對於固定的ii而言,最小化上式這不就是相當於最大對數似然了嗎?所以結果就是q(j|i)q(j|i)會盡量接近p(j|i)p(j|i),從而全部取0不一定就是最優解的,因爲全部取0對應着均勻分佈,而真實的p(j|i)p(j|i)卻不一定是均勻分佈。

 

現在再來想想,我們從最小成本的思想出發,設計了一個具有概率的負對數形式的f(vi,vj)f(vi,vj),然後發現最後的結果是最大似然。這個結果可以說是意料之外、情理之中,因爲−logq(j|i)−log⁡q(j|i)的含義就是熵,我們說要最大似然,就是要最小化式(8)(8),其含義就是最小熵了。最大似然跟最小熵其實具有相同的含義。

Word2Vec #

只要稍微將對象一轉變,Word2Vec就出來了,甚至everything2vec~

多樣的度量 #

純粹形式地看,式(5)(5)的選擇雖然很直觀,但並不是唯一的,可取的選擇還有

f(vi,vj)=−loge〈vi,vj〉Zi,Zi=∑je〈vi,vj〉(9)(9)f(vi,vj)=−log⁡e〈vi,vj〉Zi,Zi=∑je〈vi,vj〉

這以內積爲距離度量,希望相近的對象內積越小越好。

 

Skip Gram #

事實上,如果i,ji,j分別代表句子窗口裏邊的一個詞,那麼式(9)(9)就對應了著名的詞向量模型——Word2Vec的Skip Gram模型了,也就是說,最小化

S=−∑i,jp(i)p(j|i)loge〈vi,vj〉Zi=−∑i,jp(i,j)loge〈vi,vj〉Zi(10)(10)S=−∑i,jp(i)p(j|i)log⁡e〈vi,vj〉Zi=−∑i,jp(i,j)log⁡e〈vi,vj〉Zi

這正好是Word2Vec的Skip Gram模型的優化目標。

 

注:Word2Vec實際上對上下文向量和中心詞向量做了區分,也就是用了兩套詞向量,但這裏爲了直觀理解其中的思想,我們就不區別這一點。

原理類比分析 #

等等,怎麼突然就出來詞向量了??

我們再重新捋一下思路:是這樣的,我們把每個詞當作一本書,每個句子都可以看成每個人的“借書記錄”,這樣我們就能知道哪兩本“書”經常被一起借了是吧?按照我們前面討論了一大通的圖書館最佳放書方案,我們就可以把“書”的最佳位置找出來,理論上用(3),(5)(3),(5)(9)(9)都可以,這就是詞向量了~如果用式(9)(9),就是Word2Vec了。

反過來,找出一個最佳放書方案也就簡單了,把圖書館的每個人的借書記錄都當成一個句子,每本書當成一個詞,設置詞向量維度爲3,送入Word2Vec訓練一下,出來的詞向量,就是最佳放書方案了。

那些doc2vec、node2vec、everything2vec,基本上都是這樣做的。

所以,開始的問題就很清晰了:將圖書館的每本書的三維座標記錄下來,這不就是一個實實在在的“book embedding”?相近的書的向量也相近呀,跟詞向量的特性完美對應~所以,自從有了圖書館,就有了embedding,儘管那時候還沒有座標系,當然也沒有計算機。

再來看看t-SNE #

有了“借書記錄”,也就是p(j|i),p(i)p(j|i),p(i),我們就可以照搬上述過程,得到一個“最佳位置規劃”,這就是向量化的過程。

如果沒有呢?

SNE #

那就造一個出來呀!比如我們已經有了一堆高維樣本x1,x2,…,xNx1,x2,…,xN,它們可以是一堆圖像數據集,我們想要得到一個低維表示z1,z2,…,zNz1,z2,…,zN。我們構造一個

p(xj|xi)=e−‖xi−xj‖2/2σ2∑jj≠ie−‖xi−xj‖2/2σ2(11)(11)p(xj|xi)=e−‖xi−xj‖2/2σ2∑jj≠ie−‖xi−xj‖2/2σ2

然後還是用式(5)(5)作爲成本函數(假設p(i)p(i)是常數,即均勻分佈,同時求和不對自身進行),去優化(4)(4),即
S=−∑i,ji≠jp(xj|xi)logq(j|i),q(j|i)=e−‖‖vi−vj‖‖2∑jj≠ie−‖‖vi−vj‖‖2(12)(12)S=−∑i,ji≠jp(xj|xi)log⁡q(j|i),q(j|i)=e−‖vi−vj‖2∑jj≠ie−‖vi−vj‖2

這便是稱爲SNE的降維方法了。

 

一般來說它還有一些變種,我們就不細摳了,這也不是本文的重點,我們只需要理解基本思想。SNE本質上就是儘量保持相對距離的一種降維方案。因爲它保持的是相對距離,保持了基本的形狀不變,所以降維效果比PCA等方法要好。原因是PCA等方法僅僅保留主成分,只適用於比較規則的數據(比如具有中心聚攏特性、各向同性的),SNE的思想可以適用於任意連通形狀。

t-SNE #

前面說得SNE已經體現出降維思想了。但是它會有一些問題,主要的就是“Crowding問題”。這個“Crowding問題”,簡單來看,就是因爲低維分佈(5)(5)也是距離的負指數形式,負指數的問題就是在遠處迅速衰減到0,而(5)(5)中的vv是我們要求解的目標,這樣一來優化結果是所有的點幾乎都擁擠(Crowding)在某處附近(因爲指數衰減,距離較遠的點幾乎不會出現),效果就不夠好了。

爲了解決這個問題,我們可以把式(5)(5)換成衰減沒那麼快的函數,比如說簡單的分式:

f(vi,vj)=−log(1+‖‖vi−vj‖‖2)−1Zi,Zi=∑jj≠i(1+‖‖vi−vj‖‖2)−1(13)(13)f(vi,vj)=−log⁡(1+‖vi−vj‖2)−1Zi,Zi=∑jj≠i(1+‖vi−vj‖2)−1

這稱爲t分佈。式(13)(13)、式(11)(11)和式(4)(4)結合,就是稱爲t-SNE的降維方法,相比SNE,它改善了Crowding問題。

 

當然,t-SNE與SNE的差別,其實已經不是本文的重點了,本文的重點是揭示SNE這類降維算法與Word2Vec的異曲同工之處。

雖然在深度學習中,我們直接用t-SNE這類降維手段的場景並不多,哪怕降維、聚類都有很多更漂亮的方案了,比如降維可以看這篇《深度學習的互信息:無監督提取特徵》、聚類可以看這個《變分自編碼器(四):一步到位的聚類方案》。但是t-SNE的本質思想在很多場景都有體現,所以挖掘並體味其中的原理,並與其它知識點聯繫起來,融匯成自己的知識體系,是一件值得去做的事情。

本文總結 #

本文基於最小成本的思想,構建了一個比較理想化的模型來分析圖書館的圖書安排原理,進而聯繫到了最小熵原理,並且思考了它跟Word2Vec、t-SNE之間的聯繫。就這樣,又構成了最小熵原理的一個個鮮活例子:物以類聚、分門別類,都能降低成本。比如我們現在可以理解爲什麼預訓練詞向量能夠加快NLP任務的收斂、有時還能提升最終效果了,因爲詞向量事先將詞擺在了適合的位置,它的構造原理本身就是爲了降低成本呀。

同時,將很多看似沒有關聯的東西聯繫在一起,能夠相互促進各自的理解,達到儘可能融會貫通的效果,其妙不言而喻~

轉載到請包括本文地址:https://spaces.ac.cn/archives/6191

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章