残差网络

什么是残差网络?残差网络解决了什么问题?残差网络是怎么解决这个问题的?

残差网络可以解决“随着网络加深,准确度不下降”也就是网络退化的问题。
增加一个恒等映射,将原始所需要学的函数H(x)转换成F(x)+x,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。

对比 DenseNet等,其区别何在(虽然都有 Shortcut,但是 DenceNet是串联,ResNet是相加)

梯度消失和梯度爆炸

神经网络是根据损失函数计算的误差通过梯度反向传播的方式来指导深度网络权值的更新优化的。而误差传递过程是链式法则,当层数越深的时候,梯度是以指数的形式传播的。在根据损失函数计算的误差通过梯度反向传播的方式对深度网络权值进行更新时,得到的梯度值接近0或特别大,也就是梯度消失或爆炸。

什么是梯度爆炸和梯度消失:
在反向传播过程中需要对激活函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。

产生的原因:
梯度消失产生的原因:深层网络、不合适的损失函数
梯度爆炸产生的原因:一般出现在深层网络和权值初始化值太大的情况下。在深层神经网络或循环神经网络中,误差的梯度可在更新中累积相乘。如果网络层之间的梯度值大于 1.0,那么重复相乘会导致梯度呈指数级增长,梯度变的非常大,然后导致网络权重的大幅更新,并因此使网络变得不稳定。

解决方法:

  • 预训练+微调
  • 梯度剪切、权重正则化:梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。正则化是通过对网络权重做正则限制过拟合,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。
  • relu、leakrelu、elu、maxout等激活函数:如果激活函数的导数为1,那么就不存在梯度消失爆炸的问题了,每层的网络都可以得到相同的更新速度。sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
  • batch normalization:Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性。反向传播式子中有w的存在,所以w的大小影响了梯度的消失和爆炸,Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法,消除了w带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。

BN

作用:
神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。
BN层的作用是把一个batch内的所有数据,从不规范的分布拉到正态分布。这样做的好处是使得数据能够分布在激活函数的敏感区域,敏感区域即为梯度较大的区域,因此在反向传播的时候能够较快反馈误差传播。

RNN、LSTM、GRU(会推导)

RNN

一个序列当前的输出与前面的输出也有关,在RNN网络结构中中,隐藏层的输入不仅包括输入层的输出还包含上一时刻隐藏层的输出,网络会对之前的信息进行记忆并应用于当前的输入计算中。

为什么好?
循环神经网络模型(RNN)是一种节点定向连接成环的人工神经网络,是一种反馈神经网络,RNN利用内部的记忆来处理任意时序的输入序列,并且在其处理单元之间既有内部的反馈连接又有前馈连接,这使得RNN可以更加容易处理不分段的文本等。

RNN容易梯度消失

  • 梯度裁剪:设定阈值,当梯度小于阈值时,更新的梯度为阈值。
  • 使用LSTM、GRU

LSTM

  • Lstm由输入门,遗忘门,输出门和一个cell组成。第一步是决定从cell状态中丢弃什么信息,然后在决定有多少新的信息进入到cell状态中,最终基于目前的cell状态决定输出什么样的信息。
  • Gru由重置门和更新门组成,其输入为前一时刻隐藏层的输出和当前的输入,输出为下一时刻隐藏层的信息。重置门用来计算候选隐藏层的输出,其作用是控制保留多少前一时刻的隐藏层。跟新门的作用是控制加入多少候选隐藏层的输出信息,从而得到当前隐藏层的输出。

GRU

比较

RNN在处理long term memory的时候存在缺陷,因此LSTM应运而生。LSTM是一种变种的RNN,它的精髓在于引入了细胞状态这样一个概念,不同于RNN只考虑最近的状态,LSTM的细胞状态会决定哪些状态应该被留下来,哪些状态应该被遗忘。

LSTM与GRU区别:1)GRU和LSTM的性能在很多任务上不分伯仲。2)GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。3)从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。

内部结构是不同的

可以解决RNN的梯度消失的问题,怎么解决:
RNN由于网络较深,后面层的输出误差很难影响到前面层的计算,RNN的某一单元主要受它附近单元的影响。而LSTM因为可以通过阀门记忆一些长期的信息,相应的也就保留了更多的梯度。而GRU也可通过重置和更新两个阀门保留长期的记忆,也相对解决了梯度消失的问题。

CNN

卷积神经网络主要由卷积层、激活函数、池化层、全连接层组成。

  1. 卷积层:使用卷积核进行特征提取和特征映射
  2. 激活函数:由于卷积也是一种新型运算,因此需要增加非线性映射
  3. 池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征
  4. 全连接层:连接所有的特征,将输出值送给分类器

优点:共享卷积核,处理高维数据无压力;可以自动进行特征提取
缺点:忽略局部和整体之间关联性;采用梯度下降法很容易使训练结果收敛于局部最小值而非全局最小值。

卷积的概念:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器 filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。

