2023双非计算机硕士应战秋招算法岗之深度学习基础知识

本文详细介绍了卷积神经网络(CNN)的关键组件,如卷积层、池化层、激活函数,特别是ReLU的使用,以及它为何优于Sigmoid。同时,讨论了循环神经网络(RNN)和LSTM,解释了LSTM如何解决梯度消失问题。此外,提到了过拟合问题及其解决方案,如正则化、Dropout和BatchNormalization。
摘要由CSDN通过智能技术生成

word版资料自取链接:
链接:https://pan.baidu.com/s/1H5ZMcUq-V7fxFxb5ObiktQ
提取码:kadm

卷积层
全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播,所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的时候,它可以轻轻松松把你给他的样本全部都记下来,这会出现过拟合的情况。
局部感知:在传统神经网络中每个神经元都要与图片上每个像素相连接,这样的话就会造成权重的数量巨大造成网络难以训练。人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。
权值共享:卷积核的权重通过学习得到且在卷积过程中卷积核的权重不会改变,这是参数共享的思想。说明我们通过一个卷积核的操作提取了原图的不同位置的同样(类似)特征。简单来说就是在一幅图片中的不同位置的相同目标,它们的特征是基本相同的。
感受野:卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小
计算:(out - 1) * stride + ksize,其中out是指上一层感受野的大小,stride是当前层stride
池化层
池化(Pooling):也称为欠采样或下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,保持某种不变性(旋转、平移、伸缩等),提高模型的容错性。主要有:Max Pooling:最大池化Average Pooling:平均池化
max保留了纹理特征,提取出特征差异最大的值,会丢弃很多信息。
avg保留整体的数据特征,保留的信息很完整但由于求平均可以会导致特征差异减小。
当特征中的信息都具有一定贡献的时候使用AvgPooling,网络走到比较深的地方,这个时候特征图的H W都比较小,包含的语义信息较多,这个时候再使用MaxPooling就不太合适了。
激活层
激活函数是神经网络中非线性的来源,因为如果去掉这些函数,那么整个网络就只剩下线性运算,线性运算的复合还是线性运算的,最终的效果只相当于单层的线性模型

Sigmoid:
1.如果我们初始化神经网络的权值为 [0,1] 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,其梯度是不可能超过0.25的,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 (1,+∞) 区间内的值,则会出现梯度爆炸情况。
2.Sigmoid 的 output 不是0均值(即zero-centered)。这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
3.其解析式中含有幂运算,计算机求解时相对来讲比较耗时。

Tanh:
它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

Relu:
ReLu是分段线性函数,它的非线性性很弱,因此可以构建深层网络。
计算速度非常快,只需要判断输入是否大于0
ReLU的输出不是zero-centered

输出层(全连接层)
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部,通过softmax函数得到最终的输出。也就是跟传统的神经网络神经元的连接方式是一样的:

Softmax:它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!

批量归一化层
解决在训练过程中,中间层数据分布发生改变的问题,以防止梯度消失或爆炸、加快训练速度)
一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低
一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

空洞卷积:在标准卷积核内补0,大小为3×3 卷积核就可以拥有和大小为5×5卷积核相同的感受野。
使用不同空洞率的空洞卷积就可以获得不同感受野的卷积核,就可以应对不同大小的待检测物体,也可以同是获得物体的纹理、结构信息。
空间自注意:经过不同感受野的空洞卷积后,不可避免的会产生冗余信息和噪声,在本模块中对于不同尺度空洞卷积得到的特征采取的是Add操作而不是Concatenate操作,多尺度特征在融合的过程中,如果不采用加权融合的方法,会导致冗余信息和噪声与特征拥有相同的响应值。

1.DNN(深度神经网络)
1.1神经网络
神经网络的学习就是学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数
1.2神经元
神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,则会导致神经网络不同的输出。
1.3激活函数
参考
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。

1.3.1.sigmoid

函数g(z)的图形表示如下( 横轴表示定义域z,纵轴表示值域g(z) ):

• 也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。
缺点:

  1. 容易导致梯度消失。
    问:梯度消失和梯度爆炸?改进方法。
    解决梯度爆炸:
    a.可以通过梯度截断。通过添加正则项。
    解决梯度消失:
    a.将RNN改掉,使用LSTM等自循环和门控制机制。
    b.优化激活函数,如将sigmold改为relu
    c.使用batchnorm
    d.使用残差结构
  2. Sigmoid 的输出不是0均值(即zero-centered)。
    这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
    结果:那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。
  3. 解析式中含有幂运算。
    计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
    1.3.2.tanh

特点:和sigmoid差不多,但值域为[-1,1]
解决了Sigmoid函数的不是zero-centered输出问题。
梯度消失和幂运算的问题仍然存在。
1.3.3.ReLU

