1. 程式人生 > >詳細解讀Completely Heterogeneous Transfer Learning with Attention - What And What Not To Transfer

詳細解讀Completely Heterogeneous Transfer Learning with Attention - What And What Not To Transfer

 

 

         本人現在是電子科技大學2018級準研究生,大四來老闆實驗室打了幾個月的工,最近一直在跑程式碼,一跑幾天,閒來無事寫幾篇部落格總結下學到的東西。因為老闆希望我做遷移所以一直都在學遷移的東西,尤其是針對zero shot問題。之前在網上找各種關於遷移學習的資料都蠻痛苦的。所以現在總結一波,方便後來人參考。博主後續還會更新幾篇關於遷移學習以及zero shot的部落格,希望各位同學可以持續關注。因為第一次寫部落格,廢話多了些,還望多多包涵。好了,下面開始正題:

        這篇論文叫做Completely Heterogeneous Transfer Learning with Attention - What And What Not To Transfer,論文的作者來自Carnegie Mellon University,然後這論文發在了IJCAI2017上面。而這篇文章是在其之前發的文章上的改進,大家感興趣的話可以去搜一下Proactive transfer learning for heterogeneous feature and label spaces,那麼在其之前發的這篇論文中提出了一個模型叫做CHTL(Completely Heterogeneous Transfer Learning)接下來我們會詳細講,然後今天要講的這篇論文是在原有的模型上加入了attention機制,大家可能也發現了attention機制最近大家用的還是蠻多的而且效果確實都有改善。

         首先解釋下Completely Heterogeneous Transfer Learning(CHTL),其意思就是完全異質的遷移學習,那麼什麼交完全異質呢,其實大家原來接觸的大多遷移都是比如我學習到了如何區分貓和狗,然後我要利用這個學到的知識遷移到識別老虎的任務中,大家會發現雖然我們在訓練的時候沒有涉及到老虎但是貓和狗在特徵分佈上和老虎還是類似的,也就是說雖然sourse和target的標籤空間是不重合的,但是他們的特徵空間是重合的,即使不重合也有一些顯式的聯絡。而完全異質的遷移涉及到的sourse和target的標籤空間和特徵空間都是不重合的。舉個例子來講就是我在英文文字上學習到的知識,我沒有去遷移到其他的未見的英文文字上而是把這些知識用來了法語文字的相關任務中。

        好了,搞清楚任務是什麼。我們接下來看下模型。文章中的任務是自然語言文字分類,先放模型的整體框架上來:

我們可以看到左下方的源資料集中的是關於政治或者藥物的英文文字,然後右下角的目標資料集中的是關於政府和運動的文字所以它們的標籤空間不重合,然後要注意的目標資料集中文字不是英文文字而是法語,義大利語等文字。也就是說他們的特徵空間也是不重合的。那麼首先源資料集中 通過一個對映g,目標資料集通過一個對映h投影到一個共同的連線子空間上,具體來講就是Word2vet。Word2vet是我們這個領域在處理文字資料的一種常見的行為,Word2vet又有一些常用的方法本文采用的是skip-gram方法。我們大家都知道我們的神經網路沒有辦法去很好地直接地處理這些文字資訊,而且這些文字相對來說維度比較低,所以更好的選擇就是將其轉化為向量,當然轉化工程也要遵循一定的規則,就是在未轉化前兩個單詞在語義上是比較近的那麼在轉化為向量後也要求二者的距離比較近。我之前看過一篇部落格對Word2vet做了很詳細的介紹但是很可惜沒有收藏,一時也找不到後面找到了再推薦給大家吧。那麼本文中做Word2vet除了是為了方便處理的基礎上更重要的是可以減少兩個資料集直接的特徵差異(畢竟一個英文一個非英文)然後我們通過一個共同的對映f將二者投影到我們的標籤空間中便完成了文字分類問題。

        好了看到這裡是不是覺得很簡單,事實上卻是也比較簡單,但是後續還有模型的優化部分。不過我們在介紹優化部分之前還是把這簡單的模型公式化的展示一下。其目標函式如下:

