机器学习:L2正则项(权重衰减)和梯度的理解

2023-11-15

正则化方法:L2正则化

正则化定义:凡是可以减少泛化误差而不是减少训练误差的方法,都可以称作正则化方法

我们其实不用去管什么是泛化误差、什么是训练误差,只需“凡是能减少过拟合的方法都是正则化方法

正则化方法:防止过拟合,提高泛化能力

在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work。

在这里插入图片描述

我们常常将原始数据集分为三部分:training data、validation data,testing data。在训练过程中,我们通常用validation data确定learning rate,根据validation data上的accuracy确定early stopping的epoch大小。如果直接在testing data上做这些,随着训练的进行,我们的网络实际上就是在一点一点地overfitting我们的testing data,导致最后得到的testing accuracy没有任何参考意义

training data的作用是计算梯度更新权重,validation data的作用是确定一些超参数,testing data则给出一个accuracy以判断网络的好坏

L2 regularization(权重衰减)

L2正则化就是在代价函数后面再加上一个正则化项:
C = C 0 + λ 2 n ∑ w w 2 C=C_0+\frac{\lambda}{2n}\sum_ww^2 C=C0+2nλww2

C0代表原始的代价函数,后面的那一项是L2正则化项。

正则化项:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整

L2正则化项是如何避免overfitting的呢?

我们推导一下看看,先求导:
∂ C ∂ w = ∂ C 0 ∂ w + λ n w ∂ C ∂ b = ∂ C 0 ∂ b \frac{\partial{C}}{\partial{w}}=\frac{\partial{C_0}}{\partial{w}}+\frac{\lambda}{n}w\\ \frac{\partial{C}}{\partial{b}}=\frac{\partial{C_0}}{\partial{b}} wC=wC0+nλwbC=bC0
可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:
w → w − η ∂ C 0 ∂ w − η λ n w = ( 1 − η λ n ) w − η ∂ C 0 ∂ w w \rightarrow w-\eta\frac{\partial{C_0}}{\partial{w}}-\frac{\eta\lambda}{n}w=(1-\frac{\eta\lambda}{n})w-\eta\frac{\partial{C_0}}{\partial{w}} wwηwC0nηλw=(1nηλ)wηwC0
在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为 1−ηλ/n ,因为η、λ、n都是正的,所以 1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。

另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:
w → ( 1 − η λ n ) w − η m ∑ x ∂ C x ∂ w b → b − η m ∑ x ∂ C x ∂ b w \rightarrow (1-\frac{\eta\lambda}{n})w-\frac{\eta}{m}\sum_x\frac{\partial{C_x}}{\partial{w}}\\ b \rightarrow b-\frac{\eta}{m}\sum_x\frac{\partial{C_x}}{\partial{b}} w(1nηλ)wmηxwCxbbmηxbCx
对比上面w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。

到目前为止,我们只是解释了L2正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?

一个所谓“显而易见”的解释就是:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。

稍微数学一点的解释是:过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。

在这里插入图片描述

而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况

梯度的方向为什么是函数值增加最快的方向

一元函数的导数

仅拥有一个自变量的函数称为一元函数,简记为 y=f(x) 。在实际生活中,人们想要了解函数 y 在点 x0 处的变化率。例如,一个非匀速运动的质点在某一时刻的瞬时速度;或者一条曲线上某一点的斜率。此时涉及到一个问题:如何求出函数在某一个点的变化率呢?一般情况下,人们可以很容易求出函数在自变量某一段的变化率。例如,当自变量在 x0 处产生一个增量 Δx 时,函数 y 也会产生一个增量 Δy ,此时 Δy/Δx 即为函数在自变量从 x0 变化到 x0+Δx 时的变化率。那么,如何求出函数 y 在点 x0 处的变化率呢?

为了解决上述问题,需要借助极限的概念:当 Δx 趋于 0 时,若 Δy/Δx 的极限存在,则此极限值即为函数 y 在点 x0 处的变化率,也将其称之为函数 y 在点 x0 处的导数。具体过程如下图所示:
f ′ ( x 0 ) = lim ⁡ △ x → 0 △ y △ x = lim ⁡ △ x → 0 f ( x 0 + △ x ) − f ( x 0 ) △ x f'(x_0)=\lim_{\triangle x \to 0}\frac{\triangle y}{\triangle x}=\lim_{\triangle x \to 0}\frac{f(x_0+\triangle x)-f(x_0)}{\triangle x} f(x0)=x0limxy=x0limxf(x0+x)f(x0)
在这里插入图片描述

