Task 2《深度学习详解》- 1.2 了解线性模型
线性模型的基本概念
线性模型是将输入的特征 x x x乘上一个权重,再加上一个偏置就得到预测结果的模型,例如 y = b + w x 1 y = b + wx_1 y=b+wx1。
线性模型的优化
-
梯度下降:通过计算损失函数对参数的微分,来更新参数,以找到最优的 w w w和 b b b。在深度学习框架中,如PyTorch,微分的计算由程序自动完成。
- 例如,对于初始值
w
0
w^0
w0和
b
0
b^0
b0,更新公式为:
w 1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 b 1 ← b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 \begin{gathered} w^{1} \leftarrow w^{0} - \left.\eta \frac{\partial L}{\partial w}\right|_{w = w^{0}, b = b^{0}} \\ b^{1} \leftarrow b^{0} - \left.\eta \frac{\partial L}{\partial b}\right|_{w = w^{0}, b = b^{0}} \end{gathered} w1←w0−η∂w∂L w=w0,b=b0b1←b0−η∂b∂L w=w0,b=b0 - 不断更新 w w w和 b b b,期待找到最优的 w ∗ w^* w∗和 b ∗ b^* b∗。
- 如图1.5所示,通过梯度下降计算,得到的最优值 w ∗ = 0.97 w^* = 0.97 w∗=0.97, b ∗ = 100 b^* = 100 b∗=100,在训练数据上的损失 L ( w ∗ , b ∗ ) = 480 L(w^*, b^*) = 480 L(w∗,b∗)=480。
- 例如,对于初始值
w
0
w^0
w0和
b
0
b^0
b0,更新公式为:
-
考虑更多天数的改进:
- 最初的模型只考虑前一天的观看人次,预测效果不理想,因为数据存在周期性,每隔7天会有两天观看人数特别少。
- 改进后的模型考虑前7天的观看人次,即 y = b + ∑ j = 1 7 w j x j y = b + \sum_{j = 1}^{7} w_{j} x_{j} y=b+∑j=17wjxj,在训练数据上的损失降低到380。
- 进一步考虑前28天的观看人次,即 y = b + ∑ j = 1 28 w j x j y = b + \sum_{j = 1}^{28} w_{j} x_{j} y=b+∑j=128wjxj,训练数据上的损失为330,在2021年没看过的数据上损失为460。
- 考虑56天的观看人次,即 y = b + ∑ j = 1 56 w j x j y = b + \sum_{j = 1}^{56} w_{j} x_{j} y=b+∑j=156wjxj,训练数据上损失为320,没看过的数据上损失还是460,考虑更多天无法再降低损失。
线性模型的局限性及改进
-
局限性:线性模型过于简单, x 1 x_1 x1跟 y y y可能中间有比较复杂的关系,例如当 x 1 x_1 x1小于某一个数值时,前一天的观看次数跟隔天的观看次数成正比;当 x 1 x_1 x1大于一个数值时,隔天观看次数会变少,但线性模型永远无法模拟这种复杂关系,这称为模型的偏差。
-
改进方法 - 分段线性曲线:
- 分段线性曲线可以看作是一个常数加上一堆Hard Sigmoid函数,通过调整不同的Sigmoid函数的参数,可以逼近各种不同的分段线性函数,进而逼近任何连续的曲线。
- 例如,红色曲线可以表示为 y = b + ∑ i c i σ ( b i + w i x 1 ) y = b + \sum_{i} c_{i} \sigma(b_{i} + w_{i} x_{1}) y=b+∑iciσ(bi+wix1),其中 σ \sigma σ为Sigmoid函数。
- 可以用多个特征代入不同的 c c c, b b b, w w w,组合出更有灵活性的函数。
模型变形及实验结果
-
激活函数:
- Hard Sigmoid可以看作是两个修正线性单元(ReLU)的加总,ReLU的公式为 c ∗ m a x ( 0 , b + w x 1 ) c * max(0, b + wx_1) c∗max(0,b+wx1)
- Sigmoid或ReLU称为激活函数,常见的激活函数还有其他,但Sigmoid和ReLU最常见。
- 实验结果表明,使用100个ReLU作为模型,在训练数据上的损失从320降到280,在测试数据上也有改善;使用1000个ReLU,训练数据上损失更低,但在没看过的数据上损失没有变化。
-
模型改进:
- 从 x x x变成 a a a,即把 x x x乘上 w w w加 b b b,再通过激活函数(如Sigmoid或ReLU)得到 a a a,同样的事情反复多做几次,增加更多的未知参数。
- 例如,每次加100个ReLU,输入特征为56天前的数据,做两次损失从280降到180,做3次从180降到140,在没看过的数据上也从430降到了380。
- 但增加层数可能会导致过拟合,如4层在训练数据上损失低,但在没看过的数据上表现不如3层。
五、机器学习框架
-
训练过程包括三个步骤:
- 写出含有未知数 θ \theta θ的函数 f θ ( x ) f_{\theta}(x) fθ(x),输入特征为 x x x。
- 定义损失函数(L),判断参数的好坏。
- 解优化问题,找到使损失最小的 θ ∗ \theta^* θ∗,即 θ ∗ = a r g m i n θ L \theta^* = \underset{\theta}{arg min } L θ∗=θargminL。
-
将 θ ∗ \theta^* θ∗带入测试集,输出结果存起来,上传到相关平台(如Kaggle)。
补充知识:
- 梯度下降是一种常用的优化算法,用于寻找函数的最小值。在机器学习中,通过梯度下降来更新模型的参数,以最小化损失函数。
- 过拟合是指模型在训练数据上表现很好,但在测试数据上表现不佳的现象。为了避免过拟合,可以采用正则化、增加数据量、早停等方法。
- 神经网络是由许多神经元组成的,通过层层堆叠形成深度神经网络。深度学习就是将神经网络做得更深,以提高模型的性能。
- 反向传播是训练深度学习模型时常用的一种算法,用于有效地计算梯度,从而更新模型的参数。