人工智能(AI)是近兩年來最熱門的詞之一了充择,自16年Google DeepMind的AlphaGo打敗了世界圍棋大師李世石后羔砾,人們?cè)隗@嘆之余表窘,也意識(shí)到人工智能時(shí)代的正式開始票腰。從此,人工智能封救、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)就成為了熱門詞匯拇涤,而它們的關(guān)系如下圖1所示。
人工智能的概念起源于1956年鹅士,所謂的人工智能就是給機(jī)器賦予人的智能,讓機(jī)器能夠像人一樣地思考問題惩坑,做出決策掉盅。而一種較為有效的、可行的實(shí)現(xiàn)人工智能的方法就是機(jī)器學(xué)習(xí)以舒,機(jī)器學(xué)習(xí)最基本的做法趾痘,是使用算法來解析數(shù)據(jù)、從中學(xué)習(xí)蔓钟,然后對(duì)真實(shí)世界中的事件做出決策和預(yù)測(cè)永票。實(shí)現(xiàn)機(jī)器學(xué)習(xí)的一種重要框架是深度學(xué)習(xí),它的出現(xiàn)使機(jī)器學(xué)習(xí)能夠?qū)崿F(xiàn)更多的應(yīng)用,包括無人駕駛汽車瓦侮,預(yù)防性醫(yī)療保健艰赞,甚至是更好的電影推薦佣谐。
從下圖2可以看出肚吏,深度作為當(dāng)前熱門領(lǐng)域“機(jī)器學(xué)習(xí)”的其中一種框架,近年來狭魂,在google的使用呈直線上升趨勢(shì)罚攀。
本文以下是通過參考臺(tái)灣李宏毅教授的介紹深度學(xué)習(xí)的ppt,“”Deep Learning Tutorial “”雌澄,再加上自己的理解斋泄,簡單介紹下深度學(xué)習(xí)的實(shí)現(xiàn)原理。下面的介紹主要分為兩大部分镐牺,第一部分主要介紹深度學(xué)習(xí)的實(shí)現(xiàn)過程炫掐,第二部分介紹如何創(chuàng)建一個(gè)簡單的深度學(xué)習(xí)模型。
深度學(xué)習(xí)的過程就是使用多個(gè)處理層對(duì)數(shù)據(jù)進(jìn)行高層抽象睬涧,得到多重非線性變換函數(shù)的過程募胃。就目前而言,深度學(xué)習(xí)主要是與人工神經(jīng)網(wǎng)絡(luò)相結(jié)合的畦浓,因此這里的深度學(xué)習(xí)算法框架也可以成為深度神經(jīng)網(wǎng)絡(luò)算法框架痹束。
深度學(xué)習(xí)通過構(gòu)建深層神經(jīng)網(wǎng)絡(luò),來模擬人類大腦的工作原理讶请。如下圖所示祷嘶,深層神經(jīng)網(wǎng)絡(luò)由一個(gè)輸入層,數(shù)個(gè)隱層夺溢,以及一個(gè)輸出層構(gòu)成论巍。每層有若干個(gè)神經(jīng)元,神經(jīng)元之間有連接權(quán)重风响。每個(gè)神經(jīng)元模擬人類的神經(jīng)細(xì)胞嘉汰,而結(jié)點(diǎn)之間的連接模擬神經(jīng)細(xì)胞之間的連接。深度學(xué)習(xí)框架的基本結(jié)構(gòu)如下圖3所示钞诡。
1. 深度學(xué)習(xí)的實(shí)現(xiàn)過程
機(jī)器學(xué)習(xí)的過程就是相當(dāng)于尋找一個(gè)通用函數(shù)(變換)的過程郑现。如:
語音識(shí)別,就是將一連串的語音信號(hào)作為自變量荧降,通過一個(gè)函數(shù)接箫,轉(zhuǎn)換為一個(gè)自然語句:
圖像識(shí)別,就是將給定的一個(gè)圖片作為自變量朵诫,通過一個(gè)函數(shù)辛友,轉(zhuǎn)換為一個(gè)具體的圖片描述:
像sari這種對(duì)話系統(tǒng)废累,將用戶說的話通過一個(gè)函數(shù)邓梅,去查找相對(duì)應(yīng)的輸出,作為系統(tǒng)應(yīng)答:
我們就圖像識(shí)別應(yīng)用邑滨,來直觀地了解深度學(xué)習(xí)的一般框架日缨,如下圖所示。簡單地說掖看,深度學(xué)習(xí)過程就是選擇一個(gè)最佳函數(shù)的過程匣距,也可以說成為函數(shù)尋找最佳參數(shù)的過程。如下圖左所示哎壳,深度學(xué)習(xí)過程主要分為三步:
1. 輸入一系列的函數(shù)作為待訓(xùn)練模型
2. 評(píng)價(jià)各個(gè)函數(shù)的好壞毅待,使用誤差率作為標(biāo)準(zhǔn)
3. 通過每個(gè)函數(shù)的輸出與正確的結(jié)果對(duì)比,來選擇最佳的匹配函數(shù)归榕。下面分別介紹下每一步所做的工作尸红。
1.1 定義一系列的函數(shù)作為待訓(xùn)練模型
神經(jīng)網(wǎng)絡(luò)中一個(gè)神經(jīng)元就相當(dāng)于一個(gè)簡單的線性函數(shù),線性函數(shù)的定義如下:
其中刹泄,w1…wk就是作為函數(shù)的參數(shù)外里,也是神經(jīng)元每個(gè)輸入的權(quán)重值,b作為函數(shù)的偏移量循签。神經(jīng)元的結(jié)構(gòu)如下圖5所示级乐。途中除了函數(shù)的定義中存在的權(quán)重值w和偏移量b以外,還存在一個(gè)激活函數(shù)县匠。
激活函數(shù)是用來引入非線性因素的风科。網(wǎng)絡(luò)中僅有線性模型的話,表達(dá)能力不夠乞旦。比如一個(gè)多層的線性網(wǎng)絡(luò)贼穆,其表達(dá)能力和單層的線性網(wǎng)絡(luò)是相同的。常見的激活函數(shù)有sigmod函數(shù)兰粉,relu函數(shù)和tanh函數(shù)故痊。
1.2 確定函數(shù)好壞的方法
下圖6所示為使用深度學(xué)習(xí)來訓(xùn)練給定的一張數(shù)字圖像所代表的實(shí)際數(shù)字的例子。給定一張2的數(shù)字圖像作為輸入玖姑,輸入層為256個(gè)像素點(diǎn)愕秫,而輸出層則為0-9這10個(gè)數(shù)字對(duì)應(yīng)的softmax值,根據(jù)softmax值的大小來選擇最優(yōu)的結(jié)果作為輸出焰络。
Softmax回歸模型是logistic回歸模型在多分類問題上的推廣戴甩,在多分類問題中,待分類的類別數(shù)量大于2闪彼,且類別之間互斥甜孤。比如我們的網(wǎng)絡(luò)要完成的功能是識(shí)別0-9這10個(gè)手寫數(shù)字,若最后一層的輸出為[0,0.7,0.2, 0.1, 0, 0, 0, 0, 0, 0],則表明我們網(wǎng)絡(luò)的識(shí)別結(jié)果為數(shù)字1缴川。
一個(gè)好的函數(shù)應(yīng)該能夠保證對(duì)于整個(gè)樣本集作為輸入茉稠,輸出的總誤差是盡可能小的,誤差可以表示為計(jì)算的輸出值和真實(shí)值之間的距離把夸。如下圖7所示而线,針對(duì)下圖神經(jīng)網(wǎng)絡(luò),每個(gè)輸出的誤差可以用來計(jì)算結(jié)果值和實(shí)際值之間的差來表示扎即。
總誤差L等于多個(gè)輸出誤差之和吞获,用下面的公式表示:
1.3 挑選最佳函數(shù)的方法
要在一系列的函數(shù)中尋找最佳的函數(shù)况凉,也就是總的誤差最小的函數(shù)谚鄙,就是為這個(gè)函數(shù)尋找最佳的參數(shù),在神經(jīng)網(wǎng)絡(luò)中稱為權(quán)重值刁绒。對(duì)于下圖8一個(gè)擁有三個(gè)輸入神經(jīng)元的兩層前反饋全連接神經(jīng)網(wǎng)絡(luò)來講闷营,光是第一層就有9個(gè)權(quán)重值,若輸入神經(jīng)元1000知市,那光這一層神經(jīng)網(wǎng)絡(luò)就有1000000個(gè)權(quán)重值傻盟。
因此枚舉出所有可能的值并從中選擇一組最優(yōu)的權(quán)重值是不可能的,那么如何找到一個(gè)最優(yōu)的參數(shù)值嫂丙,使得結(jié)果的誤差總和最小呢娘赴,深度學(xué)習(xí)中采用的是梯度下降法,如下圖9所示跟啤。這里假設(shè)橫坐標(biāo)為權(quán)重值w诽表,w是一個(gè)m*1的矩陣。對(duì)于單連接網(wǎng)絡(luò)隅肥,m代表神經(jīng)元的個(gè)數(shù)竿奏,對(duì)于全連接網(wǎng)絡(luò),m代表神經(jīng)元個(gè)數(shù)的平方腥放,縱坐標(biāo)為總的誤差值L泛啸,w和L的關(guān)系可用一條不規(guī)則的曲線表示。尋找最佳w的計(jì)算過程如下:
1.首先秃症,初始化權(quán)重w
2.然后,計(jì)算每個(gè)神經(jīng)元輸出的總的誤差值候址,計(jì)算誤差值對(duì)權(quán)重值的偏導(dǎo) 數(shù),也就是下圖曲線的斜率种柑。
3.如果偏導(dǎo)數(shù)小于零岗仑,說明曲線處于下降趨勢(shì),即隨著w的增加莹规,誤差在減少赔蒲,因此這時(shí)需要繼續(xù)增加w的值。
4.如果偏導(dǎo)數(shù)大于零,說明曲線處于上升趨勢(shì)舞虱,即隨著w的增加欢际,誤差在增大,因此這時(shí)需要減少w的值矾兜,
5.回到步驟2损趋,重復(fù)以上過程,直到偏導(dǎo)數(shù)趨近于零椅寺,也就是處于說在一定的范圍內(nèi)浑槽,誤差L相對(duì)于w處于最小值狀態(tài),此時(shí)的w可作為較優(yōu)的一組參數(shù)返帕。
如下圖10桐玻,對(duì)于權(quán)重矩陣θ,使用梯度下降法去尋找較優(yōu)權(quán)重值的計(jì)算過程荆萤。如下圖左镊靴,對(duì)于θ中的每一個(gè)權(quán)值,計(jì)算總誤差相對(duì)于此權(quán)值的偏導(dǎo),如下圖右。
如果這個(gè)偏導(dǎo)值小于零硬纤,新的權(quán)重值
使用梯度下降法尋找最優(yōu)權(quán)重值的較為形象的過程如下圖11。此圖近似為一個(gè)山的等高線踊谋,海拔越低代表總的誤差越小。要想找到最優(yōu)解旋讹,首先我們選定一個(gè)初始的下山位置殖蚕,然后通過偏導(dǎo)計(jì)算我們現(xiàn)在是處于上山還是下山方向,如果是下上方向骗村,則選擇一個(gè)步長繼續(xù)下山嫌褪,直到每一次處于上山方向,就代表我們已經(jīng)找到山腳胚股。
2. 構(gòu)建一個(gè)簡單的深度學(xué)習(xí)模型
下面我們通過創(chuàng)建一個(gè)簡單的深度學(xué)習(xí)框架模型笼痛,這里我們使用keras,建立在TensorFlow和Theano深度學(xué)習(xí)框架之上的一個(gè)較容易上手的深度學(xué)習(xí)框架琅拌。我們使用keras自帶的一個(gè)例子mnist_mlp.py進(jìn)行深度學(xué)習(xí)模型的創(chuàng)建缨伊。根據(jù)上述介紹可知,創(chuàng)建過程主要分為三步:
1. 定義深度神經(jīng)網(wǎng)絡(luò)模型进宝,相當(dāng)于定義一系列的函數(shù)刻坊,如下圖12所示。模型類型為sequential(線性疊加模型)党晋,線性疊加模型就是把每一層按照次序疊加起來谭胚,每層之間采用全連接方式徐块。創(chuàng)建的神經(jīng)網(wǎng)絡(luò)有三層,add是往model里添加層灾而,輸入為2828的矩陣胡控,輸出結(jié)果為110的矩陣,前兩層使用的激活函數(shù)是sigmod旁趟,最后挨著輸出層使用的激活函數(shù)為softmax昼激。
2. 評(píng)價(jià)各個(gè)函數(shù)的好壞,計(jì)算訓(xùn)練值和真實(shí)值之間的誤差锡搜,如下圖13所示橙困。這里損失函數(shù)使用mse。
3. compile用來在模型編譯的時(shí)候配置損失函數(shù)耕餐、優(yōu)化器以及正確率函數(shù)凡傅。fit是用來訓(xùn)練一個(gè)固定迭代次數(shù)的模型。x_train為訓(xùn)練樣本集就是手寫的數(shù)字圖片蛾方,y_train是訓(xùn)練樣本的結(jié)果集像捶,這里是指樣本集的標(biāo)簽,batch_size為每次訓(xùn)練和梯度更新塊的大小桩砰,nb_epoch為迭代次數(shù)。
訓(xùn)練好模型后释簿,需要測(cè)試模型的準(zhǔn)確率亚隅,使用evaluate函數(shù),如下圖15庶溶。
執(zhí)行過程如下幾張截圖煮纵,由下圖16輸出可看到底層調(diào)用的是TensorFlow框架,而且訓(xùn)練樣本集有60000個(gè)訓(xùn)練樣本偏螺,測(cè)試樣本集有10000個(gè)測(cè)試樣本行疏。
從下圖可以看出這個(gè)深度學(xué)習(xí)模型有三層,總共的參數(shù)有669706個(gè)套像。如下圖17所示酿联。
訓(xùn)練數(shù)據(jù)迭代次數(shù)為20次,顯示每次迭代的誤差率和準(zhǔn)確率如下圖:
3.總結(jié)
本文首先講述了深度學(xué)習(xí)的一般過程贞让,接著介紹了如何使用keras框架構(gòu)建一個(gè)簡單的三層深度學(xué)習(xí)模型,適合深度學(xué)習(xí)的初學(xué)者入門柳譬。另外喳张,使用keras構(gòu)建深度學(xué)習(xí)模型的好處就是簡單容易實(shí)現(xiàn),但卻隱藏了底層的實(shí)現(xiàn)細(xì)節(jié)美澳。如果想清楚底層的實(shí)現(xiàn)的話销部,建議使用TensorFlow框架來構(gòu)建深度學(xué)習(xí)模型摸航。