0、网络模型评估指标

网络评估指标概括

  • 问题:梯度问题和拟合问题
  • 方法
    三个网络层:Relu(激活)、BatchNorm(规划)、Dropout
    正则化:数据增强、L1L2 正则化、Dropout、BN、随机池化和提前终止等
    训练方法:交叉验证、batch_size

链接: 正则化激活函数解决梯度拟合问题

1、梯度爆炸&梯度弥散

产生梯度消失的根源是:深度神经网络的反向传播,深层网络和选择了不合适的激活函数
反向传播:根据损失函数计算的误差通过梯度反向传播的方式,进行链式求导,而链式法则是一个连乘的形式,所以当层数越深的时候,梯度将以指数形式传播。梯度消失问题和梯度爆炸问题一般随着网络层数的增加会变得越来越明显。如果接近输出层的激活函数求导后梯度值大于1,那么层数增多的时候,最终求出的梯度很容易指数级增长,就会产生梯度爆炸;相反,如果小于1,那么经过链式法则的连乘形式,也会很容易衰减至0,就会产生梯度消失。

在这里插入图片描述

f 表示每一层的激活函数,那么输出节点可以表示为,fi+1 = f(fi*wi+1) 目标基于梯度下降的方法,按负梯度的方向对权值进行调整。权值调整量的表达式为(α表示学习率):
在这里插入图片描述
根据链式求导法逐层计算。
如果△w值大于1,随着网络层数的不断加深,最终梯度将以指数形式增加(梯度爆炸)
如果△w值小于1,随着网络层数的不断加深,最终梯度将以指数形式减少(梯度消失)

解决办法
使用ReLU,Leaky_ Relu等 激活函数替代Sigmoid。
网络层中的数据进行 batch normalization(批量标准化)。
梯度截断方法,即当梯度超过一个阈值时,让他变小点,例如Gradient Clip
权重正则化
数据归一化、数据清洗。
使用更好的网络,比如ResNet(残差网络)。
降低学习率
LSTM的“门(gate)”结构
BatchN。orm,把每层神经网络任意神经元这个输入值的分布强行拉回到接近均值为0方差为1的标准正太分布,即严重偏离的分布强制拉回比较标准的分布。

  • 梯度爆炸:
    用梯度截断方法,即当梯度超过一个阈值时,让他变小点,例如Gradient Clip 。
    权重正则化方法(on the difficulity of training rnn,2013)
    从rnn ->lstm
    使用relu激活函数,梯度为1
  • 梯度弥散:
    采用BN算法
    改变激活函数

2、激活函数

假若网络中全部是线性部件,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到用非线性来逼近任意函数。
使用非线性激活函数 ,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。使用非线性激活函数,能够从输入输出之间生成非线性映射。
在这里插入图片描述
常见的激活函数有:sigmoid,tanh,ReLU,Leaky ReLU,PReLU,RReLU, ELU(Exponential Linear Units),softplus,softsign,softmax等。
在这里插入图片描述

1)sigmoid

优点:
1、 输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可用作输出层;
2、求导容易。
缺点:
1、易造成梯度消失;
2、输出非0均值,收敛慢;
3、幂运算复杂,训练时间长。
不是以零为中心:sigmoid输出趋近0或1,通过Sigmoid函数我们可以知道,Sigmoid的输出值恒大于0,输出不是0均值(既zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的输入。
 sigmoid函数可应用在训练过程中。然而,当处理分类问题作出输出时,sigmoid却无能为力。简单地说,sigmoid函数只能处理两个类,不适用于多分类问题。而softmax可以有效解决这个问题,并且softmax函数大都运用在神经网路中的最后一层网络中,使得值得区间在(0,1)之间,而不是二分类的。softmax函数对神经网络全连接层输出进行变换,使其服从概率分布,即每个值都位于[0,1]区间且和为1。

2)tanh
优点:
比sigmoid函数收敛速度更快。
相比sigmoid函数,其输出以0为中心。
缺点:
易造成梯度消失;
幂运算复杂,训练时间长。
与 Sigmoid 函数类似,但 Tanh 函数将其压缩至-1 到 1 的区间内,输出是zero-centered的(零为中心),在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。

