我是靠谱客的博主 听话薯片,最近开发中收集的这篇文章主要介绍初始化、正则化、梯度校验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初始化、正则化、梯度校验

初始化

我们都知道在神经网络中一开始是需要初始化 W W W b b b的,那么一开始应该选择什么值来初始化会有利于神经网络更快更好地实现它地效果呢?
一个不恰当的表达是,其初始值不应该过大。最合适的有一个如下名称的初始化方法

He initialization

W [ i ] = n p . r a n d o m . r a n d n ( n i , n i − 1 ) ∗ 2 n i − 1 W^{[i]} = np.random.randn(n^i,n^{i-1})*sqrt{frac{2}{n^{i-1}}} W[i]=np.random.randn(ni,ni1)ni12
b [ i ] = n p . z e r o s ( ( n i , 1 ) ) b^{[i]} = np.zeros((n^i, 1)) b[i]=np.zeros((ni,1))

实践出真理,做过吴恩达老师的练习的话,会感受到那种准确率的提升是很大的。

正则化

高偏差:神经网络对训练集的预测准确率不高,如果说人认识一个物体的错误率为0%,而神经网络预测错误率达到十几,就可以说它是高偏差了。

高方差:神经网络预测训练集错误率与预测验证集或测试集错误率相差较远的情况,比如,预测训练集错误率为1%,而预测验证集错误率则达到13%,则可以说其是高方差。

当出现有高偏差时,可以运用增加迭代次数来解决。
高方差时也可以运用增加样本集的方法来解决。

另一个解决高方差的方法就是正则化,比较直观的理解就是通过正则化的调整实现了从高方差向高偏差方向走的现象,而找到在这其中的平衡值就解决了我们的高方差的问题。

常见的正则化方法:
1.就是对 c o s t cost cost加正则项,然后反向传播算出新的 d w dw dw,具体公式如下
J r e g u l a r i z e d = − 1 m ∑ i = 1 m ( y ( i ) log ⁡ ( a [ L ] ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − a [ L ] ( i ) ) ) ⏟ cross-entropy cost + 1 m λ 2 ∑ l ∑ k ∑ j W k , j [ l ] 2 ⏟ L2 regularization cost J_{regularized} = small underbrace{-frac{1}{m} sumlimits_{i = 1}^{m} large{(}small y^{(i)}logleft(a^{[L](i)}right) + (1-y^{(i)})logleft(1- a^{[L](i)}right) large{)} }_text{cross-entropy cost} + underbrace{frac{1}{m} frac{lambda}{2} sumlimits_lsumlimits_ksumlimits_j W_{k,j}^{[l]2} }_text{L2 regularization cost} Jregularized=cross-entropy cost m1i=1m(y(i)log(a[L](i))+(1y(i))log(1a[L](i)))+L2 regularization cost m12λlkjWk,j[l]2

L2 regularization cost 这一部分的意思是
对应到单独一个 W [ i ] W^{[i]} W[i],平方其矩阵中的各元素,再将其各元素相加得出一个数字
对应到多个 W W W时,就是把所有单个的计算结果加起来除以 m m m 2 / λ 2/lambda 2/λ

由于正则化只影响到 d w dw dw,所以 d b db db照原方法计算,而 d w [ i ] dw^{[i]} dw[i]在原计算公式基础上要加上 λ m W [ i ] frac{lambda}{m} W^{[i]} mλW[i]项。

2.Dropout方法
也就是随机删除节点方法。是较常用的正则化方法。
具体实现方式就是造一个形状与 W [ i ] W^{[i]} W[i]相同的由0、1构成的矩阵,其中两者出现比重可以调整,然后用这个矩阵与 W [ i ] W^{[i]} W[i]点乘,就能实现删除一层中一定比例的节点。

假设确定了这么一个随机由1占比为keep_prob构成的矩阵为 D [ i ] D^{[i]} D[i]

则正向传播有公式如下:
A [ i ] = A [ i ] ∗ D [ i ] (1) A^{[i]} = A^{[i]} * D^{[i]} tag{1} A[i]=A[i]D[i](1) A [ i ] = A [ i ] k e e p _ p r o b (2) A^{[i]} = frac{A^{[i]}} {keep_prob} tag{2} A[i]=keep_probA[i](2)
公式2是为了保证删除节点后令 A [ i ] A^{[i]} A[i]的期望不变。个人理解是保证让这一层在删除节点后在整个网络中的效果不变,但让这一层中的各节点对网络的影响更均匀了。

cost公式不变

反向传播公式如下:
d A [ i ] = d A [ i ] ∗ D [ i ] dA^{[i]} = dA^{[i]} * D^{[i]} dA[i]=dA[i]D[i]
d A [ i ] = d A [ i ] k e e p _ p r o b dA^{[i]} = frac{dA{[i]}} {keep_prob} dA[i]=keep_probdA[i]
其他公式不变

梯度校验
根据课程说,这个是调试的方法,具体还没能理解

最后

以上就是听话薯片为你收集整理的初始化、正则化、梯度校验的全部内容,希望文章能够帮你解决初始化、正则化、梯度校验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部