cs231n Convolutional Neural Network 笔记

CNNs: Architectures, Convolution / Pooling Layers

CovNet Layers

ConvNet 显示地假设输入是图片,卷积池化等操作大大减少了参数,比一般的全连接网络计算更高效。CNN 里具体有下面的几种结构,

  • 卷积层, Convolutional Layer

    • Dilated convolutions 就是做点乘的时候,也有个stride,而不是连续的九宫格
  • 池化, Pooling Layer

    • Pooling Layer 往往加在两个连续的卷积之间,能有效减少空间大小和计算量,而且能控制过拟合。
    • 有些生成模型不需要池化,如 VAEs(variational autoencoders), GANs
    • overlapping pooling,就是 stride 有重叠
    • max-pooling
    • average-pooling
    • L2-norm pooling
  • ReLU, Activation Layer

  • 全连接层, Fully Connected Layer

从输入到 feature map 大小计算公式如下,

feature_map_size = ( input_size - filter_size + 2 * padding ) / stride + 1
  • input_size 如 ImageNet 的图片是 224 x 224 x 3
  • filter_size 卷积核大小,必须是奇数,如 3x3
  • padding 在图片的边界的填充的大小,可以取 0
  • stride 在 Pooling 层的步伐大小,比如 1

  • 怎么理解 CNN 中的权值共享和局部感受野的概念?

    • 其实就是很多的不同的卷积核沿着整个输入图片的卷积操作。
  • 怎么理解卷积核数量和feature map数量是对应的?

    • 同一个卷积核的 depth 和输入的 depth 是一致的,但是是在所有的通道上做卷积运算后加起来,因此得到的feature map是单通道的
    • 所以有通过 1x1 的卷积核来降低通道的做法。

ConvNet Architectures

一般的CNN可以这么搭建,

INPUT -> [ [CONV -> ReLU ] * N –> POOL? ] * M –> [ FC -> ReLU ] * K –> FC

为什么想要多层的小的卷积核?

  • 现在的模型更倾向于用更多更深的小卷积核而非单层的大卷积,比如三层3x3的卷积层(带池化吧?可是文中没有提到)就可以有7x7一样的感受野范围,但是由于三层之间加了非线性的激活函数,所以表达能力更强一些。且用的卷积核参数更少。
  • 唯一的缺点就是,如果要做反向传播的话,需要更多的内存来保留中间激活值。

Case Studies

NetworkSource & AuthorSourceNotes
LeNetYann LeCun
AlexNetAlex Krizhevsky etc.The ILSVRC 2012 winner
ZF NetThe ILSVRC 2013 winner
GoogLeNetGoogle Inc.The ILSVRC 2014 winner, Inception4M parameters, compared to AlexNet with 60M. see Inception-v4
VGGNetOxfordThe ILSVRC 2015 second prizeDeeper, 104M parameters, in last FC layer
ResNetMSRAThe ILSVRC 2015 winnerResNet-2016, refer to torch-facebook

misc/miscellaneous 混杂的,杂项的参数

参数与内存大小

  • 基本上把参数的个数算一下转换成byte,乘以4(float浮点数),或者乘以8(double),就是参数占用的内存大小
  • 如果减小batchsize能很大程度上减少内存大小,说明这个模型中的激活值占了很大比重。

Understanding and Visualizing CNNs

关于神经网络模型是否具有可解释性(interpretable),可以通过可视化来探讨。

  • Visualize feature map
    • 随着训练的进行,ReLU层后的激活值从 blooby and dense 从 sparse and localized
  • Visualize weights(filters)
    • nice and smooth filters without any noisy patterns
  • 把能很大程度上激活某些神经元的输入收集起来,能发现一些特点,比如某些神经元只对眼睛感兴趣,某些神经元只对房子感兴趣等。

有些人认为,神经元(ReLU neuros) 不一定会有语义信息(semantic meaning),也可能只是图片块的空间表示的向量基底而已。(it is more appropriate to think of multiple ReLU neurons as the basis vectors of some space that represents in image patches)

t-SNE

t-SNE 可以将原始的图片嵌入到二维的空间内,同时保持他们在低维的距离和在高维的距离是一样的。低位的相似度关注的是语义和标签类,而非像素点和颜色。

Tansfer Learning and Fine-tuning CNNs

实际应用中,一般很少白手起家地(from scratch)训练一个CNN,因为数据集往往都不够大。更好的做法是,用别人训练好的模型作初始化,或者特征提取器。

卷基层作为特征提取器

直接把训练好的模型,如AlexNet的最后一层的分类器去掉,然后接一个自己的分类器,每次反向传播的时候,并不调整原来的权重。提取的特征,比如 2048D 的向量,称作是CNN code

精确调参的卷积(Fine-turning the ConvNet)

就是说在用别人的模型时,继续训练参数;当然也可以控制前几层的参数固定,调整后面高层的网络。

Caffe library 有个 Model Zoo 【link1 and link2】,人们可以分享他们的模型 checkpoints

什么时候和怎么精确调参?

新数据集大小和原始数据集建议
很小很像train a linear classifier on the CNN code
很大很像retrain
很小不像用前几层,做特征提取,训练线性分类器
很大不像train a ConvNet from scratch

实际经验和建议

  • 预训练的模型的限制 CNN的参数,其实对输入的图片的大小没有强制性的限制,因为卷基层保留的参数都是卷积核
  • fine-tuned 的时候,用较小的学习率
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值