当前位置: 首页 > news >正文

Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task2:自适应学习率,分类

1.自适应学习率

临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。很多时候训练网络,损失不再下降,不是因为到了临界点,而是可能在山谷之间不停震荡。

以下为不同学习率对训练的影响,下图中左右平缓,上下陡峭。学习率大时无法进入山谷,太小时左右又无法移动

1.1 AdaGrad

AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。

以下为公式

1.2 RMSProp

同一个参数需要的学习率,也会随着时间而改变。

其中 0 < α < 1,其是一个可以调整的超参数,用来设置权重

1.3 Adam

最常用的优化的策略或者优化器(optimizer)是Adam(Adaptive moment estimation)。Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。

1.4 学习率调度

由于bc段纵轴梯度太小,导致步伐变大,出现红圈中显现。不过步伐变大后,其会走到梯度比较大的地方。走到梯度比较大的地方后,σ会慢慢变大,更新的步伐大小会慢慢变小,从而回到原来的路线。

通过学习率调度(learning rate scheduling)可以解决这个问题。之前的学习率调整方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关。

学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。

除了学习率下降以外,还有另外一个经典的学习率调度的方式———预热。预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络里面是有预热的,在残差网络里面,学习率先设置成 0.01,再设置成 0.1,并且其论文还特别说明,一开始用 0.1 反而训练不好。除了残差网络,BERT 和 Transformer 的训练也都使用了预热。

2.分类

2.1分类的概念

回归是输入一个向量 x,输出 yˆ,我们希望 yˆ 跟某一个标签 y 越接近越好,y 是要学习的目标。而分类可当作回归来看,输入 x 后,输出仍然是一个标量 yˆ,要让它跟正确答案的那个类越接近越好。yˆ 是一个数字,我们可以把类也变成数字。

实际上,在做分类的问题的时候,比较常见的做法也是用独热向量表示类。

2.2 softmax

实际做分类的时候,往往会把 yˆ 通过 softmax 函数得到 y′,才去计算 y′ 跟 yˆ 之间的距离。

为什么分类过程中要加上 softmax 函数?一个比较简单的解释是,y 是独热向量,所以其里面的值只有 0 跟 1,但是 yˆ 里面有任何值。既然目标只有 0 跟 1,但 yˆ 有任何值,可以先把它归一化到 0 到 1 之间,这样才能跟标签的计算相似度。

公式如下

示例:



2.3分类损失

交叉熵更常用,当 yˆ 跟 y′ 相同时,可以最小化交叉熵的值,此时均方误差也是最小的。最小化交叉熵其实就是最大化似然(maximize likelihood)。

以下为使用最小化交叉熵的好处,交叉熵在左上角有梯度,可以移动。均方误差在左上角十分平缓,会卡住。

3.HW3(CNN)卷积神经网络-图像分类

下载代码和数据集,一键运行

git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/LeeDL-HW3-CNN.git

卷积神经网络是深度学习中的一个非常重要的分支,本作业提供了进行图像分类任务的基本范式。

  • 准备数据

  • 训练模型

  • 应用模型

要完成一个深度神经网络训练模型的代码,大概需要完成下面的内容:

  1. 导入所需要的库/工具包

  2. 数据准备与预处理

  3. 定义模型

  4. 定义损失函数和优化器等其他配置

  5. 训练模型

  6. 评估模型

  7. 进行预测

此范式不仅适用于图像分类任务,对于广泛的深度学习任务也是适用的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 上海亚商投顾:深成指、创业板指均涨超1%,华为产业链反复活跃
  • PySide6复杂C/S系统开发
  • java 常用并发队列- DelayQueue
  • 靶场战神为何会陨落?
  • IP地址查询功能详解—构建风险画像与代理识别
  • Type-C接口 未来发展趋势
  • 重拾英语,从头学起
  • 牛客std:pair,指针+递归+整体法的使用
  • 红黑树的插入 C++
  • tomcat架构设计分析,核心组件详解
  • 【C++】容器list常用接口详解
  • idea新建父工程和添加导入新模块的步骤
  • 关于STM32运行时卡住问题
  • Adobe DC 2022提示无法识别的错误 - 解决方案
  • C4 单细胞测序中,oligo文库 和 cDNA 文库 各自的功能和区别
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • Apache Pulsar 2.1 重磅发布
  • CSS3 变换
  • Git学习与使用心得(1)—— 初始化
  • JS学习笔记——闭包
  • Linux快速复制或删除大量小文件
  • nodejs:开发并发布一个nodejs包
  • python学习笔记 - ThreadLocal
  • Rancher如何对接Ceph-RBD块存储
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue-loader 源码解析系列之 selector
  • 浮现式设计
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前嗅ForeSpider教程:创建模板
  • 实现简单的正则表达式引擎
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 仓管云——企业云erp功能有哪些?
  • ​香农与信息论三大定律
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (二十四)Flask之flask-session组件
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (回溯) LeetCode 46. 全排列
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • .gitignore文件_Git:.gitignore
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core 笔试1
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET开发人员必知的八个网站
  • .NET下的多线程编程—1-线程机制概述
  • .NET业务框架的构建
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [\u4e00-\u9fa5] //匹配中文字符
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [51nod1610]路径计数