2.改善深层神经网络-第一周 深度学习的应用层面

Core:理解最前沿的深度学习方法,学会搭建自己的神经网络,学会如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行,从而使学习算法在合理时间内完成自我学习。
1.1 训练,开发,测试集
dev set = hold-out cross validation set
好处:Having set up a train dev and test set will allow you to integrate more quickly.也能够更有效地衡量算法的偏差和方差,从而帮助我们更高效地选择合适的方法来优化算法。
对训练集执行训练算法,通过验证集或简单交叉验证集选择最好的模型。经过充分验证,选定最终模型,然后就可以在测试集上进行评估了。
数据集规模相对较小的,适用传统的划分比例。(60 20 20)
数据集规模较大的,验证集和测试集可以占到数据总量的20%或10%以下。
现代深度学习的另一个趋势是在train和test分布不匹配的情况下进行训练。
这里写图片描述
经验法则:确保验证集dev和测试集test sets的数据来自同一分布。
就算没有测试集也不要紧,测试集的目的是对最终所选定的神经网络系统做出无偏评估。如果不需要无偏评估,也可以不设置测试集。
1.2 偏差,方差
Bias and variance trade off。
分类器方差较高,数据过度拟合。
这里写图片描述
理解偏差和方差的两个关键数据是train set error and dev set error。
前提是人的分类识别错误率几乎为0。最优误差也称为贝叶斯误差。
分析的前提:假设基本误差很小,train and dev sets来自相同分布。
这里写图片描述
数据拟合程度低–high bias
数据拟合程度低的情况下,过分拟合部分数据—-high bias and high variance
这里写图片描述
但是对于高维数据,在高维数据中采用这种分类器看起来不会这么牵强。
了解了算法中究竟是否存在high bias or high variance,可以根据算法偏差和方差的高低情况采用一些机器学习的基本方法,更系统的优化算法。
1.3 机器学习基础
在训练神经网络时用到的基本方法:
初始模型训练完成后,首先要知道的是算法的偏差高不高。如若偏差较高,试着评估训练集的性能。
High bias:甚至无法拟合数据(欠拟合),需重新选择一个网络,使用大网络。
高方差:过度拟合。
总之要找到一个低偏差,低方差的框架。
这里写图片描述
举个例子,如果算法存在高偏差问题,准备更多训练数据其实没有啥用,至少不是啥最有效的方法。
只要正则适度,那么就可以在不影响方差的同时,减少偏差。而采用更多数据通常可以在不过多影响偏差的同时,减少方差。
1.4 正则化
正则化是一种非常实用的减少方差的方法。正则化时会出现偏差方差权衡问题。偏差可能会Increase,但如果网络足够大,增幅通常不会太高。
正则化通常有助于避免过度拟合,或者减少网络误差。
下面用逻辑回归来实现这一设想。
w是多维度参数矢量,b是一个实数。在逻辑回归函数中加入正则化。
L2正则化:w的L2范数,也称为是参数w的欧几里得范数平方。
这里写图片描述
以上就是在逻辑回归函数中实现L2正则化的过程。(Logistic regression)
为何正则化参数w,而不正则化参数b?
因为w是高维的,可以表达高偏差问题。
如果用L1正则化,w最终会是稀疏的,向量中有很多0。L1正则化使模型变得稀疏,却没有降低太多存储内存,所以不能压缩模型。
Neural network
w的矩阵L2范数被称作”Frobenius“范数,表示一个矩阵中所有元素的平方和。L2正则化有时被称为weight decay的原因:权重乘以了一个小于1的系数。
这里写图片描述
1.5 为什么正则化可以减少过拟合?
L2正则化,”Frobenius“范数
这里写图片描述
1.6 Dropout 正则化
dropout正则化是另一种正则方法,dropout 随机失活。
对于每个训练样本,都将采用一个精简后的神经网络来训练它。针对每个样本,训练规模极小的网络。
实现dropout的方法:
inverted dropout(反向随机失活)
举例说明如何在某一层中实施dropout?
d3 d 3 表示一个三层的dropout向量。keep-prob表示保留某个隐藏单元的概率。
keep-prob=0.8意味着消除任意一个隐藏单元的概率是0.2。其作用就是生成随机矩阵,随机矩阵中数字等于1的概率是0.8,等于0的概率是0.2。

# a表示激活函数
a3=np.multiply(a3, d3) #作用是过滤d3中所有等于0的元素

这里写图片描述
keep-prob是每一层上保留单元的概率。

a3 /= keep-prob #反向随机失活,会修正或者弥补所需的那20%,而a3的期望值不会变