感受野的概念:CNN每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小.
权重共享:卷积的时候,卷积核上面的一组权重是恒定不变的,用一个卷积和去卷积一张图,这张图每个位置是被同样数值的卷积核操作的,权重是一样的,也就是参数共享

特性:局部连接、权值共享、池化操作、多层系统

pooling的作用:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。
主要有max-pooling和average-pooling,max-pooling更常用。通常max-pooling的效果更好,虽然两个都对数据做了下采样,但是max-pooling感觉更像是做了特征选择,选出了分类辨识度更好的特征,提供了非线性。

训练过程中,若一个模型不收敛,那么是否说明这个模型无效?导致模型不收敛的原因有哪些?

并不能说明这个模型无效,导致模型不收敛的原因可能有数据分类的标注不准确,样本的信息量太大导致模型不足以fit整个样本空间。学习率设置的太大容易产生震荡,太小会导致不收敛。可能复杂的分类任务用了简单的模型。数据没有进行归一化的操作。

激活函数

  1. sigmod
  2. tanh
  3. relu
  4. sign(这是感知机中用到的函数)

函数图像、特点、互相比较、优缺点以及改进方法
知道哪些激活函数,都有什么特点,如何使用

Relu比Sigmoid的效果好在哪里?
Sigmoid的导数只有在0的附近时有较好的激活性,而在正负饱和区域的梯度趋向于0,从而产生梯度弥散的现象,而relu在大于0的部分梯度为常数,所以不会有梯度弥散现象。Relu的导数计算的更快。Relu在负半区的导数为0,所以神经元激活值为负时,梯度为0,此神经元不参与训练,具有稀疏性。

作用:激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。

神经网络中权重共享的是?卷积神经网络、循环神经网络

relu

在深度神经网络中,通常使用一种叫修正线性单元(Rectified linear unit,ReLU)作为神经元的激活函数。
ReLU函数其实是分段线性函数,把所有的负值都变为0,而正值不变,这种操作被成为单侧抑制。
有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。
通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。
相比于其它激活函数来说,ReLU有以下优势:

  • ReLU的表达能力更强,尤其体现在深度网络中
  • 对于非线性函数而言,ReLU由于非负区间的梯度为常数,因此不存在梯度消失问题(Vanishing Gradient Problem),使得模型的收敛速度维持在一个稳定状态

attention机制

为了解决LSTM长输入序列在编码成固定长度向量后,解码受限于该固定长度向量的问题。

概念:核心目标是从众多信息中选择出对当前任务目标更关键的信息。
本质上:将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。
物理意义:从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,这个“聚焦”就体现在权重系数上
优点:参数少、速度快、效果好

作用:
减少处理高维输入数据的计算负担,结构化的选取输入的子集,从而降低数据的维度。让系统更加容易的找到输入的数据中与当前输出信息相关的有用信息,从而提高输出的质量。帮助类似于decoder这样的模型框架更好的学到多种内容模态之间的相互关系。

带权求和

公式
Soft attention(global attention)
Hard attention
local attention

动态attention、静态attention、
self attention

静态attention“半软半硬”的attention (local attention)

强制前向attention

attention的概念,attention的本质是什么(本质是求相似度)

1*1的卷积作用

实现跨通道的交互和信息整合,实现卷积核通道数的降维和升维,可以实现多个feature map的线性组合,而且可是实现与全连接层的等价效果。

提升网络的泛化能力

  • 从数据上提升性能:收集更多的数据,对数据做缩放和变换,特征组合和重新定义问题。
  • 从算法调优上提升性能:用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机数初始化权重。对学习率进行调节,尝试选择合适的激活函数,调整网络的拓扑结构,调节batch和epoch的大小,添加正则化的方法,尝试使用其它的优化方法,使用early stopping。

卷积层和池化层

\ 卷积层 池化层
功能 提取特征 压缩特征图,提取主要特征
操作 可惜是二维的,对于三维数据比如RGB图像(3通道),卷积核的深度必须同输入的通道数,输出的通道数等于卷积核的个数。 卷积操作会改变输入特征图的通道数。 池化只是在二维数据上操作的,因此不改变输入的通道数。对于多通道的输入,这一点和卷积区别很大。
特性 权值共享:减少了参数的数量,并利用了图像目标的位置无关性。稀疏连接:输出的每个值只依赖于输入的部分值。

Optimizer

1)SGD;2)Momentum;3)Nesterov;4)Adagrad;5)Adadelta;6)RMSprop;7)Adam;8)Adamax;9)Nadam。(1)对于稀疏数据,尽量使用学习率可自适应的算法,不用手动调节,而且最好采用默认参数。(2)SGD通常训练时间最长,但是在好的初始化和学习率调度方案下,结果往往更可靠。但SGD容易困在鞍点,这个缺点也不能忽略。(3)如果在意收敛的速度,并且需要训练比较深比较复杂的网络时,推荐使用学习率自适应的优化方法。(4)Adagrad,Adadelta和RMSprop是比较相近的算法,表现都差不多。(5)在能使用带动量的RMSprop或者Adam的地方,使用Nadam往往能取得更好的效果。