七月算法深度学习笔记4 -- CNN与常用框架

这套笔记是跟着七月算法五月深度学习班的学习而记录的,主要记一下我再学习机器学习的时候一些概念比较模糊的地方,具体课程参考七月算法官网:

http://www.julyedu.com/ 

神经网络的结构

七月算法深度学习笔记4 -- CNN与常用框架_第1张图片

神经网络包含输入层,输出层,及中间的隐层

神经网络在做说明事情呢?

从逻辑回归到神经元--感知机:

七月算法深度学习笔记4 -- CNN与常用框架_第2张图片


X1,X2为输入,z为一个线性的输出,当z<0时,函数逐渐趋近0,z>0函数趋近1.于是,得到一个分类器,对应到神经网络中,如右图。于是,逻辑回归被画成一个非常简单的感知机,函数a叫做激励函数。z通过函数a得到的是一个概率。


在网络中加入一个隐层,构成浅层神经网络

七月算法深度学习笔记4 -- CNN与常用框架_第3张图片

对于多个隐层的网络叫做深度神经网络

七月算法深度学习笔记4 -- CNN与常用框架_第4张图片

神经网络为什么优于其他分类之器

LR或者SVM做的事情,是为了找到分界面,将不同类别分开,如:

七月算法深度学习笔记4 -- CNN与常用框架_第5张图片七月算法深度学习笔记4 -- CNN与常用框架_第6张图片

这类算法对特征的要求很高,要求特征具有较高的可区分性

但是,如果样本分布不规则,即特征区度底,则传统学习方法很难给出好的结果


如图,由如下两个类别需要分类

七月算法深度学习笔记4 -- CNN与常用框架_第7张图片

神经网络的做法:

找两组参数,一组能做出上面一条直线,另一组做出下面的直线,如下图2

七月算法深度学习笔记4 -- CNN与常用框架_第8张图片

将这个and操作作为与或门分类的最后一层,连接这两层,则可以得到

七月算法深度学习笔记4 -- CNN与常用框架_第9张图片

从神经网络来看,加了一个隐层使得网络能完成上面的样本可分。

神经网络可以对平面做任何切分:

七月算法深度学习笔记4 -- CNN与常用框架_第10张图片

神经网络不在乎样本点在空间上如何分布。网络自己学习特征。但是如上图,可能会出现过拟合,后文会提到神经网络会用dorpout控制过拟合。


2. CNN卷积神经网络

CNN与传统神经网络的关系

1. 依旧保持了层级结构

2. 层的动能和形式发生了变化

七月算法深度学习笔记4 -- CNN与常用框架_第11张图片

DATA  : 数据输入层

CONV:卷积层

RELU:激励层

POOLING: 池化层

FC: 全连接层


2.1 数据输入层 Input Layer

三种常用的图像数据处理方式

i:去均值:把输入数据各个维度都中心化到0;

ii: 归一化: 幅度归一化到同样的范围

iii:PCA/白话 : PCA降维,白化是对数据每个特征轴上的幅度归一化

对于CNN,只对图像做去均值处理

取均值与归一化

七月算法深度学习笔记4 -- CNN与常用框架_第12张图片

区相关与白化

七月算法深度学习笔记4 -- CNN与常用框架_第13张图片


2.2 卷积计算层/ CONV layer

局部关联。每个神经元看做一个filter

窗口(receptive field)滑动,filter对局部数据计算,

七月算法深度学习笔记4 -- CNN与常用框架_第14张图片

输入数据是个32*32*3结构,其中圆圈的个数表示该层神经元的个数。在CONV中,神经元就是滤波器。每个滤波器划过图像得到该层的输出。

conv由三个重要的参数:

深度/depth:神经元的个数
步长/stride:滑动过程中一次跳过几个像素
填充值/zero-padding: 在图像外围加边(补0)

举例:

七月算法深度学习笔记4 -- CNN与常用框架_第15张图片

这张图来自:http://cs231n.github.io/convolutional-networks/

该网站由详细的关于CNN的介绍。

上图中,图像有三个通道,滤波器也由3个通道。


CONV作用:

 参数共享机制:对同一个神经元(filter)而言,无论划到哪里,权值是相同的。即假设每个神经元连接数据窗的权重是固定的

关于参数共享:

 固定每个神经元连接权重,可以看做模板,每个神经元只关注一个特性

 需要估算的权重个数减少: AlexNet 1亿 => 3.5w

 一组固定的权重和不同窗口内数据做内积: 卷积


2.3 激励层(ReLU)

把卷积层输出结果做非线性映射

七月算法深度学习笔记4 -- CNN与常用框架_第16张图片

激励函数作用:不是所有的值都需要向后传播。

不同的激励函数:

sigmoid:

七月算法深度学习笔记4 -- CNN与常用框架_第17张图片

Sigmoid函数的问题在于,求偏导数的过程中,靠近1或0的位置求导结果为0。使得参数的调整无法进行,收敛很慢。

Tanh:

七月算法深度学习笔记4 -- CNN与常用框架_第18张图片


ReLU

ReLU(The Rectified Linear Unit/修正线性单元)
收敛快,求梯度简单,较脆弱

七月算法深度学习笔记4 -- CNN与常用框架_第19张图片

七月算法深度学习笔记4 -- CNN与常用框架_第20张图片

若输出为负,则陷入饱和。

Leaky ReLU

七月算法深度学习笔记4 -- CNN与常用框架_第21张图片

指数线性单元ELU

七月算法深度学习笔记4 -- CNN与常用框架_第22张图片

Maxout

计算是线性的,不会饱和不会挂
多了好些参数
两条直线拼接


实际经验

不要用sigmoid
首先试RELU,因为快,但要小心点
如果2失效,请用Leaky ReLU或者Maxout
某些情况下tanh倒是有不错的结果,但是很少


2.3 池化层 / Pooling layer

夹在连续的卷积层中间
压缩数据和参数的量,减小过拟合

七月算法深度学习笔记4 -- CNN与常用框架_第23张图片

下采样过程。

max pooling

七月算法深度学习笔记4 -- CNN与常用框架_第24张图片

Pooling 一般夹在若干卷积层之间,用于压缩数据量,同时减少过拟合。

2.5 全连接层:FC layer

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

全连接层的计算量非常大。

一般CNN的结构:

INPUT
[[CONV -> RELU]*N -> POOL?]*M
[FC -> RELU]*K
FC


3. CNN的训练过程:

七月算法深度学习笔记4 -- CNN与常用框架_第25张图片

Loss function非凸

BP算法利用链式求导法则,逐级相乘直到求解出dW和db。

CNN利用SGD/随机梯度下降,迭代和更新W和b


4. fine-tuning

fine-tuning:使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练

原因:

自己从头训练卷积神经网络容易出现问题
fine-tuning能很快收敛到一个较理想的状态

做法:

复用相同层的权重,新定义层取随机权重初始值
调大新定义层的的学习率,调小复用层学习率

参考资料:

七月算法:http://www.julyedu.com/

图片来自于课程PPT




你可能感兴趣的:(DeepLearning)