首页 > 其他分享 >Datawhale X 李宏毅苹果书 AI夏令营 深度学习入门笔记02

Datawhale X 李宏毅苹果书 AI夏令营 深度学习入门笔记02

时间:2024-09-01 17:56:28浏览次数:15  
标签:02 函数 Sigmoid AI 李宏毅 模型 趋近 图像 线性

目录

一、学习资料

二、学习笔记

(一)线性模型

1、考虑周期性

2、修改模型

(二)模型变形之分段线性曲线

1、分段线性直线

2、分段线性曲线的图像和表达式(机器学习第一步:写出带有未知数的函数)

(1)如何构成

(2)如何表达

(3)如何改进

3、分段线性曲线的损失(机器学习第二步:定义损失)

4、分段线性曲线的最优解(机器学习第三步:最佳化)

(三)模型变形之修正线性单元

1、构成和表达式(第一步,写出未知数方程)

2、计算损失(第二步)

(四)重命名我们前几步做的事情

(五)过拟合


一、学习资料

Datawhale提供的pdf:Datawhale (linklearner.com)

李宏毅老师对应视频课程:

预测本频道观看人数(下) - 机器学习基本概念简介_哔哩哔哩_bilibili

二、学习笔记

前情提要:上一节课中我们得到了预测播放量的模型为:y=0.97x+100

把该模型代入已知数据(即训练资料)(2017-2020年后台播放量)中,可得误差越为480;预测未知(2021年及以后)后再在年底拿到后台数据后返回来看预测,可得误差为580。

因此可知,该模型在已知数据中预测准确率较好,但在未知数据中预测越来越不准。

(一)线性模型

1、考虑周期性

拿已知的2021年真实数据和模型预测数据对比一下:

(红色:真实数据;蓝色:预测数据)

(截图自李宏毅老师视频课,如无特殊标注,下同)

通过观察曲线,我们可以看出,真实数据向右平移一天就是预测数据。为什么会这样?因为我们设定的模型就是“根据前一天的播放量预测后一天的播放量”,所以模型预测的结果永远“赶不上趟”。

出现上述状况后,我们再重新研究一下已知数据,可以观察出一个现象:真实的数据具有周期性。

它不是简简单单的一条曲折上升的图像,而是以7天为循环,每隔5天就会出现2天波谷。从后台数据可发现,这2天是周五和周六。

2、修改模型

因此,我们需要修改模型(函数),不再是简单的线型y=wx+b,而是更复杂的:

j等于几就代表几天前,取值范围[1,7]。根据不同的x乘上不同的权重w,求和后加上偏置得到预测的结果。

经过计算后,可得新旧模型对比:

旧模型在已知数据(即训练资料)(2017-2020)中的loss是480,未知数据(2021)中的loss是580。

新模型在已知数据(即训练资料)(2017-2020)中的loss是380,未知数据(2021)中的loss是490。

由此可见,考虑7天将会得到更小的损失。

Optimization(最佳化,使用梯度下降)后,可得每个w的最优解:

老师补充:

w2, w4, w5:因为模型是根据前一天预测后一天,但不知道为什么模型知道前2/4/5天的值是和前一天成反比的,所以w是负数,w1, w3, w6, w7就都是正的。

以上是考虑7天的模型,那么如果考虑更多天呢?会否更准确?

以下给出了考虑28天和56天的情况:

可以得到,考虑28天时,的确比考虑7天时更准确了。但是考虑56天时,并没有比28天有显著提升。由此说明,模型到此已经无法更进一步了,考虑天数的情况已经到了极限。

总结:

以上模型的共同点都是以输入的特征(feature)x作为自变量,再乘以w(weight),再加偏置(常数)b(bias),得到y(预测结果),这样的模型称为线性模型(linear model)。

(二)模型变形之分段线性曲线

以上模型都是比较简单的线性模型,它们都不能体现x与y之间更复杂的关系。这种是来自于模型的限制,称为Model Bias(和y=wx+b的b不同,此处bias表达的是无法模拟真实的状况),所以我们需要更灵活的(flexible)的模型。