3) ReLU函数
优点:
解决了梯度消失问题(在正区间);
ReLU的计算量小,收敛速度很快,因为sigmoid和tanh有指数运算
在正区间(x>0)解决了梯度消失问题。图像数据是在(0~255)之间,即便归一化处理值也大于0,但是音频数据有正有负,不适合relu函数
缺点:
ReLU的输出不是zero-centered,输出非0均值,收敛慢
RuLU在训练的时候很容易导致神经元“死掉”,
Dead ReLU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
死掉:一个非常大的梯度经过一个 ReLU 神经元更新过参数之后,这个神经元再也不会被任何数据激活,相应的权重永远不会更新。有两种原因导致这种情况:1、非常不幸的初始化。2、学习率设置的太高导致在训练过程中参数更新太大。解决方法是使用Xavier初始化方法,合理设置学习率,会降低这种情况的发生概率。或使用Adam等自动调节学习率的算法。

如何选择激活函数:
  1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
  2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU。
  3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.
 1. 首选ReLU激活函数;
2. 学习率设置较小值;
3. 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;
4. 初始化问题:初始参数中心化,即让随机生成的参数满足以0为均值,2/当前层输入特征个数开根号下为标准差的正态分 布。

参考:
https://www.cnblogs.com/saseng/p/13647606.html
https://blog.csdn.net/in546/article/details/119621649

3、学习率

梯度下降法(Gradient descent),顾名思义,就是自变量沿着梯度向量的反方向进行移动,因为梯度的方向是上升的方向。梯度下降法的计算过程就是沿着梯度下降的方向求解极小值(也可以沿着梯度上升的方向求最大值)。同时也是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。
学习率,先我们简单回顾下什么是学习率,在梯度下降的过程中更新权重时的超参数,即下面公式中的α
在这里插入图片描述
学习率越低,损失函数的变化速度就越慢,容易过拟合。虽然使用低学习率可以确保我们不会错过任何局部极小值,但也意味着我们将花费更长的时间来进行收敛,特别是在被困在局部最优点的时候。而学习率过高容易发生梯度爆炸,loss振动幅度较大,模型难以收敛。下图是不同学习率的loss变化,因此,选择一个合适的学习率是十分重要的。
通常来说,初始学习率以 0.01 ~ 0.001 为宜,但这也只是经验之谈,这里为大家介绍一种较为科学的设置方法。该方法是Leslie N. Smith 在2015年的一篇论文Cyclical Learning Rates for Training Neural Networks中的3.3节提出来的一个非常棒的方法来找初始学习率。该方法很简单,首先设置一个十分小的学习率,在每个epoch之后增大学习率,并记录好每个epoch的loss或者acc,迭代的epoch越多,那被检验的学习率就越多,最后将不同学习率对应的loss或acc进行对比。

学习率设置
刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
一定轮数过后:逐渐减缓。
接近训练结束:学习速率的衰减应该在100倍以上
参考链接:https://blog.csdn.net/u012526436/article/details/90486021

4、偏置(bias)&惩罚项

1)神经网络中的偏置(bias)
权重w和偏置b是模型中需要确定的参数,深度学习通过大量的监督数据训练,计算损失函数的最小值从而得出最符合现状的权重与偏移量。但当输入数据的特征很多时,损失函数的计算会十分复杂,为了简化计算过程提高运算速度,利用梯度计算损失函数的最小值。
首先从线性方程的角度来看,假设简单的线性方程y= wx,当权重w= 1,2,3时,不管权重怎么变换该方程所能拟合的场景都受制于原点(0,0)。当给这个方程加上截距后变成y= x + 1.方程的灵活性大大增加,拟合能力增强,所以提升了精度。在神经网络中,以sigmoid函数为例,加入偏置后也是增加了函数的灵活性,提高了神经元的拟合能力。在神经元中,output = sum (weights * inputs) + bias。偏置实际上是对神经元激活状态的控制。比如在上图中,当偏置为20时,x较小时y的值就可以很大,就可以较快的将该神经元激活。
2)惩罚项
机器学习中常使用的正则化措施是去限制模型的能力,最常用的方法就是L0,L1和L2范数惩罚。深度学习优化器中所用的权重衰减,通常就是L2范数惩罚。,判断维度越多,我们的模型泛化能力就越差。这就需要我们来掌控一个平衡。惩罚项便是为此引入的。
在机器学习中,我们常看到再损失函数后面会跟另外一个额外项,这个便是传说中的惩罚项。(可以理解为,是损失函数的补充调节)一般情况分为两种,L1 正则化,和L2正则化。L1正则化:这个是指权值向量w 中各个元素的绝对值之和。通常表示为 ∣∣w∣∣ 。可以产生稀疏权值矩阵,可以用于特征选择。(所以就相当于,只有少量参数决定结果,因此抗噪能力比较强,在实际应用中,可解释性也比较强)L2正则化:这个是指权值向量w 中各元素的平方和,然后再求平方根 ∣∣w∣∣^2 。可以防止过拟合(倾向于得到近似0的参数估计,几乎用到所有的变量)。一定程度上L1也可以防止过拟合。
L1正则化:可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;
L2正则化:可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
参考连接:https://www.wushuai.net/archives/472

