其他正则化方法

除了\(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\),有很多种工具来解决这个问题,如梯度下降,后面会介绍其它算法,例如MomentumRMSpropAdam等等,但是优化代价函数\(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)的更多相关文章

  1. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

  2. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  3. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  4. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  5. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  6. 【初级】linux pwd 命令详解及使用方法实战

    pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...

  7. 【初级】linux mkdir 命令详解及使用方法实战

    mkdir命令详解及使用方法实战 名称 MKDIR 是 make directories 的缩写 使用方法 mkdir [选项(如-p)] ...目录名称(及子目录注意用分隔符隔开)...    如使 ...

  8. ThinkPHP函数详解:session方法

    ThinkPHP函数详解:session方法 Session方法用于Session 设置.获取.删除和管理操作. Session 用于Session 设置.获取.删除和管理操作 用法    sessi ...

  9. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  10. tomcat常用配置详解和优化方法

    tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...

随机推荐

  1. 云上的甜蜜早安:腾讯云云函数助力PHP打造女友专属每日推送

    用腾讯云的云函数做一个微信公众号早安,每天定时发送早安给你的女朋友! 1.首先我们登录腾讯云,在搜索栏搜索云函数,或直接用这个链接进入curl.qcloud.com/Td0IkpmD 2.进入云函数, ...

  2. daemonset应用创建了,但是没有pod被调度起来

    环境: k8s版本1.25.2  一个master  两个node节点 集群节点全部允许调度(无污点),且资源充足. 操作系统版本: Ubuntu22.01 排查思路: 查看kubelet 日志,和c ...

  3. Intrusion Detection Using Convolutional Neural Networks for Representation Learning 笔记

    Intrusion Detection Using Convolutional Neural Networks for Representation Learning 2.2 实验数据的预处理 为了确 ...

  4. mac应用已损坏无法打开

    sudo xattr -r -d com.apple.quarantine /User/name/yourapp # '/User/name/yourapp' 替换成你自己要安装的 mac 应用地址 ...

  5. 我在前端写Java SpringBoot项目

    前言 玩归玩,闹归闹,别拿 C端 开玩笑! 这里不推荐大家把Node服务作为C端服务,毕竟它是单线程多任务 机制. 这一特性是 Javascript 语言设计之初,就决定了它的使命 - Java &g ...

  6. Java并发编程和多线程的区别

    并发编程: 并发编程是一种编程范式,它关注的是编写能够正确和高效处理多个并发任务的程序.并发编程不仅包括多线程,还包括了处理多个独立任务的各种技术和模式,如进程.协程.分布式编程等.并发编程的目标是实 ...

  7. 小白也能看懂的 AUC 曲线详解

    小白也能看懂的 AUC 曲线详解 简介 上篇文章 小白也能看懂的 ROC 曲线详解 介绍了 ROC 曲线.本文介绍 AUC.AUC 的全名为Area Under the ROC Curve,即 ROC ...

  8. 图片调整大小,图片改变像素,用win10自带的工具就够了

    A:大哥大哥,你会PS吗? 内心:好家伙,什么大项目,都用上ps了,还好大学的时候学过一点点. 我:嗯嗯,会一点,怎么了 A:你看,帮我调整一下图片呗 内心:哈哈,又能看到某人的照片了.... 我:害 ...

  9. ruoyi框架里面设置登录超时时间不能生效

    问题 项目使用到了ruoyi框架,给登录超时限制了12小时,但是每次几个小时后就提示过期,要求再登录一次. 首先怀疑是不是redis内存淘汰策略出现了问题. 先使用一下的命令 systemctl st ...

  10. [转载]R2: 已解释和未解释的方差

    估计值的方差与总体方差之间的差异就是回归方程对方差的解释率.试举一例,如图 1,身高与体重的回归线显示身高与体重之间呈正相关,Mr. Y身高76英寸体重220磅(图 1中插图.cdr的红点),他与体重 ...