【人工智能】圖像識別之小白天書——驗證碼篇(3)

介紹

大家好!又見面啦!不知道經過前面兩篇文章的學習,是否已經可以順利的把簡單的驗證碼解析出來了呢?這段時間已經有不少人向我正某人拍磚了,指責我講的內容過於基礎,糊弄小孩之類的云云。入門嘛,就該當如此!步子不能走得太大,扯得慌。這一篇,我們不着急尋找困難的驗證碼破解了。爲了避免大家繼續拿磚頭懟我,今天我決定來一篇人工神經網絡的普及文!介紹一下人工神經網絡極其簡單的應用。

在講人工神經網絡之前,先說一下生物神經網絡:一般指生物的大腦神經元,細胞,觸點等組成的網絡,用於產生生物的意識,幫助生物進行思考和行動。相比之下,人工神經網絡之所以有人工二字,就是人工模擬生物神經網絡的行爲特徵,來建立一種可以模仿生物行爲模式進行信息處理計算的數學模型。這種網絡依靠系統的複雜程度,通過調整內部大量節點之間相互連接的關係,從而達到處理信息的目的。沒錯,其本質就是數學模型!我不知道茫茫讀者中有多少人喜歡數學,反正我是不(gen)太(ben)喜(bu)歡(hui)。所以下面我的講解中,我會盡量避開枯燥的公式,但爭取做到你能理解,會使用!



圖1

圖1是展示的是人類和機器人的對話,以及他們大腦的構造,我們來一一解析:

神經元

神經元是構成神經系統結構和功能的基本單位,它的本質是一個具有長突起的細胞,也是它構成了我們的生物神經網絡。它的功能是接受刺激,產生興奮並傳導興奮。


圖2 神經元及信息傳輸

圖2上半部分就是一個完整的神經元,上部圓圓的是它的細胞,中間黑色的是細胞核。周圍長了很多樹突,用於接收其他神經元傳遞來的信息。圖中間那個長長的東西叫軸突,用於把信息傳送到下面的突觸…上面套一節一節的東西是髓鞘,這個東西最主要的作用是能避免在信息傳輸過程和其他的軸突出現的電氣干擾,你可以理解爲這是一個線程安全的機制吧…(當然還有另外的作用,像是加速傳導和引導修復)千萬別小看這個小東西!如果它壞掉了,那指定是嘴歪眼斜大小便失禁!末端的突觸,就是信號的發射器了,看到圖中突觸的地方有華麗的亮光的特效了沒,那就是上面的神經元正在把興奮地信號傳遞給下方的神經元!

上述這段這純屬是本人的拙見,如有專業人士,切莫過於認真!

人工神經網絡


圖3 BP神經網絡簡單模型

我們講解的人工神經網絡是BP神經網絡(Back Propagation Neural Network)。BP神經網絡是一種按誤差逆向傳播算法訓練的多層前饋網絡,是目前應用最廣泛的神經網絡模型之一。

我用人話解釋一下啊:BP網絡的基本思想由兩部分組成:

第一部分是樣本信息正向傳播並且輸出結果。如圖3,整個網絡模型中,信息的傳遞從輸入層(input)開始,按照正向(從左往右)一層一層的傳遞“信息”,每一條線代表一條連接(連接也就意味着一次傳遞),箭頭的方向表明信息傳遞的方向,當某個節點接收到上一層所有節點傳遞而來的“信息”,就會進行一次計算,計算的結果作爲本節點的輸出,傳遞到下一層的每一個節點中。直至輸出層,經過計算把最後的結果輸出。圖中的隱藏層只有一層,但我們的BP神經網絡是多層網絡,也就是說隱藏層可以有好幾層。

第二部分就是誤差的反向傳播,更新網絡中的權重。通過上面的介紹我們知道了,信息傳播結束之後,輸出層的每個點都會輸出一個數,用這個數和我們人工給出的正確數據進行比較,也就是上篇文章我們提到過的人工打標的數據。求出誤差(常用誤差計算公式有均方差或交叉熵等),這時厲害了,這個誤差通過某些梯度下降算法的計算後,結果會更新到每條連接中,通過每條連接給傳遞的參數帶來一次變化,也就是更新了連接的權重,經過更新權重處理,傳入下一層每個節點的數發生了細微的變化,這也直接影響到了最終輸出的結果,使之下次計算出的誤差變得越來越小,循環此過程使最終輸出不斷趨近甚至等於我們人工給出的正確數據!從而得到正確的輸出。這就是一次信息正向傳播,誤差反向傳播的過程,通過不斷重複這個過程,達到了該網絡自我修正,自我學習的特性。

