目录
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