反向传播(Back propagation)算法推导具体过程
2017-12-12 20:28
513 查看
BP算法的成就无需多言,现在就来进行一下具体的推导。推到过程依赖于西瓜书(《机器学习》 周志华)
1、首先定义一个单隐层神经网络,具体参考西瓜书102页:
2、各类符号的意义:
3、 初始化公式:
4、分别推导:
BP算法代码:
1、首先定义一个单隐层神经网络,具体参考西瓜书102页:
2、各类符号的意义:
3、 初始化公式:
4、分别推导:
BP算法代码:
x = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A1:Q8'); y = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A9:Q9'); x=x'; y=y'; %将y设为0,1两类 y=y-1; %获取输入参数的样本数与参数数 [m,n]=size(x); t=1; %输出层神经元 v=rand(n,n+1); %输入层与隐层的权值 w=rand(n+1,t); %隐层与输出层的权值 thy=rand(n+1); %隐层阀值 thj=rand(t); %输出层阀值 ty=zeros(m,t); %输出层输出 b=zeros(n+1); %隐层输出 gj=zeros(t); %累计误差对w,thj求导的参数 eh=zeros(n+1); %累计误差对v,thy求导的参数 xk=1; %学习率 kn=0; %迭代次数 sn=0; %同样的累计误差值累积次数 old_ey=0; %前一次迭代的累计误差 while(1) kn=kn+1; ey=0; %当前迭代的累计误差 for i=1:m %计算隐层输出 for j=1:n+1 ca=0; for k=1:n ca=ca+v(k,j)*x(i,k); end b(j)=1/(1+exp(-ca+thy(j))); end %计算输出层输出 for j=1:t cb=0; for k=1:n+1 cb=cb+w(k,j)*b(k); end ty(i,j)=1/(1+exp(-cb+thj(j))); end %计算当前迭代累计误差 for j=1:t ey=ey+((y(i)-ty(i,j))^2)/2; end %计算w,thj导数参数 for j=1:t gj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j)); end %计算v,thy导数参数 for j=1:n+1 teh=0; for k=1:t teh=teh+w(j,k)*gj(k); end eh(j)=teh*b(j)*(1-b(j)); end %更新v,thy for j=1:n+1 thy(j)=thy(j)+(-xk)*eh(j); for k=1:n v(k,j)=v(k,j)+k*eh(j)*x(i,k); end end %更新thj,w for j=1:t thj(j)=thj(j)+(-xk)*gj(j); for k=1:n+1 w(k,j)=w(k,j)+xk*gj(j)*b(k); end end end %迭代终止判断 if(abs(old_ey-ey)<0.0001) sn=sn+1; if(sn==100) break; end else old_ey=ey; sn=0; end end
相关文章推荐
- BP神经网络,BP推导过程,反向传播算法,误差反向传播,梯度下降,权值阈值更新推导,隐含层权重更新公式
- BP(反向传播)算法和CNN反向传播算法推导(转载)
- 反向传播(BackPropagation)算法的推导
- DNN反向传播推导过程
- 深度学习基础:反向传播即BP算法的推导过程
- 神经网络中的反向传播法算法推导及matlab代码实现
- 神经网络反向传播算法公式推导详解
- 三、梯度下降与反向传播(含过程推导及证明)
- 反向传播的工作过程以及公式推导
- DNN反向传播推导过程
- Batch Normalization的前向和反向传播过程
- 我来介绍一下"反向传播学习算法"和"梯度下降法"
- 理解反向传播(BackPropagation)算法(之一)
- 深度网络中softmax_loss、Smooth L1 loss计算以及反向传播推导
- 星期计算算法吉姆拉尔森星期推导过程
- BP算法(误差反向传播(Error Back Propagation, BP)算法)
- 理解A*寻路算法具体过程
- 【机器学习】反向传播神经网络推导
- 理解A*寻路算法具体过程
- 理解A*寻路算法具体过程