人工智能(AI)是近兩年來最熱門的詞之一了,自16年Google DeepMind的AlphaGo打敗了世界圍棋大師李世石后,人們在驚嘆之余,也意識到人工智能時代的正式開始。從此,人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)就成為了熱門詞匯,而它們的關(guān)系如下圖1所示。 圖1 人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系 人工智能的概念起源于1956年,所謂的人工智能就是給機(jī)器賦予人的智能,讓機(jī)器能夠像人一樣地思考問題,做出決策。而一種較為有效的、可行的實(shí)現(xiàn)人工智能的方法就是機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)最基本的做法,是使用算法來解析數(shù)據(jù)、從中學(xué)習(xí),然后對真實(shí)世界中的事件做出決策和預(yù)測。實(shí)現(xiàn)機(jī)器學(xué)習(xí)的一種重要框架是深度學(xué)習(xí),它的出現(xiàn)使機(jī)器學(xué)習(xí)能夠?qū)崿F(xiàn)更多的應(yīng)用,包括無人駕駛汽車,預(yù)防性醫(yī)療保健,甚至是更好的電影推薦。
圖2 機(jī)器學(xué)習(xí)在google的發(fā)展趨勢 本文以下是通過參考臺灣李宏毅教授的介紹深度學(xué)習(xí)的ppt,“”Deep Learning Tutorial “”,再加上自己的理解,簡單介紹下深度學(xué)習(xí)的實(shí)現(xiàn)原理。下面的介紹主要分為兩大部分,第一部分主要介紹深度學(xué)習(xí)的實(shí)現(xiàn)過程,第二部分介紹如何創(chuàng)建一個簡單的深度學(xué)習(xí)模型。 深度學(xué)習(xí)的過程就是使用多個處理層對數(shù)據(jù)進(jìn)行高層抽象,得到多重非線性變換函數(shù)的過程。就目前而言,深度學(xué)習(xí)主要是與人工神經(jīng)網(wǎng)絡(luò)相結(jié)合的,因此這里的深度學(xué)習(xí)算法框架也可以成為深度神經(jīng)網(wǎng)絡(luò)算法框架。
圖3 深度學(xué)習(xí)的基礎(chǔ)框架 機(jī)器學(xué)習(xí)的過程就是相當(dāng)于尋找一個通用函數(shù)(變換)的過程。如:語音識別,就是將一連串的語音信號作為自變量,通過一個函數(shù),轉(zhuǎn)換為一個自然語句: 圖像識別,就是將給定的一個圖片作為自變量,通過一個函數(shù),轉(zhuǎn)換為一個具體的圖片描述: Alpha Go的輸入的是一個棋局作為自變量,通過一個函數(shù),輸出為下一步的走法: 像sari這種對話系統(tǒng),將用戶說的話通過一個函數(shù),去查找相對應(yīng)的輸出,作為系統(tǒng)應(yīng)答: 我們就圖像識別應(yīng)用,來直觀地了解深度學(xué)習(xí)的一般框架,如下圖所示。簡單地說,深度學(xué)習(xí)過程就是選擇一個最佳函數(shù)的過程,也可以說成為函數(shù)尋找最佳參數(shù)的過程。如下圖左所示,深度學(xué)習(xí)過程主要分為三步: 1、輸入一系列的函數(shù)作為待訓(xùn)練模型 圖4 深度學(xué)習(xí)的一般流程 1.1 定義一系列的函數(shù)作為待訓(xùn)練模型神經(jīng)網(wǎng)絡(luò)中一個神經(jīng)元就相當(dāng)于一個簡單的線性函數(shù),線性函數(shù)的定義如下: 其中,w1…wk就是作為函數(shù)的參數(shù),也是神經(jīng)元每個輸入的權(quán)重值,b作為函數(shù)的偏移量。神經(jīng)元的結(jié)構(gòu)如下圖5所示。途中除了函數(shù)的定義中存在的權(quán)重值w和偏移量b以外,還存在一個激活函數(shù)。 圖5 神經(jīng)元的結(jié)構(gòu)圖 激活函數(shù)是用來引入非線性因素的。網(wǎng)絡(luò)中僅有線性模型的話,表達(dá)能力不夠。比如一個多層的線性網(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個像素點(diǎn),而輸出層則為0-9這10個數(shù)字對應(yīng)的softmax值,根據(jù)softmax值的大小來選擇最優(yōu)的結(jié)果作為輸出。 圖6深度學(xué)習(xí)實(shí)例
一個好的函數(shù)應(yīng)該能夠保證對于整個樣本集作為輸入,輸出的總誤差是盡可能小的,誤差可以表示為計算的輸出值和真實(shí)值之間的距離。如下圖7所示,針對下圖神經(jīng)網(wǎng)絡(luò),每個輸出的誤差可以用來計算結(jié)果值和實(shí)際值之間的差來表示。
圖7 誤差計算圖 總誤差L等于多個輸出誤差之和,用下面的公式表示: 1.3 挑選最佳函數(shù)的方法要在一系列的函數(shù)中尋找最佳的函數(shù),也就是總的誤差最小的函數(shù),就是為這個函數(shù)尋找最佳的參數(shù),在神經(jīng)網(wǎng)絡(luò)中稱為權(quán)重值。對于下圖8一個擁有三個輸入神經(jīng)元的兩層前反饋全連接神經(jīng)網(wǎng)絡(luò)來講,光是第一層就有9個權(quán)重值,若輸入神經(jīng)元1000,那光這一層神經(jīng)網(wǎng)絡(luò)就有1000000個權(quán)重值。
圖 8 簡單的三層深度神經(jīng)網(wǎng)絡(luò) 因此枚舉出所有可能的值并從中選擇一組最優(yōu)的權(quán)重值是不可能的,那么如何找到一個最優(yōu)的參數(shù)值,使得結(jié)果的誤差總和最小呢,深度學(xué)習(xí)中采用的是梯度下降法,如下圖9所示。這里假設(shè)橫坐標(biāo)為權(quán)重值w,w是一個m*1的矩陣。對于單連接網(wǎng)絡(luò),m代表神經(jīng)元的個數(shù),對于全連接網(wǎng)絡(luò),m代表神經(jīng)元個數(shù)的平方,縱坐標(biāo)為總的誤差值L,w和L的關(guān)系可用一條不規(guī)則的曲線表示。尋找最佳w的計算過程如下: 1.首先,初始化權(quán)重w 圖9 梯度下降尋找最佳參數(shù)值 如下圖10,對于權(quán)重矩陣θ,使用梯度下降法去尋找較優(yōu)權(quán)重值的計算過程。如下圖左,對于θ中的每一個權(quán)值,計算總誤差相對于此權(quán)值的偏導(dǎo),如下圖右。
圖10 權(quán)值更新過程 如果這個偏導(dǎo)值小于零,新的權(quán)重值
使用梯度下降法尋找最優(yōu)權(quán)重值的較為形象的過程如下圖11。此圖近似為一個山的等高線,海拔越低代表總的誤差越小。要想找到最優(yōu)解,首先我們選定一個初始的下山位置,然后通過偏導(dǎo)計算我們現(xiàn)在是處于上山還是下山方向,如果是下上方向,則選擇一個步長繼續(xù)下山,直到每一次處于上山方向,就代表我們已經(jīng)找到山腳。
圖11 梯度下降 下面我們通過創(chuàng)建一個簡單的深度學(xué)習(xí)框架模型,這里我們使用keras,建立在TensorFlow和Theano深度學(xué)習(xí)框架之上的一個較容易上手的深度學(xué)習(xí)框架。我們使用keras自帶的一個例子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。
圖12 初始化神經(jīng)網(wǎng)絡(luò)模型 2. 評價各個函數(shù)的好壞,計算訓(xùn)練值和真實(shí)值之間的誤差,如下圖13所示。這里損失函數(shù)使用mse。
圖13 制定誤差函數(shù)
圖14 挑選最佳函數(shù) 訓(xùn)練好模型后,需要測試模型的準(zhǔn)確率,使用evaluate函數(shù),如下圖15。
圖15 測試訓(xùn)練模型 執(zhí)行過程如下幾張截圖,由下圖16輸出可看到底層調(diào)用的是TensorFlow框架,而且訓(xùn)練樣本集有60000個訓(xùn)練樣本,測試樣本集有10000個測試樣本。
圖16 開始訓(xùn)練輸出 從下圖可以看出這個深度學(xué)習(xí)模型有三層,總共的參數(shù)有669706個。如下圖17所示。
圖17 輸出模型信息 訓(xùn)練數(shù)據(jù)迭代次數(shù)為20次,顯示每次迭代的誤差率和準(zhǔn)確率如下圖:
圖18 顯示迭代次數(shù)、誤差率及準(zhǔn)確率 本文首先講述了深度學(xué)習(xí)的一般過程,接著介紹了如何使用keras框架構(gòu)建一個簡單的三層深度學(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í)模型。 ●本文編號400,以后想閱讀這篇文章直接輸入400即可 ●輸入m獲取到文章目錄 算法與數(shù)據(jù)結(jié)構(gòu) |
|
|