深度学习基础入门(一):基本概念和术语解读
??? 本文旨在解釋一些深度學習中的基本概念,并通過一些實踐中的例子幫助理解,可能個人解讀有誤,還望指正。本文提綱參照參考文獻【2】進行,對其簡練的內容加以了豐富和擴展,確保零基礎的新手也可以有比較清晰的認識。
表示學習(representation learning)
??????? 表示學習是機器學習中的一項重要任務,又稱學習表示。即用何種機器能夠理解的表示方法來標表示數據。例如在NLP領域中,用word2vec方法,將自然語言用向量形式表示。
??????? 書面化一點地說,機器學習旨在自動地學到從數據的表示(representation)到數據的標記(label)的映射。
??????? 表示學習有很多種形式,比如CNN參數的有監督訓練是一種有監督的表示學習形式,對自動編碼器和限制玻爾茲曼機參數的無監督預訓練是一種無監督的表示學習形式,對DBN參數-先進性無監督預訓練,再進行有監督fine-tuning-是一種半監督的共享表示學習形式。
??????? 表示學習中最關鍵的問題是:如何評價一個表示比另一個表示更好?表示的選擇通常通常取決于隨后的學習任務,即你的目的是什么,要達到什么效果。一個數據樣本集可能有多個特征可以表示它,例如雞蛋,可以說形狀是圓的作為一個表示,也可以說外白內黃作為一個表示,當然也可以聯合起來使用……所謂條條大路通羅馬,路又分為水路、旱路,你要去小島上就要選水路,去地面上某個地方就要選旱路。一個好的表示應該使隨后的任務的學習變得更容易、更加準確高效。再以專業化一點的基于CNN的圖像分類任務為例:模型可以分為基于CNN的特征抽取和基于softmax回歸的線性分類兩個部分。通過模型參數有監督的訓練,通過CNN,從線性不可分的圖片里抽取出線性可分表示(特征),softmax線性分類器可以基于抽取的線性可分的表示進行分類。
??????? 隨著機器學習算法的日趨成熟,人們發現,在某些領域(如圖像、語音、文本等),如何從數據中提取合適的表示成為整個任務的瓶頸所在,而數據表示的好壞直接影響后續學習任務(所謂garbage in,garbage out)。與其依賴人類專家設計手工特征(難設計還不見得好用),表示學習希望能從數據中自動地學到從數據的原始形式到數據的表示之間的映射。
??????? 表示學習中最有趣的一種形式是涉及多個任務的共享表示學習。為什么?
??????? 以無監督和有監督結合的共享表示學習為例。在深度學習任務中,我們通常有大量的無標簽的訓練樣本和少量的有標簽的訓練樣本。只在有限的有標簽的訓練樣本上學習,會導致模型存在嚴重過擬合問題。共享表示具體來說,可以從大量無標簽的觀測樣本中通過無監督的方法,學習出很好的表示,然后基于這些表示,采用少量有標簽的觀測樣本來得到好的模型參數,緩解監督學習中的過擬合問題。
??????? 共享表示學習涉及多個任務,多個任務之間共享一定相同的因素,比如相同的分布(distribution)、觀測樣本X來自相同的領域(domain)等。共享表示學習有多種表示形式。假設共享表示學習中采用訓練樣本A進行無監督學習,訓練樣本B進行有監督學習。樣本A和樣本B可能來自相同的領域,也可能來自不同的領域;可能任務服從相同的分布,也可能服從不同的分布。
??????? 共享表示學習相關的機器學習技術有很多:遷移學習(Transfer Lear)、多任務學習(Multitask Learning)、領域適應性(Domain Adaptation)(One Shot Learning、Zero Shot learning)等。深度學習技術具有很強的特征抽取、知識表達的能力,是共享表示學習的利器,它可以有效抽取多個人任務之間共享的因素、知識或特征。因此,現在出現了很多將深度學習技術用于遷移學習、多任務學習技術中的研究。
深度學習(deep learning,DL)
??????? 表示學習的理想很豐滿,但實際中人們發現從數據的原始形式直接學得數據表示這件事很難。深度學習是目前最成功的表示學習方法,因此,目前國際表示學習大會(ICLR)的絕大部分論文都是關于深度學習的。深度學習是把表示學習的任務劃分成幾個小目標,先從數據的原始形式中先學習比較低級的表示,再從低級表示學得比較高級的表示。這樣,每個小目標比較容易達到,綜合起來我們就完成表示學習的任務。這類似于算法設計思想中的分治法(divide-and-conquer)。
深度神經網絡(deep neural networks,DNN)
??????? 深度學習目前幾乎唯一行之有效的實現形式。簡單的說,深度神經網絡就是很深的神經網絡。我們利用網絡中逐層對特征進行加工的特性,逐漸從低級特征提取高級特征。除了深度神經網絡之外,有學者在探索其他深度學習的實現形式,比如深度森林。
??????? 深度神經網絡目前的成功取決于三大推動因素。1. 大數據。當數據量小時,很難從數據中學得合適的表示,而傳統算法+特征工程往往能取得很好的效果;2. 計算能力。大的數據和大的網絡需要有足夠的快的計算能力才能使得模型的應用成為可能。3. 算法創新。現在很多算法設計關注在如何使網絡更好地訓練、更快地運行、取得更好的性能。
激活函數(activation function)
??????? 激活函數是神經網絡的必要組成部分,數據經過經過函數運算后由激活函數映射輸出。如果沒有激活函數,多次線性運算的堆疊仍然是一個線性運算,即不管用再多層實質只起到了一層神經網絡的作用。如下圖,Y的表達式f,就是一個激活函數。(如果對神經元結構還不清楚的同學,可翻看本博客先前的一篇關于CNN淺析的更基礎的博文。)也就是說,每一個輸入都有自己的權重,權重和輸入的值相乘,然后加上一個偏置b之后在經過一個函數f得到輸出y,這個f就是激活函數。
??????? 一個好的激活函數應滿足以下性質。1. 不會飽和。sigmoid和tanh激活函數在兩側尾端會有飽和現象,這會使導數在這些區域接近零,從而阻礙網絡的訓練。2. 零均值。ReLU激活函數的輸出均值不為零,這會影響網絡的訓練。3. 容易計算。
??????? 常用的激活函數:1)sigmoid:輸入一個實值,輸出一個 0 至 1 間的值。
??????? 2)tanh(雙曲正切函數):輸入一個實值,輸出一個 [-1,1] 間的值:
??????? 3)ReLU:ReLU 代表修正線性單元。輸出一個實值,并設定 0 的閾值(函數會將負值變為零)f(x) = max(0, x)。
?
多層感知機(multi-layer perceptrons,MLP)
??????? 多層由全連接層組成的深度神經網絡。即至少包括一個隱藏層,如下圖。MLP也是最早的前饋神經網絡的一個例子。單層感知器只能學習線性函數,而多層感知器也可以學習非線性函數。多層感知機的最后一層全連接層實質上是一個線性分類器,而其他部分則是為這個線性分類器學習一個合適的數據表示,使倒數第二層的特征線性可分。
遷移學習(transfer learning)
????? 遷移學習(Transfer learning) 顧名思義就是就是把已訓練好的模型參數遷移到新的模型來幫助新模型訓練。考慮到大部分數據或任務是存在相關性的,所以通過遷移學習我們可以將已經學到的模型參數(也可理解為模型學到的知識)通過某種方式來分享給新模型從而加快并優化模型的學習效率不用像大多數網絡那樣從零學習(starting from scratch,tabula rasa)。
??????? 在事實上,很多遷移學習的效果往往是負面的,這引起了一些學者對遷移學習是否真的/一定有用產生了懷疑。
多任務學習(multi-task learning)
??????? 在多任務學習中,任一任務的訓練目標都是同等重要的,這不同于上面講的遷移學習(一個學完了傳遞給另一個)。最簡單直接的多任務學習網絡就是直接應用一個普通的網絡結構在最后輸出層前分叉到不同的任務預測層。
??????? 與其針對每個任務訓練一個小網絡,深度學習下的多任務學習旨在訓練一個大網絡以同時完成全部任務。這些任務中用于提取低層特征的層是共享的,之后產生分支,各任務擁有各自的若干層用于完成其任務。多任務學習適用于多個任務共享低層特征,并且各個任務的數據很相似的情況。
??????? 但是多任務學習可能會遇到一個很棘手的問題,那就是如何在不同難度的任務的目標下,找好訓練的權重。由于任務難度和數據集不同的緣故,在進行多任務學習中,有一種情況是網絡中學到的特征被某一任務 dominate。一個簡單的例子:我們同時訓練 MNIST 和 ImageNet。由于我們知道MNIST是一個極其簡單的數據集,而ImageNet是一個數據量大且復雜的多的數據集。那么模型訓練將飛快的收斂 MNIST 的識別任務,且慢慢變成是基于 MNIST 特征網絡的初始值的 ImageNet 訓練。
??????? 多任務學習的神經網絡的內部運行情況無從得知。即使有相當多的實驗結果表明,多任務學習比單任務學習的準確率較高,或者說泛化能力更強。但是多任務學習是否真正在學通用的特征我們無從得知。也有可能多任務學習僅僅是部分神經元負責負責特定網絡,由于這多任務的分配導致網絡結構比單任務小了而提高準確度我們也可說不是不可能。如何理解多任務網絡結構,如何觀察并確認特征的泛化能力也是一個重要的問題。
端到端學習(end-to-end learning)
??????? 個人認為工業界中,并沒有嚴格的端到端的概念。結合具體的例子比較好理解,可參見文獻【4】。可以簡單理解為:所設計的神經網絡一端輸入原始數據,一端輸出想得到的最終結果,有點像一個黑箱的過程。而人們只需要只關心輸入和輸出,中間的步驟全部都不管。但是我個人覺得端到端不是強調這個過程,而是強調結果。即結果的形式是否是我們想要的最終形式。例如最近在做的目標檢測領域,很多人利用CNN做了分類識別,CNN起到一個分類的作用。若CNN能夠自行判斷所識別物體的坐標位置,給出region proposal,或者直接拉響集成了CNN的系統警報,這種簡單粗暴、一條龍服務到底的實現我覺得就是端到端。但實際上研究端到端的工業意義并不是很大,能達到應用效果不一定只依賴神經網絡,可以自行集成其他系統模塊輔助完成,可能效率還更高呢。
??????? 關于深度學習的端到端,參考文章【2】中略晦澀難懂的說法:深度學習下的端到端學習旨在通過一個深度神經網絡直接學習從數據的原始形式到數據的標記的映射。端到端學習并不應該作為我們的一個追求目標,是否要采用端到端學習的一個重要考慮因素是:有沒有足夠的數據對應端到端的過程,以及我們有沒有一些領域知識能夠用于整個系統中的一些模塊。
---------------------
作者:奔跑的Yancy
原文:https://blog.csdn.net/lyxleft/article/details/79636722
總結
以上是生活随笔為你收集整理的深度学习基础入门(一):基本概念和术语解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “人工智能的数理基础”主题论坛,五位学者
- 下一篇: 高等数学、线性代数、概率论数理统计书籍推