机器学习总结(十一):深度学习算法(CNN,SAE,等)及常见问题总结

(1)CNN

层级结构:输入层->卷积层->激励层->卷积层->激励层。。。

数据输入层(数据预处理):三种方法:去均值(即0均值化,CNN常用,训练集所有像素值减去均值,把输入数据各个维度中心化到0,测试集也减相同的均值);归一化(幅度归一化到同样的范围);PCA/白化(降维,白化是对数据每个特征轴上的幅度归一化)。

去均值的目的:(1)数据有过大的均值可能导致参数的梯度过大,在梯度回传时会有一些影响;(2)如果有后续的处理,可能要求数据0均值,比如PCA。

归一化的目的:为了让不同维度的数据具有相同的分布规模,方便操作,图像一般不需要。

白化的目的:相当于在零均值化和归一化操作之间插入一个旋转操作,将数据投影在主轴上。图像一般不需要,因为图像的信息本来就是依靠像素之间的相对差异来体现的。

参数初始化:随机初始化,给每个参数随机赋予一个接近0的值(不可0初始化)。

卷积计算层/CONV layer:参数共享机制。(跟过滤好像);作用:提取特征,通过BP误差的传播,可以得到对于这个任务最好的卷积核。

激励层(把卷积层输出结果做非线性映射):

Sigmoid,tanh,ReLU

Leaky ReLU:f(x)=max(0.01x,x),Maxout。

池化层/Pooling layer:夹在连续的卷积层中间。作用:1.具有压缩数据和参数的量,减小过拟合的作用。包括Max pooling 和average pooling;2.引入不变性,包括平移、旋转、尺度不变性。

全连接层/FC layer:通常在卷积神经网络尾部

训练算法:

(1)     先定义Loss function,衡量和实际结果之间的差距;交叉熵

(2)     找到最小化损失函数的w和b,CNN中用的算法是随机梯度下降SGD;

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

为什么用SGD:(1)数据量庞大,直接梯度很慢;(2)代价函数非凸,容易陷入局部极值。

CNN为什么这么好用?局部连接获得局部信息,权值共享减少了参数,保证高效。

与DNN的区别?全连接DNN上下层神经元都形成链接,带来参数数量的膨胀,而卷积核在所有图像是共享的。

RNN的特点?DNN无法对时间序列上的变化进行建模,RNN中,神经元的输出可以在下一个时间戳直接作用到自身。

RNN的梯度消失?原理和DNN一样,采用长短时记忆单元LSTM,通过门的开关实现时间上的几亿功能,门关闭,当前信息不需要,只有历史依赖;门打开,历史和当前加权平均。

(2)AutoEncoder自动编码器

基本思想:一种尽可能复现输入信号的神经网络。由编码器Encoder和解码器Decoder两部分组成,本质上都是对输入信号做某种变换。学习处理x→h→x的能力。

两种情况:假设数据维度为n,隐层维度为p

       1.n>p,相当于一种降维操作。与PCA的关系:当每两层之间的变换均为线性,且监督训练的误差是二次型误差时,该网络等价于PCA

       2.n同时约束好h的表达尽量稀疏(有大量维度为0,未被激活),此时就为“稀疏自编码器”。为什么稀疏的表达就是好的?稀疏的表达意味着系统在尝试取特征选择,找出大量维度中真正重要的若干维。

堆叠自编码器训练过程:1.逐层训练先训练网络n→m→n,得到n→m的变换,然后在训练m→k→m,得到m→k的变换,最终堆叠成SAE,即为n→m→k的结果。2.微调:可以只调整分类层的参数(此时相当于把整个SAE当作一个特征提取),也可以调整整个网络的参数(适合训练数据量较大的情况)。

稀疏自编码器训练过程:核心思想:高维而稀疏的表达是好的。1.指定一个稀疏性参数p,代表隐藏神经元的平均活跃程度(在训练集上取平均);2.引入一个度量,来衡量神经元的实际激活度与期望激活度p之间的差异即可,然后把此度量添加到目标函数作为正则(相对熵,也就是KL散度,交叉熵),训练整个网络。

降噪自编码器训练过程:核心思想:一个能够从中恢复原始信号的表达未必是最好的,能够对“被污染/破坏”的原始数据编码解码,然后还能恢复真正的原始数据,这样的特征才是好的,关注的是鲁棒性。训练过程:1.在原始数据中加入噪声或部分数据缺失;2.计算误差时用原始完好数据。

(3)调参优化方法

1.训练数据预处理:移除不良数据(噪声,空值等),去均值等。自动编码器要对数据进行归一化,因为激活函数如果sigmoid的话要用输出0~1与输出比较;

2.权值初始化(很重要,初始化好的话可以不需要调参):多次随机生成初始化,但不能全为0,根据目前最新的实验结果,权重的均匀初始化是一个不错的选择。高斯分布。

3.学习率的选取:一般从0.1开始,逐渐减小,如果在验证集上性能不再增加就让学习率除以2或者5,然后继续。所以要使用验证集,可以知道什么时候开始降低学习率,什么时候停止训练。

4.网络结构的构建(逐层训练):a.尽量选择更多的隐层单元和隐层数量,因为可以通过正则化的方法避免过拟合;b.合适的激活函数;c.正则优化:正则项L1,L2,Dropout,初始默认的是0.5,如果模型不是很复杂,可以设置为0.2.

5.Batchnormalization:大大加快训练速度和模型性能。本质原理就是在网络的每一层输入的时候,又插入了一个可学习,有参数的归一化层,并且为每一层的神经元引入了变换重构,可以恢复出原始网络所学习的特征分布。在神经网络训练时遇到收敛速度慢或爆炸时可以尝试BN解决。

6.优化方法:不仅有BP,还有adagrad优化方法,Bp学习速率都一样,但是同一个更新速率并不一定适合所有参数,因此ada就是对于每个参数分配不同的学习率,但是随着更新距离的增多,学习速率也会变慢。

(4)神经网络归一化的目的

神经网络学习过程的本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另一方面,一旦每批训练数据的分布各不相同,那么网络就要在每次迭代都去学习适应不同的分布,这样会大大降低网络的训练速度。

(5)深度学习如何过拟合?

数据集扩充:在源数据上做些改动,比如说图片数据集,可以将原始图片旋转一个小角度、添加随机噪声、加入一些有弹性的畸变、截取原始图片的一小部分等;

Dropout:相当于训练了很多个只有半数隐层单元的神经网络,每一个这样的半数网络都可以给出一个分类结果,这些结果有的是正确的,有的是错误的,随着训练的进行,大部分网络都可以给出正确的分类结果,少数的错误不会造成太大影响。

正则化!!

你可能感兴趣的:(机器学习总结,机器学习,机器学习,深度学习,cnn,sae)