日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

深度学习笔记(待续)

發(fā)布時間:2023/12/13 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习笔记(待续) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景知識


好的特征應(yīng)具有不變性(大小、尺度和旋轉(zhuǎn)等)和可區(qū)分性):例如Sift的出現(xiàn),是局部圖像特征描述子研究領(lǐng)域一項里程碑式的工作。由于SIFT對尺度、旋轉(zhuǎn)以及一定視角和光照變化等圖像變化都具有不變性,并且SIFT具有很強的可區(qū)分性,的確讓很多問題的解決變?yōu)榭赡堋?

Deep Learning的一個別名UnsupervisedFeature Learning,就可以顧名思義了,Unsupervised的意思就是不要人參與特征的選取過程。


總的來說,人的視覺系統(tǒng)的信息處理是分級的。從低級的V1區(qū)提取邊緣特征,再到V2區(qū)的形狀或者目標(biāo)的部分等,再到更高層,整個目標(biāo)、目標(biāo)的行為等。也就是說高層的特征是低層特征的組合,從低層到高層的特征表示越來越抽象,越來越能表現(xiàn)語義或者意圖。而抽象層面越高,存在的可能猜測就越少,就越利于分類。


關(guān)于特征


特征表示的粒度

學(xué)習(xí)算法在一個什么粒度上的特征表示,才有能發(fā)揮作用?就一個圖片來說,像素級的特征根本沒有價值。例如下面的摩托車,從像素級別,根本得不到任何信息,其無法進行摩托車和非摩托車的區(qū)分。而如果特征是一個具有結(jié)構(gòu)性(或者說有含義)的時候,比如是否具有車把手(handle),是否具有車輪(wheel),就很容易把摩托車和非摩托車區(qū)分,學(xué)習(xí)算法才能發(fā)揮作用。

初級(淺層)特征表示
既然像素級的特征表示方法沒有作用,那怎樣的表示才有用呢?
1995 年前后,Bruno Olshausen和 David Field 兩位學(xué)者任職 Cornell University,他們試圖同時用生理學(xué)和計算機的手段,雙管齊下,研究視覺問題。
他們收集了很多黑白風(fēng)景照片,從這些照片中,提取出400個小碎片,每個照片碎片的尺寸均為 16x16 像素,不妨把這400個碎片標(biāo)記為 S[i], i = 0,.. 399。接下來,再從這些黑白風(fēng)景照片中,隨機提取另一個碎片,尺寸也是 16x16 像素,不妨把這個碎片標(biāo)記為 T。
他們提出的問題是,如何從這400個碎片中,選取一組碎片,S[k], 通過疊加的辦法,合成出一個新的碎片,而這個新的碎片,應(yīng)當(dāng)與隨機選擇的目標(biāo)碎片 T,盡可能相似,同時,S[k] 的數(shù)量盡可能少。用數(shù)學(xué)的語言來描述,就是:

Sum_k (a[k] * S[k]) --> T, 其中 a[k] 是在疊加碎片 S[k] 時的權(quán)重系數(shù)。

為解決這個問題,Bruno Olshausen和 David Field 發(fā)明了一個算法,稀疏編碼(Sparse Coding)

稀疏編碼是一個重復(fù)迭代的過程,每次迭代分兩步:

1)選擇一組 S[k],然后調(diào)整 a[k],使得Sum_k (a[k] * S[k]) 最接近 T。
2)固定住 a[k],在 400 個碎片中,選擇其它更合適的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。

經(jīng)過幾次迭代后,最佳的 S[k] 組合,被遴選出來了。令人驚奇的是,被選中的 S[k],基本上都是照片上不同物體的邊緣線,這些線段形狀相似,區(qū)別在于方向。
Bruno Olshausen和 David Field 的算法結(jié)果,與 David Hubel 和Torsten Wiesel 的生理發(fā)現(xiàn),不謀而合!
也就是說,復(fù)雜圖形,往往由一些基本結(jié)構(gòu)組成。比如下圖:一個圖可以通過用64種正交的edges(可以理解成正交的基本結(jié)構(gòu))來線性表示。比如樣例的x可以用1-64個edges中的三個按照0.8,0.3,0.5的權(quán)重調(diào)和而成。而其他基本edge沒有貢獻(xiàn),因此均為0 。

