1 傍晚,忙了一天的 Ray 終于下班了,摘下眼鏡休息下疲勞的雙眼,他走到公交車站等 23 路公交車準備回家。 對于一個高度近視眼的人來說,Ray 每天都有很多煩惱,因為他看迎面而來的人是這樣嬸兒的。 每次公交車要過來,他都看不清車身上的號碼,這嚴重影響他擠車的戰(zhàn)斗力。 別問我他為什么不戴眼鏡,愛臭美的近視眼們都知道為啥。他想起以前在國外出差,公交車上的號碼總是以很大的字號印在車身上,就算視力不好也可以看得很清楚。 每到這個時候,Ray 都想跟市政建設提個意見,要是公交車的號碼能來個大字版的,那多方便啊! 天色越來越晚,好幾輛公交車駛過去了,他還站在原地,這會兒又一輛車來了,他打算先上車問一下司機。一只腳剛踏上車,話還沒說出來,就被一個大姐撞飛了。他捂著胳膊問:“司機師傅,這是 23 路嗎?”司機沒好氣地說:“你逗我呢,外面不寫著呢嘛,你是不認字嗎?”Ray 無辜地說:“我是看不清?!彼緳C一臉黑線,打發(fā)他趕快往后走。這樣尷尬的場景已經(jīng)不是第一次了,他倍感無助。 忽然,天靈蓋被一個靈感擊中,大腦伸了一個懶腰,一個 idea 就這樣誕生了:“要不做一個手機 App 吧,可以用手機拍攝車身照片,然后自動識別照片中公交車的號碼,這樣問題不就解決了嘛!” 正在暗自竊喜時,他轉(zhuǎn)念一想又似乎想得過于美好了,要怎么識別車上的號碼呢?拍下來的照片受到光照、形狀、顏色、角度等諸多因素的影響,這樣的話問題開始有一點變復雜了。 2 Ray 想起了做圖像處理的朋友 Cavy,也許他有辦法。于是他把自己的想法跟 Cavy 說了一遍。兩人興高采烈地探討起這個問題。 Cavy:“你覺得深度學習算法怎么樣?是不可以考慮下?” Ray:“就是那個打敗人類頂尖圍棋高手的深度學習嗎?太深奧了吧!” Cavy:“沒錯!就是那個深度學習。其實它的原理并不復雜,不過你要會一些高數(shù)的基礎知識才行。” Ray:“數(shù)學......我看我還是先從原理來了解下吧!” Cavy:“那我簡單跟你說說。深度學習是基于神經(jīng)網(wǎng)絡,而神經(jīng)網(wǎng)絡是基于人類大腦的神經(jīng)網(wǎng)絡。人腦的神經(jīng)網(wǎng)絡是由許許多多神經(jīng)元組成的網(wǎng)絡。還是先從人腦的神經(jīng)元說起?!?/p> “神經(jīng)元包含了軸突、樹突、細胞體等,樹突負責從其他神經(jīng)元接收信息,細胞體負責處理接收到的信息,軸突負責把細胞體處理后的信息輸出到其他神經(jīng)元。細胞體判斷輸入信號加權(quán)之和如果超過某個固定的閾值,就通過軸突發(fā)出信號(0或1),這個過程稱為點火??梢猿橄鬄閿?shù)學模型如下(稱為神經(jīng)單元): 點火可以用數(shù)學式子表示為: 我們引入加權(quán)輸入z: 點火式子可以用單位階躍函數(shù)y=u(z)表示。” Ray:“單位階躍函數(shù)有間斷點,這看起來有點棘手啊。” Cavy:“我們可以用其他函數(shù) y=a(z)(稱為激活函數(shù))來代替單位階躍函數(shù),將間斷點光滑化,常用的是 Sigmoid 函數(shù)。此外,為了使式子形式統(tǒng)一,我們把 -θ 替換為偏置 b。加權(quán)輸入表示為: Sigmoid 函數(shù)定義如下: Ray:“額......說慢點。意思是,Sigmoid 是個光滑函數(shù),處理起來方便許多。神經(jīng)網(wǎng)絡就是將這些神經(jīng)單元連接起來的,對吧?” Cavy:“是的,看來你還可以嘛!也不是一點都不懂。其實它把多個神經(jīng)單元按照一定的層次結(jié)構(gòu)連接起來就形成神經(jīng)網(wǎng)絡。以公交車號碼識別為例,我們把公交車號碼識別的問題簡化一下。假設我們需要在 4*3 像素的單色二值圖像中識別數(shù)字 0 和 1??梢苑?3 層來組織神經(jīng)網(wǎng)絡,分別是輸入層、隱藏層和輸出層。如下圖所示: 輸入層有 12 個神經(jīng)單元,每個神經(jīng)單元對應一個像素位置(一共有4*3=12個),從圖像讀取像素信息。隱藏層有 3 個神經(jīng)單元,負責提取圖像的特征。輸出層有 2 個神經(jīng)單元負責輸出整個網(wǎng)絡的判斷結(jié)果,上方神經(jīng)單元的輸出值較大則表示網(wǎng)絡識別出數(shù)字 0,反之如果輸出層下方神經(jīng)單元的輸出值較大則表示網(wǎng)絡識別出數(shù)字 1。 我們約定變量和參數(shù)的表示。我們對層從左到右編號,左邊輸入層為層 1,中間隱藏層為層 2,右邊輸出層為層 3。變量和參數(shù)如下表所示。 利用這個表格的符號,神經(jīng)網(wǎng)絡可以表示如下: 我們寫出各層的關系式。輸入層比較簡單,神經(jīng)單元的輸入值與輸出值相同,關系式如下: 隱藏層中,激活函數(shù)為 a(z),關系式如下: 同樣地,輸出層的關系式如下: 有了以上關系式,如果確定權(quán)重、偏置等參數(shù),我們就得到一個可以識別 4*3 像素圖片中數(shù)字 0 和 1 的神經(jīng)網(wǎng)絡。” “艾瑪......讓我緩緩,說太多了,口干舌燥的?!盋avy邊說邊喝了口水。 3 Ray:“我覺得我們可以預先準備一些圖像數(shù)據(jù)并標記好答案,通過調(diào)整神經(jīng)網(wǎng)絡的權(quán)重和參數(shù),使神經(jīng)網(wǎng)絡的輸出與圖像數(shù)據(jù)吻合,這樣就可以了?!?/p> Cavy:“Bingo!這就涉及到神經(jīng)網(wǎng)絡的學習了。其實我們的目標是神經(jīng)網(wǎng)絡的輸出值(預測值)與預先標記的答案(正解)總體誤差達到最小。假設我們有 64 張圖像作為學習數(shù)據(jù),圖像與正解對應如下: 我們引入 2 個變量 t1、t2 作為正解變量,取值如下: 我們用平方誤差 C 作為目標函數(shù),定義如下: 把 64 張輸入圖像的平方誤差加起來, 得到的總體誤差 CT 稱為神經(jīng)網(wǎng)絡的代價函數(shù)。” Ray:“數(shù)學上應該有很多最優(yōu)化數(shù)值方法求代價函數(shù) CT 最小值。” Cavy:“我們通??紤]梯度下降法。這個可厲害了,梯度下降法的原理就跟下山類似,從一個初始位置: 沿著梯度的反方向(局部下降最快)走一定的步長 η(學習率)。 到一個新的位置: 如此迭代若干次后達到最小值點。這里的關鍵是梯度的計算。” Ray:“導數(shù)計算看起來非常繁雜,不好計算,有點難度?!?/p> Cavy:“為了避免繁雜的導數(shù)計算,我們首先引入神經(jīng)單元誤差: 通過數(shù)學推導,可以把梯度分量用神經(jīng)單元誤差表示如下: 而神經(jīng)單元誤差有如下漂亮的遞推關系(m 為層 l+1 的神經(jīng)單元數(shù)目): 用以上式子逐層遞推計算,就可以避免繁雜的偏導數(shù)。這就是誤差反向傳播法。” Ray:“這個方法很精妙!那回到我的問題,實際的公交車號碼由 0-9 共十個數(shù)字組成,這就需要更多的神經(jīng)單元組成更大的神經(jīng)網(wǎng)絡了。” Cavy:“可以用卷積神經(jīng)網(wǎng)絡(CNN)來減少神經(jīng)元數(shù)量,簡化網(wǎng)絡,提高效率。卷積神經(jīng)網(wǎng)絡是深度學習的一種實現(xiàn)方式,它是由輸入層、隱藏層和輸出層組成。它的隱藏層具有一定結(jié)構(gòu),由卷積層和池化層組成。卷積層的神經(jīng)單元負責掃描圖像,找出特征在圖像中的分布。池化層神經(jīng)單元負責整合卷積層的結(jié)果。這樣只需用較少的基本特征就可以進行圖像識別?!?/p> Ray:“emmmm......話說我覺得我還是要深入了解一下才行,跟你比還是差點火候?!?/p> Cavy:“看你還算機靈,送你一本好玩的書吧。我們差這點兒火候就是數(shù)學啦!兄弟有空記得看看。這本《深度學習的數(shù)學》我就送你了。用 Excel 講深度學習,還有大量圖片,所以數(shù)學的問題,你馬上就不用擔心啦!” Ray:“聽起來還不錯!希望能拯救我的禿頭。”(狗頭.jpg) |
|
來自: 海波之花 > 《互聯(lián)網(wǎng)》