卷积神经网络的主要作用是图像处理,比如人脸识别
拿神经网络处理图片,资源消耗是巨大的
举个例子,上图上来输入为一张图片,输出为结果,形式是概率.
卷积神经
包含四种不同类型的层CONV,RELU,POOL,FC
CONV 卷积层
局部关联,一个神经元不看全图,只看一块区域,然后窗口滑动,然后对每次滑动的局部数据进行计算,比如这一块区域是3*3则会产生9个w(权重)
第二个神经元也做同样的操作,不过会用9个新的权重,后面也会生成
根据上面的描述就会出现几个特性,1.干这个事神经元的个数,2.步长,一次走多远,这个扫描不是说一次就3*3下面就是另外一个3*3,实际上,会有交集的.3.填充值,比如步长是2,那么宽度可能是不够的,这样就人为的加0为填充值
拿这个图来说,上面分别对应的rgb三组值,用三个单独的神经元扫描,然后扫描单个神经元的卷积层有两层,最后的结果为点乘然后相加,很奇怪,第一个组神经元扫描出来的值永远是差1的.
因为每个神经元只关注一个特征,和原本的人工神经网络比,需要估算的权重大幅度缩水了.
而一组固定的权重和不同窗口的内积,就叫卷积
RELU 激励层
其核心就是把卷积层得到的结果做一个非线性的映射
w0,w1,w2是一组新权重,根据特征的重要性分配这一权重f(x) = sum(wixi + b)这个函数就叫激励函数
非线性映射的选择:
1.绝对不要用sigmoid
2.首先试下RELU,注意观察输入输出方差的波动,免得挂掉了
3.如果不行就用leaky RELU或者Maxout
4.实在没办法就考虑tanh.反正不用sigmoid
池化层 Pooling layer
池化层分为Max pooling 和Average pooling,上图的数据窗是2*2,步长是2,各不相关,所以取最大值就是右边的结果,如果取平均值,则就是把最大值换成平均值,据说人脸识别平均值要更好用点
全连接层 FC
一般来说就是最后乘以最后一组权重求出结果了
卷积神经网络的结构
INPUT->[[CONV ->RELU]*N -> POOL?(表示加不加看业务需求)]*M->[FC->RELU]*K(也是根据业务来)->FC
不管是什么机器学习方式,貌似永远离不开损失函数,然后根据损失函数梯度下降,然后拟合出最优的解
CNN的求这一过程的算法是SGD,SGD需要对w和b求偏导,求偏导的算法为BP
BP利用链式法则逐级相乘,知道解出pw和db,就是w和b的偏导值.然后利用SGD或者随机梯度下降更新w,b直到得出最优解
卷积神经网络优缺点总结
优点:
共享卷积核,对高维数据处理无压力
无需手动选取特征,训练好权重,既得特征.
分类效果好
缺点:
需要调参,需要大量样本,训练恐怕要GPU
物理含义不明确,不清楚那些数据实际表达出来的是什么
目前比较好用的是AlexNet>lenNet
目前来说自己训练卷积神经网络都不是特别靠谱,容易出问题,改变别人设计好的CNN,从时间的降低和效率来说都会有很大的提升.
而且也很简单,改变下权重,或者改变部分权重就好了
常见的比较好用的框架Caffe Mxnet TensorFlow