前言
深度學(xué)習(xí)(DL, Deep Learning)是機器學(xué)習(xí)(ML, Machine Learning)領(lǐng)域中一個新的研究方向,它被引入機器學(xué)習(xí)使其更接近于最初的目標(biāo)——人工智能(AI, Artificial Intelligence)
深度學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò):一種可以通過觀測數(shù)據(jù)使計算機學(xué)習(xí)的仿生語言范例
深度學(xué)習(xí):一組強大的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)技術(shù)
? ? ? ? 神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)目前提供了針對圖像識別,語音識別和自然語言處理領(lǐng)域諸多問題的最佳解決方案。傳統(tǒng)的編程方法中,我們告訴計算機如何去做,將大問題劃分為許多小問題,精確地定義了計算機很容易執(zhí)行的任務(wù)。而神經(jīng)網(wǎng)絡(luò)不需要我們告訴計算機如何處理問題,而是通過從觀測數(shù)據(jù)中學(xué)習(xí),計算出他自己的解決方案。今天,深度神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在計算機視覺、語音識別和自然語言處理等許多重要問題上取得了出色的表現(xiàn)。
初識神經(jīng)網(wǎng)絡(luò)
人類的視覺系統(tǒng)是世界上最棒的系統(tǒng)之一,比如下列一串手寫數(shù)字:
? ? ? 大多數(shù)人都可以一眼看出它是504192。在我們大腦的每一個半球,都有主要的視覺皮質(zhì)V1V1,它包含了1.4億個神經(jīng)元,在這些神經(jīng)元之間有數(shù)百億的接觸。然而人類的視覺不僅僅包含了V1V1,而是一系列的視覺皮質(zhì)V1,V2,V3,V4,V5V1,V2,V3,V4,V5,逐步進行更復(fù)雜的圖像處理。我們大腦里有一臺超級計算機,通過數(shù)億年的進化,可以很好的適應(yīng)這個視覺世界。識別手寫數(shù)字并不容易,我們?nèi)祟愺@人地可以理解我們眼睛所看到的東西,但這些工作都是在我們不知不覺中就完成了,我們根本不知道我們大腦完成了多么負責(zé)的工作。
? ? ? ? 神經(jīng)網(wǎng)絡(luò)解決這類問題通過不一樣的方式。思想是把大量的手寫數(shù)字作為訓(xùn)練樣本,然后生成一個可以通過訓(xùn)練樣本學(xué)習(xí)的系統(tǒng)。換句話說,神經(jīng)網(wǎng)絡(luò)使用樣本自動地推斷出識別手寫數(shù)字的規(guī)則。此外,通過增加訓(xùn)練樣本的數(shù)量,該網(wǎng)絡(luò)可以學(xué)到更多,并且更加準(zhǔn)確。
神經(jīng)網(wǎng)絡(luò)的架構(gòu)
先解釋一下網(wǎng)絡(luò)中的各部分的專業(yè)術(shù)語。假設(shè)我們有一個網(wǎng)絡(luò):
? ? ? 最左邊的一層稱為輸入層,位于這一層的神經(jīng)元稱為輸入神經(jīng)元。最右邊的輸出層包含了輸出神經(jīng)元,本例只有一個輸出神經(jīng)元。中間的層被稱為隱藏層,因為這些神經(jīng)元既不是輸出也不是輸入。隱藏層聽起來很神秘,但是他其實就只意味著既不是輸入也不是輸出而已。上圖的神經(jīng)網(wǎng)絡(luò)中只包含了一個隱藏層,但是有些網(wǎng)絡(luò)有許多隱藏層,比如下圖的四層網(wǎng)絡(luò)結(jié)構(gòu),含有兩個隱藏層:
? ? ? 網(wǎng)絡(luò)中的輸入和輸出層一般都被設(shè)計的很簡單。比如:假設(shè)我們試圖識別一幅圖像是否是9,一個自然的方法就是將該圖片的灰度值編碼作為神經(jīng)元的輸入。如果這個圖片是64X64的灰度圖,那么我們的輸入神經(jīng)元就有64X64=4096個輸入神經(jīng)元,它的值隨著灰度在0到1里適當(dāng)?shù)淖兓?。輸出神?jīng)元只有一個,輸出的值小于0.5表示這個數(shù)字不是9,反之就是9.
? ? ? ? 雖然輸入輸出層的設(shè)計很簡單,但是隱藏層的設(shè)計卻是門藝術(shù)。我們不可能通過一些簡單的經(jīng)驗法則來總結(jié)隱藏層的設(shè)計過程。相反,神經(jīng)網(wǎng)絡(luò)的研究人員已經(jīng)開發(fā)了隱藏層的許多的最優(yōu)設(shè)計規(guī)則,這可以幫助人們從他們的網(wǎng)絡(luò)中的到預(yù)期的行為。
深度神經(jīng)網(wǎng)絡(luò)搭建神器Tensorflow2.0 與 Pytorch
? ? ? ? 最初Tensorflow在1.x的版本上基于靜態(tài)圖的概念搭建神經(jīng)網(wǎng)絡(luò)的訓(xùn)練的,那時相比Pytorch而言在調(diào)試上可謂是比較不便。2.0之后Tensorflow才將架構(gòu)轉(zhuǎn)向動態(tài)圖的理念。由于Pytorch的入門已比較容易,那接下來我們就使用Tensorflow2.0來創(chuàng)建一個簡單版深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò):
首先: Anaconda和TF2.0環(huán)境安裝
然后: 搭建一個一層卷積層,一層池化層,和2個全連接層的基礎(chǔ)神經(jīng)網(wǎng)絡(luò):
最后: 打印一下該基礎(chǔ)神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)信息:
至此一個深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)就搭建好了。經(jīng)典的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)比方說Resnet(18,34,50,101,152), MobileNet(v1,v2,v3)......等網(wǎng)絡(luò)結(jié)構(gòu)各不相同。可以使用遷移學(xué)習(xí)在tf.karas中找到已經(jīng)官方話的神經(jīng)網(wǎng)絡(luò)模板,也可以自定義按上文索跡進行自我搭建。目的,都是一樣:對圖像中的特征信息進行提取,歸類。不同的神經(jīng)網(wǎng)絡(luò)模型各自經(jīng)過千百次實驗,效果最佳的神經(jīng)網(wǎng)絡(luò)和輸入?yún)?shù)被篩選和保留下來用做后續(xù)AI任務(wù)和發(fā)展貢獻。