BP反向传播算法浅谈(Error Back-propagation)
?最近在打基礎(chǔ),大致都和向量有關(guān),從比較基礎(chǔ)的人工智能常用算法開始,以下是對BP算法研究的一個小節(jié)。
?? ? ?本文只是自我思路的整理,其中舉了個例子,已經(jīng)對一些難懂的地方做了解釋,有興趣恰好學(xué)到人工智能對這塊不能深入理解的,可以參考本文。
?? ? ?因為大部分涉及公式,我就直接貼圖了,請諒解,如果需要全文可以聯(lián)系@梁斌penny 謝謝。
通過帶*的權(quán)重值重新計算誤差,發(fā)現(xiàn)誤差為0.18,比老誤差0.19小,則繼續(xù)迭代,得神經(jīng)元的計算結(jié)果更加逼近目標(biāo)值0.5
?
感想
?在一個復(fù)雜樣本空間下,對輸入和輸出進(jìn)行擬合
(1)??????多少個hidden unit才能符合需要(hidden unit就是圖中的P,Q)
(2)??????多少層unit才能符合需要(本例為1層)
(3)??????如果有n層,每層m個unit,k個輸入,1個輸出,那么就有K*m^(n+1)條邊,每條邊有一個權(quán)重值,這個計算量非常巨大
(4)??????如果k個輸入,1個輸出,相當(dāng)于將k維空間,投射到一個1維空間,是否可以提供足夠的準(zhǔn)確性,如果是k個輸入,j個輸出,j比k大,是否是一個升維的過程,是否有價值?
?
收獲
1)? 了解偏導(dǎo)。
2)? 了解梯度。
3)? 產(chǎn)生新的思考
?
參考文獻(xiàn):
1?http://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)
2?http://www.rgu.ac.uk/files/chapter3%20-%20bp.pdf
3?http://www.cedar.buffalo.edu/~srihari/CSE574/Chap5/Chap5.3-BackProp.pdf
驗證代碼:
#include "stdio.h" #include <math.h> const double e = 2.7182818; int main(void) {double input[] = {0.35,0.9};double matrix_1[2][2]={{0.1,0.4},{0.8,0.6},};double matrix_2[] = { 0.3,0.9 };for(int s= 0; s<1000; ++s){double tmp[] = {0.0,0.0};double value = 0.0;{for(int i = 0;i<2;++i){for(int j = 0;j<2;++j){tmp[i] += input[j]*matrix_1[j][i];}tmp[i] = 1/(1+pow(e,-1*tmp[i]));}for(int i = 0;i<2;++i){value += tmp[i]*matrix_2[i];}value = 1/(1+pow(e,-1*value));}double RMSS = (0.5)*( value - 0.5)*(value-0.5);printf("%f,%f\n",value,RMSS);if(value - 0.5 < 0.01){break;}double E = value - 0.5;matrix_2[0] = matrix_2[0] - E*value*(1-value)*tmp[0];matrix_2[1] = matrix_2[1] - E*value*(1-value)*tmp[1];//printf("##%f,%f\n",matrix_2[0],matrix_2[1]);matrix_1[0][0] = matrix_1[0][0] - E*value*(1-value)*matrix_2[0]*tmp[0]*(1-tmp[0])*matrix_1[0][0];matrix_1[1][0] = matrix_1[1][0] - E*value*(1-value)*matrix_2[0]*tmp[0]*(1-tmp[0])*matrix_1[1][0];matrix_1[0][1] = matrix_1[0][1] - E*value*(1-value)*matrix_2[0]*tmp[0]*(1-tmp[1])*matrix_1[0][1];matrix_1[1][1] = matrix_1[1][1] - E*value*(1-value)*matrix_2[0]*tmp[0]*(1-tmp[1])*matrix_1[1][1];//printf("##%f,%f\n",matrix_1[0][0],matrix_1[1][0]);//printf("##%f,%f\n",matrix_1[0][1],matrix_1[1][1]);}return 0; }
from:?http://blog.csdn.net/pennyliang/article/details/6695355
總結(jié)
以上是生活随笔為你收集整理的BP反向传播算法浅谈(Error Back-propagation)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自编码器Autoencoders
- 下一篇: 如何理解naive Bayes