赞
踩
BP网络的产生主要是误差的反向传播,根据输出函数和目标函数的误差来修正权值和阈值。现在就给大家讲讲标准梯度下降法修正权值和阈值具体算法实现。以三层结构(输入层-隐含层-输出层)的模型为案例进行讲解:
一:BP神经网络
输入层-隐含层-输出层
现在给出模型构建所需的参数
根据模型,隐含层中神经元的输出为:
输出层中神经的输出为:
定义误差函数为:
二:权值阈值的更新
权值和阈值的变化率涉及到矩阵的求导,关于矩阵运算的基本规则、会在后期单独介绍,在此就不介绍矩阵求导规则。
输出层的权值、阈值梯度变化:
隐含层的权值、阈值梯度变化:
将权值和阈值的变化值加到权值阈值上即可得到权值阈值的更新值,经过不断训练即可得到使得误差最小的权值、阈值。
此方法是BP网络训练权值、阈值的最初的方法,随着对人工网络的深入研究,基于标准梯度下降法又提出了附加动量的bp算法、可变学习速率的bp算法、拟牛顿法等。请持续关注MATLAB爱好者公众号,作者会持续更新关于权值阈值的学习算法。
误差变化图
三:标准梯度下降法MATLAB代码
现给出单隐含层和双隐含层的权值阈值学习代码案例:
clear allP=[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}=SSEend
往期相关推荐(点击下方文字直接访问)
神经网络连载(三)
神经网络连载(二)
神经网络连载(一)
本文作者:过冷水
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。