吴恩达 deep learning 深度学习的使用层面

训练/验证/测试集


训练集:执行训练算法
验证集:进行交叉验证,选取最终模型
测试集:无偏评估算法的运行状况
小数据集:无验证集 7:3 有验证集6:2:2
大数据集:百万级别 98:1:1 超百万 99.5%:0.25%:0.25% 或 99.5%:0.4%:0.1%

  • 确保验证集和测试集的数据来自同一分布,因为要用验证集来评估不同的模型,尽可能的优化性能,如果验证集合测试集来自同一分布,深度学习算法需要大量的训练数据,为了获得更大规模的训练数据集,就会采用网页抓取的方式获取训练数据,代价就是训练集与测试集和验证集有可能来自不同的分布,但只要确保验证集和测试集来自同一分部,机器学习算法会变得更快
  • 但不需要无偏评估是可以不用测试集
偏差/方差



高偏差:

  • 具有更多隐藏层或者隐藏单元的网络
  • 训练更长时间
  • 更适合解决该问题的新网络架构
    高方差:
  • 更多的数据
  • 正则化
  • 更合适的网络架构
正则化


L1 正则化: λ 2 m ∣ ∣ w ∣ ∣ 1 = λ 2 m ∑ j = 1 n x ∣ w j ∣ \dfrac{\lambda}{2m}||w||_{1}=\dfrac{\lambda}{2m}\sum\limits_{j=1}^{n_{x}}|w_{j}| 2mλw1=2mλj=1nxwj
L2 正则化: λ 2 m ∣ ∣ w ∣ ∣ 2 2 = λ 2 m ∑ j = 1 n x w j 2 = λ 2 m w T w \dfrac{\lambda}{2m}||w||_{2}^{2} = \dfrac{\lambda}{2m}\sum\limits_{j=1}^{n_{x}} w_{j}^{2}=\dfrac{\lambda}{2m}w^{T}w 2mλw22=2mλj=1nxwj2=2mλwTw

神经网络正则化 ∣ ∣ w [ l ] ∣ ∣ F 2 = ∑ i = 1 n [ l − 1 ] ∑ j = 1 n [ l ] ( w i j [ l ] ) 2 ||w^{[l]}||_{F}^{2}=\sum\limits_{i=1}^{n^{[l-1]}}\sum\limits_{j=1}^{n^{[l]}}(w_{ij}^{[l]})^{2} w[l]F2=i=1n[l1]j=1n[l](wij[l])2

λ \lambda λ足够大的时候w接近于零,方差减小,这就使得高方差向高偏差接近

激活函数中的z太大或者太小时会呈现线性,只有当 λ \lambda λ的值合适的时候,z的值才会位于激活函数的非线性部分,当z较小的时候,就会位于激活函数的线性部分,从而降低模型的非线性程度
当使用正则化后J会呈现单调递减

Dropout正则化


dropout会遍历网络的每一层,并设置消除神经网络中节点的概率,最后得到一个节点更少、规模更小的网络,然后使用反向传播的方法进行训练,对于每个样本都将采用一个精简后的网络训练

反向随机失活

keep_prob表示保留节点的概率
a3/=keep-prob这一步的作用是为了不影响z[4]的期望值
在测试阶段不要使用dropout,如果在测试阶段使用dropout预测会受到干扰,预测结果会变得随机


对于单个神经元,由于加入了dropout,每个特征都可能被删除,所以该神经元不会特别依赖任何一个特征,因此产生了L2正则化这会收缩权重的效果
对于不同的层应当根据神经元的个数进行设置keep_prob的大小
dropout的缺点是代价函数J不再被明确定义,因为每次迭代都会随机消除一些神经元,所以无法绘制J下降的图

其他正则化方法


数据扩增:通过图片的一些变换,得到更多的数据

Early Stoping:在验证误差上升之前停止迭代,优点是只用运行一次就可以找到w的较小值、中间值和较大值,缺点是无法结局偏差和方差之间的最优

归一化


使用相同的 μ \mu μ σ 2 \sigma^{2} σ2来归一化测试集

如果不适用归一化,在某些位置,必须使用一个非常小的学习率,才能找到最优解,使用归一化后,无论从哪个位置开始迭代,都可以在相对较少的迭代中找到最优解,并可以使用较大的步长

梯度消失和梯度爆炸


上图中假设使用线性激活函数
W [ l ] > I W^{[l]}>I W[l]>I的时候 y ^ = W [ L ] [ 1.5 0   0 1.5 ] L − 1 X \hat y = W^{[L]}\left[ \begin{array}{l} 1.5 & 0 \\\ 0 & 1.5\end{array} \right]^{L-1}X y^=W[L][1.5 001.5]L1X y ^ \hat y y^的值将爆炸式增长
W [ l ] &lt; I W^{[l]}&lt;I W[l]<I的时候 y ^ = W [ L ] [ 0.5 0   0 0.5 ] L − 1 X \hat y = W^{[L]}\left[ \begin{array}{l} 0.5 &amp; 0 \\\ 0 &amp; 0.5\end{array} \right]^{L-1}X y^=W[L][0.5 000.5]L1X y ^ \hat y y^的值将指数级递减
这同样适用于导数或梯度函数

神经网络的权重初始化


当激活函数是ReLu的时候 V a r ( w i ) = 2 n Var(w_{i})=\dfrac{2}{n} Var(wi)=n2
当激活函数是tanh的时候 V a r ( w i ) = 1 n Var(w_{i})=\dfrac{1}{n} Var(wi)=n1
如果激活函数的输入特征均值为0 方差是1,z也会调整到相似的范围,这样虽然没有解决梯度消失和梯度爆炸的问题,但延缓了问题出现速度

梯度的数值逼近


单边误差逼近

双边误差逼近
可以看到双边逼近误差0.001比单边逼近误差0.0301要小很多

梯度检验


神经网络有大量的参数,需要将这些参数联结起来,再进行梯度检验

使用双边误差逼近计算近似梯度
使用 ∣ ∣ d θ a p p r o x − d θ ∣ ∣ 2 ∣ ∣ d θ a p p r o x ∣ ∣ 2 + ∣ ∣ d θ ∣ ∣ 2 \dfrac {||d\theta_{approx}-d\theta||_{2}}{||d\theta_{approx}||_{2}+||d\theta||_{2}} dθapprox2+dθ2dθapproxdθ2来判断梯度是否正确

Notes:

  • 不要在训练中使用梯度校验,它只用于调试
  • 如果梯度校验出现错误,要检查每一项去消除错误
  • 记住正则化
  • 不要和dropout一起工作
  • 在随机初始化过程中运行梯度检验
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值