首页
学习
活动
专区
工具
TVP
发布

BP神经网络算法之三生三世:前世、今生、来世

第一生一世:前世(由来)

神经网络算法是模仿人类大脑处理信息的机制形成的一种机器学习方法。从下图可以看出它的结构演化过程。下面详细讲解:

图1:生物神经元结构

一个神经元拥有一个或者多个树突,每个树突都会各自接收前一层神经元们的刺激信号(冲动),每个树突都有各自的接受信号强弱的敏感度,每个树突接收到的真实信号就是刺激信号(冲动)乘以敏感度。所有接收到的真实信号累加后,如果超过这个神经元的电位阈值,则这个神经元会被激活,从而将信号转换冲动(刺激信号)再次传给后一层其他的神经元们。(注:以上描述,虽不严谨,基本属实,如有雷同,绝非巧合)

图2:数学神经元结构

x1,x2……xn-1可看作某个神经元的n-1个树突分别接收到的刺激信号(冲动);也就是数据样本中的一个样本的n-1个属性

w1j,w2j,……w(n-1)j可看作神经元j的n-1个树突各自的接收信号强弱的敏感度;也就是权重;

∑j=x1*w1j+x2*w2j+……+xn-1*w(n-1)j是神经元j接收到的信号的累加;

xn*wnj的值为阈值一般xn省略掉,wnj为阈值也称为偏置;

f表示转换函数一般为非线性函数,为了计算偏导数,函数需要满足可微;就是后文说的激活函数;生物神经元结构的激活行为就是靠激活函数完成的。

oj=f(∑j-wnj)表示神经元j被激活后传出的冲动(刺激信号);

图3:神经网络结构

神经网路结构一般包括三层:输入层,隐层,输出层。每一层都有多个神经元(输入层是节点)组成。输入层、输出层的神经元(节点)个数由样本数据集的数据维度决定。隐层的神经元个数可根据经验自由设置。有一点需要说明的就是:输入层是节点,而不是神经元。是因为输入层输出到第一层隐层的就是样本真实的属性值,这一点和神经元的输出是不同的。而隐层和输出层的输出都是经过加权求和转换之后的值。

图4:多层神经网络

多层神经网络包括多于一层的隐层。多层神经网络也就是深层神经网络,一般包括的隐层数较多,并且每一隐层的神经元的个数也比较多。

第二生二世:今生(理论推导)

符号说明

神经网络的层数m,也就是包括一个输入层,m-2个隐层,一个输出层;

输入层为I,其节点个数等于单个样本的输入属性数N_i;

隐层输出为Hh,h为1到m-2,每一个隐层的神经元个数为Nh;

输出层为O,其神经元个数等于单个样本的输出属性数N_o;

样本真实输出为R;

层之间连接的权重为Wq,q为0到m-2,Wq矩阵的大小为(g, t), g为该隐层前一层的神经元(节点)个数,t为该隐层的神经元个数;

对应的偏置为Bq,Bq矩阵的大小为(1, t), t为该层的神经元个数;

隐层的激活函数Ah,h为0到m-2。每一层的激活函数可以不同,但是大多数情形下设置为相同的;

常用的激活函数:Sigmoid,Tanh,ReLu。选择激活函数时一定要注意:输出层激活函数的输出尺度一定要和样本的输出数据是同一尺度。例如Sigmoid的输出是0-1,因此样本的输出也应该转化到0-1之间。

输出层O与样本真实输出R之间的成本函数C,回归问题用最小二乘函数, 分类问题用交叉熵函数;

s为子样本数,也就是一次训练过程中的样本数。当s为1是在线学习;当s为k,也就是全部样本数,为增量学习;s为小于k的其他数值为批量学习,比较常用;

运算符号说明:+为numpy数组的广播运算加法;×为矩阵对应元素相乘;●表示矩阵乘法;

网络结构图

样本数据说明

正向传播过程

反向传播过程

回归问题

分类问题

梯度下降

第三生三世:来世(预测实例)

北京市Pm2.5预测

训练结果

预测结果

分类实例:Mnist手写数字预测

训练结果

预测结果

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180719G0FJLO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券