前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络连载(四)

神经网络连载(四)

作者头像
巴山学长
发布2019-07-15 15:37:29
4290
发布2019-07-15 15:37:29
举报
文章被收录于专栏:巴山学长巴山学长巴山学长

BP网络的产生主要是误差的反向传播,根据输出函数和目标函数的误差来修正权值和阈值。现在就给大家讲讲标准梯度下降法修正权值和阈值具体算法实现。以三层结构(输入层-隐含层-输出层)的模型为案例进行讲解:

一:BP神经网络

输入层-隐含层-输出层

现在给出模型构建所需的参数

根据模型,隐含层中神经元的输出为:

输出层中神经的输出为:

定义误差函数为:

二:权值阈值的更新

权值和阈值的变化率涉及到矩阵的求导,关于矩阵运算的基本规则、会在后期单独介绍,在此就不介绍矩阵求导规则。

输出层的权值、阈值梯度变化:

隐含层的权值、阈值梯度变化:

将权值和阈值的变化值加到权值阈值上即可得到权值阈值的更新值,经过不断训练即可得到使得误差最小的权值、阈值。

此方法是BP网络训练权值、阈值的最初的方法,随着对人工网络的深入研究,基于标准梯度下降法又提出了附加动量的bp算法、可变学习速率的bp算法、拟牛顿法等。请持续关注MATLAB爱好者公众号,作者会持续更新关于权值阈值的学习算法。

误差变化图

三:标准梯度下降法MATLAB代码

现给出单隐含层和双隐含层的权值阈值学习代码案例:

clear all
P=[0.1 0.3 0.14 0.5 ;0.2 0.5 0.2 0.1; 0.3 0.6 0.6 0.2;0.4 0.7 0.1 0.3; 0.1 0.4 0.6 0.6];
T=[0.5;0.6;0.3;0.4;0.2];
W1=rand(3,4) ; B1=rand(3,1)*ones(1,5);
W2=rand(1,3) ; B2=ones(1,5)*rand(1,1);x=W1*P'+B1;
fx='tansig(x)';
A1=eval(fx);
y=W2*A1+B2;
fy='purelin(y)';
A2=eval(fy);
E=T'-A2;
SSE=sumsqr(E);
fyd=ones(1,5);
Lp.lr= 0.0028;
M=cell(4,25);
for epoch=1:100;
    dW2=0.0028*((E.*fyd).*ones(1,5))*pinv(A1);%0.0028:为设置的一个常数系数,表示下降速率;fyd为purelin的导数
    dB2=0.0028*((E.*fyd).*ones(1,5));%0.0028*((E.*fyd):为系数所以点成的形式乘以矩阵
    dW1=0.0028*(((((ones(3,1)*(E.*fyd))).*((4*exp(-2*A1))./(exp(-2*A1) + 1).^2))*ones(5,1)).*pinv(W2))*ones(1,5)*pinv(P');%((4*exp(-2*A1))./(exp(-2*A1) + 1).^2)为tansig函数的导数
    dB1=0.0028*(((((ones(3,1)*(E.*fyd))).*((4*exp(-2*A1))./(exp(-2*A1) + 1).^2))*ones(5,1)).*pinv(W2))*ones(1,5);
    W1=W1+dW1;
    B1=B1+dB1;
    W2=W2+dW2;
    B2=B2+dB2;
    x=W1*P'+B1;
    fx='tansig(x)';
    A1=eval(fx);
    y=W2*A1+B2
    fy='purelin(y)'
    A2=eval(fy);
    E=T'-A2;
    SSE=sumsqr(E);
    M{epoch}=SSE
end

往期相关推荐(点击下方文字直接访问)

神经网络连载(三)

神经网络连载(二)

神经网络连载(一)

本文作者:过冷水

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档