优点:

  1. 解决了梯度消失问题
  2. 计算速度非常快,只需要判断输入是否大于0
  3. 收敛速度远快于sigmoid和tanh,因为这两个梯度最大为0.25,而relu为1
    缺点:
  4. 输出不是zero-centered
  5. Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,少见 。例如w初始化全部为一些负数。(2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。(权重初始化看本篇1.7)
  6. 原点不可导
    1.3.4.leaky relu函数

优点:
不会有Dead ReLU问题
输出的均值接近0,zero-centered
缺点:
计算量稍大
原点不可导
1.3.5为什么神经网络要引入非线性
答:如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。
深度学习最主要的特点就是:多层,非线性。 多层为了能够学习更多的东西;没有非线性,多层和单层没什么区别,就是简单的线性组合,连异或都解决不了
1.4神经网络

  1. 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
  2. 输出层(Output layer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的讯息称为输出向量。
  3. 隐藏层(Hidden layer),简称“隐层”,是输入层和输出层之间众多神经元和链接组成的各个层面。如果有多个隐藏层,则意味着多个激活函数。
    1.4Backpropagation(要能推导)
    后向传播是在求解损失函数L对参数w求导时候用到的方法,目的是通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关,这称为对称失效。
    1.5梯度消失、梯度爆炸
    梯度消失:因为在深层网络中通常采用的激活函数是sigmoid,在该函数中最小值和最大值的梯度(也就是倒数)都趋近于0。神经网络的反向传播是逐层对函数偏导相乘,当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。
    梯度爆炸:同理,出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。
    1.5.1解决梯度消失或爆炸问题的方法。
  4. 修改激活函数
  5. 批量规范化(Batch Normalization)
  6. 梯度截断(Gradient Clipping)
  7. 使用长短期记忆网络
  8. 残差结构
  9. 逐层贪婪预训练
    1.6overfitting
    1.6.0过拟合的原因
  10. 训练集与测试集数据分布不一致
  11. 数据集噪声比较多,干扰太大,模型记住噪声信息,未拟合输入信息和标签的关系
  12. 模型迭代太多,拟合了样本中不具有代表性的数据和噪声数据
  13. 样本数据量远小于模型复杂度
    1.6.1.解决方法
    拟合过程中通常都**倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。**可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。
  14. L1/L2正则化(原理奥卡姆剃刀):L1正则化在损失函数中加入所有权重参数w的绝对值之和,迫使更多的w为0,使特征变得稀疏;L2正则化也叫作权重衰减,目标函数中增加所有权重w参数的平方之和。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。
  15. early stopping
  16. Dropout:在训练过程中,让神经元以超参数p的概率被激活(也就是说1-p的概率被设置为0),类似于bagging算法
  17. Batch Normalization(对神经网络中下一层的输入进行归一化处理,使得输入量的均值为0,方差为1,即通过特征归一化,加速模型的训练)
  18. shortcut-connect(使用残差网络Residual network,densenet)
  19. 数据增强(增加样本的数量)
    1.6.2.L1/L2正则化的理解
    拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是“抗扰动能力强"。
    1.6.3 Batch Normalization的理解
    参考
    机器学习领域有个很重要的假设:
    IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
    BN的基本思想其实相当直观:
    因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于Sigmoid函数来说,意味着激活输入值WU+B是大的负值或正值),所以这导致反向传播时低层神经网络的梯度消失,这是训练深层神经网络收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。
    BatchNorm的好处:
    BatchNorm为什么厉害呢,关键还是效果好。①不仅仅极大提升了训练速度,收敛过程大大加快;②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。
    1.6.4Batch Normalization的实现
    参考

如上图所示,BN步骤主要分为4步:
求每一个训练批次数据的均值
求每一个训练批次数据的方差
使用求得的均值和方差对该批次的训练数据做归一化,获得0-1分布。其中ε是为了避免除数为0时所使用的微小正数。
尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。
1.6.5BN测试集预测时均值和方差怎么求?
在训练时,我们会对同一批的数据的均值和方差进行求解,进而进行归一化操作。但是对于预测时我们的均值和方差怎么求呢?比如我们预测单个样本时,那还怎么求均值和方法呀!其实是这种样子的,对于预测阶段时所使用的均值和方差,其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差,待训练完毕后,我们求整个训练样本的均值和方差期望值,作为我们进行预测时进行BN的的均值和方差.
1.6.6BN滑动平均操作
参考
滑动平均,或者叫做指数加权平均,可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。

滑动平均的好处:
占内存少,不需要保存过去10个或者100个历史 θ 值,就能够估计其均值。(当然,滑动平均不如将历史值全保存下来计算均值准确,但后者占用更多内存和计算成本更高)
训练阶段:
在训练时利用当前batch的mean和variance来进行BN处理, 同时使用滑动平均的方式不断的更新global 的mean和variance, 并将其存储起来.
测试阶段:
在预测阶段, 直接使用模型存储好的均值和方差进行计算
1.7权重初始化的几种方法

看这里
1.7.1把w初始化为0
我们在线性回归,logistics回归的时候,基本上都是把参数初始化为0,我们的模型也能够很好的工作。然后在神经网络中,把w初始化为0是不可以的。这是因为如果把w初始化0,那么每一层的神经元学到的东西都是一样的(输出是一样的),而且在bp的时候,每一层内的神经元也是相同的,因为他们的gradient相同。
1.7.2对w随机初始化
但是随机初始化也有缺点,np.random.randn()其实是一个均值为0,方差为1的高斯分布中采样。当神经网络的层数增多时,会发现越往后面的层的激活函数(使用tanH)的输出值几乎都接近于0,激活函数输出值接近于0会导致梯度非常接近于0,因此会导致梯度消失。
1.7.3Xavier初始化
Xavier initialization是 Glorot 等人为了解决随机初始化的问题提出来的另一种初始化方法,他们的思想倒也简单,就是尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于0。深层的激活函数输出值还是非常漂亮的服从标准高斯分布。虽然Xavier initialization能够很好的 tanH 激活函数,但是对于目前神经网络中最常用的ReLU激活函数,还是无能能力
1.7.4He初始化
为了解决上面的问题,我们的何恺明大神(关于恺明大神的轶事有兴趣的可以八卦下,哈哈哈,蛮有意思的)提出了一种针对ReLU的初始化方法,一般称作 He initialization。现在神经网络中,隐藏层常使用ReLU,权重初始化常用He initialization这种方法。
1.8关于softmax
参考
softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。
我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。
softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。

两步:

  1. 将预测结果转化为非负数。
  2. 各种预测结果概率之和等于1。
    2.CNN(卷积神经网络)
    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。
    超详细介绍

2.1什么是卷积
对图像和滤波矩阵做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
几个概念:

  1. depth:窗口个数,决定输出的depth厚度。同时代表滤波器个数。
  2. stride:数据窗口每次移动的步长
  3. zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
    2.1.1为什么用奇数卷积
    主要有以下两个原因:
    • (1)奇数卷积核更容易做padding。我们假设卷积核大小为k*k,为了让卷积后的图像大小与原图一样大,根据公式可得到padding=(k-1)/2,看到这里,细心地小伙伴应该已经看到点端倪了,没错,这里的k只有在取奇数的时候,padding才能是整数,否则padding不好进行图片填充;
    • (2)更容易找到锚点。这又是什么意思呢?在CNN中,一般会以卷积核的某个基准点进行窗口滑动,通常这个基准点是卷积核的中心点,所以如果k’是偶数,就找不到中心点了。
    2.1.2.1x1卷积核的作用
    参考
    (1)实现跨通道的交互和信息整合:使用1x1卷积核,其实就是对不同channel间的信息做线性组合的一个变换过程。
    (2)增加非线性特性:1x1卷积核,利用后接的非线性激活函数可以在保持feature map尺度不变的前提下大幅增加非线性特性,把网络做的很深
    (3)减少模型参数,降低计算量
    2.1.3.为什么2个3x3可以代替1个5x5的卷积核
    在卷积神经网络中,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。
    于是在VGG、Inception网络中,利用两个3×3卷积核的组合替换一个5×5卷积核,这样的好处是:
    (1)在具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果;
    (2)降低了参数量(从5×5×1 x channels 到 3×3×2 x channels)。
    那么,假设输入是28x28:
    使用5x5的卷积核对其卷积,步长(stride)为1,填充(padding)为0,得到的结果是:
    (28-5 + 0x2) / 1 + 1=24
    使用2层3x3的卷积核,同样步长(stride)为1,填充(padding)为0:
    第一层3x3:得到的结果是(28-3 + 0x2)/ 1 + 1=26
    第二层3x3:得到的结果是(26-3 + 0x2)/ 1 + 1=24
    所以最终结果是2层3x3和1个5x5的卷积核得到的feature map大小是一样的。
    同理也能得出三个3x3的卷积核可以替换一个7x7的卷积核。
    2.2激励层
    前面介绍了激活函数sigmoid,但实际梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。在CNN中用ReLU作为激励函数。
    ReLU的优点是收敛快,求梯度简单。
    2.3池化层
    CNN还有一个重要思想就是池化,池化层通常接在卷积层后面。其实引入它的目的就是为了简化卷积层的输出。通俗地理解,池化层也在卷积层上架了一个窗口,但这个窗口比卷积层的窗口简单许多,不需要w,b这些参数,它只是对窗口范围内的神经元做简单的操作,如求和,求最大值,把求得的值作为池化层神经元的输入值。
    通常卷积层的窗口是多个的,池化层的窗口也是多个的。简单来说,卷积层用一个窗口去对输入层做卷积操作,池化层也用一个窗口去对卷积层做池化操作。
    需要记住池化层一个最大的好处:经过池化后,大大减少了我们学到的特征值,也就大大减少了后面网络层的参数。
    虽然通过卷积的方式可以大范围的减少输出尺寸(特征数),但是依然很难计算而且很容易过拟合,所以依然利用图片的静态特性通过池化的方式进一步减少尺寸。
    2.4全连接层
    池化层到输出层是全连接,这和DNN是一样的。
    如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
    2.5什么是权值共享?
    局部感知:即网络部分连通,每个神经元只与上一层的部分神经元相连,只感知局部,而不是整幅图像(滑窗实现)。局部像素关系紧密,较远像素相关性弱。因此只需要局部感知,在更高层将局部的信息综合起来就得到了全局的信息。
    权值共享:从一个局部区域学习到的信息,应用到图像的其它地方去。即用一个相同的卷积核去卷积整幅图像,不同的特征靠多个不同的卷积核实现。
    2.6CNN和密集神经网络DNN的区别?
    DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。
    2.6.1在图像分类任务中,相较于使用DNN,使用CNN有哪些优势?
    虽然两种模型都可以捕获彼此靠近的像素之间的关系,但CNN具有以下属性:
    • 它是平移不变的:对于过滤器而言,像素的确切位置是无关的。
    • 参数更少,更不容易发生过度拟合:一般而言CNN中的参数比DNN要少很多。
    • 方便我们更好地理解模型:我们可以查看过滤器的权重,并可视化神经网络的学习成果。
    • 分层性质:通过使用较简单的模式描述复杂的模式来学习模式。
    2.7.Feature Map尺寸计算
    Feature Map的尺寸等于(input_size + 2 * padding_size − filter_size)/stride+1
    2.8常用的几个模型,这个最好能记住模型大致的尺寸参数.

2.9说明在图像分类任务中可视化CNN特征的两种方法
• 输入遮挡:遮挡输入图像的一部分,看看哪部分对分类的影响最大。
例如,针对某个训练好的图像分类模型,将下列图像作为输入。如果我们看到第三幅图像被分类为狗狗的概率为98%,而第二幅图像的准确率仅为65%,则说明眼睛对于对分类的影响更大。
• 激活最大化:创建一个人造的输入图像,以最大化目标响应(梯度上升)。
2.10 什么是Group Convolution
若卷积神将网络的上一层有N个卷积核,则对应的通道数也为N。设群数目为M, 在进行卷积操作的时候, 将通道分成M份, 每个group对应N/M个通道, 然后每个group卷积完成后输出叠在一起, 作为当前层的输出通道。参数减少为原来的1/M.
3.RNN(循环神经网络)
循环神经网络(Recurrent Neural Network, RNN)是一类以序列数据为输入,在序列的演进方向进行递归(recursion)且所有循环单元按链式连接的递归神经网络(recursive neural network)

3.1RNN模型
看这里

3.2RNN前向传播
W,U,V三个参数是共享的。

3.3RNN反向传播(BPTT)(手推)
BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。综上所述,BPTT算法本质还是BP算法,BP算法本质还是梯度下降法,那么求各个参数的梯度便成了此算法的核心。
与BP算法不同的是,其中W和U两个参数的寻优过程需要追溯之前的历史数据,参数V相对简单只需关注目前,那么我们就来先求解参数V的偏导数。

W和U的偏导的求解由于需要涉及到历史数据,其偏导求起来相对复杂,我们先假设只有三个时刻,那么在第三个时刻 L对W的偏导数为:

相应的,L在第三个时刻对U的偏导数为:

可以观察到,在某个时刻的对W或是U的偏导数,需要追溯这个时刻之前所有时刻的信息,这还仅仅是一个时刻的偏导数,上面说过损失也是会累加的,那么整个损失函数对W和U的偏导数将会非常繁琐。虽然如此但好在规律还是有迹可循,我们根据上面两个式子可以写出L在t时刻对W和U偏导数的通式:

整体的偏导公式就是将其按时刻再一一加起来。
前面说过激活函数是嵌套在里面的,如果我们把激活函数放进去,拿出中间累乘的那部分:

我们会发现累乘会导致激活函数导数的累乘,进而会导致“梯度消失“和“梯度爆炸“现象的发生。
3.4RNN的应用场景
至少会说出三个:图片生成文字,情感分析,机器翻译
• 1对多
1、从图像生成文字,输入为图像的特征,输出为一段句子
2、根据图像生成语音或音乐,输入为图像特征,输出为一段语音或音乐
• 多对1(最典型的就是情感分析)
1、输出一段文字,判断其所属类别
2、输入一个句子,判断其情感倾向
3、输入一段视频,判断其所属类别
• 多对多
1、机器翻译,输入一种语言文本序列,输出另外一种语言的文本序列
2、文本摘要,输入文本序列,输出这段文本序列摘要
3、阅读理解,输入文章,输出问题答案
4、语音识别,输入语音序列信息,输出文字序列
3.5CNN和RNN的区别
相同点就往神经网络说,不同点空间和时间,动态和静态去解释

4.LSTM
长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的
核心:细胞状态, 三个门控, 去除或增加信息到细胞状态 选择让信息有多少通过
看这里

4.1忘记门
作用:丢弃信息

4.2输入门层
作用:确定更新的信息

4.3输出门层
作用:确定要输出的值

4.4LSTM防止梯度消失梯度爆炸问题
RNN在进行BPTT计算更新参数时,深层的网络计算参数的梯度时会出现偏导数连乘的情况,这时会出现梯度消失或者梯度爆炸。当使用LSTM时,因为加入了sigmoid和tanh激活函数,求偏导时,使得连乘的偏导部分等于0或者1,这就解决了梯度消失和梯度爆炸的问题。
参考1
参考2

4.5 LSTM 为什么用sigmoid和tanh激活函数
1、在 LSTM 中,所有控制门都使用 sigmoid 作为激活函数(遗忘门、输入门、输出门);
2、在计算候选记忆或隐藏状态时,使用双曲正切函数 tanh 作为激活函数 ;
3、所谓饱和性,即输入超过一定范围后,输出几乎不再发生明显变化了,符合门控的定义,如果使用其他非饱和激活函数,则难以实现门控效果,因此不能替换为其他激活函数。
4、使用 tanh 作为计算状态时的激活函数,主要是因为其值域为 (-1, 1),tanh 比 sigmoid 在 0 附近有更大的梯度,通常会使模型收敛更快。
5.GRU
5.1原理
相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。(一句话就是简单但效果也不差)
它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

5.2.GRU和LSTM的区别
GRU和LSTM的性能在很多任务上不分伯仲。
GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。
从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。
6.GAN(生成对抗网络)
6.1GAN网络的思想
GAN用一个生成模型和一个判别模型,关于生成模型和判别模型的面试看这里。判别模型用于判断给定的图片是不是真实的图片,生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。
7.EM算法
EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计,有两步组成:E步,求期望(expectation);M步,求极大(maxmization)。本质上EM算法还是一个迭代算法,通过不断用上一代参数对隐变量的估计来对当前变量进行计算,直到收敛。
注意:EM算法是对初值敏感的,而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法,也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。
8.HMM(隐马尔科夫模型)
暂时先不写
9.CRF
暂时先不写
10.深度学习参数更新方法

11.如何解决样本类别的不均衡问题?
• 过采样/上采样:增加类别少的样本数量实现样本数量的均衡。具体是通过复制类别上的样本构成多条数据。此方法的缺点是当样本的特征很少时,容易出现过拟合。需要对过采样方法进行改进,改进的方法是:在类别少的样本中加入噪声、干扰数据或通过一定的规则产生新合成的样本,如smote算法。
• 欠采样/下采样:减少类别多的样本数量,一般的方法是随机地去掉一些类别多的样本。而下采样的缺点也比较明显,那就是最终的训练集丢失了数据,模型只学到了一部分,可能会导致欠拟合,解决办法:多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,利用模型融合,通过组合多个分类器的结果得到最终的结果。
• 损失函数采用不同的类别权重:对类别少的样本赋予高的权重,对类别多的样本赋予低的权重。
• 选择准确率之外的损失函数:在样本不平衡的情况下,得到的高准确率没有任何意义,此时准确率就会失效。针对机器学习中的数据不平衡问题,建议更多PR(Precision-Recall曲线),而非ROC曲线。
● BatchNormalization的作用
参考回答:
神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而Batch Normalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。
● 梯度消失
参考回答:
在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。
● 循环神经网络,为什么好?
参考回答:
循环神经网络模型(RNN)是一种节点定向连接成环的人工神经网络,是一种反馈神经网络,RNN利用内部的记忆来处理任意时序的输入序列,并且在其处理单元之间既有内部的反馈连接又有前馈连接,这使得RNN可以更加容易处理不分段的文本等。
● 什么是Group Convolution
参考回答:
若卷积神将网络的上一层有N个卷积核,则对应的通道数也为N。设群数目为M,在进行卷积操作的时候,将通道分成M份,每个group对应N/M个通道,然后每个group卷积完成后输出叠在一起,作为当前层的输出通道。
● 什么是RNN
参考回答:
一个序列当前的输出与前面的输出也有关,在RNN网络结构中中,隐藏层的输入不仅包括输入层的输出还包含上一时刻隐藏层的输出,网络会对之前的信息进行记忆并应用于当前的输入计算中。
● 训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?
参考回答:
并不能说明这个模型无效,导致模型不收敛的原因可能有数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间。学习率设置的太大容易产生震荡,太小会导致不收敛。可能复杂的分类任务用了简单的模型。数据没有进行归一化的操作。
● 图像处理中锐化和平滑的操作
参考回答:
锐化就是通过增强高频分量来减少图像中的模糊,在增强图像边缘的同时也增加了图像的噪声。
平滑与锐化相反,过滤掉高频分量,减少图像的噪声是图片变得模糊。
● VGG使用33卷积核的优势是什么?
参考回答:
2个3
3的卷积核串联和55的卷积核有相同的感知野,前者拥有更少的参数。多个33的卷积核比一个较大尺寸的卷积核有更多层的非线性函数,增加了非线性表达,使判决函数更具有判决性。
● Relu比Sigmoid的效果好在哪里?
参考回答:
Sigmoid的导数只有在0的附近时有较好的激活性,而在正负饱和区域的梯度趋向于0,从而产生梯度弥散的现象,而relu在大于0的部分梯度为常数,所以不会有梯度弥散现象。Relu的导数计算的更快。Relu在负半区的导数为0,所以神经元激活值为负时,梯度为0,此神经元不参与训练,具有稀疏性。
● 问题:神经网络中权重共享的是?
参考回答:
卷积神经网络、循环神经网络
解析:通过网络结构直接解释
● 问题:神经网络激活函数?
参考回答:
sigmod、tanh、relu
解析:需要掌握函数图像,特点,互相比较,优缺点以及改进方法
● 问题:在深度学习中,通常会finetuning已有的成熟模型,再基于新数据,修改最后几层神经网络权值,为什么?
参考回答:
实践中的数据集质量参差不齐,可以使用训练好的网络来进行提取特征。把训练好的网络当做特征提取器。
● 问题:画GRU结构图
参考回答:

GRU有两个门:更新门,输出门
解析:如果不会画GRU,可以画LSTM或者RNN。再或者可以讲解GRU与其他两个网络的联系和区别。不要直接就说不会。
● Attention机制的作用
参考回答:
减少处理高维输入数据的计算负担,结构化的选取输入的子集,从而降低数据的维度。让系统更加容易的找到输入的数据中与当前输出信息相关的有用信息,从而提高输出的质量。帮助类似于decoder这样的模型框架更好的学到多种内容模态之间的相互关系。
● Lstm和Gru的原理
参考回答:
Lstm由输入门,遗忘门,输出门和一个cell组成。第一步是决定从cell状态中丢弃什么信息,然后在决定有多少新的信息进入到cell状态中,最终基于目前的cell状态决定输出什么样的信息。
Gru由重置门和跟新门组成,其输入为前一时刻隐藏层的输出和当前的输入,输出为下一时刻隐藏层的信息。重置门用来计算候选隐藏层的输出,其作用是控制保留多少前一时刻的隐藏层。跟新门的作用是控制加入多少候选隐藏层的输出信息,从而得到当前隐藏层的输出。
● 什么是dropout
参考回答:
在神经网络的训练过程中,对于神经单元按一定的概率将其随机从网络中丢弃,从而达到对于每个mini-batch都是在训练不同网络的效果,防止过拟合。
● LSTM每个门的计算公式
参考回答:
遗忘门:
输入门:
输出门:
● DropConnect的原理
参考回答:
防止过拟合方法的一种,与dropout不同的是,它不是按概率将隐藏层的节点输出清0,而是对每个节点与之相连的输入权值以一定的概率清0。

● BN层的作用,为什么要在后面加伽马和贝塔,不加可以吗
参考回答:
BN层的作用是把一个batch内的所有数据,从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的敏感区域,敏感区域即为梯度较大的区域,因此在反向传播的时候能够较快反馈误差传播。
● 梯度消失,梯度爆炸的问题,
参考回答:
激活函数的原因,由于梯度求导的过程中梯度非常小,无法有效反向传播误差,造成梯度消失的问题。
● Adam
参考回答:
Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率。
● attention机制
参考回答:
Attention简单理解就是权重分配,。以seq2seq中的attention公式作为讲解。就是对输入的每个词分配一个权重,权重的计算方式为与解码端的隐含层时刻作比较,得到的权重的意义就是权重越大,该词越重要。最终加权求和。

● RNN梯度消失问题,为什么LSTM和GRU可以解决此问题
参考回答:
RNN由于网络较深,后面层的输出误差很难影响到前面层的计算,RNN的某一单元主要受它附近单元的影响。而LSTM因为可以通过阀门记忆一些长期的信息,相应的也就保留了更多的梯度。而GRU也可通过重置和更新两个阀门保留长期的记忆,也相对解决了梯度消失的问题。
● GAN网络的思想
参考回答:
GAN用一个生成模型和一个判别模型,判别模型用于判断给定的图片是不是真实的图片,生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。
● 1*1的卷积作用
参考回答:
实现跨通道的交互和信息整合,实现卷积核通道数的降维和升维,可以实现多个feature map的线性组合,而且可是实现与全连接层的等价效果。
● 怎么提升网络的泛化能力
参考回答:
从数据上提升性能:收集更多的数据,对数据做缩放和变换,特征组合和重新定义问题。
从算法调优上提升性能:用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机数初始化权重。对学习率进行调节,尝试选择合适的激活函数,调整网络的拓扑结构,调节batch和epoch的大小,添加正则化的方法,尝试使用其它的优化方法,使用early stopping。
● 什么是seq2seq model
参考回答:
Seq2seq属于encoder-decoder结构的一种,利用两个RNN,一个作为encoder一个作为decoder。Encoder负责将输入序列压缩成指定长度的向量,这个向量可以看作这段序列的语义,而decoder负责根据语义向量生成指定的序列。
● 激活函数的作用
参考回答:
激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。
● 为什么用relu就不用sigmoid了
参考回答:
Sigmoid的导数只有在0的附近时有比较好的激活性,在正负饱和区域的梯度都接近0,会导致梯度弥散。而relu函数在大于0的部分梯度为常数,不会产生梯度弥散现象。Relu函数在负半区导数为0,也就是说这个神经元不会经历训练,就是所谓稀疏性。而且relu函数的导数计算的更快。
● 讲一下基于WFST的静态解码网络的语音识别流程?
参考回答:
从语音特征开始讲起,我讲了MFCC和LPC的原理以及提取过程,这一部分讲的很细,然后讲了viterbi解码过程,最后概述了一下HCLG.fst构建流程
● 目标检测了解吗,Faster RCNN跟RCNN有什么区别
参考回答:
目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。
随着计算机技术的发展和计算机视觉原理的广泛应用,利用计算机图像处理技术对目标进行实时跟踪研究越来越热门,对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。
使用方法 缺点 改进
R-CNN
1、SS提取RP;
2、CNN提取特征;
3、SVM分类;
4、BB盒回归。 1、 训练步骤繁琐(微调网络+训练SVM+训练bbox);
2、 训练、测试均速度慢 ;
3、 训练占空间 1、 从DPM HSC的34.3%直接提升到了66%(mAP);
2、 引入RP+CNN
Faster R-CNN
1、RPN提取RP;
2、CNN提取特征;
3、softmax分类;
4、多任务损失函数边框回归。 1、 还是无法达到实时检测目标;
2、 获取region proposal,再对每个proposal分类计算量还是比较大。 1、 提高了检测精度和速度;
2、 真正实现端到端的目标检测框架;
3、 生成建议框仅需约10ms。
● SPP,YOLO了解吗?
参考回答:
SPP-Net简介:
SPP-Net主要改进有下面两个:
1).共享卷积计算、2).空间金字塔池化
在SPP-Net中同样由这几个部分组成:
ss算法、CNN网络、SVM分类器、bounding box
ss算法的区域建议框同样在原图上生成,但是却在Conv5上提取,当然由于尺寸的变化,在Conv5层上提取时要经过尺度变换,这是它R-CNN最大的不同,也是SPP-Net能够大幅缩短时长的原因。因为它充分利用了卷积计算,也就是每张图片只卷积一次,但是这种改进带来了一个新的问题,由于ss算法生成的推荐框尺度是不一致的,所以在cov5上提取到的特征尺度也是不一致的,这样是没有办法做全尺寸卷积的(Alexnet)。
所以SPP-Net需要一种算法,这种算法能够把不一致的输入产生统一的输出,这就SPP,即空间金字塔池化,由它替换R-CNN中的pooling层,除此之外,它和R-CNN就一样了。
YOLO详解:
YOLO的名字You only look once正是自身特点的高度概括。YOLO的核心思想在于将目标检测作为回归问题解决 ,YOLO首先将图片划分成SxS个区域,注意这个区域的概念不同于上文提及将图片划分成N个区域扔进detector这里的区域不同。上文提及的区域是真的将图片进行剪裁,或者说把图片的某个局部的像素扔进detector,而这里的划分区域,只的是逻辑上的划分。
● 梯度消失梯度爆炸怎么解决
参考回答:
1)、使用 ReLU、LReLU、ELU、maxout 等激活函数
sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
2)、使用批规范化
通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。从上述分析分可以看到,反向传播式子中有w的存在,所以w的大小影响了梯度的消失和爆炸,Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法,消除了w带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。
● RNN容易梯度消失,怎么解决?
参考回答:
1)、梯度裁剪(Clipping Gradient)
既然在BP过程中会产生梯度消失(就是偏导无限接近0,导致长时记忆无法更新),那么最简单粗暴的方法,设定阈值,当梯度小于阈值时,更新的梯度为阈值。
优点:简单粗暴
缺点:很难找到满意的阈值
2)、LSTM(Long Short-Term Memory)
一定程度上模仿了长时记忆,相比于梯度裁剪,最大的优点就是,自动学习在什么时候可以将error反向传播,自动控制哪些是需要作为记忆存储在LSTM cell中。一般长时记忆模型包括写入,读取,和忘记三个过程对应到LSTM中就变成了input_gate,output_gate,
forget_gate,三个门,范围在0到1之间,相当于对输入输出进行加权的学习,利用大量数据来自动学习加权的参数(即学习了哪些错误可以用BP更新参数)。具体的公式表达:

