图解何为CNN
CNN - Convolutional Neural Networks
是近些年在机器视觉领域很火的模型,最先由 Yan Lecun 提出。
如果想学细节可以看 Andrej Karpathy 的 cs231n 。
How does it work?
给一张图片,每个圆负责处理图片的一部分。
这些圆就组成了一个 filter。
filter 可以识别图片中是否存在指定的 pattern,以及在哪个区域存在。
![](https://i-blog.csdnimg.cn/blog_migrate/365f0b91f35aea9afe1a38184b8d733f.webp?x-image-process=image/format,png)
下图中有4个filter,每个filter的平行的点会负责图片上相同的区域。
![](https://i-blog.csdnimg.cn/blog_migrate/48e1ad5ae21c283079aca30f3e311ea8.webp?x-image-process=image/format,png)
神经元利用 convolution 的技术查找pattern,简单地理解就是用 filter 的形式去查找图片是否具有某种 pattern。
![](https://i-blog.csdnimg.cn/blog_migrate/2586e05d71e2d3f0c293fa605b1fd5c4.webp?x-image-process=image/format,png)
weights 和 bias 对模型的效果起着重要的作用。
把白圆圈换成神经元,就是CNN的样子。
![](https://i-blog.csdnimg.cn/blog_migrate/e9755833c55cb2c84db19e0229df7a1e.webp?x-image-process=image/format,png)
Convolution层的神经元之间没有联系,它们各自都只连接inputs。
![](https://i-blog.csdnimg.cn/blog_migrate/f6967c981edfbe61ad3235db3a70be9b.webp?x-image-process=image/format,png)
同一层的神经元用相同的 weights 和 bias,这样同一层的神经元就可以抓取同样的pattern,只不过是在图片上的不同的区域。
![](https://i-blog.csdnimg.cn/blog_migrate/f66b1d0961231a8a789eb4c7743239d8.webp?x-image-process=image/format,png)
接下来是 ReLU(Rectified Linear Unit) 层和 Pooling 层,它们用来构建由 convolution 层找到的 pattern。
CNN 也用 Back propagation 训练,所以也有 vanishing gradient 的可能。而 ReLU 作为激活函数的话,gradients会大体保持常值的样子,这样就不会在关键的那几层有很明显的下降。
Pooling 层是用来降维的。
经过 convolution 和 ReLU 的作用后,会有越来越复杂的形式,所以Pooling 层负责提取出最重要的 pattern,进而提高时间空间的效率。
![](https://i-blog.csdnimg.cn/blog_migrate/bd71ede42143b3860abcbd06e9d488a3.webp?x-image-process=image/format,png)
这三层可以提取出有用的 pattern,但它们并不知道这些 pattern 是什么。
所以接着是 Fully Connected 层,它可以对数据进行分类。
![](https://i-blog.csdnimg.cn/blog_migrate/6ce333a13bb2b72388ac6e2546264a23.webp?x-image-process=image/format,png)
一个典型的 Deep CNN 由若干组 Convolution-ReLU-Pooling 层组成。
![](https://i-blog.csdnimg.cn/blog_migrate/1ea3e696dea562e7ea8440ff14cb3649.webp?x-image-process=image/format,png)
但CNN也有个缺点,因为它是监督式学习,所以需要大量的有标签的数据。