深度学习-基本思想
深度學(xué)習(xí)-基本思想
- 背景
- 基本思想
- 淺層學(xué)習(xí)和深度學(xué)習(xí)
- 深度學(xué)習(xí)結(jié)構(gòu)
- TensorFlow入門
背景
機器學(xué)習(xí)(Machine Learning)是一門專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善自身的性能的學(xué)科。1959年美國的塞繆爾(Samuel)設(shè)計了一個下棋程序,這個程序具有學(xué)習(xí)能力,它可以在不斷的對弈中改善自己的棋藝。4年后,這個程序戰(zhàn)勝了設(shè)計者本人。又過了3年,這個程序戰(zhàn)勝了美國一個保持8年之久的常勝不敗的冠軍。
機器學(xué)習(xí)雖然發(fā)展了幾十年,但還是存在很多沒有良好解決的問題:例如圖像識別、語音識別、自然語言理解、天氣預(yù)測、基因表達(dá)、內(nèi)容推薦等等。目前我們通過機器學(xué)習(xí)去解決這些問題的思路都是這樣的(以視覺感知為例子):從開始的通過傳感器(例如CMOS)來獲得數(shù)據(jù)。然后經(jīng)過預(yù)處理、特征提取、特征選擇,再到推理、預(yù)測或者識別。最后一個部分,也就是機器學(xué)習(xí)的部分,絕大部分的工作是在這方面做的,也存在很多的paper和研究。而中間的三部分,概括起來就是特征表達(dá)。良好的特征表達(dá),對最終算法的準(zhǔn)確性起了非常關(guān)鍵的作用,而且系統(tǒng)主要的計算和測試工作都耗在這一大部分。但,這塊實際中一般都是人工完成的。靠人工提取特征。然而,手工地選取特征是一件非常費力、啟發(fā)式(需要專業(yè)知識)的方法,能不能選取好很大程度上靠經(jīng)驗和運氣,而且它的調(diào)節(jié)需要大量的時間。
深度學(xué)習(xí)Deep Learning可以自動地學(xué)習(xí)一些特征,看它的一個別名Unsupervised Feature Learning,Unsupervised的意思就是不要人參與特征的選取過程。
2012年6月,《紐約時報》披露了Google Brain項目,這個項目是由著名的斯坦福大學(xué)的機器學(xué)習(xí)教授Andrew Ng和在大規(guī)模計算機系統(tǒng)方面的世界頂尖專家JeffDean共同主導(dǎo),用16000個CPU Core的并行計算平臺訓(xùn)練一種稱為“深度神經(jīng)網(wǎng)絡(luò)”(DNN,Deep Neural Networks)的機器學(xué)習(xí)模型,在語音識別和圖像識別等領(lǐng)域獲得了巨大的成功。
2013年1月,在百度年會上,創(chuàng)始人兼CEO李彥宏高調(diào)宣布要成立百度研究院,其中第一個成立的就是“深度學(xué)習(xí)研究所”(IDL,Institue of Deep Learning)。
短短的幾年之內(nèi),深度學(xué)習(xí)推廣到了機器學(xué)習(xí)的各個領(lǐng)域,包含圖像識別、語音識別、自然語言處理、機器人、生物信息處理、化學(xué)、電腦游戲、搜索引擎、網(wǎng)絡(luò)廣告投放、醫(yī)學(xué)自動診斷和金融等。
基本思想
假設(shè)有一個系統(tǒng)S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>……=>Sn => O,如果輸出O等于輸入I,即輸入I經(jīng)過這個系統(tǒng)變化之后沒有任何的信息損失(這是不可能的。信息論中有個“信息逐層丟失”的說法(信息處理不等式),設(shè)處理a信息得到b,再對b處理得到c,那么可以證明:a和c的互信息不會超過a和b的互信息。這表明信息處理不會增加信息,大部分處理會丟失信息。)保持了不變,這意味著輸入I經(jīng)過每一層Si都沒有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另外一種表示。Deep
Learning需要自動地學(xué)習(xí)特征,假設(shè)有一堆輸入I(如一堆圖像或者文本),設(shè)計了一個系統(tǒng)S(有n層),通過調(diào)整系統(tǒng)中參數(shù),使得它的輸出仍然是輸入I,那么就可以自動地獲取得到輸入I的一系列層次特征,即S1,…, Sn。對于深度學(xué)習(xí)來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這種方式,就可以實現(xiàn)對輸入信息進(jìn)行分級表達(dá)了。另外,前面是假設(shè)輸出嚴(yán)格地等于輸入,這個限制太嚴(yán)格,可以略微地放松這個限制,例如只要使得輸入與輸出的差別盡可能地小即可,上述就是Deep Learning的基本思想。
淺層學(xué)習(xí)和深度學(xué)習(xí)
淺層學(xué)習(xí)(Shallow Learning)是機器學(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í)(Deep Learning)是機器學(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)了強大的從少數(shù)樣本集中學(xué)習(xí)數(shù)據(jù)集本質(zhì)特征的能力。(多層的好處是可以用較少的參數(shù)表示復(fù)雜的函數(shù))。
深度學(xué)習(xí)結(jié)構(gòu)
深度學(xué)習(xí)是機器學(xué)習(xí)的一個分支,它除了可以學(xué)習(xí)特征和任務(wù)之間的關(guān)聯(lián),還能自動從簡單特征中提取更加復(fù)雜的特征。
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)包括輸入層,隱藏層,和輸出,神經(jīng)網(wǎng)絡(luò)的流程分為前向過程和反向過程。反向過程一般用于訓(xùn)練。每個神經(jīng)元上面都有對于一個輸入的權(quán)值,以及一個偏置,還有一個激活函數(shù)。所以一個前向過程的流程就是input輸入,然后經(jīng)過第一層神經(jīng)元運算(乘上權(quán)值,加上偏執(zhí),激活函數(shù)運算一次),得到輸出,然后第一層的輸出作為第二層的輸入,運算,得到第二層的輸出……直到到輸出層運算,然后得到結(jié)果。神經(jīng)網(wǎng)絡(luò)就是依靠這樣一套機制來進(jìn)行計算和預(yù)測的。 假設(shè)權(quán)值和偏置已經(jīng)訓(xùn)練好了,那么對于一個新的輸入,進(jìn)行這樣的過程,就能夠得到一個預(yù)測。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程就是找到權(quán)值和偏置這些參數(shù)的值,使得輸出的結(jié)果達(dá)到最優(yōu)。
TensorFlow入門
TensorFlow的第一個單詞Tensor表明了它的數(shù)據(jù)結(jié)構(gòu),Flow則體現(xiàn)了它的計算模型。TensorFlow通過計算圖的形式來表示計算的編程系統(tǒng),TensorFlow中所有計算都會被轉(zhuǎn)化為計算圖上的節(jié)點。所以首先得創(chuàng)建一個數(shù)據(jù)流流圖, 然后再將數(shù)據(jù)(數(shù)據(jù)以張量(tensor)的形式存在)放在數(shù)據(jù)流圖中計算. 節(jié)點(Nodes)在圖中表示數(shù)學(xué)操作,圖中的線(edges)則表示在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組, 即張量(tensor). 訓(xùn)練模型時tensor會不斷的從數(shù)據(jù)流圖中的一個節(jié)點flow到另一節(jié)點, 這就是TensorFlow的由來。
張量中主要保存了三個屬性:名字、維度和類型。張量的名字是張量的唯一標(biāo)識,同時也給出了這個張量是如何計算出來的。張量的維度描述了一個張量的維度信息。張量的類型對應(yīng)了張量中的數(shù)據(jù)類型。
會話(Session)是 Tensorflow 為了控制,和輸出文件的執(zhí)行的語句。 運行Session可以獲得要得知的運算結(jié)果,并管理TensorFlow程序運行時的資源。
搭建神經(jīng)網(wǎng)絡(luò)基本流程:
1.訓(xùn)練的數(shù)據(jù)
2.定義節(jié)點準(zhǔn)備接收數(shù)據(jù)
3.定義神經(jīng)層網(wǎng)絡(luò)結(jié)構(gòu)(輸入層、隱含層、輸出層)
4.定義 loss 表達(dá)式
5.選擇 optimizer 使 loss 達(dá)到最小
總結(jié)
- 上一篇: 移动电源/便携式汽车应急启动电源UKCA
- 下一篇: PHP写的ICQ呼机