吴恩达《深度学习》笔记二——改善神经网络

writed by changfei_lovelife~

改善神经网络:正则化、优化算法、超参数调试

让神经网络表现良好
加快训练
吴恩达《深度学习》笔记二——改善神经网络

第一部分 正则化

1.偏差与方差:
训练集误差与最优误差的差值——>偏差,过大时欠拟合
验证集误差与训练集误差的差值——>方差,过大时过拟合
解决偏差与方差的流程图:
吴恩达《深度学习》笔记二——改善神经网络
2.L2正则化:
本质:在损失函数中添加正则项,改变dw值
逻辑回归实现正则化:
吴恩达《深度学习》笔记二——改善神经网络
神经网络实现正则化:
吴恩达《深度学习》笔记二——改善神经网络
正则化实现梯度下降:
吴恩达《深度学习》笔记二——改善神经网络
其中:||W||^2——>导数:2W
吴恩达《深度学习》笔记二——改善神经网络
正则化预防过拟合:
1.当lamda足够大,W接近于0,直观理解就是把许多隐藏单元权重设置为0,消除了这些隐藏单元的影响,网络变小,抑制过拟合。
2.z[l]=w[l]a[l-1]+b[l],z过小,此时位于**函数的线性段,当每层都是线性段时,整个网络类似于一个线性网络,抑制过拟合。
3.dropout正则化:
思路:
1.dropout遍历每一层,设置消除神经网络中节点的概率
2.消除一些节点,删掉从该节点进出的连线
3.得到一个节点更少、规模更小的网络,用backprop训练
方法:
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络
其中:d3表示第三层保留某个隐藏单元的概率
理解dropout:
由于每个节点都可能被删除,因此不会给一个权重太多权重,所以权重实现传播,dropout产生权重收缩的效果。
Keep-prob代表单元保留的概率,每一层Keep-prob值可能不同。
代价函数J不能明确定义,前向计算J时需要关闭dropout函数,运行代码,确保J递减。
4.归一化输入:
归一化输入两个步骤:
1.零均值
2.归一化方差
吴恩达《深度学习》笔记二——改善神经网络
归一化特征,代价函数更对称,加快训练
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络
5.梯度消失与爆炸&权重初始化:
**函数值与梯度值可能以指数级下降或增长,与网络层数L有关。
不完美的解决方案:随机初始化参数
6.梯度检验:
目的:发现backprop实施过程中是否存在bug
步骤:
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络

第二部分 优化算法

优化算法可以提高神经网络的训练效率
1.Mini-batch梯度下降法
若采用batch梯度下降法,需要遍历整个数据集,进行一次梯度下降,训练速度慢。
解决方法:
可以把训练集分成小的子集mini-batch,每次处理单个子集X{t},Y{t}
吴恩达《深度学习》笔记二——改善神经网络
Code:
吴恩达《深度学习》笔记二——改善神经网络
使用batch梯度下降法,一次遍历训练集只能做一个梯度下降。使用Mini-batch梯度下降法,一次遍历训练集,能做5000个梯度下降。
在做成本函数J的图时,走向朝下,但存在更多的噪声:
吴恩达《深度学习》笔记二——改善神经网络
mini-batch的大小:2的n次方,64到512
数据集较小时直接使用batch梯度下降法
2.指数加权平均数
吴恩达《深度学习》笔记二——改善神经网络
计算时vt大概是前1/(1-beta)的平均值
考虑到v1,v2…前面值较低,需偏差修正,vt/(1-beta^t)
3.动量梯度下降法
基本想法:计算梯度的指数加权平均数,并以此更新权重
吴恩达《深度学习》笔记二——改善神经网络
分析损失函数下降图,希望:纵轴减缓摆动,横轴加快学习。因此,使用梯度的指数加权平均数,纵轴平均值接近于0,横轴平均值较大。
Code:
吴恩达《深度学习》笔记二——改善神经网络
4.加速梯度下降法(RMSprop)
计算Sdw,Sdb代替dw,db:
吴恩达《深度学习》笔记二——改善神经网络
由于垂直方向的微分要比水平方向的大,所以采用Sdw,Sdb可以减缓纵轴的变化,消除摆动;横轴方向上加快学习。
b,w并不一定是纵轴和横轴,这里只是方便展示。
5.Adam优化算法
将Momentum和RMSprop结合:
吴恩达《深度学习》笔记二——改善神经网络
超参数选择:
吴恩达《深度学习》笔记二——改善神经网络
6.学习率衰减
实际过程中,若学习率固定,算法在最小值附加摆动。
吴恩达《深度学习》笔记二——改善神经网络
当学习率变小时,最终会在更小的区域摆动。
吴恩达《深度学习》笔记二——改善神经网络
7.局部最优问题
在高维度空间下,困在局部解的几率非常小,可能遇到鞍点(梯度也为0),但不会困在鞍点,因为鞍点不是最小点。
吴恩达《深度学习》笔记二——改善神经网络
总结:
吴恩达《深度学习》笔记二——改善神经网络

第三部分 超参调试、Batch正则化

1.超参调试
涉及的超参数
吴恩达《深度学习》笔记二——改善神经网络
调试方法:
1.随机选择点2.由粗糙到精确
超参合适范围:随即取值并不是在有效范围内随机均匀取值,而是选择合适的标尺:
1.学习率
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络
2.Momentum参数
吴恩达《深度学习》笔记二——改善神经网络
2.Batch归一化
为了加快隐藏层参数的训练,需要归一化隐藏层的输入,实际上归一化的不是a值,而是z值。
batch归一化的作用是归一化过程不仅适用输入层,同样适用于神经网络中的深度隐藏层。batch归一化通过参数yama和beta,使得归一化的隐藏单元值不一定是平均值为0和方差为1。
batch归一化实现:
吴恩达《深度学习》笔记二——改善神经网络
3.BN拟合到神经网络中
BN发生在z和a之间:
吴恩达《深度学习》笔记二——改善神经网络
此时需要计算beta和yama的梯度:
吴恩达《深度学习》笔记二——改善神经网络
Batch归一化通常和mini-batch一起使用:
此时参数b[l]可以去除,因为该值在归一化中会被消掉。
吴恩达《深度学习》笔记二——改善神经网络
Batch归一化减少了输入值改变的问题,从而减弱了前层参数与后层参数的联系,使每一层稍微对立于其他层,加速整个网络的学习。
4.Softmax回归
对于输入数据,其输出是多个标签中的一个,不再是二分类问题。
吴恩达《深度学习》笔记二——改善神经网络
yh是一个[C,1]的向量,因此需要用到softmax层以及输出层输出。
吴恩达《深度学习》笔记二——改善神经网络
训练带softmax输出层的神经网络:
损失函数:
吴恩达《深度学习》笔记二——改善神经网络
吴恩达《深度学习》笔记二——改善神经网络
反向传播时:
dz[L]=yh-y

第四部分 扩展的概念

1.深度学习框架:提供一系列库函数,便于搭建神经网络
2.训练验证数据集不匹配时
训练集误差-最优误差—>可避免偏差
训练验证集误差-训练集误差—>方差
验证集误差-训练验证集误差—>数据不匹配
3.迁移学习:神经网络可以从一个任务中学习知识,并将这些知识应用到另一个独立的任务中。
4.多任务学习:试图让单个神经网络同时做几件事情,例如自动驾驶中,NN识别一张图中多个事物。
5.端到端学习:忽略中间阶段,用单个神经网络代替它,需要大量数据才能让系统表现良好。
以人脸识别和自动驾驶为例,需要多步方法(非端对端)。