0.導引
機器學習早在20世紀中頁券犁,就已經(jīng)吸引了相當多的學者油吭,并引起了極為熱烈的學習和探討,然而由于受各方面技術(shù)的限制毡琉,其發(fā)展陷入了相當長的停滯期。近兩年來隨著硬件計算能力的增長和在棋類項目上的突破妙色,機器學習再一次成為了萬眾矚莫的焦點桅滋,甚至連國務(wù)院印發(fā)的《新一代人工智能發(fā)展規(guī)劃》都提出要在中小學階段設(shè)置人工智能相關(guān)課程,推動人工智能領(lǐng)域一級學科建設(shè)身辨,其火熱和重要程度可見一斑丐谋。
神經(jīng)網(wǎng)絡(luò)雖然僅僅是機器學習的一個分支,但是近年來從簡單的AlexNet煌珊,LeNet到谷歌的inception v3和微軟的ResNet号俐,再到Hinton大神2017年提出的膠囊理論,發(fā)展不可謂不迅速定庵。究其本質(zhì)吏饿,還是在統(tǒng)計學范疇之內(nèi),利用大量數(shù)據(jù)內(nèi)在的分布邏輯蔬浙,來用各種模型進行擬合猪落,從而對相同條件的未知結(jié)果的實驗進行預(yù)測,并盡可能最大化預(yù)測成功的概率畴博,因此和決策樹笨忌,樸素貝葉斯等景點模型并沒有質(zhì)的區(qū)別。
1.線性回歸 & 邏輯回歸 & 感知機
這三者可以看做是最淺層的神經(jīng)網(wǎng)絡(luò)俱病,因為不包含隱層
基本的形式可以用如下表達式描述(這里為了方便下面討論官疲,省略了偏置項b):
主要的差別在于激活函數(shù)h(x)不同
線性回歸(Linear regression)的激活函數(shù)
感知機(Perceptron)的激活函數(shù)
邏輯回歸(Logistic regressoin)的激活函數(shù)sigmoid
從適用方法上看负敏,線性回歸是一種回歸算法袜茧,可用用于線性關(guān)系的值的預(yù)測,或者更抽象一點冷守,可以用來擬合n元線性方程
想象一個場景咱揍,來估計彈簧長度與懸掛物體重量的關(guān)系颖榜,橫軸x代表物體重量棚饵,縱軸y是彈簧的長度煤裙,雖然有各種各樣的統(tǒng)計誤差掩完,但是當統(tǒng)計的數(shù)據(jù)足夠多的時候,就會發(fā)現(xiàn)其實是一個線性關(guān)系硼砰,要求取這條直線且蓬,方法有很多,比如最小二乘法
對于多元的場景也是一樣的题翰,還是剛才的例子恶阴,除了物體重量x1,這里增加一個x2代表彈簧的松弛程度豹障,當兩者疊加的時候彈簧的最終長度依然是一個線性值
而后兩者(邏輯回歸和感知機)冯事,因為激活函數(shù)的特性,適用于做二分類血公,也就是分類算法
這兩種類型的算法也涵蓋了神經(jīng)網(wǎng)絡(luò)的兩種主要用途昵仅,回歸和分類
2.梯度下降法
上面介紹了幾種線性模型,那么在實際操作中累魔,如何確定系數(shù)矩陣W呢摔笤,這里主要介紹一下梯度下降法(Gradient Descent)
我們要實現(xiàn)的目標,是通過訓練后垦写,針對輸入數(shù)據(jù)吕世,產(chǎn)生和真實結(jié)果一致的輸出,假使不能完全一致梯投,這個概率也要越大越好命辖,那么這里首先要定義一下?lián)p失函數(shù)cost function:
對于線性回歸的損失函數(shù),比較容易理解
上式的意義在于分蓖,如果它的值越小吮龄,代表預(yù)測值與真實樣本約接近
對于邏輯回歸,應(yīng)該如何計算損失函數(shù)呢咆疗,這里要使用條件概率漓帚,也就是在輸入x的條件下,使得輸出y是正確的概率最大
這里y是真實值午磁,y(x)是預(yù)測值尝抖,如何理解呢,假設(shè)y趨近于1迅皇,那么上式可以表達為y(x)昧辽,這樣只有預(yù)測值也趨近于1才能是概率最大,假設(shè)y趨近于0登颓,上式表達為1-y(x)搅荞,則只有y(x)趨近于0,才能使概率最大,將這個式子推廣到全部的樣本咕痛,就是全部樣本的條件概率連乘積
為了方便計算痢甘,再取一次對數(shù),得到
有了損失函數(shù)這樣就可以通過數(shù)學的方式茉贡,求導獲取極值點塞栅,梯度下降就是這樣的一種算法,借助求導腔丧,將每一輪迭代的參數(shù)都向極值的位置靠攏放椰,最終得到一個全局(或者局部)的最優(yōu)解
下面對其原理略作解釋,假設(shè)我們求極值的函數(shù)是二次型f(x) = (x-3)^2:
現(xiàn)在迭代到x = 4愉粤,這一點的導數(shù)df(x)/dx=2x-6等于2砾医,假定學習率α=0.2,那么x經(jīng)過梯度下降就等于4 - 0.2 * 2 = 3.6
那么再重復(fù)上述步驟衣厘,x = 3.6的導數(shù)為1.2藻烤,x = 3.6 - 0.2 * 1.2 = 3.36
可以看出來,x的值一步一步地接近了極值點3头滔,
當然x值落在極值點左邊也是一樣的
比如x = 2怖亭,df(x)/dx=2x-6 = -2,x 經(jīng)過梯度下降等于2 - 0.2 * -2 = 2.4
同樣也是朝著目標3接近坤检,那么假設(shè)要用梯度方法求極大值兴猩,那么只要把減號改成加號就行了
3.多層感知機
一個簡單的定義就是包含了至少一個隱含層(輸入層和輸出層之外的層)的感知機
為何要有多層感知機呢,來看下什么是線性不可分的例子早歇,譬如下圖的數(shù)據(jù)倾芝,就沒法在平面上用直線去劃分成兩類
解決的辦法大致有兩種,一種是升維箭跳,把低維數(shù)據(jù)映射到高維空間晨另,自然可以劃分了,另外一種就是使用非線性的劃分谱姓,而多層感知機就恰好是這種方式借尿。
做一點引申,為何只有多層感知機屉来,而沒有多層線性回歸呢路翻,主要因為感知機的激活函數(shù)是非線性的,如果是多層線性回歸疊加在一起茄靠,那么可以通過數(shù)學證明茂契,最后的各層參數(shù)矩陣相乘的結(jié)果,可以等價于一次矩陣相乘慨绳,也就是多少層線性回歸疊在一起也沒用掉冶,最后只相當于一層真竖。
那么多層的非線性激活函數(shù)的疊加,究竟能起到怎樣的作用厌小,我們來看一個例子恢共,將上圖的xor問題中的叉叉和圓圈分成AB兩類,并且量化我們的預(yù)期:
所以我們希望得到的劃分結(jié)果如表格最右邊一列召锈,那么就構(gòu)造一個只有一個隱含層的多層感知機來試試能否做到旁振。
上圖中获询,f11和f12是對h1節(jié)點和h2節(jié)點的激活函數(shù)涨岁,這里用了分段函數(shù),也滿足非線性的條件吉嚣,計算過程如下表:
可以看到經(jīng)過這幾步的計算梢薪,我們等價地完成了一個非線性的劃分,成功完成了一條直線所不能的任務(wù)
正向傳播(forward propergation)
上面給出的例子尝哆,直接就把合適的參數(shù)值填進去了秉撇,所以一次計算就能得到正確結(jié)果,這個計算過程秋泄,就是正向傳播琐馆。下面列出上一個例子的正向計算步驟,一共四步
這里雖然使用了矩陣的乘法表示恒序,但是實際推導過程中瘦麸,完全可以轉(zhuǎn)化成代數(shù)表達式,當然注意一點歧胁,這里為了示意滋饲,隱含層的激活函數(shù)使用了兩個分段函數(shù)f11(v) 和 f12(v) 來快速求得結(jié)果,實際的訓練過程喊巍,多層感知機多使用上面提到的sigmoid函數(shù)屠缭,當然也可以選擇雙曲正切tanh或relu函數(shù)
反向傳播(backward propergation)
上面給出的例子,直接就把一個非常理想的w參數(shù)矩陣給填上去了崭参,而且又選擇了非常討巧的激活函數(shù)呵曹,但是實際的多層感知機訓練過程常常是初始化隨機參數(shù),然后通過迭代來一步一步調(diào)整參數(shù)使其和期望值接近何暮,這個迭代過程逢并,就是反向傳播,簡稱BP郭卫。
為了解釋BP砍聊,這里先引入計算圖的概念,假設(shè)我們有函數(shù)e = (a+b) ? (b+1)贰军,那么通過復(fù)合函數(shù)的分解法則玻蝌,可以把e表示為e = c * d,
其中c = a + b
d = b + 1, 把這一分解過程用圖表示出來蟹肘,就是計算圖了
計算圖是一種有向圖,它的節(jié)點可以表示常數(shù)俯树,向量帘腹,邊可以表示一種函數(shù)操作
把上圖的有向圖看做一棵樹,如果從下往上一步步由葉子節(jié)點向上推導许饿,就構(gòu)成了正向傳播的過程阳欲,相反地,從根節(jié)點向下求導陋率,根據(jù)鏈式法則一步一步求導球化,最終有了各部分的導數(shù),就可以計依據(jù)偏導數(shù)的乘法和加法法則算出e對b的偏導數(shù)瓦糟,這就構(gòu)成了反向傳播筒愚。
如上圖,在a=2菩浙, b=1這一點巢掺,我們先直接通過公式計算出最終e對b的偏導數(shù)為:(b + 1)+ (a +b)= 2b + a + 1,b的偏導數(shù)是5
然后逐步計算看看答案是否一樣
- 在e點劲蜻, e對c的偏導數(shù)和對d的偏導數(shù)可以用增量求得陆淀,先求c,比如c增加0.001先嬉,c=3.001轧苫,則e=2*3.001 = 6.002,增量是0.002,所以e對c的導數(shù)為0.002 / 0.001 = 2坝初,同理求出e對d的導數(shù)為3
- 在c點浸剩,試求c對a的偏導數(shù),a增加0.001鳄袍,a=2.001绢要,則c=3.001,增量為0.001拗小,可知導數(shù)為0.001 / 0.001=1
同理重罪,c點c對b的導數(shù)也是1- 容易在d點求得d對b的導數(shù)1
- 最下一層求e對b的偏導數(shù),就是 e對c偏導數(shù) x c對b的偏導數(shù) + e對d的偏導數(shù) x d對b的偏導數(shù)=3x1 + 2x1=5
我們可以看出哀九,反向傳播的本質(zhì)其實就是一種計算工具剿配,通過在遍歷計算圖的過程中,不斷復(fù)用上層結(jié)果逐步算出每個節(jié)點的導數(shù)阅束,大大增加了梯度下降算法的效率
4. CNN卷積神經(jīng)網(wǎng)絡(luò)
CNN呼胚,即 convolution neural network的縮寫。我們以2維卷積神經(jīng)網(wǎng)絡(luò)來說明其含義息裸,首先理解一下卷積的概念蝇更,其實就是用滑動窗口的思想進行矩陣相乘沪编,假設(shè)我們有綠色的5x5數(shù)據(jù)矩陣,和黃色的3x3窗口(這里我們稱其為卷積核)年扩,通過步長為1的卷積操作操作蚁廓,就得到了右側(cè)紅色的3x3結(jié)果,通俗講就是不斷移動卷積核厨幻,讓其與輸入矩陣對應(yīng)位置相乘并求和相嵌,得出一個子矩陣
神經(jīng)網(wǎng)絡(luò)中使用的卷積運算,在數(shù)學上其實是互相關(guān)函數(shù)(corss-relation function)况脆,表達式如下
上式和我們給出的動畫一致饭宾,代表卷積操作的步長(stride)為1,如果垂直和水平方向的的步長s和t不為1漠另,那么需要修改如下:
2維卷積運算后的矩陣大小如何計算呢:
其中k和l代表卷積核的寬和高捏雌,t和s代表水平和垂直方向的步長跃赚,x和y代表輸入矩陣的寬度和高度笆搓。以本節(jié)開始給出的例子,輸入矩陣是5x5纬傲,卷積核是3x3满败,步長是1那么輸出矩陣的邊長就是(5 - 3 + 1)/ 1 = 3
這種計算方式是在valid的模式下適用的,也就是卷積核移動時不會超出原矩陣的邊界叹括,如果允許超出算墨,并對超出部分補0,這種模式叫做same模式汁雷,公式就改為:
卷積層特別適合處理圖像净嘀,因為這種操作和人眼的視覺細胞工作方式很像,每個視覺神經(jīng)細胞都只能感受有限的圖像區(qū)域侠讯,但是這些負責顏色和形狀的神經(jīng)細胞掃描過圖像后挖藏,就能在我們大腦合成出有效的信息
多個卷積核,模擬了不同工種的視覺細胞厢漩,每個負責提煉原始2維信息中的部分結(jié)構(gòu)特征膜眠,通過層層加深,把一個扁平模型逐漸深化溜嗜,對深層次的特征進行學習宵膨,最后再通過感知機中的全連接網(wǎng)絡(luò)和激活函數(shù)實現(xiàn)對特征的分類
那么使用CNN的優(yōu)勢在什么地方呢?
卷積運算在機器學習領(lǐng)域有三個重要的優(yōu)勢炸宵,分別是:
- 稀疏交互(sparse interactions)
- 參數(shù)共享(parameter sharing)
- 等變表示(equivariant representations)
池化
池化是一種降采樣的過程辟躏。因為CNN層通常有不止一個卷積核來提取不同維度的特征,并且為了不限制網(wǎng)絡(luò)的表示能力土全,大部分場景都會使用same模式填充0捎琐,這樣輸入尺寸不變抑钟,輸出維度增多,如果一個網(wǎng)絡(luò)包含多層CNN野哭,數(shù)據(jù)會膨脹在塔,池化就可以很好的解決這個問題。除了下面列舉的最大池化和平均池化拨黔,池化函數(shù)還可以選擇如L2范數(shù)或者舉例中心像素的加權(quán)平均函數(shù)等蛔溃。
池化還有一個非常重要的作用就是學習不變性,當使用分離的幾個卷積核分別學得了不同的特征篱蝇,比如下圖中旋轉(zhuǎn)了不同角度的數(shù)字5贺待,當使用池化單元計算時,可以學得對輸入的某些變換的不變性零截。
使用來自LeCun論文中的LeNet5作為案例, 來看一個基本的CNN模型是如何構(gòu)成的
(這個模型的介紹非常多麸塞,這里不再詳述,中文介紹可以參考這里)
可以看出來涧衙,基本上就是
輸入 +(卷積+池化)x n +全連接 x m
CNN模型中哪工,常見的激活函數(shù)是relu
Relu的特點
① 單側(cè)抑制
② 相對寬闊的興奮邊界
③ 稀疏激活性
帶來的好處:
- 稀疏激活,更有利于擬合數(shù)據(jù)特征
- 收斂速度快可以解決梯度彌散問題(Vanishing Gradient Problem)
- 計算復(fù)雜度低
CNN中全連接層的作用
充當分類器