另外,大牛們還發(fā)現(xiàn),不僅圖像存在這個規(guī)律,聲音也存在。他們從未標(biāo)注的聲音中發(fā)現(xiàn)了20種基本的聲音結(jié)構(gòu),其余的聲音可以由這20種基本結(jié)構(gòu)合成。


淺層學(xué)習(xí)(Shallow Learning)和深度學(xué)習(xí)(Deep Learning)


淺層學(xué)習(xí)是機器學(xué)習(xí)的第一次浪潮。
20世紀(jì)80年代末期,用于人工神經(jīng)網(wǎng)絡(luò)的反向傳播算法(也叫Back Propagation算法或者BP算法)的發(fā)明,給機器學(xué)習(xí)帶來了希望,掀起了基于統(tǒng)計模型的機器學(xué)習(xí)熱潮。這個熱潮一直持續(xù)到今天。人們發(fā)現(xiàn),利用BP算法可以讓一個人工神經(jīng)網(wǎng)絡(luò)模型從大量訓(xùn)練樣本中學(xué)習(xí)統(tǒng)計規(guī)律,從而對未知事件做預(yù)測。這種基于統(tǒng)計的機器學(xué)習(xí)方法比起過去基于人工規(guī)則的系統(tǒng),在很多方面顯出優(yōu)越性。這個時候的人工神經(jīng)網(wǎng)絡(luò),雖也被稱作多層感知機(Multi-layer Perceptron),但實際是種只含有一層隱層節(jié)點的淺層模型。
20世紀(jì)90年代,各種各樣的淺層機器學(xué)習(xí)模型相繼被提出,例如支撐向量機(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。這些模型的結(jié)構(gòu)基本上可以看成帶有一層隱層節(jié)點(如SVM、Boosting),或沒有隱層節(jié)點(如LR)。這些模型無論是在理論分析還是應(yīng)用中都獲得了巨大的成功。相比之下,由于理論分析的難度大,訓(xùn)練方法又需要很多經(jīng)驗和技巧,這個時期淺層人工神經(jīng)網(wǎng)絡(luò)反而相對沉寂。

深度學(xué)習(xí)是機器學(xué)習(xí)的第二次浪潮。

2006年,加拿大多倫多大學(xué)教授、機器學(xué)習(xí)領(lǐng)域的泰斗Geoffrey Hinton和他的學(xué)生RuslanSalakhutdinov在《科學(xué)》上發(fā)表了一篇文章,開啟了深度學(xué)習(xí)在學(xué)術(shù)界和工業(yè)界的浪潮。這篇文章有兩個主要觀點:

1)多隱層的人工神經(jīng)網(wǎng)絡(luò)具有優(yōu)異的特征學(xué)習(xí)能力,學(xué)習(xí)得到的特征對數(shù)據(jù)有更本質(zhì)的刻畫,從而有利于可視化或分類;
2)深度神經(jīng)網(wǎng)絡(luò)在訓(xùn)練上的難度,可以通過“逐層初始化”(layer-wise pre-training)來有效克服,在這篇文章中,逐層初始化是通過無監(jiān)督學(xué)習(xí)實現(xiàn)的。

當(dāng)前多數(shù)分類、回歸等學(xué)習(xí)方法為淺層結(jié)構(gòu)算法,其局限性在于有限樣本和計算單元情況下對復(fù)雜函數(shù)的表示能力有限,針對復(fù)雜分類問題其泛化能力受到一定制約。
深度學(xué)習(xí)可通過學(xué)習(xí)一種深層非線性網(wǎng)絡(luò)結(jié)構(gòu),實現(xiàn)復(fù)雜函數(shù)逼近,表征輸入數(shù)據(jù)分布式表示,并展現(xiàn)了強大的從有限樣本集中學(xué)習(xí)數(shù)據(jù)集本質(zhì)特征的能力。(多層的好處是可以用較少的參數(shù)表示復(fù)雜的函數(shù))