5、模型误差(泛化误差)

模型误差 = 偏差(Bias)+ 方差(Variance)+ 数据本身的误差
在这里插入图片描述
期望预测:预测值的期望值。数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和,是最基本的数学特征之一。它反映随机变量平均取值的大小。
参考连接:https://blog.csdn.net/hohaizx/article/details/80640686

泛化误差
我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义:
在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。
在测试集上的误差称为测试误差(test error)。
学习器在所有新样本上的误差称为泛化误差(generalization error)。
显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。

偏差,方差,噪声
偏差:度量了学习算法的期望预测和真实结果偏离程度。
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
噪声:可以认为是数据自身的波动性,表达了目前任何学习算法所能达到泛化误差的下限。
泛化误差可以分解为偏差、方差与噪声之和。

偏差与方差
偏差-方差分解是解释学习器泛化性能的重要工具。在学习算法中,偏差指的是预测的期望值与真实值的偏差,方差则是每一次预测值与预测值得期望之间的差均方。实际上,偏差体现了学习器预测的准确度,而方差体现了学习器预测的稳定性。通过对泛化误差的进行分解,可以得到:

  • 期望泛化误差=方差+偏差
  • 偏差刻画学习器的拟合能力
  • 方差体现学习器的稳定性
    易知:方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:**在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。**因此训练也不要贪杯,适度辄止。
    Image Name

偏差和方差的理解:
偏差:描述的是模型的拟合能力(准不准)
方差:数据扰动对模型的影响 (稳不稳)

欠拟合和过拟合的判断:
欠拟合:模型在训练集和测试集效果都不好
过拟合:模型在训练集上效果好,在测试集上效果不好

决办法
优化误差首先得搞清楚你的模型是偏差大还是方差大,也就是过拟合还是欠拟合。可以对模型输出进行采样,然后和真实值进行对比,从而知道误差主要来源于方差还是偏差。
偏差:实际上也可以称为避免欠拟合
寻找更好的特征 :具有代表性寻找更好的特征;
用更多的特征:增大输入向量维度(增加模型复杂度 )
寻找更好的特征,提升对数据的刻画能力
增加特征数量
重新选择更加复杂的模型

方差:避免过拟合
增大数据 集合:使用更多的,噪声点比减少(减少数据扰动所造成的影响)
减少数据特征: 减少维度 ,高维空间密度小(减少模型复杂度)
正则化方法
交叉验证法

6 过拟合&欠拟合&不收敛

在这里插入图片描述
1.过拟合&欠拟合
学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟(overfitting)。
学习能太差,训练样本的一般性质尚未学好,称为:欠拟合(underfitting)。
可以得知:在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。目前,欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍。
误差优化方案
优化误差首先得搞清楚你的模型是偏差大还是方差大,也就是过拟合还是欠拟合。可以对模型输出进行采样,然后和真实值进行对比,从而知道误差主要来源于方差还是偏差。总体结论就是,简单模型方差小但偏差大,复杂模型方差大但偏差小。简单模型拟合能力差,容易出现欠拟合。复杂模型拟合能力强,容易出现过拟合。我们通过对模型进行采样,计算其方差和偏差,观察二者哪个大,则可以知道当前模型是欠拟合还是过拟合,从而可以对模型复杂度进行调整。

欠拟合
如果误差主要来源于偏差bias,则表明模型欠拟合。此时模型拟合能力偏弱,增加更多的训练数据也没太大卵用。此时要做的事情是,1、增加模型复杂度,加深加宽,如增加模型层数、卷积输入输出通道数、BERT隐层大小等等。2、增加输入特征,如加入用户画像特征、行为轨迹特征等等。实操中,特征获取可能比较困难