由于一元函数仅仅具有一个自变量x,因此这类函数只能反应函数沿x轴方向的变化率。进一步讲,当点x0确定后,函数在该点的变化率有且仅有一个,数值上为过该点的切线的斜率。当其大于0时,表明该函数在该点有上升的趋势;当其小于0时,表明函数在该点有下降的趋势

多元函数的偏导数

拥有多个自变量( ≥2 )的函数称为多元函数,这里以二元函数 z=f(x,y) 为例讲解偏导数

由于二元函数具有两个自变量 x,y ,因此函数图像为一个曲面。如何计算二元函数对曲面上一点 (x0,y0) 的变化率呢?此处需要注意的是,因为过曲面上的某一点可以作出无数条切线,因此函数在该点也具有无数个变化率,可以先考虑函数沿着两个坐标轴(x轴、y轴)方向的变化率

当自变量y固定在y0,函数在点x0处的变化率称为函数在点(x0,y0)处对x的偏导数,记作:fx(x0,y0)

当自变量x固定在x0,函数在点y0处的变化率称为函数在点(x0,y0)处对y的偏导数,记作:fy(x0,y0)

多元函数的方向导数

多元函数的偏导数仅仅描述了函数在点(x0,y0)处沿两个坐标轴(x轴,y轴)方向的变化率,然而实际上函数在该点具有无数个变化率(在几何上表现为该点具有无数个切线的斜率),因此如何求出函数在点(x0,y0)处沿某一方向的变化率呢?万变不离其宗,此时仍按变化率的定义去求解,即只需求出函数的增量与自变量沿着某一方向增量比值的极限即可

在这里插入图片描述

假设某一方向的单位向量为 el=(cos⁡α,sin⁡α) , α 为此向量与x轴正向夹角,显然根据 α 的不同,此向量可以表示任意方向的单位向量.当点 (x0,y0) 沿着该方向产生一个增量 t 到达点 (x0+tcos⁡α,y0+tsin⁡α) 时(终点的坐标可以根据向量运算法则求出),函数z也会产生一个增量 Δz=f(x0+tcos⁡α,y0+tsin⁡α)−f(x0,y0) 。此时函数沿此方向的变化率为:
lim ⁡ t → 0 + f ( x 0 + t cos ⁡ α , y 0 + t sin ⁡ α ) − f ( x 0 , y 0 ) t   = f x ( x 0 , y 0 ) cos ⁡ α + f y ( x 0 , y 0 ) sin ⁡ α \lim_{t \rightarrow 0^{+}} \frac{f(x_0+t \cos \alpha, y_0+t \sin \alpha)-f(x_0,y_0)}{t} \ = f_x(x_0,y_0) \cos \alpha + f_y(x_0,y_0) \sin \alpha t0+limtf(x0+tcosα,y0+tsinα)f(x0,y0) =fx(x0,y0)cosα+fy(x0,y0)sinα
在这里插入图片描述

多元函数的梯度

既然函数在点(x0,y0)处沿着任意的方向都有一个变化率,那么沿着哪个方向函数的变化率最大呢

函数z=f(x,y)沿着任意方向的( α 取任意值)的变化率为:
f x ( x 0 , y 0 ) cos ⁡ α + f y ( x 0 , y 0 ) sin ⁡ α f_x(x_0,y_0) \cos \alpha + f_y(x_0,y_0) \sin \alpha fx(x0,y0)cosα+fy(x0,y0)sinα
因此接下来只需求得使其达到最大值时的 α 便可解决上述问题。由于上式可以看成两个向量的内积,令g=(fx(x0,y0),fy(x0,y0)),el=(cosα,sinα),则:
f x ( x 0 , y 0 ) cos ⁡ α + f y ( x 0 , y 0 ) sin ⁡ α = g ⋅ e l = ∣ g ∣ ∣ e l ∣ cos ⁡ θ = ∣ g ∣ cos ⁡ θ f_x(x_0,y_0) \cos \alpha + f_y(x_0,y_0) \sin \alpha = \mathbf{g} \cdot \mathbf{e}_l = |\mathbf{g}| |\mathbf{e}_l| \cos \theta = |\mathbf{g}| \cos \theta fx(x0,y0)cosα+fy(x0,y0)sinα=gel=g∣∣elcosθ=gcosθ
其中, θ 为 g 和 el 的夹角。根据上式,可得出如下结论:

  • 当 θ=0 时,即 el 和 g 方向相同时,函数变化率最大,且在点 (x0,y0) 处呈上升趋势;
  • 当 θ=π 时,即 el 和 g 方向相反时,函数变化率最大,且在点 (x0,y0) 处呈下降趋势
  • 最后,当点 (x0,y0) 确定后,向量 g=(fx(x0,y0),fy(x0,y0)) 也随即确定。由于向量 g 的方向为函数值增加最快的方向,而此方向经常被用于实际生活中,因此为便于表述,人们为其取了一个名字—梯度。换而言之,多元函数在某一点的梯度是一个非常特殊的向量,其由多元函数对每个变量的偏导数组成(这即是为什么求梯度的时候需要对各个变量求偏导的原因),其方向为函数在该点增加最快的方向,大小为函数在该点的最大变化率。

