深度学习(九)正则化惩罚项

2023-05-16

       在机器学习特别是深度学习中,我们通过大量数据集希望训练得到精确、泛化能力强的模型,对于生活中的对象越简洁、抽象就越容易描述和分别,相反,对象越具体、复杂、明显就越不容易描述区分,描述区分的泛化能力就越不好。

       比如,描述一个物体是“方的”,那我们会想到大概这个物体的投影应该是四条边,两两平行且垂直,描述此物体忽略了材质、质量、颜色等等的性状,描述的物体的多,相反,描述的内容越丰富详实则约束越多,识别的泛化性就差,代表的事物就少,比如“一条彩色的白色绣花丝质手帕”。

我们可以利用正则化找到更为简洁的描述方式的量化过程,我们将损失函数改造为:

20180530142507289

       这就是改造后带有正则化项的损失函数。那么为什么加上了正则化项能在一定程度上避免过拟合呢?以前讨论的损失函数只有C0这个部分,在学术上称为“经验风险”,后半部分的损失函数(加入的正则化项的部分)叫做“结构风险”。所谓的“经验风险”就是指由于拟合结果和样本标签之间的残差总和所产生的经验性差距所带来的风险----毕竟差距越大,拟合失效的可能性就越大,这当然是风险,是欠拟合的风险;“结构风险”就是刚才提到的模型不够“简洁”带来的风险。为使模型简洁泛化性能好,我们加入:

20180530142519303

       含义就是把整个模型中的所有权重w的绝对值加起来除以样本数量,其中是一个惩罚的权重,可以称为正则化系数或者惩罚系数,表示对惩罚的重视程度。如果很重视结构风险,即不希望结构风险太大,我们就加大,迫使整个损失函数向着权值w减小的方向移动,换句话说,w的值越多、越大,整个因子的值就越大,也就是越不简洁,刚才这种正则化因子叫做L1正则化项,常用的还有一种叫带有L2正则化项的

20180530142531505

将w做了平方后取加和。L1正则化项的导数为

 

20180530142603469

 

       整个导数除了有前面经验风险对w求导贡献的部分,还有后面结构风险对w求导贡献的部分。sgn(w)表示取w的符号,大于0为1,小于0为-1。

       带有L2的正则项导数为

20180530142616835

      L2正则项中的20180530143015960,求导后正好可以约掉20180530143149635分母中的2,这也是构造这种因子的时候特别设计的优秀Trick(在Caffe、Tensorflow、Torch等框架实现中,有着世界级众多大神的优秀Trick,使得有良好的局部优化效果,进而改进精度、速度、实现的复杂度等)。

    以最简单的线性分类为例,假设样本特征为X=[1,1,1,1],模型1的权重W1=[1,0,0,0],模型二权重W2=[0.25,0.25,0.25,0.25],虽然W1X=W2X=1;但是权重W1只关注一个特征(像素点),其余特征点都无效,模型具体、复杂、明显,能识别“正方形棉布材质的彩色手帕”,在训练集上训练完后容易导致过拟合,因为测试数据只要在这个像素点发生些许变化,分类结果就相差很大,而模型2的权重W2关注所有特征(像素点),模型更加简洁均匀、抽象,能识别“方形”,泛化能力强。通过L2正则化惩罚之后,模型1的损失函数会增加(λ/(2*4))*(12)=λ/8,模型2的损失函数会增加(λ/(2*4))*(4*(1/4)2)=λ/32,显然,模型2的更加趋向让损失函数值更小。

      最后从示意图的可视化角度直观理解下正则化的实现过程。

20180530141618137

 

       假设在一个模型中只有两个维度w1和w2作为待定系数,最终的理想解在圆心的位置,当然这里画出来的是在第一象限,但是实际上也可能出现在别的位置。由于初始化的时候w1和w2可能会在别的位置,当然也会在二、三、四象限中,在训练的过程中会逐渐从这个初始化的位置向圆心靠拢。

       圆心周围的一圈一圈的线其实是损失函数等高线,也就是说当w1和w2所组成的坐标点(w1,w2)在这一圈上的任意位置都会产生相同大小的损失函数,而由于初始化位置不确定,所以可能会出现在一圈的任意位置,那么显然远离坐标系原点(0,0)的(w1,w2)点会产生更大的结构风险,因为其拥有风大的w1和w2值,更为不简洁。

       下面花色的圆圈和正方形分别代表由L2和L1所产生的损失值,左侧是L2,右侧是L1的,边缘的圆圈线和直线分别表示它们各自的损失函数值等高线。在加入这一项之后,损失由两部分产生,所以损失函数在收敛的时候要兼顾“小”和“精确”两个特性。经验损失可以认为是“精确”这个特性,会让解朝向圆圈的重心收敛,而结构损失是“小”这个特性,会让解向着原点收敛,最后兼顾两者都在比较小的位置上,图中的图形交点w。就是正则化后权重值w的解。由于多维空间无法画出,大家可以想象一下几百万维空间中w被正则化项拉向圆点的过程。

       一般在一次模型搭建过程中,通常先不加入正则化项,先只用带有经验风险项的损失函数来训练模型,当模型训练结束后,再尝试加入正则化项进行改进。惩罚系数λ一般可以设置为1、5、10、15、20……这样的值进行尝试,也可以用1、100、50、25(75)这种二分法的方法尝试,去观察当前的λ是不是有效的提高了准确率Accuracy。

       下面再来看下正则化项在神经网络中的重要作用。

20180530141737568

 

惩罚系数λ=0.001伸出的爪子本质就是过拟合了(由于惩罚的程度不够),λ=0.1泛化能力强。

 

参考高扬《白话深度学习与Tensorflow》,转载须经同意。

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习(九)正则化惩罚项 的相关文章

随机推荐

  • 树莓派只能网线连接无法连接WiFi的解决方法

    最近几天树莓派好端端地突然连不上WiFi xff0c 右上角WiFi图标也显示异常 xff0c 无法看到周围可连接WiFi列表 xff0c 但却能连上wpa supplicant conf中配置好的另一个WiFi xff0c 插网线也无效
  • js时间转化格式及UCC、HIBC条码解析

    就记录下 xff0c 条形码解析写的很糟糕 xff0c 好多地方可以封装函数的 xff0c 所以有点乱 xff0c 直接复制过去还能用的 xff0c UCC条码只能解析包装代码 xff0c 通过包装代码获取型号是调后台接口 xff0c 然后
  • 在ubuntu16.04下搭建samba,实现linux与windows之间的资源共享

    1 先在 ubuntu 下安装好 samba 安装 samba xff1a sudo apt get install samba 安装 smbclient xff1a sudo apt get install smbclient 2 在虚拟
  • TypeScript学习笔记(一)

    TS学习笔记 文章目录 TS学习笔记一 环境搭建二 基本类型1 类型声明2 基本类型 三 编译选项四 Webpack 43 TS xff08 一 xff09 基础配置1 配置依赖2 webpack config js3 tsconfig j
  • ROS学习笔记(四): publisher的编程实现

    四 publisher的编程实现 1 在工作区创建功能包 目的 xff1a 创建一个使小乌龟画圆的publisher 打开工作区 cd catkin ws src 创建工作包 xff0c 不要使用大写字母命名 xff0c 会编译不成功 ca
  • unity用按钮跳转场景代码

    首先创建场景scene 0 xff0c 在上面创建一个按钮 xff0c 保存scene 0 然后创建场景scene 1 xff0c 保存scene 1 然后分别运行其场景 xff0c 在运行的过程中 xff0c 点击 File gt Bui
  • Unity给游戏添加倒计时和分数

    总觉得敲代码可难可难 xff0c 昨天做了一天 xff0c 游戏雏形出来了 xff0c 涉及到逻辑一块却很棘手 xff0c 网上百度了 xff0c 版本太多 xff0c 实现的效果也不近人意 问室友 xff0c 分分钟就解决了 xff0c
  • 建立对象模型即使用UML画类图

    UML类图画法及其之间的几种关系 最近复习软件工程的考试 xff0c 大题需要画一下类图 xff0c 发现类图的画法及其之间的几种关系已经淡忘了很多 xff0c 上百度进行搜索 xff0c 发现了一篇学习笔记 xff0c 整理总结的不错哦
  • Maya里面的模型动画导入Unity使用

    听别人将东西要是不感兴趣还真是听不进去 xff0c 听老师讲课更是如此 xff0c 有时候还起到很好地催眠作用 最近一直在想模型原创的问题 xff0c 如何自己制动画导入Unity进行使用 xff0c 上百度上开始寻找方法 xff0c 有时
  • 对象模型,动态模型,功能模型

    第七周作业 用面向对象方法分析研究书中习题2第3题中描述的机票预订系统 xff0c 试建立它的对象模型 动态模型和功能模型 来源 xff1a 博客园 2016 04 18 对象模型如下 xff1a 动态模型如下 xff1a 功能模型如下 x
  • 要你命三千又三千的成长之旅

    今天 xff0c 是我第一回玩博客 xff0c 也是作为一个小白听从他人的建议 xff0c 用博客来记录自己的电脑学习之旅 xff0c 自己的成长之旅 xff01 我不喜欢博客 xff0c 但是我依然要开始努力用博客记录自己的点点滴滴 xf
  • UML中关联,依赖,聚集,组成的联系和区别

    在UML中 xff0c 关联 xff0c 依赖 xff0c 聚集 xff0c 组成的联系十分紧密 xff0c 不容易区分 xff0c 本文试图用通俗的语言来讲解这四种关系的区别 关联 xff0c 即是发生关系 xff0c 一个类A关联类B
  • XML基础

    首先用记事本建立一个XML文件 xff0c 后缀自己改txt gt xml lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt root gt lt Level gt lt n
  • 科研必备的14个学术搜索引擎

    学术搜索可以帮助学术科研人员快速寻找学术资料 xff0c 如专家评审文献 论文 书籍 预印本 摘要以及技术报告等 本文为你介绍14个学术搜索引擎 1 Google Scholar Google 推出的免费学术搜索工具 xff0c 可以帮助用
  • Windows 10中python2和python3共存

    在win10中暗转python2和python3在命令行同时使用时可能无法实现 xff0c 因为安装python3时默认只有python exe和python2里的一样 xff0c 所以这时候需要再弄一个python3 exe来区分 xff
  • 解决error: unknown type name ‘__u8’问题,认识__u8,__u16,__u32,__u64的大小及作用

    1 解决Linux error unknown type name u8 问题 xff1a 内核提供的数据类型都在头文件 lt asm types h gt 声明 xff0c 可以在程序中加上 include lt asm types h
  • 基于ZigBee的智能家居系统

    本项目基于C 编写智能家居系统PC客户端 同时编写安卓客户端 代码下载链接https download csdn net download hzqgangtiexia 10435931 1 硬件选型及数据采集 节点板子以CC2530芯片为核
  • 一文理解ZigBee通信全过程(基于ZStack-CC2530-2.5.1a协议栈)

    自己在word中整理的笔记 基本上详细的分析了Zigbee的原理 比较透彻 分享给大家交流参考 目录 0概述 2 1协议栈整体运行流程 3 1 1 操作系统初始化流程 5 1 2操作系统启动 9 2相关数据结构与函数调用 13 3 ZigB
  • 深度学习(五)学习率的调节

    nbsp nbsp nbsp 学习率对于深度学习是一个重要的超参数 它控制着基于损失梯度调整神经网络权值的速度 大多数优化算法 SGD RMSprop Adam 对其都有所涉及 学习率越小 损失梯度下降的速度越慢 收敛的时间更长 如公式所示
  • 深度学习(九)正则化惩罚项

    在机器学习特别是深度学习中 xff0c 我们通过大量数据集希望训练得到精确 泛化能力强的模型 xff0c 对于生活中的对象越简洁 抽象就越容易描述和分别 xff0c 相反 xff0c 对象越具体 复杂 明显就越不容易描述区分 xff0c 描