Deeplearning.ai学习笔记-改善深层神经网络(一)
Applied ML is a highliy iterative process.
应用型机器学习是一个高度的迭代过程。
前言
这次学习的主题是深度学习,学习的第一门课程就是吴恩达的Deeplearning.ai项目课程。此系列笔记也是根据该深度学习课程整理而成。
该系列笔记是该课程中重点知识的罗列和自己的一些理解,可供正在学习此课程的同学作为参考,也是方便自己日后复习使用。
学习本课程需要有一点python基础、懂得Numpy库的基础使用,有高中的数学基础、懂得一点点矩阵、向量知识大致就可以了。这些知识可以到吴恩达的机器学习课程学习。
关于本篇笔记:这篇笔记是深度学习课程中第二课《改善深层神经网络》的第一篇笔记,主要是一些知识和提升神经网络速度的方法
深度学习知识
梯度消失、梯度爆炸
在深层次的神经网络中,可能因为w的权重全部或大部分大于1或小于1使得传递过去的值不停的呈指数级增加或减少,从而出现梯度消失、梯度爆炸的情况。
梯度检验
梯度检验只用与debug时
对于那些参数如w、b的偏导数
在用梯度下降时有时要判断dw是否正确,用梯度检验的方法。
梯度检验其实就是用导数的定义来解:
计算这个结果是否等于dw
Softmax
softmax是一个多分类的线性分类器
softmax输出层有k个节点,每个节点对应一个分类,每个节点输出的是概率值,根据输出层中概率值最大的节点来决定属于哪个分类。
Softmax**函数:
(k是输出层的节点个数)
实例:
如何计算softmax的损失函数:
对于一些不同的输出层:比如softmax,就需要重新设置代价函数
Bias/Variance
偏差、方差权衡问题易学难精!很重要!
偏差->导致欠拟合
方差->导致过拟合
首先(Train set error)训练集误差:根据最优误差(目前的理想的误差大小)来判断训练集误差,训练集误差接近最优误差则low偏差,若训练集误差较大则high偏差
然后
然后(Dev set error)验证集误差:如果验证集误差接近训练集误差,则low方差,反之,high方差。
偏差高肯定不行;偏差低不一定行,还要控制方差低
也就是说:
欠拟合肯定不行;但不欠拟合也不一定行,还要控制不能过拟合
如果发生训练集很好的拟合,但是测试急误差高,就是发生了过拟合,这种情况下因为之前的训练集已经没有价值,所以一般有以下几种方法:
- 正则化
- 准备更多的其他数据
- 换一种其他学习算法
提升神经网络训练速度
归一化特征值
将各个特征值尽量的在一个较小的区间内移动,如果分布太过分散会导致在用梯度下降等算法时迭代次数过多,导致训练时间很长。
归一化特征值分为两步:
- 零均值化。将所有特征值化到-1~1之间
先求出特征值的平均值,再减去平均值得到第二个图
-
归一化方差
注意此时的平均值已经是0,所以方差可以写为
得到第三个图
哪个维度过度分散,想要归一化哪个维度,i就写哪个维度。
Batch Norm
Batch归一化用来归一Z的值,虽然与归一化特征值类似,但batch norm不仅仅是零均值化、统一方差,而且可以自定义均值和方差。所以也就添加了\gamma和\beta两个参数。
这个归一化过程发生在节点的两个方程计算中间。
PS:如果使用归一化Batch,其实参数b就可以去掉,因为自定义均值化时b的作用已经消失了。(b就是改变了z的均值)
作用:可以使神经网络的稳定性更高。如果在k层进行归一化,可以使k层的数值保持相对稳定,相对独立于其他层;因为即使前面层的参数有所变化,k层的均值和方差也不会改变。
归一化过程必须在训练和测试中同时使用。训练集中的均值和方差是根据整个mini-batch,而测试集中的均值和方差是根据指数加权计算的。