深度学习Bible学习笔记:第七章 深度学习中的正则化
一、正则化介绍
问题:为什么要正则化?
NFL(没有免费的午餐)定理:
没有一种ML算法总是比别的好
好算法和坏算法的期望值相同,甚至最优算法跟随机猜测一样
前提:所有问题等概率出现且同等重要
实际并非如此,具体情况具体分析,把当前问题解决好就行了
不要指望找到放之四海而皆准的万能算法!
方差和偏差:
过拟合与欠拟合:
训练集和测试集
机器学习目标:
特定任务上表现良好的算法
泛化能力强-->验证集上的误差小,训练集上的误差不大(不必追求完美,否则可能会导致过拟合)即可。
如何提升泛化能力:
(1)数据
数据和特征是上限,而模型和算法只是在逼近这个上限而已
预处理:离散化、异常值、缺失值等
特征选择
特征提取:pca
构造新的数据:平移不变性
(2)模型
数据中加入噪音
正则化项:减少泛化误差(非训练误差)
集成方法
几种训练情形:
(1)不管真实数据的生成过程---欠拟合,偏差大
(2)匹配真实数据的生成过程---刚刚好
(3)不止真实数据的生成过程,还包含其他生成过程---过拟合,方差大
正则的目标:
从(3)--->(2),偏差换方差,提升泛化能力
注:
永远不知道训练出来的模型是否包含数据生成过程!
深度学习应用领域极为复杂,图像、语音、文本等,生成过程难以琢磨
事实上,最好的模型总是适当正则化的大型模型
正则化是不要的!!!
XTX不一定可逆(奇异),导致无法求逆(PCA)
解决:加正则,XTX--->XTX+αI(一定可逆),说明:α--阿尔法,I--大写的i,即单位阵。
大多数正则化能保证欠定(不可逆)问题的迭代方法收敛
注:伪逆
二、深度网络正则化
深度网络中的正则化策略有哪些?——传统ML方法的扩展
方法:
增加硬约束(参数范数惩罚):限制参数,如L1,L2
增加软约束(约束范数惩罚):惩罚目标函数
集成方法
其他
约束和惩罚的目的
植入先验知识
偏好简单模型
三、参数范数惩罚
从线性模型说起:
形式:y=Wx+b
W:两变量间的相互作用——重点关注
b:单变量——容易欠拟合,次要
仿射变换=线性变换+平移变换
参数范数惩罚:
通常只惩罚权重W,不管b——b是单变量,且容易过拟合
θ=(W;b)≈(W)
α是惩罚力度,Ω是正则项。
最常见,L2参数范数惩罚:
权重衰减(weight decay)
岭回归,Tikhonov正则
形式:
效果:
正则项Ω挤占原始目标J的空间,逼迫J
权重接近于原点(或任意点)
详细推导过程见P142-P143
L2正则能让算法“感知”到较高方差的输入x
线性缩放每个wi
L1参数范数惩罚:LASSO
形式:
效果:
L1与L2大不一样:线性缩放wi-->增加wi同号的常数
某些wi=0,产生稀疏解,常用于特征选择
除了L1,稀疏解的其他方法?
Student-t先验导出的惩罚
KL散度惩罚
注:不同于L1惩罚参数,惩罚激活单元
约束范数惩罚:
本质:约束问题--> 无约束问题
形式:
参数范数惩罚:
约束范数惩罚:
五、数据增强
提升泛化能力的最好办法:
数据增强:创造假数据
方法:
(1)数据造假:平移、旋转、缩放——不能改变类别
图像,语音
(2)注入噪声
输入层≈权重参数惩罚
隐含层:去噪编码器、dropout
权重:RNN
输出层:标签平滑(反例)
softmax永远无法真正预测0或1,需要做平滑,防止走极端
噪声鲁棒性:
注入噪声远比简单收缩参数强大,特别是加入隐含层
六、早停止
问题
随着时间推移,训练集误差逐渐减少,而验证集误差再次上升
能不能在转折点处提前终止呢?
早停止
当验证集误差在指定步数内没有改进,就停止
有效,简单,高效的超参选择算法
训练步数是唯一跑一次就能尝试很多值的超参
第二轮训练策略(验证集)
(1)再次初始化模型,使用所有数据再次训练
使用第一轮步数
(2)保持第一轮参数,使用全部数据继续训练
避免重新训练高成本,但表现没那么好,不保证终止
早停止为何有正则化效果?
表象:验证集误差曲线呈U型
本质:将参数空间限制在初始参数θ0的小邻域内(εt)
εt等效于权重衰减系数的倒数
相当于L2正则,但更具优势
自动确定正则化的正确量
七、参数绑定和参数共享
参数范数惩罚:
对偏离0(或固定区域)的参数进行惩罚,使用参数彼此接近
一种方式,还有吗?
参数共享:
强迫某些参数相等
优势:只有参数子集需要存储,节省内存。如CNN
八、集成方法
集成方法:
集合几个模型降低泛化误差的技术
模型平均:强大可靠
kaggle比赛中前三甲基本都是集成方法
Bagging:
有放回抽样,覆盖2/3
多个网络的集成
偏差换方差
Boosting:
单个网络的集成
方差换偏差
Dropout:
集成大量深层网络的bagging方法
多个弱模型组成一个强模型
施加到隐含层的掩掩码噪声
一般5-10个网络,太多会很难处理
示例:
2个输入,1个输出,2个隐含层
一共24=64种情形
问题:大部分没有输入,输入到输出的路径
网络越宽,这种问题概率越来越小
注:
不同于bagging,模型独立
dropout所有模型共享参数
推断:对所有成员累计投票做预测
效果:
Dropout比其他标准正则化方法更有效
权重衰减、过滤器范数约束、稀疏激活
可以跟其他形式正则一起使用
优点:
计算量小
不限制模型和训练过程
注:
随机性对dropout方法不必要,也不充分
九、对抗训练
人类不易察觉对抗样本与原始样本的差异,但网络可以
小扰动导致数据点流行变化
再次附上:
深度学习Bible学习笔记:第七章 深度学习中的正则化的更多相关文章
- Programming In Scala笔记-第七章、Scala中的控制结构
所谓的内建控制结构是指编程语言中可以使用的一些代码控制语法,如Scala中的if, while, for, try, match, 以及函数调用等.需要注意的是,Scala几乎所有的内建控制结构都会返 ...
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- Android群英传笔记——第七章:Android动画机制和使用技巧
Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- o'Reill的SVG精髓(第二版)学习笔记——第七章
第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...
- C++ primer plus读书笔记——第2章 开始学习C++
第2章 开始学习C++ 1. endl确保程序继续运行前刷新输出(将其立即显示在屏幕上),而使用"\n"不提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示. ...
- Getting Started With Hazelcast 读书笔记(第七章)
第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...
- 《图解HTTP》阅读笔记--第七章---确保WEB安全的HTTPS
第七章.确保WEB安全的HTTPSHTTP的缺点:通信使用明文(不加密),内容可能会被窃听 解决---加密处理: //将通信加密 :通过SSL(安全套接层)---HTTPS(超文本传输安全协议)--- ...
- GAN实战笔记——第七章半监督生成对抗网络(SGAN)
半监督生成对抗网络 一.SGAN简介 半监督学习(semi-supervised learning)是GAN在实际应用中最有前途的领域之一,与监督学习(数据集中的每个样本有一个标签)和无监督学习(不使 ...
随机推荐
- Hadoop基础-完全分布式模式部署yarn日志聚集功能
Hadoop基础-完全分布式模式部署yarn日志聚集功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实我们不用配置也可以在服务器后台通过命令行的形式查看相应的日志,但为了更方 ...
- bash变量详解
bash变量详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大家都知道Shell是一门脚本语言,脚本语言的最好的优点就是我们写的代码不需要编辑就可以直接运行,当然你也可以把它归 ...
- socket技术详解(看清socket编程)
socket编程是网络常用的编程,我们通过在网络中创建socket关键字来实现网络间的通信,通过收集大量的资料,通过这一章节,充分的了解socket编程,文章用引用了大量大神的分析,加上自己的理解,做 ...
- Windows服务BAT命令-安装、卸载、启动、停止
1.安装服务 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WiseMES\MES.WindowsService ...
- Windows 上安装 Redis 及可能出现的错误和解决方法!
前言 Redis(REmote Dictionary Server) 是一种以key-value写得存储系统.他是开源的ANSI语言编写的.遵守BSD协议.被称作“数据结构服务器”,因为它的值(val ...
- 51NOD-1486 大大走格子
有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数. Input 单组测试数据. 第一行有三个整数h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 20 ...
- jQuery基础 (一)——样式篇(jQuery选择器)
一.选择器类型 id选择器 class选择器 元素选择器 层级选择器 全选择器(*选择器) 二.有几种方式可以隐藏一个元素: CSS display的值是none. type="hidden ...
- Centos下新建用户及修改用户目录
Centos下新建用户及修改用户目录 Hillgo 关注 2015.09.22 01:32* 字数 154 阅读 3492评论 0喜欢 3 添加及删除用户 添加用户 test: adduser tes ...
- Mybatis中的StatementType
原文:http://luoyu-ds.iteye.com/blog/1517607 要实现动态传入表名.列名,需要做如下修改 添加属性statementType=”STATEMENT” 同时sql里的 ...
- IO流总结笔记一
IO流继承关系图 IO概述 IO流是用来处理设备上数据的输入输出. 具体设备有:硬盘,内存,键盘录入等等. IO流的具体分类: 1,根据处理的数据类型不同分为:字节流和字符流,字节流读取的最小单位 ...