深度学习笔记(7) 实践层面(二)

  • 1. 正则化
  • 2. dropout 正则化
  • 3. 其他正则化方法

1. 正则化

深度学习可能存在过拟合问题——高方差,在确定模型之后有两个解决方法

  1. 正则化
  2. 准备更多的数据

但可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高
正则化通常有助于避免过拟合或减少网络误差
用逻辑回归来实现这些设想,求成本函数J的最小值,参数包含一些训练数据和不同数据中个体预测的损失
w和b是逻辑回归的两个参数,w是一个多维度参数矢量,b是一个实数

在逻辑回归函数中加入正则化,只需添加参数λ,也就是正则化参数
λ/2m 乘以w范数的平方,w 欧几里德范数 的平方等于wj(j 值从1到nx)平方的和,也可表示为wTw
因为用了欧几里德法线,被称为向量参数w的L2范数,此方法称为L2正则化

w几乎涵盖所有参数,如果加了参数b,其实也没太大影响,因为b只是众多参数中的一个,所以通常省略不计

在Python中,λ是一个保留字段,编写代码时,删掉a,写成 lambd,以免与Python中的保留字段冲突

神经网络含有一个成本函数,该函数包含W([1]),b([1])到W([l]),b([l])所有参数,字母L是神经网络所含的层数
正则项为:

这个矩阵范数 |W[l] |2(即平方范数),被定义为矩阵中所有元素的平方求和

在权重更新时:w=w−adww=w-adww=w−adw
dwdwdw来自backprop中J对W的偏导数,可以看到

正则化参数λ系数小于1,因此L2范数正则化也被称为“权重衰减
直观上理解就是
如果正则化λ设置得足够大,权重矩阵W被设置为接近于0的值
直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响
这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元

可是深度却很大,会使这个网络从过度拟合的状态更接近高偏差状态
但是λ会存在一个中间值,于是会有一个接近“Just Right”的中间状态
直观上λ增加到足够大,W会接近于0

实际上是不会发生这种情况的,尝试消除或至少减少许多隐藏单元的影响
最终这个网络会变得更简单
这个神经网络越来越接近逻辑回归,直觉上认为大量隐藏单元被完全消除了

其实不然,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了
神经网络变得更简单了,貌似这样更不容易发生过拟合

若正则化参数λ很大,激活函数的参数w会相对较小,因为代价函数中的参数变大了,
所以相对来说,z也会很小,这个激活函数,也就是曲线函数tanh会相对呈线性
这个线性函数非常简单,并不是一个极复杂的高度非线性函数,不会发生过拟合

如果每层都是线性的,那么整个网络就是一个线性网络
即使是一个非常深的深层网络,因具有线性激活函数的特征,最终只能计算线性函数
因此,它不适用于非常复杂的决策,以及过度拟合数据集的非线性决策边界


2. dropout 正则化

除了L2正则化,还有一个非常实用的正则化方法——“Dropout(随机失活)


dropout会遍历网络的每一层,并设置消除神经网络中节点的概率,假设网络中的每一层,每个节点都以抛硬币的方式设置概率,每个节点得以保留和消除的概率都是0.5,设置完节点概率,会消除一些节点,然后删除掉从该节点进出的连线,最后得到一个节点更少,规模更小的网络再进行训练

最常用实施dropout的方法:inverted dropout(反向随机失活)
以一个三层网络为例,要定义向量d,d[3] 表示一个三层的dropout向量:
d3 = np.random.rand(a3.shape[0],a3.shape[1])

看它是否小于某数,称之为 keep-prob,keep-prob是一个具体数字
本例中它是0.8,它表示保留某个隐藏单元的概率
此处 keep-prob = 0.8,则消除任意一个隐藏单元的概率是0.2

此时的a[3] 等于原来的的a[3] 乘以d[3]a3 = np.multiply(a3,d3)
这里是元素相乘,也可写为 a3 * = d3
用python实现该算法的话,d[3] 则是一个布尔型数组,值为 truefalse