我們可以看到損失函式由兩個部分構成分別是源資料集上的loss和目標資料集上的loss。然後我們仔細一看,發現問題並不簡單,說好的遷移呢。為毛還有目標資料集的訓練,博主欺負我讀書少。然鵝事實是我們源資料集是完全標記的,然後我們的目標資料集的標記率是很低的,然後我們可以通過後續的實驗我們發現這篇文章中的資料集中目標資料集的標記率是0.1,而在訓練的過程中正是用的這一小部分的資料來訓練的,是不是感覺0.1的標記率有點低,然而還有更低的比如one shot問題和zero shot問題不過這些極端問題一般需要一些先驗知識作為輔助工具。正是因為有標記的資料需要大量的人力物力來收集,才催生了遷移學習這個領域。本人也當過苦力標記影象資料,簡直不要太辛苦枯燥、乏味,而且標錯了才是最讓人崩潰的。所以各位同學在用人家的資料集的時候還是要滿懷感激好吧。好的扯的有點遠,我們迴歸正題,公式中的f,g,h我們前面介紹過了,然後W就是W大家都懂的。Xs是源資料,Xt是目標資料,Ys表示源資料的標籤,Yt是目標資料的標籤,上標i表示第i個例項,上標i表示第i個例項,\frac{~}{y}表示的是資料集中不同於_{_{_{_{Y}^{}}^{i}的其他標記,即除了當前處理的資料的標記外的其他的所有標記。看下第二個求和符合就知道了。這裡採用了hinge rank loss,我們有必要解釋下為什麼要用這種形式,我們將公式展開成下面的形式可能更方便理解一點:

上面的這個公式是CHTL的原始公式是作者直接發的論文裡的,對應的符號意思大家應該看的懂。那麼為什麼要用hinge rank loss,我們看下面的這個公式:

X_{s}^{i}W_{s}W_{f}這一塊的得到就是我們通過模型預測到的標籤,然後X_{s}^{i}W_{s}W_{f}Y_{s}^{T(i)}就是預測的標籤和ground truth的點積,也就是越相似其值會越大,然後前面的符號是負的也是越相似我們的loss越小,這和我們訓練的目的不謀而和,X_{s}^{i}W_{s}W_{f}{\widetilde{y}_^T}而這一塊的含義和前面的是類似的但是由於其前面的符號是正的所以其越不相似越好。為什麼這樣設定呢,因為我們做的是分類問題,所以目標類和我們的預測越像當然越好,其他的干擾類當然越不像越好。然後R(W)這個是正則項,\lambda是可調的引數。

           然後,剛才介紹的是最初的chtl模型,然後文章在後面做了一些改進。改進的出發點是雖然我們說我們認為chtl源和目標之間我們認為是沒有什麼明顯的聯絡的但是我們有理由認為有些例項適合用作遷移,而有些例項不適合進行遷移甚至會產生負面的影響,比如說我們首先學會了打籃球,然後我們去學習踢足球,那麼你在打籃球的時候學習到的知識比如一共有兩個框投入到對方的那個框就可以得分,還有要把球傳給有位置比較好的隊友這些知識在你學習踢足球的時候是有利的,因為在打籃球的時候同樣是適用的,但是有些知識則會產生負面的影響,比如打籃球的時候當球出界了但是球還沒落地還是可以救回來的但是足球一旦出界無論是否觸地都算出界了。所以如果把這個知識遷移過來就不會產生幫助甚至會產生負面影響。所以文章針對這個問題給出了一個解決方法就是引入注意力機制(attention)。具體來講就是對源資料集中的例項加上一個權重,同時出於計算效能方面的考慮,文章沒有對每一個例項都加一個權重而是先把例項給分了k簇,然後對每一簇加了一個權重。下面是加了attention後的目標函式:

         和之前的模型對比,發現變化就是在左邊的基礎上加了一個權重係數,然後a是一個可學習的引數,決定了每個簇的權重。μ是一個僅僅針對源任務超引數af的懲罰來對源進行優化。因為a雖然只是針對源任務但是其會影響f,通過影響f就可以影響目標任務。具體怎麼將源資料集進行分簇,文章採用了K-means聚類的方法,也就是k均值聚類。需要注意的是這裡只是對例項聚了個類,沒有分類這些聚在一類中的文字可能屬於同一個標籤頁可能不屬於同一個標籤。K-means演算法然後他比較簡單,以歐式距離作為相似度測量,但他有一個可調的引數就是聚成幾類也就是k,這個k設定多大合適只能通過實驗效果確定了。

         然後在訓練帶有注意力機制的chtl的時候,文章採用分步訓練的方法首先先固定其他的引數,訓練Wg; a;Wf,就是先訓練源資料的分類方法,然後再固定其他的訓練Wh;Wf.這樣交替進行訓練來優化引數。

        然後這還沒有完,文章的作者還引入了去燥自動編碼器來優化模型,所以這裡簡單介紹下自動編碼器:自動編碼器基於這樣一個事實:原始input(設為x)經過加權(Wb)、對映(Sigmoid)之後得到y,再對y反向加權映射回來成為z通過反覆迭代訓練兩組(Wb),使得誤差函式最小,即儘可能保證z近似於x,即完美重構了x。那麼可以說正向第一組權(Wb)是成功的,很好的學習了input中的關鍵特徵,不然也不會重構得如此完美。結構圖如下圖所示:

舉個例子:

那麼什麼交去燥自動編碼器呢,就是在自動編碼器的基礎上加了去燥模組:

去燥就是以一定概率分佈(通常使用二項分佈)去擦除原始input矩陣,即每個值都隨機置0,  這樣看起來部分資料的部分特徵是丟失了以這丟失的資料x'去計算y,計算z,並將z與原始x做誤差迭代,這樣,網路就學習了這個破損(原文叫Corruputed)的資料。

這個破損的資料是很有用的,原因有二:

其之一,通過與非破損資料訓練的對比,破損資料訓練出來的Weight噪聲比較小。降噪因此得名。

原因不難理解,因為擦除的時候不小心把輸入噪聲給×掉了。

其之二,破損資料一定程度上減輕了訓練資料與測試資料的代溝。由於資料的部分被×掉了,因而這破損資料

一定程度上比較接近測試資料。(訓練、測試肯定有同有異,當然我們要求同舍異)。

這樣訓練出來的Weight的魯棒性就提高了。圖示如下:

好了瞭解了這些之後我們來看最終的模型:

 

那麼目標函式也加入了對應的去燥編碼器部分的loss:

後面呢就是實驗部分了,沒啥好說的了貼結果吧: 文章中介紹了兩個實驗第一個實驗是作者他們自己製作的隨機數資料集:

 然後用這個資料集進行測試來比較各種方法的優劣。他們通過高斯函式生成了多對源和目標資料集,每對資料集之間的差異性大小不同,可以通過這這些資料集的對比可以看出不同模型在不同任務難度下的效能。我們通過一個可控的超引數δlable來控制員和目標資料集的異構性大小,δlable越大則源和目標資料集之間的差異越大。而δ_diff定義了分類的界限,本文中將δ_diff設為0.5也就是將生成的資料中方差間的差異小於0.5的歸為一類,Psys,m是表示源資料中第m類的均值。然後M=4是源和目標資料集中都是共有4類例項。這個實驗室只體現在標籤空間上的異構,他們的特徵空間的維度是一樣的都等於二十,從形式上也可以看出來他們都是高斯函式自然特徵空間也就一樣,他做這個實驗的目的只是想做一個模擬實驗看看他們的模型的有效性。這個實驗是一個只有標籤空間異構的實驗,也就是傳統的遷移問題。

我們可以看到標記率越高實驗效果越好,然後att是表示attention,AE表示自動編碼器。ZSL是表示zero shot。

然後文章中還做了另一個實驗就是不同語言不同類別間的文字遷移:

實驗採用了多個數據集,源資料集前面的三個資料集rcv1,20news,R8都是英語,前面是通過遷移英語文字學到的文字分類知識來學習法語,西班牙語,德語和義大利語的後面是通過其他語言遷移學習英語。文章沒有給出了具體的實驗步驟也沒有程式碼。只是對實驗結果進行了一下分析。實驗結果顯示本文提出的模型chtl:attae是效果最好的,然後同時分別說明了單獨加入att會對效果有一定的改善,加入ae後會有進一步的改善,然後只是加入兩個全連線層並不會改善效果,但是加入兩個全連線層同時結合attae則會比不加兩個全連線層的效果要好。然後zsl在這個實驗中相較於mlp多加了Word embedding的操作,可以看到結果得到了很大的提升,然後zsl引入注意力機制也對其效能進行了改善,但是沒有像chtl那樣改善的多。

前面在介紹注意了機制的時候我們隊源資料集進行了分簇操作,但是具體分幾簇比較好後面通過實驗得出的,然後論文中提到他麼用chtlatt模型進行了異類語言的文字分類發現在k=40的時候效果是最好的。

本文的一個重點就是attention機制,那麼它怎麼體現出來的呢,文章給了一個視覺化的表示:

藍色的是源資料紅色的是目標資料,然後黑色的表示源資料集中被賦予了最高權重的五個簇,我麼可以發現靠的最近的源資料被賦予了比較高的權重這樣可以把最合適的知識遷移過去。但是我有一個地方不太懂就是最遠的也被賦予了比較高的權重文章說這樣就避免了負遷移,但是還是不太懂。

         本篇部落格寫到這裡就結束了,希望寫的內容可以對大家有所幫助,如果有疑問歡迎留言。如果哪位大佬發現博主寫的那些地方差錯或者紕漏還望指出我們一起學習。

ps:轉載請註明出處。