亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

機器學習算法 原理、實現與實踐 —— 感知機與梯度下降

2019-11-14 10:02:47
字體:
來源:轉載
供稿:網友

機器學習算法 原理、實現與實踐 —— 感知機與梯度下降 神經網絡

http://www.49028c.com/ronny/p/ann_01.html

 

機器學習算法 原理、實現與實踐 —— 感知機與梯度下降

 

一、前言

1,什么是神經網絡?

人工神經網絡(ANN)又稱神經網絡(NN),它是一種受生物學啟發而產生的一種模擬人腦的學習系統。它通過相互連結的結點構成一個復雜的網絡結構,每一個結點都具有多個輸入和一個輸出,并且該結點與其他結點以一個權重因子相連在一起。通俗來說,神經網絡是一種學習器,給它一組輸入,它會得到一組輸出,神經網絡里的結點相互連結決定了輸入的數據在里面經過怎樣的計算。我們可以通過大量的輸入,讓神經網絡調整它自身的連接情況從而總是能夠得到我們預期的輸出。

2,神經網絡能干什么嗎?

神經網絡對于逼近實數值、離散值或向量值的目標函數提供了一種健壯性很強的方法,現在已經成功應用到很多領域,例如視覺場景分析、手寫字符識別、語音識別、人臉識別等。它可以適用在任何實例是“屬性-值”Feature→Value的情況中,需要學習的目標函數是定義在可以用向量描述的實例上,向量由預先定義的特征組成,比如字符識別,那么特征可以是圖像中的每個像素亮度值。

現代計算機識別的過程通常都可以描述為這樣一個過程:對象 →特征→類別,理論上都可以用神經網絡來解決。

本篇文章將是人工神經網絡這個主題的第一篇文章,主要從最簡單的神經網絡結構入手,介紹一些基本算法原理。后面會陸續涉及到多層神經網絡的原理及其C++實現,同時隨著深度學習的提出,卷積神經網絡也漸漸走進人們的視野,它在圖像識別上表現非常不錯,這個主題也將在后面的文章中有全面的介紹。

二、感知器

一個感知器的結構圖如下:

image

稍后我們會知道感知器實際上是神經網絡結構中的一個神經元,那么一個感知器就夠成了最簡單的神經網絡系統(雖然還算不上是網絡)。感知器是以一組實數向量作為輸入,計算這些輸入的線性組合,如果結果大于某個閾值就輸出1,否則就輸出-1。如果我們用公式表達,則假設輸入為x1到xn,那么感知器可以表示為一個函數:

 

o(x)={1?1 if   w0+x1w1+?+xnwn>0 otherwise

 

我們把?w0看作是上面提到的閾值,w1至wn為一組權值。o(x)就是將輸入向量按一組權重進行線性加權求和后做的一個符號函數。

我們可以把感知器看成n維實例空間(點空間)中的超平面的決策面,平面一側的所有實例輸出1,對另一側的實例輸出-1,這個決策超平面的方程是w? ?x? =0。

針對于我們在數據分類的應用時,就是將我們提供的所有樣本數據分為2類,對于其中一類樣本,感知器總是輸出1,而另一類總是輸出-1。但是對于任意樣本總能找出這個超平面嗎,或者是說是找出一組這樣的權值向量嗎?答案顯然是否定的,只有線性可分的空間可以找到超平面,或者說可以找出一組權值。

那么我們怎么利用感知器呢?或者說我們的目標是什么?

我們希望找到一組這樣的權值,對于我們輸入的每一組向量,總是能夠得到一個我們期望的值。但是上面的感知器功能顯然不夠,它只能得到2個結果,即1和-1。

在實際的模式分類的應用中,樣本空間往往并不是線性的,即使是2維數據的集合也可能不是線性可分的,比如下面這張圖:

image

而用這樣的感知器結點來構建神經網絡顯然是不行的,因為線性單元連結在一起得到的仍然是線性單元,我們需要的是一種非線性映射,于是就產生了激活函數這個概念。激活函數是一種非線性函數同時是可微函數(可以求導數),為什么要可微呢,因為我們需要知道權重是怎么影響最終輸出的,我們要根據輸出來調節那些權重向量,也就是后面講到的梯度下降法則。

激活函數有很多種,關于激活函數的種類這里不準備介紹太多,只要知道我們選用的是S型激活函數,它將整個一維空間映射到[0,1]或[-1,1]。下面是S型sigmoid函數和它的導數:

 

f(x)=11+e?αx(0<f(x)<1)

 

 

f′(x)=αe?αx(1+e?αx)2=αf(x)[1?f(x)]

 

經過這樣的非線性映射,我們的感知器(現在應該叫SIMGOID單元)就變成了下面這種結構:

image

上面結構中w0我們習慣稱它為偏置,相當于我們多了一個x0=1的輸入。

對于上面這種結構,我們可以有如下結論:

1)對于任意一組輸入和一個我們預想的在[0,1]之間的輸出,我們總可以找到一組w? 使得。

