一些深度学习中零零散散的知识点

  • 残差网络

对于传统的CNN,如果只是简单的增加深度,就会导致梯度消失或者梯度爆炸。对于这种方式的解决方法为正则初始化化或者中间的正则化层,但是这又会导致另外一个问题:退化问题,即随着网络层数的增加,在训练集上的正确率饱和或者下降。

残差网络就是这样提出来的,即保留深层网络的深度,但却解决了退化问题。下面给出一个简单的残差块,残差网络就是由一个个残差块堆叠而成的:


作者对于残差块和残差的解释如下:



关于残差块,网上的说法有很多,我这里从自己的角度简单理解一下,我们的输入x经过两层网络之后(在第二层激活层relu函数之前)的输出是F(x),但我们不能保证经过这两层网络之后是否会有信息的丢失(如果层数越多可能信息损失的越多),如果层数逐渐加上,信息的损失会导致我们无法继续后面的训练,也会影响到权重的更新,所以我们直接加上输入的x作为理想输出,将这个输出记为H ( x ) = F ( x ) + x,这样就算信息有所损失,那么至少保证的理想输出。

在这种情况下,优化问题可以看做F ( x ) = H ( x ) − x ,令F ( x ) = 0这样的优化较为简单,这也是残差这个叫法的由来。

也就是说,我们不需要去拟合真正的分布,我们只需要拟合在原来的输入恒等映射上修改残差F ( x ),最坏使得F ( x ) = 0 F(x)=0,就是基本没有增益。但不至于有损失

换一种理解方式也是差不多的,就不过多赘述了,从图片上帮助理解


总得来说,我们一般会在深层网络中堆叠多个残差块,保证网络深的同时(更好的提升特征提取性能,但是过深也会导致过拟合问题)解决网络的退化问题。



  • 一些常见的基本术语:
  1. token包括了:class token、patch token,在NLP中每一个单词叫一个token,然后有一个标注句子语义的标注是CLS,在CV中每个图像块或图像patch就是一个token
  2. baseline:baseline是比较算法好坏中作为参照物而存在的,在比较中作为基线;目的是比较提出算法性能或者用以彰显说提出的算法优势。
  • 自监督的含义:自监督可以看成是无监督的一种特殊情况,无监督是不需要人为提供的标签,而自监督也是,不需要人为标注的标签,但他也需要标签,这个标签是来自数据本身。其是指从大规模无监督数据中挖掘自身监督信息来进行监督学习和训练的一种机器学习方法。自监督学习方法有:基于上下文、基于时序和基于对比等。
  • val是验证集,其作用是防止过拟合。但现在很多人都不用验证集了,因为现在模型中防止过拟合机制已经比较好了,
  • Softmax函数
    $$
    \frac{e^{z_i}}{\sum_{i=1}^{n}{e^{z_i}}}
    $$
    该函数可以把数值转化到(0,1)所在区间,其引入指数的好处为:拉大数值差距,求导方便。但如果 Zi的值过大,例如[123, 456, 789]则经过softmax后得到[ 0. 0. nan],可以看到发生了溢出,针对这种情况的解决方法为:将每一个输出值减去输出值中最大的值。即
    $$
    D = max(z)\\ softmax(z_i)\space =\space\frac{e^{z_i-D}}{\sum_{i=1}^{n}{e^{z_i-D}}}
    $$
    当使用softmax函数作为输出节点的激活函数时候,一般使用交叉熵损失函数,因为softmax函数的数值计算过程也可能会出现数值一处问题。
  • 什么是自注意力?
    自注意力就是通过q、k、v三个值来直接计算得到句子在编码过程中每个位置上的注意力权重;然后再以权重和的形式来计算得到整个句子的隐含向量表示。缺点就是:模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置, 因此作者提出了通过多头注意力机制来解决这一问题。
  1. epoch:使用数据集中所有数据都进行一次训练
  2. batch:一批样本,batch size表示一批样本的大小
  • 下采样也可称为池化:作用为降维,常见的下采样有最大池化,同时还有平均池化。
    上采样:在做图像、语义分割的时候,编码器通过卷积层得到图像的一些特征,但是解码器需要该特征还原到原图像的尺寸大小,才可以对原图像的每个像素点进行分类。从一个较小尺寸的矩阵进行变换,得到较大尺寸的矩阵,在这个过程就是上采样。常见的上采样的方法有(1)插值法(最邻近插值、双线性插值等) (2)转置卷积(又称为反卷积) (3)上采样(unsampling)(4)上池化(unpooling)
  • 激活函数的作用就算去线性化,因为神经网络的节点就算加权求和,再加上偏置项,即:
    $$
    a_i = {\sum_i^n{x_iw_i+b}}
    $$

这是一个线性模型,将这个计算结果传到下一个节点还是同样的线性模型,在泰国线性变换,所有的隐含层节点就无存在的意义,所以需要一个激活函数来去线性化。

  1. 经验风险就是说将所有训练样本的误差之和,经验风险越小,说明模型拟合效果越好。
  2. 期望风险是对所有样本(包括未知数据)的预测能力的大小。经验风险往往是不可求的
  3. 俩者区别:
  1. 经验风险是局部的,基于训练集所有样本点损失函数最小化的。
  2. 期望风险是全局的,是基于所有样本点的损失函数最小化的。
  3. 经验风险函数是现实的,可求的;
  4. 期望风险函数是理想化的,不可求的;
  1. 只考虑经验风险的话,会出现过拟合的现象,过拟合的极端情况便是模型f(x)对训练集中所有的样本点都有最好的预测能力,但是对于非训练集中的样本数据,模型的预测能力非常不好。怎么办呢?这个时候就引出了结构风险。结构风险是对经验风险和期望风险的折中。在经验风险函数后面加一个正则化项(惩罚项)便是结构风险了。
  • 交叉熵的概念

https://blog.csdn.net/SongGu1996/article/details/99056721

  • 全连接层和线性层是同一个概念
  • conda和pip几乎完全相同,关键区别就在于conda可以安装任何语言的包,而pip只能安装python包