文章目录
-
-
- 1.画出在二元输入的情况下,表示异或逻辑的网络图
- 2.写出Sigmoid,tanh,relu的激活函数及对应导数
- 3.为什么Sigmoid和tanh函数会导致梯度消失?
- 4.ReLU系列的激活函数相对于Sigmoid和Tanh函数的优点是什么,有什么局限性?如何改进?
- 5. 为什么引入非线性激励函数?
- 6.如何选择合适的激活函数?
- 6.多层感知机的前向传播与后向传播过程
- 7.平方误差损失函数和交叉熵损失函数分别适合什么场景?
- 8.神经网络参数是否可以初始化为同一个值,为什么?
- 9.请介绍Dropout,并分析dropout抑制过拟合的工作原理
- 10.为什么需要进行批量归一化?
- 11.批量归一化在卷积神经网络中是如何使用的?
- 12.CNN中的权值共享是什么?为什么CNN要用权值共享?
- 13.CNN中的局部连接是什么?为什么CNN要用局部连接?
- 14.CNN中卷积层中的操作有哪些?
- 15.CNN中池化层中的操作有哪些?
- 16.卷积神经网络如何用于文本分类任务?
- 17.CNN出现梯度消失怎么办?
- 18.增加神经网络层数有什么用?
- 19.ResNet的提出背景是什么?其核心理论是什么?
-
1.画出在二元输入的情况下,表示异或逻辑的网络图
其中, Z 1 Z_1 Z1和 Z 2 Z_2 Z2是两个隐藏单元
在隐藏单元 Z 1 Z_1 Z1中, X X X和 Y Y Y的输入权重均为1,偏置为-1, H 1 = X + Y − 1 H_1=X+Y-1 H1=X+Y−1, Z 1 = m a x ( 0 , H 1 ) Z_1=max(0,H_1) Z1=max(0,H1)
在隐藏单元 Z 2 Z_2 Z2中, X X X和 Y Y Y的输入权重均为-1,偏置为1, H 2 = − X − Y + 1 H_2=-X-Y+1 H2=−X−Y+1, Z 2 = m a x ( 0 , H 2 ) Z_2=max(0,H_2) Z2=max(0,H2)
Z = − Z 1 − Z 2 + 1 = X x o r Y Z=-Z_1-Z_2+1=X xor Y Z=−Z1−Z2+1=XxorY
2.写出Sigmoid,tanh,relu的激活函数及对应导数
3.为什么Sigmoid和tanh函数会导致梯度消失?
由图像我们可知,当 z z z取很大或者很小时, f ′ ( z ) f'(z) f′(z)都趋近于0,出现梯度消失的现象。
S i g m o i d 和 t a n h Sigmoid和tanh Sigmoid和tanh函数都是饱和函数
右饱和:
当x趋向于正无穷时,函数的导数趋近于0,此时称为右饱和。
左饱和:
当x趋向于负无穷时,函数的导数趋近于0,此时称为左饱和。
饱和函数和非饱和函数:
当一个函数既满足右饱和,又满足左饱和,则称为饱和函数,否则称为非饱和函数。
S i g m o i d 和 t a n h Sigmoid和tanh Sigmoid和tanh函数比较:
对于隐藏层的激活函数来说,tanh函数要比sigmoid函数表现更好一些,因为tanh函数的取值范围在[-1,1]之间,隐藏层的输出被限定在[-1,1]之间,可以看成是在0值附近分布,均值为0。这样从隐藏层到输出层,数据起到了归一化的效果。
4.ReLU系列的激活函数相对于Sigmoid和Tanh函数的优点是什么,有什么局限性?如何改进?
优点:
- 从计算角度来说, S i g m o i d 和 t a n h Sigmoid和tanh Sigmoid和tanh激活函数均需要计算指数,复杂度高,而 R e L U ReLU ReLU激活函数只需要一个阈值即可得到激活值
- R e L U ReLU ReLU激活函数的非饱和性可以有效的解决梯度消失的问题,提供相对较宽的激活边界
- R e L U ReLU ReLU的单侧抑制提供了网络的稀疏表达能力
稀疏表达约束深度网络大部分神经元节点处于抑制状态,即输出值为0;只有少数神经元处于活跃状态,输出值非0。稀疏表示的目的就是希望通过少量的神经元来辨识出输入模式内部的驱动要素,在提取出驱动要素的过程中降低网络的计算复杂度。
局限性:
R e L U ReLU ReLU激活函数的局限性在于其训练过程中会导致神经元死亡的问题。在实际训练中,如果学习率( Learning Rate ))设置较大,使得某个神经元的ReLu 输入为负数,由于函数 f ( z ) = m a x ( 0 , z ) f(z) = max(0,z) f(z)=max(0,z)导致负梯度在经过该ReLU单元时被置为0,且在之后也不被任何数据激活,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。
如何改进:
为了解决这个问题,设计了 R e L U ReLU ReLU的变种 L e a k y R e L U Leaky ReLU LeakyReLU,其形式表达为:
两者的区别在于:当 z < 0 z<0 z<0时其值不为0,而是一个斜率为 a a a的线性函数,一般 a a a为一个很小的正常数,这样既实现了单侧抑制,又保留了部分负梯度信息以致不完全丢失。但另一方面, a a a值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。基于此,人们又设计出参数化的 P R e L U PReLU PReLU,它与 L R e L U LReLU LReLU的主要区别是将负轴部分斜率 a a a作为网络中一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。
5. 为什么引入非线性激励函数?
因为如果不用非线性激励函数,每一层都是上一层的线性函数,无论神经网络多少层,输出都是输入的线性组合,所以引入非线性激励函数,深层网络就变得有意义了,可以逼近任意函数。
6.如何选择合适的激活函数?
如果是分类问题,输出层的激活函数一般会选择Sigmoid函数或者Softmax激活函数,因为二分类问题的输出取值为{0,1},隐藏层点的激活函数,tanh函数会比sigmoid函数表现好一点,实际工程中,通常会使用 R e L U ReLU ReLU和 L e a k y R e L U Leaky ReLU LeakyReLU函数,保证梯度下降速度不会太小。
Softmax函数的主要作用是将输出类别转换为每一种类型的“概率”。输出特征所属的类别即为概率值最大所对应的分类。
softmax函数在实现时需要注意指数计算的溢出问题,可以通过输入信号减去输入层的最大值后进行计算,防止溢出
如果是回归问题,输出层的激活函数一般会选择恒等函数,函数会将输入按照原样输出,对于输入信息不做任何改动,隐藏层的激活函数选择与分类问题一样。
6.多层感知机的前向传播与后向传播过程
在网络训练过程中,输入信号通过隐藏层产生输出的过程为前向传播,前向传播最终产生一个标量损失函数。反向传播算法则是将损失函数的信息沿网络层向后传播用以计算梯度,达到优化网络参数的目的。以二层隐藏层的神经网络为例:
前向传播:
Z 1 = W 1 X + b 1 Z_1=W_1X+b_1 Z1=W1X+b1
H 1 = r e l u ( Z 1 ) H_1=relu(Z_1) H1=relu(Z1)
其中, W 1 W_1 W1是从输入层到隐藏层的参数, b 1 b_1 b1是其 b i a s bias bias项,这里,我们展示一下维度的变换,
假设第一层隐藏层hidden_size=20
, W 1 W_1 W1的维度是(20,2), b 1 b_1 b1的维度是(20,1)
第二层隐藏层hidden_size=5
,由于 Z 1 Z_1 Z1的维度为(20,1),则 W 2 W_2 W2的维度为(5,20), b 2 b_2 b2的维度为(5,1), Z 2 Z_2 Z2的维度为(5,1)
Z 2 = W 2 H 1 + b 2 Z_2=W_2H_1+b_2 Z2=W2H1+b2
H 2 = r e l u ( Z 2 ) H_2=relu(Z_2) H2=relu(Z2)
最后一层输出层为:
Z 3 = W 3 H 2 + b 3 Z_3=W_3H_2+b_3 Z3=W3H2+b3
y ^ = s i g m o i d ( Z 3 ) \hat{y}=sigmoid(Z_3) y^=sigmoid(Z3)
最后得到的 y ^ \hat{y} y^是一个标量值。
6.1 多层感知机反向传播算法推导
这里首先介绍两个损失函数:平方误差损失函数与交叉熵损失函数
交叉熵损失函数:
对于单个样本来说,交叉熵损失函数如下:
对于 m m m个样本来说,在二分类情景下,交叉熵损失函数如下:
损失函数的最后加了一个L2正则项,进行一个权重的衰减,防止过拟合,该项之前的 λ \lambda λ为权重衰减系数,用于控制损失函数中两项的相对权重。
平方差损失函数:
对于 m m m个样本来说,平方差损失函数如下:
J ( W , b ) = 1 2 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 + λ 2 ∣ ∣ w ∣ ∣ 2 J(W,b)=\frac{1}{2m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2+\frac{\lambda}2||w||^2 J(W,b)=2m1∑i=1m(y(i)−y^(i))2+2λ∣∣w∣∣2
然后,讨论一下,为什么要反向传播进行求导,那能不能进行前向传播的求导,然后对梯度进行更新呢?答案是可以的,但是这会造成大量的重复的求导运算,会导致训练非常慢,而反向传播求导就没有这个问题。
接下来,以这个网络为例,进行反向传播公式的推导:
损失函数为:
前向传播过程为:
Z 1 = W 1 X + b 1 Z_1=W_1X+b_1 Z1=W1X+b1
H 1 = r e l u ( Z 1 ) H_1=relu(Z_1) H1=relu(Z1)
Z 2 = W 2 H 1 + b 2 Z_2=W_2H_1+b_2 Z2=W2H1+b2
H 2 = r e l u ( Z 2 ) H_2=relu(Z_2) H2=relu(Z2)
Z 3 = W 3 H 2 + b 3 Z_3=W_3H_2+b_3 Z3=W3H2+b3
y ^ = s i g m o i d ( Z 3 ) \hat{y}=sigmoid(Z_3) y^=sigmoid(Z3)
反向传播的核心思想就是:运用链式求导法则,在对 w , b w,b w,b进行求导之前,需要先对 z z z进行求导。下面有的式子为了直观没有写出对矩阵求导的转置。
7.平方误差损失函数和交叉熵损失函数分别适合什么场景?
一般来说,平方误差损失函数更适合输出为连续(回归问题),并且最后一层不含Sigmoid或 Softmax激活函数的神经网络;交叉嫡损失则更适合二分类或多分类的场景。那为什么平方误差损失函数不适合最后一层不含Sigmoid或 Softmax激活函数的神经网络呢?
平方误差损失函数相对于输出层的导数为:
8.神经网络参数是否可以初始化为同一个值,为什么?
不可以。以全连接的深度神经网络为例,同一层中的任意神经元都是同构的,它们拥有相同的输入和输出,如果再将参数全部初始化为同样的值,那么无论前向传播还是反向传播的取值都是完全相同的。学习过程将永远无法打破这种对称性,最终同一网络层中的各个参数仍然是相同的。因此,我们需要随机地初始化神经网络参数的值,以打破这种对称性。我们可以初始化参数为取值范围 ( − 1 d , 1 d ) (-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}}) (−d1,d1),的均匀分布,其中 d d d是一个神经元接受的输入维度。偏置可以被简单地设为0,并不会导致参数对称的问题。
# weight参数初始化
weight = {
}
layer_dims = [2,20,5,1]
for d in range(1,len(layer_dims)):
weight['W'+str(d)] = np.random.randn(layer_dims[d],layer_dims[d-1]) / np.sqrt(layer_dims[d-1])
9.请介绍Dropout,并分析dropout抑制过拟合的工作原理
9.1 什么是Dropout?
Dropout是指在深度网络的训练中,以一定的概率 p p p随机地“临时丢弃”一部分神经元节点(即以一定概率使部分神经元节点随机失活)。具体来讲,Dropout作用于每份小批量训练数据,由于其随机丢弃部分神经元的机制,相当于每次迭代都在训练不同结构的神经网络。Dropout在小批量级别上的操作,提供了一种轻量级的 Bagging 集成近似,能够实现指数级数量神经网络的训练与评测。
Dropout可被认为是一种实用的大规模深度神经网络的模型集成算法。这是由于传统意义上的Bagging涉及多个模型的同时训练与测试评估,当网络与参数规模庞大时,这种集成方式需要消耗大量的运算时间与空间。
9.2 dropout抑制过拟合的工作原理
Dropout的具体实现中,要求某个神经元节点激活值以一定的概率p被“丢弃”,即该神经元暂时停止工作。
因此,对于包含 N N N个神经元节点的网络,在 Dropout的作用下可看作为 2 N 2^N 2N个模型的集成。这 2 N 2^N 2N个模型可认为是原始网络的子网络,它们共享部分权值,并且具有相同的网络层数,而模型整体的参数数目不变,这就大大简化了运算。对于任意神经元,每次训练中都与一组随机挑选的不同的神经元集合共同进行优化,这个过程会减弱全体神经元之间的联合适应性,减少过拟合的风险,增强泛化能力。
9.3 dropout内部是怎么实现只让部分信号通过并不更新其余部分
标准网络与Dropout网络对比如下:
原始网络对应的前向传播公式为:
Dropout网络对应的前向传播公式为:
上面的 Bernoulli 函数的作用是以概率系数p随机生成一个取值为0或1的向量,代表每个神经元是否需要被丢弃。如果取值为0,则该神经元将不会计算梯度或参与后面的误差传播。
10.为什么需要进行批量归一化?
神经网络训练过程的本质是学习数据分布,如果训练数据与测试数据的分布不同将大大降低网络的泛化能力,因此我们需要在训练开始前对所有输入数据进行归一化处理。然而随着网络训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批训练数据的分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大训练的复杂度以及过拟合的风险。批量归一化可以看做是在每一层输入和上一层输出之间加入一个计算层,这个计算层的作用就是归一化处理,将所有批数据强制在统一的数据分布下,从而增强模型的泛化能力。
批量归一化,虽然增强了模型的泛化能力,但同时降低了模型的拟合能力。因此,在批量归一化的具体实现中引入了变量重构以及可学习参数 γ \gamma γ和 β \beta β, γ \gamma γ和 β \beta β变成了该层的学习参数,仅用两个参数就可以恢复最优的输入数据分布。
完整的批量归一化网络层前向传播公式:
11.批量归一化在卷积神经网络中是如何使用的?
批量归一化在卷积神经网络中应用时,需要注意卷积神经网络的权值共享机制。每一个卷积核的参数在不同位置的神经元当中是共享的,因此也应该被一起归一化。具体实现中,假设网络训练中每一批包含b个样本,由一个卷积核生成的特征图的宽高分别为w和h,则每个特征图所对应的全部神经元个数为b×w×h
;利用这些神经元对应的所有输入数据,我们根据一组待学习的参数 γ \gamma γ和 β \beta β对每个输入数据进行批量归一化操作。如果有f个卷积核,就对应f个特征图和f组不同的 γ \gamma γ和 β \beta β参数。
为什么卷积层会有多个卷积核呢?因为权值共享意味着每一个卷积核只能提取到一种特征,为了增加CNN的表达能力,需要设置多个卷积核。但是,每个卷积层中卷积核的个数是一个超参数。
12.CNN中的权值共享是什么?为什么CNN要用权值共享?
12.1 CNN中的权值共享是什么?
在卷积神经网络中,卷积核中的每一个元素将作用于每一次局部输入的特定位置上。根据参数共享的思想,我们只需要学习一组参数集合,而不需要针对每个位置的每个参数都进行优化,从而大大降低了模型的存储需求。
12.2 为什么CNN要用权值共享?
减少参数数量,使运算变得简洁、高效,能够在超大规模数据集上运算。
13.CNN中的局部连接是什么?为什么CNN要用局部连接?
13.1 CNN中的局部连接是什么?
所谓局部连接,就是卷积层的节点仅仅和其前一层的部分节点相连接,只用来学习局部特征。在图像中,距离较近的像素间相关性强,距离较远则相关性就比较弱,图像的特征是局部强相关。因此,局部感知采用部分神经元接受图像信息,再通过综合全部的图像信息达到增强图像信息的目的。假设网络中相邻两层分别具有 m m m个输入和 n n n个输出,那么全连接网络中的权值参数矩阵将包括 m × n m×n m×n个参数。如果采用局部连接,比如限定每一个输出与前一层神经元的连接数为 k k k,那么该层的参数总量为 k × n k×n k×n。若 k k k远小于 n n n,则参数量将小几个数量级,过拟合情况得到改善。
13.2 为什么CNN要用局部连接?
局部连接的方式大幅减少了参数数量,加快了学习速率,同时也在一定程度上减少了过拟合的可能。
14.CNN中卷积层中的操作有哪些?
卷积的过程就是提取特征的过程,随着卷积神经网络深度的增加,能提取到越来越高级的特征,也更接近事物的本质。一般来说,高级特征能够用在不同类别事物的分类中,而低级特征能够用于同类事物的分类。
在卷积层中,通常包含多个可学习的卷积核,上一层输出的特征图与卷积核进行卷积操作,即输入项与卷积核之间进行点积运算,然后将结果送入激活函数,就可以得到输出特征图。每一个输出特征图可能是组合卷积多个输入特征图的值。
卷积层l的第j单元的输出值 alj的计算公式为:
其中 a j l a_{j}^{l} ajl表示选择的输入特征图的集合,k表示可学习的卷积核。下图展示了卷积过程。
通常把卷积核k看作一个滑动窗口,这个滑动窗口以设定的步长向前滑动。这里输入图像的大小是5×5即M=5,卷积核大小为3×3即k=3,步长为1即s=1,根据卷积层输出计算公式
可以计算输出图像的大小N=3。
该卷积过程:5×5输入图像与3×3卷积核进行卷积,得到3×3的输出图像。
这样的卷积存在两个缺点:
- 每次卷积都会导致图像尺寸的变小,如果图像很小、进行卷积的次数很多,最后可能只会剩下一个像素
- 输入图像的矩阵边缘像素只被计算过一次,而中间像素被卷积计算多次,这就意味着丢失图像边缘信息。为了解决这两个问题,就需要对输入图像进行填充(Padding)
14.1 Padding
输入图像矩阵周围填充一层像素,通常填充的元素为0,填充的像素数为1即P=1。边缘像素在被填充后,不再是边缘像素,可以被计算多次。输出图像中边缘像素是受输入图像边缘像素的影响,削弱了边缘信息丢失的缺点。另外,根据卷积层计算公式计算得输出卷积特征图变为5×5,与图像尺寸大小相同,解决了卷积会使图像变小的缺点。
常见的填充方式有Valid和Same填充
- Valid填充
不使用填充,即使用M×M的图像与k×k的卷积核相卷积,若步长为1,此时,输出为(M-k+1) - Same填充
通过填充使得输出的卷积特征图尺寸与输入图像尺寸相等,此时填充宽度P=(k-1)/2,但卷积核为奇数
在计算机视觉领域,k通常是奇数,一方面可以保证使用 Same 填充时填充像素数P是整数,对原图片的填充是对称的;另一方面奇数宽度的卷积核具有一个中心像素点,可以表示卷积核的位置。
14.2 Stride
stride是指卷积核在输入上移动时每次移动的距离,直接上图来说明。其中按红框来移动的话stride = 1;按蓝色框来移动的话stride = 2。加入stride后,假设输入大小为M×M,卷积核大小为k×k,stride=s,padding=p,卷积层输出计算公式为
可以通过stride来完成降维操作。
14.3 多通道计算
卷积核除了长宽这两个参数之外还有通道数这个参数,首先需要明确的是单个卷积核的通道数要等于图像的通道数,一般图像是RGB模式的话,卷积核的大小为h×w×3。只有一个卷积核的时候,图像经过卷积计算后的结果通道数是一维的,计算方法也简单粗暴。每个通道的对应位置相乘然后,不同通道数之间相加。
15.CNN中池化层中的操作有哪些?
常用的池化操作主要针对非重叠区域,包括均值池化( meanpooling )、最大池化( max pooling )等。其中均值池化通过对邻域内特征数值求平均来实现,能够抑制由于邻域大小受限造成估计值方差增大的现象,特点是对背景的保留效果更好。最大池化则通过取邻域内特征的最大值来实现,能够抑制网络参数误差造成估计均值偏移的现象,特点是更好地提取纹理信息。随机池化虽然可以保留均值池化的信息,但是随机概率值确是人为添加的,随机概率的设置对结果影响较大,不可估计。
均值池化是对所有特征点求平均值,而最大值池化是对特征点的求最大值。而随机池化则介于两者之间,通过对像素点按数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与均值采样近似,在局部意义上,则服从最大值采样的准则。
15.1池化的作用是什么?
池化操作除了能显著降低参数量外,还能够保持对平移、伸缩、旋转操作的不变性。池化层利用图像局部相关的原理,对图像进行下采样,在减小数据量的同时也保留了有用的信息。
16.卷积神经网络如何用于文本分类任务?
卷积神经网络的特殊性体现在局部连接与权值共享,可以捕捉局部特征。对于文本来说,局部特征就是由若干单词组成的滑动窗口,类似于N-gram。卷积神经网络的优势在于能够自动地对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。由于在每次卷积中采用了共享权重的机制,因此它的训练速度相对较快,在实际的文本分类任务中取得了非常不错的效果。下面举例介绍卷积神经网络进行文本分类任务
- 输入层是一个
N×K
的矩阵,其中N为文章所对应的单词总数,K是每个词对应的表示向量的维度。每个词的K维向量可以是预先在其他语料库中训练好的,也可以作为未知的参数由网络训练得到。这两种方法各有优势,一方面,预先训练的词嵌入可以利用其他语料库得到更多的先验知识;另一方面,由当前网络训练的词向量能够更好地抓住与当前任务相关联的特征。因此,图中的输入层实际采用了两个通道的形式,即有两个N×K
的输入矩阵,其中一个用预先训练好的词嵌入表达,并且在训练过程中不再发生变化;另外一个也由同样的方式初始化,但是会作为参数,随着网络的训练过程发生改变。 - 第二层为卷积层。在输入的
N×K
维矩阵上,我们定义不同大小的滑动窗口进行卷积操作,若滑动窗口为3×K
,则每次在2×K
的滑动窗口上进行卷积,并得到N-2
个结果,再将这N-2
个结果拼接起来得到N-2
维的特征向量。每一次卷积操作相当于一次特征向量的提取,通过定义不同的滑动窗口,就可以提取出不同的特征向量,构成卷基层的输出。 - 第三层为池化层,比如图中所示的网络采用了1-Max池化,即为从每个滑动窗口产生的特征向量中筛选出一个最大的特征,然后将这些特征拼接起来构成向量表示。也可以选用K-Max池化(选出每个特征向量中最大的K个特征),或者平均池化(将特征向量中的每一维取平均)等,达到的效果都是将不同长度的句子通过池化得到一个定长的向量表示。
- 得到文本的向量表示之后,后面的网络结构就和具体的任务相关了。本例中展示的是一个文本分类的场景,因此最后接入了一个全连接层,并使用Softmax激活函数输出每个类别的概率。
17.CNN出现梯度消失怎么办?
过多的层数会导致梯度消失,解决手段有减少层数;增大学习率;用Relu代替sigmoid
18.增加神经网络层数有什么用?
深度神经网络的层数决定模型的质量,已经证明,增加神经网络层数,可以增加模型泛化能力,即训练数据集和测试数据集都表现得更好。但是更多的层数,不一定能保证有更好的表现。随着神经网络层数的加深,越来越陷入局部最优解。同时,随着网络层数的增加,梯度消失问题也越来越严重,这是因为梯度在反向传播时会逐渐衰减。影响模型的泛化效果。梯度消失问题意味着无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用。
梯度消失与梯度膨胀,以及6种解决措施
当梯度由L层传播到第一个隐藏层时,会涉及非常多参数和导数的连乘,这时误差就很容易消失或膨胀,这就造成梯度的消失或膨胀,影响该层参数的学习,造成模型的拟合和泛化能力差。
1.梯度消失
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0。
这种情况会导致靠近输入层的隐含层神经元调整极小。
2.梯度膨胀
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大。
这种情况又会导致靠近输入层的隐含层神经元调整变动极大。
19.ResNet的提出背景是什么?其核心理论是什么?
19.1 ResNet的提出背景是什么?
ResNet的提出背景是解决或缓解深层的神经网络训练中的梯度消失问题。
19.2 Resnet的核心理论是什么?
既然浅层神经网络不容易出现这些梯度现象,那么可以尝试给深层神经网络添加一种回退到浅层神经网络的机制。当深层神经网络可以轻松地回退到浅层神经网络时,深层神经网络可以获得与浅层神经网络相当的模型性能,而不至于更糟糕。通过在输入和输出之间添加一条直接连接的Skip Connection
可以让神经网络具有回退的能力。
以VGG13 深度神经网络为例,假设观察到VGG13 模型出现梯度弥散现象,而10 层的网络模型并没有观测到梯度弥散现象,那么可以考虑在最后的两个卷积层添加SkipConnection,通过这种方式,网络模型可以自动选择是否经由这两个卷积层完成特征变换,还是直接跳过这两个卷积层而选择Skip Connection,亦或结合两个卷积层和Skip Connection 的输出
Basic Block:反向传播时,梯度将涉及两层参数的交叉相乘,可能会在离输入近的网络层中产生梯度消失的现象。ResNet把网络结构调整为,既然离输入近的神经网络层较难训练,那么我们可以将它短接到更靠近输出的层,提供了一种深层次网络退化为浅层次网络的能力。
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
转载:https://blog.csdn.net/weixin_46649052/article/details/116525250