深度学习技术与理论
一、简答题(50 分)。
1、Sigmoid, Tanh, Relu 这三个激活函数有什么缺点和不足?有哪些最新改进的激活函数?(10 分)
激活函数 | 公式 | 缺点 | 优点 |
---|---|---|---|
sigmoid | $\sigma(x) = 1/(1+e^{-x})$ | 1. 由于其软饱和性,会有梯度消失弥散问题,导致训练出现问题 2. 不是关于原点对称 3. 计算 exp 较为耗时 |
1. 函数输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层 2. 求导容易 |
Tanh | $tanh(x) = 2\sigma(2x)-1$ | 梯度弥散没有解决 | 1. 解决了原点对称的问题 2.比 sigmoid 更快 |
Relu | $f(x) = max(0,x)$ | 梯度弥散没有完全解决,在(-) 部分相当于神经元死亡且不会复活,因此权重无法更新的问题。 | 1. 解决了部分梯度弥散的问题 2. 收敛速度更快了 3.在没有无监督预训练的时候也能有较好的表现 |
Leaky Relu | $f(x) = 1(x<0),(\alpha x)+1(x>=0)(x)$ | 解决了神经死亡问题 | |
Maxout | $max(w^T_1x+b_1, w^T_2x + b_2)$ | 参数比较多,本质上是在输出结果上又增加了一层 | 克服了 Relu的缺点,比较提倡使用 |
LReLU:
$f(y_i) = y_i(if (y_i > 0)), a_iy_i (if(y_i<=0))$
当参数 $a_i$ 比较小而且固定的时候,称之为 LRe LU,其最初目的是为了避免梯度消失。很多时候当我们想要应用 LReLU时,必须非常奥心谨慎地重复训练,选出合适的 $a_i$时,LReLu 的表现出的结果才比 ReLU 好。
PReLU 是 LReLU 的改进,可以自适应地从数据中学习参数,PReLU 具有收敛速度快、错误率低的特点,PReLU 可以用于反向传播的训练,可以与其它层同时优化。
ELUs:
$f(x) = x (if(x > 0)), \alpha(exp(x)-1)(if x <=0)$
$f’(x)=1(if(x>0)), f(x)+\alpha (if(x<=0)) $
ELUs 是对 ReLU 激活函数的一种演变,将激活函数能够保持在一个 noise-robust 的状态,提出具有负值的激活函数,可以使得平均激活接近于零。
它在x<0处激活值为负值,而且导数不为0这是一点很好的性质,不会产生像 Relu 所带来的在 (-)会有神经元死亡的问题,并且让这一部分呈现一种软饱和,这种软饱和有助于提升噪声鲁棒性。
2、什么样的情况适合使用传统的机器学习方法,不适合使用深度学习?(10 分)
数据集依赖性,传统的机器学习与机器学习最主要的区别在于随着数据规模的增加,其性能是否也会不断增加。当数据很少时,深度学习算法的性能并不好,因为深度学习的算法需要大量的数据来去让神经元完美的感知它。另一方面,传统的机器学习在数据规模小的情况下使用制定好的规则,性能会比较好。
所以当数据集较小时不适用于深度学习。
硬件依赖性,深度学习算法需要进行大量的矩阵运算,GPU 主要用来高效优化矩阵运算,与传统的机器学习算法相比,其硬件性能尤其是对 GPU 的依赖性更强。
所以当硬件性能不足时不太适用于深度学习(这里更强调训练时的性能,当训练好的模型来进行检验使用时往往不需要特别高的性能)
特征处理预训练的时间,将领域知识放入特征提取器里来减少数据复杂度并生成使学习算法工作的更好的模型,这种提前的预训练会比较耗时。
所以当需要的预训练时间有所限制时,不适用于深度学习。
特征提取,传统的机器学习的特征提取主要依赖于人工,对与特定的简单的任务这种人工提取往往会更简单和有效,缺点在于通用性较差。
较为简答任务,不适合于深度学习。
3、卷积神经网络包括哪些基本结构?基本作用分别是什么?(10 分)
输入层
输入层可以处理多维数据,常见的有一维二维输入,通常卷积神经网络的输入特征需要进行标准化处理,即对输入的数据进行归一化,如输入数据若为像素,可将分布于[0,255]的原始像素值归一化至[0,1]区间。
隐含层
- 卷积层,拥有卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量,类似于一个神经元。卷积核的大小通常称作“感受野”,其含义可类比视觉层细胞的感受野。一组平行的特征图,通过在输入图像上滑动不同的卷积核并执行一定的运算而组成。卷积核与输入图像之间会执行一个元素对应乘积并求和的运算以将感受野内的信息投影到特征图中的一个元素。
- 卷积层参数,即卷积核大小、步长和填充,大小即感受野,步长即为定义卷积核相邻两次扫过特征图时位置的距离。填充是特征图通过卷积核之前人为增大其尺寸以抵消计算中尺寸收缩影响的方法。
- 激活函数,激活函数通常用以来加入非线性因素,因为线性模型的表达力有所限制,加入了非线性激活函数后可以用来感知和模拟更复杂的任务模型。
- 池化层,进行特征的选择和信息的过滤,池化层主要功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。
- Inception 是对于多个卷积层和池化层进行堆叠所得的结构,增加了网络的深度。
- attention 注意力机制,加强局部特征与全局特征之间的联系,上下文的联系。将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。
- 全连接层,将提取的特征进行非线性组合以得到输出。
输出层
卷积神经网络的输出层上游通常是全连接层,输出层使用逻辑函数或者归一化指数函数(softmax)输出分类标签。
4、神经网络中的 Dropout 的作用,具体是如何实现的?(10 分)
提出的主要原因是机器学习中很容易出现过拟合的问题,而且还伴随着训练时间较长的问题。
- 训练一个神经网络,输入 x,输出 y,把 x 通过网络向前传播,然后把误差反向传播以决定如何更新参数让网络进行学习。
- 使用 dropout 之后以上过程变为,(临时)删除掉一半的隐藏神经元,输入输出神经元保持不变。然后把输入 x 通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播,一批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降更新对应的参数(w,b)
- 然后重复以上过程:
- 恢复被删除掉的神经元(此时上次被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
- 从隐藏层神经元中继续随机选择一个一半大小的子集临时删除掉(备份被删除的神经元的参数)
- 对一小批训练样本,先前向传播后反向传播并根据随机梯度下降法跟新参数(w,b),对于没有被删除的那一部分参数得以更新,删除的神经元参数继续保持前一状态(当下被删除前的结果)
- 伴随训练次数不断重复这一过程
5、残差网络为什么能够搭建很深的神经网络?(10 分)
相比于学习原始信号,残差网络学习的是信号的差值,简化了学习过程,增强了梯度传播。
一定程度上,网络越深表达能力越强,性能越好,但是会有梯度消失和梯度爆炸的问题发生,传统的通过 Batch Normalization, Relu激活函数等不能从根本上解决问题。即在依靠误差的链式反向传播法则,损失 loss 对 f 的求导过程中,多次连乘后梯度可能越来越小也可能越来越大,导致参数无法进行更新,而残差网络中由于包含了恒等项,所以依然能够有效的进行反向传播。
打破了网络的不对称性,如果网络中每个层只有少量的隐藏单元对不同的输入改变它们的激活值,而大部分隐藏单元对不同的输入都是相同的反应,此时整个权重矩阵的秩不高,并且随着网络层数的增加,连乘后使得整个秩变得更低,这就是网络的退化。
而权重是一个很高纬的矩阵,但是大部分纬度没有信息,使得网络的表达能力不强,这样的情况很大程度上来自于网络的对称性,而残差连接打破了网络的对称性。
增强了网络的泛化能力,残差网络可以看做是不同深度的浅层神经网络组合。
二、应用题(15 分) 注意力机制在图像理解中的作用是什么?结合自己的科研工作描述如何在自己的日常工作中使用注意力机制提升神经网络的性能。
注意力机制在图像理解中主要在于能够忽略无关信息而关注重点信息,增强局部的特征信息与全局特征信息之间的相关性依赖性。
在通过阅读论文和查阅资料学习中,在日常工作中使用注意力机制提升神经网络的性能主要有以下几个方面做工作:
空间域
如 Spatial Transformer Networks(STN)模型[4] ,简单的池化层过于暴力,因此添加了 Spatial attention 模块,又如Dual Attention Network for Scene Segmentation 中的 Spatial Attention,都有在图像的空间域中进行 attention 操作,可以在先通过ResNet对图片进行对图像的预处理,将Spatial Attention 机制加入到原有的网络结构中,将原图片中的关键信息提取出来,然后再通过输出层进行输出。
通道域
卷积神经网络中,每张图片初始时会由(R,G,B)三通道表示,之后通过不同的卷积核之后,每个通道会产生新的信号,如图片特征的每个通道使用64核卷积,就会产生64个新通道的矩阵 (H, W, 64) 。每个通道上的特征即该图片在不同卷积上的分量,在每个通道上增加权重来表示该通道与关键信息的相关度,权重越大则相关度越高,即我们最终需要关注的通道。如论文 Squeeze-and-excitation networks 中提出的 SENet 模型结构,SENet中注意力机制被分成三个部分:挤压(Sequeeze),激励(excitation),以及注意(attention)。
混合域
空间域注意力忽略了通道域中的信息,每个通道中的图片特征同等处理,而通道域是对一个通道内的信息直接全局平均化,而忽略通道内的局部信息,所以结合两种思路,可以设计出有混合注意力机制的模型。Residual attentionnetwork for image classification 中,注意力机制是软注意力基本的加掩码(mask)机制,这种注意力机制借鉴了 residual 残差网络的想法,不只根据当前网络层的信息加上 mask,还把上一层的信息传递下来,其中所提出的 mask 不只是对空间域或者通道域的单独注意,而是对每个特征元素的权重通过对每个特征元素都找到其对应的注意力权重,同时形成空间域和通道域的注意力机制。
应用这种混合的残差注意力学习,不仅只把 mask 之后的特征张量作为下一层的输入,同时也将 mask 之前的特征张量作为下一层的输入,得到的特征更加丰富,从而更好地注意关键特征。
时间注意力机制的应用
还可以通过使用时间注意力进行增强学习。
三、应用题(15 分)
在训练神经网络时,发现模型的 loss 不下降,可能存在哪些问题?如何解决?
可能存在的问题:
模型结构和特征工程存在问题
如模型结构不理想和规模太小,特征工程存在问题其对于数据拟合能力不足
权重初始化方案有问题
在神经网络训练之前,需要赋予一个初值,初值选择有问题则会出现 loss 的值不下降的问题。
正则化过度
dropout 等是为了防止过拟合,过拟合后应该根据训练情况进行调整,但如果调整有问题就需要考虑重新调试或者确定当前模型结构的正确性。
选择合适的激活函数、损失函数
一般 ReLu作为激活函数可以有效避免梯度消失,对于损失函数,对于分类任务通常使用交叉熵损失函数,回归任务使用均方差。
选择合适的优化器和学习率
神经网络优化器如 Adam,SGD等,学习率决定了网络的训练速度,这些都是当loss出问题时需要考虑的方向。
训练时间的不足
Batch Size 的大小问题
batch size 不合适会导致模型迟迟难以收敛
数据集未打乱
不打乱数据集会产生一定的偏差问题
数据集有问题
当数据集噪声过多,或者数据标注有大量错误时,也会出现模型训练出问题的情况
未进行归一化
验证集loss不下降
训练集loss也不下降,主要通过以上角度进行纠正
训练集loss可以下降
由于验证集数据也是从训练集上采取,此时数据集没问题,应多考虑过拟合问题
- 适当正则化和降纬
- 降低模型的规模
- 获取更多的数据集
- 对数据集进行扰动和扩增
测试机loss不下降
- 应用场景不一致
- 噪声问题
四、应用题(20 分) 你在日常科研工作中训练深度神经网络时遇到过哪些问题?是怎么解决的?
- 刚开始在 Google Clab 上进行训练数据时,上传数据集遇到易丢失的问题,后来通过先上传到 Google drive,再使用命令 from google.colab import drive ;drive.mount(‘/content/drive’) 进行挂载解决。
- Google Clab 一段时间不进行操作后就会自动给断开的问题,通过在浏览器控制台使用一小段 js 命令进行定时 trigger 以防止它无操作之后就断开。但是后来发现colab挂载时间应该是10小时左右,所以训练的时候要加上 checkpoint,防止训练模型时间过长白白浪费时间。
- 模型在训练过程中,有时候会出现中断需要重新连接的情况,后来发现了脚本「按键精灵」,如果离开电脑就F10启动脚本左键点击功能,可以防止长时间不连接导致需要重新训练。
- 在语义分割的训练时,一开始 batch 设置得太大了,发现设置更小的 batch 在较少的训练轮数 epoch 就能达到大的 batch_size 更多轮 epoch 相同的准确度。
- 最早在「猫狗大战」的训练任务中接触到「学习率」,选择较大的学习率会导致在损失函数上产生不好的后果,loss会震荡不稳定,但选择较小的学习率神经网络训练的耗时会增加,可以能使得神经网络困在一个局部最小值里。后来发现了可以使用一个小技巧 learning rate annealing 学习速率退火,先从一个比较高的学习速率开始,然后慢慢地在训练 epoch 中降低学习速率。