2)對于很多組這樣的輸入樣本,我們可以通過不斷的調整權值,來讓它們的輸出接近于我們預想的輸出。

下面我們該考慮,如何求得這樣的一組權值向量。

三、反向傳播算法

我們需要在向量空間中搜索最合適的權值向量,但是我們不能盲目的搜索,需要有一定的規則指導我們的搜索,那么梯度下降就是很有用的方法。首先我們來定義輸出誤差,即對于任意一組權值向量,那它得到的輸出和我們預想的輸出之間的誤差值。

定義誤差的方法很多,不同的誤差計算方法可以得到不同的權值更新法則,這里我們先用這樣的定義:

 

E(w? )=12∑d∈D(td?od)2

 

上面公式中D代表了所有的輸入實例,或者說是樣本,d代表了一個樣本實例,od表示感知器的輸出,td代表我們預想的輸出。

這樣,我們的目標就明確了,就是想找到一組權值讓這個誤差的值最小,顯然我們用誤差對權值求導將是一個很好的選擇,導數的意義是提供了一個方向,沿著這個方向改變權值,將會讓總的誤差變大,更形象的叫它為梯度。

 

?E(wi)=?E?w=12?∑d∈D(td?od)2?wi=12∑d∈D?(td?od)2?wi

 

既然梯度確定了E最陡峭的上升的方向,那么梯度下降的訓練法則是:

 

wi→←wi→+Δwi→,其中Δwi→=?η?E?wi

 

梯度下降是一種重要最優化算法,但在應用它的時候通常會有兩個問題:

1)有時收斂過程可能非常慢;

2)如果誤差曲面上有多個局極小值,那么不能保證這個過程會找到全局最小值。

為了解決上面的問題,實際中我們應用的是梯度下降的一種變體被稱為隨機梯度下降。上面公式中的誤差是針對于所有訓練樣本而得到的,而隨機梯度下降的思想是根據每個單獨的訓練樣本來更新權值,這樣我們上面的梯度公式就變成了:

 

?E?wi=12?(t?o)2?wi=?(t?o)?o?wi

 

經過推導后,我們就可以得到最終的權值更新的公式:

 

wi=wi+Δwiδ=(t?o)o(1?o)Δwi=ηδxi

 

有了上面權重的更新公式后,我們就可以通過輸入大量的實例樣本,來根據我們預期的結果不斷地調整權值,從而最終得到一組權值使得我們的SIGMOID能夠對一個新的樣本輸入得到正確的或無限接近的結果。

四、實例說明

上面我們已經介紹了經過基本的感知器,我們構造了一種SIGMOID單元,可以對“輸入向量-值”這種模式的數據進行目標函數的逼近,但是這畢竟只是單個神經元,它逼近不了太復雜的映射關系,我們需要構造一個多層的神經網絡結構來解決更一般的學習與分類問題。

下面我們通過一個簡單的逼近實例來說明單個SIMGOID單元的工作原理。

首先,我們假設我們的輸入是一個4維的向量x=[x1,x2,x3,x4],其中xi的值為0或者1。為了簡單其見,我們只設計了下面4種樣本。

 

x1=[1,0,0,0]x2=[0,1,0,0]x3=[0,0,1,0]x4=[0,0,0,1]

 

對于這4類樣本,我們希望它們得到4種不同的結果以說明它們屬于哪一種,也就是我們的目標輸出是一個標號,像下面這樣:

 

