梯度下降与delta法则
delta法則
盡管當(dāng)訓(xùn)練樣例線性可分時(shí),感知器法則可以成功地找到一個(gè)權(quán)向量,但如果樣例不是線性可分時(shí)它將不能收斂。因此,人們?cè)O(shè)計(jì)了另一個(gè)訓(xùn)練法則來(lái)克服這個(gè)不足,稱為 delta 法則(delta rule)。如果訓(xùn)練樣本不是線性可分的,那么 delta 法則會(huì)收斂到目標(biāo)概念的最佳 近似。?
delta 法則的關(guān)鍵思想是使用梯度下降(gradient descent)來(lái)搜索可能權(quán)向量的假設(shè)空間, 以找到最佳擬合訓(xùn)練樣例的權(quán)向量。
梯度下降
利用感知器法則的要求是必須訓(xùn)練樣本是線性可分的,當(dāng)樣例不滿足這條件時(shí),就不能再收斂,為了克服這個(gè)要求,引出了delta法則,它會(huì)收斂到目標(biāo)概念的最佳近似!
delta法則的關(guān)鍵思想是利用梯度下降(gradient descent)來(lái)搜索可能的權(quán)向量的假設(shè)空間,以找到最佳擬合訓(xùn)練樣例的權(quán)向量。
簡(jiǎn)單的理解,就是訓(xùn)練一個(gè)無(wú)閾值的感知器,也就是一個(gè)線性單元。它的輸出o如下:
?
? ?先指定一個(gè)度量標(biāo)準(zhǔn)來(lái)衡量假設(shè)(權(quán)向量)相對(duì)于訓(xùn)練樣例的訓(xùn)練誤差(training error)。
其中D是訓(xùn)練樣例集合,td?是訓(xùn)練樣例d的目標(biāo)輸出,od是線性單元對(duì)訓(xùn)練樣例d的輸出。E(w)是目標(biāo)輸出td和線性單元輸出od的差異的平方在所有的訓(xùn)練樣例上求和后的一半。我們定義E為w的函數(shù),是因?yàn)榫€性單元的輸出o依賴于這個(gè)權(quán)向量。 ?
在這里,我們對(duì)于給定的訓(xùn)練數(shù)據(jù)使E最小化的假設(shè)也就是H中最可能的假設(shè),也就是找到一組權(quán)向量能使E最小化。
直觀感覺(jué),E函數(shù)就是為了讓目標(biāo)輸出td?與線性輸出od的差距也來(lái)越小,也就是越來(lái)越接近目標(biāo)概念。
上圖中,紅點(diǎn)和綠點(diǎn)是線性不可分的(不能找到一條直線完全分開(kāi)兩類點(diǎn)),但是找到一條線能把兩類點(diǎn)盡可能的分開(kāi)。使錯(cuò)分的點(diǎn)盡可能地少。
為什么感知器不能分開(kāi)呢?
就在于它是帶閾值的,>0 為1,<0為-1。正是這種強(qiáng)制性,使函數(shù)輸出帶有跳躍性(不是可微的),用上圖中的圖像來(lái)表示就是,在訓(xùn)練過(guò)程中,線會(huì)一直順時(shí)針或著逆時(shí)針旋轉(zhuǎn),而不會(huì)收斂到最佳值。
上圖中,兩個(gè)坐標(biāo)軸表示一個(gè)簡(jiǎn)單的線性單元中兩個(gè)權(quán)可能的取值,而圓圈大小代表訓(xùn)練誤差E值的大小。
為了確定一個(gè)使E最小化的權(quán)向量,梯度下降搜索從一個(gè)任意的初始向量開(kāi)始,然后以很小的步伐反復(fù)修改這個(gè)向量。每一步都沿誤差曲線產(chǎn)生最陡峭的下降方向修改權(quán)向量(見(jiàn)藍(lán)線),繼續(xù)這個(gè)過(guò)程直到得到全局的最小誤差點(diǎn)。
?
這個(gè)最陡峭的下降方向是什么呢?
可以通過(guò)計(jì)算E相對(duì)向量w的的每個(gè)分量的導(dǎo)數(shù)來(lái)得到這個(gè)方向。這個(gè)向量導(dǎo)數(shù)被稱為E對(duì)于W的梯度(gradient),記作ΔE(w).
ΔE(w)本身是一個(gè)向量,它的成員是E對(duì)每個(gè)wi的偏導(dǎo)數(shù)。當(dāng)梯度被解釋為權(quán)空間的一個(gè)向量時(shí),它確定了使E最陡峭上升的方向。
既然確定了方向,那梯度下降法則就是:
?
其中:
這里的η是一個(gè)正的常數(shù)叫做學(xué)習(xí)速率,它決定梯度下降搜索中的步長(zhǎng)。公式中的符號(hào)是想讓權(quán)向量E下降的方向移動(dòng)。
這個(gè)訓(xùn)練法則也可以寫成它的分量形式:
?
其中:
? ? (公式1)
最陡峭的下降可以按照比例改變中的每一分量來(lái)實(shí)現(xiàn)。
可以通過(guò)前面的訓(xùn)練誤差公式中計(jì)算E的微分,從而得到組成這個(gè)梯度向量的分量。
推導(dǎo)過(guò)程略去。
最后得到:
?
其中xid表示訓(xùn)練樣例d的一個(gè)輸入分量xi。現(xiàn)在我們有了一個(gè)公式,能夠用線性單元的輸入xid,輸出od以及訓(xùn)練樣例的目標(biāo)值td表示。
把次此公式帶入公式(1)得到了梯度下降權(quán)值更新法則。
? ?(公式2)
因此,訓(xùn)練線性單元的梯度下降算法如下:選取一個(gè)初始的隨機(jī)權(quán)向量;應(yīng)用線性單元到所有的訓(xùn)練樣例,然后根據(jù)公式2計(jì)算每個(gè)權(quán)值的Δwi;通過(guò)加上Δwi來(lái)更新每個(gè)權(quán)值,然后重復(fù)這個(gè)過(guò)程。
因?yàn)檫@個(gè)誤差曲面僅包含一個(gè)全局的最小值,所以無(wú)論訓(xùn)練樣例是否線性可分,這個(gè)算法都會(huì)收斂到具有最小誤差的權(quán)向量。條件是必須使用一個(gè)足夠小的學(xué)習(xí)速率η。
如果η太大,梯度下降搜素就有越過(guò)誤差面最小值而不是停留在那一點(diǎn)的危險(xiǎn)。因此常有的改進(jìn)方法是隨著梯度下降步數(shù)的增加逐漸減小η的值。
梯度下降算法的偽代碼:
?
要實(shí)現(xiàn)梯度下降的隨機(jī)近似,刪除(T4.2),并把(T4.1)替換為?。
?
?
隨機(jī)梯度下降算法
梯度下降是一種重要的通用學(xué)習(xí)范型。它是搜索龐大假設(shè)空間或無(wú)限假設(shè)空間的一種策略,它可以滿足以下條件的任何情況:
(1)假設(shè)空間包含連續(xù)參數(shù)化的假設(shè)。
(2)誤差對(duì)于這些假設(shè)參數(shù)可微。
在應(yīng)用梯度下降的主要實(shí)踐問(wèn)題是:
(1)有時(shí)收斂過(guò)程可能非常慢;
(2)如果在誤差曲面上有多個(gè)局部極小值,那么不能保證這個(gè)過(guò)程會(huì)找到全局最小值。
?
緩解這些困難的一個(gè)常見(jiàn)的梯度下降變體被稱為增量梯度下降算法(incremental gradient descent)或者隨機(jī)梯度下降(stochastic gradient descent)。
鑒于公式2給出的梯度下降訓(xùn)練法則在對(duì)D中的所有訓(xùn)練樣例求和后計(jì)算權(quán)值更新,隨機(jī)梯度下降的思想是根據(jù)每個(gè)單獨(dú)樣例的誤差增量計(jì)算權(quán)值更新,得到近似的梯度下降搜索.
修改后的訓(xùn)練法則與公式2相似,只是在迭代計(jì)算每個(gè)訓(xùn)練樣例時(shí)根據(jù)下面的公式來(lái)更新權(quán)值:
? ??公式3
其中,t、o和xi分別是目標(biāo)值、單元輸出和第i個(gè)訓(xùn)練樣例的輸入。
隨機(jī)梯度下降可被看作為每個(gè)單獨(dú)的訓(xùn)練樣例d定義不同的誤差函數(shù):
其中,td和od是訓(xùn)練樣例d的目標(biāo)輸出值和單元輸出值。
?隨機(jī)梯度下降迭代計(jì)算訓(xùn)練樣例集D的每個(gè)樣例d,在每次迭代過(guò)程中按照關(guān)于的梯度來(lái)改變權(quán)值。在迭代所有訓(xùn)練樣例時(shí),這些權(quán)值更新的序列給出了對(duì)于原來(lái)的誤差函數(shù)的梯度下降的一個(gè)合理近似。
?
標(biāo)準(zhǔn)的梯度下降和隨機(jī)的梯度下降之間的關(guān)鍵區(qū)別:
(1)標(biāo)準(zhǔn)的梯度下降是在權(quán)值更新前對(duì)所有的樣例匯總誤差,而隨機(jī)梯度下降的權(quán)值是通過(guò)考查每個(gè)訓(xùn)練樣例來(lái)更新的。
(2)在標(biāo)準(zhǔn)的梯度下降中,權(quán)值更新的每一步對(duì)多個(gè)樣例求和,這需要大量的計(jì)算。
(3)如果有多個(gè)局部極小值,隨機(jī)的梯度下降有時(shí)可能避免陷入這些局部極小值中,因?yàn)樗褂貌煌亩皇莵?lái)引導(dǎo)搜索。
?
注意:
公式3的增量法則與之前感知器法則訓(xùn)練法則相似。但是它們是不同的,在增量法則中o是值線性單元的輸出,而對(duì)于感知器法則,o是指閾值輸出,在公式中。
?
樣例:
輸入x1、x2,輸出為o,訓(xùn)練w0,w1,w2
滿足 w1+x1*w1+x2*x2=o
訓(xùn)練樣例為:
??
x1 x2 o 1 4 19 2 5 26 5 1 19 4 2 20頭文件
#ifndef HEAD_H_INCLUDED #define HEAD_H_INCLUDED #include <iostream> #include <fstream> #include <vector> #include <cstdio> #include <cstdlib> #include <cmath>using namespace std;const int DataRow=4; const int DataColumn=3; const double learning_rate=.01; extern double DataTable[DataRow][DataColumn]; extern double Theta[DataColumn-1]; const double loss_theta=0.001; const int iterator_n =100;#endif // HEAD_H_INCLUDED?
源代碼
#include "head.h" double DataTable[DataRow][DataColumn]; double Theta[DataColumn-1]; void Init() {ifstream fin("data.txt");for(int i=0;i<DataRow;i++){for(int j=0;j<DataColumn;j++){fin>>DataTable[i][j];}}if(!fin){cout<<"fin error";exit(1);}fin.close();for(int i=0;i<DataColumn-1;i++){Theta[i]=0.5;} } void batch_grandient() //標(biāo)準(zhǔn)梯度下降 {double loss=1000;for(int i=0;i<iterator_n&&loss>=loss_theta;i++){double Thetasum[DataColumn-1]={0};for(int j=0;j<DataRow;j++){double error=0;for(int k=0;k<DataColumn-1;k++){error+=DataTable[j][k]*Theta[k];}error=DataTable[j][DataColumn-1]-error;for(int k=0;k<DataColumn-1;k++){Thetasum[k]+=learning_rate*error*DataTable[j][k];}}double a=0;for(int k=0;k<DataColumn-1;k++){Theta[k]+=Thetasum[k];a+=abs(Thetasum[k]);}loss=a/(DataColumn-1);} } void stochastic_gradient() //隨即梯度下降 {double loss=1000;for(int i=0;i<iterator_n&&loss>=loss_theta;i++){double Thetasum[DataColumn-1]={0};for(int j=0;j<DataRow;j++){double error=0;for(int k=0;k<DataColumn-1;k++){error+=DataTable[j][k]*Theta[k];}error=DataTable[j][DataColumn-1]-error;double a=0;for(int k=0;k<DataColumn-1;k++){Theta[k]+=learning_rate*error*DataTable[j][k];a+=abs(learning_rate*error*DataTable[j][k]);}loss=a/(DataColumn-1);if(loss<=loss_theta)break;}} } void printTheta() {for(int i=0;i<DataColumn-1;i++)cout<<Theta[i]<<" ";cout<<endl; }int main() {Init();//batch_grandient(); stochastic_gradient();printTheta();return 0; }文章大部分轉(zhuǎn)載自:http://www.cnblogs.com/dztgc/archive/2013/05/02/3050315.html
總結(jié)
以上是生活随笔為你收集整理的梯度下降与delta法则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一文弄懂神经网络中的反向传播法
- 下一篇: 数据标准化的方法与意义