深度學習淺層理解
這裡的關鍵詞有兩個,一個是抽象,一個是迭代。從原始訊號,做低階抽象,逐漸向高階抽象迭代。人類的邏輯思維,經常使用高度抽象的概念。例如,從原始訊號攝入開始(瞳孔攝入畫素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是隻氣球)。
1995 年前後,Bruno Olshausen和 David Field 兩位學者任職 Cornell University,他們試圖同時用生理學和計算機的手段,雙管齊下,研究視覺問題。
Bruno Olshausen和 David Field 的演算法結果,與 David Hubel 和Torsten Wiesel 的生理髮現,不謀而合!
也就是說,複雜圖形,往往由一些基本結構組成。比如下圖:一個圖可以通過用64種正交的edges(可以理解成正交的基本結構)來線性表示。比如樣例的x可以用1-64個edges中的三個按照0.8,0.3,0.5的權重調和而成。而其他基本edge沒有貢獻,因此均為0 。
小塊的圖形可以由基本edge構成,更結構化,更復雜的,具有概念性的圖形如何表示呢?這就需要更高層次的特徵表示,比如V2,V4。因此V1看畫素級是畫素級。V2看V1是畫素級,這個是層次遞進的,高層表達由底層表達的組合而成。專業點說就是基basis。V1取提出的basis是邊緣,然後V2層是V1層這些basis的組合,這時候V2區得到的又是高一層的basis。即上一層的basis組合的結果,上上層又是上一層的組合basis……(所以有大牛說Deep learning就是“搞基”,因為難聽,所以美其名曰Deep learning或者Unsupervised Feature Learning)。
直觀上說,就是找到make sense的小patch再將其進行combine,就得到了上一層的feature,遞迴地向上learning feature。
在不同object上做training是,所得的edge basis 是非常相似的,但object parts和models 就會completely different了(那我們們分辨car或者face是不是容易多了)。
從文字來說,一個doc表示什麼意思?我們描述一件事情,用什麼來表示比較合適?用一個一個字嘛,我看不是,字就是畫素級別了,起碼應該是term,換句話說每個doc都由term構成,但這樣表示概念的能力就夠了嘛,可能也不夠,需要再上一步,達到topic級,有了topic,再到doc就合理。但每個層次的數量差距很大,比如doc表示的概念->topic(千-萬量級)->term(10萬量級)->word(百萬量級)。
一個人在看一個doc的時候,眼睛看到的是word,由這些word在大腦裡自動切詞形成term,在按照概念組織的方式,先驗的學習,得到topic,然後再進行高層次的learning。
Deep Learning的基本思想
假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等於輸入I,即輸入I經過這個系統變化之後沒有任何的資訊損失(呵呵,大牛說,這是不可能的。資訊理論中有個“資訊逐層丟失”的說法(資訊處理不等式),設處理a資訊得到b,再對b處理得到c,那麼可以證明:a和c的互資訊不會超過a和b的互資訊。這表明資訊處理不會增加資訊,大部分處理會丟失資訊。當然了,如果丟掉的是沒用的資訊那多好啊),保持了不變,這意味著輸入I經過每一層Si都沒有任何的資訊損失,即在任何一層Si,它都是原有資訊(即輸入I)的另外一種表示。現在回到我們的主題Deep Learning,我們需要自動地學習特徵,假設我們有一堆輸入I(如一堆影象或者文字),假設我們設計了一個系統S(有n層),我們通過調整系統中引數,使得它的輸出仍然是輸入I,那麼我們就可以自動地獲取得到輸入I的一系列層次特徵,即S1,…, Sn。對於深度學習來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實現對輸入資訊進行分級表達了。
深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練資料,來學習更有用的特徵,從而最終提升分類或預測的準確性。因此,“深度模型”是手段,“特徵學習”是目的。區別於傳統的淺層學習,深度學習的不同在於:1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2)明確突出了特徵學習的重要性,也就是說,通過逐層特徵變換,將樣本在原空間的特徵表示變換到一個新特徵空間,從而使分類或預測更加容易。與人工規則構造特徵的方法相比,利用大資料來學習特徵,更能夠刻畫資料的豐富內在資訊。
Deep Learning和 neural network異同
二者的相同在於deep learning採用了神經網路相似的分層結構,系統由包括輸入層、隱層(多層)、輸出層組成的多層網路,只有相鄰層節點之間有連線,同一層以及跨層節點之間相互無連線,每一層可以看作是一個logistic regression模型;這種分層結構,是比較接近人類大腦的結構的。
而為了克服神經網路訓練中的問題,DL採用了與神經網路很不同的訓練機制。傳統神經網路中,採用的是back propagation的方式進行,簡單來講就是採用迭代的演算法來訓練整個網路,隨機設定初值,計算當前網路的輸出,然後根據當前輸出和label之間的差去改變前面各層的引數,直到收斂(整體是一個梯度下降法)。而deep learning整體上是一個layer-wise的訓練機制。這樣做的原因是因為,如果採用back propagation的機制,對於一個deep network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的gradient diffusion(梯度彌散)。
BP演算法作為傳統訓練多層網路的典型演算法,實際上對僅含幾層網路,該訓練方法就已經很不理想。深度結構(涉及多個非線性處理單元層)非凸目標代價函式中普遍存在的區域性最小是訓練困難的主要來源。
BP演算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,誤差校正訊號越來越小;
(2)收斂到區域性最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這種情況的發生);
(3)一般,我們只能用有標籤的資料來訓練:但大部分的資料是沒標籤的,而大腦可以從沒有標籤的的資料中學習;
deep learning訓練過程具體如下:
1)使用自下上升非監督學習(就是從底層開始,一層一層的往頂層訓練):
採用無標定資料(有標定資料也可)分層訓練各層引數,這一步可以看作是一個無監督訓練過程,是和傳統神經網路區別最大的部分(這個過程可以看作是feature learning過程):
具體的,先用無標定資料訓練第一層,訓練時先學習第一層的引數(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經網路的隱層),由於模型capacity的限制以及稀疏性約束,使得得到的模型能夠學習到資料本身的結構,從而得到比輸入更具有表示能力的特徵;在學習得到第n-1層後,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的引數;
2)自頂向下的監督學習(就是通過帶標籤的資料去訓練,誤差自頂向下傳輸,對網路進行微調):
基於第一步得到的各層引數進一步fine-tune(微調)整個多層模型的引數,這一步是一個有監督訓練過程;第一步類似神經網路的隨機初始化初值過程,由於DL的第一步不是隨機初始化,而是通過學習輸入資料的結構得到的,因而這個初值更接近全域性最優,從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功於第一步的feature learning過程。
如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是係數,我們可以得到這樣一個優化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
通過求解這個最優化式子,我們可以求得係數ai和基Φi,這些係數和基就是輸入的另外一種近似表達。
因此,它們可以用來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱為Sparse Coding。通俗的說,就是將一個訊號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將訊號表示出來。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,我們只想有儘可能少的幾個係數遠大於零。選擇使用具有稀疏性的分量來表示我們的輸入資料是有原因的,因為絕大多數的感官資料,比如自然影象,可以被表示成少量基本元素的疊加,在影象中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經元,但對於某些影象或者邊緣只有很少的神經元興奮,其他都處於抑制狀態)。
稀疏編碼演算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本資料。雖然形如主成分分析技術(PCA)能使我們方便地找到一組“完備”基向量,但是這裡我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入資料內部的結構與模式。然而,對於超完備基來說,係數ai不再由輸入向量唯一確定。因此,在稀疏編碼演算法中,我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。
比如在影象的Feature Extraction的最底層要做Edge Detector的生成,那麼這裡的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然後給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。
Sparse coding分為兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學習得到一組基[Φ1, Φ2, …],也就是字典。
稀疏編碼是k-means演算法的變體,其訓練過程也差不多(EM演算法的思想:如果要優化的目標函式包含兩個變數,如L(W, B),那麼我們可以先固定W,調整B使得L最小,然後再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。
訓練過程就是一個重複迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標函式最小。
每次迭代分兩步:
a)固定字典Φ[k],然後調整a[k],使得上式,即目標函式最小(即解LASSO問題)。見下
b)然後固定住a [k],調整Φ [k],使得上式,即目標函式最小(即解凸QP問題)。見下
不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
例如:
LASSO問題
凸集的定義:一個集合C是凸集,當且僅當對任意x,y∈C和θ∈RR且0≤θ≤1,都有
常見的凸集有:n維實數空間;一些範數約束形式的集合;仿射子空間;凸集的並集;n維半正定矩陣集;凸優化中的一個核心概念就是凸函式。
凸函式定義:一個函式f:Rn→R是凸函式當且僅當其定義域(設為D(f))是凸集,
且對任意的x,y∈D(f)和θ∈R且0≤θ≤1,都有
有了凸集和凸函式的定義,現在我們重點討論凸優化問題的求解方法。凸優化的一般描述為:
凸問題中的全域性優化:首先要分清楚什麼是區域性最優,什麼是全域性最優。區域性最優是指在該最優值附近的點對應的函式值 都比該最優值大,而全域性最優是指對可行域裡所有點,其函式值都比該最優值大。對於凸優化問題,它具有一個很重要的特性, 那就是所有的區域性最優值都是全域性最優的。
(1)線性規劃(Linear Programing, LP): 目標函式和約束條件函式都是線性函式的情況,一般形式如下:
(2)二次規劃(Quadratic Programing, QP): 目標函式為二次函式,約束條件為線性函式,一般形式為:
LP可以看做是QP的特例,QP包含LP。
(3)二次約束的二次規劃(Quadratically Constrained Quadratic Programming, QCQP): 目標函式和約束條件均為 二次函式的情況,QP可以看做是QCQP的特例,QCQP包含QP。
(4)半正定規劃(Semidefinite Programming,SDP)QCQP可以看做是SDP的特例,SDP包含QCQP。SDP在machine learning中有非常廣泛的應用。
凸優化應用舉例
下面我們來看幾個例項。
(1)支援向量機(Support Vector Machines,SVM):凸優化在machine learning中的一個典型的應用就是基於支援向量機分類器, 它可以用如下優化問題表示:
其中決策變數w∈Rn,ξ∈Rn,b∈R. C∈R,x(i),y(i),i=1,2,…,m由 具體問題定義。可以看出,這是一個典型的QP問題。
(2)帶約束的least squares問題:其一般描述為
這也是一個很典型的QP問題。
(3)Maximum Likelihood for Logistic Regression:該問題的目標函式為:其中g(z)g(z)為Sigmoid函式,
對於凸優化問題,目前沒有一個通用的解析式的 解決方案,但是我們仍然可以用非解析的方法來有效的求解很多問題。內點法被證明是很好的解決方案, 特別具有實用性,在某些問題中,能夠在多項式時間複雜度下,將解精確到指定精度。
相關文章
- [譯] 淺析深度學習神經網路的卷積層深度學習神經網路卷積
- 深度學習深入淺出深度學習
- 深入理解深度學習深度學習
- 《深度學習Ng》課程學習筆記01week3——淺層神經網路深度學習筆記神經網路
- [深度學習]多層感知機(MLP)深度學習
- 帶你深入淺出理解深度學習(附資源打包下載)深度學習
- 讓 PM 全面理解深度學習深度學習
- 淺談深度學習落地問題深度學習
- 淺入淺出深度學習理論與實踐深度學習
- 淺談深度學習的落地問題深度學習
- 淺談深度學習中的機率深度學習
- 【深度學習】1.4深層神經網路深度學習神經網路
- 深度學習教程 | 深層神經網路深度學習神經網路
- 理解Transformer [資料探勘深度學習]ORM深度學習
- 深度:如何從系統層面優化深度學習計算?優化深度學習
- 深度學習---之caffe如何加入Leaky_relu層深度學習
- 深度學習 SSD的理解和細節分析深度學習
- 用三張圖理解深度學習的工作原理深度學習
- 深度學習(一)深度學習學習資料深度學習
- 深度學習技術發展趨勢淺析深度學習
- 關於深度學習的一些淺見深度學習
- 零基礎深度學習入門:由淺入深理解反向傳播演算法深度學習反向傳播演算法
- 吳恩達深度學習:單層卷積網路吳恩達深度學習卷積
- 從哲學層面淺談計算機學習方法論計算機
- 深度學習 Caffe 記憶體管理機制理解深度學習記憶體
- 吳恩達《神經網路與深度學習》課程筆記(4)– 淺層神經網路吳恩達神經網路深度學習筆記
- 淺談深度學習分散式表示以及不同結構深度學習分散式
- 動手學深度學習(二)——多層感知機(從零開始)深度學習
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 《深入淺出深度學習》之“從邏輯學到認知科學”深度學習
- 深度學習及深度強化學習研修深度學習強化學習
- 深度學習學習框架深度學習框架
- 自我學習與理解:keras框架下的深度學習(三)迴歸問題Keras框架深度學習
- 深度學習入門必須理解這25個概念深度學習
- 一文帶你理解深度學習的侷限性深度學習
- 深度學習深度學習
- ####深度學習深度學習
- 深度 學習