参考

1、正则化方法:L1和L2 regularization、数据集扩增、dropout:https://blog.csdn.net/u012162613/article/details/44261657

2、梯度的方向为什么是函数值增加最快的方向:https://zhuanlan.zhihu.com/p/38525412

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

机器学习:L2正则项(权重衰减)和梯度的理解 的相关文章

  • Windows10 搭建vs2017OpenGL ES 3.0 开发环境

    前言 更新于2021 06 29 1 首先下载 OpenGL ES 3 0 Programming Guide 随书源码 直接使用CMake工具生成vs2017代码工程 然后使用vs2017打开工程 ES3 Book sln 然而 vs报错
  • mysql多对一、多对多查询实践

    最近做的功能涉及这方面 算是练了一下 首先多对一部分较简单 多的那一方表 多设置一个字段是少的那一方的id 主键 具体查询时候关联查询即可 可设置外键进行级联操作 具体以后做到这个功能再更新 多对多 设备和用户多对多 一个用户可有多台设备
  • 用java编写赛马_java applet 赛马小程序

    昨天写看java书的时候 觉得闷 就写了个小程序自我娱乐一下 技术含量不高 只是自我娱乐而已 下面的代码只要编译出class文件 再写一个HTML格式的文件 调用Arc2Demo2 class 就能看了 该程序实现一个跑马比赛程序 各个选手

