深度学习基础 初学者版

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

首先!博主目前大一,写出来的东西水平很低。我写博客的目的只是为了让同是大一大二的学生们,入门这个领域的时候变得稍微轻松一点点。

这篇博客是我根据实验室面经,加上自己的理解,再加上几百篇博客的参考来的深度学习基础知识总结。大佬勿喷!。


过拟合(overfitting):学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。

欠拟合(underfitting):学习能太差,训练样本的一般性质尚未学好。

·防止过拟合的方法:

1,EarlyStopping

每个epoch结束后(或每N个epoch后): 在验证集上获取测试结果,随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练;

将停止之后的权重作为网络的最终参数。

这种做法很符合直观感受,因为精度都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为验证集精度不再提高了呢?并不是说验证集精度一降下来便认为不再提高了,因为可能经过这个Epoch后,精度降低了,但是随后的Epoch又让精度又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的验证集精度,当连续10次Epoch(或者更多次)没达到最佳精度时,则可以认为精度不再提高了。

2,数据增广

翻转,裁剪,旋转,平移,噪声,提高亮度,模糊,锐化。

3,正则化:

正则化就是说给损失函数加上一些限制,通过这些限制去规范他们再接下来的循环迭代中,其较高次的参数大小不能过大。

L2正则化对于绝对值较大的权重予以很重的惩罚,对于绝对值很小的权重予以非常非常小的惩罚,当权重绝对值趋近于0时,基本不惩罚。

L1正则化的作用是使得大部分模型参数的值等于0,这样一来,当模型训练好后,这些权值等于0的特征可以省去,从而达到稀疏化的目的,也节省了存储的空间,因为在计算时,值为0的特征都可以不用存储了。

4,dropout:

Dropout的做法是在训练过程中按一定比例(比例参数可设置)随机忽略或屏蔽一些神经元。

这些神经元会被随机“抛弃”,也就是说它们在正向传播过程中对于下游神经元的贡献效果暂时消失了,反向传播时该神经元也不会有任何权重的更新。

·防止梯度爆炸:

1,预训练和微调

预训练:提前训练好的模型参数保存下来,以便于模型可以在下次执行类似任务的时候可以获得较好的效果。

微调:用别人的参数、修改后的网络和自己的数据进行训练,使得参数适应自己的数据,这样一个过程,通常称之为微调(fine tuning).

 2,梯度剪切,权重正则(针对梯度爆炸)

        梯度剪切:

如果梯度变得非常大,那么我们就调节它使其保持较小的状态。具体讲就是:梯度的范数大于超参数的时候。就进行梯度调节,调节后的梯度范数等于超参数。 (确定超参数一般用统计数据的均值)

        权重正则:

如果梯度爆炸仍然存在,可以尝试另一种方法,即检查网络权重的大小,并惩罚产生较大权重值的损失函数。该过程被称为权重正则化,通常使用的是 L1 惩罚项(权重绝对值)或 L2 惩罚项(权重平方)。

L1正则化和L2正则化的说明如下:

L1正则化是指权值向量中各个元素的绝对值之和。

L2正则化是指权值向量中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号)。

那添加L1和L2正则化有什么用?下面是L1正则化和L2正则化的作用,这些表述可以在很多文章中找到。

L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择

L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

3,激活函数:

如果不用激活函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

常用:Sigmoid Relu GELU

4,batchnorm:

随着网络的深度增加,每层特征值分布会逐渐的向激活函数的输出区间的上下两端(激活函数饱和区间)靠近,这样继续下去就会导致梯度消失。BN就是通过方法将该层特征值分布重新拉回标准正态分布,使得特征值将落在激活函数对于输入较为敏感的区间,输入的小变化可导致损失函数较大的变化,使得梯度变大,避免梯度消失。

·残差网络:

浅层的网络输出,恒等映射进入深层,这样网络加深也不会网络退化。

LSTM:LSTM遗忘门值可以选择在[0,1]之间(sigmoid激活函数),让LSTM来改善梯度消失的情况。可以选择接近1,让遗忘门饱和,此时远距离信息梯度不消失,梯度能够很好的在LSTM中传递,很大程度上减轻了梯度消失发生的概率。也可以选择接近0,此时模型是故意阻断梯度流,遗忘之前信息,说明上一时刻的信息对当前时刻没有影响。那么整体∏Tk=t+1∂C(k)∂C(k−1)也就不会一直减小,远距离梯度不至于完全消失,也就能够解决RNN中存在的梯度消失问题。

·常见优化器:

SGD

简单,但是容易局部最低。

AdaGrad

算法通过记录历史梯度,能够随着训练过程自动减小学习率。优点:减少了学习率的手动调节

.Momentum:

给梯度下降添加阻力。可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震动。

Adam

·常用损失函数:

01损失 平方损失函数 绝对值损失 对数损失

交叉熵损失函数(分类问题):H(p,q)=−∑i=1N​p(xi)logq(x−i)

函数说明

交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其中p(x)指的是真实分布的概率,q(x)是模型通过数据计算出来的概率估计。

·卷积层:

卷积是一种有效提取图片特征的方法 。

