Preface
The title of the class.
上节课是神经网络的基本框架,一层层layer的堆积,每层都是简单的linear+RELU,这显然是不够的。在图像处理上,convolutional layer比较管用。
现在我们先介绍CNN的历史。忽略远古时期,直接看两篇标志性的论文。
1998年LeCun发表了bp算法在zipcode recognization上的应用。由于硬件资源和数据集,只是在zipcode上。不过算法本身已经成熟。
LeNet
2012年Alex发表了Imagenet的论文,标志着大数据GPU的CNN时代。simiar to Lecun, just scaled. with huge amounts of images by GPU.
AlexNet
CV的应用
注意CV的应用也是分级别的,有难易的。参照face++研究员所说,最简单的是classfication对象是整张照片,顺便实现retrieval图片检索;稍难的是detection对象是region,检测出照片中的主要物体;更难的是segmentation对象是pixel,对每个像素有个归属;最难的好像有几个版本,一是sequence对象是视频,建立在detection基础上动态一帧帧地检测物体的运动,从而实现自动驾驶,二是language对象是region和自然语言,建立在detection和NLP/RNN基础上,合成一句caption,三是生成图片,如GAN,要求逼真清晰,可以仿照真人的real-time表情合成表情包(iphone X),或者按照要求生成一段视频。
Process
正如之前说的,CS231N不数学,只是让你有个general idea,所以讲的比较粗略。
CNN是由若干层convolutional layer(with RELU/pooling)配上最后一层——全连接层fully connected(即为Wx+b得出最终的概率向量)。于是重点就是卷积层。
这是卷积层的构造。卷积的定义这里淡化了。filter是个depth喝Image相同的卷积核,和Image作卷积,通过slide over the spatial locations遍历整张图片(和一小块size相同的区域作卷积),得到一层薄薄的activation map。
于是一个filter形成一个平面activation map,多个filter就得到activation maps.
于是一个简单的CNN就搭好了。Image变为不同size的,根据filter的数量。
而CNN由浅入深的每一层提取的feature是从简单到复杂, low-level to high-level
Convolutional layer
有很多参数。
首先是stride步长。这是filter扫过image是遍历的间距,公式很容易推导。有时为了更好地处理edge,人为添加zero padding,这样就完整了。
简单的练习。每个filter是个3d的参数。然后加上Bias。
卷积层的所有参数都已列出。filter的体积和个数,bias,stride,pad。
Pooling layer
pooling是一种downsampling技术,为了保留关键值,也为了减少参数(更快,减少过拟合)。通常是Max pooling,至于average pooling被弃用,之前说过了。pooling的参数就是stride和filter,通常是2*2.
Fully Connected Layer
最后一层,输出概率向量。所有的架构都已清晰标明。