Coursera Deeplearning.ai「深度学习」课程笔记L2.W1深度学习的实践层面

1. 训练、验证、测试集

在机器学习中,我们通常将样本分成训练集,验证集和测试集三部分

  • 数据集规模相对较小(万,数量级),适用传统的划分比例,60%训练,20%验证和 20%测 试集
  • 数据集规模较大的(百万,数量级),验证集和测试集要小于数据总量的 20%或 10%。假设我们有 100 万条数据,其中 1 万条作为验证集,1 万条作为测试集, 100 万里取 1 万,比例是 1%,即:训练集占 98%,验证集和测试集各占 1%。

2. 正则化和Dropout法

  • dropout法(随机失活),即以一定概率保留或消除网络中的节点
  • dropout 的功能类似于?2正则化,与?2正则化不同的是,被应用的方式不同, dropout 也会有所不同,甚至更适用于不同的输入范围。
  • dropout在计算机视觉中应用广泛,由于计算视觉中的输入量非常大,输入太多像素,以至于没有足够的数据,所以一直存在过拟合,
  • dropout 一大缺点就是代价函数 J J J 不再被明确定义
    - 解决方法:通常会关闭 dropout 函数,将 keepprob 的值设为 1,运行代码,确保?函数单调递减。然后打开 dropout 函数,希望在 dropout 过程中,代码并未引入 bug。

3. 梯度检验

假设神经网络中含有下列参数, W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1]…… W [ l ] W^{[l]} W[l] b [ l ] b^{[l]} b[l]

  • 首先把矩阵 W W W转换成一个向量,把所有 W W W矩阵转换成向量之后,做连接运算,得到一个巨型向量 θ \theta θ,得到了 θ \theta θ的代价函数 J J J(即 J ( θ ) J(\theta) J(θ))。
  • 接着,得到与 W W W b b b顺序相同的数据,同样把 d W [ 1 ] dW^{[1]} dW[1] d b [ 1 ] {db}^{[1]} db[1]…… d W [ l ] {dW}^{[l]} dW[l] d b [ l ] {db}^{[l]} db[l]转换成一个新的向量,用它们来初始化大向量 d θ d\theta dθ,它与 θ \theta θ具有相同维度。
  • 循环执行,对每个 i i i也就是对每个 θ \theta θ组成元素计算 d θ approx [ i ] d\theta_{\text{approx}}[i] dθapprox[i]的值,使用双边误差,也就是
    d θ approx [ i ] = J ( θ 1 , θ 2 , … θ i + ε , … ) − J ( θ 1 , θ 2 , … θ i − ε , … ) 2 ε d\theta_{\text{approx}}\left[i \right] = \frac{J\left( \theta_{1},\theta_{2},\ldots\theta_{i} + \varepsilon,\ldots \right) - J\left( \theta_{1},\theta_{2},\ldots\theta_{i} - \varepsilon,\ldots \right)}{2\varepsilon} dθapprox[i]=2εJ(θ1,θ2,θi+ε,)J(θ1,θ2,θiε,)
  • 验证两个向量的接近程度,即 d θ approx d\theta_{\text{approx}} dθapprox d θ d\theta dθ两个向量
    c h e c k :            ∣ ∣ d θ approx − d θ ∣ ∣ 2 ∣ ∣ d θ approx ∣ ∣ 2 + ∣ ∣ d θ ∣ ∣ 2 check:\,\,\,\,\,\,\,\,\,\,\frac{{||d\theta_{\text{approx}} -d\theta||}_{2}}{{||d\theta_{\text{approx}} ||}_{2}+{||d\theta||}_{2}} check:dθapprox2+dθ2dθapproxdθ2
    注意这里( ∣ ∣ d θ approx − d θ ∣ ∣ 2 {||d\theta_{\text{approx}} -d\theta||}_{2} dθapproxdθ2)没有平方,它是误差平方之和,然后求平方根,得到欧式距离,然后用向量长度归一化,使用向量长度的欧几里得范数。
    • 如果它的值为 1 0 − 7 10^{-7} 107或更小,意味着导数逼近很有可能是正确的。
    • 如果它的值在 1 0 − 5 10^{-5} 105范围内,就要小心了,也许这个值没问题,但要再次检查这个向量的所有项,确保没有一项误差过大,可能这里有bug。
    • 如果它的值比 1 0 − 3 10^{-3} 103大很多,这时应该仔细检查所有 θ \theta θ项,看是否有一个具体的 i i i值,使得 d θ approx [ i ] d\theta_{\text{approx}}\left[i \right] dθapprox[i]与$ d\theta[i]$大不相同,并用它来追踪一些求导计算是否正确,经过一些调试,最终结果会是这种非常小的值( 1 0 − 7 10^{-7} 107)才可以认为没问题。

4. 梯度检验应用的注意事项

  • 不要在训练中使用梯度检验,它只用于调试。
  • 如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug。
  • 在实施梯度检验时,如果使用正则化,请注意正则项。如果代价函数 J ( θ ) = 1 m ∑ L ( y ^ ( i ) , y ( i ) ) + λ 2 m ∑ ∣ ∣ W [ l ] ∣ ∣ 2 J(\theta) = \frac{1}{m}\sum_{}^{}{L(\hat y^{(i)},y^{(i)})} + \frac{\lambda}{2m}\sum_{}^{}{||W^{[l]}||}^{2} J(θ)=m1L(y^(i),y(i))+2mλW[l]2,则在检验时需要包含正则项。
  • 梯度检验不能与dropout同时使用。建议关闭dropout,用梯度检验进行双重检查,在没有dropout的情况下,保证算法至少是正确的,然后打开dropout。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值