·卷积的步长计算公式:

输入图片尺寸: W*W。

Filter(卷积核)尺寸:F*F。

步长 S(Stride)。

padding(填充)的像素数P,P=1就相当于给图像填充后图像大小为W+1 *W+1

·线性回归 softmax回归:

线性回归是回归分析的一种。

假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程, 如:f(x)=w1x1+…+wnxn+b.)。

然后构建损失函数。

最后通过令损失函数最小来确定参数。

softmax回归:

softmax回归与线性回归适用于输出为连续值的情景不同,它适用于像图像类别这样的离散值,主要解决分类问题,且softmax回归的输出单元从一个变成了多个。

·多层感知机

多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。多层感知机的层数和各隐藏层中隐藏单元个数都是超参数。以单隐藏层为例并沿用本节之前定义的符号,多层感知机按以下方式计算输出:

·优化算法:

其实大部分机器学习算法的本质都是建立优化模型,通过优化算法对损失函数(优化的目标函数)进行优化,从而训练出最好的模型。

·准确率,召回率,精确率,F1值。

准确率(Accuracy)。顾名思义,就是所有的预测正确(正类负类)的占总的比重。

精确率(Precision):真正正确的占所有预测为正的比例。

召回率(Recall):真正正确的占所有实际为正的比例。

F1:

·训练误差和泛化误差:

训练误差:在训练集上训练完毕后在训练集本身上进行预测得到了错分率。

泛化误差:在训练集上没有的数据的错分样本比率。

·K折验证交叉验证

方法:

  1. 首先,将全部样本划分成k个大小相等的样本子集。
  2. 依次遍历这k个子集,每次把当前子集作为验证集,其余所有样本作为验证集,进行模型的训练和评估。

3、最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k通常10.

·权重衰减:

L2​范数正则化在模型原损失函数基础上添加 L 2 L_2 L2​范数惩罚项,从而得到训练所需要最小化的函数。 L 2 L_2 L2​范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积。以“线性回归”一节中的线性回归损失函数

正向传播,反向传播:

·正向传播:

(forward)指对神经网络沿着输入层到输出层的顺序,依次计算并存储模型的中间变量。

·反向传播:

根据链式法则,沿着从输出层到输入层的顺序,依次计算并存储神经网络的中间变量和参数的梯度。

关系:在训练深度学习模型时,正向传播和反向传播相互依赖。一方面,正向传播的计算可能依赖于模型参数的当前值,而这些模型参数是在反向传播的梯度。另一方面,反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传 播计算得到的。

·池化层:

 ,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

池化层同样基于局部相关性的思想,通过从局部相关的一组元素中进行采样或信息聚合,从而得到新的元素值。通常我们用到两种池化进行下采样:

(1)最大池化(Max Pooling),从局部相关元素集中选取最大的一个元素值。

(2)平均池化(Average Pooling),从局部相关元素集中计算平均值并返回。

·CNN

CNN主要有数据输入层, 卷积层, RELU激励层, 池化层, 全连接层, Batch Normalization Layer(不一定存在). 传统神经网络主要有数据输入层, 一个或多个隐层以及数据输出层. 比较可以发现CNN仍然使用传统神经网络的层级结构. 

·归一化

数据归一化问题是数据挖掘中特征向量表达时的重要问题,当不同的特征成列在一起的时候,由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据“吃掉”的情况,这个时候我们需要做的就是对抽取出来的features vector进行归一化处理,以保证每个特征被分类器平等对待。

1,(0,1)归一化处理。

将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理:

2,z-score标准化

这种方法根据原始数据的均值和标准差进行标准化,经过处理后的数据符合标准正态分布,即均值为0,标准差为1。

3,Batch narmalization.

在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理,然后再进入网络的下一层。不过文献归一化层,它是一个可学习、有参数的网络层。

第一步,我们获得了一个mini-batch的输入в = {x1,..., xm},可以看出batch size就是m。

第二步,求这个batch的均值μ和方差σ

第三步,对所有xi ∈в,进行一个标准化,得到xi`。

第四步,对xi`做一个线性变换,得到输出yi。

4,layer normalization

Layer Normalization的思想与Batch Normalization非常类似,只是Batch Normalization是在每个神经元对一个mini batch大小的样本进行归一化,而Layer Normalization则是在每一层对单个样本的所有神经元节点进行归一化。

·语言模型

统计语言模型:

找一个概率分布,可以表示所有句子出现的概率。给定前面的的词,求后面一个词出现的条件概率。

N-gram

为了解决自由参数数目过多的问题,引入了马尔科夫假设:随意一个词出现的概率只与它前面出现的有限的n个词有关。基于上述假设的统计语言模型被称为N-gram语言模型。

·RNN为什么不能用BN.而用LN

因为在RNN这类时序网络中,时序的长度并不是一个定值(网络深度不一定相同),比如每句话的长短都不一定相同,所有很难去使用BN,所以作者提出了Layer Normalization


总结

深度学习基础很重要,要不论为调参侠一定要好好夯实基础。不过入门深度学习千万别从基础开始。

猜你喜欢

转载自blog.csdn.net/m0_60920298/article/details/124370413