深度學(xué)習(xí)的實質(zhì),是通過構(gòu)建具有很多隱層的機器學(xué)習(xí)模型和海量的訓(xùn)練數(shù)據(jù),來學(xué)習(xí)更有用的特征,從而最終提升分類或預(yù)測的準(zhǔn)確性。因此,“深度模型”是手段,“特征學(xué)習(xí)”是目的。
區(qū)別于傳統(tǒng)的淺層學(xué)習(xí),深度學(xué)習(xí)的不同在于:

1)強調(diào)了模型結(jié)構(gòu)的深度,通常有5層、6層,甚至10多層的隱層節(jié)點;
2)明確突出了特征學(xué)習(xí)的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,從而使分類或預(yù)測更加容易。

與人工規(guī)則構(gòu)造特征的方法相比,利用大數(shù)據(jù)來學(xué)習(xí)特征,更能夠刻畫數(shù)據(jù)的豐富內(nèi)在信息。

deep的含義就是多層神經(jīng)元網(wǎng)絡(luò),每一層代表一種層次的概念,越往下概念的正交性越好,越往上概念的正交性越差,越具有相似度。因為高層概念彼此可能互相包含了相同的基本結(jié)構(gòu)。
高層概念分離出基本結(jié)構(gòu)的方法也很容易理解,就是打散了聚類

關(guān)于算法和算力的討論詳見
算法還是算力?周志華微博引爆深度學(xué)習(xí)的“雞生蛋,蛋生雞”問題

周志華:
最重要的進步是由機器學(xué)習(xí)技術(shù)的進步帶來的,計算能力起到了促進作用而不是根本作用。
機器學(xué)習(xí)的進步使我們從‘不能’到‘能’,計算能力的進步使我們從‘能’到‘更好’。試圖抹殺前者的作用,認(rèn)為一切都是計算能力提高帶來的,是錯誤且危險的。

中科院計算所的包云崗研究員則表示,“算法進步和計算能力進步對今天AI都不可或缺”,二者相輔相成。其中算力提升的作用則表現(xiàn)在運行時間減少、功耗降低、開發(fā)效率提高這幾大方面,進步相當(dāng)顯著。

Hinton其中第一次明確提到計算能力是其研究能成功的三大條件之一:“provided that computers were fast enough, data sets were big enough,and the initial weights were close enough to a good solution”。
Hinton老爺子2006年的算法突破終究離不開當(dāng)時的數(shù)據(jù)集與計算機硬件。


Deep learning與Neural Network


深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究。含多隱層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。

Deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發(fā)展。大約二三十年前,neural network曾經(jīng)是ML領(lǐng)域特別火熱的一個方向,但是后來確慢慢淡出了,原因包括以下幾個方面:

1)比較容易過擬合,參數(shù)比較難tune,而且需要不少trick;
2)訓(xùn)練速度比較慢,在層次比較少(小于等于3)的情況下效果并不比其它方法更優(yōu);

所以中間有大約20多年的時間,神經(jīng)網(wǎng)絡(luò)被關(guān)注很少,這段時間基本上是SVM和boosting算法的天下。但是,一個癡心的老先生Hinton,他堅持了下來,并最終(和其它人一起B(yǎng)engio、Yann.lecun等)提成了一個實際可行的deep learning框架。

Deep learning與傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)之間有相同的地方也有很多不同。

二者的相同在于deep learning采用了神經(jīng)網(wǎng)絡(luò)相似的分層結(jié)構(gòu),系統(tǒng)由包括輸入層、隱層(多層)、輸出層組成的多層網(wǎng)絡(luò),只有相鄰層節(jié)點之間有連接,同一層以及跨層節(jié)點之間相互無連接,每一層可以看作是一個logistic regression模型;這種分層結(jié)構(gòu),是比較接近人類大腦的結(jié)構(gòu)的。

而為了克服神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的問題,DL采用了與神經(jīng)網(wǎng)絡(luò)很不同的訓(xùn)練機制。

傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,采用的是back propagation的方式進行,簡單來講就是采用迭代的算法來訓(xùn)練整個網(wǎng)絡(luò),隨機設(shè)定初值,計算當(dāng)前網(wǎng)絡(luò)的輸出,然后根據(jù)當(dāng)前輸出和label之間的差去改變前面各層的參數(shù),直到收斂(整體是一個梯度下降法)。
而deep learning整體上是一個layer-wise的訓(xùn)練機制。這樣做的原因是因為,如果采用back propagation的機制,對于一個deep network(7層以上),殘差傳播到最前面的層已經(jīng)變得太小,出現(xiàn)所謂的gradient diffusion(梯度擴散)。


Deep learning訓(xùn)練過程


傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練方法為什么不能用在深度神經(jīng)網(wǎng)絡(luò)

BP算法作為傳統(tǒng)訓(xùn)練多層網(wǎng)絡(luò)的典型算法,實際上對僅含幾層網(wǎng)絡(luò),該訓(xùn)練方法就已經(jīng)很不理想。深度結(jié)構(gòu)(涉及多個非線性處理單元層)非凸目標(biāo)代價函數(shù)中普遍存在的局部最小是訓(xùn)練困難的主要來源。

BP算法存在的問題:

(1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小;
(2)收斂到局部最小值:尤其是從遠(yuǎn)離最優(yōu)區(qū)域開始的時候(隨機值初始化會導(dǎo)致這種情況的發(fā)生);
(3)一般,我們只能用有標(biāo)簽的數(shù)據(jù)來訓(xùn)練:但大部分的數(shù)據(jù)是沒標(biāo)簽的,而大腦可以從沒有標(biāo)簽的的數(shù)據(jù)中學(xué)習(xí);

deep learning訓(xùn)練過程

如果對所有層同時訓(xùn)練,時間復(fù)雜度會太高;如果每次訓(xùn)練一層,偏差就會逐層傳遞。這會面臨跟上面監(jiān)督學(xué)習(xí)中相反的問題,會嚴(yán)重欠擬合(因為深度網(wǎng)絡(luò)的神經(jīng)元和參數(shù)太多了)。

2006年,hinton提出了在非監(jiān)督數(shù)據(jù)上建立多層神經(jīng)網(wǎng)絡(luò)的一個有效方法,簡單的說,分為兩步,
一是每次訓(xùn)練一層網(wǎng)絡(luò),二是調(diào)優(yōu),使原始表示x向上生成的高級表示r和該高級表示r向下生成的x’盡可能一致。方法是:

1)首先逐層構(gòu)建單層神經(jīng)元,這樣每次都是訓(xùn)練一個單層網(wǎng)絡(luò)。
2)當(dāng)所有層訓(xùn)練完后,Hinton使用wake-sleep算法進行調(diào)優(yōu)。

將除最頂層的其它層間的權(quán)重變?yōu)殡p向的,這樣最頂層仍然是一個單層神經(jīng)網(wǎng)絡(luò),而其它層則變?yōu)榱藞D模型。向上的權(quán)重用于“認(rèn)知”,向下的權(quán)重用于“生成”。然后使用Wake-Sleep算法調(diào)整所有的權(quán)重。讓認(rèn)知和生成達(dá)成一致,也就是保證生成的最頂層表示能夠盡可能正確的復(fù)原底層的結(jié)點。比如頂層的一個結(jié)點表示人臉,那么所有人臉的圖像應(yīng)該激活這個結(jié)點,并且這個結(jié)果向下生成的圖像應(yīng)該能夠表現(xiàn)為一個大概的人臉圖像。Wake-Sleep算法分為醒(wake)和睡(sleep)兩個部分。


1)wake階段:認(rèn)知過程,通過外界的特征和向上的權(quán)重(認(rèn)知權(quán)重)產(chǎn)生每一層的抽象表示(結(jié)點狀態(tài)),并且使用梯度下降修改層間的下行權(quán)重(生成權(quán)重)。也就是“如果現(xiàn)實跟我想象的不一樣,改變我的權(quán)重使得我想象的東西就是這樣的”。
2)sleep階段:生成過程,通過頂層表示(醒時學(xué)得的概念)和向下權(quán)重,生成底層的狀態(tài),同時修改層間向上的權(quán)重。也就是“如果夢中的景象不是我腦中的相應(yīng)概念,改變我的認(rèn)知權(quán)重使得這種景象在我看來就是這個概念”。