过拟合
如果误差主要来源于方差variance,则表明模型过拟合。目前深度学习模型普遍特别复杂,容易出现过拟合。此时,1、增加训练数据,实操中可以利用数据增强来增加数据,并提升模型鲁棒性。2、正则化,让模型更加平滑,对模型复杂度进行惩罚。比如L1正则、L2正则等。L1正则更稀疏,不一定处处可导。L2正则更平滑,处处可导。实操中L2正则使用更多。3、增加模型随机性,提升鲁棒性。比如dropout

参考连接:https://zhuanlan.zhihu.com/p/210236688

欠拟合和过拟合应对策略
欠拟合(刻画不够)
寻找更好的特征,提升对数据的刻画能力
增加特征数量
重新选择更加复杂的模型

过拟合(刻画太细,泛化太差)
增加训练样本数量,样本多了,噪声比中就减少了
减少特征维数,高维空间密度小
加入正则化项,使得模型更加平滑

2.不收敛
在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在。loss不收敛主要有以下两种情况,一种是loss一直在震荡,一种是loss下降一点后不再下降到理想水平,而验证集上的表现保持不变。

解决方案
一、数据与标签
没有对数据进行归一化
标签的设置是否正确
没有对数据进行预处理
样本的信息量太大导致网络不足以fit住整个样本空间。
二、模型
没有对数据正则化
使用过大的样本
使用不正确的学习率
Batch Size 过大
在输出层使用错误的激活函数
网络中包含坏梯度
初始化权重错误
过深的网络
隐藏单元数量错误

7、泛化(拟合)能力

泛化能力(generalization ability)是指机器学习算法对新鲜样本的适应能力。
考试成绩差的同学,有这三种可能:一、泛化能力弱,做了很多题,始终掌握不了规律,不管遇到老题新题都不会做;二、泛化能力弱,做了很多题,只会死记硬背,一到考试看到新题就蒙了;三、完全不做题,考试全靠瞎蒙。机器学习中,第一类情况称作欠拟合,第二类情况称作过拟合,第三类情况称作不收敛。
在这里插入图片描述

减少泛化误差
在这里插入图片描述
参考连接:https://blog.csdn.net/qq_41877184/article/details/113902481

提高泛化能力
提高泛化能力的方式大致有三种:1.增加数据量。2.正则化。3.凸优化。
调整目标函数、 调整网络结构、屏蔽网络节点
隐含层神经元数量的选择,不影响性能的前提下,尽量选择小一点的神经元数量。
误差小,则泛化能力好;误差太小,则会过度拟合,泛化能力反而不佳。
学习率的选择,特别是权值学习率,对网络性能有很大影响,太小则收敛速度很慢,且容易陷入局部极小化;太大则,收敛速度快,但易出现摆动,误差难以缩

CNN泛化能力提高技巧
增加神经网络深度;
修改激活函数,使用较多的是ReLU激活函数;
调整权重初始化技术,一般来说,均匀分布初始化效果较好;
调整batch大小(数据集大小);
扩展数据集(data augmentation),可以通过平移、旋转图像等方式扩展数据集,使学习效果更好;
采取正则化;
采取Dropout方法避免过拟合。

8、训练集、验证集、测试集

在这里插入图片描述
为了防止过度拟合。如果给定的样本数据充足,我们通常使用均匀随机抽样的方式将数据集划分成3个部分——训练集、验证集和测试集,这三个集合不能有交集,常见的比例是8:1:1。需要注意的是,通常都会给定训练集和测试集,而不会给验证集。这时候验证集该从哪里得到呢?一般的做法是,从训练集中均匀随机抽样一部分样本作为验证集
训练集
训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。

验证集
快速调参,也就是通过验证集我们可以选择超参数(网络层数、网络节点数、迭代次数epoch、学习率learning rate、优化器)等。验证集不像训练集和测试集,它是非必需的。如果不需要调整超参数,就可以不使用验证集,直接用测试集来评估效果。验证集评估出来的效果并非模型的最终效果,主要是用来调整超参数的,模型最终效果以测试集的评估结果为准。
而验证集用于模型的选择,更具体地来说,验证集并不参与学习参数的确定,也就是验证集并没有参与梯度下降的过程。验证集只是为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。比如在k-NN算法中,k值就是一个超参数。所以可以使用验证集来求出误差率最小的k。
测试集
测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与学习参数过程,也不参数超参数选择过程,而仅仅使用于模型的评价。