假设第三隐藏层上有50个单元或50个神经元,在一维上a[3] 是50
通过因子分解将它拆分成50×m维的,保留和删除它们的概率分别为80%和20%
则最后被删除或归零的单元平均有10

而z[4] ,z[4] = w[4] a[3] +b[4] ,预期是a[3] 减少20%,也就是说a[3] 中有20%的元素被归
为了不影响z[4] 的期望值,向外扩展a[3]
需要用a[3] /0.8,或者除以 keep-prop 参数,它将会修正或弥补所需的那20%,a[3] 的期望值不会变
反向随机失活(inverted dropout)方法通过除以 keep-prop ,确保 a[3] 的期望值不变

不能依靠任何特征,因为特征都有可能被随机清除,或者说该单元的输入也都可能被随机清除。不愿意把所有赌注都放在一个节点上,不愿意给任何一个输入加上太多权重,因此该单元将通过这种方式积极地传播开,并为单元的输入增加一点权重,通过传播所有权重, dropout 将产生收缩权重的平方范数的效果,降低每个特征的关联性,增强泛化性

keep-prop 设置为1,那么就不存在 dropout ,因为会保留所有节点。不同层的 keep-prop 也可以变化,对于有可能出现过拟合,且含有诸多参数的层,可以把 keep-prop 设置成比较小的值,以便应用更强大的 dropout
dropout 一大缺点:代价函数J不再被明确定义,每次迭代都会随机移除一些节点,很难进行复查梯度下降的性能


3. 其他正则化方法

  • 数据扩增
    假设正在拟合猫咪图片分类器,如果想通过扩增训练数据来解决过拟合
    但扩增数据代价高,而且有时候无法扩增数据
    但可以通过随意翻转和随意裁剪图片来增加训练集
    这么做基本没有花费,除了一些对抗性代价
    以这种方式扩增算法数据,进而正则化数据集,减少过拟合较廉价

    对于光学字符识别,还可以通过添加数字,随意旋转或扭曲数字来扩增数据,把这些数字添加到训练集
    为了方便说明,对字符做了强变形处理,所以数字4看起来是波形的,其实不用对数字4做这么夸张的扭曲

  • early stopping
    当还未在神经网络上运行太多迭代过程的时候,参数w接近0
    因为随机初始化w值时,它的值可能都是较小的随机值
    所以在长期训练神经网络之前w依然很小,在迭代过程和训练过程中w的值会变得越来越大

    比如在这儿,神经网络中参数w的值已经非常大了
    所以early stopping要做就是在中间点停止迭代过程
    优点:只运行一次梯度下降,可以找出w的较小值,中间值和较大值,而无需尝试L2正则化超级参数λ的很多值
    主要缺点:不能独立地处理这两个问题,因为提早停止梯度下降,也就是停止了优化代价函数J
    因为现在不再尝试降低代价函数J,所以代价函数J的值可能不够小
    同时又希望不出现过拟合,没有采取不同的方式来解决这两个问题,而是用一种方法同时解决两个问题


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(6) 实践层面(一)
深度学习笔记(5) 深层神经网络
深度学习笔记(4) 浅层神经网络
深度学习笔记(3) 向量化逻辑回归
深度学习笔记(2) 神经网络基础


谢谢!

