李宏毅深度学习_Task02

学习目标:

1、 学习和掌握regression算法(如何成为好的宝可梦训练师)
2、 了解regression算法的流程
3、 掌握 损失函数、梯度下降、过拟合、正则化的意义及概念


学习内容:

参照开源文档,观看视频P3-4:回归


学习产出:

1、回归(Regression)算法回顾

(1) 回归的定义

   Regression 就是找到一个函数 function,使得输入特征 x,输出是一个数值 Scalar(output a scalar)。

回归的案例

(2)机器学习的三个步骤

第一步:准备一个function set(集合) ,找一个 function。function 也被称为model(模型)
第二步:让machine可以衡量一个function是好还是不好。
第三步:让machine有一个自动的方法,有一个好演算法可以挑出最好的function

2、线性回归算法的实现

回归算法的实现也是按上面三个步骤实现:
   step1:模型假设,选择模型框架(线性模型)
   step2:模型评估,如何判断众多模型的好坏(损失函数)
   step3:模型优化,如何筛选最优的模型(梯度下降)

下面我将按上面的流程回归算法原理,(这里为了方便介绍,可能会有一些少量的原视频中宝可梦的案例的引入,由于我想从原视频中提炼出核心知识,所以我会尽量少利用这个案例)

(1) Step 1:模型假设 - 线性模型

   线性模型因为是最简单的模型,因此我们从线性模型开始讲述。那什么是线性模型呢?线性模型本质上是在数学中就是线性方程。(我是这么认为的,hh)

  当只考虑一个特征x时,也就是y与只与一个变量x有关时,那线性模型可以用下面式子表示:y=b+w⋅x
  当考虑多个特征xi 时,也就是y 与多个变量xi有关时,那线性模型可以用下面式子表示:y =b+∑wixi​
  其中,xi:就是各种特征(feature)
     wi:各个特征的权重(weight)
     bi偏移量(bias)

宝可梦训练师第一步

(2) Step 2:模型评估 - 损失函数

下面的内容我为了陈述方便都是使用多个特征的公式进行陈述,单个特征与多个特征并无太大的区别。

  首先在这章中我们还要回顾上次的内容,就是在进行模型假设后,对于监督学习,我们一般是通过给定的大量数据来训练模型来找到最佳模型。如下图所示,

在这里插入图片描述

  如下图所示,我们将训练集中真实样本用( x i n x^ n_i xin, y i n ^ \hat{y^ n_i} yin^),其中i代表第i个特征,n代表第n个训练样本,^代表真实值。

在这里插入图片描述

  有了这些真实的数据,那我们怎么衡量模型的好坏呢?因此我们需要引入损失函数(Loss Fuction),之前提到的model是由我们⾃主选择的,这⾥的loss function也是可以自主选择的。但对于线性模型,从数学的角度来讲,最常⽤的⽅法就是采⽤类似于⽅差和的形式来衡量参数的好坏,即预测值与真值差的平⽅和;这⾥真正的数值减估测数值的平⽅,叫做估测误差(Estimation error),(这里我感觉这个其实运用的就是最小二乘原理)来判定模型的好坏。 公式如下,
L ( f ) = ∑ n = 1 N ( y i n ^ − ∑ i = 1 M f ( x i n ) ) 2 L(f)=\sum_{n=1}^N(\hat{y^ n_i}-\sum_{i=1}^Mf(x^ n_i))^2 L(f)=n=1N(yin^i=1Mf(xin))2
我们再将 f ( x i n ) f(x^ n_i) f(xin)用线性模型的公式表示,带入上面式子可得
L ( f ) = L ( w , b ) = ∑ n = 1 N ( y i n ^ − ∑ i = 1 M ( b i + w i ∗ x i n ) ) 2 L(f)=L(w,b)=\sum_{n=1}^N(\hat{y^ n_i}-\sum_{i=1}^M(b_i+w_i*x^ n_i))^2 L(f)=L(w,b)=n=1N(yin^i=1M(bi+wixin))2
其中,N代表训练样本的总个数,M代表特征(变量)的总个数,上面的函数是我们在线性模型中常用的损失函数。

在这里插入图片描述

损失函数的可视化:
  下图中是loss function的可视化,该图中的每⼀个点都代表⼀组 (w,b) ,也就是对应着⼀个function ;⽽该点的颜⾊对应着的loss function的结果 L(w,b) ,它表⽰该点对应function的表现有多糟糕,颜⾊越偏红⾊代表Loss的数值越⼤,这个function的表现越不好,越偏蓝⾊代表Loss的数值越⼩,这function的表现越好。