作用
训练集(Training Set):用于训练模型。
验证集(Validation Set):用于调整和选择模型。
测试集(Test Set):用于评估最终的模型。

9、交叉验证法

之所以出现交叉验证,主要是因为训练集较小。无法直接像前面那样只分出训练集,验证集,测试就可以了(简单交叉验证)。
交叉验证是用来观察模型的稳定性的一种方法,我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度。训练集和测试集的划分会干扰模型的结果,因此用交叉验证n次的结果求出的平均值,是对模型效果的一个更好的度量。
将数据集D划分为k个大小相同的互斥子集,满足D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j),同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。交叉验证法的思想是:每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,这样就有K种训练集/测试集划分的情况,从而可进行k次训练和测试,最终返回k次测试结果的均值。交叉验证法也称“k折交叉验证”,k最常用的取值是10,下图给出了10折交叉验证的示意图。

交叉验证作用
交叉验证可以用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,在一定程度上减小过拟合。
可以从有限的数据中获取尽可能多的有效信息。
在数据量较少时,更方便找到适合的模型参数。

10超参数调节

在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。 通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
超参= 在开始机器学习之前,就人为设置好的参数。
模型参数=通过训练得到的参数数据。

为什么要进行超参数调优?
​ 本质上,这是模型优化寻找最优解和正则项之间的关系。网络模型优化调整的目的是为了寻找到全局最优解(或者相比更好的局部最优解),而正则项又希望模型尽量拟合到最优。两者通常情况下,存在一定的对立,但两者的目标是一致的,即最小化期望风险。模型优化希望最小化经验风险,而容易陷入过拟合,正则项用来约束模型复杂度。所以如何平衡两者之间的关系,得到最优或者较优的解就是超参数调整优化的目的。
超参数有:梯度下降法中的学习速率α,迭代次数epoch,批量大小batch-size,k近邻法中的k(最相近的点的个数),决策树模型中树的深度,树的数量或树的深度,矩阵分解中潜在因素的数量, 学习率(多种模式) ,深层神经网络隐藏层数 , k均值聚类中的簇数等等。超参数的优化:有四种主要的策略可用于搜索最佳配置:照看(babysitting,又叫试错),网格搜索,随机搜索,贝叶斯优化

调参类型:
通常可以将超参数分为三类:网络参数、优化参数、正则化参数。
​ 网络参数:可指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层数(也称深度)和激活函数等。
​ 优化参数:一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数。
​ 正则化:权重衰减系数,丢弃法比率(dropout)
————————————————
链接:https://blog.csdn.net/xu_fu_yong/article/details/96102999

调参方法:
传统或手动调参
网格搜索
随机搜索
贝叶斯搜索

11、方差、协方差、标准差(标准偏差/均方差)

1.方差

  • 概率论:样本减去数学期望的平方和 / N
  • 统计学:样本减去均值的平方和 / N

标准差:标准差是方差的算术平方根。
在这里插入图片描述
2.协方差标准差
在这里插入图片描述
参考链接:https://blog.csdn.net/huangguohui_123/article/details/103537571

12、归一化BatchNorm和激活函数

​# 1、 BatchNormalization和激活函数
BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(W x + b Wx+bWx+b)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(死区)(对于Sigmoid函数来说,意味着激活输入值是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

其实一句话就是:**对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。**因为梯度一直都能保持比较大的状态,所以很明显对神经网络的参数调整效率比较高,就是变动大,就是说向损失函数最优值迈动的步子大,也就是说收敛地快。BN说到底就是这么个机制,方法很简单,道理很深刻。
在这里插入图片描述
在这里插入图片描述
​​由图1知,64%的概率x落在[-1,1]的范围内,95%的概率x落在[-2,2]的范围内。这就把x值限制在了图2 sigmoid函数不饱和的地方。
但是很明显,看到这里,稍微了解神经网络的读者一般会提出一个疑问:如果都通过BN,那么不就跟把非线性函数替换成线性函数效果相同了?这意味着什么?我们知道,如果是多层的线性函数变换其实这个深层是没有意义的,因为多层线性网络跟一层线性网络是等价的。所以BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift),每个神经元增加了两个参数scale和shift参数,这两个参数是通过训练学习到的,意思是通过scale和shift把这个值从标准正态分布左移或者右移一点并长胖一点或者变瘦一点,每个实例挪动的程度不一样,这样等价于非线性函数的值从正中心周围的线性区往非线性区动了动。核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。当然,这是我的理解,论文作者并未明确这样说。但是很明显这里的scale和shift操作是会有争议的,因为按照论文作者论文里写的理想状态,就会又通过scale和shift操作把变换后的x调整回未变换的状态,那不是饶了一圈又绕回去原始的“Internal Covariate Shift”问题里去了吗,感觉论文作者并未能够清楚地解释scale和shift操作的理论原因。

