线性模型
在前文中,我们一开始定义了一个模型,并通过梯度下降的优化方法找到了一组使得损失L最小的b和w,但是,在前文的例子中我们已知2017-2020年这段时间的所有每天的实际观看次数,而实际上,我们要达到的目的是预测未知的观看次数。于是,接下来使用这个函数预测未来的观看次数。预测从 2021 年开始每一天都拿这个函数去预测次日的观看人次,直到2月14日,如下图
这个真实的数据有一个很神奇的现象,它是有周期性的,它每隔 7 天就会有两天特别低(周五和周六),两天观看的人特别少,每隔 7 天,就是一个循环。目前的模型不太行,它只能够看前一天。 每隔 7 天它一个循环,如果一个模型参考前 7 天的数据,把 7 天前的数据,直接复制到拿来当作预测的结果,也许预测的会更准也说不定,所以我们就要修改一下模型。通常一个模型的修改,往往来自于对这个问题的理解,即领域知识。
接下来我们观察了真实的数据以后,得到一个结论是,每隔 7 天有一个循环。所以要把前 7 天的观看人次都列入考虑,写了一个新的模型:
其中 代表第 j 天的观看测试,也就是 7 天前的数据,通通乘上不同的权重
,加起来,再加上偏置得到预测的结果。使用该模型预测,其在训练数据上的损失是 380,而只考虑 1 天的模型在训练数据上的损失是 480。因为其考虑了 7 天,所以在训练数据上会得到比较低的损失。考虑了比较多的信息,在训练数据上应该要得到更好的、更低的损失。在没有看到的数据上的损失有比较好是 490。只考虑 1 天的误差是 580,考虑 7 天的误差是 490。
同样的,我们可以考虑28天、56天等等进一步降低损失。但是显然,通过增加考虑的天数来降低损失很可能是有极限的。这些模型都是把输入的特征 x 乘上一个权重,再加上一个偏置就得到预测的结果,这样的模型称为线性模型(linear model)。接下来会看如何把线性模型做得更好。
分段线性曲线
学习过高中数学的我们很清楚,线性模型这样的的“函数”是最简单的,他所能代表的规律也具有很强的局限性,我们考虑更复杂的y和的关系,如下图
显然,线性模型我们仅更改w和b是无法实现红色函数的,所以需要写一个更复杂的、更有灵活性的、有未知参数的函数。我们把红色函数中每段斜率不同的线看作是一段Hard Sigmoid函数,那么红色函数就可以由 一个常数+多个Hard Sigmoid函数 来表示:
当然,y和可能还有更复杂的关系如下图,可以在这样的曲线上面,先取一些点,再把这些点点起来,变成一个分段线性曲线。而这个分段线性曲线跟原来的曲线,它会非常接近,如果点取的够多或点取的位置适当,分段线性曲线就可以逼近这一个连续的曲线,就可以逼近有角度的、有弧度的这一条曲线。 所以可以用分段线性曲线去逼近任何的连续的曲线,而每个分段线性曲线都可以用一大堆Hard Sigmoid函数组合起来。也就是说,只要有足够的蓝色函数把它加起来,就可以变成任何连续的曲线。
假设 x 跟 y 的关系非常复杂也没关系,就想办法写一个带有未知数的函数。直接写 HardSigmoid 不是很容易,但是可以用一条曲线来理解它,用 Sigmoid 函数来逼近 Hard Sigmoid。如下图所示
Sigmoid 函数的表达式为(其横轴输入是 x1,输出是 y,c 为常数)
通过修改c,b,w制造不同的Sigmoid,如下图,我们就可以进而模拟相应的Hard Sigmiod
以上述红色函数为例,可以得出最后调整模型为
此外,我们可以不只用一个特征 x1,可以用多个特征代入不同的 c, b, w,组合出各种不同的函数,从而得到更有灵活性(flexibility)的函数 ,如下图