【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![握手][握手]html
【再囉嗦一下】本文銜接上兩個隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(一):元學習、小樣本學習python
【再囉嗦一下】本文銜接上兩個隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(二):生成對抗網絡 GANgit
說到小樣本學習,我也想再說說遷移學習。可是別誤會,遷移學習也並非只針對小樣本學習,還有不少別的豐富應用。github
本文主要參考了一篇綜述:A Survey on Transfer Learning面試
在許多機器學習和數據挖掘算法中,一個重要的假設就是目前的訓練數據和未來的訓練數據,必定要在相同的特徵空間而且具備相同的分佈。然而,在許多現實的應用案例中,這個假設可能不會成立。這種狀況下,若是知識的遷移作得成功,咱們將會經過避免花費大量昂貴的標記樣本數據的代價,使得學習性能取得顯著的提高。近年來,爲了解決這類問題,遷移學習做爲一個新的學習框架出如今人們面前。算法
遷移學習主要有如下三個研究問題:1)遷移什麼,2)如何遷移,3)什麼時候遷移。網絡
基於遷移學習的定義,咱們概括了傳統機器學習方法和遷移學習的異同見下表:數據結構
(1)inductive transfer learning:推導遷移學習,也叫概括遷移學習。其目標任務和源任務不一樣,不管目標域與源域是否相同。這種狀況下,要用目標域中的一些已標註數據生成一個客觀預測模型以應用到目標域中。根據源域中已標註和未標註數據的不一樣狀況,能夠進一步將inductive transfer learning分爲兩種狀況:架構
(2)transductive transfer learning:轉導遷移學習,也叫直推式遷移學習。其源任務和目標任務相同,源域和目標域不一樣。這種狀況下,目標域中無已標註數據可用,源域中有大量已標註數據可用。根據源域和目標域中的不一樣情況,能夠進一步將轉導遷移學習分爲兩類:框架
(3)unsupervised transfer learning:無監督遷移學習。與推導遷移學習類似,目標任務與源任務不一樣但相關。然而,無監督遷移學習專一於解決目標域中的無監督學習問題,例如聚類、降維、密度估計等。這種狀況下,訓練中源域和目標域都無已標註數據可用。
上述三種遷移學習能夠基於「遷移什麼」被分爲四種狀況:
(1)Instance-based TL(樣本遷移):能夠被稱爲基於實例的遷移學習。儘管source domain數據不能夠整個直接被用到target domain裏,可是在source domain中仍是找到一些能夠從新被用到target domain中的數據。對它們調整權重,使它能與target domain中的數據匹配以後能夠進行遷移。
instance reweighting(樣本從新調整權重)和importance sampling(重要性採樣)是instance-based TL裏主要用到的兩項技術。
例如在這個例子中就是找到例子3,而後加劇它的權值,這樣在預測的時候它所佔權重較大,預測也能夠更準確。
(2)Feature-representation-transfer(特徵遷移):能夠被稱爲基於特徵表示的遷移學習。找到一些好的有表明性的特徵,經過特徵變換把source domain和target domain的特徵變換到一樣的空間,使得這個空間中source domain和target domain的數據具備相同的分佈,而後進行傳統的機器學習就能夠了。
特徵變換這一塊能夠舉個栗子:好比評論男生的時候,你會說「好帥!好有男人味!好有擔當!」,評論女生的時候,你會說「好漂亮!好有女人味!好溫柔!」能夠看出共同的特徵就是「好看」。把「好帥」映射到「好看」,把「好漂亮」映射到「好看」,「好看」即是它們的共同特徵。
(3)Parameter-transfer(參數/模型遷移):能夠被稱爲基於參數的遷移學習。假設source tasks和target tasks之間共享一些參數,或者共享模型hyperparameters(超參數)的先驗分佈。這樣把原來的模型遷移到新的domain時,也能夠達到不錯的精度。
(4)Relational-knowledge-transfer(關係遷移):能夠被稱爲基於關係知識的遷移學習。把類似的關係進行遷移,好比生物病毒傳播到計算機病毒傳播的遷移,好比師生關係到上司下屬關係的遷移。最近,統計關係學習技術主導了這一領域。
綜合第1小節和第2小節的內容,下圖展現了不一樣遷移學習分類中不一樣方法的使用狀況:
與生成對抗網絡GAN同樣,遷移學習一樣能夠在不少領域使用,同時,能夠與很其餘機器學習算法相結合,道理是相通的。
說到這裏,前面各類方法中的統計學習實現實在是太恐怖了,我只想接下來重點介紹一下深度遷移學習的內容,即深度學習+遷移學習!
本小節主要分享一下大佬的知乎專欄的學習內容,主要包括遷移學習領域經典的各大方法,用於輔助對上文的理解:
(1)遷移成分分析(TCA):Domain adaptation via transfer component analysis,2009-2011
主要思想是:屬於基於特徵的遷移學習方法。PCA是一個大矩陣進去,一個小矩陣出來,TCA是兩個大矩陣進去,兩個小矩陣出來。從學術角度講,TCA針對domain adaptation問題中,源域和目標域處於不一樣數據分佈時,將兩個領域的數據一塊兒映射到一個高維的再生核希爾伯特空間。在此空間中,最小化源和目標的數據距離,同時最大程度地保留它們各自的內部屬性。直觀地理解就是,在如今這個維度上很差最小化它們的距離,那麼就找個映射,在映射後的空間上讓它們最接近,那麼不就能夠進行分類了嗎?
主要步驟爲:輸入是兩個特徵矩陣,首先計算L和H矩陣,而後選擇一些經常使用的核函數進行映射(好比線性核、高斯核)計算K,接着求的前m個特徵值。而後,獲得的就是源域和目標域的降維後的數據,就能夠在上面用傳統機器學習方法了。
(2)測地線流式核方法(GFK):Geodesic flow kernel for unsupervised domain adaptation,2011-2012
SGF方法的主要思想:把source和target分別當作高維空間(Grassmann流形)中的兩個點,在這兩個點的測地線距離上取d箇中間點,而後依次鏈接起來。這樣,由source和target就構成了一條測地線的路徑。只須要找到合適的每一步的變換,就能從source變換到target了。
SGF方法的主要貢獻在於:提出了這種變換的計算及實現了相應的算法。可是它有很明顯的缺點:到底須要找幾個中間點?就是說這個參數d是無法估計的。
GFK方法解決了SGF的問題:
GFK方法有如下幾個步驟:選擇最優的子空間維度進行變換、構建測地線、計算測地線流式核、以及構建分類器。
(3)聯合分佈適配(JDA):Transfer feature learning with joint distribution adaptation,2013
主要思想是:屬於基於特徵的遷移學習方法。是一個機率分佈適配的方法,並且適配的是聯合機率。JDA方法同時適配兩個分佈,而後很是精巧地規到了一個優化目標裏。用弱分類器迭代,最後達到了很好的效果。
和TCA的主要區別有兩點:
-------------------------------------------------------------------------------------------
(4)在線遷移學習:A framework of online transfer learning,2010-2014
這是在線遷移學習研究的第一篇文章,做者分別對同構OTL和異構OTL提出了相應的方法,就是基於SVM以及集成學習進行組合。
基本思想是:先針對可用的源域數據創建一個分類器,而後,每來一個目標域數據,就對這個新數據創建一個分類器,而後與在源域上創建的這個分類器進行組合。
核心問題是:肯定源域和新數據分類器各自應該以怎麼樣的權重進行組合。
(5)負遷移:提出「傳遞遷移學習」的解決思路,2015-2017
若是兩個領域之間基本不類似,那麼就會大大損害遷移學習的效果。仍是拿騎自行車來講,拿騎自行車的經驗來學習開汽車,這顯然是不太可能的。由於自行車和汽車之間基本不存在什麼類似性。因此,這個任務基本上完不成。這時候,能夠說出現了負遷移(negative transfer)。
產生負遷移的緣由主要有:
所以,在實際應用中,找到合理的類似性,而且選擇或開發合理的遷移學習方法,可以避免負遷移現象。
隨着研究的深刻,已經有新的研究成果在逐漸克服負遷移的影響:
這些研究的意義在於,傳統遷移學習只有兩個領域足夠類似才能夠完成,而當兩個領域不類似時,傳遞遷移學習卻能夠利用處於這兩個領域之間的若干領域,將知識傳遞式的完成遷移。這個是頗有意義的工做,能夠視爲解決負遷移的有效思想和方法。
(6)開放集遷移學習:Open Set Domain Adaptation,2017
現有的domain adaptation都針對的是一個「封閉」的任務,就是說,source和target中的類別是徹底同樣的,source有幾類,target就有幾類。這些方法都只是理想狀態下的domain adaptation。而真正的環境中,source和target每每只會共享一些類的信息,而不是所有。
整個文章的解決思路大體是這樣的:
二者依次迭代,直到收斂。做者根據target domain是否有label,把問題分紅了unsupervised和semi-supervised domain adaptation,而後分開解決。
(7)張量遷移學習:When Unsupervised Domain Adaptation Meets Tensor Representations,2017
現有的那些domain adaptation方法都只是針對向量(vector)的。而這種表示所帶來的問題就是,當把這些數據應用於高維度表示(如卷積)時,數據首先要通過向量化(vectorization)。此時,沒法精準完備地保留一些統計屬性。因此做者提出,不通過向量化來進行domain adaptation的方法,很天然地用到了tensor(張量)。
(8)從經驗中學習遷移:Learning To Transfer,2018
提出了一個新穎的研究問題:相似於增量學習,如何最大限度地利用已有的遷移學習經驗,使得其對新問題的泛化能力很好?同時也能夠避免一出現新問題就從頭進行學習。
在解決問題的方法上,雖然用的都是老方法,可是可以想到新已有方法很好地應用於這個問題。引來的拓展思考:在深度網絡中如何持續學習?
(9)探祕任務遷移:Taskonomy: Disentangling Task Transfer Learning,2018
諸如物體識別、深度估計、邊緣檢測等一些常見的計算機視覺任務,彼此之間都或多或少地有一些聯繫。好比,咱們很清楚地知道曲面的法線和深度是相關的:它們是彼此的梯度。但與此同時,另外一些任務咱們卻不清楚,例如,一個房間中的關鍵點檢測和陰影是如何協同工做完成姿態估計的?
已有的相關工做均忽略了這些任務的關聯性,而是單獨地對各個任務進行建模。不利用任務之間的相關性,無疑是十分耗時和複雜的。即便是要在不一樣的任務之間進行遷移,因爲不一樣任務的不一樣任務空間之間的聯繫尚不清楚,也沒法實現簡單有效的任務遷移。
(10)選擇性對抗遷移學習:Partial Transfer Learning with Selective Adversarial Networks,2018
傳統的遷移學習問題情境都是,源域和目標域的類別空間同樣。在大數據時代,一般咱們會有大量的源域數據。這些源域數據比目標域數據,在類別上一般都是豐富的。好比基於ImageNet訓練的圖像分類器,必然是針對幾千個類別進行的分類。咱們實際用的時候,目標域每每只是其中的一部分類別。
所以,就要求相應的遷移學習方法可以對目標域,選擇類似的源域樣本(類別),同時也要避免負遷移。可是目標域一般是沒有標籤的,不知道和源域中哪一個類別更類似。做者指出這個問題叫作partial transfer learning(部分遷移學習)。
(11)聯邦遷移學習:2018
事實上,Google在2017年的一篇論文裏進行了去中心化的推薦系統建模研究。其核心是,手機在本地進行模型訓練,而後僅將模型更新的部分加密上傳到雲端,並與其餘用戶的進行整合。一些研究者也提出了CryptoDL深度學習框架、可擴展的加密深度方法、針對於邏輯迴歸方法的隱私保護等。可是,它們或只能針對於特定模型,或沒法處理不一樣分佈數據。
正是爲了解決上述這些挑戰,香港科技大學楊強教授和微衆銀行AI團隊,最近提出了聯邦遷移學習 (Federated Transfer Learning, FTL)。FTL將聯邦學習的概念加以推廣,強調在任何數據分佈、任何實體上,都可以進行協同建模學習。
這項工做在國內,是楊教授與微衆銀行AI團隊主導,目的是創建數據聯邦,以解決大數據沒法聚合的問題。在國外,目前是Google在進行相關的研究。兩者的區別:微衆銀行AI團隊的作法是,用戶維度部分重疊,特徵維度不重疊;而Google則是反過來:特徵重疊,用戶不重疊。
聯邦遷移學習 vs 遷移學習 vs 多任務學習
-------------------------------------------------------------------------------------------
(12)深度神經網絡的可遷移性:How transferable are features in deep neural networks,2014
深度網絡的一個事實:前面幾層都學習到的是通用的特徵(general feature),後面的網絡更偏重於學習特定的特徵(specific feature)。
雖然該論文並無提出一個創新方法,可是經過實驗獲得瞭如下幾個結論,對之後的深度學習和深度遷移學習都有着很是高的指導意義:
(13)深度遷移學習:例如DaNN、DDC、DAN等,2014-2015
DaNN(Domain Adaptive Neural Network)的結構異常簡單,它僅由兩層神經元組成:特徵層和分類器層。做者的創新工做在於,在特徵層後加入了一項MMD適配層,用來計算源域和目標域的距離,並將其加入網絡的損失中進行訓練。因此,整個網絡的優化目標也相應地由兩部分構成:在有label的源域數據上的分類偏差,以及對兩個領域數據的判別偏差。
可是,因爲網絡太淺,表徵能力有限,故沒法頗有效地解決domain adaptation問題(通俗點說就是精度不高)。所以,後續的研究者大多數都基於其思想進行擴充,例如將淺層網絡改成更深層的AlexNet、ResNet、VGG等,例如將MMD換爲多核的MMD等。
DDC(Deep Domain Confusion)針對預訓練的AlexNet(8層)網絡,在第7層(也就是feature層,softmax的上一層)加入了MMD距離來減少source和target之間的差別。這個方法簡稱爲DDC。下圖是DDC的算法插圖。
從上圖能夠很明顯地看出,DDC的思想很是簡單:在原有的AlexNet網絡的基礎上,對網絡的fc7層(分類器前一層)後加一層適配層(adaptation layer)。適配層的做用是,單獨考察網絡對源域和目標域的判別能力。若是這個判別能力不好,那麼咱們就認爲,網絡學到的特徵不足以將兩個領域數據區分開,於是有助於學習到對領域不敏感的特徵表示。
DAN(Deep Adaptation Network)是在DDC的基礎上發展起來的,它很好地解決了DDC的兩個問題:
DAN的創新點是多層適配和多核MMD。下圖是DAN的網絡結構示意圖。
DDC和DAN做爲深度遷移學習的表明性方法,充分利用了深度網絡的可遷移特性,而後又把統計學習中的MK-MMD距離引入,取得了很好的效果。DAN的做者在2017年又進一步對其進行了延伸,作出了Joint Adaptation Network (JAN),進一步把feature和label的聯合機率分佈考慮了進來,能夠視做以前JDA(joint distribution adaptation)的深度版。
(14)深度遷移學習文章解讀:Simultaneous Deep Transfer Across Domains and Tasks,2015
針對狀況:target的部分class有少許label,剩下的class無label。文章最大的創新點是:現有的方法都是domain classifier加上一個domain confusion,就是適配。做者提出這些是不夠的,因此提出了還要再加一個soft label loss。意思就是在source和target進行適配的時候,也要根據source的類別分佈狀況來進行調整target的。其實本意和JDA差很少。
網絡結構以下圖所示。網絡由AlexNet修改而來,前面的幾層都同樣,區別只是在第fc7層後面加入了一個domain classifier,也就是進行domain adaptation的一層,在fc8後計算網絡的loss和soft label的loss。就如今的研究成果看來,絕大多數也都是在深度網絡後加一些相關的loss層,以之來提升網絡的適配性。本質並無很大的創新性。
(15)深度遷移度量學習:Deep Transfer Metric Learning,2015
已有的metric learning研究大多數集中在傳統方法和深度方法中,它們已經取得了長足的進步。可是這些單純的度量研究,每每只是在數據分佈一致的狀況下有效。若是數據分佈發生了變化,已有的研究則不能很好地進行處理。所以,遷移學習就能夠做爲一種工具,綜合學習不一樣數據分佈下的度量,使得度量更穩定。
另外一方面,已有的遷移學習工做大多都是基於固定的距離,例如MMD,所以沒法學習到更好的距離表達。雖然近年來有一些遷移度量學習的工做,但它們都只考慮在數據層面將特徵分佈差別減少,而忽略了在源領域中的監督信息。於是,做者提出要在深度遷移網絡中對度量進行學習,有效利用源領域中的監督信息,學習到更泛化的距離表達。
(16)用於部分遷移學習的深度加權對抗網絡:Importance Weighted Adversarial Nets for Partial Domain Adaptation,2018
做者提出了一個深度加權對抗網絡,以下圖所示。網絡的主要部分是:分別做用於源域和目標域的兩個特徵提取器(分別叫作 和 ),以及兩個領域分類器(分別叫作 和 )。第一個領域分類器用來篩選出源域中與目標域類似的那部分樣本(或者源域中與目標領域共享的那部分類別),第二個領域分類器進行正常的domain adaptation。
本文核心創新點是,從任務出發,直觀地構造出兩階段式對抗網絡,對源域中與目標域共享的類別樣本進行有效篩選。另外一個與已有工做不一樣的地方是,做者分別對源域和目標域採用了不一樣的特徵提取器。
(17)基於條件對抗網絡的領域自適應:Conditional Adversarial Domain Adaptation,2018
Domain adaptation問題一直以來是遷移學習和計算機視覺領域等的研究熱點。從傳統方法,到深度方法,再到最近的對抗方法,都在嘗試解決此問題。做者在本文中提出,如今的對抗方法面臨兩個挑戰:
本文提出了基於條件對抗網絡的領域自適應方法,主要由Condition + Adversarial + Adaptation這三部分構成。進行condition的時候,用到了一個叫作multilinear map的數學工具,主要是來刻畫多個特徵和類別之間的關係。
(18)深度遷移學習用於時間序列分類:Transfer learning for time series classification,2018
基本方法與在圖像上進行深度遷移一致,先在一個源領域上進行pre-train,而後在目標領域上進行fine-tune。
網絡的結構以下圖所示。網絡由3個卷積層、1個全局池化層、和1個全鏈接層構成。使用全鏈接層的好處是,在進行不一樣輸入長度序列的fine-tune時,不須要再額外設計池內化層。
與圖像的區別就是,輸入由圖片換成了時間序列。注意到,圖片每每具備必定的通道數(如常見的R、G、B三通道)。時間序列也有通道,即不一樣維的時間序列數據。最簡單的便是1維序列,能夠認爲是1個通道。多維時間序列則能夠認爲是多個通道。
(19)最大分類器差別的領域自適應:Maximum Classifier Discrepancy for Unsupervised Domain Adaptation,2018
方法的主要思想很是簡單:用源域訓練的網絡若是用到目標域上,確定由於目標域與源域的不一樣,效果也會有所不一樣。效果好的咱們就無論了,重點關注效果很差的,由於這才能體現出領域的差別性。爲了找到這些效果差的樣本,做者引入了兩個獨立的分類器 和 ,用兩者的分歧表示樣本的置信度不高,須要從新訓練。
(20)異構網絡的遷移:Learn What-Where to Transfer,2019
本文另闢蹊徑,從根源上研究不一樣架構的深度網絡如何進行遷移,並提供了行之有效的解決方案。
深度網絡都是對遷移學習最爲友好的學習架構。從最簡單的finetune(微調),到固定網絡的特徵提取層不變在倒數第二層加入可學習的距離,再到經過領域對抗的思想學習隱式分佈距離,深度遷移學習方法大行其道。在諸多圖像分類、分割檢測等任務上取得了不錯的效果。
縱觀這些方法的思路,大多均逃脫不開一個固有的模式:源域和目標域的網絡架構徹底相同,固定前若干層,微調高層或在高層中加入分佈適配距離。然而,在遷移模型變得愈來愈臃腫、特定數據集精度不斷攀升的同時,極少有人想過這樣一個問題:
本文將這一思路具體表述爲2點:What to transfer和Where to transfer
簡單來講就是:學習源域網絡中哪些層的知識能夠遷移多少給目標域的哪些層。
說到遷移學習,我想最時髦的就是深度遷移學習了。有了深度學習的加持,遷移學習在人工智能領域有着豐富的應用。
上一節的內容其實已經包含了深度遷移學習的不少方法,包括很是多的idea,本節就做爲輔助理解用吧!
本文參考了一篇綜述:A Survey on Deep Transfer Learning
這裏強推大佬的知乎專欄和guthub:https://github.com/jindongwang/transferlearning
深度遷移學習是經過深度神經網絡研究如何利用其餘領域的知識。隨着深度神經網絡在各個領域的普遍應用,大量的深度遷移學習方法被提出。包括離線/在線、增量學習、生成對抗、同構/異構等,能夠說是很是豐富。
本文將深度遷移學習分爲四類:基於實例的深度遷移學習、基於映射的深度遷移學習、基於網絡的深度遷移學習和基於對抗的深度遷移學習。
(1)基於實例的深度遷移學習。與遷移學習分類中的第一類是一致的,這裏再也不贅述。
(2)基於映射的深度遷移學習。與遷移學習分類中的第二類是一致的,這裏再也不贅述。
(3)基於網絡的深度遷移學習。將原領域中預先訓練好的部分網絡,包括其網絡結構和鏈接參數,從新利用,將其轉化爲用於目標領域的深度神經網絡的一部分。
(4)基於對抗的深度遷移學習。在生成對抗網絡 GAN 的啓發下,引入對抗性技術,尋找既適用於源域又適用於目標域的可遷移表達。
負遷移和可遷移性測度是傳統遷移學習中的重要問題。如何利用深度神經網絡在無監督或半監督學習中進行知識的遷移會受到愈來愈多的關注。
補充一點,元學習與遷移學習的區別聯繫是什麼?
固然,二者有不少重疊之處,要結合着看,互相補充,互相學習。
歡迎持續關注個人下一篇隨筆:人工智能中小樣本問題相關的系列模型演變及學習筆記(四):知識蒸餾、增量學習
若是您對異常檢測感興趣,歡迎瀏覽個人另外一篇博客:異常檢測算法演變及學習筆記
若是您對智能推薦感興趣,歡迎瀏覽個人另外一篇博客:智能推薦算法演變及學習筆記 、CTR預估模型演變及學習筆記
若是您對知識圖譜感興趣,歡迎瀏覽個人另外一篇博客:行業知識圖譜的構建及應用、基於圖模型的智能推薦算法學習筆記
若是您對時間序列分析感興趣,歡迎瀏覽個人另外一篇博客:時間序列分析中預測類問題下的建模方案 、深度學習中的序列模型演變及學習筆記
若是您對數據挖掘感興趣,歡迎瀏覽個人另外一篇博客:數據挖掘比賽/項目全流程介紹 、機器學習中的聚類算法演變及學習筆記
若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)、人工智能領域經常使用的開源框架和庫(含機器學習/深度學習/強化學習/知識圖譜/圖神經網絡)
若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?
若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?
若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?
若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路