优点:模型自动学习更新参数
● LSTM跟RNN有啥区别
参考回答:
LSTM与RNN的比较
RNN在处理long term memory的时候存在缺陷,因此LSTM应运而生。LSTM是一种变种的RNN,它的精髓在于引入了细胞状态这样一个概念,不同于RNN只考虑最近的状态,LSTM的细胞状态会决定哪些状态应该被留下来,哪些状态应该被遗忘。
下面来看一些RNN和LSTM内部结构的不同:
RNN

LSTM

由上面两幅图可以观察到,LSTM结构更为复杂,在RNN中,将过去的输出和当前的输入concatenate到一起,通过tanh来控制两者的输出,它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。
而LSTM为了能记住长期的状态,在RNN的基础上增加了一路输入和一路输出,增加的这一路就是细胞状态,也就是途中最上面的一条通路。事实上整个LSTM分成了三个部分:
1)哪些细胞状态应该被遗忘
2)哪些新的状态应该被加入
3)根据当前的状态和现在的输入,输出应该是什么
下面来分别讨论:
1)哪些细胞状态应该被遗忘
这部分功能是通过sigmoid函数实现的,也就是最左边的通路。根据输入和上一时刻的输出来决定当前细胞状态是否有需要被遗忘的内容。举个例子,如果之前细胞状态中有主语,而输入中又有了主语,那么原来存在的主语就应该被遗忘。concatenate的输入和上一时刻的输出经过sigmoid函数后,越接近于0被遗忘的越多,越接近于1被遗忘的越少。
2)哪些新的状态应该被加入
继续上面的例子,新进来的主语自然就是应该被加入到细胞状态的内容,同理也是靠sigmoid函数来决定应该记住哪些内容。但是值得一提的是,需要被记住的内容并不是直接
concatenate的输入和上一时刻的输出,还要经过tanh,这点应该也是和RNN保持一致。并且需要注意,此处的sigmoid和前一步的sigmoid层的w和b不同,是分别训练的层。
细胞状态在忘记了该忘记的,记住了该记住的之后,就可以作为下一时刻的细胞状态输入了。
3)根据当前的状态和现在的输入,输出应该是什么
这是最右侧的通路,也是通过sigmoid函数做门,对第二步求得的状态做tanh后的结果过滤,从而得到最终的预测结果。
事实上,LSTM就是在RNN的基础上,增加了对过去状态的过滤,从而可以选择哪些状态对当前更有影响,而不是简单的选择最近的状态。
在这之后,研究人员们实现了各种LSTM的变种网络。不变的是,通常都会用sigmoid函数做门,筛选状态或者输入。并且输出都是要经过tanh函数。具体为什么要用这两个函数,由于刚接触还不能给出一定的解释,日后理解了再补充。
● 卷积层和池化层有什么区别
参考回答:
卷积层 池化层
功能 提取特征 压缩特征图,提取主要特征
操作 可惜是二维的,对于三维数据比如RGB图像(3通道),卷积核的深度必须同输入的通道数,输出的通道数等于卷积核的个数。
卷积操作会改变输入特征图的通道数。 池化只是在二维数据上操作的,因此不改变输入的通道数。对于多通道的输入,这一点和卷积区别很大。
特性 权值共享:减少了参数的数量,并利用了图像目标的位置无关性。
稀疏连接:输出的每个值只依赖于输入的部分值。
● 防止过拟合有哪些方法
参考回答:
1)Dropout ;2)加L1/L2正则化;3)BatchNormalization ;4)网络bagging
● dropout咋回事讲讲
参考回答:
Dropout的目标是在指数 级数量的神经网络上近似这个过程。Dropout训练与Bagging训练不太一样。在Bagging的情况下,所有模型是独立的。
在Dropout的情况下,模型是共享参数的,其中每个模型继承的父神经网络参 数的不同子集。参数共享使得在有限可用的内存下代表指数数量的模型变得可能。 在Bagging的情况下,每一个模型在其相应训练集上训练到收敛。
在Dropout的情况下,通常大部分模型都没有显式地被训练,通常该模型很大,以致到宇宙毁灭都不 能采样所有可能的子网络。取而代之的是,可能的子网络的一小部分训练单个步骤,参数共享导致剩余的子网络能有好的参数设定。
● relu
参考回答:
在深度神经网络中,通常使用一种叫修正线性单元(Rectified linear unit,ReLU)作为神经元的激活函数。ReLU起源于神经科学的研究:2001年,Dayan、Abott从生物学角度模拟出了脑神经元接受信号更精确的激活模型,如下图:

其中横轴是时间(ms),纵轴是神经元的放电速率(Firing Rate)。同年,Attwell等神经科学家通过研究大脑的能量消耗过程,推测神经元的工作方式具有稀疏性和分布性;2003年Lennie等神经科学家估测大脑同时被激活的神经元只有1~4%,这进一步表明了神经元的工作稀疏性。而对于ReLU函数而言,类似表现是如何体现的?其相比于其他线性函数(如purlin)和非线性函数(如sigmoid、双曲正切)又有何优势?下面请各位看官容我慢慢道来。
首先,我们来看一下ReLU激活函数的形式,如下图:

从上图不难看出,ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。可别小看这个简单的操作,正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。尤其体现在深度神经网络模型(如CNN)中,当模型增加N层之后,理论上ReLU神经元的激活率将降低2的N次方倍。这里或许有童鞋会问:ReLU的函数图像为什么一定要长这样?反过来,或者朝下延伸行不行?其实还不一定要长这样。只要能起到单侧抑制的作用,无论是镜面翻转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。之所以这样定,或许是为了契合生物学角度,便于我们理解吧。
那么问题来了:这种稀疏性有何作用?换句话说,我们为什么需要让神经元稀疏?不妨举栗子来说明。当看名侦探柯南的时候,我们可以根据故事情节进行思考和推理,这时用到的是我们的大脑左半球;而当看蒙面唱将时,我们可以跟着歌手一起哼唱,这时用到的则是我们的右半球。左半球侧重理性思维,而右半球侧重感性思维。也就是说,当我们在进行运算或者欣赏时,都会有一部分神经元处于激活或是抑制状态,可以说是各司其职。再比如,生病了去医院看病,检查报告里面上百项指标,但跟病情相关的通常只有那么几个。与之类似,当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。
此外,相比于其它激活函数来说,ReLU有以下优势:对于线性函数而言,ReLU的表达能力更强,尤其体现在深度网络中;而对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态。这里稍微描述一下什么是梯度消失问题:当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次,如果在深层模型中使用sigmoid作为激活函数,这种现象尤为明显,将导致模型收敛停滞不前
● CNN为什么比DNN在图像识别上更好
参考回答:
DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。
● 使用的 CNN 模型权重之间有关联吗?
参考回答:
权重之间有关联。CNN是权重共享,减少了参数的数量。
简单来说就是用一个卷积核来和一个图像来进行卷积,记住是同一个卷积核,不改变卷积核的值。这样可以减少权值参数。共享就是一个图片对卷积核是共同享有的。对于一个100100像素的图像,如果我们用一个神经元来对图像进行操作,这个神经元大小就是100100=10000,单如果我们使用1010的卷积核,我们虽然需要计算多次,但我们需要的参数只有1010=100个,加上一个偏向b,一共只需要101个参数。我们取得图像大小还是100100。如果我们取得图像比较大,它的参数将会更加多。我们通过1010的卷积核对图像进行特征提取,这样我们就得到一个Feature Map。
一个卷积核只能提取一个特征,所以我们需要多几个卷积核,假设我们有6个卷积核,我们就会得到6个Feature Map,将这6个Feature Map组成一起就是一个神经元。这6个Feature Map我们需要101*6=606个参数。这个值和10000比还是比较小的。如果像之前的神经网络, 两两相连, 需要 28x28 = 784 输入层, 加上第一个隐藏层30个神经元, 则需要784x30再加上30个b, 总共23,550个参数! 多了40倍的参数。
● 神经网络为啥用交叉熵。
参考回答:
通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置n个输出节点,无论在浅层神经网络还是在CNN中都是如此,比如,在AlexNet中最后的输出层有1000个节点,而即便是ResNet取消了全连接层,也会在最后有一个1000个节点的输出层。
一般情况下,最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为N,那么对于每一个样例,神经网络可以得到一个N维的数组作为输出结果,数组中每一个维度会对应一个类别。在最理想的情况下,如果一个样本属于k,那么这个类别所对应的的输出节点的输出值应该为1,而其他节点的输出都为0,即[0,0,1,0,….0,0],这个数组也就是样本的Label,是神经网络最期望的输出结果,交叉熵就是用来判定实际的输出与期望的输出的接近程度。

