Convolutional Neural Network,卷积神经网络,简称CNN,最近几年再次流行起来。
CNN和普通的机器学习算法有什么相同,有什么不同?
简单说,CNN=A+B,即CNN包括两个方面的功能:
A:feature extactor 特征提取器
普通的机器学习算法,比如决策树、随机森林、svm、逻辑回归/softmax等,它的输入通常就是若干个features
而CNN的输入,是图片!
我们当然可以把图像像素作为feature vector中的一个维度。但是这毕竟过于naive。往往并不怎么work。
CNN中的特征提取,是通过卷积层完成的。这里说的卷基层,包括狭义的卷积、池化(下采样)。
个人认为,我们并不一定要把CNN中的卷积层看作传统人工智能中的神经网络的改进。因为真的有点勉强:传统神经网络的输入就是一个个的feature vector,用作分类器或者回归器。CNN的输入则是图片。
B:classifier or regressor 分类器或回归器
CNN中的全连接层和输出层,这个其实是和传统的神经网络一致的:处理的输入是feature vectors,输出的是类别label或者连续的预测数值
总结
CNN = 特征提取(卷积层)+ 分类(全连接层)
其中特征提取是说,feature是学出来的,而不是“手工设计的”(比如SIFT,SURF,ORB,HOG,LBP,HSC等)
但是这里还有一个疑问:学出来的feature应该是唯一的吗?怎样的学出来的特征算是“好的特征”?我们固然可以设计不同的网络结构,来学习出不同的特征。但是怎样的特征才是好的特征?以及,我们能否从特征学习的过程中,得到一些规律,用于辅助手工设计特征?毕竟搞一个CNN的话,要大量数据或者微调,而且需要GPU,并且还是一个black box缺乏理论支持的感觉。。
有想法的请留言。欢迎吐槽。