Datawhale X 李宏毅苹果书 AI夏令营 task2

news2024/9/19 18:19:04

《深度学习详解》 - 自适应学习率(Task2)

1. 自适应学习率的背景与重要性

学习率的挑战
在训练深度学习模型时,选择合适的学习率至关重要。过大的学习率会导致训练过程中的震荡,使模型无法收敛;过小的学习率则会导致训练速度缓慢,甚至可能陷入局部最优解。为了克服这些问题,自适应学习率(Adaptive Learning Rate)算法应运而生。

  • 图 3.18 展示了训练网络时损失的变化情况,说明了不同学习率对模型训练的影响。
  • 图 3.19 展示了训练过程中梯度范数的变化,强调了在某些情况下,尽管损失不再下降,但梯度的范数仍然较大。
2. AdaGrad:早期的自适应学习率算法

基本原理
AdaGrad 是一种根据梯度大小自动调整学习率的算法。其核心思想是:如果某一方向上的梯度较大,那么在该方向上的学习率会逐渐减小,从而避免参数更新过快;反之,如果梯度较小,则学习率会相应增大。

公式
AdaGrad 更新参数的公式如下:

\theta_{t+1} \leftarrow \theta_t - \frac{\eta}{\sqrt{G_{t+1}} + \epsilon} g_t

其中,G_{t+1}​ 是历史梯度平方和的累积。

  • 图 3.23 解释了为什么不同参数需要不同的学习率,展示了 AdaGrad 如何通过调整学习率来适应不同的梯度。

个人见解:AdaGrad 对于处理稀疏数据(如文本数据)特别有效,因为它能够自动适应每个参数的变化速度。然而,随着训练的进行,学习率会逐渐减小,导致模型在后期可能无法继续有效学习。

3. RMSProp:解决 AdaGrad 的局限性

基本原理
RMSProp 是对 AdaGrad 的改进,它通过引入指数加权移动平均(Exponential Moving Average, EMA)来平衡历史梯度的影响,从而避免了学习率过早减小的问题。

公式
RMSProp 的更新公式为:

\theta_{t+1} \leftarrow \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} g_t

其中,\hat{v}_t​ 是梯度平方的指数加权移动平均,\eta是学习率。

  • 图 3.25 展示了 AdaGrad 的问题,以及 RMSProp 如何通过动态调整学习率来解决这些问题。

个人见解:RMSProp 能够更有效地应对训练后期梯度变化较小的情况,使得学习率不会过早减小,从而提高了模型的收敛速度。在实践中,RMSProp 是一种常用且稳定的优化算法。

4. Adam:最常用的优化算法

基本原理
Adam 是目前最常用的优化算法之一,它结合了 RMSProp 和动量(Momentum)的优点。动量通过累积历史梯度来加速收敛,而 RMSProp 则通过动态调整学习率来避免震荡。

公式
Adam 的参数更新公式为:

\theta_{t+1} \leftarrow \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t

其中,\hat{m}_t​ 是梯度的移动平均,\hat{v}_t 是梯度平方的移动平均。

  • 图 3.26 展示了 RMSProp 的工作原理,强调了通过调整学习率来避免震荡的效果。

个人见解:Adam 由于其强大的适应性和稳定性,几乎成为了深度学习中默认的优化算法。它不仅能够自动调整学习率,还能结合动量来加速模型的收敛,是一种非常有效的优化策略。

5. 学习率调度(Learning Rate Scheduling)

学习率调度的必要性
即使使用了自适应学习率,在某些情况下,仍然需要手动调节学习率,以便模型更好地收敛。学习率调度是一种常用的技巧,它允许学习率随着训练过程的推进而动态调整,从而更好地适应不同的训练阶段。

常见的调度方法

  • 学习率衰减:随着训练的进行,逐渐减小学习率,避免训练后期模型的震荡。
  • 预热(Warm-up):在训练初期,逐渐增大学习率,以便模型在初始阶段更好地适应数据。

  • 图 3.29 展示了学习率衰减的优化效果,说明了如何通过调节学习率来提高模型的收敛速度。

个人见解:学习率调度是提升模型训练效率的有效手段,尤其在训练复杂模型时显得尤为重要。合理的学习率调度能够使模型更快速、更稳定地达到全局最优解。

《深度学习详解》 - 分类问题(Task2.2)

1. 分类问题的定义与特点

分类与回归的对比
分类与回归都是深度学习中常见的问题类型。回归问题的目标是预测一个连续的数值,而分类问题的目标是将输入数据分配到一组离散的类别中。分类问题可以看作是回归问题的一种特殊情况。

独热编码的使用
在处理多分类问题时,通常使用独热编码来表示类别标签。独热编码将每个类别表示为一个二进制向量,避免了直接使用数字编码可能带来的类别间无关关系问题。

  • 图 3.30 说明了用数字表示类别可能引发的问题,并介绍了独热编码如何解决这一问题。
  • 图 3.31 展示了网络多输出的示例,解释了如何使用多个输出单元来表示类别。

个人见解:独热编码虽然在多分类问题中非常有效,但其高维度可能会增加模型的计算复杂度。在实际应用中,可以考虑使用嵌入层将高维度的独热编码向量转换为低维度的嵌入向量,从而降低计算成本。

2. 带有 Softmax 的分类

Softmax 函数的作用
Softmax 是多分类问题中常用的激活函数,它能够将网络的输出转换为概率分布,使得输出值在 0 到 1 之间,并且所有类别的概率和为 1。Softmax 函数的计算公式如下:

y'_i = \frac{\exp(y_i)}{\sum_j \exp(y_j)}

Softmax 的效果
通过将输出值归一化为概率分布,Softmax 函数不仅使输出更直观,还放大了不同类别之间的差异,提高了分类准确性。

  • 图 3.32 说明了 Softmax 在分类问题中的应用,展示了其如何将输出转换为概率分布。
  • 图 3.33 提供了 Softmax 函数的计算示例,展示了不同类别的概率计算过程。

个人见解:Softmax 在多分类问题中非常实用,通过将输出值转换为概率分布,能够使模型更容易地学习和区分不同类别。在二分类问题中,可以直接使用 Sigmoid 函数来替代 Softmax,二者在此情境下的效果是等价的。

3. 分类损失函数

交叉熵损失函数
在分类问题中,交叉熵(Cross-Entropy)是常用的损失函数。它通过最大化正确类别的概率,来优化模型的参数。交叉熵的计算公式如下:

e = -\sum_{i} y_i \ln y'_i

其中,y_i是真实标签的独热编码,y'_i​ 是预测的概率分布。

交叉熵 vs 均方误差
交叉熵相比于均方误差,在分类问题中更常用,因为它能够提供更有效的梯度信号,帮助模型更快地收敛到全局最优解。

  • 图 3.34 展示了分类损失的计算过程,强调了交叉熵在分类任务中的优越性。
  • 图 3.35 对比了使用交叉熵和均方误差进行优化时的梯度变化,展示了交叉熵在分类问题中的优势。

个人见解:在分类问题中,交叉熵通常比均方误差更适合,因为它能够提供更陡峭的损失函数曲线,使得模型在训练过程中更快地更新权重。尤其是在多分类问题中,交叉熵几乎是标准的选择。

总结

通过阅读这两部分内容,我对深度学习中的自适应学习率算法和分类问题有了更深入的理解。自适应学习率算法,如 AdaGrad、RMSProp 和 Adam,能够根据不同参数的梯度动态调整学习率,从而提升模型的训练效果和收敛速度。分类问题中的独热编码、Softmax 函数和交叉熵损失函数则是解决多分类问题的关键工具。

这些知识点为深度学习模型的优化提供了坚实的理论基础,并通过实际案例和图示进一步加深了对这些概念的理解。在未来的深度学习项目中,我将应用这些技术和方法,以提升模型的性能和效率。

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

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

相关文章

在 Navicat BI 中创建自定义字段:自定义排序顺序

在 Navicat BI 中,数据源引用你连接中的表或文件/ODBC 源中的数据,并可从不同服务器类型的中选择数据。数据集中的字段可用于构建图表。事实上,在构建图表时,你需要指定用于填充图表的数据源。 正如我们在整个系列中所看到的&…

html+css网页设计 个人网站模版 个人博客12个页面

htmlcss网页设计 个人网站模版 个人博客12个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码…

【Material-UI】Radio Group中的独立单选按钮详解

文章目录 一、Radio 组件概述1. 组件介绍2. 基本用法 二、Radio 组件的关键特性1. 选中状态控制2. 关联标签3. 自定义样式和图标4. 使用 FormControlLabel 提供标签支持 三、Radio 组件的实际应用场景1. 表单中的单选题2. 设置选项3. 导航选择 四、注意事项1. 无障碍支持2. 样式…

开源产品GeoMesa、MobilityDB存在哪些不足

友情链接: •时空数据库系列(一)什么是时空数据?特征和适用场景有哪些? •时空数据库系列(二)时空数据库介绍 了解数据模型与应用场景 •时空数据库系列(三)技术讲解&…

Linux网口指令

一 查看配置 ifconfig 二 修改IP sudo ifconfig ens33 192.168.150.100 netmask 255.255.255.0

一键复制模板,乔拓云助力小程序快速上线

选择乔拓云模板开发小程序,成本低且高效,适合各行业快速搭建。注册账号后,进入模板中心,轻松找到匹配行业的模板。模板内容自定义灵活,图片、文字随心修改,右侧编辑区操作直观。 小程序开发步骤概览&#x…

秋招复习笔记——嵌入式裸机开发

底层相关的内容,之前掌握的不扎实,现在重新把相关重点记录一下,做个笔记记诵。 相关基础知识 ST简单内容 用的F103ZET6,72MHz,FLASH是512KB,SRAM是64KB,144个引脚,2基本定时器&am…

Java 入门指南:Java IO流 —— 字符流

何为Java流 Java 中的流(Stream) 是用于在程序中读取或写入数据的抽象概念。流可以从不同的数据源(输入流)读取数据,也可以将数据写入到不同的目标(输出流)。流提供了一种统一的方式来处理不同…

【深入解析】最优控制中的Bellman方程——从决策到最优路径的探索

【深入解析】最优控制中的Bellman方程——从决策到最优路径的探索 关键词提炼 #Bellman方程 #最优控制 #动态规划 #值函数 #策略优化 #强化学习 第一节:Bellman方程的通俗解释与核心概念 1.1 通俗解释 Bellman方程是动态规划中的一个核心概念,它像是…

apache服务器的配置(服务名httpd,端口80 , 443)

目录 前言 配置文件 apache服务器的配置 安装apache服务器 配置防火墙 编辑配置文件 配置虚拟主机 基于域名的虚拟主机 配置dns服务器 将网站文件放到/var/www/目录下 修改主配置文件 新建vhost文件夹和xxx.conf文件 编辑 .conf 文件 检查配置 重启服务并访问网…

VS2022 QT环境显示中文乱码问题

1.问题描述 在VS2022中搭配QT6.2环境,在文本处设置中文,运行程序文本处显示乱码,未成功显示想要的中文。 2.VS2015解决方案 如果是VS2015的话,直接文件->高级保存选项可以设置编码格式。 修改编码格式如图所示:…

2024 Python3.10 系统入门+进阶(九):封装解构和集合Set常用操作详解

目录 一、封装和解构1.1 基本概念1.2 简单解构1.3 剩余变量解构1.4 嵌套解构1.5 其他解构1.6 序列模式匹配(Python 3.10 最引人注目的新功能)1.6.1 结构模式匹配的核心概念1.6.2 结构模式匹配的优势1.6.3 使用场景 二、集合Set2.1 初始化2.1.1 "{}&…

Java-数据结构-包装类和认识泛型 !!!∑(゚Д゚ノ)ノ

目录: 一、包装类: 1、基本数据类型所对应的包装类: 2、装箱和拆箱: 二、 泛型: 1、什么是泛型: 2、语法: 三、泛型类的使用: 四、裸类型: 五、泛型的擦除机制&…

82、k8s的service-NodePort端口开放和生命周期

0、单节点服务,以及k8s命令 [rootmaster01 ~]# kubectl create deployment nginx1 --imagenginx:1.22 --replicas3[rootmaster01 ~]# kubectl create deployment nginx1 --imagenginx:1.22 ##创建资源 deployment.apps/nginx1 created[rootmaster01 opt]# kubec…

软件设计原则之依赖倒置原则

依赖倒置原则(Dependency Inversion Principle, DIP)是软件设计中一个非常重要的原则,它属于面向对象设计的SOLID原则之一。这个原则的核心在于通过抽象来降低模块间的耦合度,使得系统更加灵活和可维护。 目录 依赖倒置原则的基本…

对标GPT-4o,科大讯飞正以大模型重塑语音产业

每个科技时代,都有每个时代的“入口”和“推手”。 在PC时代,浏览器和搜索引擎是主要入口,用户通过键盘和鼠标进行交互。移动互联时代,APP和应用商店成为典型入口,用户用手指和触摸屏进入互联网世界。而在眼下的AI时代…

8月27c++

提示并输入一个字符串&#xff0c;统计字符串中字母、数字、空格和其他字符的个数 代码 #include <iostream> #include <cstring> using namespace std;int main() {string str;cout<<"输入一个字符串";getline(cin,str);//输入字符串int lenstr…

【vulhub】Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

简单来说就是先用序列化工具ysoserial启动一个JRMP服务&#xff0c;加载先相关漏洞利用链&#xff0c;加载你要执行的恶意代码。 并将上述结果通过序列化工具ysoserial将我们的恶意代码进行一个序列化操作。 第二步就是将我们的exp去加载ysoserial序列化后的数据&#xff0c;后…

vue侧边栏

在Vue中创建一个侧边栏&#xff08;Sidebar&#xff09;是一个常见的需求&#xff0c;特别是在构建管理界面或需要导航菜单的应用时。侧边栏通常用于展示应用的导航链接或菜单项&#xff0c;用户可以通过点击这些链接来访问应用的不同部分。 <template><el-tree :data…

openEuler安装Docker和踩坑分析

我是用的openEuler版本&#xff1a;20.03 LTS SP1&#xff0c;安装在虚拟机中&#xff0c;使用ssh连接 在openEuler上安装Docker还是让我踩了不少坑&#xff0c;先看看这些坑是如何产生的 虽然官方没有说openEuler是基于什么开源系统开发的&#xff0c;但大致内容和CentOS相似…