備注:wake階段的解釋

deep learning訓(xùn)練過程具體如下:

1)使用自下上升非監(jiān)督學(xué)習(xí)(就是從底層開始,一層一層的往頂層訓(xùn)練):
采用無標(biāo)定數(shù)據(jù)(有標(biāo)定數(shù)據(jù)也可)分層訓(xùn)練各層參數(shù),這一步可以看作是一個無監(jiān)督訓(xùn)練過程,是和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)區(qū)別最大的部分(這個過程可以看作是feature learning過程):

具體的,先用無標(biāo)定數(shù)據(jù)訓(xùn)練第一層,訓(xùn)練時先學(xué)習(xí)第一層的參數(shù)(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經(jīng)網(wǎng)絡(luò)的隱層),由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠?qū)W習(xí)到數(shù)據(jù)本身的結(jié)構(gòu),從而得到比輸入更具有表示能力的特征;在學(xué)習(xí)得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓(xùn)練第n層,由此分別得到各層的參數(shù);

2)自頂向下的監(jiān)督學(xué)習(xí)(就是通過帶標(biāo)簽的數(shù)據(jù)去訓(xùn)練,誤差自頂向下傳輸,對網(wǎng)絡(luò)進行微調(diào))

基于第一步得到的各層參數(shù)進一步fine-tune整個多層模型的參數(shù),這一步是一個有監(jiān)督訓(xùn)練過程;第一步類似神經(jīng)網(wǎng)絡(luò)的隨機初始化初值過程,由于DL的第一步不是隨機初始化,而是通過學(xué)習(xí)輸入數(shù)據(jù)的結(jié)構(gòu)得到的,因而這個初值更接近全局最優(yōu),從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功于第一步的feature learning過程。


Deep Learning的常用模型或者方法


AutoEncoder自動編碼器

Deep Learning最簡單的一種方法是利用人工神經(jīng)網(wǎng)絡(luò)的特點,人工神經(jīng)網(wǎng)絡(luò)(ANN)本身就是具有層次結(jié)構(gòu)的系統(tǒng),如果給定一個神經(jīng)網(wǎng)絡(luò),我們假設(shè)其輸出與輸入是相同的,然后訓(xùn)練調(diào)整其參數(shù),得到每一層中的權(quán)重。自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動編碼器就是一種盡可能復(fù)現(xiàn)輸入信號的神經(jīng)網(wǎng)絡(luò)。為了實現(xiàn)這種復(fù)現(xiàn),自動編碼器就必須捕捉可以代表輸入數(shù)據(jù)的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。

具體過程簡單的說明如下:

1)給定無標(biāo)簽數(shù)據(jù),用非監(jiān)督學(xué)習(xí)學(xué)習(xí)特征:

在我們之前的神經(jīng)網(wǎng)絡(luò)中,如第一個圖,我們輸入的樣本是有標(biāo)簽的,即(input, target),這樣我們根據(jù)當(dāng)前輸出和target(label)之間的差去改變前面各層的參數(shù),直到收斂。但現(xiàn)在我們只有無標(biāo)簽數(shù)據(jù),也就是右邊的圖。那么這個誤差怎么得到呢?

如上圖,我們將input輸入一個encoder編碼器,就會得到一個code,這個code也就是輸入的一個表示,那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么如果輸出的這個信息和一開始的輸入信號input是很像的(理想情況下就是一樣的),那很明顯,我們就有理由相信這個code是靠譜的。所以,我們就通過調(diào)整encoder和decoder的參數(shù),使得重構(gòu)誤差最小,這時候我們就得到了輸入input信號的第一個表示了,也就是編碼code了。因為是無標(biāo)簽數(shù)據(jù),所以誤差的來源就是直接重構(gòu)后與原輸入相比得到

2)通過編碼器產(chǎn)生特征,然后訓(xùn)練下一層。這樣逐層訓(xùn)練:

那上面我們就得到第一層的code,我們的重構(gòu)誤差最小讓我們相信這個code就是原輸入信號的良好表達(dá)了,或者牽強點說,它和原信號是一模一樣的(表達(dá)不一樣,反映的是一個東西)。那第二層和第一層的訓(xùn)練方式就沒有差別了,我們將第一層輸出的code當(dāng)成第二層的輸入信號,同樣最小化重構(gòu)誤差,就會得到第二層的參數(shù),并且得到第二層輸入的code,也就是原輸入信息的第二個表達(dá)了。其他層就同樣的方法炮制就行了(訓(xùn)練這一層,前面層的參數(shù)都是固定的,并且他們的decoder已經(jīng)沒用了,都不需要了)。

3)有監(jiān)督微調(diào):

經(jīng)過上面的方法,我們就可以得到很多層了。至于需要多少層(或者深度需要多少,這個目前本身就沒有一個科學(xué)的評價方法)需要自己試驗調(diào)了。每一層都會得到原始輸入的不同的表達(dá)。當(dāng)然了,我們覺得它是越抽象越好了,就像人的視覺系統(tǒng)一樣。

到這里,這個AutoEncoder還不能用來分類數(shù)據(jù),因為它還沒有學(xué)習(xí)如何去連結(jié)一個輸入和一個類。它只是學(xué)會了如何去重構(gòu)或者復(fù)現(xiàn)它的輸入而已。或者說,它只是學(xué)習(xí)獲得了一個可以良好代表輸入的特征,這個特征可以最大程度上代表原輸入信號。那么,為了實現(xiàn)分類,我們就可以在AutoEncoder的最頂?shù)木幋a層添加一個分類器(例如(LogicalRegression) 邏輯回歸、SVM等),然后通過標(biāo)準(zhǔn)的多層神經(jīng)網(wǎng)絡(luò)的監(jiān)督訓(xùn)練方法(梯度下降法)去訓(xùn)練。

也就是說,這時候,我們需要將最后層的特征code輸入到最后的分類器,通過有標(biāo)簽樣本,通過監(jiān)督學(xué)習(xí)進行微調(diào),這也分兩種,一個是只調(diào)整分類器(黑色部分):

另一種:通過有標(biāo)簽樣本,微調(diào)整個系統(tǒng):(如果有足夠多的數(shù)據(jù),這個是最好的。end-to-end learning端對端學(xué)習(xí))

一旦監(jiān)督訓(xùn)練完成,這個網(wǎng)絡(luò)就可以用來分類了。神經(jīng)網(wǎng)絡(luò)的最頂層可以作為一個線性分類器,然后我們可以用一個更好性能的分類器去取代它。

在研究中可以發(fā)現(xiàn),如果在原有的特征中加入這些自動學(xué)習(xí)得到的特征可以大大提高精確度,甚至在分類問題中比目前最好的分類算法效果還要好!

自動編碼參考文獻(xiàn)
Autoencoders were first introduced in the 1980s by Hinton and the PDP group (Rumelhart et al., 1986 [18]) to address the problem of backpropagation without a teacher, by using the input data as the teacher.
《Learning internal representations by error propagation》

AutoEncoder存在一些變體,這里簡要介紹下兩個:

Sparse AutoEncoder稀疏自動編碼器:

