HSIC简介:一个有意思的判断相关性的思路
作者丨蘇劍林
單位丨追一科技
研究方向丨NLP,神經網絡
個人主頁丨kexue.fm
前段時間在機器之心看到這樣的一個推送徹底解決梯度爆炸問題,新方法不用反向傳播也能訓練 ResNet,當然,媒體的標題黨作風我們暫且無視,主要看內容即可。機器之心的這篇文章,介紹的是論文 The HSIC Bottleneck: Deep Learning without Back-Propagation?的成果,里邊提出了一種通過 HSIC Bottleneck 來訓練神經網絡的算法。?
論文鏈接:https://arxiv.org/pdf/1908.01580.pdf
坦白說,這篇論文筆者還沒有看明白,因為對筆者來說里邊的新概念有點多了。不過論文中的“HSIC”這個概念引起了筆者的興趣。經過學習,終于基本地理解了這個 HSIC 的含義和來龍去脈,于是就有了本文,試圖給出 HSIC 的一個盡可能通俗(但可能不嚴謹)的理解。
背景
HSIC 全稱“Hilbert-Schmidt independence criterion”,中文可以叫做“希爾伯特-施密特獨立性指標”吧,跟互信息一樣,它也可以用來衡量兩個變量之間的獨立性。?
度量相關
我們知道,互信息的基本形式是:
如果 I(X,Y)=0 那么就說明 p(x,y)≡p(x)p(y),也就是兩個變量是相互獨立的,否則是相關的。但這一項意味著我們要用某種方式對概率密度進行估計。
HSIC 的作用跟互信息類似,但是跟互信息不一樣的是,它不需要估計兩個變量的概率密度,而是直接轉化為采樣的形式。
長期關注筆者文章的讀者都知道,“互信息”是在筆者文章中經常出現的概念,我們可以用互信息做新詞發現(比如《基于切分的新詞發現》[1]),也可以用互信息做無監督學習(比如
問題定義
一般來說,我們將問題定義為:?
有數據 (x1, y1), (x2, y2), … , (xn, yn) ~ p(x, y) ,判斷 p(x, y) 是否恒等于 p(x), p(y),即 x, y 是否獨立。?
嚴格來講,如果是對于連續變量,這里的“恒等于”指的是“幾乎處處等于”,但我們這里不嚴格聲明這一點。為了描述的規范,這里設 x∈X , y∈Y ,而 f(x), g(y)∈R。注意 x, y 可能是兩個含義完全不一樣的變量,比如 x 可能是“星期一”, y 可能是“上班”,p(x, y) 就是“今天是星期一,且今天要上班”的概率。鑒于此, X , Y 可能是兩個完全不一樣的域。?
基本的思路是去計算互信息 (1) ,但很多問題中我們都無法很好地估計概率或概率密度。一種可能的方案是轉化為對偶問題,用類似對抗的思路去學習互信息(
HSIC 就是沖著這個目標而來的。
HSIC
這里我們盡可能清晰地引入 HSIC 的概念。然而,“盡可能清晰”不等價于篇幅盡可能短,事實上,下面的篇幅依然會比較長,而且有不少數學公式,但是相對于標準教程里邊一上來就引入希爾伯特空間、再生核、各種算子等做法,這里的介紹應該算是對很多不了解相關概念的讀者來說都是友好的了。?
基本思想
HSIC 留意到:
p(x,y)≡p(x)p(y) 當且僅當對于任意的 f,g,下式都等于 0:
這個結論顯然不難理解。有意思的是,等號右邊是采樣的形式,也就是說我們將這個指標轉化為了采樣的形式,避免了直接估算概率密度。
這樣一來,我們就有一個判斷獨立性的方法:選取“足夠多”的 f,g,然后計算:
看與 0 的接近程度;反過來,如果在優化問題中,我們希望特征 x,y 盡可能相互獨立,那么我們就可以將加入到損失函數中。?
抽絲剝繭
其實的形式已經很好地體現了 HSIC 的判別思想。下面我們就沿著這個思路,繼續抽絲剝繭,逐步地走向 HSIC 最終的形式。
首先我們把算一算:
然后我們用一個技巧:我們知道,說明了這個期望值的結果跟隨機變量的記號沒啥關系。所以我們有:
把其余的項都這樣變換,最終我們就可以得到:
這樣一來,每一項都是 f(x1)f(x2)g(x1)g(x2) 的期望,只不過變量的采樣分布不一樣。
特征函數
現在的問題是:要選擇哪些 f, g 呢?怎樣才算“足夠多”呢??
類比向量空間的知識,所有可能的 f(x) 能組成一個向量空間 F,所有的 g(y) 也一樣組成一個向量空間 G 。如果能把這兩個空間的所有“基底”都遍歷一遍,那肯定就夠了。那問題就是:如何找到所有的基底呢??
這時候“核函數”就登場了。所謂核函數,那就是——呃,其實說起來很復雜,我也不大懂。簡單來說,核函數是類似于線性代數中“正定矩陣”的存在,就是一個定義在 X × X 的二元對稱函數 K(x1, x2) = K(x2, x1) ,然后我們把一元函數 f(x) 類比為一個向量,那么:
就相當于一個矩陣乘以向量的矩陣運算。跟矩陣的特征值和特征向量一樣,核函數也能定義特征值和特征函數,滿足下述恒等式的一元函數 ψ 就稱為這個核函數的特征函數:
上面的內容都是鋪墊的,其嚴格定義則是屬于“再生核希爾伯特空間“范疇。后面我們用到的,實際上是兩點性質:
1. 核函數的所有特征函數 ψ1,ψ2,…,構成該空間的一組正交基;
2. 核函數的所有特征值 α1,α2,…都是正的,且滿足:
HSIC登場
經過上述鋪墊,HSIC 基本上就可以登場了:
首先,假如我們已經有定義在 X×X 的核函數,那么我們就可以算出對應的特征值 α1,α2,… 和特征函數 ψ1,ψ2,…;同樣地,有了定義在 Y×Y 的核函數后,也可以算出對應的特征值 β1,β2,…和特征函數 ?1,?2,…。
然后,因為特征函數構成了基底,所以在 (3) 中,我們可以把 f,g 換成對應特征函數 ψi,?j。
因為所有的特征值都是正的,所以我們還可以用特征值為權重進行加權求和,而不改變的作用:
現在我們把 (6) 代入到上面去,就得到:
最后,再利用等式 (9),方括號里邊的實際上就是,于是,HSIC 就登場了:
這就是我們最重要尋找的度量相關性的指標,它純粹是采樣的形式,而且 KX,KY 都是事先給定的、通常是可微的,因此這就是一個可以明確采樣計算、可以直接優化的指標!
在實際計算中,我們可選的核函數有很多,比較常用的是:
其中 σ>0 是一個常數,本文開頭提到的論文 The HSIC Bottleneck: Deep Learning without Back-Propagation 也是用這個核函數。不同的核函數效果有點不一樣,但是都能保證 HSIC(X,Y)=0?p(x,y)≡p(x)p(y) 。
矩陣形式
最后,我們來推導一下 (13) 在有限樣本下的矩陣形式。
按照采樣求期望的思想,實際上就是對所有的樣本對 (xi,yi) 的結果求平均,而其實就是將這個平均操作做兩次,所以:
其中實際上都是 n×n 的對稱矩陣,分別記為,那么上述運算可以寫成矩陣乘法,其中 Tr 表示矩陣的跡。基于同樣的思想,第二項實際上就是“所有元素的平均乘以所有元素的平均”,如果非要寫成矩陣形式的話,那就是,其中加粗的 1 表示大小為 n×n 的全 1 矩陣。相應地,最后一項“所有元素平均值的 1/n 的兩倍”,即。
所以,如果用矩陣形式表示 HSIC,那就是:
這里的 J=I?1/n,而 I 是 n 階單位矩陣。跟《簡述無偏估計和有偏估計》[2] 一文討論的類似,這其實是一個有偏估計,而將前面的 1/n 換成 1/(n?1),就得到無偏估計:
這就是最終的矩陣形式的 HSIC 公式(注意 J 里邊的 1/n 不用換成 1/(n?1))。
其它
這里先給出一個參考實現,并做一個簡單的實驗,來驗證 HSIC 的有效性,然后在后一節中,我們思考一下 HSIC 可能存在的問題。?
參考實現
假如已知核矩陣的情況下,HSIC 的計算實現參考如下:
import?numpy?as?npdef?hsic(Kx,?Ky):Kxy?=?np.dot(Kx,?Ky)n?=?Kxy.shape[0]h?=?np.trace(Kxy)?/?n**2?+?np.mean(Kx)?*?np.mean(Ky)?-?2?*?np.mean(Kxy)?/?nreturn?h?*?n**2?/?(n?-?1)**2注意這里的實現是根據 (13) 每一項的含義來的,并非根據矩陣形式 (17),事實上矩陣形式 (17) 效率并不高(涉及到三次矩陣乘法)。下面做一個簡單的實驗,驗證 HSIC 的有效性:
#?產生兩組獨立無關的隨機變量 x?=?np.random.randn(1000) y?=?np.random.randn(1000)Kx?=?np.expand_dims(x,?0)?-?np.expand_dims(x,?1) Kx?=?np.exp(-?Kx**2)?#?計算核矩陣Ky?=?np.expand_dims(y,?0)?-?np.expand_dims(y,?1) Ky?=?np.exp(-?Ky**2)?#?計算核矩陣print(hsic(Kx,?Ky))?#?計算HSIC輸出結果大概是 0.0002 左右,如果將 x,y 改為:
x?=?np.random.randn(1000) y?=?x?+?0.1?*?np.random.randn(1000)這意味著 x,y 有比較強的相關性,而 HSIC 的結果也表明了這一點,約等于 0.096,比 0.0002 大了兩個數量級以上,這表明了 HSIC 確實是有效的(注意,HSIC的輸出值一般只有相對比較的意義,其絕對值沒有明顯含義) 。
個人思考
顯然,由 (13) 給出的 HSIC 的計算結果取決于核函數的選擇。不管用哪個核函數,理論上都可以保證:
但問題是,當 HSIC(X,Y)>0 時,X,Y 究竟有多相關呢?
這就相當依賴核函數選擇和原始問題的背景了。從常用核函數 (14) 的形式我們大概可以感知到,核函數相當于兩個樣本之間的相似度,問題是什么樣的相似度定義才是真正符合問題背景的,這并沒有標準答案,而且通常都是很困難的問題。
舉個例子,假如 x1,x2,x3 分別代表三張圖片,我們知道 ‖x1?x2‖2=0 的話意味著 x1,x2 這兩張圖片完全一樣,但是當 ‖x1?x2‖2,‖x1?x3‖2 都不等于 0 時,我們不能因為 ‖x1?x2‖2<‖x1?x3‖2 就說圖片 x2 一定比圖片 x3“看起來”更像 x1,因為范數 ‖?‖2 不是我們視覺的一個完美的度量。
其實筆者認為這是所有核方法的通病,即核方法只能保證當某個指標等于 0 時就是我們的理想追求,但是當這個指標不等于 0 時,這個指標無法很好地度量我們跟理想的差距。良好的度量是要根據具體問題精心設計的,或者根據數據集通過類似 GAN 的方法自動把這個度量學習出來。
當然,也不能就此說 HSIC 就沒有價值了,HSIC 的價值在于它可以作為輔助目標來優化,就好比我們要訓練一個圖片自編碼器,就算我們用 GAN 的思想,我們也通常會把原圖片和重構圖片的 MSE 作為輔助 loss 來使用。
總結
總的來說,本文以一種較為通俗直白的方法介紹了 HSIC 這個概念,介紹過程中涉及到了一些數學內容,但省去了嚴格的數學定義和論述,盡量只保持了比較核心的部分,私以為這種處理會使得讀者更容易接受一些。對于追求嚴謹的讀者,請多多包涵。
相關鏈接
[1]?https://kexue.fm/archives/3913[2]?https://kexue.fm/archives/6747
點擊以下標題查看作者其他文章:?
基于DGCNN和概率圖的輕量級信息抽取模型
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
??來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
?
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結
以上是生活随笔為你收集整理的HSIC简介:一个有意思的判断相关性的思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发银行天添盈1号和2号的区别
- 下一篇: 微粒贷在哪里找