深度學(xué)習(xí) - 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
上圖中 中間2層黑箱值骇,每個(gè)黑箱是16個(gè)神經(jīng)元,總共4層移国,這些數(shù)字都是便于新手學(xué)習(xí)吱瘩,實(shí)際操作的時(shí)候都可以調(diào)整的。這種模式是仿照生物學(xué)的神經(jīng)元迹缀,第一層的神經(jīng)元可以激活下一層使碾,一層一層傳到。比如這個(gè)圖祝懂,第一層784個(gè)神經(jīng)元票摇,輸入了784個(gè)各自的灰度值,那么這層激活值的圖案會(huì)讓下層的激活值產(chǎn)生某種特殊圖案砚蓬,再讓再下層產(chǎn)生特殊的圖案矢门,最終在輸出層得到某種結(jié)果,而輸出層最亮的神經(jīng)元就代表這個(gè)神經(jīng)網(wǎng)絡(luò)最終的選擇。
這樣一來(lái)叛薯,我們只需要學(xué)習(xí)浑吟,哪些部件能組成哪些數(shù)字即可。那么識(shí)別這些小部件耗溜,比如識(shí)別圓圈和識(shí)別直線就很難啊组力。怎么辦?
但網(wǎng)絡(luò)是真的這么做的嗎城舞?通過(guò)這種層狀結(jié)構(gòu)最后得出想要的結(jié)果轩触?
更進(jìn)一步的講,若神經(jīng)網(wǎng)絡(luò)真的能識(shí)別這類(lèi)邊緣和圖案家夺,它們就能很好的應(yīng)用到其他圖像的識(shí)別任務(wù)上來(lái)脱柱,甚至不光是圖像,比如音頻拉馋,都可以拆分成小塊榨为,轉(zhuǎn)化為抽象元素,一層層抽絲剝繭煌茴。
所以這個(gè)神經(jīng)元的激活值奕翔,實(shí)際上就是對(duì) 加權(quán)和 到底有多“正”的打分。那么這個(gè)加權(quán)和有多 “正” 才表示激活呢浩蓉? 此時(shí)你要加個(gè) 偏置值
派继,保證不能隨意被激發(fā),比如當(dāng)加權(quán)和 大于等于 10 時(shí)候捻艳,才能激發(fā)驾窟。
那么认轨,我們還可以推算出來(lái)绅络,第一層輸入層,一共784個(gè)神經(jīng)元嘁字,第二次一共16個(gè)神經(jīng)元恩急,第一層的784個(gè)神經(jīng)元都要對(duì)應(yīng)第二層每一個(gè)神經(jīng)元,那么這個(gè)計(jì)算量:784*16
個(gè)權(quán)重值纪蜒;以及16個(gè) 偏置值衷恭。計(jì)算起來(lái),上述神經(jīng)網(wǎng)絡(luò)需要權(quán)重值: 786*16 + 16*16 + 16*10
纯续;偏置值:16+16+10
随珠,總數(shù)130000多,相當(dāng)于有130000多個(gè)按鈕需要你去調(diào)節(jié)猬错。所以我們討論機(jī)器如何學(xué)習(xí)的時(shí)候窗看,實(shí)際上是討論如何設(shè)置這一大堆數(shù)字參數(shù),才能讓它正確的解題
我們把每個(gè)神經(jīng)元想象成容器只是便于理解智玻,其實(shí)這是錯(cuò)誤觀點(diǎn)遂唧。神經(jīng)元實(shí)際上是一個(gè)函數(shù),它的輸入是上一層所有神經(jīng)元的輸出吊奢,而它的輸出是一個(gè)0~1的值盖彭,不過(guò)這個(gè)函數(shù)非常復(fù)雜纹烹,它有13000個(gè) 權(quán)重參數(shù)
和 偏置參數(shù)
,并不停的用到矩陣乘法和sigmoid
映射運(yùn)算召边,但它終究是個(gè)函數(shù)而已铺呵。
深度學(xué)習(xí) - 梯度下降法
我們想要一種算法,你可以給這個(gè)網(wǎng)絡(luò)一大堆訓(xùn)練數(shù)據(jù)隧熙,其中包括一堆不同的數(shù)字手寫(xiě) 圖像片挂,以及它們代表哪個(gè)數(shù)字的標(biāo)記,算法會(huì)依據(jù)此調(diào)整130000個(gè)權(quán)重值和偏置值贞盯,以提高網(wǎng)絡(luò)對(duì)數(shù)據(jù)訓(xùn)練的表現(xiàn)音念。
我們希望這種分層結(jié)構(gòu)可以舉一反三,識(shí)別訓(xùn)練數(shù)據(jù)之外的圖像躏敢。訓(xùn)練好后闷愤,我們會(huì)給它更多的帶標(biāo)記的之前未見(jiàn)過(guò)的數(shù)據(jù)作為測(cè)試,你就能看到它對(duì)這些新圖像分類(lèi)的準(zhǔn)確度件余。
雖然機(jī)器“學(xué)習(xí)”這個(gè)說(shuō)法很大膽讥脐,但深入了解后,這看起來(lái)不像是科幻場(chǎng)面啼器,而是一道微積分習(xí)題了旬渠。
從概念上講,每一個(gè)神經(jīng)元都與上一層所有神經(jīng)元相連镀首,決定其激活值加權(quán)和中的權(quán)重坟漱,可以理解為該聯(lián)系的強(qiáng)弱大小,而偏置值則表示了神經(jīng)元是否更容易被激活更哄。
在這一開(kāi)始芋齿,我們會(huì)重置所有的 權(quán)重值和偏置值, 那么可想而知成翩,輸出的結(jié)果有多隨機(jī)觅捆,所以當(dāng)結(jié)果出來(lái)后,你要告訴系統(tǒng)麻敌,只有正確的那個(gè)值是接近1栅炒,其他應(yīng)該接近0,不然就是錯(cuò)誤的术羔。
然后怎么處理赢赊?你可以將每個(gè)垃圾輸出激活值,與你期望的值的差的平方加起來(lái)级历。
接下來(lái)熏纯,我們就要考慮同诫,手頭幾萬(wàn)個(gè)訓(xùn)練樣本中,代價(jià)的平均值樟澜。而我們就用這個(gè)值來(lái)評(píng)價(jià)這個(gè)神經(jīng)網(wǎng)絡(luò)是好是壞误窖。
要記得,網(wǎng)絡(luò)不過(guò)是個(gè)函數(shù)往扔,有784個(gè)輸入值贩猎,即像素灰度熊户,最后輸出的是10個(gè)數(shù)萍膛,而所有的權(quán)重和偏置值就組成了這個(gè)函數(shù)的參數(shù)。而代價(jià) 函數(shù)函數(shù)還要更抽象一層嚷堡,這13000個(gè)權(quán)重和偏置值作為它的參數(shù)蝗罗,最后輸出一個(gè)數(shù),來(lái)表示這些權(quán)重和偏置的好壞蝌戒。而代價(jià)函數(shù)取決網(wǎng)絡(luò)對(duì)于上萬(wàn)個(gè)綜合數(shù)據(jù)的表現(xiàn)串塑。
再仔細(xì)想想,你告訴電腦北苟,這個(gè)代價(jià)值桩匪,這個(gè)網(wǎng)絡(luò)不好,沒(méi)有用友鼻,告訴它怎么改傻昙,怎么調(diào)整這些 權(quán)重值和偏置值 才有進(jìn)步。
為了簡(jiǎn)化問(wèn)題彩扔,我們先考慮一個(gè)函數(shù)妆档,只有一個(gè)輸入變量,只有一個(gè)輸出值虫碉。要怎么找到x值贾惦,使得函數(shù)的輸入值最小呢?顯而易見(jiàn)敦捧,求導(dǎo)嘛须板,求導(dǎo)得出斜率,斜率值為0兢卵,就找到最小值了习瑰。
想象一個(gè)更復(fù)雜的曲饱,兩個(gè)輸入一個(gè)輸出的 二元函數(shù):
熟悉多元微積分的人會(huì)清楚勺卢,函數(shù)的梯度指出了函數(shù)的最陡增長(zhǎng)方向,即是說(shuō)象对,按照梯度值的方向走黑忱,函數(shù)的增長(zhǎng)值就越快(具體參考多元微積分知識(shí))。現(xiàn)在我們只需要知道勒魔,我們能算出這個(gè)向量甫煞,它能指出哪個(gè)方向下山最快,路有多陡就可以了沥邻。
你只需要知道危虱,讓函數(shù)最小值的算法,不過(guò)是先計(jì)算梯度唐全,然后按照梯度反方向走一小步下山埃跷,然后循環(huán)。處理帶130000個(gè)輸入的函數(shù)也是同樣的道理邮利。
計(jì)算梯度
的算法是神經(jīng)網(wǎng)絡(luò)的核心,我們叫做反向傳播算法
头朱。
當(dāng)我們提到網(wǎng)絡(luò)學(xué)習(xí)运悲,實(shí)際上就是讓代價(jià)函數(shù)的值最小。為了達(dá)到此目的项钮,代價(jià)函數(shù)必須是平滑的班眯,這樣我們才能一點(diǎn)點(diǎn)的移動(dòng),最后找到局部最小值烁巫。這也解釋了為什么神經(jīng)元的激活值是連續(xù)的署隘。這種按照負(fù)梯度的倍數(shù),不斷調(diào)整函數(shù)輸入值的過(guò)程亚隙,叫做梯度下降法
磁餐。
我們回到神經(jīng)網(wǎng)絡(luò)的話題來(lái)鳄橘,神經(jīng)網(wǎng)絡(luò)本身是帶一個(gè)784個(gè)輸入和10個(gè)輸出的函數(shù)声离,由各種加權(quán)和所定義,代價(jià)函數(shù)則是更復(fù)雜一層瘫怜,把130000多個(gè)權(quán)重和偏置作為輸入术徊,通過(guò)訓(xùn)練數(shù)據(jù),得出一個(gè)對(duì)網(wǎng)絡(luò)糟糕程度的評(píng)分鲸湃,而代價(jià)函數(shù)的梯度赠涮,則在此基礎(chǔ)上更復(fù)雜一層子寓,告訴我們?nèi)绾挝⒄{(diào)權(quán)重和偏置的值,才可以讓代價(jià)函數(shù)的結(jié)果改變的最快笋除,也可以理解為别瞭,改變了哪些權(quán)重,對(duì)結(jié)果影響最大株憾。
那么蝙寨,當(dāng)你隨機(jī)初始化權(quán)重和偏置的時(shí)候,并通過(guò)梯度下降法調(diào)整了多次參數(shù)之后嗤瞎,神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別它從未見(jiàn)過(guò)的圖像時(shí)墙歪,表現(xiàn)又會(huì)如何?我們不能強(qiáng)求100%贝奇,能做到識(shí)別絕大部分情況就很不錯(cuò)了虹菲。
接著上面話題嫁审,這個(gè)神經(jīng)網(wǎng)絡(luò)跋炕,它能夠很好的識(shí)別0-9之間的數(shù)字了,但當(dāng)你給它一個(gè)不屬于0-9的數(shù)字律适,比如一個(gè)五角星辐烂,它也會(huì)自信的把五角星識(shí)別成0-9中的一個(gè)數(shù)。這就是說(shuō)擦耀,這個(gè)網(wǎng)絡(luò)棉圈,它根本不明白輸出的結(jié)果是什么,它只是照著做而已眷蜓。究其原因分瘾,就是這個(gè)網(wǎng)絡(luò)在很窄的框架里。但是深層次研究隱含層的工作內(nèi)容,你會(huì)發(fā)現(xiàn)它沒(méi)有那么智能德召。
深度學(xué)習(xí) - 反向傳播算法
首先復(fù)習(xí)一下:
所謂的學(xué)習(xí)白魂,就是找到一個(gè)合適的權(quán)重和偏置值,使得代價(jià)函數(shù)的值最小上岗。要計(jì)算一個(gè)訓(xùn)練樣本的代價(jià)福荸,你需要求出 網(wǎng)絡(luò)的輸出 與 理論期待的輸出 之間每一項(xiàng)差的 平方和,然后對(duì)于成千上萬(wàn)的樣本肴掷,都這么算一遍敬锐,取平均值,就得到了整個(gè)網(wǎng)絡(luò)的代價(jià)值.
我們要 算的就是代價(jià)函數(shù)的負(fù)梯度呆瞻,它告訴你如何改變這個(gè)網(wǎng)絡(luò)所 有連線上的權(quán)重和偏置台夺,能讓代價(jià)下降的最快。(這個(gè)負(fù)梯度就能求出最佳的權(quán)重和偏置值)
反向傳播算法痴脾,就是來(lái)求這個(gè)梯度的颤介。
我希望大家能夠牢牢記住之前提到的一點(diǎn),想象一個(gè)130000多維度梯度向量過(guò)于抽象赞赖,換個(gè)思路滚朵,梯度向量 每一項(xiàng)大小是在告訴大家,代價(jià)函數(shù)對(duì)每個(gè)參數(shù)有多敏感前域,越大的參數(shù)對(duì)代價(jià)函數(shù)的影響越大
如上圖话侄,我們第一次輸入一個(gè)2的數(shù)字訓(xùn)練樣本亏推,它會(huì)隨機(jī)給出10個(gè)輸出,這個(gè)輸出對(duì)應(yīng)的激活值不是我們想要的年堆,我們期望我們要的2的激活值提高,其他的降低盏浇。
為了增大2對(duì)應(yīng)的激活值变丧,我們有3條路:
- 先看看看如何增加權(quán)重,連接線 前一層最亮神經(jīng)元(最亮就是值最大)的那根線的 權(quán)重滴劲,增大它會(huì)迅速增大該激活值(wa相乘嘛)攻晒,增加權(quán)重,我們一般就找這樣高性價(jià)比的線去增加班挖,使得連接性更強(qiáng)鲁捏。
- 再看看調(diào)整上一層的激活值假丧。
對(duì)于整個(gè)網(wǎng)絡(luò)全局來(lái)看运吓,以上渴邦,只是2這個(gè)最終輸出神經(jīng)元對(duì)于 網(wǎng)絡(luò)的期待,我們還需要把最后一層不需要的神經(jīng)元的激活值給弱化拘哨,所以谋梭,我們可以把神經(jīng)元2的期待和 別的神經(jīng)元的期待累加起來(lái),作為對(duì)如何改變倒數(shù)第二層神經(jīng)元的指示宅静。
以上只是對(duì)2這個(gè)測(cè)試樣本的訓(xùn)練調(diào)整峭沦。
實(shí)際使用中,這種算法下來(lái)旺聚,計(jì)算量非常大织阳,有更優(yōu)的方法,這里我們只作為學(xué)習(xí)理解砰粹。機(jī)器學(xué)習(xí)領(lǐng)域的人唧躲,最熟悉的難關(guān),莫過(guò)于 獲取 標(biāo)記好的數(shù)據(jù)了。
反向傳播算法 算的是 單個(gè)訓(xùn)練樣板想怎么樣修改 權(quán)重和偏置惊窖,不僅僅是說(shuō)每個(gè)參數(shù)應(yīng)該變大還是變小刽宪,還包括了這些變化的比例是多大,才能最快的降低代價(jià)界酒。真正的梯度下降圣拄,得對(duì)好幾萬(wàn)個(gè)訓(xùn)練樣板都進(jìn)行這樣的操作,然后對(duì)這些變化取平均值毁欣,但算起來(lái)太慢了庇谆,所以你可以考慮將樣板分到各個(gè) Minibatch 中,計(jì)算一個(gè) Minibatch 作為梯度下降的一步凭疮,計(jì)算每一個(gè) Minibatch饭耳,調(diào)整參數(shù)不斷循環(huán),最后你會(huì)收斂到 代價(jià)函數(shù) 的一個(gè)最小值上执解,此時(shí)寞肖,你就可以說(shuō),你的神經(jīng)網(wǎng)絡(luò)對(duì)付數(shù)據(jù)訓(xùn)練已經(jīng)很不錯(cuò)了衰腌⌒麦。總而言之,我們實(shí)現(xiàn)反向傳播的每一句代碼右蕊,其實(shí)或多或少都對(duì)應(yīng)大家已經(jīng)知道的內(nèi)容琼稻。
附錄:反向傳播算法的微積分原理
難度較大,難以理解饶囚,暫擱置帕翻。