线性模型和梯度下降
-
梯度下降是一种用于寻找使损失函数最小化的参数的方法。对于线性模型 \(y=wx+b\),可以通过计算损失函数 \(L\) 对参数 \(w \) 和 \(b\) 的偏导数,并沿负梯度方向更新这些参数来逐步改进模型。
-
参数更新:更新规则为 \(w_{\text {new }}=w_{\text {old }}-\eta \cdot \frac{\partial L}{\partial w}\) 和 \(\quad b_{\text {new }}=b_{\text {old }}-\eta \cdot \frac{\partial L}{\partial b}\),其中 \(\eta\) 是学习率。
-
自动微分:现代深度学习框架如PyTorch能够自动计算梯度。
使用线性模型预测观看次数
-
初始模型 \(y=\omega x+b\) 用于预测每日观看次数,最佳参数为 \(w^{*}=0.97\) 和 \(b^{*}=100\),在2017至2020年的训练数据上平均预测误差为480人。
- 用2020年12月31日的观看次数预测2021年1月1日的观看次数。
- 用2021年1月1日的观看次数预测1月2日的观看次数。
- 以此类推,一直到2021年2月14日。 在这个过程中,发现平均预测误差为580人左右。
改进模型
-
观察到观看次数具有每周循环模式,改进模型以考虑前7天的数据: \(\quad y=b+\sum_{j=1}^{7} w_{j} x_{j}\)
-
最优参数为 \(b^{*}=50, w_{1}^{*}=0.79,w_{2}^{*}=-0.31,,w_{3}^{*}=0.12, w_{4}^{*}=-0.01,w_{5}^{*}=-0.10, w_{6}^{*}=0.30,w_{7}^{*}=0.18\)
-
这个模型在训练数据上的平均预测误差降低到380人,在未见过的数据上降低到490人。
-
过后尝试了考虑28天 \(\quad y=b+\sum_{j=1}^{28} w_{j} x_{j}\),28 天是一个月,考虑前一个月每一天的观看人次,去预测隔天的观看人次,训练数据上是 330。在 2021 年的数据上,损失是 460,看起来又更好一点。
-
过后尝试了考虑56天 \(\quad y=b+\sum_{j=1}^{56} w_{j} x_{j}\),如果考虑56天,在训练数据上损失是 320,在没看过的数据上损失还是 460。考虑更多天没有办法再更降低损失了。看来考虑天数这件事,也许已经到了一个极限。
模型灵活性与Sigmoid函数
-
Sigmoid函数可以用来逼近复杂的非线性关系,其形式为 \(y=\frac{c}{1+e^{-(b+wx)}} \),其中 \(c\) 是常数。
-
通过调整参数 \(b\)、\(w\) 和 \(c\),可以创建不同形状的Sigmoid函数,并将它们组合起来逼近分段线性函数,进而逼近任意连续函数。
使用ReLU改进模型
-
引入 修正线性单元(Rectified Linear Unit,ReLU)函数\((f(x)=max(0,x)) \)进一步增强模型的表达能力。通过叠加多次ReLU变换,模型能够在训练数据上取得更低的损失,并且在未见过的数据上也有较好的表现。
-
实验结果显示,使用三次ReLU变换后的模型在训练数据上的损失从280降低到140,在未见过的数据上的损失从430降低到380。ReLU函数在输入大于0时输出原值,小于0时输出0。相比于Sigmoid函数,ReLU函数计算简单且避免了梯度消失问题,因此在深度学习中广泛使用。
-
通过使用ReLU函数代替Sigmoid函数,模型可以变得更灵活,更好地拟合复杂的数据分布。实验显示,当使用100个ReLU函数时,模型在训练数据上的损失可以从320降低到280,这表明模型的表达能力得到了显著提升。
-
通过将输入经过一系列的线性变换和ReLU激活函数,可以构造出多层神经网络。例如,从原始输入 \(x\) 开始,可以经过一系列的线性变换和ReLU激活函数得到 \(a\),然后再次重复这一过程得到 \(a^{'} \)。每重复一次,都可以视为增加了一层网络。实验结果显示,通过3次ReLU变换,模型在训练数据上的损失从280降低到了140,而在测试数据上的损失也从430降低到了380。
-
通过增加模型的复杂度,特别是通过使用ReLU激活函数和构建更深的神经网络,我们可以显著提升模型的性能。然而,需要注意的是,增加模型的复杂度也会带来过拟合的风险,即模型在训练数据上表现良好,但在未见过的数据上表现不佳。
过拟合问题
-
随着模型层数的增加,可能会出现 过拟合现象,即模型在训练数据上的表现很好,但在未见过的数据上表现较差。
-
在选择模型时,应优先考虑在未见过的数据上表现较好的模型,即使它在训练数据上的表现不如其他模型。
机器学习框架
-
机器学习流程包括定义模型函数、定义损失函数和执行优化算法。最终目标是找到使损失最小化的参数 \( θ^∗ \)。
-
数据集分为 训练集 和 测试集,前者用于训练模型,后者用于评估模型性能。