回归问题再梳理

基础

回归问题有哪些实际应用

  1. 股价预测
  2. 无人车(如:方向盘的角度)
  3. 推荐系统(如:用户A购买商品B的概率)

如何求解回归问题

  1. 构建模型
    假定模型的构建基于线性函数f: y = b + w x y=b+wx y=b+wx
    将收集到的n个数据(每个数据已知 x , y x, y x,y)分别代入f中,形成model集

  2. 用lost function( L ( w , b ) L(w,b) L(w,b)) 衡量每一个model的好坏,通过最小化 L ( w , b ) L(w,b) L(w,b)找到“最好”的model,也就是“最佳”参数 w ∗ , b ∗ w^*, b^* w,b

  3. 如何最小化 L ( w , b ) L(w,b) L(w,b)? -> 利用gradient decent(梯度下降)

    梯度下降的具体过程描述如下:
    1)随机初始化 w 0 w_0 w0
    2) 计算 L ( w , b ) L(w,b) L(w,b)在点 w 0 , b 0 w_0, b_0 w0,b0的偏微分 d L d w ∣ w = w 0 , b = b 0 , d L d b ∣ w = w 0 , b = b 0 \frac{dL}{dw} |_{w=w_0,b=b_0}, \frac{dL}{db} |_{w=w_0,b=b_0} dwdLw=w0,b=b0,dbdLw=w0,b=b0 (即,梯度方向)
    3)更新参数值 w 1 = w 0 − η d L d w ∣ w = w 0 , b = b 0 , b 1 = b 0 − η d L d b ∣ w = w 0 , b = b 0 w_1 = w_0 - \eta\frac{dL}{dw} |_{w=w_0,b=b_0}, b_1 = b_0 - \eta\frac{dL}{db} |_{w=w_0,b=b_0} w1=w0ηdwdLw=w0,b=b0,b1=b0ηdbdLw=w0,b=b0,其中 η \eta η是“learning rate”用于控制更新的幅度,减号是因为我们要最小化函数值,即取梯度的反方向
    4)循环执行第3步,逐步更新参数值,直到参数无变化。

    tips:
    1)gradient decent的使用条件是损失函数L可微分
    2)gradient 用此符号表示: ▽ L = [ ∂ L ∂ w ∂ L ∂ b ] g r a d i e n t \bigtriangledown L = \begin{bmatrix} \frac{\partial L}{\partial w}\\ \frac{\partial L}{\partial b} \end{bmatrix}_{gradient} L=[wLbL]gradient
    3)在线性回归中没有local optimal,因为在线性回归中loss function是convex(凸)的
    4)计算 ∂ L ∂ w , ∂ L ∂ d \frac{\partial L}{\partial w}, \frac{\partial L}{\partial d} wL,dL:
    若: L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) 2 L(w,b)=\sum_{n=1}^{10}(\hat{y}^{n}-(b+w\cdot x_{cp}^{n})^2 L(w,b)=n=110(y^n(b+wxcpn)2
    则: ∂ L ∂ w = 2 ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ( − x c p n ) \frac{\partial L}{\partial w} = 2\sum_{n=1}^{10}(\hat{y}^{n}-(b+w\cdot x_{cp}^{n})(-x_{cp}^{n}) wL=2n=110(y^n(b+wxcpn)(xcpn) ∂ L ∂ b = 2 ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ( − 1 ) \frac{\partial L}{\partial b} = 2\sum_{n=1}^{10}(\hat{y}^{n}-(b+w\cdot x_{cp}^{n})(-1) bL=2n=110(y^n(b+wxcpn)(1)

如何解决过拟合问题

  1. 什么是过拟合
    过拟合是指随着模型的复杂度越来越高,训练集上的error越来越小,但在测试集上的error存在先减后增的趋势。

  2. 如何解决? => 利用正则化(regularization)
    若: y = b + ∑ w i x i y = b + \sum w_ix_i y=b+wixi
    将loss function重写为: L = ∑ n ( y ^ n − ( b + ∑ w i x i ) 2 + λ ∑ ( w i ) 2 L=\sum_{n}(\hat{y}^{n}-(b+\sum w_ix_{i})^2 + \lambda \sum(w_i)^2 L=n(y^n(b+wixi)2+λ(wi)2

    上式中尾项 λ ∑ ( w i ) 2 \lambda \sum(w_i)^2 λ(wi)2为正则化项, 是所有参数的平方和乘以一个常数项 λ \lambda λ。根据上式,最小化 L L L时,除了最小化error(第一项)之外,同时也期待参数的值越接近0,即找到的参数越小越好。因为,参数值越接近0,得到的function越平滑。

    tips:
    在做正则化时,是不需要考虑bias的。因为我们正则化的目的是希望找到更加平滑的funciton,但是调整bias跟平滑程度没有关系,调整bias的值只是把funcion上下移动。

  3. 为什么平滑的函数好?
    因为,对于平滑函数来说,输出对于输入数据的变化比较不敏感。若输入数据中存在噪声,一个平滑的函数能受到更小的影响,从而得到一个较好的结果。

  4. λ \lambda λ越来越大训练误差和测试误差会有怎样的变化?
    [图片来源:李宏毅深度学习P1]
    在这里插入图片描述
    上图是李宏毅老师课上展示的一个示例结果,从图中可以看到:
    1) 训练误差随着 λ \lambda λ的增大逐步增大
    分析原因: λ \lambda λ越大,我们约倾向于考虑 w w w本来的值,减少考虑error,即 λ \lambda λ越大时考虑error越少,在training data上的error就越大。

    2)测试误差随着 λ \lambda λ的增大先减小后增大
    分析原因: λ \lambda λ越大,在最小化的前提下, w w w就越小,整个函数就越平滑。因此,随着 λ \lambda λ增大,函数越来越平滑,抗噪能力越来越强,但当 λ \lambda λ增大到一定程度,即函数过于平滑,整体效果反而会下降。


进阶

梯度下降小技巧

  1. 可视化learning rate与loss的关系图(可以指导learning rate的调整)

  2. 自动调整learning rate
    1) w t + 1 ← w t − η t g t w^{t+1}\leftarrow w^t-\eta ^tg^t wt+1wtηtgt,其中 g t = ∂ L ( θ t ) ∂ w , η t = η t + 1 g^t=\frac{\partial L(\theta^t)}{\partial w}, \eta^t=\frac{\eta}{\sqrt{t+1}} gt=wL(θt),ηt=t+1 η t t t为迭代次数。迭代次数越多,leanring rate越小

    2)不同的参数给不同的leanring rate => Adagrad
    w t + 1 ← w t − η t σ t g t w^{t+1}\leftarrow w^t-\frac{\eta ^t}{\sigma ^t}g^t wt+1wtσtηtgt,其中 σ t \sigma ^t σt是过去所有该参数微分值的均方根 σ t = 1 t + 1 ∑ i = 0 t ( g i ) 2 \sigma ^t=\sqrt{\frac{1}{t+1}\sum_{i=0}^{t}(g^i)^2} σt=t+11i=0t(gi)2 (推导过程如下图所示),这个值对于每个参数而言都是不一样的,因此通过此式更新的每个参数learning rate都是不一样的。

    [图片来源:李宏毅深度学习P2]
    在这里插入图片描述 化简:
    在这里插入图片描述

  3. 随机梯度下降(Stochastic Gradient Descent)
    一般的梯度下降中loss function定义为所有训练样本的loss和: L = ∑ n ( y ^ n − ( b + ∑ w i x i n ) ) L=\sum_n \left( \hat{y}^n - \left(b+\sum w_ix_i^n\right)\right) L=n(y^n(b+wixin))
    随机梯度下降则选择一个样本 x n x^n xn,每次仅根据这一个样本的loss值更新参数: L n = ( y ^ n − ( b + ∑ w i x i n ) ) 2 L^n= (\hat{y}^n - \left(b+\sum w_ix_i^n\right))^2 Ln=(y^n(b+wixin))2

  4. 特征缩放(feature scaling)
    做法:通过缩放特征值使得特征的取值范围相同
    目的:平衡不同特征之间因为取值的量级差别对loss funciton带来的影响
    原因:若不同特征的取值存在量级的差距(如: x 1 = 1 , 2 , 3 , . . . 10 ; x 2 = 100 , 200 , 300 , . . . 1000 x_1=1,2,3,...10; x_2=100,200,300,...1000 x1=1,2,3,...10;x2=100,200,300,...1000)使得在梯度下降的迭代过程中, w 2 w_2 w2的变化对loss的影响明显大过于 w 1 w_1 w1的变化带来的影响,如下图所示(呈现出椭圆形)。
    在这里插入图片描述
    在将特征缩放至同一范围内之后 w 1 w_1 w1 w 2 w_2 w2的变化对loss的影响则如下图所示(接近正圆):
    在这里插入图片描述
    在两种情况下参数迭代更新的轨迹如下图所示,因为每次更新始终向着梯度的反方向,指导更新的原则并不是“向着起始点与最低点的连线方向更新”,但我们知道正圆上任一点梯度的反方向都是向着圆心的,也就是我们追求的最低点。因此对于进行了特征缩放的正圆关系在做参数更新时更有效率,而呈现长椭形关系的数据则需要类似上面提到的Adagrad方法,为不同的特征提供不同的learning rate才会呈现较好结果。
    在这里插入图片描述

  5. 梯度下降为何有效之数学原理—泰勒级数
    如果函数 h ( x ) h(x) h(x) x = x 0 x=x_0 x=x0处无穷阶可导的话,则存在泰勒级数:
    h ( x ) = ∑ k = 0 ∞ h ( k ) ( x 0 ) k ! ( x − x 0 ) k = h ( x 0 ) + h ′ ( x 0 ) ( x − x 0 ) + h ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . h(x)=\sum_{k=0}^{\infty } \frac{h^{(k)}(x_0)}{k!}(x-x_0)^k=h(x_0)+h'(x_0)(x-x_0)+\frac{h''(x_0)}{2!}(x-x_0)^2+... h(x)=k=0k!h(k)(x0)(xx0)k=h(x0)+h(x0)(xx0)+2!h(x0)(xx0)2+...

    x x x趋近于 x 0 x_0 x0 ( x − x 0 ) (x-x_0) (xx0)远大于 ( x − x 0 ) 2 , ( x − x 0 ) 3 , . . . (x-x_0)^2, (x-x_0)^3,... (xx0)2,(xx0)3,...

    所以此式可以写成: h ( x ) ≈ h ( x 0 ) + h ′ ( x 0 ) ( x − x 0 ) h(x) \approx h(x_0)+h'(x_0)(x-x_0) h(x)h(x0)+h(x0)(xx0)

    x , y x,y x,y趋近于 x 0 , y 0 x_0,y_0 x0,y0,多元函数的泰勒级数则可以写成: h ( x , y ) ≈ h ( x 0 , y 0 ) + ∂ h ( x 0 , y 0 ) ∂ x ( x − x 0 ) − ∂ h ( x 0 , y 0 ) ∂ y ( y − y 0 ) h(x,y) \approx h(x_0,y_0)+\frac{\partial h(x_0,y_0)}{\partial x}(x-x_0)-\frac{\partial h(x_0,y_0)}{\partial y}(y-y_0) h(x,y)h(x0,y0)+xh(x0,y0)(xx0)yh(x0,y0)(yy0)

    若将以上多元函数的泰勒级数应用于梯度下降的解释中:
    如下图右下角图例所示,在梯度下降过程中参数的更新是以初始点(a,b)为圆心的圆形范围内顺着梯度的反方向从圆心(a,b)移动到圆圈范围内一点,并如此反复的过程。

    当红圈足够小,在红色圆圈范围内loss function的泰勒级数可表示为下图红框中的式子,用蓝框中的标记符替换式中的常数项后,可简化得到灰框中的式子:
    在这里插入图片描述
    令: Δ θ 1 = θ 1 − a , Δ θ 2 = θ 2 − b \Delta \theta_1=\theta_1-a, \Delta \theta_2=\theta_2-b Δθ1=θ1a,Δθ2=θ2b,同时,在寻找 θ \theta θ使 L ( θ ) L(\theta) L(θ)最小化的过程中 s s s θ \theta θ无关可忽略,则 L ( θ ) ≈ s + u ( θ 1 − a ) + ν ( θ 2 − b ) L(\theta) \approx s+u(\theta_1-a)+\nu(\theta_2-b) L(θ)s+u(θ1a)+ν(θ2b)可化简为:
    在这里插入图片描述由于是在红色圆圈范围内进行参数更新,因此有:
    Δ θ 1 2 + Δ θ 2 2 ≤ d 2 \Delta \theta_1^2+\Delta \theta_2^2\leq d^2 Δθ12+Δθ22d2因此,在忽略 s s s的前提下, L ( θ ) L(\theta) L(θ)可以看成是圆中两个向量 ( Δ θ 1 , Δ θ 2 ) , ( u , ν ) (\Delta \theta_1,\Delta \theta_2), (u,\nu) (Δθ1,Δθ2),(u,ν)点乘的结果:
    在这里插入图片描述
    我们的任务是在已知向量 ( u , ν ) (u,\nu) (u,ν)的前提下最小化 L ( θ ) L(\theta) L(θ),则 ( Δ θ 1 , Δ θ 2 ) (\Delta \theta_1,\Delta \theta_2) (Δθ1,Δθ2)应取 ( u , ν ) (u,\nu) (u,ν)反方向上位于圆上的一点:
    在这里插入图片描述
    可以写成:
    在这里插入图片描述
    式中的 η \eta η用于调整向量的长度使其落在圆上。

    u , ν u,\nu u,ν代回式子中,可以得到梯度下降过程中参数的计算公式:
    在这里插入图片描述
    利用泰勒级数去解释梯度下降的过程,有一个前提:红圈足够小。已知 η \eta η与红圈半径是成正比的,因此,learning rate 不能大,得趋于无穷小才能使得loss越来越小,但在实际操作过程中learning rate设定为无穷小是不现实的,但此理论给了一个重要的指导:learning rate得往小了设,这样才能保证泰勒级数的有效性。

  6. 梯度下降的更多限制
    我们做梯度下降理论上的停止条件是对于参数的偏导为0: ∂ L ∂ w = 0 \frac{\partial L}{\partial w} =0 wL=0
    1)除了minimal的位置偏导为0外,“平原”(鞍点)位置偏导也为0,因此除了可能卡在local minimal之外,卡在“平原”(鞍点)位置也是有可能的
    2)实际梯度下降收敛到偏导正好等于0的位置通常比较困难,因此在实际coding过程中,我们总是以一个很小的数(如: 1 0 − 6 10^{-6} 106)作为结束条件,但是这个很小的数到底是在minimal位置的附近还是“平原”位置的附近也无法保证。

减小模型误差 之 从误差来自哪里说起

误差来自哪里:bias(偏差) 和 variance(方差)

把模型的优化的过程想象成打靶过程,靶心为最优解(如下图所示)。
bias:为靶上点和靶心的距离,即所得函数与目标函数的之间存在的偏差
variance:是靶上所有点的分布情况,点与点之间距离越大则离散程度越大,方差越大
在这里插入图片描述
根据bias和variance的高低情况可以分为如上图所示的四种情况,其中 f ^ \hat{f} f^为目标函数值,蓝色的小点 f ∗ f^* f为实际上重复多次实验跑出来的优化结果,我们通常会选择多次重复实验后的均值 f ˉ \bar{f} fˉ作为最终的预测结果。我们追求的是准确性和稳定性都强的模型,期望的模型分布如上图左上角低方差低偏差的分布图所示。

variance

绘制出重复1000次回归实验的函数图像(如下图所示):
1)当模型是简单的 y = b + w x c p y=b+wx_{cp} y=b+wxcp 时,绘制的函数图像较为集中,variance比较小,每次实验拟合出的函数结果都是差不多的
2)当模型复杂起来,如下图中所示考虑到 x 5 x^5 x5时,图像散布很广,variance比较大,每次实验拟合出的函数图像都“长得不太一样”
原因:简单的模型受数据的影响较小
在这里插入图片描述

bias

bias反映了多次实验结果的平均值 f ˉ \bar f fˉ与目标函数 f ^ \hat f f^之间的距离

绘制出重复5000次回归实验的函数图像(如下图所示),红色部分为每次实验绘制的函数 f ∗ f^* f,黑色曲线为目标函数 f ^ \hat f f^,蓝色线条为多次实验结果的平均值 f ˉ \bar f fˉ
1)当模型是简单的 y = b + w x c p y=b+wx_{cp} y=b+wxcp 时,会有较大的bias,且图像较为集中
2)当模型复杂起来,如下图中所示考虑到 x 5 x^5 x5时,虽然每次找出来的函数都“不太一样”,比较分散,但是平均之后,会有较小的bias

