1 神经网络中 Dropout 的作用?具体是怎么实现的?
- 防止过拟合.
- Dropout 是指在深度学习模型训练过程中,以特定的概率随机让部分神经元处于失活状态,即不参与训练;对于 SGD 来说, 因为是随机失活, 所以每一个mini-batch都在训练不同的网络, 可以起到防止过拟合的作用。
2 请列举几种常见的激活函数。激活函数有什么作用?
- Sigmoid* ReLU* Tanh
- 作用:非线性变换激活函数的主要作用是使网络具有非线性拟合能力,如果没有激活函数,那么神经网络只能拟合线性映射, 即便是有再多的隐藏层,整个网络跟单层神经网络是等价的。因此,只有加入激活函数后,神经网络才具备了非线性的学习能力。
3 卷积神经网络 CNN 中池化层有什么作用?
保留主要的特征同时减少参数和计算量,防止过拟合, 提高模型泛化能力;
- 池化层主要作用是对输入的特征图进行缩小,同时保留主要的特征信息,减少参数和计算量。具体来说,池化层通过对输入特征图进行下采样(即缩小)操作,可以减小特征图的维度,降低计算量,同时可以保留主要的特征信息,提高模型的泛化能力,防止过拟合现象的出现。
- 另外,池化层还有一些其他的作用。例如,它可以帮助网络提取更加鲁棒的特征,使得网络对于不同的输入数据具有更好的适应性。此外,池化层还可以增强网络的平移不变性,使得网络可以对于输入数据的位置变化具有一定的容忍度,从而提高网络的泛化能力。
4 利用梯度下降法训练神经网络, 发现模型 loss 不变, 可能有哪些问题?怎么解决
很有可能是梯度消失了,它表示神经网络迭代更新时,有些权值不更新的现象。改变激活函数,改变权值的初始化等
原因:很有可能是梯度消失了
解决办法:改变激活函数,改变权值的初始化等。
5 相比 sigmoid 激活函数 ReLU 激活函数有什么优势?
-
- 防止梯度消失(sigmoid 的导数只有在 0 附近的时候有比较好的激活性,在正负饱和区的梯度都接近于 0)
- ReLU 的输出具有稀疏性
- ReLU 函数简单计算速度快理由如下:sigmoid 激活函数是指数运算,计算量大;反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu 激活函数,整个过程的计算量节省很多。
- 对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid 接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练。
- Relu 会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
6 如何确定 CNN 的卷积核通道数和卷积输出层的通道数?
CNN 的卷积核通道数 = 卷积输入层的通道数; CNN 的卷积输出层 通道数 = 卷积核的个数
7 Sigmoid、Tanh、ReLu 写出这三个激活函数的公式,以及对应的导数,并作出草图。并根据草图分析各有什么缺点或
不足,并描述有没改进的激活函数
(1)Sigmoid :
- 公式:
- 优点:
- 输出范围有限:Sigmoid函数的输出值在0和1之间,可以将输入映射到概率分布,适用于二分类问题。
- 平滑且可导:Sigmoid函数在整个输入范围内都是可导的,并且具有连续平滑的特性。
- 缺点:
- 会有梯度弥散
- 不是关于原点对称
- 计算exp比较耗时
- 改进:
- 使用其他激活函数替代:为了解决梯度消失和输出不零中心化的问题,可以考虑使用其他激活函数,如Tanh或ReLU。
- Tanh:
- 公式:
- 缺点:
- 会有梯度弥散
- 计算exp比较耗时
- 优点:
- 解决了原点对称问题
- 比sigmoid更快
- 平滑且可导:Tanh函数同样具有平滑和可导的特性。
- 改进:
- 使用其他激活函数替代:为了克服梯度消失问题,可以考虑使用其他具有更好梯度特性的激活函数,如ReLU。
- ReLU:
- 公式:
- 缺点:
- 梯度弥散没完全解决,在(-)部分相当于神经元死亡而且不会复活。
- 优点:
- 解决了部分弥散问题:ReLU函数的导数在正区间上为常数1,不会出现梯度消失的问题。
- 收敛速度更快:ReLU函数的非饱和性质可以加快网络的收敛速度。
- 激活速度快:ReLU函数在正区间上的导数为常数,计算简单且速度快。
- 改进:
- Leaky ReLU:Leaky ReLU引入一个小的负斜率,在负区间上也有非零的导数,解决了死亡ReLU问题。
- Parametric ReLU (PReLU):PReLU引入可学习的参数,通过学习不同的斜率来适应不同的输入。
- Exponential Linear Units (ELU):ELU在负区间上引入指数增长的特性,克服了ReLU的输出不是零中心化的问题。
答:
sigmoid 缺点:若激活值很大的时候或者很小,激活函数在其区域梯度很小使
得训练速度很慢。
Tanh 缺点:同上。
Tanh 优点:数据类似于集中于零左右。
ReLU 缺点:在零的时候不可导,若激活值小于零,梯度为零,使得训练速度
很慢,不过这种情况很少发生,有足够多的神经元使得其 z 值大于零。
改进:采用含虚弱的 ReLU 激活函数,即若小于零时,也让其有点梯度。比如
小于零时,激活函数为:0.01Z
8 如何解决 RNN 梯度爆炸问题
又是如何解决梯度消失问题的?
- 梯度爆炸
- 解决方案 : 就是当梯度大于一定阈值的的时候, 将它截断为一个较小的数,就是梯度剪裁
- 梯度消失
了解决梯度消失的问题,我们介绍了两种方法。
- 第一种方法是将随机初始化
改为一个有关联的矩阵初始化。
- 第二种方法是使用 ReLU 代替 sigmoid 函数。 ReLU 的导数不是 0 就是 1。因此,神经元的梯度将始终为 1,而不会当梯度传播了一定时间之后变小。
9 梯度下降法的神经网络容易收敛到局部最优,为什么应用广泛?
深度神经网络“容易收敛到局部最优”,很可能是一种想象, 实际情况 是,我们可能从来没有找到过“局部最优”,更别说全局最优了。
10 简单说说 CNN 常用的几个模型
- LeNet-5
- LeNet-5是第一个成功应用于实际图像识别任务的卷积神经网络模型,奠定了卷积神经网络的基础。
- AlexNet
- 引入了Relu和dropout,引入数据增强、池化相互之间有覆盖,三个卷积一个最大池化+三个全连接层。
- VGGNet
- 采用了1*1和3*3的卷积核以及2*2的最大池化使得层数变得更深。常用VGGNet-16和VGGNet-19。
- Google Inception Net
这个在控制了计算量和参数量的同时,获得了比较好的分类性能,和上面相比有几个大的改进:
- 去除了最后的全连接层,而是用一个全局的平均池化来取代它;
- 引入Inception Module,这是一个4个分支结合的结构。所有的分支都用到了1*1的卷积,这是因为1*1性价比很高,可以用很少的参数达到非线性和特征变换。
- Inception V2第二版将所有的5*5变成2个3*3,而且提出来著名的BatchNormalization 。
- Inception V3第三版就更变态了,把较大的二维卷积拆成了两个较小的1维卷积,加速运算、减少过拟合,同时还更改了Inception Module的结构。
- 微软ResNet(残差网络)
- 引入高速公路结构,可以让神经网络变得非常深
- ResNet第二个版本将ReLU激活图数变成y=x的线性函数
11 什么是 RNN,设计示意图,并给出相应的前向传播公式?
- 示意图
上图将循环神经网络进行展开成一个全神经网络。例如,对一个包含5 个单词的语句,那么展开的网络便是一个五层的神经网络, 每一层代表一个单词。对于该网络的计算过程如下:
- 1. xt 表示第 t,t=1,2,3...步(step)的输入。比如, x1 为第二个词的one-hot向量(根据上图, x0 为第一个词);
- 2. st 为隐藏层的第 t 步的状态,它是网络的记忆单元。 st 根据当前输入层的输出与上一步隐藏层的状态进行计算。 st=f(Uxt+Wst−1),其中f 一般是非线性的激活函数,如 tanh 或 ReLU,在计算s0 时,即第一个单词的隐藏层状态,需要用到s−1,但是其并不存在,在实现中一般置为0 向量;
- ot 是第t 步的输出,如下个单词的向量表示,ot=softmax(Vst).
12 设计示意图解释 LSTM 网络,并根据示意图给出必要的公式!
cell 的权重是共享的,cell 最上面的一条线的状态即 c(t) 代表了长时记忆,而下面的 h(t)则代表了工作记忆或短时记忆
暂时这么多。
LSTM功能主要由三扇门实现;
- 遗忘门:决定了上一时刻的单元状态ct-1有多少保留到
当前时刻ct;
在LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为“忘记门”的 结构完成。该忘记门会读取上一个输出 和当前输入 ,做一个Sigmoid 的非线性映射,然后输出一个向量 (该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。
- 输入门:
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分:
第一,sigmoid层称“输入门层”决定什么值我们将要更新;
第二,一个tanh层创建一个新的候选值向量,会被加入到状态中。
- 更新细胞状态
现在是更新旧细胞状态的时间了,更新为
。
把旧状态与相乘,丢弃掉我们确定需要丢弃的信息,接着加上。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
- 输出门
首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。
接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方,类似更新细胞状态。
13 简单 RNN 和 LSTM 神经网络输入输出究竟是怎样的?
对于RNN,每个时间步的输入是当前时刻的输入数据和上一时刻的隐藏状态,输出是当前时刻的隐藏状态。在序列任务中,通常是将最后一个时间步的隐藏状态作为模型的输出结果。
对于LSTM,每个时间步的输入包括当前时刻的输入数据和上一时刻的隐藏状态,还有一个记忆状态(memory cell)。LSTM通过门机制来控制信息的流动,包括遗忘门、输入门和输出门,它们决定了哪些信息需要被遗忘、哪些信息需要被加入记忆状态和哪些信息需要被输出。与RNN类似,LSTM的输出通常是最后一个时间步的隐藏状态。
RNN和LSTM的输入是序列数据,每个时间步上的输入是当前时间步的输入数据和隐藏状态。RNN的输出是隐藏状态序列,而LSTM的输出除了隐藏状态序列还包括记忆单元的输出。
参考 PPT
14 请详细介绍一下 RNN 模型的几种经典结构
- N vs N
每一步使用的参数U、W、b、V、c都是一样的,也就是说每个步骤的参数都是共享的。
- 输入是x1, x2, .....xn,输出为y1, y2, ...yn,也就是说,输入和输出序列必须要是等长的。
- 一个箭头就表示对该向量做一次变换。
圆圈或方块表示的是向量。
- 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
语音处理。此时,x1、x2、x3……是每帧的声音信号。
时间序列问题。例如每天的股票价格等等
- N vs 1
每一步使用的参数U、W、b、V、c都是一样的,也就是说每个步骤的参数都是共享的。
- 要处理的问题输入是一个序列,输出是一个单独的值而不是序列,只在最后一个h上进行输出变换就可以了。
- 如输入一段文字判别它所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。
- 1 vs N
每一步使用的参数U、W、b、V、c都是一样的,也就是说每个步骤的参数都是共享的。
- 只在序列开始进行输入计算
- 从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子
- 从类别生成语音或音乐等
- N vs M(又叫Encoder-Decoder模型)
Encoder-Decoder结构先将输入数据编码成一个上下文向量c
拿到c之后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。具体做法就是将c当做之前的初始状态h0输入到Decoder中:
还有一种做法是将c当做每一步的输入:
- 机器翻译中,源语言和目标语言的句子往往并没有相同的长度。
- 文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。
- 阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
- 语音识别。输入是语音信号序列,输出是文字序列。
参考 https://zhuanlan.zhihu.com/p/28054589
15 在神经网络中,有哪些办法防止过拟合?
1. Dropout:在训练过程中,随机使一部分神经元失活,减少神经元之间的依赖关系,从而防止过拟合。
2. 加 L1/L2 正则化:通过增加权重的惩罚项,限制网络的复杂度,避免过拟合。
3. BatchNormalization:在每个 mini-batch 中对数据进行标准化,减少内部协变量位移,使得网络更加稳定,避免过拟合。
4. 网络 bagging :通过训练多个独立的神经网络,每个网络的训练集和参数都不同,最终将这些网络的结果进行集成,提高模型的泛化能力,避免过拟合。
5. 提前终止训练:在验证集上监测模型的表现,一旦发现模型开始过拟合,就提前终止训练,避免继续训练导致过拟合。
6. 数据增强:通过对训练数据进行一定的变换,如旋转、翻转、裁剪等操作,增加训练数据的多样性,减少过拟合的可能性。
16 CNN 是什么, CNN 关键的层有哪些?
- CNN 是卷积神经网络,
- 其关键层有:
① 输入层,对数据去均值,做 data augmentation 等工作
② 卷积层,局部关联抽取 feature
③ 激励层,非线性变化(也就是常说的激活函数)
④ 池化层,下采样
⑤ 全连接层,增加模型非线性
⑥ BN 层,缓解梯度弥散
17 神经网络中会经常会用到梯度下降算法,会用到批量梯度下降算 法 (BGD)吗? 为什么用随机梯度下降(SGD) ?
解析:
1) 一般不用 BGD
2) a. BGD 每次需要用到全量数据,计算量太大
b. 引入随机因素,即便陷入局部极小,梯度也可能不为0,这样就有 机会跳出局部极小继续搜索(可以作为跳出局部极小的一种方式,但 也可能跳出全局最小。还有解决局部极小的方式:多组参数初始化、 使用模拟退火技术)
18 自己构造符合函数并写出写出链式法则
假设我们有两个函数 f(x) 和 g(x),我们可以构造一个符合函数 h(x) = f(g(x))。接下来,我们将使用链式法则计算 h(x) 的导数。
链式法则表达式为:(f(g(x)))' = f'(g(x)) * g'(x)
现在,我们来计算 h(x) 的导数:
假设 f(x) = x^2,g(x) = sin(x)。
首先,计算 f'(x): f'(x) = d/dx (x^2) = 2x
然后,计算 g'(x): g'(x) = d/dx (sin(x)) = cos(x)
根据链式法则,我们有: h'(x) = f'(g(x)) * g'(x)
将 f'(x) 和 g'(x) 的值代入上述表达式,得到: h'(x) = 2g(x) * cos(x)
因此,h(x) 的导数为 2g(x) * cos(x)。
19 神经网络输出层为什么通常使用 softmax?
参考 PPT 分类问题
这是因为softmax函数可以将模型的原始输出转化为概率分布,使得每个类别的输出值介于0和1之间,并且所有类别的输出概率之和为1。
以下是一些使用softmax函数的主要原因:
- 概率解释:softmax函数将神经网络的输出转化为概率分布,使得输出可以被解释为属于每个类别的概率。这对于多类别分类问题非常有用,因为我们可以直观地理解模型对每个类别的置信度或预测概率。
- 多类别分类:softmax函数适用于多类别分类问题,其中每个样本可以被分为多个不同的类别。通过softmax函数,我们可以得到每个类别的概率分布,从而确定最有可能的类别。
- 梯度性质:softmax函数在反向传播算法中具有良好的梯度性质。它可以帮助优化器根据损失函数的梯度信息更新网络参数,以最小化损失函数。softmax函数的导数形式简单,并且可以与其他常见的损失函数(如交叉熵损失)进行组合使用。
- 单调性:Softmax 函数是单调递增的,意味着输入值的增加会导致输出概率的增加。这使得网络更容易对输出概率进行解释和比较。
总而言之,softmax函数在神经网络中被广泛应用于多类别分类问题,它将网络的原始输出转化为概率分布,方便解释和处理,并且具有良好的梯度性质。
20 如何理解反向传播算法 BackPropagation,包括前馈神经网络和 RNN ,LSTM。会利用矩阵算法推导和伪代码设计!
- 前馈神经网络
- 反向传播
- 两个假设
为了计算∂C/∂w需要对cost function的形式做两个假设:
- cost function可以被写为
,这样做是因为backpropagation实际上是计算每个样本的偏导数,然后再把合起来构成原来的C,,如果不能写成和的形式则使用backpropagation也没什么用。
- C可以被写为
的函数,即,要注意在优化过程中输入的x,y都是固定的数,变量是w。
定义:
- 四个基本式子
主要包含四个基本式子
- 输出层
的error的等式(BP1)
向量形式:
- 根据下一层的
计算上一层的
(BP2)
根据(BP1)和(BP2)可以计算所有层的δ,即所有的C关于z的偏导数,接下来我们只需要找出,和z之间的关系,然后继续使用链式求导即可。
- 每层中的偏置对C的影响:(BP3)
- 每层中的权重对C的影响: