P15-P18-随机梯度下降-自适应学习率-超参数筛选-正则化

news2024/11/14 9:39:52

文章目录

      • 随机梯度下降和自适应学习率
      • 超参数筛选
        • 交叉验证
    • 正则化
      • 权重衰减
      • Dropout

简介

本文主要讨论了机器学习中随机梯度下降(SGD)和自适应学习率算法的原理及应用。SGD通过随机选择小批量样本计算损失值,减少了计算量,加快了训练速度。自适应学习率算法如Adam、RMSProp和Adagrad,通过自动调整学习率,提高了训练收敛速度。此外,本文还介绍了超参数筛选、交叉验证、正则化(权重衰减、L1和L2正则化)、Dropout等方法,以解决过拟合和欠拟合问题,提高模型泛化能力。最后,对Dropout的比例控制和测试时调整进行了阐述。

随机梯度下降和自适应学习率

与其在每个迭代中对全部的训练数据计算损失函数 L L L随机梯度下降(Stochastic Gradient Decent, SGD) 计算损失值时随机选择一小部分的训练样本。

这一小部分的训练样本称为 小批量(Mini-batch) 小批量的具体大小称为 批大小(Batch size)B 用批大小 B 和 B ≪ N 重写公式 用批大小B和B\ll N重写公式 用批大小BBN重写公式,损失函数 L \mathcal{L} L 可以重写为仅涉及当前小批量样本的损失,改进计算 L L L 的效率
L = 1 2 ∥ y − a L ∥ 2 2 = 1 2 ∑ i = 1 B ( y i − a i L ) 2 \mathcal{L}=\frac12\|\boldsymbol{y}-\boldsymbol{a}^L\|_2^2=\frac12\sum_{i=1}^B(y_i-a_i^L)^2 L=21yaL22=21i=1B(yiaiL)2
训练过程如下,通过这种方式,每个迭代只处理一小部分数据,从而减少了计算量,加快了训练速度。当迭代次数足够多时,每个样本都有机会多次被用于更新参数,从而在整个训练集上近似地进行优化。

# 输入参数
θ, α, S = 参数θ, 学习率α, 训练步数/迭代次数S

# 训练过程
for i in range(S):
    # 计算一个小批量的损失L
    L = compute_loss(θ)
    
    # 通过反向传播计算梯度∂L/∂θ
    grad_L = backpropagation(L, θ)
    
    # 更新梯度▽θ
    ▽θ = -α * grad_L
    
    #  更新参数θ
    θ = θ + ▽θ

#  返回训练好的参数
return θ

学习率(Learning rate) 控制了随机梯度下降中每次更新的步长。

如果过大,可能无法找到最小值,如果过小,收敛速度将十分缓慢。

针对这个问题,需要使用自适应学习率算法,如 Adam、RMSProp和Adagrad 通过自动、自适应的方法来调整学习率,从而加速训练算法的收敛速度。

算法的原理的在于,当参数收到了一个较小的梯度时,算法会转到一个更大的步长;反之,如果梯度过大,算法给一个较小的步长。

Adam优化器的训练过程:β1, β2为梯度的遗忘因子,或者分别是其动量和二阶动量

# 输入参数
θ, α, S, β1, β2, ϵ = 参数θ, 学习率α, 训练步数/迭代次数S, 0.9, 0.999, 10**-8

# 初始化动量
m0 = 0  # 初始化一阶动量
v0 = 0  # 初始化二阶动量

# 训练过程
for t in range(1, S + 1):
    # 第4步: 用一个随机的小批量计算梯度
    grad_L = compute_gradient(θ)
    
    # 第6步: 更新一阶动量
    mt = β1 * m0 + (1 - β1) * grad_L
    
    # 第7步: 更新二阶动量
    vt = β2 * v0 + (1 - β2) * (grad_L ** 2)
    
    # 第8步: 计算一阶动量的滑动平均
    mt_hat = mt / (1 - β1 ** t)
    
    # 第10步: 计算二阶动量的滑动平均
    vt_hat = vt / (1 - β2 ** t)
    
    # 第11步: 更新参数θ
    ▽θ = -α * mt_hat / (sqrt(vt_hat) + ϵ)
    θ = θ + ▽θ
    
    # 更新动量变量
    m0 = mt
    v0 = vt

# 第12步: 返回训练好的参数
return θ

超参数筛选

超参数(Hyper-Parameters ) 指和设置相关的参数,比如层的数量以及训练过程的设置参数,如更新步的数量、批大小和学习率。这些设置参数很大程度上会影响模型的表现。

为了衡量不同超参数对模型表现的影响,通常将数据集划为训练集、验证集、测试集。

交叉验证

