神经网络优化篇:详解其他正则化方法(Other regularization methods)
其他正则化方法
除了\(L2\)正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合:
一.数据扩增
假设正在拟合猫咪图片分类器,如果想通过扩增训练数据来解决过拟合,但扩增数据代价高,而且有时候无法扩增数据,但可以通过添加这类图片来增加训练集。例如,水平翻转图片,并把它添加到训练集。所以现在训练集中有原图,还有翻转后的这张图片,所以通过水平翻转图片,训练集则可以增大一倍,因为训练集有冗余,这虽然不如额外收集一组新图片那么好,但这样做节省了获取更多猫咪图片的花费。
除了水平翻转图片,也可以随意裁剪图片,这张图是把原图旋转并随意放大后裁剪的,仍能辨别出图片中的猫咪。
通过随意翻转和裁剪图片,可以增大数据集,额外生成假训练数据。和全新的,独立的猫咪图片数据相比,这些额外的假的数据无法包含像全新数据那么多的信息,但这么做基本没有花费,代价几乎为零,除了一些对抗性代价。以这种方式扩增算法数据,进而正则化数据集,减少过拟合比较廉价。
像这样人工合成数据的话,要通过算法验证,图片中的猫经过水平翻转之后依然是猫。大家注意,并没有垂直翻转,因为不想上下颠倒图片,也可以随机选取放大后的部分图片,猫可能还在上面。
对于光学字符识别,还可以通过添加数字,随意旋转或扭曲数字来扩增数据,把这些数字添加到训练集,它们仍然是数字。为了方便说明,对字符做了强变形处理,所以数字4看起来是波形的,其实不用对数字4做这么夸张的扭曲,只要轻微的变形就好,做成这样是为了让大家看的更清楚。实际操作的时候,通常对字符做更轻微的变形处理。因为这几个4看起来有点扭曲。所以,数据扩增可作为正则化方法使用,实际功能上也与正则化相似。
二.early stopping
还有另外一种常用的方法叫作early stopping,运行梯度下降时,可以绘制训练误差,或只绘制代价函数\(J\)的优化过程,在训练集上用0-1记录分类误差次数。呈单调下降趋势,如图。
因为在训练过程中,希望训练误差,代价函数\(J\)都在下降,通过early stopping,不但可以绘制上面这些内容,还可以绘制验证集误差,它可以是验证集上的分类误差,或验证集上的代价函数,逻辑损失和对数损失等,会发现,验证集误差通常会先呈下降趋势,然后在某个节点处开始上升,early stopping的作用是,会说,神经网络已经在这个迭代过程中表现得很好了,在此停止训练吧,得到验证集误差,它是怎么发挥作用的?
当还未在神经网络上运行太多迭代过程的时候,参数\(w\)接近0,因为随机初始化\(w\)值时,它的值可能都是较小的随机值,所以在长期训练神经网络之前\(w\)依然很小,在迭代过程和训练过程中\(w\)的值会变得越来越大,比如在这儿,神经网络中参数\(w\)的值已经非常大了,所以early stopping要做就是在中间点停止迭代过程,得到一个\(w\)值中等大小的弗罗贝尼乌斯范数,与\(L2\)正则化相似,选择参数w范数较小的神经网络,但愿的神经网络过度拟合不严重。
术语early stopping代表提早停止训练神经网络,训练神经网络时,有时会用到early stopping,但是它也有一个缺点,来了解一下。
认为机器学习过程包括几个步骤,其中一步是选择一个算法来优化代价函数\(J\),有很多种工具来解决这个问题,如梯度下降,后面会介绍其它算法,例如Momentum,RMSprop和Adam等等,但是优化代价函数\(J\)之后,也不想发生过拟合,也有一些工具可以解决该问题,比如正则化,扩增数据等等。
在机器学习中,超级参数激增,选出可行的算法也变得越来越复杂。发现,如果用一组工具优化代价函数\(J\),机器学习就会变得更简单,在重点优化代价函数\(J\)时,只需要留意\(w\)和\(b\),\(J(w,b)\)的值越小越好,只需要想办法减小这个值,其它的不用关注。然后,预防过拟合还有其他任务,换句话说就是减少方差,这一步用另外一套工具来实现,这个原理有时被称为“正交化”。思路就是在一个时间做一个任务。
但对来说early stopping的主要缺点就是不能独立地处理这两个问题,因为提早停止梯度下降,也就是停止了优化代价函数\(J\),因为现在不再尝试降低代价函数\(J\),所以代价函数\(J\)的值可能不够小,同时又希望不出现过拟合,没有采取不同的方式来解决这两个问题,而是用一种方法同时解决两个问题,这样做的结果是要考虑的东西变得更复杂。
如果不用early stopping,另一种方法就是\(L2\)正则化,训练神经网络的时间就可能很长。发现,这导致超级参数搜索空间更容易分解,也更容易搜索,但是缺点在于,必须尝试很多正则化参数\(\lambda\)的值,这也导致搜索大量\(\lambda\)值的计算代价太高。
Early stopping的优点是,只运行一次梯度下降,可以找出\(w\)的较小值,中间值和较大值,而无需尝试\(L2\)正则化超级参数\(\lambda\)的很多值。
虽然\(L2\)正则化有缺点,可还是有很多人愿意用它。吴恩达老师个人更倾向于使用\(L2\)正则化,尝试许多不同的\(\lambda\)值,假设可以负担大量计算的代价。而使用early stopping也能得到相似结果,还不用尝试这么多\(\lambda\)值。
神经网络优化篇:详解其他正则化方法(Other regularization methods)的更多相关文章
- 【初级】linux rm 命令详解及使用方法实战
rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 【初级】linux pwd 命令详解及使用方法实战
pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...
- 【初级】linux mkdir 命令详解及使用方法实战
mkdir命令详解及使用方法实战 名称 MKDIR 是 make directories 的缩写 使用方法 mkdir [选项(如-p)] ...目录名称(及子目录注意用分隔符隔开)... 如使 ...
- ThinkPHP函数详解:session方法
ThinkPHP函数详解:session方法 Session方法用于Session 设置.获取.删除和管理操作. Session 用于Session 设置.获取.删除和管理操作 用法 sessi ...
- 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权
原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
随机推荐
- 文心一言 VS 讯飞星火 VS chatgpt (89)-- 算法导论8.3 2题
二.用go语言,下面的排序算法中哪些是稳定的:插入排序.归并排序.堆排序和快速排序?给出一个能使任何排序算法都稳定的方法.你所给出的方法带来的额外时间和空间开销是多少? 文心一言: 在Go语言中,以下 ...
- 火山引擎DataLeap的数据血缘用例与设计概述
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 数据血缘描述了数据的来源和去向,以及数据在多个处理过程中的转换.数据血缘是组织内使数据发挥价值的重要基础能力. ...
- GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)
工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...
- WPF中以MVVM方式,实现RTSP视频播放
前言视频播放在上位机开发中经常会遇到,基本上是两种常见的解决方案 1.采用厂家提供的sdk和前端控件进行展示,常见的海康/大华都提供了相关sdk及文档 2.开启相机onvif协议,捅过rtsp视频流进 ...
- c++枚举详细介绍以及具体用法
C++ 中的枚举(Enumeration)是一种用于定义命名常量集合的数据类型.枚举可以提高代码的可读性和可维护性,让您可以使用有意义的名称来表示特定的取值,而不必使用原始的数字常量. 枚举的基本语法 ...
- Ubuntu更新软件的命令
更新软件源 apt-get update 更新升级所有软件 apt-get upgrade 更新某个软件 apt-get upgrade 名 列出可更新的软件 apt list --upgradabl ...
- LVGL双向链表学习笔记
LVGL双向链表学习笔记 1.LVGL链表数据类型分析 对于LVGL双向链表的使用,我们需要关注lv_ll.h和lv_ll.c两个文件,其中lv_ll.h里面包含了链表结构类型定义,以及相关API的声 ...
- 面向生产的 LLM 优化
注意 : 本文同时也是 Transformers 的文档. 以 GPT3/4.Falcon 以及 LLama 为代表的大语言模型 (Large Language Model,LLM) 在处理以人为中心 ...
- js排序算法--冒泡排序
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- tomcat环境
tomcat环境部署时需要先部署JDK工具: JDK环境: #将上传的jdk包进行解压/并移至Java目录下: tar xf jdk1.8.0_131.tar.gz mkdir -p /usr/jav ...