x1→1x2→2x3→3x4→4

 

上面的樣本只是4種,我們可以讓每一種樣本重復來構建大量的樣本實例。比如實際采集到的樣本可能會有所浮動,比如與x1同類的樣本可能采集到的數據是這樣的x=[0.993,0.002,0.0012,?0.019],所以我們可以用很小的隨機數來模擬大量的樣本輸入。

因為我們的SIMGOID單元輸出值只可能是[0,1],所以我們可以將我們的類別標號歸一化為[1,2,3,4]/4,下面我們用C++來模擬這一過程。

1,樣本獲?。?/p>復制代碼

 1 void SampleNN::getSamplesData() 2 { 3     const int iterations = 15000; // 15000個樣本 4     for (int i = 0; i < iterations; i++) 5     { 6         int index = i % 4; 7         vector<double> dvect(4, 0); 8         dvect[index] = 1; 9         for (size_t i = 0; i != dvect.size(); i++)10         {11             dvect[i] += (5e-3*rand() / RAND_MAX - 2.5e-3);12         }13         inputData.push_back(dvect);14     }15 }復制代碼

2,用[0,0.05]之間的隨機值初始化權重。

復制代碼
1 void SampleNN::intialWgt()2 {3     // 4個連結和一個偏置w04     for (int i = 0; i != 5; i++)5     {6         weight.push_back(0.05*rand()/RAND_MAX);7     }8 }復制代碼

3,向前計算

復制代碼
1 void SampleNN::cmtForward(const vector<double>& inVect)2 {3     double dsum = weight[4];//先把偏置加上4     for (size_t i = 0; i != inVect.size(); i++)5     {6         dsum += (inVect[i] * weight[i]);7     }8     actual_output = 1 / (1 + exp(-1*dsum));9 }復制代碼

4,更新權重

復制代碼
 1 void SampleNN::updataWgt(const vector<double>& inVect,const double true_output) 2 { 3     double learnRate = 0.05; // 權重更新參數 4     for (size_t i = 0; i != weight.size() - 1; i++) 5     { 6         weight[i] += (learnRate*(true_output - actual_output)*actual_output*(1 - actual_output)*inVect[i]); 7     } 8     // w0單獨計算 9     weight[4] += (learnRate*(true_output - actual_output)*actual_output*(1 - actual_output)*1);10 }復制代碼

下面是經過15000次迭代后得到的結果:

image

從上面結果可以看出,輸出的值基本收斂于0.25、0.5、0.75與0.96,說明已經可以用來分類的了。

五、結束語

經過上面的討論,單個神經元的功能及其原理應該可以清楚的了解,那么下一步,我們將用這些單個的神經元(SIGMOID單元)相互連結組成一個網狀結構形成神經網絡,并用來做更一些有意義的識別,這些內容將在下一篇文章中詳細描述。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
yellow中文字幕久久| 国产精品久久久久久av下载红粉| 91久久久久久久久久久久久| 亚洲一区二区三| 亚洲一区二区三区成人在线视频精品| 欧美精品一二区| 亚洲人成在线一二| 欧美激情精品久久久久久久变态| 国产精品久久久久秋霞鲁丝| 精品久久久中文| 国产一区二区三区久久精品| 久久久久久美女| 国产xxx69麻豆国语对白| 欧美做受高潮电影o| 欧美黄色免费网站| 亚洲97在线观看| 亚洲精品电影网在线观看| 欧美日韩激情美女| 午夜精品久久久久久久99黑人| 国产精品高清网站| 亚洲xxxxx| 美日韩精品免费观看视频| 日韩中文有码在线视频| 欧美特黄级在线| 欧美视频不卡中文| 久久香蕉国产线看观看网| 久久久精品中文字幕| 韩国国内大量揄拍精品视频| 国产精品爱啪在线线免费观看| 久久国产加勒比精品无码| 亚洲第一中文字幕在线观看| 国产精品91视频| 8090成年在线看片午夜| 欧美体内谢she精2性欧美| 日韩中文娱乐网| 久久精品国产久精国产思思| 有码中文亚洲精品| 亚洲理论片在线观看| 欧美精品在线看| 午夜精品久久久久久久99热浪潮| 欧美国产视频一区二区| 国产噜噜噜噜久久久久久久久| 国产美女直播视频一区| 亲子乱一区二区三区电影| 欧美国产日韩一区二区在线观看| 欧美猛男性生活免费| 日韩www在线| 亚洲国产福利在线| 日本免费一区二区三区视频观看| 亚洲美女福利视频网站| 久久视频在线看| 欧美人与性动交| 97香蕉超级碰碰久久免费的优势| 久久精品成人动漫| 成人欧美一区二区三区黑人| 亚洲一区二区三区四区视频| 川上优av一区二区线观看| 亚洲福利视频久久| 国产精品久久精品| 国产区精品在线观看| 91在线观看免费高清完整版在线观看| 日韩经典中文字幕| 国产精品海角社区在线观看| 成人黄色免费片| 国产视频一区在线| 日韩欧美成人区| 亚洲理论电影网| 国产999精品久久久影片官网| 91禁外国网站| 亚洲日韩中文字幕在线播放| 精品亚洲一区二区三区在线播放| 中文字幕精品—区二区| 久久国产精品久久久久久久久久| 欧洲美女免费图片一区| 日韩免费在线观看视频| 国产精品一香蕉国产线看观看| 国产精品视频99| 日产日韩在线亚洲欧美| 欧美国产高跟鞋裸体秀xxxhd| 国产aaa精品| 亚洲欧美国产精品专区久久| 国产91在线播放九色快色| 51精品国产黑色丝袜高跟鞋| 国产精品久久久久久久久久久久久久| 精品无码久久久久久国产| 久久久久久中文字幕| www.日韩欧美| 久久激情视频久久| 性色av一区二区咪爱| 色妞色视频一区二区三区四区| 高跟丝袜欧美一区| 国产精品网址在线| 亚洲欧美日韩视频一区| 日韩精品中文字| 日韩欧美在线中文字幕| 国产不卡av在线免费观看| 国产精品网红福利| 亚洲丁香婷深爱综合| 中文国产成人精品久久一| 久久久女人电视剧免费播放下载| 成人福利网站在线观看| 欧美性猛交99久久久久99按摩| 亚洲精品动漫久久久久| 欧美成人免费在线视频| 午夜精品久久久久久久白皮肤| 国产精品成人av性教育| 亚洲美女又黄又爽在线观看| 久久99亚洲精品| 91视频国产高清| 欧美日韩成人网| 欧美疯狂xxxx大交乱88av| 亚洲欧美在线一区二区| 欧美国产日本在线| 久久精品视频网站| 大荫蒂欧美视频另类xxxx| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲天堂av电影| 国产中文欧美精品| 亚洲欧美一区二区三区久久| 国产精品久久久久久久久久ktv| 日本欧美精品在线| 91久热免费在线视频| 日韩中文字幕在线视频播放| 国产日韩精品在线播放| 久久久国产91| 国产精品入口夜色视频大尺度| 日韩麻豆第一页| 久久久久一本一区二区青青蜜月| 欧美亚洲国产日本| 精品高清一区二区三区| 亚洲欧洲美洲在线综合| 久久综合电影一区| 亚洲第一av网| 亚洲免费视频一区二区| 91av网站在线播放| 久久精品国产96久久久香蕉| 九九精品视频在线| 久久99精品国产99久久6尤物| 日韩美女视频免费在线观看| 国产丝袜精品视频| 中文字幕无线精品亚洲乱码一区| 日韩电视剧在线观看免费网站| 久久大大胆人体| 久久理论片午夜琪琪电影网| 操人视频在线观看欧美| 伊人成人开心激情综合网| 欧美精品手机在线| 日韩亚洲精品电影| 国产区亚洲区欧美区| 国产精自产拍久久久久久蜜| 欧美在线观看www| 日韩不卡中文字幕| 国产日韩在线免费| 欧美激情一区二区三区久久久| 一本一本久久a久久精品综合小说| 亚洲国产精品高清久久久| 国语自产精品视频在线看抢先版图片| 欧美激情综合亚洲一二区| 国产精品免费看久久久香蕉| 久久久亚洲天堂| 久久99精品视频一区97| 国产中文字幕91| 亚洲jizzjizz日本少妇| 91av视频在线免费观看|