凡客建网站线上推广软件
1、当在卷积神经网络中加入池化层(pooling layer)时,平移变换的不变性会被保留,是吗?
正常答案: C
A
不知道
B
看情况
C
是
D
否
平移变换不变性的概念
平移变换不变性指的是当输入图像发生小范围的平移时,模型的输出结果不会发生改变。例如,在图像分类任务中,一张猫的图片在图像中稍微向左或向右移动了一些像素,模型仍然能够正确地将其分类为猫。
池化层的工作原理
池化层通常有最大池化(Max Pooling)和平均池化(Average Pooling)等常见类型,以最大池化为例,它会在输入特征图上划分出多个不重叠的区域(池化窗口),然后对每个区域内的元素取最大值作为该区域的输出。
池化层如何保留平移变换不变性
- 局部特征聚合:池化层通过对局部区域进行聚合操作(如取最大值或平均值)来减少特征图的维度。当输入图像发生小范围的平移时,只要特征(如边缘、纹理等)仍然落在池化窗口内,池化操作的输出就不会改变。
- 例如,假设在一个2x2的最大池化窗口中,原始输入区域的值为[[1, 2], [3, 4]],最大池化的输出为4。如果图像发生小范围平移,使得这个特征移动到相邻的2x2区域,只要4仍然在新的池化窗口内,最大池化的输出依然是4。
- 忽略位置信息:池化层只关注局部区域内的统计信息(最大值或平均值),而不关心这些值具体出现在区域内的哪个位置。这使得模型对输入图像的局部平移具有一定的鲁棒性,从而保留了平移变换的不变性。
2、考虑以下问题:假设我们有一个5层的神经网络,这个神经网络在使用一个4GB显存显卡时需要花费3个小时来完成训练。而在测试过程中,单个数据需要花费2秒的时间。 如果我们现在把架构变换一下,当评分是0.2和0.3时,分别在第2层和第4层添加Dropout,那么新架构的测试所用时间会变为多少?
正确答案: C
A
少于2s
B
大于2s
C
仍是2s
D
说不准
在架构中添加Dropout这一改动仅会影响训练过程,而并不影响测试过程。
测试时间分析
Dropout是一种在神经网络训练过程中用于防止过拟合的技术,它通过以一定概率随机“丢弃”神经元来实现。在测试阶段,Dropout并不会起作用,所有的神经元都会被使用,网络只是单纯地进行前向传播计算输出。所以添加Dropout并不会影响测试时单个数据的计算量和计算流程,因此测试时间仍然是2秒。
训练时间分析
如果改成训练过程,新架构的训练时间会大于3小时。
因为添加Dropout后,在每次训练的前向传播过程中,都需要按照设定的概率随机决定哪些神经元要被“丢弃”,这额外增加了计算量 。并且在反向传播更新参数时,也需要考虑被“丢弃”神经元的情况。所以相比于原架构,添加Dropout后的新架构在训练时的计算量增大,花费的训练时间也会变长。
3、深度学习中的激活函数需要具有哪些属性?()
正确答案:ABD
A
计算简单
B
非线性
C
具有饱和区
D
几乎处处可微
神经网络中激活函数的属性:
- 非线性:
即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。 - 几乎处处可微:
可微性保证了在优化中梯度的可计算性。保证在反向传播算法中能计算梯度,使模型可利用梯度信息进行参数更新,实现基于梯度的优化算法,如梯度下降法等。 - 计算简单:
降低模型训练和推理的计算成本,提高计算效率,减少计算资源消耗和训练时间,提升模型的实用性和可扩展性。
非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network中把它当做卷积操作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等操作的激活函数更受欢迎的其中一个原因。 - 非饱和性(saturation):
饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。最经典的例子是Sigmoid,它的导数在x为比较大的正值和比较小的负值时都会接近于0。更极端的例子是阶跃函数,由于它在几乎所有位置的梯度都为0,因此处处饱和,无法作为激活函数。ReLU在x>0时导数恒为1,因此对于再大的正值也不会饱和。但同时对于x<0,其梯度恒为0,这时候它也会出现饱和的现象(在这种情况下通常称为dying ReLU)。Leaky ReLU和PReLU的提出正是为了解决这一问题。 - 单调性(monotonic):
即导数符号不变。这个性质大部分激活函数都有,除了诸如sin、cos等。个人理解,单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。
6. 输出范围有限:
有限的输出范围使得网络对于一些比较大的输入也会比较稳定,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。但这导致了前面提到的梯度消失问题,而且强行让每一层的输出限制到固定范围会限制其表达能力。因此现在这类函数仅用于某些需要特定输出范围的场合,比如概率输出(此时loss函数中的log操作能够抵消其梯度消失的影响)、LSTM里的gate函数。 - 接近恒等变换(identity):
即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。这个与非线性是有点矛盾的,因此激活函数基本只是部分满足这个条件,比如TanH只在原点附近有线性区(在原点为0且在原点的导数为1),而ReLU只在x>0时为线性。这个性质也让初始化参数范围的推导更为简单。这种恒等变换的性质也被其他一些网络结构设计所借鉴,比如CNN中的ResNet和RNN中的LSTM。 - 参数少:
大部分激活函数都是没有参数的。像PReLU带单个参数会略微增加网络的大小。还有一个例外是Maxout,尽管本身没有参数,但在同样输出通道数下k路Maxout需要的输入通道数是其它函数的k倍,这意味着神经元数目也需要变为k倍;但如果不考虑维持输出通道数的情况下,该激活函数又能将参数个数减少为原来的k倍。