这套笔记是跟着七月算法五月深度学习班的学习而记录的,主要记一下我再学习机器学习的时候一些概念比较模糊的地方,具体课程参考七月算法官网:
http://www.julyedu.com/神经网络的结构
神经网络包含输入层,输出层,及中间的隐层
神经网络在做说明事情呢?
从逻辑回归到神经元--感知机:
X1,X2为输入,z为一个线性的输出,当z<0时,函数逐渐趋近0,z>0函数趋近1.于是,得到一个分类器,对应到神经网络中,如右图。于是,逻辑回归被画成一个非常简单的感知机,函数a叫做激励函数。z通过函数a得到的是一个概率。
在网络中加入一个隐层,构成浅层神经网络
对于多个隐层的网络叫做深度神经网络
神经网络为什么优于其他分类之器
LR或者SVM做的事情,是为了找到分界面,将不同类别分开,如:
这类算法对特征的要求很高,要求特征具有较高的可区分性
但是,如果样本分布不规则,即特征区度底,则传统学习方法很难给出好的结果
如图,由如下两个类别需要分类
神经网络的做法:
找两组参数,一组能做出上面一条直线,另一组做出下面的直线,如下图2
将这个and操作作为与或门分类的最后一层,连接这两层,则可以得到
从神经网络来看,加了一个隐层使得网络能完成上面的样本可分。
神经网络可以对平面做任何切分:
神经网络不在乎样本点在空间上如何分布。网络自己学习特征。但是如上图,可能会出现过拟合,后文会提到神经网络会用dorpout控制过拟合。
2. CNN卷积神经网络
CNN与传统神经网络的关系
1. 依旧保持了层级结构
2. 层的动能和形式发生了变化
DATA : 数据输入层
CONV:卷积层
RELU:激励层
POOLING: 池化层
FC: 全连接层
2.1 数据输入层 Input Layer
三种常用的图像数据处理方式
i:去均值:把输入数据各个维度都中心化到0;
ii: 归一化: 幅度归一化到同样的范围
iii:PCA/白话 : PCA降维,白化是对数据每个特征轴上的幅度归一化
对于CNN,只对图像做去均值处理
取均值与归一化
区相关与白化
2.2 卷积计算层/ CONV layer
局部关联。每个神经元看做一个filter
窗口(receptive field)滑动,filter对局部数据计算,
输入数据是个32*32*3结构,其中圆圈的个数表示该层神经元的个数。在CONV中,神经元就是滤波器。每个滤波器划过图像得到该层的输出。
conv由三个重要的参数:
深度/depth:神经元的个数
步长/stride:滑动过程中一次跳过几个像素
填充值/zero-padding: 在图像外围加边(补0)
举例:
这张图来自:http://cs231n.github.io/convolutional-networks/
该网站由详细的关于CNN的介绍。
上图中,图像有三个通道,滤波器也由3个通道。
CONV作用:
参数共享机制:对同一个神经元(filter)而言,无论划到哪里,权值是相同的。即假设每个神经元连接数据窗的权重是固定的
关于参数共享:
固定每个神经元连接权重,可以看做模板,每个神经元只关注一个特性
需要估算的权重个数减少: AlexNet 1亿 => 3.5w
一组固定的权重和不同窗口内数据做内积: 卷积
2.3 激励层(ReLU)
把卷积层输出结果做非线性映射
激励函数作用:不是所有的值都需要向后传播。
不同的激励函数:
sigmoid:
Sigmoid函数的问题在于,求偏导数的过程中,靠近1或0的位置求导结果为0。使得参数的调整无法进行,收敛很慢。
Tanh:
ReLU
ReLU(The Rectified Linear Unit/修正线性单元)
收敛快,求梯度简单,较脆弱
若输出为负,则陷入饱和。
Leaky ReLU
指数线性单元ELU
Maxout
计算是线性的,不会饱和不会挂
多了好些参数
两条直线拼接
实际经验
不要用sigmoid
首先试RELU,因为快,但要小心点
如果2失效,请用Leaky ReLU或者Maxout
某些情况下tanh倒是有不错的结果,但是很少
2.3 池化层 / Pooling layer
夹在连续的卷积层中间
压缩数据和参数的量,减小过拟合
下采样过程。
max pooling
Pooling 一般夹在若干卷积层之间,用于压缩数据量,同时减少过拟合。
2.5 全连接层:FC layer
两层之间所有神经元都有权重连接
通常全连接层在卷积神经网络尾部
全连接层的计算量非常大。
一般CNN的结构:
INPUT
[[CONV -> RELU]*N -> POOL?]*M
[FC -> RELU]*K
FC
3. CNN的训练过程:
Loss function非凸
BP算法利用链式求导法则,逐级相乘直到求解出dW和db。
CNN利用SGD/随机梯度下降,迭代和更新W和b
4. fine-tuning
fine-tuning:使用已用于其他目标,预训练好模型的权重或者部分权重,作为初始值开始训练
原因:
自己从头训练卷积神经网络容易出现问题
fine-tuning能很快收敛到一个较理想的状态
做法:
复用相同层的权重,新定义层取随机权重初始值
调大新定义层的的学习率,调小复用层学习率
参考资料:
七月算法:http://www.julyedu.com/
图片来自于课程PPT