原因:把模型看成一个function set, f ^ \hat f f^是我们拟合的目标函数,所以当然希望 f ^ \hat f f^包含在这个模型所能搜素的function set中。如果是一个简单模型,它function set的搜索空间就比较小(variance小),没有包含 f ^ \hat f f^的可能性较大,因此不论在这个funciton set里怎么sample都找不到 f ^ \hat f f^;如果是一个复杂模型,这个模型的搜索空间就比较大,包含 f ^ \hat f f^的可能性很大,但由于训练数据有限,每次训练的数据都存在一定的差异,所以导致每次实验结果比较分散,平均之后则会落在 f ^ \hat f f^附近。
在这里插入图片描述

如何指导误差减小

下图中,关系图的横坐标是 x x x的最高次项(项数越高模型越复杂),纵坐标是在测试集上的训练误差值。蓝线是我们实验过程中观察到的图像:随着模型复杂度增大,模型误差先平稳减小后急剧增大。

我们从bias(偏差)和variance(方差)的角度出发解释这一现象:
x x x的最高次项值较小,即模型比较简单时,存在高偏差低方差的现象,随着横坐标值增大模型越来越复杂,模型会呈现出低偏差高方差。因此随着 x x x轴数值增大,bias逐步减小(用红线表示),variance越来越大,随着模型越来越复杂variance的增长速度也越来越快(用绿线表示)。当bias和variance同时被考虑时,则会得到观测出的蓝线。
因此:若误差是因为variance大,则称为overfitting;若误差是因为bias大,则称为underfitting
在这里插入图片描述
做研究应该清楚跑出来的模型是bias大还是variance大,才能知道怎么改进:

1)如果模型在训练集上的误差大,则bias大 → \rightarrow underfitting,应该重新设计模型(增加复杂度),因为目标函数都不在你模型的搜索范围内,如果不改动模型而是加大训练数据量也是无效的;
2)如果模型在训练集上的误差小,但在测试集上的误差很大,则variance可能较大 → \rightarrow overfitting,应该增加训练数据量或者正则化(使得函数曲线更加平滑)

参考:
李宏毅深度学习视频
李宏毅课程原网站(有配套的PPT以及HomeWork)(需备梯子)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值