當前位置:
首頁 > 知識 > 想要成為高級程序員,你得先學數學才行

想要成為高級程序員,你得先學數學才行

作者 | 楊瑞龍

來源 | 圖靈教育(ID:turingbooks)

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:「看你還算機靈,送你一本好玩的書吧。我們差這點兒火候就是數學啦!兄弟有空記得看看。這本《深度學習的數學》我就送你了。用 Excel 講深度學習,還有大量圖片,所以數學的問題,你馬上就不用擔心啦!」

Ray:「聽起來還不錯!希望能拯救我的禿頭。」(狗頭.jpg)

一本書掌握深度學習數學基礎知識

《深度學習的數學》

作者:涌井良幸,涌井貞美

譯者:楊瑞龍

書中基於豐富的圖示和具體示例,通俗地介紹了深度學習相關的數學基礎知識。第1章介紹神經網路的概況;第2章介紹理解神經網路所需的數學基礎知識;第3章介紹神經網路的最優化;第4章介紹神經網路和誤差反向傳播法;第5章介紹深度學習和卷積神經網路。

為程序員朋友們寫的數學書

《程序員的數學》

數學思維 概率統計 線性代數(套裝共3冊)

作者:[日]結城浩,[日]平岡和幸,[日]堀玄

程序員的數學三本書包括《程序員的數學》《程序員的數學2:概率統計》《程序員的數學3:線性代數》,這套書通俗易懂,穿插大量有趣的實例和圖表,以獨特的編排巧妙闡述程序員和數學愛好者所需掌握的數學基礎知識、概率統計和線性代數知識。三者同時也是機器學習、數據挖掘、模式識別領域必學。

文末福利

噹噹618年中狂歡,好玩的數學給大家爭取到了一個滿減福利!掃碼進噹噹購書每滿100減50,在以上減滿基礎上滿200還能減40,相當於買400元的書只要160元即可,活動時間6月14日至20日。在付款的時候輸入好玩的數學專屬優惠碼「UVGX6K」即可。

優惠碼的具體使用方法如下:

1. 在添加購物車後,點進結算頁面,就可以找到填寫優惠碼的地方。

2. 輸入專屬優惠碼:UVGX6K,領取後就可以直接使用了,而且這個是可以在噹噹滿減的基礎上再滿減哈。

3. 買多減多,最多可實現滿400減240。大家可以看我的截圖,我選了400多塊錢的書,在滿減基礎上再疊加優惠券,結算時只要100多塊錢。

4. 另外,每一個訂單只可使用一次優惠券,大家結算的時候要留意訂單總價,優惠券生效的前提是在滿減優惠減完還大於或等於200元,才能減40元哦。

平常有想買的書,但是沒買的,這次可以通過這個活動開始囤書了。

傳播數學,普及大眾

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 好玩的數學 的精彩文章:

絕不會輸的賭博—《數學女孩4》
每日打卡做題求多項式

TAG:好玩的數學 |