反向传播(Back propagation)算法推导具体过程

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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值