功能:不论keep-prob的值是多少,(=1,保留所有节点,不存在dropout),反向随机失活方法通过除以keep-prob,确保a3的期望值不变。该方法使测试阶段变得更容易,因为他的数据扩展问题变少。
对于不同的训练样本,清除不同的隐藏单元,事实上,如果通过相同训练集多次传递数据,每次训练的梯度不同,则随机对不同隐藏单元归0。有时并非如此,需要将相同隐藏单元归0。第一次迭代梯度下降时,把一些隐藏单元归0,第二次迭代梯度下降时(第二次遍历训练集),对不同类型的隐层单元归0。
Making predictions at test time
如何在测试阶段训练算法?
给出想要做决定的变量x,用的是标准计数法,用 a[0]=X a [ 0 ] = X ,即第0层的激活函数标注为测试样本x。在测试阶段不使用dropout函数,自然不用决定失活概率,以及要消除哪些隐藏单元了。
这里写图片描述
如果在测试阶段用dropout函数,预测会受到干扰。
1.7 理解Dropout
实施dropout的结果是压缩权重,并完成一些预防过拟合的外层正则化。dropout的功能类似于L2正则化。
根据参数的规模,每层keep-prob的值都可能不同。对于有可能出现过拟合且含有诸多参数的层,设的值小,以便应用更加强大的dropout。
这里写图片描述
dropout的缺点:代价函数J不再被明确定义。所以可以先关闭使用dropout(keep-prob = 1),确保J函数单调递减后,再打开dropout。
1.8 其他正则化方法
除了L2正则化,随机失活正则化(dropout)外,还有其他的一些方法可以减少神经网络中的过拟合。
Data augmentation、early stopping(在中间点停止迭代过程,与L2正则化相似,选择参数w范数较小的神经网络,提早停止训练神经网络)
这里写图片描述
early stopping的缺点:不能对立的处理优化和过拟合的问题。优点:只运行一次梯度下降,就可以找出w的较小值,中值,较大值,而无需尝试L2正则化超参 λ λ 的多值。
这里写图片描述
1.9 正则化输入
训练神经网络,其中一个加速训练的方法就是归一化输入(normalize your inputs)。
步骤:零均值化,归一化方差
这里写图片描述
这里写图片描述
Note:如果用此方法来调整训练数据,那么用相同的均值和方差来归一化测试集。即要用同样的方法(该均值和方差是由训练集数据计算得来的)来调整测试集,而不是在训练集和测试集上分别预估均值和方差。
1.10 梯度消失与梯度爆炸
训练深度神经网络所面临的一个问题是梯度消失或梯度爆炸。这加大了训练的难度。
解决方法:更明智地选择随机初始化权重,从而尽量避免此问题。
这里写图片描述
在此只是阐述了激活函数以指数级增长或下降,它也适用于与层数L相关的导数或者梯度函数也是呈指数增长或递减。
1.11 神经网络的权重初始化
给出初始化权重矩阵的方差默认值,希望训练一个权重或梯度不会增长或消失过快的深度网络,可加快训练速度。
这里写图片描述
1.12 梯度的数值逼近
当实施反向传播时,有一个测验叫做梯度检验。作用是确保反向传播的正确实施。
如何对计算的梯度做数值逼近?
the one sided of difference(单边公差):即从 θ θ θ+ε θ + ε 之间的误差。
使用双边误差的方法更逼近导数。
这里写图片描述
逼近误差:
双边误差公式:更加准确
这里写图片描述
单边:不太准确
这里写图片描述
至此,可以用双边误差来判断别人给定的导数 g(θ) g ( θ ) 是否正确实现了函数f的偏导,可以这种方法判断反向传播是否得以正确实施。( g(θ) g ( θ ) f f 导数的实现)
1.13 梯度检验gradient checking
用梯度检验来检验反向传播的实施是否正确。可以帮助发现反向传播过程中的bug。
双边误差公式的结果更准确。
要做的是把矩阵w转换成一个向量,之后做连接运算,得到一个巨型向量θ θ θ dθ d θ 具有相同维度。
这里写图片描述
这里写图片描述
1.14 关于梯度检验实现的注记
神经网络实施梯度检验的实用技巧和注意事项:
这里写图片描述
梯度检验特别耗时间,所以在debug的时候用。
若相对于某些层或某层的db[l], θ θ dθ d θ 相差很大,但是 dw[l] d w [ l ] 的各项非常接近,可能在计算参数b的导数db的过程中存在bug。
梯度检验不能和dropout同时使用。因为,每次迭代过程中,dropout会随机消除隐层单元的不同子集,难以计算dropout在梯度下降上的代价函数J。
建议关闭dropout,用梯度检验进行双重检查,在没有dropout的情况下,确保算法正确。然后,打开dropout,
参考信息:https://zhuanlan.zhihu.com/p/32090475

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值