目录
[第一章 神经网络基础](#第一章 神经网络基础)
[1 人工神经网络](#1 人工神经网络)
[▲ 神经网络的发展历程](#▲ 神经网络的发展历程)
[▲ 人工神经元单元](#▲ 人工神经元单元)
[▲ 人工神经网络的结构](#▲ 人工神经网络的结构)
[▲ 感知器](#▲ 感知器)
[▲ 前向传播(Forward Propagation)](#▲ 前向传播(Forward Propagation))
[▲ 反向传播算法BP](#▲ 反向传播算法BP)
[▲ 神经网络的构建与训练流程](#▲ 神经网络的构建与训练流程)
[◎ 全零初始化](#◎ 全零初始化)
[◎ 随机初始化](#◎ 随机初始化)
[◎ Xavier初始化](#◎ Xavier初始化)
[◎ He初始化](#◎ He初始化)
[▲ 激活函数](#▲ 激活函数)
[▲ 损失函数](#▲ 损失函数)
[▲ 优化器](#▲ 优化器)
[◎ 动量优化器](#◎ 动量优化器)
[◎ Adagrad优化器](#◎ Adagrad优化器)
[◎ RMSProp优化器](#◎ RMSProp优化器)
[◎ Adam优化器](#◎ Adam优化器)
[▲ 正则化](#▲ 正则化)
[▲ Dropout](#▲ Dropout)
[▲ 提前终止](#▲ 提前终止)
[▲ Batch Normalization](#▲ Batch Normalization)
第一章 神经网络基础
1 人工神经网络
▲ 神经网络的发展历程
▲ 人工神经元单元
由线性函数 和激活函数构成:
▲ 人工神经网络的结构
人工神经网络包括输入层 、隐藏层 和输出层。
▲ 感知器
单层感知器本质上相当于一个二分类器。
由于单层感知器是线性模型 ,无法解决XOR 等非线性数据问题。
▲ 前向传播(Forward Propagation)
输入信号从输入层传输到输出层。
▲ 反向传播算法BP
误差反向传播算法( Error Back Propagation )是神经网络的重要算法。它使用链式求导法则将输出层的误差反向传回给网络,使神经网络的权重有了较简单的梯度计算实现方法。
◎ 将损失函数值反向传播给每个计算单元。
◎ 每个计算单元根据获得的误差更新权重。
▲ 神经网络的构建与训练流程
收集训练数据 - > 设计网络结构 - > 数据预处理 - > 权重初始化 - > 网络训练
对于深度神经网络来说,设计网络结构主要是确定层数,每层隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。
神经网络的结构设计
在这方面,往往遵循如下要点:
◎ 输入层的单元数等于样本特征数。
◎ 在分类问题中,输出层的单元数一般等于分类的类型数。
◎ 每个隐层的单元数通常是越多分类精度越高,但是也会带来计算性能的下降,因此,要平衡质量和性能间的关系。
数据预处理
目的:能够帮助网络更加高效和准确的收敛。
预处理的方法 :归一化( Normalization )、白化( Whitening )、独热编码( One-hot )、数据增强( Data Augmentation )。
初始化的作用
神经网络模型的目标是优化一个参数众多的目标函数,而且基本没有全局最优解 ,初始化在其中的作用如下:
◎ 初始点的选取,有时能够决定算法是否收敛。
◎ 当收敛时,初始点可以决定学习收敛的多快,是否收敛到一个代价高或低的点。
◎ 过大的初始化导致梯度爆炸,过小的初始化导致梯度消失。
初始化方法
◎ 全零初始化
参数初始化为 0 。
缺点:同一层的神经元会学习到相同的特征,梯度下降将不会起到作用。
◎ 随机初始化
将参数初始化为小的随机数。一般随机值从均值为µ,标准差是σ的高斯分布中取样。
缺点:一旦随机分布选择不当,就会导致网络优化陷入困境。
若参数初始值取得太小,在反向传播时会导致小的梯度,对于深度网络来说,会产生梯度弥散问题,降低参数的收敛速度。
以 tanh 激活函数为例若参数初始值取得太大,那么神经元会容易饱和。
◎ Xavier初始化
保持每一层的输入和输出的方差一致。将参数初始化为:
◎ He初始化
网络训练流程
◎ 前向传播,得到网络输出。
◎ 计算损失函数,得到当前损失。
◎ 反向传播,更新网络参数。
▲ 激活函数
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
激活函数( Activation functions )相当于在神经网络中加入了非线性因素,使神经网络变为非线性模型。
激活函数如下:
▲ 损失函数
神经网络中使用的代价函数被称作损失函数( Loss Function )。 损失函数衡量了预测与真实样本标签的距离。 Loss 的值都会设置为预测值和真实值的吻合程度负相关。如果算法公式是正相关,定义损失函数时候加负号,调整为负相关。
通常,回归问题的损失函数为均方误差损失函数,而分类问题会选择交叉熵损失函数 。神经网络训练的过程是通过最小化在训练集上的损失函数进行的。
◎ 均方误差损失函数
执行回归任务时,可以选择该损失函数。顾名思义,这种损失是通过计算实际(目标)值和预测值之间的平方差的平均值来计算的。公式如下:
◎ 交叉熵损失函数
交叉熵损失函数( Cross Entropy )通常被用于分类问题,相比于 MSE ,交叉熵损失在分类预测结果和真实结果相差很大时,会有更大的梯度,因此,更适合神经网络训练,损失函数公式如下:
▲ 优化器
模型训练的目的是搜索使得损失函数 𝐸 ( 𝑊 ) 最小的权值向量 𝑊 ,也就是希望从 100 等高线到 0 等高线位置。但是如何能使模型更好且更快的达到效果,就需要优化器。
常见的优化器:普通梯度下降优化器、动量优化器、 Nesterov 、 Adagrad 、 Adadelta 、RMSProp 、 Adam 、 AdaMax 、 Nadam等等。
梯度下降法:
梯度下降实则就是求损失值对所有参数的偏导 (梯度),梯度的意义是变化最快的方向,因此可以沿着梯度的负方向更新所有参数。
学习率是梯度下降中重要的超参数。
通过学习率和梯度值更新所有参数值使得网络的损失值降低。
梯度下降法没的缺点:办法保证收敛性。学习率太小,收敛慢;学习率太大,损失函数会在极小值处动荡甚至偏离;容易陷在局部极小值处,或者鞍点处。
根据批量大小,梯度下降常用的方法有三种:
批量梯度下降( BGD ) :每次更新使用所有的训练数据,最小化损失函数,如果只有一个极小值,那么批量梯度下降是考虑了训练集所有数据,但如果样本数量过多,更新速度会很慢。
随机梯度下降( SGD ) :每次更新的时候只考虑了一个样本点,这样会大大加快训练速度,但是函数不一定是朝着极小值方向更新,且 SGD 对噪声也更加敏感。
小批量梯度下降( MBGD ): MBGD 每次更新的时候会考虑一定数量( batch size )的样本,解决了批量梯度下降法的训练速度慢问题,以及随机梯度下降对噪声敏感的问题。
◎ 动量优化器
**动量优化器( Momentum )**通过加入,可以加速 SGD ,并且抑制震荡。
优点:增加了梯度修正方向的稳定性,减小突变;在梯度方向比较稳定的区域,小球滚动会越来越快(当然,因为 𝛼<1 ,其有一个速度上限),这有助于小球快速冲过平坦区域,加快收敛;带有惯性的小球更容易滚过一些狭窄的局部极值。
缺点:学习率 𝜂 以及动量 𝛾仍需手动设置,这往往需要较多的实验来确定合适的值。
◎ Adagrad优化器
随机梯度下降算法( SGD )、小批量梯度下降算法( MBGD )、动量优化器的共同特点是:对于每一个参数都用相同的学习率进行更新。
Adagrad 的思想则是应该为不同的参数设置不同的学习率。
◎ RMSProp优化器
RMSprop 优化器是一种改进的 Adagrad 优化器,通过引入一个衰减系数,让每回合都衰减一定的比例。RMSprop 优化器很好的解决了 Adagrad 优化器过早结束的问题,很合适处理非平稳目标,对于RNN 网络效果很好。
◎ Adam优化器
Adam ( Adaptive Moment Estimation ):综合了 Momentum 的更新方向策略和 RMSProp的计算衰减系数策略。
▲ 正则化
正则化是机器学习中非常重要并且有效的减少泛化误差的技术,特别是在深度学习模型中,由于其模型参数多且容易产生过拟合。
导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。除此之外,研究者也提出很多有效的技术防止过拟合,比较常用的技术包括:数据增强、L1/L2 正则化、Dropout、提前终止、BN。
数据增强:即增加训练数据样本。
防止过拟合最有效的方法是增加训练样本,足够多的数据可以让模型看见尽可能多的例外情况并不断修正自己,从而效果更好。数据增强是一个省时有效的方法,在不同领域有不同的实现方法:
- 在目标识别领域常用的方法是将图片进行旋转、平移、缩放等(图片变换的前提是通过变换不能改变图片所属类别)。
- 语音识别中对输入数据添加随机噪声。
- NLP 中常用思路是进行近义词替换。
L1正则化:
L2正则化:
▲ Dropout
Dropout是一类通用并且计算简洁的正则化方法,在 2014 年被提出后广泛的使用。
简单的说,Dropout 在训练过程中,随机的丢弃一部分输入,此时丢弃部分对应的参数不会更新。 Dropout类似于是一个集成方法,将所有子网络结果进行合并,通过随机丢弃输入可以得到各种子网络。
▲ 提前终止
在训练过程中,插入对验证集数据的测试。当发现验证集数据的 Loss 上升时,提前停止训练。
▲ Batch Normalization
解决在训练过程中,中间层数据分布发生改变的问题,加快训练速度。
说明:本文内容来源于网络,仅作为学习用途,如有侵权,请联系作者删除。