1、分段线性直线

假如我们需要的是像红色图像这样的函数,我们可以将之分为不同的段,每一段都用一个简单的线性函数图像(蓝色的)画出,然后将蓝色的函数加在一起(分段函数,每个蓝色的设定不同定义域),就可以得出红色图像了。红色图像越复杂,需要的蓝色图像就越多。

Datawhale教程补充:

红色的曲线可以看作是一个常数再加上一群 Hard Sigmoid 函数。Hard Sigmoid 函数的特性是当输入的值,当 x 轴的值小于某一个阈值(某个定值)的时候,大于另外一个定值阈值的时候,中间有一个斜坡。所以它是先水平的,再斜坡,再水平的。所以红色的线可以看作是一个常数项加一大堆的蓝色函数(Hard Sigmoid)。

2、分段线性曲线的图像和表达式(机器学习第一步:写出带有未知数的函数)

(1)如何构成

但如果我们需要的图像不是有棱有角的拐点,而是包含曲线的函数图像呢?

我们可以在曲线上取一些点,然后将之连接起来,构成不同的线性图像。点取得越多,或者取到的是关键点,连出来的图像和函数就会越接近原本的函数。

因此可知,如果我们能画出足够多的“蓝色函数”,我们就会越准确地得知原本“红色函数”的模样。

(2)如何表达

那么如图所示,这样的蓝色曲线应该怎么表达出来呢?

我们可以用Sigmoid函数来逼近它,图像与表达式如图所示(c是常数)。

(我觉得这里得添加一下假设c>0且w>0,不然结果会反)

当x1的值趋近于正无穷的时候,−(b+wx1)就会趋近于负无穷,根据e的指数函数性质(当x趋近于负无穷,y趋近于0),e^−(b+wx1) 就会趋近于0,因此函数会收敛在高度为c(常数)的地方;

当x1的值趋近于负无穷的时候,−(b+wx1)就会趋近于正无穷,根据e的指数函数性质(当x趋近于正无穷,y趋近于正无穷),e^−(b+wx1) 就会趋近于正无穷,式子的分母部分就会趋近于正无穷,(分母越大数值越小)因此右边整个式子趋近于0。

简化写法:y = c*Sigmoid(b + wx1)

蓝色实线的函数称为Hard Sigmoid 函数;蓝色虚线的函数称为Sigmoid 函数,也称S函数。

因此,我们通过调整常数c, b, w就可以得到不同的S函数。

c:调整高度;b:调整左右位置;w:调整斜率(斜坡坡度)

回到红色函数上,我们把多个近似完了的蓝色函数(S函数)相加后,就得到了红色函数,即分段线性函数、新的模型(更有灵活性(flexibility)的函数):

(别忘了在最前面再加个常数,也就是0号函数图像代表的“起点”)

(3)如何改进

我们前面也提到了,点击量是具有周期性的,所以不能以简单的线型函数来表达,需要加入周期考虑,所以式子就变成:

【提醒自己,从这里往后的部分要重复多看几遍,老师的思路非常精彩】

接下来把式子后半部分展开(此处为了简化、便于理解,先只代入了3个值):(后面的图全都是直接在图里加注释了,虽然整体画面有点乱,但对我自己来说更直观)

这个混乱的式子,可以将之拆分组合为矩阵乘向量:

后半部分也就是括号里的东西展开完了,我们再往前一项,继续展开:

现在式子可以展开到整个右边了:

现在我们把整个上面做的工作全部串起来:

代入后,就可以用线性代数的方式来表达:

现在我们重新整理一下式子,也就是机器学习中怎么让机器找出一个函数的第一步——写出带有未知数的函数:

3、分段线性曲线的损失(机器学习第二步:定义损失)

接下来进入到定义损失的环节。
虽然未知数不同了,但步骤和上一节课讲过的定义损失步骤没有区别,还是分别求出预测值与实际值(label标签),定义二者差距为e。以此类推,得到一串e1~en的数值,再将之求和取平均,得到L。

