深度学习简介
深度学习是一种利用复杂结构的多个处理层来实现对数据进行高层抽象的算法。传统的BP算法仅有几层网络,不足之处是:1、需要人工指定特征 2、易出现局部最优问题 3、维度灾难。深度学习引入概率生成模型,可以自动从训练集中提取特征,从而解决了手工特征考虑不周的问题。
1、卷积神经网络的基本概念
卷积:表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。公式为: f ( x ) ∗ g ( x ) = ∑ − ∞ + ∞ f ( τ ) g ( x − τ ) d τ f(x)*g(x)=\sum\limits_{-\infty}^{+\infty}f(\tau)g(x-\tau)d\tau f(x)∗g(x)=−∞∑+∞f(τ)g(x−τ)dτ 。在卷积神经网路中可以认为经过卷积运算,数据特征不发生改变,起特征提取的作用。效果见下图:
感受野:直观的描述就是视觉感受区域的大小。在CNN中,感受野是CNN中的某一层输出结果的一个元素对应输入层的一个映射,即:feature map上的一个点所对应的输入图上的区域。
映射后的维数与所对应的输入层的维数满足这样一个关系:其中n分别代表输入和输出的编码的长或宽,s代表步长,p代表外围补0的行数或列数,f代表卷积核的大小。当编码不对称时候,长宽分别代入计算,得到经过卷积核卷积操作后,得到的编码的长和宽。
n o u t = ⌊ n i n + 2 p − f s + 1 ⌋ n_{out}=\left\lfloor\dfrac{n_{in}+2p-f}{s}+1\right\rfloor nout=⌊snin+2p−f+1⌋
多通道卷积:使用不同的卷积核进行卷积后,将结果编码对应位置相加得到最终的编码。使用不同的卷积核,代表着从不同的方向去提取数据的特征。
池化(Pooling):是一种降采样的方法。具有3个优点:1、特征不变性 2、特征降维 3、在一定程度上防止过拟合。
Padding:有时候为了保证数据的边缘特征,常在数据为外围补0 。
2、CNN的层级结构
- 数据输入层/ Input layer
- 卷积计算层/ CONV layer
- ReLU激励层 / ReLU layer
- 池化层 / Pooling layer
- 全连接层 / FC layer
2.1 数据输入层
- 去均值:把输入数据各个维度都中心化为0,其目的就是把样本的中心拉回到坐标系原点上。
- 归一化:幅度归一化到同样的范围,即减少各维度数据取值范围的差异而带来的干扰。
- PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化。
2.2 卷积计算层
- 局部关联。每个卷积核看做一个滤波器(filter)
- 窗口(receptive field)滑动, filter对局部数据计算
2.3 激励层
将卷积层的输出结果做一次非线性映射,即激活。常用非线性映射函数:Sigmoid(S形函数)、Tanh(双曲正切,双S形函数)、ReLU、Leaky ReLU、ELU、Maxout。
2.4 池化层
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。
2.5 全连接层
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样。
卷积+池化=过滤器;全连接层=分类器;
3、反向传播训练
Step 1: 用随机数初始化所有的滤波器和参数/权重。
Step 2: 网络将训练图片作为输入,执行前向步骤(卷积,ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。
Step 3: 计算输出层的总误差
Step 4: 反向传播算法计算误差相对于所有权重的梯度,并用梯度下降法更新所有的滤波器/权重和参数的值,以使输出误差最小化。
来源:赵卫东《机器学习》