人工神经网络基础
1、激励函数
(1)将可能的无限域变换到指定的有限域进行输出
(2)类似于生物神经元的非线性转移特性(若是线性,则若干个线性组合依旧能用一个线性模型表示)
(3)常用的激励函数:
①斜坡函数
②阶跃函数
③符号函数
④sigmoid函数
⑤双曲正切函数
* 更常用的激励函数LeRU(2012年提出),优点
①本质上是分段线性模型,前向计算非常简单,无需指数之类的操作
②求偏导也简单,反向传播梯度,无需指数或除法之类的操作。
③不容易发生梯度消失或者是发散问题
④ReLU关闭了左边,使得很多隐层输出为0,起到了L1正则化的作用,在一定程度上缓解过拟合。
2、拓扑结构:单层网络、多层网络、前馈网络、反馈网络
*注:(1)理论上可以有无限多层
(2)理论上单隐层即可实现任意复杂的非线性函数。但是需要的节点可能是指数级的。
单层神经网络(单层感知器)
1、网络描述:加权和(加偏置)输入激活函数(无限域到有限域)后输出。
2、分类问题:
(1)两类问题:一个输出节点(1\-1)
(2)多类问题:输出节点数与类别数相同[0,0,...,1,...,0],输出是第几类那么第几个输出节点就是非零。
3、学习任务:
给定训练样本和相应目标值,确定网络中所有连接的权重。
4、模型训练:
线性单元:激励函数为线性且处处可微
线性单元训练:梯度下降法(损失函数(二次函数)对权重求导,需要自己设置下降步长,倒数即为下降的方向)
随机梯度下降(单样本)更新方法:一个样本计算代价比较低。但问题是随机选取样本,每个样本难度含有噪声的程度不一样,每次更新可能让梯度方向突变比较厉害,不够稳定,震荡比较厉害。最终结果不可靠。
梯度下降(批量)更新方法:每次是整个数据集累加到一起,所以结果相对稳定。
梯度下降(batch)更新方法:每次随机选取一个小batch。
多层神经网络:
1、误差反向传播算法
2、网络设置:
参数:(1)初始权重:从均匀分布中随机选择初始值。或特定方法(caffe):MSRA、xavier
(2)学习率:从大到小逐渐降低(开始的时候步长大,越接近目标步长越小)
(3)权重衰减:防止网络过拟合
(4)附加冲量项:使轨迹更平滑
3、存在问题:
无法训练:
(1)网络麻痹:加权和处于sigmoid饱和区,导致求得的梯度小,权重调整慢
(2)梯度消失和梯度爆炸
(3)局部最优解:损失函数高度非线性(整个网络是非线性系统,肯定有很多的局部最优解),因此不可避免,只能采取一些措施来尽可能得到更好的局部最优解(采用不同的初始化方式)
训练时间过长:
初始值或学习率设置不合适。