吴恩达神经网络和深度学习课程自学笔记(五)之深度学习实用层面

来源:互联网 发布:电信运营商的网络架构 编辑:程序博客网 时间:2024/05/19 16:50

数据集

数据集一般分为三部分,分别为训练集,验证集以及测试集。训练集用于训练模型;验证集验证哪种算法更高效;测试集评估预测结果。
针对数据集大小不同,三部分所占比例有所不同:
这里写图片描述
tip1:我们需要确保验证集和测试集来自于同一分布,因为这样算法可以运行得很快。
tip2:无测试集也可以,此时验证集称为测试集。此计适用于不需要无偏差评估算法的情况。

偏差和方差

测试误差=偏差+方差。
偏差(bias)描述的是根据样本拟合出的模型的输出预测结果的期望与样本真实结果的差距,简单讲,就是在样本上拟合的好不好。偏差越高,拟合的越不好。偏差太低容易过拟合。
方差(variance)描述的是样本上训练出来的模型在测试集上的表现。方差太低就要简化模型,减少模型的参数,这样容易欠拟合;方差太高容易过拟合。
这里写图片描述
根据训练集误差和测试集误差可以判断偏差和方差的高低:
这里写图片描述
实际中优化偏差和方差的方法:
这里写图片描述

正则化

正则化作用:避免过拟合,减少网络误差。

逻辑回归函数中的正则化:
这里写图片描述
式子后面不加 b 正则化项:
w 是一个高维度参数,含有足够多参数,加不加 b 正则化项无影响。
另外:
这里写图片描述
此时,w 是稀疏的(w 向量中含有很多0)。
参数选择:
这里写图片描述 : 验证集交叉验证,以找到最优;w 等参数一般选择较小的,可以避免过拟合。
Tip : python中用lambd 来代替 lambda (正则化参数),因为python中 lambda 是保留字。

神经网络中的正则化:
这里写图片描述
弗罗贝尼乌斯范数(用F 表示):
这里写图片描述
权重缩减:
这里写图片描述
加入正则化之后:
这里写图片描述
此时,w^[l] 的系数小于1,所以称为权重衰减。

为何正则化可以减少过拟合

这里写图片描述足够大时,这里写图片描述接近于0。即把多层隐藏单元的权重设置为0,则隐藏单元的影响可以忽略不计。
这里写图片描述
神经网络不够大,但足够深。
另外:
这里写图片描述
z 很小时,激活函数近似为线性,不会发生过拟合。
这里写图片描述
Tip:梯度下降时,需使用加入正则化的 J(w,b) 函数,否则看不到递减情况。
这里写图片描述

dropout(随机失活)正则化

原理:
有一个神经网络存在过拟合,dropout则复制该网络,遍历网络的每一层,并设置消除神经网络中节点的概率。
这里写图片描述
假设该网络每个节点保留和消除的概率为0.5 。之后消除一些节点及连线,得到一个小的网络。
dropout方法:
L = 3———————————–神经网络层数
d3 = np.random.rand(a3.shape[0],a3.shape[1]) < keep-prob = 0.8 (保留某个单元的概率)——决定第3层中哪些单元归零
a3 = np.multply(a3,d3)—————-a3,d3相乘
//python实现,d3为希尔类型。
a3 = a3/keep-prob——————-确保 a3 的期望值不变 (反向随机失活方法)

不同训练样本,清除不同的隐藏单元也不同。
每次训练梯度不同,则随机对不同单元归零。
测试阶段不使用dropout,否则预测会受到干扰。

进一步理解dropout

(1)每次迭代神经网络变小,使用小的神经网络和正则化效果差不多。
(2)不能依靠任何特征(有可能被删除),因此不得不传播权重,之后将产生收缩权重的平方范数的效果,类似于L2正则化。
应用技巧:
(1)不同层的keep-prob可以不同。对于过拟合可能性较大的层,参数较多的层,该值小点;反之,则大点。
这里写图片描述
缺点:使用交叉验证,需搜索更多的超级参数。
(2)有的层应用dropout,有的不用。
(3)多应用于计算机视觉,只在过拟合时使用。
(4)一般先关闭dropout函数,将keep-prob设为1,确保J(w,b)递减。然后打开dropout函数。

其他正则化方法

(1)数据扩增:例如图片左右对称、放大剪切、旋转等;文字形状稍微改变下。
这里写图片描述
(2)early stopping :提前停止训练神经网络。
A : 优化代价函数 J 直至最优。
B : 不出现过拟合
一段时间只完成一部分(两段时间,A和B)
这里写图片描述
优点:只需一次梯度下降就可以找到 w 较少值,中间值,较大值。
缺点:不能同时解决这两个问题。

加速训练的方法,技巧

(1)正则化输入
这里写图片描述
为何归一化:
这里写图片描述
Tip :当输入特征不在一个范围时(如有的属于0-1,有的1-1000),则需归一化处理,以使学习算法执行更有效。如果特征值处于相似范围内,则不需要归一化。进行归一化并没有什么坏处。
(2)梯度消失(坡度很小)和梯度爆炸(坡度很大)
对于一个神经网络:
这里写图片描述
有:
这里写图片描述
若:
这里写图片描述
即:当 w^[l] > 1 ,神经网络的激活函数将指数式增长;反之,将指数式减小。
因此选择参数 w 时,比1大一点点或比1小一点点即可。
(3)权重初始化
对于单个神经元:
这里写图片描述
这里写图片描述
(4)梯度的数值逼近
这里写图片描述
(5)梯度检验
用于检验 backprop 的实施是否正确。
这里写图片描述
这里写图片描述
若 a = 0.0000001———很好
若 a = 0.00001————不太好
若 a = 0.001—————可能存在bug

实现梯度检验的实用技巧和注意事项:
(1):首先不要在训练中使用梯度检验,只用于调试。
(2):若梯度检验出错,则检查每一项以找到bug。查找不同的i,看看哪个 i 使两者相差较大。
(3):实施梯度检验时,若使用正则化,则注意正则化项。
(4):不能与dropout同时使用。
(5):初始化过程中,运行梯度检验,然后再训练网络。当w,b接近于0时,梯度下降才是正确的;w,b变大时,越来越不正确。

阅读全文
0 0