CNN卷积神经网络

卷积神经网络CNN,属于深度学习,推荐july算法的一个公开课,https://www.julyedu.com/video/play/18/134 这是看完之后的一份总结。

逻辑回归到感知器

z=θ0+θ1X1+θ2X2

a=g(z)=11+ez

神经网络

  • 神经网络包括输入层,隐含层,输出层。
  • 类似于LR或者linear svm对数据进行线性分割,多次训练,对神经元进行逻辑与操作,得到线段的交集,形成一个个凸集,再对相同类别进行并集。
    神经网络的实现:http://python.jobbole.com/82208/

卷积神经网络

卷积神经网络依旧是层级网络,但是层的功能和形式做了变化,包括数据输入层,卷积计算层,ReLU激励层,池化层,全连接层。

1.数据输入层 input layer

三种常见的图像数据处理方式:
1. 去均值,把输入数据的各维度中心化到0,减去均值
2. 归一化:幅度归一化到一个范围
3. PCA降维/白化:对数据每个特征轴上的幅度归一化
CNN卷积神经网络_第1张图片
CNN卷积神经网络_第2张图片

2.卷积计算层 CONV layer

 1. 局部关联,每个神经元看做一个filter,窗口滑动,filter对局部数据计算,只关系部分维度,深度(depth,神经元层数)步长(stride,每次移动的数),填充值(用0填充边界,保证所有都被覆盖),演示网址http://cs231n.github.io/assets/conv-demo/index.html
 2. 参数共享机制 假设每个神经元连接数据窗的权重是固定的。固定每个神经元权重,可以看做模板,每个神经元只关注一个特性,需要估算的权重个数减少,一组固定的权重和不同的窗口内数据做内积

3.ReLU激励层 ReLU layer

把卷积层输出结果做非线性映射,可以用sigmoid,Tanh(双曲正切),Relu,Leaky ReLU,Maxout函数

4.池化层 Pooling layer

函数做映射,夹在连续的卷基层中间,压缩数据和参数的量,减少过拟合。max pooling 优于average pooling

5.全连接层 FC layer

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。

训练算法

与一般的机器学习算法一样,先定义loss function,衡量与实际结果之间的差距。找到最小化损失函数的w和b,CNN中的算法是SGD(随机梯度下降,需要计算w和b的偏导,BP算法(反向传播算法)就是用来计算偏导的,BP算法的核心是求导链式法则。)

优点

共享卷积核,对高维数据处理无压力
无需手动选择特征,训练好权重,即得特征
分类效果好

缺点

需要调参,需要大量的样本,训练最好要GPU
物理含义不明确 可解释性不强

典型CNN

Lenet,AlexNet, ZF Net,GoogleNet,VGGNet

fine tuning

使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练。
原因:自己从头训练训练卷积神经网络容易出现问题,fine-tuning能较快的收敛到一个较理想的状态
做法:使用相同层的权重,新定一层取随机权重初始值,调大新定义层的学习率,调小复用层的学习率。

常用框架

caffe:源于Berkeley的主流CV工具包,支持C++,Matlab,python语言,Model Zoo中有大量预训练好的模型供使用
Torch:Facebook用的卷积神经网络工具包,通过时域卷积的本地接口,使用非常直观,定义新网络层简单。
TensorFlow:Google的深度学习框架,TensorBoard可视化很方便,数据和模型并行化好,速度快。

你可能感兴趣的:(机器学习)