在这里插入图片描述

  ⽐如图中⽤红⾊箭头标注的点就代表了b=-180, w=-2对应的function,即y=-180-2*x ,该点所在的颜⾊偏向于红⾊区域,因此这function的loss⽐较⼤,表现并不好。

(3) Step 3:最佳模型 - 梯度下降

  我们已经确定了loss function,他可以衡量我们的model⾥⾯每⼀个function的好坏,那如何从model也就是function set 中挑选最好的function呢?我们要用到gradient descent(梯度下降法)。

其实,挑选最好的function这⼀件事情,写成formulation/equation的样⼦如下: f ∗ = arg min ⁡ f   L ( f ) f^*= {\underset {f}{\operatorname {arg\,min} }}\,L(f) f=fargminL(f) 或者是 w ∗ , b ∗ = arg min ⁡ w , b   L ( w , b ) = arg min ⁡ w , b   ∑ n = 1 N ( y i n ^ − ∑ i = 1 M ( b i + w i ∗ x i n ) ) 2 w^*,b^*= {\underset {w,b}{\operatorname {arg\,min} }}\,L(w,b)={\underset {w,b}{\operatorname {arg\,min} }}\,\sum_{n=1}^N(\hat{y^ n_i}-\sum_{i=1}^M(b_i+w_i*x^ n_i))^2 wb=w,bargminL(w,b)=w,bargminn=1N(yin^i=1M(bi+wixin))2
也就是使损失函数L( f f f) 最小的 f f f w , b w,b w,b。(有点类似于极大似然估计的思想)
注: arg min ⁡   f ( x ) : {\underset {}{\operatorname {arg\,min} }}\,f(x): argminf(x)是当 f ( x ) f(x) f(x)取最大时。 x x x的取值。

在这里插入图片描述

Gradient Descent (梯度下降):
(1)单个参数的问题:
  以只带单个参数 w w w的Loss Function L ( w ) L(w) L(w)为例,⾸先保证 L ( w ) L(w) L(w)是可微的。也就是我们的目标函数是 w ∗ = arg min ⁡ w   L ( w ) w^*= {\underset {w}{\operatorname {arg\,min} }}\,L(w) w=wargminL(w),我们的⽬标就是找到这个使损失最⼩的 w ∗ w^* w,实际上就是寻找切线L斜率为0的global minima最⼩值点(注意,存在⼀些local minima极⼩值点,其斜率也是0),步骤如下:

  1. Randomly pick an initial value w 0 w^0 w0
      ⾸先随机选取⼀个初始的点 (当然也不⼀定要随机选取,如果有办法可以得到⽐较接近 的表现得⽐较好的 当初始点,可以有效地提⾼查找 的效率)
  2. Compute d L d w ∣ w = w 0 \frac{\mathrm{dL}}{dw}|_{w=w^0} dwdLw=w0
      计算 L L L w = w 0 w=w^0 w=w0位置的微分,即 d L d w ∣ w = w 0 \frac{\mathrm{dL}}{dw}|_{w=w^0} dwdLw=w0,⼏何意义就是切线的斜率。根据斜率来判定移动的方向,若斜率大于0向右移动(增加 w w w),若斜率小于0向左移动(减少 w w w),其中,移动一步的步⻓(step size)就是 w w w的改变量。
    在这里插入图片描述
  3. Move w w w according to the step size:
      我们把移动一步的步⻓(step size) η ∗ d L d w \eta*\frac{\mathrm{dL}}{dw} ηdwdL表示,因此每次参数该变量是 η ∗ d L d w \eta*\frac{\mathrm{dL}}{dw} ηdwdL。为了满⾜斜率为负时 w w w变⼤,斜率为正时 w w w变⼩,应当使原来的 w w w减去更新的数值,那么更新的公式为: w k + 1 = w k − η ∗ d L d w ∣ w = w k w^{k+1}=w^k-\eta*\frac{\mathrm{dL}}{dw}|_{w=w^k} wk+1=wkηdwdLw=wk
  4. 重复步骤二与步骤三直到损失函数的导数为0(找到函数的最低点),
    在这里插入图片描述
    在这里插入图片描述

