Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)taks2(2.1+2.2+2.3)

本文主要是介绍Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)taks2(2.1+2.2+2.3),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

task2.1

自适应学习率

临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。

一般在训练一个网络的时候,损失原来很大,随着参数不断的更新,损失会越来越小,最后就卡住了,损失不再下降。当我们走到临界点的时候,意味着梯度非常小,但损失不再下降的时候,梯度并没有真的变得很小。看下图就可以看出来

范数(norm),即梯度这个向量的长度

随着迭代次数增多,虽然损失不再下降,但是梯度的范数并没有真的变得很小。

我们现在训练一个网络,训练到现在参数在临界点附近,再根据特征值的正负号判断该临界点是鞍点还是局部最小值。实际上在训练的时候,要走到鞍点或局部最小值,是一件困难的事情。一般的梯度下降,其实是做不到的。用一般的梯度下降训练,往往会在梯度还很大的时候,损失就已经降了下去,这个是需要特别方法训练的。要走到一个临界点其实是比较困难的,多数时候训练在还没有走到临界点的时候就已经停止了。

比如说我们所看到的下面的误差表面,目标误差表面的值应该是在❌在的点,

不断调整学习率,但是仍然到不了,因为学习率已经太小了。AB 段的坡度很陡,梯度的值很大,还能够前进一点。左拐以后,BC 段的坡度已经非常平坦了,这种小的学习率无法再让训练前进。事实上在 BC 段有 10 万个点(10 万次更新),但都无法靠近局部最小值,所以显然就算是一个凸的误差表面,梯度下降也很难训练。

最原始的梯度下降连简单的误差表面都做不好,因此需要更好的梯度下降的版本。在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate)的方法,给每一个参数不同的学习率。

如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。

AdaGrad

能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。

参数的更新:

因为刚开始\delta比较小,所以他更新的步幅较大,斜率就较小

RMSprop

在Adagrad中每个g都占有相同的权重,使得对参数的更新限制很大,所以在这里我们使用权重不同的方法更新,其中0<\alpha<1

前两个不好用语言描述,所以我在纸上写了一下(字不好,大家多担待)

Adam

可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。

这里不具体介绍,因为在Pytorch中你可以直接使用它已经集成好的功能

简单的误差表面,我们都训练不起来,加上自适应学习率以后,使用AdaGrad 方法优化的结果如下图所示。一开始优化的时候很顺利,在左转的时候,有 AdaGrad 以后,可以再继续走下去,走到非常接近终点的位置。走到 BC 段时,因为横轴方向的梯度很小,所以学习率会自动变大,步伐就可以变大,从而不断前进。接下来的问题走到图中红圈的地方,快走到终点的时候突然“爆炸”了。\delta _{i}^{t}是把过去所有的梯度拿来作平均。在 AB段梯度很大,但在 BC 段,纵轴的方向梯度很小,因此纵轴方向累积了很小的\delta _{i}^{t},累积到一定程度以后,步伐就变很大,但有办法修正回来。因为步伐很大,其会走到梯度比较大的地方。走到梯度比较大的地方后,\delta _{i}^{t}会慢慢变大,更新的步伐大小会慢慢变小,从而回到原来的路线。

学习率调度

通过学习率调度(learning rate scheduling)可以解决这个问题。之前的学习率调整方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关。学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。在图 上红圈的地方,虽然步伐很大,但 η 变得非常小,步伐乘上 η 就变小了,就可以慢慢地走到终点。

优化的总结

task2.2分类

分类与回归

分类问题简单来说就是给一个东西,然后机器输出是哪一类,不过不是直接给出类别的名字,而是给出所有类别的概率,概率最大的那个值对应的类别就是机器识别出的类。

前面我们所看到的神经网络都只有一个输出,这里需要多个输出。输入是类别的种类

在输出前,会乘上不同的参数最终得出结果

在分类里面,有一种one-hot的算法,独热编码,也就是对应类别值为1,其他均为0

分类实际过程是:输入 x,乘上 W,加上 b,通过激活函数 σ,乘上W′,再加上 b′ 得到向量 y\hat{}。但实际做分类的时候,往往会把 yˆ 通过 softmax 函数得到 y′,才去计算 y′ 跟 yˆ 之间的距离。

这里比较一下前面学过的regression和classification

regression 只需要输出对应标签就可以,而classification需要使用softmax将最后的数值限制在0到1之间

y'=\frac{exp(y_{i})}{\sum jexp(y_{j})}

使用softmax的好处是,在最终输出的时候最好的类别和最差的类别之间数值差距很大,错误的预测对最终预测的影响很小

当只有两类时,sigmoid函数和softmax是等价的

分类的损失

当我们把 x 输入到一个网络里面产生 yˆ 后,通过 softmax 得到 y′,再去计算 y′ 跟 y 之间的距离 e

计算这个距离有两种方法

1.MSE

2.Cross-entropy

对比图:

MSE容易在损失比较大的时候卡住,均方误差在这种损失很大的地方,它是非常平坦的,其梯度是非常小趋近于 0 的。如果初始时在圆圈的位置,离目标非常远,其梯度又很小,无法用梯度下降顺利地“走”到右下角。而在交叉熵的图上左上角圆圈所在的点有斜率的,所以可以通过梯度,一路往右下的地方“走”;所以一般使用Cross-entropy比较好

task2.3实战学习-HW3卷积神经网络(图像分类)

1.准备算力:

  • 学生认证云工开物,领取算力抵扣金(点击即可跳转)

    链接:https://university.aliyun.com/mobile?userCode=1h9ofup

我这里使用支付宝扫码登录,登录后可以在右上角看到自己的账号

学生验证后领取->扫码

再次点学生验证后领取

  • 在阿里云PAI-DSW创建算力(点击即可跳转)

    链接:https://www.aliyun.com/activity/bigdata/pai/ds

在终端中,输入git clone https://www.modelscope.cn/datasets/Datawhale/LeeDL-HW3-CNN.git

下载需要的数据集

选择HW3-ImageClassification运行

运行的整个过程用时大概10分钟左右,最后出现2个可视化的图,运行完成记得停止实例,要不然会一直消耗代金卷

这篇关于Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)taks2(2.1+2.2+2.3)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105901

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2