主要內(nèi)容摘自網(wǎng)上撕攒,主要是學(xué)習(xí)使用咬像。
一、機(jī)器學(xué)習(xí)基礎(chǔ)
1疚脐、機(jī)器學(xué)習(xí)算法需要輸入少量(數(shù)據(jù)越多越好)標(biāo)記好的樣本亿柑,比如10張小狗的照片,其中1張標(biāo)記為1(意為狗)其它的標(biāo)記為0(意為不是狗)——本文主要使用監(jiān)督式棍弄、二叉分類望薄。
2、這些算法“學(xué)習(xí)”怎么樣正確將狗的圖片分類呼畸,然后再輸入一個(gè)新的圖片時(shí)痕支,可以期望算法輸出正確的圖片標(biāo)記(如輸入一張小狗圖片,輸出1蛮原;否則輸出0)卧须。
這通常是難以置信的:你的數(shù)據(jù)可能是模糊的,標(biāo)記也可能出錯(cuò);或者你的數(shù)據(jù)是手寫字母的圖片花嘶,用其實(shí)際表示的字母來標(biāo)記它笋籽。
二、感知機(jī)
感知機(jī)是最早的監(jiān)督式訓(xùn)練算法察绷,是神經(jīng)網(wǎng)絡(luò)構(gòu)建的基礎(chǔ)干签。
假如平面中存在? n? 個(gè)點(diǎn),并被分別標(biāo)記為“0”和“1”拆撼。此時(shí)加入一個(gè)新的點(diǎn)容劳,如果我們想知道這個(gè)點(diǎn)的標(biāo)記是什么(和之前提到的小狗圖片的辨別同理),我們要怎么做呢闸度?一種稍微“智能”的辦法則是去找出平面上的一條線來將不同標(biāo)記的數(shù)據(jù)點(diǎn)分開竭贩,并用這條線作為“分類器”來區(qū)分新數(shù)據(jù)點(diǎn)的標(biāo)記。
這種簡(jiǎn)單的感知機(jī)有一個(gè)明顯缺陷:只能學(xué)習(xí) 線性可分函數(shù) 莺禁。這個(gè)缺陷重要嗎留量?比如? XOR,這么簡(jiǎn)單的函數(shù)哟冬,都不能被線性分類器分類楼熄。
三、前饋神經(jīng)網(wǎng)絡(luò)
為了解決這個(gè)問題浩峡,我們要使用一種多層感知機(jī)可岂,也就是——前饋神經(jīng)網(wǎng)絡(luò):事實(shí)上,我們將要組合一群這樣的感知機(jī)來創(chuàng)建出一個(gè)更強(qiáng)大的學(xué)習(xí)機(jī)器翰灾。
神經(jīng)網(wǎng)絡(luò)實(shí)際上就是將大量之前講到的感知機(jī)進(jìn)行組合缕粹,用不同的方法進(jìn)行連接并作用在不同的激活函數(shù)上。
我們簡(jiǎn)單介紹下前向神經(jīng)網(wǎng)絡(luò)纸淮,其具有以下屬性:
一個(gè)輸入層平斩,一個(gè)輸出層,一個(gè)或多個(gè)隱含層咽块。上圖所示的神經(jīng)網(wǎng)絡(luò)中有一個(gè)三神經(jīng)元的輸入層绘面、一個(gè)四神經(jīng)元的隱含層、一個(gè)二神經(jīng)元的輸出層侈沪。
每一個(gè)神經(jīng)元都是一個(gè)上文提到的感知機(jī)飒货。
輸入層的神經(jīng)元作為隱含層的輸入,同時(shí)隱含層的神經(jīng)元也是輸出層神經(jīng)元的輸入峭竣。
每條建立在神經(jīng)元之間的連接都有一個(gè)權(quán)重??w??(與感知機(jī)中提到的權(quán)重類似)。
在??t??層的每個(gè)神經(jīng)元通常與前一層(??t – 1層?)中的每個(gè)神經(jīng)元都有連接(但你可以通過將這條連接的權(quán)重設(shè)為0來斷開這條連接)晃虫。
為了處理輸入數(shù)據(jù)皆撩,將輸入向量賦到輸入層中。在上例中,這個(gè)網(wǎng)絡(luò)可以計(jì)算一個(gè)3維輸入向量(由于只有3個(gè)輸入層神經(jīng)元)扛吞。假如輸入向量是?[7, 1, 2]呻惕,你將第一個(gè)輸入神經(jīng)元輸入7,中間的輸入1滥比,第三個(gè)輸入2亚脆。這些值將被傳播到隱含層,通過加權(quán)傳遞函數(shù)傳給每一個(gè)隱含層神經(jīng)元(這就是前向傳播)盲泛,隱含層神經(jīng)元再計(jì)算輸出(激活函數(shù))濒持。
輸出層和隱含層一樣進(jìn)行計(jì)算,輸出層的計(jì)算結(jié)果就是整個(gè)神經(jīng)網(wǎng)絡(luò)的輸出寺滚。
超線性
如果每一個(gè)感知機(jī)都只能使用一個(gè)線性激活函數(shù)會(huì)怎么樣柑营?整個(gè)網(wǎng)絡(luò)的最終輸出也仍然是將輸入數(shù)據(jù)通過一些線性函數(shù)計(jì)算過一遍,只是用一些在網(wǎng)絡(luò)中收集的不同權(quán)值調(diào)整了一下村视。換名話說官套,再多線性函數(shù)的組合還是線性函數(shù)。如果我們限定只能使用線性激活函數(shù)的話蚁孔,前饋神經(jīng)網(wǎng)絡(luò)其實(shí)比一個(gè)感知機(jī)強(qiáng)大不到哪里去奶赔,無論網(wǎng)絡(luò)有多少層。
正是這個(gè)原因杠氢,?大多數(shù)神經(jīng)網(wǎng)絡(luò)都是使用的非線性激活函數(shù)站刑,如對(duì)數(shù)函數(shù)、雙曲正切函數(shù)修然、階躍函數(shù)笛钝、整流函數(shù)等。不用這些非線性函數(shù)的神經(jīng)網(wǎng)絡(luò)只能學(xué)習(xí)輸入數(shù)據(jù)的線性組合愕宋。
反向傳播算法
大多數(shù)常見的應(yīng)用在 多層感知機(jī)的監(jiān)督式訓(xùn)練的算法都是反向傳播算法玻靡。基本的流程如下:
1中贝、將訓(xùn)練樣本通過神經(jīng)網(wǎng)絡(luò)進(jìn)行前向傳播計(jì)算囤捻。
2、計(jì)算輸出誤差邻寿,常用均方差
3蝎土、網(wǎng)絡(luò)誤差通過 隨機(jī)梯度下降 的方法來最小化。
隱含層
隱含層十分有趣绣否。根據(jù)?普適逼近原理?誊涯,一個(gè)具有有限數(shù)目神經(jīng)元的隱含層可以被訓(xùn)練成可逼近任意隨機(jī)函數(shù)。換句話說蒜撮,一層隱含層就強(qiáng)大到可以學(xué)習(xí)任何函數(shù)了暴构。這說明我們?cè)诙嚯[含層(如深度網(wǎng)絡(luò))的實(shí)踐中可以得到更好的結(jié)果跪呈。隱含層存儲(chǔ)了訓(xùn)練數(shù)據(jù)的內(nèi)在抽象表示,和人類大腦(簡(jiǎn)化的類比)保存有對(duì)真實(shí)世界的抽象一樣取逾。
大規(guī)模網(wǎng)絡(luò)中的難題
神經(jīng)網(wǎng)絡(luò)中可以有多個(gè)隱含層:這樣耗绿,在更高的隱含層里可以對(duì)其之前的隱含層構(gòu)建新的抽象。而且像之前也提到的砾隅,這樣可以更好的學(xué)習(xí)大規(guī)模網(wǎng)絡(luò)误阻。增加隱含層的層數(shù)通常會(huì)導(dǎo)致兩個(gè)問題:
1、梯度消失:隨著我們添加越來越多的隱含層晴埂,反向傳播傳遞給較低層的信息會(huì)越來越少究反。實(shí)際上,由于信息向前反饋邑时,不同層次間的梯度開始消失奴紧,對(duì)網(wǎng)絡(luò)中權(quán)重的影響也會(huì)變小。
2晶丘、過度擬合:也許這是機(jī)器學(xué)習(xí)的核心難題黍氮。簡(jiǎn)要來說,過度擬合指的是對(duì)訓(xùn)練數(shù)據(jù)有著過于好的識(shí)別效果浅浮,這時(shí)導(dǎo)至模型非常復(fù)雜沫浆。這樣的結(jié)果會(huì)導(dǎo)致對(duì)訓(xùn)練數(shù)據(jù)有非常好的識(shí)別較果,而對(duì)真實(shí)樣本的識(shí)別效果非常差滚秩。
四专执、深度學(xué)習(xí)
自編碼器(自動(dòng)編碼器)
大多數(shù)的機(jī)器學(xué)習(xí)入門課程都會(huì)讓你放棄前饋神經(jīng)網(wǎng)絡(luò)。但是實(shí)際上這里面大有可為郁油。
自編碼器就是一個(gè)典型的前饋神經(jīng)網(wǎng)絡(luò)本股,它的目標(biāo)就是學(xué)習(xí)一種對(duì)數(shù)據(jù)集的壓縮且分布式的表示方法(編碼思想)。
神經(jīng)網(wǎng)絡(luò)的目的是要訓(xùn)練去“重新建立”輸入數(shù)據(jù)桐腌,好像輸入和目標(biāo)輸出數(shù)據(jù)是一樣的拄显。換句話說:你正在讓神經(jīng)網(wǎng)絡(luò)的輸出與輸入是同一樣?xùn)|西,只是經(jīng)過了壓縮案站。(好像是通信問題)
自動(dòng)編碼器就是一種盡可能復(fù)現(xiàn)輸入信號(hào)的神經(jīng)網(wǎng)絡(luò)躬审。為了實(shí)現(xiàn)這種復(fù)現(xiàn),自動(dòng)編碼器就必須捕捉可以代表輸入數(shù)據(jù)的最重要的因素蟆盐,就像PCA那樣承边,找到可以代表原信息的主要成分。
例子壓縮輸入數(shù)據(jù):灰度圖像
這里有一個(gè)由28×28像素的灰度圖像組成的訓(xùn)練集石挂,且每一個(gè)像素的值都作為一個(gè)輸入層神經(jīng)元的輸入(這時(shí)輸入層就會(huì)有784個(gè)神經(jīng)元)博助。輸出層神經(jīng)元要有相同的數(shù)目(784),且每一個(gè)輸出神經(jīng)元的輸出值和輸入圖像的對(duì)應(yīng)像素灰度值相同痹愚。
在這樣的算法架構(gòu)背后富岳,神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的實(shí)際上并不是一個(gè)訓(xùn)練數(shù)據(jù)到標(biāo)記的“映射”罗心,而是去學(xué)習(xí)數(shù)據(jù)本身的內(nèi)在結(jié)構(gòu)和特征(也正是因?yàn)檫@,隱含層也被稱作特征探測(cè)器(feature detector))城瞎。通常隱含層中的神經(jīng)元數(shù)目要比輸入/輸入層的少,這是為了使神經(jīng)網(wǎng)絡(luò)只去學(xué)習(xí)最重要的特征并實(shí)現(xiàn)特征的降維疾瓮。
我們想在中間層用很少的結(jié)點(diǎn)去在概念層上學(xué)習(xí)數(shù)據(jù)脖镀、產(chǎn)生一個(gè)緊致的表示方法。
受限波爾茲曼機(jī)
受限波爾茲曼機(jī)( Restricted Boltzmann machines? RBM)狼电,一種可以在輸入數(shù)據(jù)集上學(xué)習(xí)概率分布的生成隨機(jī)神經(jīng)網(wǎng)絡(luò)蜒灰。
RBM由隱含層、可見層肩碟、偏置層組成强窖。和前饋神經(jīng)網(wǎng)絡(luò)不同,可見層和隱含層之間的連接是無方向性(值可以從可見層->隱含層或隱含層->可見層任意傳輸)且全連接的(每一個(gè)當(dāng)前層的神經(jīng)元與下一層的每個(gè)神經(jīng)元都有連接——如果允許任意層的任意神經(jīng)元連接到任意層去削祈,我們就得到了一個(gè)波爾茲曼機(jī)(非受限的))翅溺。
標(biāo)準(zhǔn)的RBM中,隱含和可見層的神經(jīng)元都是二態(tài)的(即神經(jīng)元的激活值只能是服從 伯努力分布 的0或1)髓抑,不過也存在其它非線性的變種咙崎。
到現(xiàn)在為止,我們已經(jīng)了解了隱含層中強(qiáng)大的特征探測(cè)器——自編碼器和RBM吨拍,但現(xiàn)在還沒有辦法有效的去利用這些功能褪猛。實(shí)際上,上面所用到的這些數(shù)據(jù)集都是特定的羹饰。而我們要找到一些方法來間接的使用這些探測(cè)出的特征伊滋。好消息是,已經(jīng)發(fā)現(xiàn)這些結(jié)構(gòu)可以通過棧式疊加來實(shí)現(xiàn)深度網(wǎng)絡(luò)队秩。這些網(wǎng)絡(luò)可以通過貪心法的思想訓(xùn)練笑旺,每次訓(xùn)練一層,以克服之前提到在反向傳播中梯度消失及過度擬合的問題刹碾。
棧式自編碼器
自編碼器的隱含層? t? 會(huì)作為? t + 1? 層的輸入層燥撞。第一個(gè)輸入層就是整個(gè)網(wǎng)絡(luò)的輸入層。利用貪心法訓(xùn)練每一層的步驟如下:
1迷帜、通過反向傳播的方法利用所有數(shù)據(jù)對(duì)第一層的自編碼器進(jìn)行訓(xùn)練(?t=1?物舒,上圖中的紅色連接部分)。
2戏锹、訓(xùn)練第二層的自編碼器??t=2??(綠色連接部分)冠胯。由于??t=2??的輸入層是??t=1??的隱含層,我們已經(jīng)不再關(guān)心?t=1??的輸入層锦针,可以從整個(gè)網(wǎng)絡(luò)中移除荠察。整個(gè)訓(xùn)練開始于將輸入樣本數(shù)據(jù)賦到??t=1??的輸入層置蜀,通過前向傳播至 t = 2 的輸出層。下面t = 2的權(quán)重(輸入->隱含和隱含->輸出)使用反向傳播的方法進(jìn)行更新悉盆。t = 2的層和 t=1 的層一樣盯荤,都要通過所有樣本的訓(xùn)練。
3焕盟、對(duì)所有層重復(fù)步驟1-2(即移除前面自編碼器的輸出層秋秤,用另一個(gè)自編碼器替代,再用反向傳播進(jìn)行訓(xùn)練)脚翘。
4灼卢、步驟1-3被稱為預(yù)訓(xùn)練,這將網(wǎng)絡(luò)里的權(quán)重值初始化至一個(gè)合適的位置来农。但是通過這個(gè)訓(xùn)練并沒有得到一個(gè)輸入數(shù)據(jù)到輸出標(biāo)記的映射鞋真。例如,一個(gè)網(wǎng)絡(luò)的目標(biāo)是被訓(xùn)練用來識(shí)別手寫數(shù)字沃于,經(jīng)過這樣的訓(xùn)練后還不能將最后的特征探測(cè)器的輸出(即隱含層中最后的自編碼器)對(duì)應(yīng)到圖片的標(biāo)記上去涩咖。這樣,一個(gè)通常的辦法是在網(wǎng)絡(luò)的最后一層(即藍(lán)色連接部分)后面再加一個(gè)或多個(gè)全連接層揽涮。整個(gè)網(wǎng)絡(luò)可以被看作是一個(gè)多層的感機(jī)機(jī)抠藕,并使用反向傳播的方法進(jìn)行訓(xùn)練(這步也被稱為微調(diào))。
棧式自編碼器蒋困,提供了一種有效的預(yù)訓(xùn)練方法來初始化網(wǎng)絡(luò)的權(quán)重盾似,這樣你得到了一個(gè)可以用來訓(xùn)練的?復(fù)雜、多層的感知機(jī)雪标。
深度信度網(wǎng)絡(luò)
和自編碼器一樣零院,我也可以將波爾茲曼機(jī)進(jìn)行棧式疊加來構(gòu)建深度信度網(wǎng)絡(luò)(DBN)。
在本例中村刨,隱含層 RBM? t? 可以看作是 RBM? t+1? 的可見層告抄。第一個(gè)RBM的輸入層即是整個(gè)網(wǎng)絡(luò)的輸入層,層間貪心式的預(yù)訓(xùn)練的工作模式如下:
1. 通過對(duì)比差異法對(duì)所有訓(xùn)練樣本訓(xùn)練第一個(gè)RBM??t=1
2. 訓(xùn)練第二個(gè)RBM??t=1?嵌牺。由于??t=2??的可見層是??t=1??的隱含層打洼,訓(xùn)練開始于將數(shù)據(jù)賦至??t=1??的可見層,通過前向傳播的方法傳至??t=1??的隱含層逆粹。然后作為??t=2??的對(duì)比差異訓(xùn)練的初始數(shù)據(jù)募疮。
3. 對(duì)所有層重復(fù)前面的過程。
4. 和棧式自編碼器一樣僻弹,通過預(yù)訓(xùn)練后阿浓,網(wǎng)絡(luò)可以通過連接到一個(gè)或多個(gè)層間全連接的?RBM 隱含層進(jìn)行擴(kuò)展。這構(gòu)成了一個(gè)可以通過反向傳僠進(jìn)行微調(diào)的多層感知機(jī)蹋绽。
本過程和棧式自編碼器很相似芭毙,只是用RBM將自編碼器進(jìn)行替換筋蓖,并用對(duì)比差異算法將反向傳播進(jìn)行替換。
卷積網(wǎng)絡(luò)
卷積網(wǎng)絡(luò)退敦,一類特殊的對(duì)圖像識(shí)別非常有效的前饋網(wǎng)絡(luò)粘咖。
我們先定義一個(gè)圖像濾波器,或者稱為一個(gè)賦有相關(guān)權(quán)重的方陣侈百。一個(gè)濾波器可以應(yīng)用到整個(gè)圖片上涂炎,通常可以應(yīng)用多個(gè)濾波器设哗。比如,你可以應(yīng)用四個(gè)6×6的濾波器在一張圖片上两蟀。然后网梢,輸出中坐標(biāo)(1,1)的像素值就是輸入圖像左上角一個(gè)6×6區(qū)域的加權(quán)和,其它像素也是如此赂毯。
有了上面的基礎(chǔ)战虏,我們來介紹定義出卷積網(wǎng)絡(luò)的屬性:
卷積層???對(duì)輸入數(shù)據(jù)應(yīng)用若干濾波器。比如圖像的第一卷積層使用4個(gè)6×6濾波器党涕。對(duì)圖像應(yīng)用一個(gè)濾波器之后的得到的結(jié)果被稱為特征圖譜(feature map, FM)烦感,特征圖譜的數(shù)目和濾波器的數(shù)目相等。如果前驅(qū)層也是一個(gè)卷積層膛堤,那么濾波器應(yīng)用在FM上手趣,相當(dāng)于輸入一個(gè)FM,輸出另外一個(gè)FM肥荔。從直覺上來講绿渣,如果將一個(gè)權(quán)重分布到整個(gè)圖像上后,那么這個(gè)特征就和位置無關(guān)了燕耿,同時(shí)多個(gè)濾波器可以分別探測(cè)出不同的特征中符。
下采樣層??縮減輸入數(shù)據(jù)的規(guī)模。例如輸入一個(gè)32×32的圖像誉帅,并且通過一個(gè)2×2的下采樣淀散,那么可以得到一個(gè)16×16的輸出圖像,這意味著原圖像上的四個(gè)像素合并成為輸出圖像中的一個(gè)像素蚜锨。實(shí)現(xiàn)下采樣的方法有很多種档插,最常見的是最大值合并、平均值合并以及隨機(jī)合并踏志。
最后一個(gè)下采樣層(或卷積層)通常連接到一個(gè)或多個(gè)全連層阀捅,全連層的輸出就是最終的輸出。
訓(xùn)練過程通過改進(jìn)的反向傳播實(shí)現(xiàn)针余,將下采樣層作為考慮的因素并基于所有值來更新卷積濾波器的權(quán)重饲鄙。