深度学习笔记(7) 实践层面(二)相关推荐

  1. 2021-07-14 深度学习基础与实践(二)

    深度学习基础与实践(二) 一.分类及其性能度量 1.分类问题 2.分类性能度量 (1)准确率 (2)精确率和召回率 (3)P-R曲线 (4)F值 (5)ROC曲线 3.分类性能可视化 (1)混淆矩阵的 ...

  2. 深度学习笔记(四十二)不同类型RNN结构以及语言模型和序列生成

    一.不同类型的RNN 在序列化问题中,有很多类型,比如:输入输出等长,输入输出不等长,输出为整型值等等.那么就有不同的RNN结构来处理不同的问题,这里参考了一篇文章<The Unreasonab ...

  3. 深度学习笔记(8) 实践层面(三)

    深度学习笔记(8) 实践层面(三) 1. 归一化 / 标准化输入 2. 权重初始化 3. 梯度检验 1. 归一化 / 标准化输入 训练神经网络,特征必须要在0到1之间 此时就只能加速训练的方法就是归一 ...

  4. 深度学习笔记(6) 实践层面(一)

    深度学习笔记(6) 实践层面(一) 1. 训练,验证,测试集 2. 偏差,方差 3. 学习曲线 1. 训练,验证,测试集 训练神经网络时,需要做出很多决策,例如: 神经网络分多少层:每层含有多少个隐藏 ...

  5. 深度学习笔记(二)图像分类实践

    深度学习笔记(二)图像分类实践 使用keras中的ResNet模型进行图像处理记忆预测 import keras #import tensorflow from keras.applications. ...

  6. 深度学习笔记(10) 优化算法(二)

    深度学习笔记(10) 优化算法(二) 1. Adam 优化算法 2. 学习率衰减 3. 局部最优的问题 1. Adam 优化算法 Adam代表的是 Adaptive Moment Estimation ...

  7. 深度学习笔记(17) 误差分析(二)

    深度学习笔记(17) 误差分析(二) 1. 使用来自不同分布的数据进行误差分析 2. 数据分布不匹配时的偏差与方差 3. 处理数据不匹配问题 1. 使用来自不同分布的数据进行误差分析 越来越多的团队都 ...

  8. 神经网络与深度学习笔记汇总二

    神经网络与深度学习笔记汇总二 正交化(方便调整参数) 迭代 单实数评估指标(判断几种手段/方法哪个更好) 指标选取 训练集.开发集.测试集作用与用途 评估指标 判断算法是好是坏 迁移学习 总结 往期回 ...

  9. 深度学习笔记(45) 人脸验证与二分类

    深度学习笔记(45) 人脸验证与二分类 1. 二分类问题 2. 逻辑回归单元的处理 3. 计算技巧 1. 二分类问题 深度学习笔记(44) Triplet 损失 的Triplet loss是一个学习人 ...

最新文章

  1. 学习新对象字面量语法
  2. poj1654 Area
  3. 为什么B+树比B树更适合做数据库索引
  4. 拓端tecdat|R语言使用ARIMA模型预测股票收益时间序列
  5. 奇妙“水仙花数”的判断
  6. Servlet 身份验证体系结构(源码)
  7. kindle电子书200G分享
  8. 路由器间歇性断网,而且不重启路由器不会自动恢复的问题
  9. 什么是QT(轻松的帮你做带界面的软件)
  10. win10 搜索本地应用没反应,Cortana显示已挂起 的解决办法
  11. python3.7爬虫
  12. 安卓动画之ObjectAnimator
  13. ArcMap出图小技巧:图例,比例尺,指北针,标题(附练习数据)
  14. 百度地图获取地区/省市县json地图区域数据
  15. 你在自学软件测试吗?学软件测试10本必看书
  16. 新浪财经新闻爬取并进行舆情分析
  17. python modis数据拼接_Python批处理MODIS_NDVI数据
  18. ask2在线问答解惑系统网站源码
  19. HP磁带库LTO-4硬件加密测试
  20. C语言串口编程教程PDF

热门文章

  1. asp.net 中RadioButtonList的选项改变事件处理(采用jquery操作)
  2. JavaSE基础笔记十二
  3. 跨平台的报表生成器控件Stimulsoft Reports.Fx for Flex
  4. PHP选项、信息函数(转)
  5. asp.net MVC 验证错误信息本地化
  6. 2013年新年礼物---CrossFPC 终于出来了
  7. 算法题库 java实现_LeetCode算法题-Most Common Word(Java实现)
  8. linux按照mysql为何如此简单_手把手教你在Linux下安装MySQL
  9. Java集合系列---Collection源码解析及整体框架结构
  10. php 检测死锁,MySQL 死锁检测