日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

梯度下降与delta法则

發(fā)布時(shí)間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 梯度下降与delta法则 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。