Professional Documents
Culture Documents
2 全连接神经网络
2 全连接神经网络
2 全连接神经网络
人脑神经网络
• 人脑神经系统是一个非常复杂的组织,包含近860亿个神经元,每个神经元有
上千个突触和其他神经元相连接。
• 一个神经元可被视为一种只有两种状态的细胞:兴奋和抑制。
人工神经网络
• 人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实现
机理和功能上模拟人脑神经网络,由多个节点(人工神经元)互相连接而成。
• 网络的拓扑结构
• 不同神经元之间的连接关系。
• 神经元的激活规则
• 主要是指神经元输入到输出之间的映射关系,一般为非线性函数。
• 学习算法
• 通过训练数据来学习神经网络的参数。
2.1 神经网络模型
M-P模型、感知机模型、全连接神经网络
M-P神经元模型
• 神经网络中最基本的成分是神经元模型。
• M-P模型是首个模拟生物神经元的结构和工作原理构造出来的一个抽象和简化
了的数学模型,旨在模拟从多输入到单输出的信息处理单元。
• M-P模型的工作步骤:
• 神经元接受D个输入信号
• 将输入与权值参数进行加权求和并经过激活函数激活
• 将激活结果作为结果输出
• 人为设定参数值
M-P神经元模型
$
• 向量 𝒙 = 𝑥!; 𝑥"; ⋯ ; 𝑥# 表示一个神经元接收𝐷 个输入, 𝑧 = ) 𝑤! 𝑥! + 𝑏
净输入 𝑧 ∈ ℝ 表示一个神经元所获得的输入信号 𝒙 的 !"#
%
=𝒘 𝒙+𝑏
加权和,
#
𝑧 = * 𝑤$ 𝑥$ + 𝑏 = 𝒘& 𝒙 + 𝑏,
$%!
0 𝑧≤𝜃
𝑎=𝑓 𝑧 =3
1 𝑧>𝜃
其中非线性函数𝑓 1 称为激活函数(Activation
function),𝜃为阈值(Threshold)。
感知机模型
• 感知机(Perceptron)模型是由美国心理学家弗兰克·罗森布拉特(Frank
Rosenblatt)于1957年提出的一种具有单层计算单元的神经网络。
• 旨在建立一个线性超平面用来解决线性可分问题。
• 通过对样本数据的训练自动更新参数。
𝑧 = 𝒘& 𝒙,
1 𝑧>0
𝑦9 = 𝑓 𝑧 = sgn 𝑧 = 3
−1 𝑧 ≤ 0
感知机模型
2 2 3 2
• 给定 𝑁 个样本的训练集: 𝒙 ,𝑦 2%!
,其中 𝒚 ∈ 1, −1 ,感知机学习算
法试图找到一组参数 𝒘∗ ,使得对于每个样本 𝒙 2 ,𝑦 2 有
𝑦 2 𝒘∗ & 𝒙 2 > 0.
• 感知机的学习算法是一种错误驱动的在线学习算法:
• 初始化一个权重向量 𝒘 ← 0 (通常是全零向量)
• 每次分错一个样本 𝒙, 𝑦 时,即
𝑦𝒘& 𝒙 < 0
• 就用这个样本来更新权重
𝒘 ← 𝒘 + 𝑦𝒙
感知机模型
• 根据感知机的学习算法,可以反推出感知机的损失函数为
ℒ 𝒘; 𝒙, 𝑦 = max 0, −𝑦𝒘& 𝒙 .
• 采用随机梯度下降,其每次更新的梯度为
𝜕ℒ 𝒘; 𝒙, 𝑦 0 𝑦𝒘& 𝒙 > 0
=I
𝜕𝒘 −𝑦𝒙 𝑦𝒘& 𝒙 < 0
• 第0层称为输入层,最后一层称为输出层,其他中间层称为隐藏层。
• 层数计算:不计输入层,把除去输入层之后的神经网络从左至右依次计数得到
的总层数。
全连接神经网络
令𝒂 𝟎 = 𝒙,全连接神经网络通过不断迭代下面的公式进行信息传播:
𝒛 6 =𝑾6 𝒂 67! +𝒃 6
𝒂 6 = 𝑓6 𝒛 6
根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成
的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何从一个定义
在实数空间中的有界闭集函数。
2.2 激活函数
激活函数
• 激活函数就是指非线性变换。非线性变换打破了“线性组合的线性组合”这样
一种循环,多层神经网络相比于单层网络有了更丰富的函数形式。
• 常用的激活函数
• 连续并可导(允许少数点上不可导)的非线性函数
• 可导的激活函数可以直接利用数值优化的方法来学习网络参数。
• 激活函数及其导函数要尽可能的简单
• 有利于提高网络计算效率。
• 激活函数的导函数的值域要在一个合适的区间内
• 不能太大也不能太小,否则会影响训练的效率和稳定性。
Sigmoid激活函数
• 原函数 • 导数
Tanh激活函数
• 原函数 • 导数
ReLU激活函数
• ReLU(Rectified Linear Unit,修正线性单元),是目前深度神经网络中经常
使用的激活函数。相比于sigmoid函数和tanh函数,ReLU函数被证明可以提供
更好的结果。
• 原函数 • 导数
2.3 神经网络的训练
神经网络的训练流程
• 初始化参数:初始化权重参数
• 切分batch数据:神经网络每一轮训练不是用全部数据,而是选取一定量的数据样本
作为输入,这部分数据样本称为一个batch。
• 前向传播:得到预测值
• 建立损失函数
• 反向传播:更新参数
• 是否达到迭代次数,如果达到,则结束本轮训练,如果未达到,则继续重复前面的步
骤进行新一轮迭代
前向传播算法
• 前向传播(Forward Propagation)算法是指神经网络向前计算的过程。前向
传播算法需要神经网络的输入,神经网络的连接结构以及每个神经元中的参数。
𝒛 ! =𝑾 ! 𝒙+𝒃 !
𝒂 ! =𝑓 𝒛 !
P=𝑓 𝒛
𝒚 "
损失函数
• 损失函数(Loss Function)通常表示为真实值与预测值之间的距离。
• 常用损失函数
• 均方误差——解决回归问题
2
1 "
P = * 𝑦: − 𝑦9:
ℒ 𝒚, 𝒚
𝑛
:%!
• 交叉熵误差——解决分类问题
2 <
1
P = − * * 𝑦:; log 𝑦9:;
ℒ 𝒚, 𝒚
𝑛
:%! ;%!
神经网络中参数的更新
• 深度学习中,大多流行的优化算法通常基于梯度下降。
计算梯度和更新参数
𝜕ℒ
𝑤 ←𝑤−𝛼
𝜕𝑤
𝜕ℒ
𝑏 ←𝑏−𝛼
𝜕𝑏
批量梯度下降算法
• 小批量梯度下降(Mini-Batch Gradient Descent,MBGD)
• 把整个样本切分为若干份,每一份为一个小批量, 在每一份样本上实施梯度
下降算法进行参数更新。
小批量梯度下降中,每次选取样本数量对损失下降的影响
批量梯度下降算法的改进
• 动量梯度下降(Gradient Descent with Momentum)算法
• 反向传播示例(激活函数Sigmoid)
• 前向传播
• 输入层→隐含层:𝑍! = 𝑤!𝑋 + 𝑏!,输出值 𝑎! = 𝜎 𝑍!
• 隐含层→输出层:𝑍" = 𝑤"𝑎! + 𝑏",输出值 𝑎" = 𝜎 𝑍"
• 反向传播 𝑎! 𝑎! + 𝑎$ 𝑎",
• 计算总误差:
𝐸=>=?@ = −𝑦 log 𝑎" − 1 − 𝑦 log 1 − 𝑎"
• 隐含层→输出层的权重更新:
• 输入层→隐含层的权重更新:
¶Etotal ¶Etotal ¶a2 ¶Z 2 ¶a1 ¶Z1
= ´ ´ ´ ´
¶w1 ¶a2 ¶Z 2 ¶a1 ¶Z1 ¶w1
反向传播算法*
反向传播算法*
反向传播算法*
使用误差反向传播算法的全连接神经网
络训练过程可以分为以下三步:
2. 反向传播计算每一层的误差项 𝛿 " ;
3. 计算每一层参数的偏导数,并更新参
数。
自动梯度计算
• 目前,主流的深度学习框架都包含了自动梯度计算的功能,即我们可以只考虑
网络结构并用代码实现,其梯度可以自动进行计算,无须人工干预,这样可以
大幅提高开发效率。
编程实现
• 代码学习(/course315文件夹中):
• 1.1-PyTorch快速入门
• 1.2-PyTorch快速入门
• 2.1-PyTorch_线性回归(Boston)
• 2.2-PyTorch_softmax回归(Iris)
• 3.1-全连接神经网络_回归(Boston)
• 3.2-全连接神经网络_分类(FashionMNIST)
练习
• 3.3-全连接神经网络_分类(MNIST)
• 3.4-全连接神经网络_分类(CIFAR10)