當(dāng)然,我們還可以繼續(xù)加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎(chǔ)上加上L1的Regularity限制(L1主要是約束每一層中的節(jié)點中大部分都要為0,只有少數(shù)不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder法。

如上圖,其實就是限制每次得到的表達(dá)code盡量稀疏。因為稀疏的表達(dá)往往比其他的表達(dá)要有效(人腦好像也是這樣的,某個輸入只是刺激某些神經(jīng)元,其他的大部分的神經(jīng)元是受到抑制的)。

Denoising AutoEncoders降噪自動編碼器:

降噪自動編碼器DA是在自動編碼器的基礎(chǔ)上,訓(xùn)練數(shù)據(jù)加入噪聲,所以自動編碼器必須學(xué)習(xí)去去除這種噪聲而獲得真正的沒有被噪聲污染過的輸入。因此,這就迫使編碼器去學(xué)習(xí)輸入信號的更加魯棒的表達(dá),這也是它的泛化能力比一般編碼器強的原因。DA可以通過梯度下降算法去訓(xùn)練。

備注: 降噪自動編碼器DA 可以使用梯度下降的方法進行訓(xùn)練,降噪自動編碼器DA只有一層,而梯度彌散和局部最優(yōu)是相對多層而言的。
自頂向下 微調(diào)整個網(wǎng)絡(luò)的參數(shù)
把深度網(wǎng)絡(luò)看做多層神經(jīng)網(wǎng)絡(luò),我們傳統(tǒng)的訓(xùn)練神經(jīng)網(wǎng)絡(luò)的方法是先隨機的初始化網(wǎng)絡(luò)的參數(shù),然后用有標(biāo)簽樣本來進行BP訓(xùn)練整個網(wǎng)絡(luò)。但這樣的訓(xùn)練對多層網(wǎng)絡(luò)來說會產(chǎn)生梯度擴散,隨機的初始化也會容易陷入不好的局部最小值,總之,用傳統(tǒng)方法去訓(xùn)練多層深度網(wǎng)絡(luò)是不好的。
有效的深度網(wǎng)絡(luò)訓(xùn)練方法就是逐層的非監(jiān)督訓(xùn)練前面的層,然后再堆疊一個分類層。我們前面逐層預(yù)訓(xùn)練的得到的參數(shù)給我們的整個神經(jīng)網(wǎng)絡(luò)提供一個比較好的初始化的參數(shù),這樣可以更好的避免局部最優(yōu),然后我們再用有標(biāo)簽樣本來訓(xùn)練這整個網(wǎng)絡(luò),這樣可以避免整個網(wǎng)絡(luò)BP產(chǎn)生的梯度擴散問題。這樣的訓(xùn)練方法對深度網(wǎng)絡(luò)來說才是有效的。


Sparse Coding稀疏編碼

如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數(shù)中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是系數(shù),我們可以得到這樣一個優(yōu)化問題:

Min |I – O|,其中I表示輸入,O表示輸出。

通過求解這個最優(yōu)化式子,我們可以求得系數(shù)ai和基Φi,這些系數(shù)和基就是輸入的另外一種近似表達(dá)。
因此,它們可以用來表達(dá)輸入I,這個過程也是自動學(xué)習(xí)得到的。如果我們在上述式子上加上L1的Regularity限制,得到:

Min |I – O| + u*(|a1| + |a2| + … + |an |)

這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來。
“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠(yuǎn)大于零的元素。要求系數(shù) ai 是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數(shù)遠(yuǎn)大于零。選擇使用具有稀疏性的分量來表示我們的輸入數(shù)據(jù)是有原因的,因為絕大多數(shù)的感官數(shù)據(jù),比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經(jīng)元,但對于某些圖像或者邊緣只有很少的神經(jīng)元興奮,其他都處于抑制狀態(tài))。

稀疏編碼算法是一種無監(jiān)督學(xué)習(xí)方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數(shù)據(jù)。雖然形如主成分分析技術(shù)(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數(shù)比輸入向量的維數(shù)要大)。超完備基的好處是它們能更有效地找出隱含在輸入數(shù)據(jù)內(nèi)部的結(jié)構(gòu)與模式。然而,對于超完備基來說,系數(shù)ai不再由輸入向量唯一確定。因此,在稀疏編碼算法中,我們另加了一個評判標(biāo)準(zhǔn)“稀疏性”來解決因超完備而導(dǎo)致的退化(degeneracy)問題。(詳細(xì)過程請參考:UFLDL Tutorial稀疏編碼)

比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。

這里可能大家會有疑問,為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是因為不同方向的Edge就能夠描述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結(jié)果,上上層又是上一層的組合basis……

Sparse coding分為兩個部分:

1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學(xué)習(xí)得到一組基[Φ1, Φ2, …],也就是字典。

