前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习笔记-深度学习实战

深度学习笔记-深度学习实战

作者头像
吕海峰
发布2018-06-13 11:20:17
1.4K0
发布2018-06-13 11:20:17
举报
文章被收录于专栏:BrianBrian

深度学习实战

前面总结了吴恩达的深度学习课程笔记,博主把后续的深度学习课程笔记总结记录到个人博客里面,以供学习和交流使用。今天总结的是深度学习的超参数调试、正则化和梯度检验

改善神经网络

依次通过数据集、偏差方差、正则化、梯度爆炸和消失来掌握深度学习的基础理论。

数据集

我们需要将数据集分为训练数据集(Train dataset)、验证数据集(Validation/Dev dataset)和测试数据集(Test dataset),如下图所示:

Split Dataset
Split Dataset

训练数据集:训练模型时使用的数据集。 验证数据集:这个数据集主要在于当我们有多个模型时,我们需要选择最优的模型,验证数据集帮助我们挑选最优的模型算法(最优模型)。 测试数据集:测试数据集是用来评估模型准确度,主要是通过测试数据集对于挑选的最优模型进行无偏估计。 一般在机器学习早期,一般将数据集分为70%(train dataset)/30%(test dataset) or 60%(train dataset)/20%(dev dataset)/20%(test dataset),这主要是早期label数据量较少,这样划分是比较常用的数据划分。但是在现在的大数据时代,比如我们拥有100万lable数据实例,我们一般98%(train dataset)/1%(dev dataset)/1%(test dataset) or 99.5%(train dataset)/0.4%(dev dataset)/0.1%(test dataset) 无论如何划分数据,一定要使得数据的分布一致

偏差和方差

偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据。 方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散。

Bias and Variance
Bias and Variance

Demo 假如我们现在识别一个cat的图片,人识别的错误率为0.001%,我们在train和dev的的错误率为: 1.高方差 Train set error: 1% Dev set error: 11% 2.高偏差 Train set error: 15% Dev set error: 16% 3.高偏差高方差 Train set error: 15% Dev set error: 30% 4.低偏差低方差(最优) Train set error: 0.5% Dev set error: 1%

人识别错误率的分析是我们假设预测的,一般我们称为最优误差即贝叶斯误差,如果我们的最优误差是15%,上面的例子中最优的是2。高偏差最直接的效果是会造成model无法对数据进行很好的拟合即模型为线性较为简单,而高方差最直接的效果是造成model对数据的拟合效果超过了泛华的拟合效果,model的泛华能力较低。在机器学习中我们要做到的是降低我们的偏差和方差,市值达到一个平衡状态。怎么降低偏差和方差呢? 高偏差(训练数据集)->选择一个新的网络模型(含有更多的深度学习层数和隐藏节点数的模型)->重复迭代训练直到偏差降下来为止即模型拟合数据(偏差降到可接受的范围)->检查方差是不是过高(验证数据集)->如果方差过高,我们需要收集更多的数据集or正则化

正则化

L2正则化

我们先来看一下LR的损失函数的计算,

minJ(w,b)=\frac 1m \sum_{i=1}^{m}L({ypred}^i-y^i)

为了该模型加上L2正则化后变为,其中w输入nx空间

minJ(w,b)=\frac 1m \sum_{i=1}^{m}L({ypred}^i-y^i)+\frac {\lambda}{2m}||w||^2_2\\\\ \frac {\lambda}{2m}||w||^2_2=\frac {\lambda}{2m} \sum_{j=1}^{nx}w^2_j=\frac {\lambda}{2m} w^Tw

其中正则化的lambda为正则化参数属于深度学习超参数的一种,深度学习网络是如何来实现L2正则化的呢?

J(w^{[1]},b^{[1]},w^{[2]},b^{[2]},......,w^{[l]},b^{[l]})=\frac 1m \sum_{i=1}^{m}L({ypred}^i-y^i)+\frac {\lambda}{2m}\sum_{j=1}^{l}||w^{j}||^2\\\\ l为深度学习层数,w:(n^{l-1},n^{l})分别代表了(前一层隐藏单元的神经元的数量,当前层神经元的数量)\\\\ ||w^{j}||^2=\sum_{i=1}^{n^{l-1}}\sum_{j=1}^{n^{l}}(w_{ij})^2

