以下内容为对Datawhale2021年11月组队学习中“水很深的深度学习”课程的前馈神经网络的简要总结。
原文链接: https://datawhalechina.github.io/unusual-deep-learning/
前馈神经网络
神经元模型
神经元(M-P)
1943 年,美国神经生理学家沃伦·麦卡洛克( Warren McCulloch ) 和数学家沃尔特 ·皮(Walter Pitts )对生物神经元进行建模,首次提出了一种形式神经元模型,并命名为McCulloch-Pitts模型,即后 来广为人知的M-P模型。
在M-P模型中,神经元接受其他n个神经元的输入信号(0或1),这些输入信号经过权重加权并求和,将求和结果与阈值(threshold) θ 比较,然后经过激活函数处理,得到神经元的输出。
y = f ( ∑ i = 1 n ω i j x i − θ ) y=f(\sum_{i=1}^{n}ω_{ij}x_{i}-θ) y=f(i=1∑nωijxi−θ)
M-P 模型可以表示多种逻辑运算,如取反运算、逻辑或、逻辑与。
-
取反运算(单输入单输出模型)
-
逻辑或与逻辑与运算(双输入单输出模型)
网络结构
人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。
(图神经网络中的方形节点表示一组神经元)
感知器
单层感知器
感知器能够通过训练自动确定参数。训练方式为有监督学习,即需要设定训练样本和期望输出,然后调整实际输出和期望输出之差的方式(误差修正学习)。
权重调整思路:
设 α是学习率,r 和 y 分别是期望输出和实际输出。
- y = r y=r y=r,不做调整
- y ≠ r y≠r y=r, 调整:$w_{i} <— w_{i} + α(r−y)x ; ; ;θ <— θ + α(r−y)x $
感知器模型的训练过程:
多层感知机
单层感知器只能解决线性可分问题,而不能解决线性不可分问题;为了解决线性不可分问题,我们需要使用多层感知器。
多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network)、前馈网络或正向传播网络,除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构:
BP算法
多层感知器的训练使用误差反向传播算法(Error Back Propagation),即BP算法。
BP算法的基本过程
- 前向传播计算:由输入层经过隐含层向输出层的计算网络输出
- 误差反向逐层传递:网络的期望输出与实际输出之差的误差信号由输出层经过隐含层逐层向输入层传递
- 由“前向传播计算”与“误差反向逐层传递”的反复进行的网络训练过程
BP算法就是通过比较实际输出和期望输出得到误差信号,把误差信号从输出层逐层向前传播得到各层的误差信号,再通过调整各层的连接权重以减小误差。权重的调整主要使用梯度下降法:
Δ w = − α ∂ E ∂ w Δw=-α\frac{∂E}{∂w} Δw=−α∂w∂E
激活函数
- M-P 模型中使用阶跃函数作为激活函数,只能输出0或1,不连续所以不可导
- 为了使误差能够传播,鲁梅尔哈特等人提出使用可导函数Sigmoid作为激活函数
Sigmoid函数的导数: d f ( u ) d u = f ( u ) ( 1 − f ( u ) ) \frac {df(u)}{du}=f(u)(1-f(u)) dudf(u)=f(u)(1−f(u))
推导:
其他常见的激活函数:ReLU (Rectified Linear Unit,修正线性单元)和tanh等
BP算法示例
以包含一个中间层和一个输出单元 y 的多层感知器为例:
w
1
i
j
w_{1ij}
w1ij表示输入层与中间层之间的连接权重,
w
2
j
1
w_{2j1}
w2j1 表示中间层与输出层之间的连接权重, i 表示输入层单元,j 表示中间层单元。
- 首先调整中间层与输出层之间的连接权重,其中 y = f ( u ) y=f(u) y=f(u),f是激活数, u 21 = ∑ j = 1 m w 2 j 1 z j u_{21}=\sum_{j=1}{m}w_{2j1}z_{j} u21=∑j=1mw2j1zj,把误差函数 E 对连接权重 w 2 j 1 w_{2j1} w2j1的求导展开成复合函数求导:
这里 z j z_{j} zj表示的是中间层的值。
-
第二,中间层到输出层的连接权重调整值如下所示:
-
第三,调整输入层与中间层之间的连接权重
中间层到输出层
输入层到中间层
优化问题
优化的难点
- 参数过多,影响训练
- 非凸优化问题:即存在局部最优而非全局最优解,影响迭代
- 梯度消失问题,下层参数比较难调
- 参数解释起来比较困难
需求
- 计算资源要大
- 数据要多
- 算法效率要好,收敛迅速
非凸优化问题
梯度消失问题