提示:互联网大厂笔试
C,N,NC,WH?
作用
BN层一般放在线性层或卷积层后面,激活函数前面,作用如下:
1.加快网络收敛;
因为每层的数据都转换为同一的分布,这样会加快训练速度。
2.防止梯度爆炸和梯度消失;
因为BN会使非线性变换函数的输入值落入对输入比较敏感的区域。
解决的问题是梯度消失与梯度爆炸。
关于梯度消失,以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。

事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图

如果输入很大,其对应的斜率就很小,我们知道,其斜率(梯度)在反向传播中是权值学习速率。所以就会出现如下的问题,

3.防止过拟合,提升泛化能力。
因为BN求均值和方差是基于同一个batch内的样本,使网络不会朝一个方向学习。
BN计算过程:

一张图一个通道的话,一个batch就N个数据,一个均值,一个方差
C个通道就C个均值和方差
为什么会有放缩系数γ和平移系数β ?
因为归一化不可避免的会改变数据的分布,
从而可能会对激活函数只使用了其线性部分,限制了模型的表达能力。
引入参数γ 和β 可以使网络的输出重构原始特征的表达能力。
训练阶段
在训练阶段,BN会对batch内的每个样本做归一化,
每一层特征图会计算出Channel个均值和方差。
训练时计算的均值和方差会不断按加权累积下来,通过移动平均的方法来近似得到整个样本集的均值和方差。
这里假设通道数为1,batch为4,即大小为[4,1,3,3] (n,c,h,w)。
特征图里的值,作为BN的输入,这里简化输出只有一个channel,
也就是这一个4x3x3个数值通过BN计算并保存均值与方差,
并通过当前均值与方差计算归一化的值,
最后根据γ,β以及归一化得值计算BN层输出。
假如输入是c=3个通道,就是在通道的维度上进行bn,所以会有c=3个γ,β参数。
训练过程中共会产生(图片总数/batchsize)组 γ β 。
在反向传播时,利用γ 和β求梯度从而改变训练权重
预测阶段
在预测阶段,很可能不是按batch预测的,
通常只有一个样本,那么BN层中的均值和方差都是固定的,那就需要用到训练时的均值和方差通过移动平均而得到。
因此答案就是C个均值与方差!
池化的作用:
缓解模型过拟合
保持一定的平移不变性
减小图像尺寸,进行数据降维
但是池化的作用不是上采样 ,而是下采样
1.池化层主要的作用
(1)首要作用,下采样(downsampling)
(2)降维、去除冗余信息、对特征进行压缩、简化网络复杂度、减小计算量、减小内存消耗等等。各种说辞吧,总的理解就是减少参数量。缓解模型过拟合
(3)实现非线性(这个可以想一下,relu函数,是不是有点类似的感觉?)。
(4)可以扩大感知野。
(5)可以实现不变性,其中不变形性包括,平移不变性、旋转不变性和尺度不变性。


这个问题我之前学过,讲过:
卷积神经网络参数量和计算量的计算
k*k次乘法,这是一次卷积的计算量:
多少次卷积???

h-k+p/s + 1 w-k+p/s + 1
C个输入特征图上进行卷积运算的次数为Ci
C个相加需要C-1次加法

输出O个特征图需要计算的次数

本题不看加法C-1舍弃
就是oci[h-k+p/s + 1 * w-k+p/s + 1] × k方


N=T的话,就是T序列长度,d是向量维度的话。
**o(t^2*d)**就是self-attention的复杂度
o(t*d^2)是RNN时间复杂度,不是t方×d哦!!!笔试容易在这搞你
o(t*d^2)是RNN时间复杂度,不是t方×d哦!!!笔试容易在这搞你
o(t*d^2)是RNN时间复杂度,不是t方×d哦!!!笔试容易在这搞你
CNN:o(tkd^2) = o(ktd^2),问题不大
transformer中self-attention线性性模块的复杂度o(t*d^2)
提示:重要经验:
1)o(t*d^2)是RNN时间复杂度,不是t方×d哦!!!笔试容易在这搞你
2)CNN计算量要属性,先算卷积核一次卷积,然后看看特征图需要多少次卷积,然后看看通道数乘法,加法,输出乘法
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。