随机推荐

  • Translucent System Bar 的最佳实践

    Translucent System Bar 的最佳实践 http mp weixin qq com s biz MzA3MDMyMjkzNg mid 2652262235 idx 1 sn f7ebd354b2ad04064d27e0df
  • 【Docker】基于docker构建深度学习开发环境

    文章目录 1 选择基础镜像 1 1 不同深度学习框架对CUDA和cuDNN的要求 1 2 显卡驱动对CUDA的要求 1 3 深度学习框架对CUDA不同版本要求冲突的解决 2 创建容器并进行基础配置 2 1 创建容器并查看CUDA和cuDNN
  • 某网站面试算法题,今天碰到了,两个大数字相加(足够大)取和

    两个大数相加 1 是整数 2 两个数无限大 long都装不下 3 不能用BigInteger 4 不能用任何包装类提供的运算方法 5 两个数都是以字符串的方式提供 面试答卷直接写下 此处空白位置太小 写不下 请求机试 果然给我一台应该是 爬
  • Spring 循环依赖的三级缓存

    在Spring Bean 的生命周期中 里面有一步就是填充属性 而填充属性之前会判 属性对象是否被当前对象循环依赖 当发现属性对象被循环依赖的时候会进行aop 被命中 并且生成属性对象的代理对象 未命中目标对象 循环依赖是如何形成的 当 对
  • 基于PSIM及其DLL模块的单相全桥并网逆变器仿真

    摘要 本文简单地介绍了单相全桥并网逆变器的闭环控制原理 利用PSIM软件来进行仿真实验 关键词 单相 闭环控制 PSIM DLL 锁相环 过零检测 进网电流反馈 SPWM 因在研究过程中参考的不少文献忘记标记了 所以无法一一列出 如有侵权
  • 【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据

    1 概述 ES 单分片使用 From Size 分页遇到重复数据 常规情况下 ES 单分片使用 From Size 是不会遇到数据重复的 数据重复的可能原因有 没有添加排序 添加了按得分排序 但是查询语句全部为 filter 过滤条件 此时
  • SpringSecurity常见面试题汇总(超详细回答)

    1 什么是Spring Security 核心功能 Spring Security是一个基于Spring框架的安全框架 提供了完整的安全解决方案 包括认证 授权 攻击防护等功能 其核心功能包括 认证 提供了多种认证方式 如表单认证 HTTP
  • Android的关于高德地图加载谷歌瓦片,并缓存本地的功能.

    最近开发的Android的App需要使用到卫星图 不过发现国内现有的百度 高德的卫星图对郊区图层支持的不好 只能使用谷歌的卫星图 在尝试使用谷歌的Google Map API for Android后又发现去要手机安装谷歌服务 并且有可能用
  • batchsize的选择和学习率调整

    batchsize的选择和学习率调整 增大Batch Size的好处 数据的处理速度加快 跑完一次 epoch 全数据集 所需的时间减少 在一定范围内 一般来说 Batch Size 越大 其确定的下降方向越准 引起训练震荡越小 尤其是网络
  • Angular学习笔记70:Angular项目的单元测试 -- 对组件进行测试

    对组件进行测试 对组件绑定的测试 例如在一个组件中 一个组件中模版里有一个标题的是 h2 class title title h2 组件的类文件中对应绑定了一个类文件中的属性 测试这个绑定的数据 it should render title
  • 华为云空间費用_华为云空间有什么用

    华为云空间是专门用于存储联系人 备忘录 照片 录音 云盘的 它还可以使用查找手机功能 其性质和云存储空间类似 手机用户可以将通讯录 照片或视频 录音以及其他资料存放在这里 而在其他的华为设备上登录云空间账号后 即可将这些信息同步到其他设备上
  • 渗透测试学习22:业务逻辑漏洞

    目录 登录认证模块 未授权访问和越权 验证码相关问题 支付漏洞 活动相关 薅羊毛 密码找回模块 登录认证模块 万能密码 现在很少了 但也可以试试 例子 admin or 1 1 弱口令 社工尝试获取账号 并构造密码库 明文密码传输 edu常
  • 我的LaTeX入门

    第一次打美赛就用了latex 比赛前刷了各种博客 学习了1天就上场 美赛期间全程扮演不同角色 就是打杂的 大家都是第一次参加 都很累 不过我是最累的 两天两夜没睡 建模 编程 latex写论文全程参与 用latex写论文真的是太爽了 闲着也
  • ExoPlayer结构分析

    最近要做音乐播放器 经过一周的调研 最终决定使用google的ExoPlayer 对ExoPlayer的架构 流程做个分析 梳理一下调用逻辑 先做个笔记 等项目做完了写一个多媒体播放的大型攻略 媒体资源的获取 MediaSource类代表媒
  • 计算机粘贴复制快捷键,电脑粘贴复制快捷键ctrl加什么(电脑快捷键方法大全)...

    工作效率高的人往往使用快捷键比较多 至少能节约一半的时间 今天分享的快捷键是Ctrl D 你会用吗 在office系列软件中它的功能不尽相同 能把Ctrl D常用的几个功能熟练掌握 高效完成工作某些工作 已经是不在话下 网页收藏 遇到喜欢的
  • libevent实现tcp服务器

    服务器端 libevent 创建TCP连接 创建event base 创建bufferevent事件对象 bufferevent socket new 使用bufferevent setcb 函数给 bufferevent的 read wr
  • VM8的虚拟机中检测USB设备功能禁止

    版本 VMware Workstation 8 0 2 build 591240 发现其启动Linux的时候有提示USB功能被禁止 需要到microsoft下开启VMware USB Arbitration Service服务 但是在ser
  • Matlab机器人工具箱

    因为需要用到和机器人相关的东西 就用到了这个工具箱 作者官网 http www petercorke com Robotics Toolbox html 我上传到CSDN 有需要的同学可以自行下载 robot 9 8 2013 2 12 z
  • 从Spice Model到模拟IC设计的心路历程

    写博客的伊始 是兴奋的 回想自己折腾的几年 从Spice Model到模拟IC电路设计的跳跃 充满了奇妙的意外之旅 Spice Model生涯 我于2017年1月1日走入职场从事14nm FinFET Spice Model研发工作 初涉职
  • 机器学习:L2正则项(权重衰减)和梯度的理解

    正则化方法 L2正则化 正则化定义 凡是可以减少泛化误差而不是减少训练误差的方法 都可以称作正则化方法 我们其实不用去管什么是泛化误差 什么是训练误差 只需 凡是能减少过拟合的方法都是正则化方法 正则化方法 防止过拟合 提高泛化能力 在训练