注1:步长的大小只取决于两件事:
∙ \bullet ⼀是现在的微分值 d L d w \frac{\mathrm{dL}}{dw} dwdL有多⼤,微分值越⼤代表现在在⼀个越陡峭的地⽅,那它要移动的距离就越⼤,反之就越⼩;
∙ \bullet ⼆是⼀个常数项 η \eta η,被称为learning rate,即学习率,它决定了每次踏出的step size不只取决于现在的斜率,还取决于⼀个事先就定好的数值,如果learning rate⽐较⼤,那每踏出⼀步的时候,参数 w w w 更新的幅度就⽐较⼤,反之参数 w w w更新的幅度就⽐较⼩。

注2:学习率的设置:
  如果learning rate设置的⼤⼀些,那机器学习的速度就会⽐较快;但是learning rate如果太⼤,可能就会跳过最合适的global minima的点。

(2)多个参数的问题:
  它本质上处理单个参数的问题是⼀样的,步骤如下:
    1. ⾸先,也是随机选取多个特征参数的初始值
    2. 然后分别计算每个参数的偏微分,并求得步长的公式。
    3. 利用步长公式来同时更新所有参数。(在这里吴恩达教授强调,参数不
     能一个一个更新,而是求完所有偏微分后,所有参数要同时更新,我
     理解的是这样是最快可以找到极值点的)
    4.迭代重复步骤2和3,至极小值点。

Gradient descent的优点:只要 L ( f ) L(f) L(f)是可微分的,gradient descent都可以拿来处理这个 ,找到表现⽐较好的parameters。
Gradient descent的缺点:gradient descent有⼀个令⼈担⼼的地⽅,也就是我之前⼀直提到的,它每次迭代完毕,寻找到的梯度为0的点必然是极⼩值点,local minima;却不⼀定是最⼩值点,global minima。(由于参数是随机选择的,当函数有多个极值点的时候,可能出现局部最优解的情况,而不是全局最优解。)
注:在线性回归(linear regression)⾥,loss function实际上是convex的,是⼀个凸函数,是没有local optimal局部最优解的,他只有⼀个global minima,如图所示:
在这里插入图片描述