稀疏編碼是k-means算法的變體,其訓(xùn)練過程也差不多(EM算法的思想:如果要優(yōu)化的目標(biāo)函數(shù)包含兩個變量,如L(W, B),那么我們可以先固定W,調(diào)整B使得L最小,然后再固定B,調(diào)整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法可以見我的博客:“從最大似然到EM算法淺解”)。

訓(xùn)練過程就是一個重復(fù)迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標(biāo)函數(shù)最小。

每次迭代分兩步:

a)固定字典Φ[k],然后調(diào)整a[k],使得上式,即目標(biāo)函數(shù)最小(即解LASSO問題)。
b)然后固定住a [k],調(diào)整Φ [k],使得上式,即目標(biāo)函數(shù)最小(即解凸QP問題)。

不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。

2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達(dá)了。

例如:


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Restricted Boltzmann Machine (RBM)限制波爾茲曼機

Deep Learning(深度學(xué)習(xí))學(xué)習(xí)筆記整理系列之(六)
上面網(wǎng)頁寫的比較亂,有待進一步優(yōu)化和重新總結(jié)。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

受限玻爾茲曼機(RBM)學(xué)習(xí)筆記(三)能量函數(shù)和概率分布

RBM MATLAB code

《A practical guide to training restricted Boltzmann machines V1》

《A practical guide to training restricted Boltzmann machines V2》
RBM訓(xùn)練指導(dǎo)手冊粗略(A Practical Guide to Training Restricted Boltzmann Machines)

A Beginner’s Tutorial for Restricted Boltzmann Machines


Convolutional Neural Networks卷積神經(jīng)網(wǎng)絡(luò)


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Deep Learning(深度學(xué)習(xí))學(xué)習(xí)筆記整理系列之(七)
上面網(wǎng)頁講解比較粗糙,需要重新整理和總結(jié)。
卷積神經(jīng)網(wǎng)絡(luò)請閱讀下面博文
李宏毅機器學(xué)習(xí)課程10~~~卷積神經(jīng)網(wǎng)絡(luò)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
訓(xùn)練算法與傳統(tǒng)的BP算法差不多。主要包括4步,這4步被分為兩個階段:

第一階段,向前傳播階段:

a)從樣本集中取一個樣本(X,Yp),將X輸入網(wǎng)絡(luò);
b)計算相應(yīng)的實際輸出Op。

在此階段,信息從輸入層經(jīng)過逐級的變換,傳送到輸出層。這個過程也是網(wǎng)絡(luò)在完成訓(xùn)練后正常運行時執(zhí)行的過程。在此過程中,網(wǎng)絡(luò)執(zhí)行的是計算(實際上就是輸入與每層的權(quán)值矩陣相點乘,得到最后的輸出結(jié)果):

Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))

第二階段,向后傳播階段

a)算實際輸出Op與相應(yīng)的理想輸出Yp的差;
b)按極小化誤差的方法反向傳播調(diào)整權(quán)矩陣。

BP 算法請閱讀下面的博文
李宏毅機器學(xué)習(xí)課程7~~~反向傳播
Calculus on Computational Graphs: Backpropagation


卷積神經(jīng)網(wǎng)絡(luò)CNN基本概念筆記

參考文獻(xiàn)和Deep Learning學(xué)習(xí)資源


參考文獻(xiàn)


吳恩達(dá) Andrew Ng 的公開課

無監(jiān)督特征學(xué)習(xí)——Unsupervised feature learning and deep learning

Deep Learning(深度學(xué)習(xí))學(xué)習(xí)筆記整理系列

UFLDL_Tutorial

UFLDL教程

2012 Machine Learning and AI via Brain simulations

2011Machine Learning and AI via Brain simulations - Stanford Computer

NIPS - Video Machine Learning and AI via Brain simulations

2013-08-01 Prof. Andrew Ng: “Deep Learning: Machine learning via Large-scale Brain Simulations”

Hugo Larochelle 教授的神經(jīng)網(wǎng)絡(luò)課程
http://info.usherbrooke.ca/hlarochelle/cours/ift725_A2013/contenu.html

deep learning at oxford 2015

總結(jié)

以上是生活随笔為你收集整理的深度学习笔记(待续)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。