4、分段线性曲线的最优解(机器学习第三步:最佳化)

然后使用梯度下降,随机找一个初始点θ,计算这一点上的微分:

右边的式子集合起来:

以此类推,根据微分调整“左右步伐”,一直算,直到找到L上的最优解。

但是实际上一般不会到微分=0的情况就会停下来,可能因为数据量太大了,设定模型运行X次就会自动停止。

所以我们可以引入批次(batch),一批一批的来做。这部分在进阶版task01里面讲了,贴一下笔记链接方便我自己对照着看:Datawhale X 李宏毅苹果书 AI夏令营 深度学习进阶笔记01-CSDN博客

怎么选取数据进入某个batch是随机的。每次会先选一个批量,用该批量来算 L1,根据 L1 来算梯度,再用梯度来更新参数,接下来再选下一个批量算出 L2,根据 L2 算出梯度,再更新参数,再取下一个批量算出 L3,根据 L3 算出梯度,再用 L3 算出来的梯度来更新参数。

把所有的batch都看过一次,称为一个回合(epoch)。

更新跟回合是不同的东西。每次更新一次参数叫做一次更新,把所有的批量都看过一遍,叫做一个回合。

批量大小和 Sigmoid的个数都是超参数,是自己设定的。

(三)模型变形之修正线性单元

1、构成和表达式(第一步,写出未知数方程)

上一个我们讲的是使用S函数来趋近一个会弯折的图像,这里我们引入另一个概念:修正线性单元(Rectified Linear Unit,ReLU)

ReLU的图像是先有一条水平的线,然后走到某个地方有一个转折的点,变成一个斜坡。

其对应的公式为c ∗ max(0, b + wx1)。其中c是常数,max(0, b + wx1)的意思是,取括号中两个值中更大的那一个,也就是如果0>b + wx1,就输出0(因此y=c*0=0);如果0<b + wx1,就输出b + wx1(因此y=c*(b + wx1)的直线函数)

使用两个ReLU的加总来表示之前需要的红色的弯折曲线。

由此可得,要合成 i 个 Hard Sigmoid,需要 i 个 Sigmoid,如果 ReLU 要做到一样的事情,则需要 2i 个 ReLU,因为 2 个 ReLU 合起来才是一个 Hard Sigmoid。因此表示一个 Hard 的 Sigmoid 不是只有一种做法。在机器学习里面,Sigmoid 或 ReLU 称为激活函数(activation function)

贴一下两种模型公式的对比:

2、计算损失(第二步)

根据新模型来计算Loss,我们可以得到:

使用1个和10个ReLU时,loss并没有发生太大变化。

但是当ReLU增加到100个时,loss产生了显著降低。

当ReLU增加到1000个时,loss又没有显著变化了。

把下图左边部分的改进模型重复多做X次,得到的loss会更低。

但是机器学习终究还是机器,它没有办法预测给定数据之外的东西。

比如真实数据上,某一天出现了极低点,并不符合7天周期内的规律,机器就没有预测到。那一天出现极低点的原因是什么?因为那天刚好是除夕。

(四)重命名我们前几步做的事情

老师解释:本来应该命名为神经和神经元的,可惜这套名词在八九十年代已经用过了,并且因为成效不好,搞的这套名词现在再拿出来就像骗子一样,属于是写paper上都会把整篇paper档次拉低的东西。所以改名了,把每一排看作一层,每一层称为隐藏层(hiddenlayer),很多的隐藏层名之为“深”,这套技术称为深度学习(deep-learning)。

该截图来自datawhale教程

(五)过拟合

有时候我们会发现:在训练数据上,3层layer比4层差。但是在没看过的数据上,4层layer比较差,3层反而比较好。这种情况称为过拟合(overfitting)。

我们需要预测的是未来的、未知的数据,所以需要一个在没有看过的数据上表现更好的模型。所以本题来说,我们应该选择3层的。

最后老师还“骗”大家多多点击视频,让机器预测得更不准一点hhhhhh好有趣的老师!!!

