前情回顾
概述
本节我们简要回顾了神经网络的发展史,了解了神经元模型,和感知机模型,以及后面发展起来并逐渐成为主流的反向传播算法。
反向传播算法实为求解优化问题,在这个具体的优化问题的求解过程中会面临非凸优化以及梯度消失的问题;针对非凸优化,我们一般采用交叉熵代价函数而非平方误差作为损失函数;而针对梯度消失,我们在使用sigmoid或者tanh作为激活函数时,需要考虑将反向传播项乘以合适系数,防止梯度消失的发生。
目录
1 神经网络
神经网络的发展经历了三个非常重要的时间节点,第一个时间节点是对于神经元的描述,第二个时间节点是感知器的出现,第三个时间节点是反向传播(BP)算法的提出。
1.1 神经元模型
1.1.1 神经元(M-P)
1943 年,美国神经生理学家沃伦·麦卡洛克( Warren McCulloch ) 和数学家沃尔特 ·皮茨(Walter Pitts )对生物神经元进行建模,首次提出了一种形式神经元模型,并命名为McCulloch-Pitts模型,即后 来广为人知的M-P模型。
在M-P模型中,神经元接受其他n个神经元的输入信号(0或1),这些输入信号经过权重加权并求和,将求和结果与阈值(threshold) θ 比较,然后经过激活函数处理,得到神经元的输出。
M-P模型可以表示多种逻辑运算,如取反运算、逻辑或、逻辑与。
- 取反运算可以用单输入单输出模型表示,即如果输入为0则输出1,如果输入为1则输出0。
- 逻辑或与逻辑与运算可以用双输入单输出模型表示。
1.1.2 网络结构
目前常用的网络结构有好几种:
- 前馈网络
- 记忆网络
- 图网络
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。
其中圆形节点表示一个神经元,方形节点表示一组神经元。
1.2 感知器
1.2.1 单层感知器
1958 年,罗森布拉特(Roseblatt)提出了感知器,与M-P模型需要人为确定参数不同,感知器能够通过训练自动确定参数。训练方式为有监督学习,即需要设定训练样本和期望输出,然后调整实际输出和期望输出之差的方式(误差修正学习)。
w i ← w i + α ( r − y ) x w_i \leftarrow w_i+\alpha(r-y)x wi←wi+α(r−y)x θ ← θ − α ( r − y ) \theta \leftarrow \theta-\alpha(r-y) θ←θ−α(r−y)
其中, α \alpha α是学习率, r r r和 y y y分别是期望输出和实际输出。
感知器权重调整的基本思路为:
- 实际输出 y y y 与期望输出 r r r 相等时, w w w 和 θ θ θ 不变
- 实际输出 y y y 与期望输出 r r r 不相等时,调整 w w w 和 θ θ θ 的值
所以感知器的训练过程如下图所示
就是对每一个样本,逐个的调整学习(其实对样本的输入顺序是敏感的)
1.2.2 多层感知器
单层感知器只能解决线性可分问题,而不能解决线性不可分问题;为了解决线性不可分问题,我们需要使用多层感知器。
多层感知机就是多层结构的感知器递阶组成的输入值向前传播的网络,也被称为前馈网络或正向传播网络。
以三层结构的多层感知器为例,它由输入层、中间层及输出层组成
- 与M-P模型相同,中间层的感知器通过权重与输入层的各单元相连接,通过阈值函数计算中间层各单元的输出值
- 中间层与输出层之间同样是通过权重相连接
1.3 BP算法
多层感知器的提出从理论上解决了线性不可分问题,但是无法进行规模化的训练和计算。
多层感知器的训练使用误差反向传播算法(Error Back Propagation),即BP算法。BP算法最早有沃博斯于1974年提出,鲁梅尔哈特等人进一步发展了该理论。
这一部分可以参考先前的笔记深度学习介绍和反向传播机制,里面有比较详细的描述,这里不展开。
1.3.1 BP算法的基本过程
- 前向传播计算:由输入层经过隐含层向输出层的计算网络输出
- 误差反向逐层传递:网络的期望输出与实际输出之差的误差信号由输出层经过隐含层逐层向输入层传递
- 由“前向传播计算”与“误差反向逐层传递”的反复进行的网络训练 过程
1.3.2 激活函数
常见的有四种(下面的图为导数)
- sigmoid
- ReLU
- tanh
- LeakyReLU
选择激活函数的经验法则如下:
如果输出是0、1值(二分类问题),则输出层选择sigmoid函数,然后其它的所有单元都选择Relu函数。
这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用Relu激活函数。有时,也会使用tanh激活函数,但Relu的一个优点是:当z是负值的时候,导数等于0,这样会使得学习速度快很多。
- sigmoid激活函数:除了在输出层且是一个二分类问题基本不会用它。
- tanh激活函数:tanh是非常优秀的,几乎适合所有场合。
- ReLu激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用ReLu或者Leaky ReLu。
1.3.3 BP算法示例
详见先前的笔记深度学习介绍和反向传播机制
2 优化问题
求解神经网络的过程是一个求解优化问题的过程,因为神经网络的求解目标是使得损失函数取得最小值(优化问题)。
这个求解问题的难点和需求分析如下:
难点:
- 参数过多,影响训练
- 非凸优化问题:即存在局部最优而非全局最优解,影响迭代
- 梯度消失问题,下层参数比较难调
- 参数解释起来比较困难
需求
- 计算资源要大
- 数据要多
- 算法效率要好:即收敛快
2.1 非凸优化
其中针对上述提到的非凸优化问题,损失函数的选择可以在一定程度上解决这个问题。
在反向传播求解里,我们一般不选择平方误差损失,因为它显然非凸。
我们一般会选择交叉熵损失来作为损失函数。
2.2 梯度消失
而关于梯度消失的问题,这个问题有时是由激活函数的选择造成的(特别是在选择logistic和tanh时),我们常需要对每一层的反向传播项乘一个比较小的数,来防止梯度消失。
如果我们使用sigmoid或者tanh作为激活函数,若w很大,则计算出的z会始终在激活函数导数平缓的地方,不利于梯度下降。