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