在一个小数据集上,划分训练集、验证集、测试集的做法会浪费宝贵的数据。训练集分得过小,可能因为训练不足而让训练出来的模型表现不佳。验证集过小,不能让模型被充分的评估。**交叉验证(Cross Validation)**就是解决这个问题,所有的数据都能被用来训练模型,也不需要验证集,充分利用数据。

在一个k折交叉验证策略中,一个数据集将会被分成k个互相不重复的子集,并且每个子集包含同样数量的数据。我们将重复训练模型k次,其中每次训练时,一个子集将会被选为测试集, 而剩下的数据将会被用来训练模型。最后用来评估的结果则是:k次训练后,模型输出性能(如准确度)的平均值。图1.11展示了一个四折交叉验证示例。

在这里插入图片描述

正则化

一个被过度优化的模型会有很小的训练集误差,但有很大的测试集误差,这叫 过拟合(overfitting)

相对的概念叫 欠拟合(Underfitting) 在训练集和测试集上都有很大的误差。

正则化是减轻过拟合的一种手段

权重衰减

权重衰减(Weight Decay)是一种简单却有效的用于解决过拟合的正则化方法。它用了一个正则项作为惩戒,使θ有更小的绝对值。这会使得模型的上下摇摆幅度减小,能更好地拟合数据。

用参数范式作为惩戒的损失函数定义为:
L t o t a l = L ( y , y ^ ) + λ Ω ( θ ) \mathcal{L}_{\mathrm{total}}=\mathcal{L}(\boldsymbol{y},\hat{\boldsymbol{y}})+\lambda\Omega(\boldsymbol{\theta}) Ltotal=L(y,y^)+λΩ(θ)
在这里插入图片描述

其中 L ( y , y ^ ) \mathcal{L}(\boldsymbol{y},\hat{\boldsymbol{y}}) L(y,y^)是从使用目标 y \boldsymbol y y和预测 y ^ \hat{\boldsymbol{y}} y^来计算的损失函数, Ω \Omega Ω是模型的参数范式惩戒函数,
λ \lambda λ是有比较小的值,以控制参数范式惩戒函数的幅度。

两种最常见的参数范式惩戒函数是 L 1 = ∥ W ∥ \mathcal{L}_1=\|W\| L1=W L 2 = ∥ W ∥ 2 2 \mathcal{L}_2=\|W\|_2^2 L2=W22。深度神经网络的参数的绝对值通常小于 1,所以 L 1 \mathcal{L}_1 L1会比 L 2 \mathcal{L}_2 L2输出一个更大的惩戒,因为当 ∣ w ∣ < 1 |w|<1 w<1时, ∣ w ∣ > w 2 |w|>w^2 w>w2。可见, L 1 \mathcal{L}_1 L1 函数用来作为参数范式惩戒函数时,会让参数偏向于更小的值甚至为0。这是模型隐性地选择特征的方法,把那些不重要特征的相对应参数设为一个很小的值或者是0。

  1. 参数范式惩戒函数 Ω \Omega Ω:
    • Ω \Omega Ω 是正则化项,用于对模型的复杂度进行惩罚。在深度学习中,模型过于复杂可能导致过拟合(Overfitting),即模型在训练数据上表现很好,但在未见过的数据上表现不佳。正则化通过惩罚模型权重的大小,来鼓励模型学习更加简单、泛化的表示。
  2. 正则化强度 λ \lambda λ:
    • λ \lambda λ 是一个超参数,用于控制正则化项的强度。 λ \lambda λ 值较小意味着对模型复杂度的惩罚较小,而 λ \lambda λ 值较大则意味着对模型复杂度的惩罚较大。
  3. 两种最常见的参数范式惩戒函数:
    • L 1 = ∥ W ∥ \mathcal{L}_1 = \|W\| L1=W:L1正则化,也称为Lasso正则化。这里的 ∥ W ∥ \|W\| W 表示权重矩阵 W W W 的各个元素的绝对值之和。
    • L 2 = ∥ W ∥ 2 2 \mathcal{L}_2 = \|W\|_2^2 L2=W22:L2正则化,也称为Ridge正则化。这里的 ∥ W ∥ 2 2 \|W\|_2^2 W22 表示权重矩阵 W W W 的各个元素的平方和。
  4. L1和L2正则化的比较:
    • 对于深度神经网络,参数的绝对值通常小于1。在 ∣ w ∣ < 1 |w|<1 w<1 的情况下, ∣ w ∣ |w| w(L1正则化)会大于 w 2 w^2 w2(L2正则化)。这意味着L1正则化会对较小的权重施加更大的惩罚。
    • 由于L1正则化对较小的权重施加更大的惩罚,它倾向于推动模型将不重要的特征的权重推向0。这实际上是一种特征选择机制,因为模型会倾向于只保留那些对预测任务真正重要的特征。