至於傳遞的“信息”是什麼,加的“權重”又是什麼,每個節點要怎樣去計算,每一層結點的數量是怎麼來的?且聽我下文慢慢道來。

傳遞的“信息”是什麼

咱們先來聊聊,傳遞的信息是啥吧!input作爲輸入層,所有數據的輸入都源自這裏,這裏完全可以理解爲傳入的是圖片的每個像素點。比如你的圖片是 10*10的長寬,那input層節點的數量就是100個,前期我們對驗證碼進行訓練的時候就這樣去做就好。以後如果我們對圖像進行處理,特別是那些2000*2000的以上分辨率的圖片,由於像素點過多,我們對圖像進行特徵提取,這樣可以降低輸入的維度(數量)並且提高訓練的速度。後面如果涉及到再細細講解。

這個點的灰度值傳入之前,我們最好對其進行預處理,可以提高訓練的速度!這邊我們用一個最最簡單的預處理辦法,歸一化。歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化爲無量綱的表達式,成爲標量。 在多種計算中都經常用到這種方法。

我在用人話解釋一下:歸一化的意思就是把你將要進行處理的數據,進行統一的一次加工,加工後,相當於把所有的數據按照等比例縮小了!(這裏只是泛泛而談,最優的方案是讓所有數據均值爲0,方差爲1,範圍控在-1~1之間,在這裏並不需要做的如此精確)這樣能把結果限定在一個更小的範圍內,方便歸納統計!我們這裏可以把範圍控制在0~1之間。而且還能提高你訓練的收斂速度。具體怎麼去操作呢?通過前幾篇文章我們已經知道了灰度值的範圍是0~255了,我們把每個像素點的灰度值除以255,就會得到一個0~1之間的數,這就是歸一化之後的數據了,要注意,每一個像素都要進行歸一化處理哦!

“權重”是什麼

權重爲整個模型的精妙之所在!可謂是萬變之根源,訓練之核心!權重的計算公式爲:ΣWA+B,其中A爲上一個節點的輸出,W就是權重值,B爲偏移量。

每次信息傳遞完畢之後會得到一個誤差,這個誤差會分配到網絡中的每一個連接之中(也就是每條線),通過控制公式中W和B的變化,使每次傳遞的參數發生變化,來修正每次訓練的輸出,不斷地收斂來縮小誤差,真正實現自適應、自學習,這纔是一個“活”的模型!理解了吧!

隱藏層和輸出層的計算是什麼?

這個計算,就是傳說中的激活函數(activation function),這個名字的含義比較抽象。他主要作用是通過計算,把特徵保留並且映射出來。激活函數是非線性函數,下面展示幾種常用的激活函數:


圖4 常用的激活函數

實在是不理解?沒關係!你只要理解爲,這是一次計算就可以了!每一層隱藏層的激活函數都是固定的,雖然說不同的隱藏層可以使用不同的激活函數,但是通常來講,很少會把各種激活函數串聯起來使用的。其中Relu是現在收斂最快,計算量相對較小的激活函數,推薦使用。激活函數幾乎可以說是純粹的數學,正某人本想單開一篇講解激活函數,但過於枯燥有違我們整體風格,等這一系列連載完再單獨講解吧!等不及想一探究竟的同學可以直接去問度娘。

看到這裏,你幾乎具備了關於BP神經網絡所有的理論知識了,難理解嗎?幸運的是,現在有很多成型的工具實現了訓練模型的方法,在使用中,你幾乎不需要去關心我上述講的任何一個步驟是怎樣實現的。說這麼多隻是希望有了理論的支持,在用的時候可以瞭解每一步驟的用處,知道如何正確的調參。

寫到這兒正某人也是彈盡糧絕了…幾乎耗盡了畢生的真氣,頭髮更是掉了一大把!給我點時間恢復元氣,下一章,咱們擼代碼!


微信掃一掃
關注該公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章