导图社区 传统神经网络
机器学习传统神经网络的一些知识点梳理,包括非线性激活函数、梯度的概念、线性回归的概念、线性回归应用场景和局限性、神经网络的结构等等。
编辑于2022-11-23 09:35:21 江苏省传统神经网络
非线性激活函数
sigmoid
优点
将很大范围内的输入特征值压缩到0~1之间,使得在深层网络中可以保持数据幅度不会出现较大的变化
在物理意义上最为接近生物神经元
根据其输出范围,该函数适用于将预测概率作为输出的模型
缺点
当输入非常大或非常小的时候,输出基本为常数,即变化非常小,进而导致梯度接近于0
梯度可能会过早消失,进而导致收敛速度较慢
幂运算相对耗时
输出不是0均值,进而导致后一层神经元将得到上一层输出的非0均值的信号作为输入。随着网络的加深,会改变原始数据的分布趋势
tanh
优点
解决了上述的Sigmoid函数输出不是0均值的问题
Tanh函数的导数取值范围在0~1之间,优于sigmoid函数的0~0.25,一定程度上缓解了梯度消失的问题
Tanh函数在原点附近与y=x函数形式相近,当输入的激活值较低时,可以直接进行矩阵运算,训练相对容易
缺点
与Sigmoid函数类似,梯度消失问题仍然存在
观察其两种形式的表达式,即2*sigmoid(2x)-1与(exp(x)-exp(-x))/(exp(x)+exp(-x)),可见,幂运算的问题仍然存在
ReLU
优点
相较于sigmoid函数以及Tanh函数来看,在输入为正时,Relu函数不存在饱和问题,即解决了gradient vanishing问题,使得深层网络可训练
计算速度非常快,只需要判断输入是否大于0值
收敛速度远快于sigmoid以及Tanh函数
Relu输出会使一部分神经元为0值,在带来网络稀疏性的同时,也减少了参数之间的关联性,一定程度上缓解了过拟合的问题;
缺点
Relu函数的输出也不是以0为均值的函数
存在Dead Relu Problem,即某些神经元可能永远不会被激活,进而导致相应参数一直得不到更新,产生该问题主要原因包括参数初始化问题以及学习率设置过大问题;
当输入为正值,导数为1,在“链式反应”中,不会出现梯度消失,但梯度下降的强度则完全取决于权值的乘积,如此可能会导致梯度爆炸问题
Leaky ReLU
优点
针对Relu函数中存在的Dead Relu Problem,Leaky Relu函数在输入为负值时,给予输入值一个很小的斜率,在解决了负输入情况下的0梯度问题的基础上,也很好的缓解了Dead Relu问题
该函数的输出为负无穷到正无穷,即leaky扩大了Relu函数的范围,其中α的值一般设置为一个较小值,如0.01
缺点
理论上来说,该函数具有比Relu函数更好的效果,但是大量的实践证明,其效果不稳定,故实际中该函数的应用并不多
由于在不同区间应用的不同的函数所带来的不一致结果,将导致无法为正负输入值提供一致的关系预测
梯度的概念
梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
线性回归的概念
线性关系来描述输入到输出的映射关系
线性回归应用场景
网络分析、风险分析、股价预测、天气预报
线性回归的局限性
线性回归能够清楚的描述分割线性分布的数据,对非线性分布的数据描述较弱
神经网络的结构
输入层
激活值
中间层
输出层
权重:指的是和输入层某个神经元的紧密关系。联系越紧密这个值越大
激活值:输出层的激活值是经过计算得到的,简单的计算就是把输入层的激活值乘以权重后
偏置:这个参数暂时不用管
神经元的“并联”和“串联”
在这里,m表示第n层神经网络的宽度,n为当前神经网络的深度
从第一层神经网络到最终输出,每一个神经元的数值由前一层神经元数值,神经元参数W,b以及激励函数共同决定第n+1层第k个神经元的方程可由公式表示为
损失函数-Loss
影响深度学习性能最重要因素之一。是外部世界对神经 网络模型训练的直接指导
合适的损失函数能够确保深度学习模型收敛
设计合适的损失函数是研究工作的主要内容之一
Softmax函数定义及其好处
归一化指数函数
将预测结果转化为非负数
softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
各种预测结果概率之和等于1
方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。
Cross entropy函数的定义及其好处
为什么可以用作损失函数
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。
交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
把p(i)看作是真实的概率分布,q(i)看作是预测的概率分布,如果把交叉熵作为loss函数,当我们最小化它时,可以使q(i)逐渐逼近p(i),也就达到了拟合的目的。
、
目标为[0,1]区间的回归问题,以及生成
自定义
看中某一个属性
单独将某一些预测值取出或赋予不同大小的参数
合并多个loss
多目标训练任务,设置合理的loss结合方式(各种运算)
神经网络融和
不同神经网络loss结合,共同loss对网络进行训练指导
学习率
数值大,收敛速度快
数值小,收敛精度高
如何选用合适的学习率
Fixed
fixed,即固定学习率,这是最简单的一种配置,只需要一个参数。
在整个的优化过程中学习率不变,这是非常少使用的策略,因为随着向全局最优点逼近,学习率应该越来越小才能避免跳过最优点
step
采用均匀降低的方式,比如每次降低为原来的0.1倍
这是非常常用的一个学习率迭代策略,每次将学习率降低为原来的一定倍数,属于非连续型的变换,使用简单,而且效果通常较好
Adagrad
自适应学习率
从AdaGrad算法中可以看出,随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。
RMSprop
RMSProp算法不是像AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少
简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以经过衰减系数控制的历史梯度平方和的平方根,使得每个参数的学习率不同
起到的效果是在参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度
动量
沿着已经得到的优化方向前进,不用重新找方向,只需微调
用动量和直接调大学习率有什么区别
方向不同找的更准确
过拟合
过拟合(over-fitting)也称为过学习,它的直观表现是算法在训练集上表现好,但在测试集上表现不好,泛化性能差
过拟合是在模型参数拟合过程中由于训练数据包含抽样误差,在训练时复杂的模型将抽样误差也进行了拟合导致的。所谓抽样误差,是指抽样得到的样本集和整体数据集之间的偏差。
模型本身过于复杂,以至于拟合了训练样本集中的噪声。此时需要选用更简单的模型,或者对模型进行裁剪
训练样本太少或者缺乏代表性。此时需要增加样本数,或者增加样本的多样性
训练样本噪声的干扰,导致模型拟合了这些噪声,这时需要剔除噪声数据或者改用对噪声不敏感的模型
应对方法
Dropout
Dropout,Pooling 区别
子主题
我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征
Regularization
Regularization 对参数w有什么影响
什么叫做weight decay,与Regularization有何联系?
L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。
Fine-tuning
大部分的参数不用更新,实际的参数大量减少
冻结预训练模型的部分卷积层(通常是靠近输入的多数卷积层,因为这些层保留了大量底层信息)甚至不冻结任何网络层,训练剩下的卷积层(通常是靠近输出的部分卷积层)和全连接层。
Fine-tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的若干层的参数,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择
意义
站在巨人的肩膀上:前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。
训练成本可以很低:如果采用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用CPU都完全无压力,没有深度学习机器也可以做。
适用于小数据集:对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习
迁移模型
迁移学习(Transfer learning) 顾名思义就是把已训练好的模型(预训练模型)参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。