我们下面来看看如何实现防止过拟合的,为什么加上L2正则化后会对深度学习模型有效的防止过拟合。主要的原理在于正则化实际上对损失函数进行惩罚,所谓的惩罚就是对模型复杂度而言,模型复杂度越复杂那么对他惩罚越严重,复杂度越小惩罚越轻。深度学习算法采用BP进行逐步迭代求解参数w和b,那么我们加入正则化后如何进行处理呢?

dw^l=\frac {\partial {J(w,b)}}{\partial {w}}+{\lambda}{2m}||w||^2_2\\\\ dw^l=\frac {\partial {J(w,b)}}{\partial {w}}+\frac{\lambda}{m}w^{[l]}\\\\ w^{[l]}:=w^{[l]}-{\alpha}dw^{[l]}\\\\ w^{[l]}:=(1-\frac{\alpha\lambda}{m})w^{[l]}-\alpha \frac {\partial {J(w,b)}}{\partial {w}}\\\\ a=(1-\frac{\alpha\lambda}{m})

因为a是小于1的数,整个权重处于衰减的过程。对于过拟合的神经网络,如果我们设置的超参数比较合理,那么a是一个很小的数,基本上约等于0,这就意味着会消除一些某些隐藏层的神经元的影响,使得神经网路的结构得到优化,从而使得一个从过拟合状态进行惩罚并纠正。(比如:lambda 设置的很大,w会很小,z的值也接近于0,那么在激活函数时它是线性函数,不适合过于复杂的决策。)

Dropout

Dropout会遍历神经网络每一层,然后按照一定概率随机删除一些神经元节点。

数据增强

比如将图像水平翻转,平移,裁切等操作,我们的目的使得模型的泛化能力增强,能适应各种数据。

Early Stopping

当我们需要在希望得到我们的误差时,我们可以通过Early Stopping来终止,来防止模型出现过拟合。

超参数初始化

我们都应该知道,BP是通过反向传播进行链式方式调整超参数通过SGD来找到全局中最优解。那么超参数的比如权重w的初始化会影响在空间中寻找的最优解,很容易造成梯度消失和梯度爆炸。所以我们在给定learning_rate下,要适当的对权重做出调整,那么如何去做?

权重初始化方法

1.通过初始化小的的随机数,比如:均值为0,方差为0.01的高斯分布。

代码语言:javascript
复制
W=0.01 * np.random.randn(D,H)

这种方式只适用于小的神经网络,对深度层数较多的神经网络不太适合,并且分布的方差随着输入数量的增大而增大。 2.正则化方差来提高权重收敛速率,初始权重的方式为正态分布

代码语言:javascript
复制
w = np.random.randn(n) / sqrt(n)

其中ReLu权值初始化方式为,方差为2.0/n,这会使得中间结果方差较小,神经元不会饱和,学习速度不会减慢。

代码语言:javascript
复制
w = np.random.randn(n) * sqrt(2.0/n)

甚至有的论文给出了,如下的推荐方式

\text{Var}(W) = \frac{2}{n_\text{in} + n_\text{out}}

3.Xavier权重初始化 Xavier初始化可以帮助减少梯度弥散问题, 使得信号在神经网络中可以传递得更深。是最为常用的神经网络权重初始化方法。算法根据输入和输出神经元的数量自动决定初始化的范围: 定义参数所在的层的输入维度为n,输出维度为m,那么参数将从

(-{\sqrt{6\over m+n}},{\sqrt{6\over m+n}})

均匀分布中采样。 4.MSRA Xavier该初始化方式为使每层方差一致,从而不会发生前向传播爆炸和反向传播梯度消失等问题。对于ReLU激活函数,其使一半数据变成0,初始时这一半的梯度为0,而tanh和sigmoid等的输出初始时梯度接近于1.因此使用ReLU的网络的参数方差可能会波动。Kaiming He论文中通过放大一倍来保持方差的平稳。这就是MSRA.

\text{Var}(W) = \frac{2}{n_\text{in}}

前向和后向推导的方差均控制在2n,综合起来使用均值为0,方差为

\sqrt{4\over n_{in}+n_{out}}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深度学习实战
  • 改善神经网络
    • 数据集
      • 偏差和方差
        • 正则化
          • L2正则化
          • Dropout
          • 数据增强
          • Early Stopping
        • 超参数初始化
          • 权重初始化方法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档