BP 神经网络
申明:本文章只求把 BP 神经网络的大概原理和应用做粗略的概括,有助于形成一个基本直观的概念,详细的公式推导论证、激活函数介绍、梯度下降之类的方法请参考其他资料,文章中例子 copy 自第一个参考链接的实验中,详细内容请自行查阅。
基本概念
人工神经网络 ANN(Artificial Neural Network)
BP 神经网络(Back Propagation):(误差)反向传播神经网络
应用:函数逼近、模式识别、分类、数据压缩
本质:坐标变换,矩阵乘法
激活函数(Activation Function):
- 定义:输入和输出之间的转换函数。
- 作用:如果不使用激活函数,则只输出就只是输入的线性组合,多层神经网络也就只相当于单层神经网络。而使用非线性函数可以逼近任意复杂函数
- 特征:非线性函数
- 例子:Sigmoid, tanh, ReLU …
基本原理和过程

一个例子
% BP 神经网络拟合函数
% 初始化
l = 0.2; % 学习步长
n = 30; % 样本数量
cell = 6; % 神经元个数
times = 3000; % 学习次数
x = (linspace(0, 2 * pi, n));
t = sin(x);
w1 = rand(cell, 1) * 0.05;
w2 = rand(1, cell) * 0.05;
b1 = rand(cell, 1) * 0.05;
b2 = rand * 0.05;
counts = 1;
e = zeros(1, times);
% 学习过程
for i = 1: times
ei = 0;
for a = 1: n
net1 = w1 * x(a) - b1;
out = logsig(net1); % log-sigmoid 激活函数
net2 = w2 * out - b2;
y(a) = net2;
det2 = (t(a) - y(a)); % 计算误差
det1 = ((det2 * (w2)').* out).*(1 - out);
w1 = w1 + det1 * x(a) * l; % 更新权重
w2 = w2 + (det2 * out)' * l;
b1 = -det1 * l + b1; % 更新偏置
b2 = -det2 * l + b2;
ei = ei + det2 ^2 / 2; % 累积误差
e(i) = ei;
end
if ei < 0.008
break;
end
counts = counts + 1;
end
% 逼近曲线
for a = 1:n
net1 = w1 * x(a) - b1;
out = logsig(net1);
net2 = w2 * out - b2;
y(a) = net2;
end
% 画图
subplot(2, 1, 1)
plot(x, t, 'b-', x, y, 'k*-');
legend('real', 'pred');
grid on;
title('BP method, y = sin(x)');
xlabel('x');
ylabel('y = sin(x)');
if(counts < times)
count = 1: counts;
sum = counts;
else
count = 1 : times;
sum = times;
end
subplot(2, 1, 2);
plot(count, e(1: sum));
grid on;
title('BP算法学习曲线');
xlabel('迭代次数');
ylabel('均方误差');

参考资料:
(百度文库)BP神经网络拟合函数
深度学习领域最常用的10个激活函数,一文详解数学原理及优缺点
常用激活函数(激励函数)理解与总结
深入理解深度学习中的激活函数
人工神经网络基本原理
通俗理解神经网络BP传播算法
本文概述了BP神经网络的基本原理,包括其作为ANN的一种,如何通过矩阵运算实现非线性逼近,以及使用激活函数如Sigmoid和log-sigmoid的重要性。通过一个拟合正弦函数的例子,展示了BP神经网络的学习过程和误差曲线。
12万+

被折叠的 条评论
为什么被折叠?