LSTM和Naive RNN的区别
参考回答:
RNN和LSTM内部结构的不同:

RNN

LSTM
由上面两幅图可以观察到,LSTM结构更为复杂,在RNN中,将过去的输出和当前的输入concatenate到一起,通过tanh来控制两者的输出,它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。
而LSTM为了能记住长期的状态,在RNN的基础上增加了一路输入和一路输出,增加的这一路就是细胞状态,也就是途中最上面的一条通路。事实上整个LSTM分成了三个部分:
1)哪些细胞状态应该被遗忘
2)哪些新的状态应该被加入
3)根据当前的状态和现在的输入,输出应该是什么
下面来分别讨论:
1)哪些细胞状态应该被遗忘
这部分功能是通过sigmoid函数实现的,也就是最左边的通路。根据输入和上一时刻的输出来决定当前细胞状态是否有需要被遗忘的内容。举个例子,如果之前细胞状态中有主语,而输入中又有了主语,那么原来存在的主语就应该被遗忘。concatenate的输入和上一时刻的输出经过sigmoid函数后,越接近于0被遗忘的越多,越接近于1被遗忘的越少。
2)哪些新的状态应该被加入
继续上面的例子,新进来的主语自然就是应该被加入到细胞状态的内容,同理也是靠sigmoid函数来决定应该记住哪些内容。但是值得一提的是,需要被记住的内容并不是直接concatenate的输入和上一时刻的输出,还要经过tanh,这点应该也是和RNN保持一致。并且需要注意,此处的sigmoid和前一步的sigmoid层的w和b不同,是分别训练的层。细胞状态在忘记了该忘记的,记住了该记住的之后,就可以作为下一时刻的细胞状态输入了。
3)根据当前的状态和现在的输入,输出应该是什么
这是最右侧的通路,也是通过sigmoid函数做门,对第二步求得的状态做tanh后的结果过滤,从而得到最终的预测结果。事实上,LSTM就是在RNN的基础上,增加了对过去状态的过滤,从而可以选择哪些状态对当前更有影响,而不是简单的选择最近的状态。
12.梯度更新方式
参考回答:
1)批量梯度下降法BGD
批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,梯度下降法里的损失函数是在整个数据集上进行计算得到的均值,所以每更新一次模型参数,就要对整个数据集进行一个计算,其数学形式如下:

(1) 对上述的能量函数求偏导:

优点:全局最优解;易于并行实现;

缺点:当样本数目很多时,训练过程会很慢。

2)随机梯度下降法SGD

由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。

将上面的能量函数写为如下形式:

优点:训练速度快;可以从局部最小值中跳出来

缺点:准确度下降,并不是全局最优;不易于并行实现。

3)小批量梯度下降法MBGD

有上述的两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?即,算法的训练过程比较快,而且也要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。

一次采样一个小批量的样本,然后利用该小批量来计算梯度。这样做比每次仅采样一个样本,能够使得计算的梯度值更加符合期望的梯度值,排除减少异常样本的干扰

4)AdaGrad
该算法的思想是独立地适应模型的每个参数:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根
学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束
需要设置一个全局的初始学习率

4)RMSProp
RMSProp 主要是为了解决 AdaGrad 方法中学习率过度衰减的问题—— AdaGrad 根据平方梯度的整个历史来收缩学习率,可能使得学习率在达到局部最小值之前就变得太小而难以继续训练;
RMSProp 使用指数衰减平均(递归定义)以丢弃遥远的历史,使其能够在找到某个“凸”结构后快速收敛;此外,RMSProp 还加入了一个超参数 ρ 用于控制衰减速率。

5)Adam
Adam 在 RMSProp 方法的基础上更进一步:
除了加入历史梯度平方的指数衰减平均(r)外,
还保留了历史梯度的指数衰减平均(s),相当于动量。
Adam 行为就像一个带有摩擦力的小球,在误差面上倾向于平坦的极小值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值