现代神经网络Q&A-----一篇搞懂
LeNet核心架构
经典卷积神经网络的包括:
- 带填充以保持分辨率的卷积层;
- 非线性激活函数,如ReLU;
- 汇聚层,如最大汇聚层。
-
pooling时,使用avg还是max?
- max:侧重该感受野的最大信息量(有没有鸟)
- avg:侧重整个感受野的各项信息量
-
一层卷积为什么从1个通道变成6个通道?
一个通道是灰度图(28 * 28 * 1) 使用6个权重不同的卷积核分别对图像卷积操作,每个卷积核得到一个feature map特征图,则变成6个通道。
-
卷积只能做图像吗?可以做时序任务吗?
没问题,二维卷积变成一维即可。
-
sigmoid换成relu可以吗?替换之后为什么模型不收敛,有什么区别?
sigmoid原Learning rate为0.9,后改为relu可以将Learning rate改为0.1,即可收敛,人工调参。
-
如何可视化网络学到的东西?
CNN Explainer (poloclub.github.io)
直接在网页中动态查看即可,十分直观。
-
LeNet卷积层通道数扩大到了16,这意味着信息被放大了吗?
-
通常,高宽减半,通道数加倍;
-
每个通道对应一个独立的特征检测器(如边缘、纹理等模式识别),也就是说每个特征图可以看做某些特定模式的识别,特征图变小,但是通道数增多,意味着能识别这些模式的神经元变多了,并且一个位置能编码更丰富的语义信息。
-
-
mlp和cnn使用哪个?
数据不大mlp没问题,当然都可以尝试;数据集很大则放弃mlp,很有可能overfitting
AlexNet核心架构
- 是更大更深的LeNet,10x参数个数,260x计算复杂度
- 新加:dropout丢弃法,reLu,最大池化层,数据增强
- AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
AlexNet VS LeNet
左LeNet,右AlexNet
-
AlexNet 池化层放到不同卷积层之后,效果一样吗?
这个需要自己尝试。
-
Local Response Normalizaon有什么意义?
- 模拟神经元的侧抑制机制。其主要作用是增强局部区域内的激活响应,同时抑制周围区域的激活,以提高模型的感知能力。
- LRN会增加计算复杂度和内存消耗,而对模型性能的提升有限
- 其实LRN和ReLU作用相差不大,后面也没用LRN
-
dropout有什么用?
为了正则化,通过随机删除部分神经元的活动,来缓解模型的复杂性,防止过拟合。
-
如果网络输入size固定,实际图片输入时会resize吗?
不会,保持图片比例,垂直水平方向会切边。
-
为什么要有两个相同的Dense(4096)?
两个较大的全连接层有较好的效果。
-
全连接层的参数量占据大多数,有什么必要作用?
-
全连接层需要捕获整体结构的信息,在图像分类任务中,全连接层可以帮助识别图像的整体形状或颜色模式,而不是仅仅关注局部细节
-
全连接层可以将多个不同层次的神经元(如卷积层中的各个池化层输出)通过线性变换连接起来。
-
-
为什么AlexNet新增加了3层384输出的卷积层,有什么道理?
没有特别的原因,试出来性能好。
VGG核心架构
One VGG Block重复n次,每个Block包括以下序列:
- 带填充以保持分辨率的卷积层;3×3; pad 1;
- 非线性激活函数,如ReLU;
- 汇聚层,如最大汇聚层;2×2;stride 2;
参数计算:
-
卷积层需要较少的参数:
c i × c 0 × k 2 ( 输入通道 × 输出通道 × k e r n e l 大小 ) c_i×c_0×k^2 (输入通道×输出通道×kernel大小) ci×c0×k2(输入通道×输出通道×kernel大小) -
但卷积层后的第一个全连接层的参数
- LeNet 16x5x5x120=48k
- AlexNet 256x5x5x4096=26M
- VGG 512x7x7x4096=102M
VGG VS AlexNet
**VGG16:**13卷积层+3全连接层
- 训练损失一直下降测试损失从开始起就一点不降成水平状是什么原因呢?
代码有问题;或者是过拟合overfitting了,测试集和训练集差距很大。
-
为什么VGG(1,1,224,224)的输入高宽减半后,通道数是64?
通道数和高宽减半无关,通道数是人工设置的kernel数量(也就是该卷积层输出通道)
NiN核心架构
- 无全连接层 参数少
- 交替使用NiN块和步幅为2的最大池化层逐步减小高宽和增大通道数
- 最后使用全局平均池化层得到输出其输入通道数是类别数
NiN VS VGG
-
一个超级宽的:单隐藏层难以训练是因为显存不够大吗?
很容易过拟合。
-
全局池化层的设计是否很关键?
代替全连接层,通道数不变,将卷积输出的feature mapping高宽变成1,把输入变小了,并且没有可学习的参数;将模型复杂度降低,提升泛化性,但是收敛变慢了,需要训练时长变长,但是精度会高一些。
-
NiN Block为什么选用2个1×1Conv?
可以试一下。。。
-
分类不用做softmax吗?
softmax写在了交叉损失熵Loss函数中,不会出现在网络代码中
-
两个1×1Conv对每个像素增加了非线性性,为什么?
- 1×1Conv 输入输出的宽高不变,通道数改变
- 理解:将某一像素点视为样本,该像素点的通道视为特征的全连接。
- 相当于2个隐含层的mlp,存在ReLU,增加了非线性性
ResNet核心架构
是否越深越好?
架构:左侧正常块,右侧残差块
- ResNet残差块高宽减半 步幅2
- 后接多个正常块
- 残差块使得很深的网络更加容易训练甚至可以训练一千层的网络
- 残差网络对随后的深层神经网络设计产生了深远影响,无论是卷积类网络还是全连接类网络。
-
为什么lenet batch size大于1000收敛会有问题?会有什么样的问题?nan还是?
- 较大的batch size可以提高内存利用率,减少每个epoch所需的迭代次数,从而加快训练速度。然而,过大的batch size可能导致内存不足,影响训练效率
- batch size大于1000可能会出现特征图相似情况,计算类似,影响收敛精度。
-
f(x)=x+g(x),这样就能保证至少不会变坏吗?如果g(x)不是变好也不是什么都不干,而是变坏了呢?
g(x)是训练出来的,如果不好,权重也就不会更新,通常情况不会使模型变坏。
-
cos学习率会比step 或者固定学习率好吗?
足够多的时间做微调。
-
测试精度一定比训练精度低吗?
-
不一定,如果训练数据大量噪声,测试数据没有,测试精度可能会比训练精度高。
-
训练噪音使得模型鲁棒性提高,泛化能力变强
-