本文为AI方向小白记录暑期参加李宏毅苹果书 AI夏令营-入门学习方向的Task 01
报名赛事链接:Datawhale
欢迎所有小白,大神前来交流学习
一. 线性模型
1.1 初始模型与预测:
w 跟 b 的值刚才已经找出来的,这组 w 跟 b 可以让损失小到 480。在已经知道答案的数据上去计算损失,2017 到 2020 年每天的观看次数是已知的。所以假装不知道隔天的观看次数,拿这一个函数来进行预测,发现误差是 480。接下来使用这个函数预测未来的观看次数。
我们最初使用了一个简单的线性模型,公式为 y=w×xt−1+b,其中 xt−1 代表前一天的观看人次, yyy 代表预测的观看人次。这个模型假设前一天的观看人次是预测下一天观看人次的主要影响因素。
在2017年至2020年的历史数据上,该模型的训练误差为480,即模型在已知数据上的表现还算不错。
模型在未来数据上的表现:
之后我们用这个初始模型去预测2021年的观看人次,从2021年1月1日开始,每天预测次日的观看人次。结果显示,平均每日误差为0.58(即约580人),说明在未见过的数据上,模型的预测效果不如在训练数据上。
观察到的周期性现象:
在分析真实的观看人次数据时,我们发现观看人次存在明显的周期性,尤其是每周五和周六的观看人次显著低于其他天。这个周期性每7天重复一次,而初始模型无法捕捉到这一规律,因为它只考虑了前一天的数据。
第一次模型改进:引入7天周期:
针对周期性现象,我们修改了模型,扩展为考虑前7天的数据。新模型的公式为:
这个模型在训练数据上的损失降低到380,表明它更好地拟合了历史数据。在2021年数据上的预测误差也从580减少到490,说明新模型在未见过的数据上表现更好。
更进一步的改进:扩展到更长时间跨度:
为了进一步提升模型的表现,我们将模型扩展到考虑前28天的数据。结果表明,训练数据上的损失进一步降低到330,而在2021年的数据上的预测误差则降到460。这表明模型能够更好地捕捉到更长时间范围内的数据模式。
随后,我们又尝试了考虑前56天的数据,训练数据上的损失降到320,但在2021年数据上的误差仍然是460。这意味着在增加更多天的数据后,模型在未见数据上的表现不再显著改善,表明模型的性能达到了一个瓶颈。
权重的分析与解读:
在7天周期的模型中,各天的权重 wj 并不相同。模型识别出前一天的数据对预测下一天的观看人次有最大的影响(权重 w1=0.79)。
有些天的数据对预测有负面影响,权重为负(例如 w2,w4,w5),这可能意味着这些天的观看人次与隔天的观看人次呈反比关系。其他天的数据则对预测有正面影响(如 w3,w6,w7)。
这些权重的差异反映了模型对不同天数据的重要性进行了区分,这在捕捉周期性模式时尤为重要。
模型的局限性与未来方向:
尽管考虑更多天的数据能够在训练数据上降低损失,但在未见过的数据上,效果改善有限。表明简单线性模型可能在处理更复杂的模式时存在局限性。
这些模型都属于线性模型(Linear Model),即通过将输入特征 xxx 与对应的权重 www 相乘,再加上一个偏置 bbb 来得到预测值。
下一步可能需要探索更复杂的模型,如引入非线性特征、使用更多层次的模型(如神经网络),或者考虑更多的时间序列特征来更好地捕捉数据中的复杂模式。
同时,领域知识的引入和特征工程可能在进一步提升模型的准确性方面发挥重要作用。例如,可以考虑引入更多与周期性相关的特征或使用更复杂的时间序列模型来捕捉长期趋势和短期波动。
二. 分段线性曲线
2.1 线性模型的局限性:
线性模型只能捕捉输入特征和输出之间的简单线性关系。对于线性模型,输入 x1x_1x1 和输出 yyy 的关系总是一条直线,无法表示更复杂的非线性关系。例如,随着 x1x_1x1 的增加,yyy 也总是增加。但在现实世界中,输入和输出之间的关系可能更复杂,线性模型无法捕捉到这些复杂性。
模型偏差与更复杂的函数:
由于线性模型的这种局限性(模型偏差),它不能准确地模拟真实的复杂关系。因此,需要引入更复杂、更灵活的模型来表示输入与输出之间的非线性关系。一个常见的方法是将模型从简单的直线扩展到更复杂的分段线性曲线。
分段线性曲线的构建:
分段线性曲线可以通过组合多个简单的线段来逼近复杂的曲线。例如,可以通过多个 Hard Sigmoid 函数的叠加来构建分段线性曲线。每个 Hard Sigmoid 函数在不同的区间内具有不同的斜率和偏移,合在一起就可以形成复杂的曲线。
要构建这样的曲线,可以通过调整每个 Hard Sigmoid 函数的参数(如斜率和偏移量)来使得它们在不同的区间内匹配目标曲线的形状。
Hard Sigmoid 与 Sigmoid 函数:
为了简化复杂函数的计算,Hard Sigmoid 函数可以用 Sigmoid 函数来逼近。Sigmoid 函数是一种常见的 S 型函数,其数学表达式为
其中 b、w 和 c 是可调的参数。
通过调整这些参数,Sigmoid 函数可以用来逼近不同形状的 Hard Sigmoid 函数,从而实现对更复杂曲线的逼近。例如,改变 www 会影响 Sigmoid 函数的斜率,改变 bbb 会左右移动函数曲线,改变 ccc 则会改变函数的高度。
多特征输入的扩展:
在实际问题中,输入特征不仅限于单个变量 x1,而是包括多个变量 x1,x2,x3 等。例如,在预测一个视频的观看次数时,可能需要考虑前几天的观看次数作为特征。
对于每个特征,可以使用一个 Sigmoid 函数来生成一个蓝色函数(曲线),然后将这些函数叠加起来,形成一个更加复杂的函数。这些函数的组合通过矩阵运算表示,可以简化模型的计算和表示。
例如,给定三个输入特征 x1,x2,x3,可以计算,再通过 Sigmoid 函数计算输出 a1=σ(r1),类似地计算其他的a_2, a_3。
矩阵表示与更高维度的函数:
为了更方便地处理多特征输入,使用矩阵表示可以简化模型的表达。所有的特征输入可以表示为向量 xxx,所有的权重和偏置可以用矩阵 W 和向量 b 表示,这样模型可以简洁地表示为 r=b+W⋅xr。
通过计算 rrr 并应用 Sigmoid 函数得到输出 a=σ(r),然后将这些输出组合成最终的模型输出。这种表示方法可以轻松扩展到任意数量的输入特征,使模型能够处理更高维度的输入。
损失函数与参数优化:
模型的未知参数统称为 θ,包括所有的权重、偏置等。为了评估模型的好坏,定义了损失函数 L(θ),其值越小,表示模型越接近真实数据。
优化过程的目标是找到一组参数 θ∗\theta^*θ∗,使得损失函数 L(θ)L(\theta)L(θ) 最小。优化通常通过梯度下降法来实现。
梯度下降法通过计算损失函数对参数的梯度(导数),逐步调整参数的值,以减少损失。更新公式为
其中 η 是学习率,控制每次更新的步长
批量训练与回合:
实际中,为了提高计算效率,数据通常被分成多个小批量(batch),每个批量包含 B 笔数据。模型使用每个批量的数据来计算一个小的损失函数 Li,并根据这个损失来更新参数
完成一次所有批量数据的遍历称为一个回合(epoch)。一个回合内,模型参数会根据每个批量的数据多次更新。批量的大小 B 和回合的次数都是超参数,影响模型的训练效果
例如,如果有 10,000 笔数据,批量大小为 10,那么每个回合包含 1,000 次参数更新。如果批量大小为 100,那么每个回合只包含 100 次更新。
超参数与模型调整:
在整个过程中,有几个关键的超参数需要调整,如批量大小 B、学习率 η、以及 Sigmoid 函数的个数和其参数(如 w,b,c)。
这些超参数的选择会显著影响模型的性能和训练速度,通常通过实验和调参来找到最优的设置。