在这里插入图片描述

L1正则化的“尖刺”特性

  • 在右图中,L1正则化的轮廓线(蓝色)呈现出“尖刺”状,特别是在坐标轴上。这意味着当参数接近0时,L1正则化的惩罚迅速减小。因此,为了最小化整体损失(原始损失加上正则化项),模型参数有更大的倾向落在坐标轴上,即参数值为0。
  • 当两个轮廓线(原始损失和L1正则化)相交时,相交点往往更靠近坐标轴,这是因为L1正则化在参数为0时提供了最小的惩罚。因此,L1正则化倾向于将不重要的参数推向0。

L2正则化的“圆形”特性

  • 在左图中,L2正则化的轮廓线(蓝色)呈现出“圆形”状,这是因为它惩罚的是参数的平方。因此,L2正则化对任何大小的参数都施加惩罚,只是参数越大,惩罚越重。这导致最小化整体损失的参数解更可能是一个较小的非零值,而不是0。

L1正则化更倾向于进行特征选择,而L2正则化则更倾向于保持所有特征,但减少它们对模型的影响。

Dropout

Dropout是另一种很受欢迎的用来解决过拟合问题的方法。

当神经元数量非常多时,网络会出现共适应的问题,从而会过拟合。

神经元的共适应指神经元之间会相互依赖。故而,一旦一个神经元失效,就有可能所有依赖它的神经元都会失效,以致于整个网络瘫痪的局面。

为了避免共适应,随机丢弃(Dropout): 在每次训练迭代中,Dropout会随机选择一部分隐藏层神经元,并将它们的输出置为0。这意味着在每次迭代时,神经网络都在使用一个不同的网络结构进行训练。

由于神经元可能会在任意时刻被丢弃,这迫使网络中的每个神经元学习更加鲁棒的特征。这样,网络就不能依赖于某些特定的神经元存在,从而减少了神经元之间的共适应。

效果类似于模型集成: Dropout可以看作是一种廉价的模型集成方法。每次迭代中的网络结构不同,最终的效果类似于训练了多个不同的网络,并在测试时对这些网络进行平均。

比例控制: Dropout的比例,即被置为0的神经元的比例,是一个超参数。通常这个比例在0.2到0.5之间,需要根据具体情况进行调整。

测试时的调整: 在测试阶段,由于所有的神经元都是活跃的,因此需要调整输出层的权重,以补偿训练时丢弃的神经元。这通常是通过将测试时的输出乘以Dropout的比例来实现的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1939798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内访问Docker Hub慢问题解决方法

在国内访问Docker Hub时可能会遇到一些困难&#xff0c;但幸运的是&#xff0c;有多种解决方案可以帮助你顺利下载Docker镜像。以下是一些有效的解决方案&#xff1a; 配置Docker镜像源&#xff1a;你可以通过配置Docker的daemon.json文件来使用国内镜像源&#xff0c;比如DaoC…

Spring Web MVC(一篇带你了解并入门,附带常用注解)

一&#xff0c;什么是Spring Web MVC 先看一下官网怎么说&#xff1a; 也就是Spring Web MVC一开始就是包含在Spring框架里面的&#xff0c;但通常叫做Spring MVC。 也可以总结出一个信息&#xff0c;这是一个Web框架。后面我就简称为Spring MVC了。 1.1MVC MVC也就是Mode…

202496读书笔记|《飞花令·菊(中国文化·古典诗词品鉴)》——荷尽已无擎雨盖,菊残犹有傲霜枝

202496读书笔记|《飞花令菊&#xff08;中国文化古典诗词品鉴&#xff09;》——荷尽已无擎雨盖&#xff0c;菊残犹有傲霜枝 《飞花令菊&#xff08;中国文化古典诗词品鉴&#xff09;》素心落雪 编著。飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c…

食南之徒~马伯庸

◆ 第一章 >> 老赵&#xff0c;这你就不懂了。过大于功&#xff0c;要受罚挨打&#xff0c;不合算&#xff1b;功大于过&#xff0c;下回上司有什么脏活累活&#xff0c;第一时间会想到你&#xff0c;也是麻烦多多。只有功过相抵&#xff0c;上司既挑不出你的错&#xf…

Unity 调试死循环程序

如果游戏出现死循环如何调试呢。 测试脚本 我们来做一个测试。 首先写一个死循环代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class dead : MonoBehaviour {void Start(){while (true){int a 1;}}}Unity对象设…

Flowable-SpringBoot项目集成

在前面的介绍中&#xff0c;虽然实现了绘制流程图&#xff0c;然后将流程图存储到数据库中&#xff0c;然后从数据库中获取流程信息&#xff0c;并部署和启动流程&#xff0c;但是部署的流程绘制器是在tomcat中部署的&#xff0c;可能在部分的项目中&#xff0c;需要我们将流程…

