為什么需要機(jī)器學(xué)習(xí)?
有些任務(wù)直接編碼較為復(fù)雜,我們不能處理所有的細(xì)微之處和簡單編碼,因此,機(jī)器學(xué)習(xí)很有必要。相反,我們向機(jī)器學(xué)習(xí)算法提供大量數(shù)據(jù),讓算法不斷探索數(shù)據(jù)并構(gòu)建模型來解決問題。比如:在新的雜亂照明場景內(nèi),從新的角度識別三維物體;編寫一個(gè)計(jì)算信用卡交易詐騙概率的程序。
機(jī)器學(xué)習(xí)方法如下:它沒有為每個(gè)特定的任務(wù)編寫相應(yīng)的程序,而是收集大量事例,為給定輸入指定正確輸出。算法利用這些事例產(chǎn)生程序。該程序與手寫程序不同,可能包含數(shù)百萬的數(shù)據(jù)量,也適用于新事例以及訓(xùn)練過的數(shù)據(jù)。若數(shù)據(jù)改變,程序在新數(shù)據(jù)上訓(xùn)練且被更新。大量的計(jì)算比支付手寫程序要便宜的多。
機(jī)器學(xué)習(xí)的應(yīng)用如下:
模式識別:識別實(shí)際場景的面部或表情、語言識別。
識別異常:信用卡交易順序異常,核電廠傳感器讀數(shù)模式異常。
預(yù)測:未來股價(jià)或貨幣匯率,個(gè)人觀影喜好。
什么是神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是一種通用機(jī)器學(xué)習(xí)模型,是一套特定的算法集,在機(jī)器學(xué)習(xí)領(lǐng)域掀起了一場變革,本身就是普通函數(shù)的逼近,可以應(yīng)用到任何機(jī)器學(xué)習(xí)輸入到輸出的復(fù)雜映射問題。一般來說,神經(jīng)網(wǎng)絡(luò)架構(gòu)可分為3類:
前饋神經(jīng)網(wǎng)絡(luò):是最常見的類型,第一層為輸入,最后一層為輸出。如果有多個(gè)隱藏層,則稱為“深度”神經(jīng)網(wǎng)絡(luò)。它能夠計(jì)算出一系列事件間相似轉(zhuǎn)變的變化,每層神經(jīng)元的活動(dòng)是下一層的非線性函數(shù)。
循環(huán)神經(jīng)網(wǎng)絡(luò):各節(jié)點(diǎn)之間構(gòu)成循環(huán)圖,可以按照箭頭的方向回到初始點(diǎn)。循環(huán)神經(jīng)網(wǎng)絡(luò)具有復(fù)雜的動(dòng)態(tài),難以訓(xùn)練,它模擬連續(xù)數(shù)據(jù),相當(dāng)于每個(gè)時(shí)間片段具有一個(gè)隱藏層的深度網(wǎng)絡(luò),除了在每個(gè)時(shí)間片段上使用相同的權(quán)重,也有輸入。網(wǎng)絡(luò)可以記住隱藏狀態(tài)的信息,但是很難用這點(diǎn)來訓(xùn)練網(wǎng)絡(luò)。
對稱連接網(wǎng)絡(luò):和循環(huán)神經(jīng)網(wǎng)絡(luò)一樣,但單元間的連接是對稱的(即在兩個(gè)方向的連接權(quán)重相同),它比循環(huán)神經(jīng)網(wǎng)絡(luò)更容易分析,但是功能受限。沒有隱藏單元的對稱連接的網(wǎng)絡(luò)被稱為“Hopfiels網(wǎng)絡(luò)”,有隱藏單元的對稱連接的網(wǎng)絡(luò)則被稱為“波茲曼機(jī)器”。
一、感知機(jī)(Perceptron)
作為第一代神經(jīng)網(wǎng)絡(luò),感知機(jī)是只有一個(gè)神經(jīng)元的計(jì)算模型。首先將原始輸入矢量轉(zhuǎn)化為特征矢量,再用手寫程序定義特征,然后學(xué)習(xí)如何對每個(gè)特征加權(quán)得到一個(gè)標(biāo)量,如果標(biāo)量值高于某一閾值,則認(rèn)為輸入矢量是目標(biāo)類的一個(gè)積極樣例。標(biāo)準(zhǔn)的感知機(jī)結(jié)構(gòu)是前饋模型,即輸入傳送到節(jié)點(diǎn),處理后產(chǎn)生輸出結(jié)果:從底部輸入,頂部輸出,如下圖所示。但也有其局限性:一旦確定了手寫編碼特征,在學(xué)習(xí)上就受到了較大限制。這對感知器來說是毀滅性的,盡管轉(zhuǎn)換類似于翻譯,但是模式識別的重點(diǎn)是識別模式。如果這些轉(zhuǎn)換形成了一個(gè)組,學(xué)習(xí)的感知器部分不能學(xué)會識別,所以需要使用多個(gè)特征單元識別子模式的轉(zhuǎn)換。
沒有隱藏單元的網(wǎng)絡(luò)在輸入輸出映射建模上也有很大局限性。增加線性單元層也解決不了,因?yàn)榫€性疊加依然是線性的,固定的非線性輸出也不能建立這種映射。因此需要建立多層自適應(yīng)的非線性隱藏單元。
二、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)
一直以來,機(jī)器學(xué)習(xí)研究廣泛集中在對象檢測上,但仍有諸多因素使其難以識別
識別對象:
對象分割、遮擋問題;
照明影響像素強(qiáng)度;
物體以各種不同的形式展現(xiàn);
相同功能的對象具有不同的物理形狀;
視覺不同帶來的變化;
維度跳躍問題。
復(fù)制特征方法是當(dāng)前CNN用于目標(biāo)檢測的主要方法,大規(guī)模的復(fù)制不同位置上相同的特征檢測圖,大大減少了要學(xué)習(xí)的自由參數(shù)數(shù)量。它使用不同的特征類型,每種類型都有自己的復(fù)制檢測圖,也允許以各種方式表示每個(gè)圖像塊。
CNN可用于手寫數(shù)字識別到3D對象識別等,但從彩色圖像中識別對象比手寫數(shù)字識別要復(fù)雜,它的類別、像素是數(shù)字的100倍(1000 vs 100,256*256彩色vs28*28灰度)。
2012年的ILSVRC-2012競賽中的ImageNet提供一個(gè)包含120萬張高分辨率訓(xùn)練圖像的數(shù)據(jù)集。測試圖像沒有標(biāo)注,參賽者需要識別圖像中對象的類型。獲勝者 Alex Krizhevsky開發(fā)了一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò),除了一些最大池化層,架構(gòu)還有7個(gè)隱藏層,前面都是卷積層,最后2層是全局連接。激活函數(shù)在每個(gè)隱藏層都是線性單元,比邏輯單元速度更快,還使用競爭性規(guī)范標(biāo)準(zhǔn)抑制隱藏活動(dòng),有助于強(qiáng)度變化。硬件上,在兩個(gè)Nvidia GTX 580 GPU(超過1000個(gè)快速內(nèi)核)上使用一個(gè)高效卷積網(wǎng)絡(luò)實(shí)現(xiàn),非常適合矩陣乘法,具有很高的內(nèi)存帶寬。
三、循環(huán)神經(jīng)網(wǎng)絡(luò)( Recurrent Neural Network)
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)有兩個(gè)強(qiáng)大的屬性可以計(jì)算任何計(jì)算機(jī)計(jì)算出來的東西:(1)允許存儲大量有效信息的分布式隱藏狀態(tài)(2)用復(fù)雜的方式允許更新隱藏狀態(tài)的非線性動(dòng)態(tài)。RNN強(qiáng)大的計(jì)算能力和梯度消失(或爆炸)使其很難訓(xùn)練。通過多層反向傳播時(shí),若權(quán)重很小,則梯度呈指數(shù)縮??;若權(quán)重很大,則梯度呈指數(shù)增長。典型的前饋神經(jīng)網(wǎng)絡(luò)的一些隱藏層可以應(yīng)對指數(shù)效應(yīng),另一方面,在長序列RNN中,梯度容易消失(或爆照),即使有好的初始權(quán)重,也很難檢測出當(dāng)前依賴于多個(gè)時(shí)間輸入的目標(biāo)輸出因此很難處理遠(yuǎn)程依賴性。
學(xué)習(xí)RNN的方法如下:
長短期記憶:用具有長期記憶值的小模塊制作RNN。
Hessian Free Optimization:使用優(yōu)化器處理梯度消失問題。
回聲狀態(tài)網(wǎng)絡(luò):初始化輸入→隱藏和隱藏→隱藏和輸出→隱藏鏈接,使隱藏狀態(tài)有一個(gè)巨大的弱耦合振蕩器儲備,可以選擇性的由輸入驅(qū)動(dòng)。
用動(dòng)量初始化:和回聲狀態(tài)網(wǎng)絡(luò)一樣,再用動(dòng)量學(xué)習(xí)所有連接。
四、長短期記憶網(wǎng)絡(luò)(Long/Short Term Memory Network)
Hochreiter & Schmidhuber(1997年)構(gòu)建了長短期記憶網(wǎng)絡(luò),解決了獲取RNN長時(shí)間記憶問題,使用乘法邏輯線性單元設(shè)計(jì)存儲單元,只要保持“寫入”門打開,信息就會寫入并保持在單元中,也可以打開“讀取”門從中獲取數(shù)據(jù)。
RNN可以閱讀行書,筆尖的輸入坐標(biāo)為(x,y,p),p代表筆是向上還是向下,輸出則為一個(gè)字符序列,使用一系列小圖像作為輸入而不是筆坐標(biāo)。Graves & Schmidhuber(2009年)稱帶有LSTM的RNN是閱讀行書的最佳系統(tǒng)。
五、霍普菲爾德網(wǎng)絡(luò)(Hopfield Networks)
非線性循環(huán)網(wǎng)絡(luò)有很多種表現(xiàn)方式,較難分析:能達(dá)到穩(wěn)定、震蕩或餛飩狀態(tài)這三種表現(xiàn)形式。Hopfield網(wǎng)絡(luò)是由有循環(huán)連接的二進(jìn)制閾值單元組成。1982年,約翰·霍普菲爾德發(fā)現(xiàn),如果連接對稱,則存在一個(gè)全局能量函數(shù),整個(gè)網(wǎng)絡(luò)的每個(gè)二進(jìn)制“結(jié)構(gòu)”都有能量,而二進(jìn)制閾值決策規(guī)則使網(wǎng)絡(luò)為能量函數(shù)設(shè)置一個(gè)最小值。使用這種計(jì)算類型最簡單的方法是將記憶作為神經(jīng)網(wǎng)絡(luò)的能量最小值。使用能量最小值表示記憶給出了一個(gè)內(nèi)容可尋內(nèi)存,可通過了解局部內(nèi)容來訪問整個(gè)項(xiàng)目。
每記憶一次配置,都希望能產(chǎn)生一個(gè)能量最小值。但若有兩個(gè)最小值就會限制Hopfield網(wǎng)絡(luò)容量。伊麗莎白·加德納發(fā)現(xiàn)有一個(gè)更好的存儲規(guī)則,它使用了所有的權(quán)重。而不是試圖一次存儲多個(gè)矢量,她通過訓(xùn)練集進(jìn)行多次循環(huán),并用感知器收斂程序訓(xùn)練每個(gè)單元,使該矢量的所有其它單元具有正確的狀態(tài)。
六、玻爾茲曼機(jī)(Boltzmann Machine Network)
玻爾茲曼機(jī)是一種隨機(jī)循環(huán)神經(jīng)網(wǎng)絡(luò),可以被看作是Hopfield網(wǎng)絡(luò)的隨機(jī)生成產(chǎn)物,是最先學(xué)習(xí)內(nèi)部representations的神經(jīng)網(wǎng)絡(luò)之一。該算法旨在最大限度地提高機(jī)器在訓(xùn)練集中分配給二進(jìn)制矢量的概率的乘積,相當(dāng)于最大化其分配給訓(xùn)練矢量的對數(shù)概率之和,方法如下:
(1)網(wǎng)絡(luò)沒有外部輸入時(shí),使網(wǎng)絡(luò)在不同時(shí)間分布穩(wěn)定;
(2)每次對可見矢量采樣。
2012年,Salakhutdinov和Hinton為玻爾茲曼機(jī)寫了有效的小批量學(xué)習(xí)程序。2014年將模型更新,稱之為受限玻爾茲曼機(jī)。
七、深度信念網(wǎng)絡(luò)(Deep Belief Network)
反向傳播,是人工神經(jīng)網(wǎng)絡(luò)計(jì)算處理一批數(shù)據(jù)后每個(gè)神經(jīng)元的誤差分布的標(biāo)準(zhǔn)方法,但是也存在一些問題。首先要標(biāo)注訓(xùn)練數(shù)據(jù),但幾乎所有數(shù)據(jù)都沒有標(biāo)注;其次,學(xué)習(xí)時(shí)間不足,這意味著隱藏層數(shù)較多的網(wǎng)絡(luò)較慢;第三,可能會使局部陷入最不利局面。因此,對于深度網(wǎng)絡(luò)來說這遠(yuǎn)遠(yuǎn)不夠。
無監(jiān)督學(xué)習(xí)方法克服了反向傳播的限制,使用梯度方法調(diào)整權(quán)重有助于保持架構(gòu)的效率和簡單性,還可以將它用于對感官輸入結(jié)構(gòu)建模。特別的是,它調(diào)整權(quán)重,將產(chǎn)生感官輸入的生成模型概率最大化。信念網(wǎng)絡(luò)是由隨機(jī)變量組成的有向非循環(huán)圖,可推斷未觀測變量的狀態(tài),還可以調(diào)整變量間的交互,使網(wǎng)絡(luò)更可能產(chǎn)生訓(xùn)練數(shù)據(jù)。
早期圖形模型是專家定義圖像結(jié)構(gòu)和條件概率,這些圖形是稀疏連接的,他們專注于做正確的推論,而不是學(xué)習(xí)。但對于神經(jīng)網(wǎng)絡(luò)來說,學(xué)習(xí)是重點(diǎn),其目的不在于可解釋性或稀疏連接性使推斷變得更容易。
八、深度自動(dòng)編碼器(Deep Auto-encoders)
該架構(gòu)提供了兩種映射方式,好像是一個(gè)做非線性降維非常好的方法,它在訓(xùn)練事例的數(shù)量上是線性的(或更好的),而最終編碼模型相當(dāng)緊湊和快速。然而,使用反向傳播優(yōu)化深度自動(dòng)編碼器很困難,若初始權(quán)重較小,反向傳播梯度會消失。我們使用無監(jiān)督逐層預(yù)訓(xùn)練或像回聲狀態(tài)網(wǎng)絡(luò)一樣認(rèn)真的初始化權(quán)重。
對于預(yù)訓(xùn)練任務(wù)有三種不同類型的淺自動(dòng)編碼器:
(1)RBM作為自動(dòng)編碼器;
(2)去噪自動(dòng)編碼器;
(3)壓縮自動(dòng)編碼器。
對于沒有大量標(biāo)注的數(shù)據(jù)集,預(yù)訓(xùn)練有助于后續(xù)的判別式學(xué)習(xí)。即便是深度神經(jīng)網(wǎng)絡(luò),對于大量的標(biāo)注數(shù)據(jù)集,無監(jiān)督訓(xùn)練對權(quán)重初始化并不是必要的,預(yù)訓(xùn)練是初始化深度網(wǎng)絡(luò)權(quán)重的第一個(gè)好方法,現(xiàn)在也有其它方法。但如果擴(kuò)大網(wǎng)絡(luò),需要再次做預(yù)訓(xùn)練。
總結(jié)
傳統(tǒng)的編程方法是我們告訴計(jì)算機(jī)做什么,將大問題分解成很多小而精確的且計(jì)算機(jī)可以輕松執(zhí)行的任務(wù)。神經(jīng)網(wǎng)絡(luò)則不需要告訴計(jì)算機(jī)如何解決問題,而是從觀測到的數(shù)據(jù)中學(xué)習(xí),找到解決問題的辦法。
責(zé)任編輯:ct
評論
查看更多