一個高度近視眼的深度學習實踐
1
傍晚,忙了一天的 Ray 終於下班了,摘下眼鏡休息下疲勞的雙眼,他走到公交車站等 23 路公交車準備回家。
對於一個高度近視眼的人來說,Ray 每天都有很多煩惱,因為他看迎面而來的人是這樣嬸兒的。
每次公交車要過來,他都看不清車身上的號碼,這嚴重影響他擠車的戰鬥力。
別問我他為什麼不戴眼鏡,愛臭美的近視眼們都知道為啥。他想起以前在國外出差,公交車上的號碼總是以很大的字型大小印在車身上,就算視力不好也可以看得很清楚。
每到這個時候,Ray 都想跟市政建設提個意見,要是公交車的號碼能來個大字版的,那多方便啊!
天色越來越晚,好幾輛公交車駛過去了,他還站在原地,這會兒又一輛車來了,他打算先上車問一下司機。一隻腳剛踏上車,話還沒說出來,就被一個大姐撞飛了。他捂著胳膊問:「司機師傅,這是 23 路嗎?」司機沒好氣地說:「你逗我呢,外面不寫著呢嘛,你是不認字嗎?」Ray 無辜地說:「我是看不清。」司機一臉黑線,打發他趕快往後走。這樣尷尬的場景已經不是第一次了,他倍感無助。
忽然,天靈蓋被一個靈感擊中,大腦伸了一個懶腰,一個 idea 就這樣誕生了:「要不做一個手機 App 吧,可以用手機拍攝車身照片,然後自動識別照片中公交車的號碼,這樣問題不就解決了嘛!」
正在暗自竊喜時,他轉念一想又似乎想得過於美好了,要怎麼識別車上的號碼呢?拍下來的照片受到光照、形狀、顏色、角度等諸多因素的影響,這樣的話問題開始有一點變複雜了。
2
Ray 想起了做圖像處理的朋友 Cavy,也許他有辦法。於是他把自己的想法跟 Cavy 說了一遍。兩人興高采烈地探討起這個問題。
Cavy:「你覺得深度學習演算法怎麼樣?是不可以考慮下?」
Ray:「就是那個打敗人類頂尖圍棋高手的深度學習嗎?太深奧了吧!」
Cavy:「沒錯!就是那個深度學習。其實它的原理並不複雜,不過你要會一些高數的基礎知識才行。」
Ray:「數學......我看我還是先從原理來了解下吧!」
Cavy:「那我簡單跟你說說。深度學習是基於神經網路,而神經網路是基於人類大腦的神經網路。人腦的神經網路是由許許多多神經元組成的網路。還是先從人腦的神經元說起。」
「神經元包含了軸突、樹突、細胞體等,樹突負責從其他神經元接收信息,細胞體負責處理接收到的信息,軸突負責把細胞體處理後的信息輸出到其他神經元。細胞體判斷輸入信號加權之和如果超過某個固定的閾值,就通過軸突發出信號(0或1),這個過程稱為點火。可以抽象為數學模型如下(稱為神經單元):
點火可以用數學式子表示為:
我們引入加權輸入z:
點火式子可以用單位階躍函數y=u(z)表示。」
Ray:「單位階躍函數有間斷點,這看起來有點棘手啊。」
Cavy:「我們可以用其他函數 y=a(z)(稱為激活函數)來代替單位階躍函數,將間斷點光滑化,常用的是 Sigmoid 函數。此外,為了使式子形式統一,我們把 -θ 替換為偏置 b。加權輸入表示為:
Sigmoid 函數定義如下:
Ray:「額......說慢點。意思是,Sigmoid 是個光滑函數,處理起來方便許多。神經網路就是將這些神經單元連接起來的,對吧?」
Cavy:「是的,看來你還可以嘛!也不是一點都不懂。其實它把多個神經單元按照一定的層次結構連接起來就形成神經網路。以公交車號碼識別為例,我們把公交車號碼識別的問題簡化一下。假設我們需要在 4*3 像素的單色二值圖像中識別數字 0 和 1。可以分 3 層來組織神經網路,分別是輸入層、隱藏層和輸出層。如下圖所示:
輸入層有 12 個神經單元,每個神經單元對應一個像素位置(一共有4*3=12個),從圖像讀取像素信息。隱藏層有 3 個神經單元,負責提取圖像的特徵。輸出層有 2 個神經單元負責輸出整個網路的判斷結果,上方神經單元的輸出值較大則表示網路識別出數字 0,反之如果輸出層下方神經單元的輸出值較大則表示網路識別出數字 1。
我們約定變數和參數的表示。我們對層從左到右編號,左邊輸入層為層 1,中間隱藏層為層 2,右邊輸出層為層 3。變數和參數如下表所示。
利用這個表格的符號,神經網路可以表示如下:
我們寫出各層的關係式。輸入層比較簡單,神經單元的輸入值與輸出值相同,關係式如下:
隱藏層中,激活函數為 a(z),關係式如下:
同樣地,輸出層的關係式如下:
有了以上關係式,如果確定權重、偏置等參數,我們就得到一個可以識別 4*3 像素圖片中數字 0 和 1 的神經網路。」
「艾瑪......讓我緩緩,說太多了,口乾舌燥的。」Cavy邊說邊喝了口水。
3
Ray:「我覺得我們可以預先準備一些圖像數據並標記好答案,通過調整神經網路的權重和參數,使神經網路的輸出與圖像數據吻合,這樣就可以了。」
Cavy:「Bingo!這就涉及到神經網路的學習了。其實我們的目標是神經網路的輸出值(預測值)與預先標記的答案(正解)總體誤差達到最小。假設我們有 64 張圖像作為學習數據,圖像與正解對應如下:
我們引入 2 個變數 t1、t2 作為正解變數,取值如下:
我們用平方誤差 C 作為目標函數,定義如下:
把 64 張輸入圖像的平方誤差加起來,
得到的總體誤差 CT 稱為神經網路的代價函數。」
Ray:「數學上應該有很多最優化數值方法求代價函數 CT 最小值。」
Cavy:「我們通常考慮梯度下降法。這個可厲害了,梯度下降法的原理就跟下山類似,從一個初始位置:
沿著梯度的反方向(局部下降最快)走一定的步長 η(學習率)。
到一個新的位置:
如此迭代若干次後達到最小值點。這裡的關鍵是梯度的計算。」
Ray:「導數計算看起來非常繁雜,不好計算,有點難度。」
Cavy:「為了避免繁雜的導數計算,我們首先引入神經單元誤差:
通過數學推導,可以把梯度分量用神經單元誤差表示如下:
而神經單元誤差有如下漂亮的遞推關係(m 為層 l+1 的神經單元數目):
用以上式子逐層遞推計算,就可以避免繁雜的偏導數。這就是誤差反向傳播法。」
Ray:「這個方法很精妙!那回到我的問題,實際的公交車號碼由 0-9 共十個數字組成,這就需要更多的神經單元組成更大的神經網路了。」
Cavy:「可以用卷積神經網路(CNN)來減少神經元數量,簡化網路,提高效率。卷積神經網路是深度學習的一種實現方式,它是由輸入層、隱藏層和輸出層組成。它的隱藏層具有一定結構,由卷積層和池化層組成。卷積層的神經單元負責掃描圖像,找出特徵在圖像中的分布。池化層神經單元負責整合卷積層的結果。這樣只需用較少的基本特徵就可以進行圖像識別。」
Ray:「emmmm......話說我覺得我還是要深入了解一下才行,跟你比還是差點火候。」
Cavy:「看你還算機靈,送你一本學深度學習的書吧。兄弟有空記得看看。這本《動手學深度學習》我就送你了。這個書里包含了書籍和視頻,還有專門的討論區,亞馬遜專家會不定時給予回復,其他的小夥伴也會給幫助,一定要看!!你要想學深度學習看這個可以了」
Ray:「聽起來還不錯!希望能拯救我的禿頭。」(狗頭.jpg)
???
《動手學深度學習 (平裝)》
出版時間:2019年6月
掃碼查看詳情
作者:阿斯頓·張(Aston Zhang) 李沐(Mu Li)[美] 扎卡里 C. 立頓(Zachary C. Lipton)[德] 亞歷山大 J. 斯莫拉(Alexander J. Smola)
編輯推薦:
亞馬遜科學家李沐等重磅作品;
互動式實戰環境下動手學深度學習的全新模式,原理與實戰完美結合
韓家煒/Bernhard Sch?lkopf/周志華/張潼/余凱/漆遠/沈強 聯袂推薦
加州大學伯克利等全球15 所知名大學用於教學;
本書旨在向讀者交付有關深度學習的互動式學習體驗。書中不僅闡述深度學習的演算法原理,還演示它們的實現和運行。
與傳統圖書不同,本書的每一節都是一個可以下載並運行的 Jupyter 記事本,它將文字、公式、圖像、代碼和運行結果結合在了一起。此外,讀者還可以訪問並參與書中內容的討論。
那這本大神新作
是否很貴呢?
在CSDN當然是不貴的
現在購買可享受8.5折優惠價
掃描下方二維碼即可購買!
碼書商店是CSDN專為我們的用戶建立的一個商店,這裡提供大量的技術書籍,除了書籍我們也提供生活類的相關產品,如耳機、鍵盤等,或者你們如果有需求也可以聯繫碼書商店的客服或者在公眾號下留言你們需要的產品,我們盡量滿足大家需求哦。
作為碼書商店的運營人員,誠邀你們進入我們的「CSDN碼書福利群」,群里會不定時的給大家贈書書籍、優惠券等,有書籍推薦或者物流方面信息也可群里諮詢~目前群已滿100人,需要加群的請掃下方二維碼添加微信,拉你入群哦~


※AMD 透漏 Zen 2 技術細節
※天數智芯斬獲斯坦福大學DAWNBench深度學習推理榜單冠軍
TAG:CSDN |