微信小程序数组绑定使用案例(一)

微信小程序数组绑定案例&#xff0c;修改数组中的值 1.Wxml 代码 <view class"list"><view class"item {{item.ischeck?active:}}" wx:for"{{list}}"><view class"title">{{item.name}} <text>({{item.id}…

武忠祥李永乐强化笔记

高等数学 函数 极限 连续 函数 复合函数奇偶性 f[φ(x)]内偶则偶&#xff0c;内奇则同外 奇函数 ln ⁡ ( x 1 x 2 ) \ln(x \sqrt{1 x^{2}}) ln(x1x2 ​) 单调性 一点导数>0不能得出邻域单调增&#xff0c;加上导函数连续则可以得出邻域单调增 极限 等价无穷小…

达梦数据库的系统视图v$utsk_info

达梦数据库的系统视图v$utsk_info 查询守护进程向服务器发送请求的执行情况。 升级到 V3.0 版本后&#xff0c;此视图仅用于查看当前服务器的命令执行情况&#xff0c;在 CMD 字段值不为 0 时&#xff0c;说明是有效的命令信息&#xff1b;此时如果 CODE 字段值是 100&#xf…

202495读书笔记|《红楼梦(插图本)(童年书系·书架上的经典)》——荣辱自古周而复始,岂是人力所能保的?

202495读书笔记|《红楼梦&#xff08;插图本&#xff09;&#xff08;童年书系书架上的经典&#xff09;》——荣辱自古周而复始&#xff0c;岂是人力所能保的&#xff1f; 摘录人物关系&#xff1a; 《红楼梦&#xff08;插图本&#xff09;&#xff08;童年书系书架上的经典&…

02互联网行业的产品方向(2)

数字与策略产品 大数据时代&#xff0c;数据的价值越来越重要。大多数公司开始对内外全部数据进行管理与挖掘&#xff0c;将业务数据化&#xff0c;数据资产化&#xff0c;资产业务化&#xff0c;将数据产品赋能业务&#xff0c;通过数据驱动公司业务发展&#xff0c;支撑公司战…

学习周报:文献阅读+Fluent案例+水动力学方程推导

目录 摘要 Abstract 文献阅读&#xff1a;物理信息神经网络学习自由表面流 文献摘要 讨论|结论 预备知识 浅水方程SWE&#xff08;Shallow Water Equations&#xff09; 质量守恒方程&#xff1a; 动量守恒方程&#xff1a; Godunov通量法&#xff1a; 基本原理&…

嵌入式Linux学习: platform 设备驱动实验

在Linux中&#xff0c;Platform&#xff08;平台&#xff09;机制是一个重要的设备驱动管理框架&#xff0c;它主要在Linux 2.6内核及以后的版本中引入。Platform机制的主要目的是提供一种统一的方式来管理那些不直接挂靠在传统物理总线&#xff08;如USB、PCI、I2C、SPI等&…

单链表的应用(3)

返回倒数第k个结点 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 思路&#xff1a; 利用快慢指针&#xff0c;先让快指针走k步快慢指针一起往后遍历&#xff0c;直到快指针到达链表的末端此时的慢指针就是链表的倒数第k个结点 int kthToLast(…

昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要

1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp …

提供代码!直接可以运行,Chatgpt代码分享

效果演示 安装依赖库 pip install openai粘贴如下代码 # 设置 API Key import openaiopenai.api_key "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"# 设置请求参数model_engine "text-davinci-002"prompt "python的应用领域"comp…

Bonree ONE赋能汽车行业 重塑可观测性体验

随着数字化、智能化浪潮的汹涌而至&#xff0c;全球汽车产业正站在一个崭新的历史起点上。新能源汽车&#xff0c;作为这场科技革命和产业变革的领跑者&#xff0c;其数智化发展正呈现出前所未有的蓬勃态势。7月18-19日&#xff0c;第四届中国新能源汽车产业数智峰会于上海举办…

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频&#xff08;B站视频有音频和视频两个部分&#xff09; 1、获取URL 注意&#xff1a;很多平台都有反爬取的机制&#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装&#xff0c;下列图片中&#xff08;注意代码书写格式&#xff09; 3、Co…

【2024】springboot O2O生鲜食品订购

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

sass版本更新,不推荐使用嵌套规则后的声明

目前在 Sass 中不推荐使用嵌套规则后的声明&#xff0c;在 为了通知用户即将进行的更改&#xff0c;并给他们时间进行更改 与之兼容的样式表。在未来的版本中&#xff0c;Dart Sass 将更改为 匹配纯 CSS 嵌套生成的顺序。Deprecation Warning: Sasss behavior for declarations…