标签:02,函数,Sigmoid,AI,李宏毅,模型,趋近,图像,线性
From: https://blog.csdn.net/ensoleille_clair/article/details/141720423

相关文章

  • 2025毕业设计精选:如何用Java SpringBoot+Vue构建受灾救援物资管理系统,实现实时监控,提
    ✍✍计算机毕业编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、微信小程序、大数据实战项目集⚡⚡文......
  • 20240908_030339 编程剪辑 读取音频对像获得音频时长
    需求有一个目录里存放了多个音频文件我们要获取这些音频文件的相关信息编写一个方法接收音频文件的目录返回音频信息列表示例......
  • Datawhale X 李宏毅苹果书 AI夏令营 深度学习进阶笔记02
    目录一、学习资料二、学习笔记(一)自适应学习率(adaptivelearningrate)1、什么是+为什么要用2、三种自适应学习率方法(1)AdaGrad(AdaptiveGradient)(2)RMSprop(RootMeanSquaredpropagation)(3)Adam(Adaptivemomentestimation)(二)学习率调度(learningratescheduling)1、为什么......
  • 正点原子Linux C应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动
    正点原子LinuxC应用编程:移植tslib并使其适配7寸LCD1024*600的GT911触摸驱动作者在学习【正点原子】I.MX6U嵌入式LinuxC应用编程指南V1.4时,发现移植tslib后,触摸事件触发不正常。使用的硬件版本:正点原子I.MX6UALPHAV2.4版本底板,LCD:正点原子7寸1024*600,型号ATK-MD0700R-102460......
  • 2024年8月文章一览
    2024年8月编程人总共更新了3篇文章:1.2024年7月文章一览2.《ProgrammingfromtheGroundUp》阅读笔记:p95-p1023.《ProgrammingfromtheGroundUp》阅读笔记:p103-p1168月,对自己而言是糟糕的一个月,两个项目要赶,从月初赶到月底。一路战战兢兢,如履薄冰,好在终于赶在月底顺利完成......
  • [20240829]关于依赖链3.txt
    [20240829]关于依赖链3.txt--//如果修改表结构或者改名,相关的sql语句在共享池会失效,必须重新分析,我开始学习orcle时候,一直认为这些相关信息保存在表对象--//句柄的堆0里面,如果涉及到的sql语句很多,这样堆0应该很大,而实际上的情况上堆0一直没有变化.我曾经问过别人这个问题,......
  • [20240827]分析为什么出现library cache lock等待事件2.txt
    [20240827]分析为什么出现librarycachelock等待事件2.txt--//前几天一直在分析如果表不存在的情况下,密集执行为什么出现librarycachelock等待事件,而且出现的mode=2(共享模式),按照道--//理不应该阻塞,做一个分析.1.环境:SCOTT@book01p>@ver2==============================......
  • [20240828]分析为什么出现library cache lock等待事件5.txt
    [20240828]分析为什么出现librarycachelock等待事件5.txt--//前几天测试遇到的问题,假如表不存在的情况下,如果密集执行这类sql语句,不理解为什么出现librarycachelock等待事件.--//验证如果有1个会话,是否会持有mode=3的情况出现.--//上午使用gdb设置断点来验证,这次直接密集......
  • [20240829]关于依赖链.txt
    [20240829]关于依赖链.txt--//如果修改表结构或者改名,相关的sql语句在共享池会失效,必须重新分析,我开始学习orcle时候,一直认为这些相关信息保存在表对象--//句柄的堆0里面,如果涉及到的sql语句很多,这样堆0应该很大,而实际上的情况上堆0一直没有变化.我曾经问过别人这个问题,最......
  • 河道AI智能视频分析识别系统
    河道AI智能视频分析识别系统智能检测方式,智能检测分析河道两边意外违反规定问题,确保人民人身安全问题,河道AI智能视频分析识别系统在初期处理伤害安全性的问题,保证水环境生态安全和人民生命安全安全性,使人和水的影响做到和睦情况,使不足的水源为社会经济的协调发展作为长期性适用,为......