13、归一化、标准化、零均值化

在这里插入图片描述
归一化
将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1],广义的讲,可以是各种区间,比如映射到[0,1]一样可以继续映射到其他范围,图像中可能会映射到[0,255],其他情况可能映射到[-1,1];
【作用】将某个特征的值映射到[0,1]之间,消除量纲对最终结果的影响,使不同的特征具有可比性,使得原本可能分布相差较大的特征对模型有相同权重的影响,提升模型的收敛速度,深度学习中数据归一化可以防止模型梯度爆炸。

标准化
就是将训练集中某一列数值特征(假设是第i列)的值缩放成均值为0,方差为1的状态。
【作用】将原值减去均值后除以标准差,使得得到的特征满足均值为0,标准差为1的正态分布,使得原本可能分布相差较大的特征对模型有相同权重的影响。举个例子,在KNN中,需要计算待分类点与所有实例点的距离。假设每个实例(instance)由n个features构成。如果选用的距离度量为欧式距离,数据预先没有经过归一化,那些绝对值大的features在欧式距离计算的时候起了决定性作用。从经验上说,标准化后,让不同维度之间的特征在数值上有一定比较性,得出的参数值的大小可以反应出不同特征对样本label的贡献度,可以大大提高分类器的准确性。

中心化/零均值化 (Zero-centered)
另外,还有一种处理叫做中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值x ′ = x − μ,中心化,就是把数据整体移动到以0为中心点的位置。
【作用】可以避免“Z型更新”的情况,这样可以加快神经网络的收敛速度。下面将分别以Sigmoid、tanh以及ReLu三个最为经典的激活函数来分别说明。

14、目标检测评估指标

连接:https://blog.csdn.net/weixin_44986037/article/details/128972087

15、其他注意点

网络一些名词:convx(convince)卷积层 FC全连接层 cell(单元格)strike(步长)

池化
空间金字塔池化(SSP)可以使不同尺寸的图像产生固定的输出维度。

空洞卷积
空洞卷积一般都伴有padding,如果dilation=6,那么padding也等于6。通过空洞卷积后的卷积特征图的大小不变,但是这个卷积的感受野比普通同等大小的卷积大。不过通道数是可以改变的。在DeepLabv3+中,最后的ASPP层,通过一个1x1卷积和3个3x3的空洞卷积,再concat上一个经过全局平均池化后双线性采样到同等维度的特征图。但是要注意,由于空洞卷积本身不会增大运算量,但是后续的分辨率没有减小,后面的计算量就间接变大了。

维度灾难
随着维度的增加,单位超球面的体积也在不断增加,2d中,单位超球面为圆,3d中则为求,而更高的维度便称为超球面,Vn = (2π/n)*Vn-2,于是当n>2π时,体积开始缩小,因此可用数据减少,意味着我们需要更多的数据,当数据到达100维以上时,单位数据变得极小,进而需要更多的数据,从而造成维度灾难。为了提高算法的精度,会使用越来越多的特征。当特征向量维数不高时,增加特征确实可以带来精度上的提升;但是当特征向量的维数增加到一定值之后,继续增加特征反而会导致精度的下降,这一问题称为维数灾难。

回归: 通常是预测一个值,是对真实值的一种逼近预测
分类: 给事务打上一个标签,通常结果为离散值,正确结果只有一个没有逼近的概念

01 回归(预测)
可使用回归算法来预测连续值,回归算法:
线性回归
多项式回归
指数回归
逻辑回归
对数回归

02 分类
使用分类算法来预测一组项目的类别。分类算法:
K-最近邻
决策树
随机森林
支持向量机
朴素贝叶斯

03 聚类
使用聚类算法来总结或构建数据,聚类算法:
K均值
DBSCAN
均值漂移
分层的

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值