两个参数的线性模型中Gradient Descent (梯度下降)公式:
  目标函数为: y = b + w ∗ x y=b+w*x y=b+wx
  损失函数为: L ( f ) = L ( w , b ) = ∑ n = 1 N ( y n ^ − ( b + w ∗ x n ) 2 L(f)=L(w,b)=\sum_{n=1}^N(\hat{y^ n}-(b+w*x^ n)^2 L(f)=L(w,b)=n=1N(yn^(b+wxn)2
  w的梯度下降迭代公式为: w k + 1 = w k − 2 η ∑ n = 1 N ( y n ^ − ( b + w ∗ x n ) ∗ ( − x n ) w^{k+1}=w^k-2\eta\sum_{n=1}^N(\hat{y^ n}-(b+w*x^ n)*(-x^ n) wk+1=wk2ηn=1N(yn^(b+wxn)(xn)
  b的梯度下降迭代公式为: b k + 1 = b k − 2 η ∑ n = 1 N ( y n ^ − ( b + w ∗ x n ) b^{k+1}=b^k-2\eta\sum_{n=1}^N(\hat{y^ n}-(b+w*x^ n) bk+1=bk2ηn=1N(yn^(b+wxn)

3、线性回归算法存在的问题及优化

  对于我们生活中遇到的问题,往往不是可以只用简单的线性模型可以解决的。那对于线性回归算法的优化可以从下面2个方面考虑:

  1. 通过增加参数,考虑多个特征的模型(多元)
  2. 将线性模型改成非线性模型,也就是增加N次项(高次项)

  在training data上,model越复杂,error就会越低;但是在testing data上,model复杂到⼀定程度之后,error⾮但不会减⼩,反⽽会暴增,通常被称为overfitting(过拟合)。overfitting实际上是我们多使⽤了⼀些input的变量或是变量的⾼次项使曲线跟training data拟合的更好,但不幸的是这些项并不是实际情况下被使⽤的,于是这个model在testing data上会表现得很糟糕。

  regularization解决overfitting
  regularization可以使曲线变得更加smooth,training data上的error变⼤,但是 testing data上的error变⼩。原来的loss function只考虑了training data上的error,即 L ( f ) = ∑ n = 1 N ( y i n ^ − ∑ i = 1 M ( b i + ∑ j = 1 Q ( w i j ∗ ( x i n ) j ) ) 2 L(f)=\sum_{n=1}^N(\hat{y^ n_i}-\sum_{i=1}^M(b_i+\sum_{j=1}^Q(w^j_i*(x^ n_i)^j))^2 L(f)=n=1N(yin^i=1M(bi+j=1Q(wij(xin)j))2,⽽regularization则是在原来的loss function的基础上加上了⼀项 λ ∑ i = 1 M ∑ j = 1 Q ( w i j ) 2 \lambda\sum_{i=1}^M\sum_{j=1}^Q(w^j_i)^2 λi=1Mj=1Q(wij)2,简记为 λ ∑ ( w ) 2 \lambda\sum(w)^2 λ(w)2。就是把这个model⾥⾯所有的 的平⽅和⽤λ加权(其中i代表遍历n个training data,j代表遍历model的每⼀项)。

我们期待参数 越⼩甚⾄接近于0的function,为什么呢?
  因为参数值接近0的function,是⽐较平滑的;所谓的平滑的意思是,当今天的输⼊有变化的时候,output对输⼊的变化是⽐较不敏感的.
  举例来说,对 y = b i + w i ∗ x i y=b_i+w_i*x_i y=bi+wixi,这个model,当input变化 Δ x i \Delta x_i Δxi,output的变化就是 w i Δ x i w_i \Delta x_i wiΔxi,也就是说,如果 w i w_i wi越⼩越接近0的话。输出对输⼊就越不sensitive敏感,我们的function就是⼀个越平滑的function;说到这⾥你会发现,我们之前没有把bias——b这个参数考虑进去的原因是bias的⼤⼩跟function的平滑程度是没有关系的,bias值的⼤⼩只是把function上下移动⽽已。
那为什么我们喜欢⽐较平滑的function呢?
  如果我们有⼀个⽐较平滑的function,由于输出对输⼊是不敏感的,测试的时候,⼀些noises噪声对这个平滑的function的影响就会⽐较⼩,⽽给我们⼀个⽐较好的结果。

在这里插入图片描述

注:这⾥的λ需要我们⼿动去调整以取得最好的值
   λ值越⼤代表考虑smooth的那个regularization那⼀项的影响⼒越⼤,我们找到的function就越平滑。 观察下图可知,当我们的λ越⼤的时候,在training data上得到的error其实是越⼤的,但是这件事情是⾮常合理的,因为当λ越⼤的时候,我们就越倾向于考虑w的值⽽越少考虑error的⼤⼩;但是有趣的是,虽然在training data上得到的error越⼤,但是在testing data上得到的error可能会是⽐较⼩的。下图中,当λ从0到100变⼤的时候,training error不断变⼤,testing error反⽽不断变⼩;但是当λ太⼤的时候(>100),在testing data上的error就会越来越⼤。
   我们喜欢⽐较平滑的function,因为它对noise不那么sensitive;但是我们⼜不喜欢太平滑的function,因为它就失去了对data拟合的能⼒;⽽function的平滑程度,就需要通过调整λ来决定。 就像下图中,当λ=100时,在testing data上的error最⼩,因此我们选择λ=100

在这里插入图片描述

  关于overfitting的问题,很⼤程度上是由于曲线为了更好地拟合training data的数据,⽽引⼊了更多的⾼次项,使得曲线更加“蜿蜒曲折”,反⽽导致了对testing data的误差更⼤。回过头来思考,我们之前衡量model中某个function的好坏所使⽤的loss function,仅引⼊了真实值和预测值差值的平⽅和这⼀个衡量标准;我们想要避免overfitting过拟合的问题,就要使得⾼次项对曲线形状的影响尽可能⼩,因此我们要在loss function⾥引⼊⾼次项(⾮线性部分)的衡量标准,也就是将⾼次项的系数也加权放进loss function中,这样可以使得训练出来的model既满⾜预测值和真实值的误差⼩,⼜满⾜⾼次项的系数尽可能⼩⽽使曲线的形状⽐较稳定集中。
  以下图为例,如果loss function仅考虑了 ( y ^ − y ) 2 (\hat{y}-y)^2 (y^y)2这⼀误差衡量标准,那么拟合出来的曲线就是红⾊虚线部分(过拟合),⽽过拟合就是所谓的model对training data过度⾃信, ⾮常完美的拟合上了这些数据,如果具备过拟合的能⼒, 那么这个⽅程就可能是⼀个⽐较复杂的⾮线性⽅程 , 正是因为这⾥的 x 2 x^2 x2 x 3 x^3 x3使得这条虚线能够被弯来弯去, 所以整个模型就会特别努⼒地去学习作⽤在 x 2 x^2 x2 x 3 x^3 x3上的c、d参数。**但是在这个例⼦⾥,我们期望模型要学到的却是这条蓝⾊的曲线. 因为它能更有效地概括数据。**⽽且只需要⼀个 y = a + b x y=a+bx y=a+bx就能表达出数据的规律。或者是说, 蓝⾊的线最开始时, 和红⾊线同样也有c、d两个参数, 可是最终学出来时, c 和 d 都学成了0, 虽然蓝⾊⽅程的误差要⽐红⾊⼤, 但是概括起数据来还是蓝⾊好。

在这里插入图片描述

  这也是我们通常采⽤的⽅法,我们不可能⼀开始就否定⾼次项⽽直接只采⽤低次线性表达式的model,因为有时候真实数据的确是符合⾼次项⾮线性曲线的分布的;⽽如果⼀开始直接采⽤⾼次⾮线性表达式的model,就很有可能造成overfitting,在曲线偏折的地⽅与真实数据的误差⾮常⼤。我们的⽬标应该是这样的:

在⽆法确定真实数据分布的情况下,我们尽可能去改变loss function的评价标准:
- 我们的model的表达式要尽可能的复杂,包含尽可能多的参数和尽可能多的⾼次⾮线性项;
- 但是我们的loss function⼜有能⼒去控制这条曲线的参数和形状,使之不会出现overfitting过拟合的现象;
- 在真实数据满⾜⾼次⾮线性曲线分布的时候,loss function控制训练出来的⾼次项的系数⽐较⼤,使得到的曲线⽐较弯折起伏;
- 在真实数据满⾜低次线性分布的时候,loss function控制训练出来的⾼次项的系数⽐较⼩甚⾄等于0,使得到的曲线接近linear分布 。

那我们如何保证能学出来这样的参数呢? 这就是 L1 L2 正规化出现的原因
之前的loss function仅考虑了 ( y ^ − y ) 2 (\hat{y}-y)^2 (y^y)2这⼀误差衡量标准,⽽L1 L2正规化就是在这个loss function的后⾯多加了⼀个东西,即model中跟⾼次项系数有关的表达式:

  • L1正规化即加上 λ ∑ ∣ w j ∣ \lambda\sum|w_j| λwj,这⼀项,loss function变成 L ( f ) = ∑ i = 1 n ( y i ^ − y i ) 2 + λ ∑ j ∣ w j ∣ L(f)=\sum_{i=1}^n(\hat{y^i}-y^i)^2+\lambda\displaystyle\sum_{j}|w_j| L(f)=i=1n(yi^yi)2+λjwj。即n个training data⾥的数据的真实值与预测值差值的平⽅和加上λ权重下的model表达式中所有项系数的绝对值之和。
    L2正规化即加上 λ ∑ ( w j ) 2 \lambda\sum(w_j)^2 λ(wj)2,这⼀项,loss function变成 L ( f ) = ∑ i = 1 n ( y i ^ − y i ) 2 + λ ∑ j ( w j ) 2 L(f)=\sum_{i=1}^n(\hat{y^i}-y^i)^2+\lambda\displaystyle\sum_{j}(w_j)^2 L(f)=i=1n(yi^yi)2+λj(wj)2。即n个training data⾥的数据的真实值与预测值差值的平⽅和加上λ权重下的model表达式中所有项系数的平⽅和。
    相对来说,L2要更稳定⼀些,L1的结果则不那么稳定。

在这里插入图片描述
本次总结,就不在叙述如何训练宝可梦的,感兴趣的同学可以观看原视频。如果有时间,我也会重新从成为宝可梦训练师的角度重新讲述这个问题。

 参考文献:
 https://datawhalechina.github.io/leeml-notes/#/chapter1/chapter1?id=%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%9b%b8%e5%85%b3%e7%9a%84%e6%8a%80%e6%9c%af
 https://www.yuque.com/preview/yuque/0/2021/pdf/12417658/1628954544320-ee1fbb29-8c92-4fe9-8825-0ffc5c4bf5cd.pdf?from=https://www.yuque.com/docs/share/f973c7b8-8675-4ad8-950d-dfea713e7e39
 https://www.bilibili.com/video/BV1Ht411g7Ef      
 https://www.coursera.org/learn/machine-learning
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值