IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 李宏毅 Machine Learning 2020 Spring - Regression -> 正文阅读

[Java知识库]李宏毅 Machine Learning 2020 Spring - Regression


李宏毅 Machine Learning 2020 Spring - Introduction
\qquad 我们今天要讲的是 R e g r e s s i o n Regression Regression,等一下我会举一个例子来讲 R e g r e s s i o n Regression Regression 是怎么做的。顺便引出一些 M a c h i n e ? L e a r n i n g Machine\ Learning Machine?Learning 里面常见的重要概念。

1. Regression 可以做什么?

\qquad 除了我们作业里面要大家做的预测 PM2.5 这个任务以外,还有很多其他非常有用的 t a s k task task
\qquad 举例来说,如果你可以做一个股票预测的系统,你要做的事情就是:找一个 f u n c t i o n function function,这个 f u n c t i o n function function i n p u t input input 可能是过去十年各种股票起伏的资料,或者是 A A A 公司并购 B B B 公司, B B B 公司并购 C C C 公司等等的资料。你希望这个 f u n c t i o n function function i n p u t input input 这些资料以后,它的 o u t p u t output output 是,明天的道琼斯工业平均指数的点数。如果你可以预测这个的话,你就发了。
在这里插入图片描述
\qquad 还有别的 t a s k task task,比如说现在很热门的无人车,自动车,这个无人车也可以想成是一个 R e g r e s s i o n Regression Regression p r o b l e m problem problem,在这个 R e g r e s s i o n Regression Regression p r o b l e m problem problem 里面, i n p u t input input 就是你的无人车所看到的各种 s e n s o r sensor sensor:它的红外线感测的 s e n s o r sensor sensor,它的影像的视讯的镜头所看到的马路上的东西等等。你的 i n p u t input input 就是这些 i n f o r m a t i o n information information o u t p u t output output 就是方向盘的角度。比如说,要左转 50 50 50度,要右转 50 50 50度(左转负 50 50 50度),所以 o u t p u t output output 也是一个 s c a l a r scalar scalar。所以无人车驾驶就是一个 R e g r e s s i o n ? P r o b l e m Regression\ Problem Regression?Problem
在这里插入图片描述
\qquad 或者是,你可以做推荐系统。我们都知道说, Y o u T u b e YouTube YouTube 要推荐影片或者 A m a z o n Amazon Amazon 要推荐商品给你,那推荐系统他要做的事情,也可以想成是一个 R e g r e s s i o n Regression Regression 的问题。就是找一个 f u n c t i o n function function,它的 i n p u t input input 是某一个使用者 A A A 和某一个商品 B B B,它的 o u t p u t output output就是使用者 A A A 购买商品 B B B 的可能性。如果你可以找到这样一个 f u n c t i o n function function,它可以精确的预测使用者 A A A 购买商品 B B B 的可能性的话,那 A m a z o n Amazon Amazon 就会推荐使用者 A A A 他最有可能购买的商品。
在这里插入图片描述
\qquad 这个是 R e g r e s s i o n Regression Regression 的种种应用。今天我要讲的是,另外一个我觉得更实用的应用。就是预测宝可梦的CP值。

2. 引入问题:预测宝可梦的 CP 值

在这里插入图片描述
\qquad CP 值就是一只宝可梦的战斗力,你抓到一只宝可梦以后,比如说这个是一只妙蛙种子,然后你给他吃一些星辰或糖果以后,他就会进化成妙蛙草,而如果他进化成妙蛙草以后,他的 CP 值就变了。
在这里插入图片描述
\qquad 为什么我们会希望能够预测宝可梦的 CP 值呢?因为如果你可以精确的预测一只宝可梦在进化以后的 CP 值的话,你就可以说,你是否要进化这只宝可梦。如果他是一只 CP 值比较低的宝可梦的话,你可能就把他拿去做糖果,你就不进化他,这样你就可以节省一些你的糖果的资源。你可能就会问,为什么我们要节省糖果的资源?因为你这样可以在比较段时间内,就进化比较多强的宝可梦。你就会想说为什么我们要比较强的宝可梦?因为他可以去打道馆。
\qquad 今天我们要做的事情就是找一个 f u n c t i o n function function,这个 f u n c t i o n function function i n p u t input input 就是某一只宝可梦,它的 o u t p u t output output 就是这只宝可梦如果我们把它进化以后,它的 CP 值的数值是多少。
\qquad 这是一个 R e g r e s s i o n Regression Regression p r o b l e m problem problem,我们的 i n p u t input input 就是某一只宝可梦所有相关的 i n f o r m a t i o n information information,比如说,我们把一只宝可梦用 x x x 表示,它的 CP 值我们就用 x c p x_{cp} xcp? 来表示。我们用下标来表示某一个完整东西里面的某一个 c o m p o n e n t component component

  • x c p x_{cp} xcp? 代表某一只宝可梦 x x x 它在进化前的 CP 值。比如说,这个妙蛙种子的 x c p x_{cp} xcp? 值是 14 14 14
  • x s x_{s} xs? 代表这一只宝可梦 x x x 是属于哪一个物种。比如说,这个妙蛙种子的 x s x_{s} xs? 值是 B u l b a s a u r Bulbasaur Bulbasaur
  • x h p x_{hp} xhp? 代表这一只宝可梦 x x x 它的生命值。比如说,这个妙蛙种子的 x h p x_{hp} xhp? 值是 10 10 10
  • x w x_{w} xw? 代表这一只宝可梦 x x x 它的重量。比如说,这个妙蛙种子的 x w x_{w} xw? 值是 11.62 k g 11.62kg 11.62kg
  • x h x_{h} xh? 代表这一只宝可梦 x x x 它的高度。比如说,这个妙蛙种子的 x h x_{h} xh? 值是 0.88 m 0.88m 0.88m
    \qquad 这个 f u n c t i o n function function o u t p u t output output 就是这只宝可梦进化后的 CP 值,它是一个数值,就是一个 s c a l a r scalar scalar,我们把它用 y y y 来表示。
    在这里插入图片描述

3. 解决问题:预测宝可梦的 CP 值

\qquad 我们第一堂课就讲过说,做 m a c h i n e ? l e a r n i n g machine\ learning machine?learning 就是三个步骤:第一个步骤是找一个 m o d e l model model,也就是 f u n c t i o n ? s e t function\ set function?set;第二个步骤是定义 f u n c t i o n ? s e t function\ set function?set 里面某一个 f u n c t i o n function function,然后 e v a l u a t e evaluate evaluate 它的好坏;第三个步骤就是找一个最好的 f u n c t i o n function function

3.1 第一步:model

\qquad 首先,我们从第一个步骤开始,我们要找一个 f u n c t i o n ? s e t function\ set function?set,这个 f u n c t i o n ? s e t function\ set function?set 就是所谓的 m o d e l model model。在这个 t a s k task task 里面,我们的 f u n c t i o n ? s e t function\ set function?set 应该长什么样子呢?
\qquad 我们首先写一个简单的 y = b + w ? x c p y=b+w\cdot x_{cp} y=b+w?xcp?,我们认为说进化后的 CP 值 y y y 等于某一个常数项 b b b 加上某一个数值 w w w 乘上现在输入的宝可梦的 x x x 它在进化前的 CP 值 x c p x_{cp} xcp? w w w b b b 是参数,可以是任意的数值,填充不同的 w w w b b b 就可以得到不同的 f u n c t i o n ? { f 1 、 f 2 、 ? ? } function\ \{f_1、f_2、\cdots\} function?{f1?f2??}。使用 y = b + w ? x c p y=b+w\cdot x_{cp} y=b+w?xcp? 代表这些不同 f u n c t i o n function function 的集合。我们等一下要用 t r a i n i n g ? d a t a training\ data training?data 来告诉我们说,在这个 f u n c t i o n ? s e t function\ set function?set 里面,哪一个 f u n c t i o n function function 才是合理的 f u n c t i o n function function
y = b + w ? x c p \qquad y=b+w\cdot x_{cp} y=b+w?xcp? 这样的 m o d e l model model 是一种 l i n e a r linear linear m o d e l model model,所谓 l i n e a r linear linear m o d e l model model 的意思是,如果我们可以把一个 f u n c t i o n function function 写成 y = b + ∑ w i ? x i y=b+\displaystyle \sum w_i\cdot x_i y=b+wi??xi?,那它就是一个 l i n e a r linear linear f u n c t i o n function function x i x_i xi? 指的是 i n p u t input input x x x 的各种 a t t r i b u t e attribute attribute,这些从 i n p u t input input o b j e c t object object 里面抽出来的各种数值当作 f u n c t i o n function function i n p u t input input,这些东西叫做 f e a t u r e feature feature。这个 w i w_i wi? 叫做 w e i g h t weight weight b b b 叫做 b i a s bias bias
在这里插入图片描述

3.2 第二步:Goodness of Function

1. 收集 training data

\qquad 接下来我们要收集 t r a i n i n g ? d a t a training\ data training?data,才能够找这个 f u n c t i o n function function。这是一个 s u p e r v i s e d ? l e a r n i n g supervised\ learning supervised?learning t a s k task task,所以我们收集的是 f u n c t i o n function function i n p u t input input f u n c t i o n function function o u t p u t output output。因为是 r e g r e s s i o n regression regression t a s k task task,所以 f u n c t i o n function function o u t p u t output output 是一个数值。
\qquad 举例来说,你抓了一只杰尼龟,进化之后是卡咪龟。那么 f u n c t i o n function function i n p u t input input 就是这只杰尼龟,我们用 x 1 x^1 x1 表示,我们用上标来表示一个完整的 o b j e c t object object 的编号。这只杰尼龟进化之后的 CP 值是 979,所以我们 f u n c t i o n function function o u t p u t output output 是 979,那这个 979 我们就用 y ^ 1 \hat{y}^1 y^?1 来代表。由于 r e g r e s s i o n regression regression o u t p u t output output s c a l a r scalar scalar,因此 y ^ 1 \hat{y}^1 y^?1 里面并没有 c o m p o n e n t component component,只是一个简单的数值。但是未来如果考虑 S t r u c t u r e d ? L e a r n i n g Structured\ Learning Structured?Learning 的时候,我们 o u t p u t output output o b j e c t object object 可能是有 s t r u c t u r e structure structure 的,所以我们还是需要用上标下标来表示一个完整的 o u t p u t output output o b j e c t object object 和它包含的 c o m p o n e n t component component
在这里插入图片描述
\qquad 我们收集了 10 只宝可梦,这 10 只宝可梦编号从 x 1 x^1 x1 x 10 x^{10} x10,进化后的 CP 值从 y ^ 1 \hat{y}^1 y^?1 y ^ 10 \hat{y}^{10} y^?10。我们将这 10 只宝可梦的 i n f o r m a t i o n information information 画出来,这个图上每一个蓝色的点代表一只宝可梦, x x x 轴代表这一只宝可梦的原始 CP 值 x c p x_{cp} xcp? y y y 轴代表进化后的 CP 值 y ^ \hat{y} y^?
在这里插入图片描述

2. 评估 function

(1)Loss function 损失函数

\qquad 有了这些 t r a i n i n g ? d a t a training\ data training?data 以后,我们就可以定义一个 f u n c t i o n function function 的好坏。如何定义一个 f u n c t i o n function function 的好坏呢?我们需要定义另外一个 f u n c t i o n function function,叫做 L o s s ? f u n c t i o n Loss\ function Loss?function,写成 L L L L o s s ? f u n c t i o n Loss\ function Loss?function i n p u t input input 是一个很特别的 f u n c t i o n function function L o s s ? f u n c t i o n Loss\ function Loss?function 是一个 f u n c t i o n function function f u n c t i o n function function L o s s ? f u n c t i o n Loss\ function Loss?function o u t p u t output output 是一个数值告诉我们说现在 i n p u t input input 的这个 f u n c t i o n function function他有多不好。可以写成: L ( f ) = L ( w , b ) L(f)=L(w,b) L(f)=L(w,b),可以说 L o s s ? f u n c t i o n Loss\ function Loss?function 是在衡量一组参数的好坏。
\qquad 那怎么定这个 L o s s ? f u n c t i o n Loss\ function Loss?function 呢?我们使用比较常见的作法:将 i n p u t input input w w w b b b 实际地代入 y = b + w ? x c p y=b+w\cdot x_{cp} y=b+w?xcp? 这个 f u n c t i o n function function 里面,就可以得到预测值 y y y。我们将真正的数值 y ^ \hat{y} y^? 减去预测的数值 y y y,再取平方,这就是估测的误差。我们再将 t r a i n i n g ? d a t a training\ data training?data 的所有估测误差合起来就得到 L o s s ? f u n c t i o n Loss\ function Loss?function。如果我使用某一个 f u n c t i o n function function,它给我们的估测误差越大,那当然这个 f u n c t i o n function function 就越不好。
在这里插入图片描述

(2)可视化损失函数

\qquad 再来我们有了这个 L o s s ? f u n c t i o n Loss\ function Loss?function 以后,我们可以将 L o s s ? f u n c t i o n Loss\ function Loss?function 的形状画出来,使用 L ( w , b ) L(w,b) L(w,b) w w w b b b 作图,在图上的每一个点就代表一组 w w w b b b,也就是某一个 f u n c t i o n function function。颜色代表了 f u n c t i o n function function 有多不好,颜色越红代表 l o s s loss loss 越大, f u n c t i o n function function 越不好;颜色越蓝代表 l o s s loss loss 越小, f u n c t i o n function function 越好。比如:图中用红色箭头标注的点就代表了 b = ? 180 , w = ? 2 b=-180, w=-2 b=?180,w=?2 对应的 f u n c t i o n function function,即 y = ? 180 ? 2 ? x c p y=?180 ? 2\cdot x_{cp} y=?180?2?xcp?,该点所在的颜色偏向于红色区域,因此这个 f u n c t i o n function function l o s s loss loss 比较大,表现并不好。
在这里插入图片描述

3.3 第三步:最优 function

\qquad 我们已经定好了我们的 L o s s ? f u n c t i o n Loss\ function Loss?function,可以衡量我们的 m o d e l model model 里面每一个 f u n c t i o n function function 的好坏。接下来我们要做的事情就是从这个 f u n c t i o n ? s e t function\ set function?set 里面挑选一个最好的 f u n c t i o n function function。写成 f o r m u l a t i o n / e q u a t i o n formulation/equation formulation/equation f ? = a r g m i n f L ( f ) \displaystyle f^*=arg\underset {f}{min}L(f) f?=argfmin?L(f) w ? , b ? = a r g m i n w , b L ( w , b ) = a r g m i n w , b ∑ n = 1 10 ( y ^ n ? ( b + w ? x c p n ) ) 2 \displaystyle w^*,b^*=arg\underset {w,b}{min}L(w,b)=arg\underset {w,b}{min}\sum^{10}_{n=1}{(\hat{y}^n-(b+w\cdot x_{cp}^n))^2} w?,b?=argw,bmin?L(w,b)=argw,bmin?n=110?(y^?n?(b+w?xcpn?))2。利用线性代数可以解得这个 f o r m u l a t i o n / e q u a t i o n formulation/equation formulation/equation c l o s e d ? f o r m ? s o l u t i o n closed-form\ solution closed?form?solution,但我们要教你另外一个做法,这个做法叫做 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent
在这里插入图片描述

3.3.1 gradient descent(梯度下降法)

\qquad 这边要强调一下 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 不是只适用于解这一个 f u n c t i o n function function,只要 L L L 是可微分的,不管是什么 f u n c t i o n function function g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 都可以拿来处理这个 f u n c t i o n function function,都可以帮你找到表现比较好的 f u n c t i o n function function 或者是参数。我们来看一下 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 是怎么做的?

1. 简单 task(单参数问题)

\qquad 我们先假设一个比较简单的 t a s k task task L o s s ? f u n c t i o n Loss\ function Loss?function 只有一个参数 w w w,求解: w ? = a r g m i n w L ( w ) \displaystyle w^*=arg\underset {w}{min}L(w) w?=argwmin?L(w)

  • 步骤1:随机选取一个初始的点。比如:随机选取 w 0 w^0 w0
  • 步骤2:计算在 w = w 0 w=w^0 w=w0 这个位置,参数 w w w L o s s ? f u n c t i o n Loss\ function Loss?function 的微分,即 d L d w ∣ w = w 0 \displaystyle \frac{dL}{dw}|_{w=w^0} dwdL?w=w0?。在 w = w 0 w=w^0 w=w0 处微分的几何意义是切线斜率。
    \qquad 如果切线斜率是负的,显然从图上可以看到 w 0 w^0 w0 左边的 l o s s loss loss 是比较高的,右边的 l o s s loss loss 是比较低的,那我们要找 l o s s loss loss 比较低的 f u n c t i o n function function,所以应该增加 w w w 的值。
    \qquad 反之,如果切线斜率是正的,代表与图中虚线反向,也就是右边高左边低的话,那显然应该减少 w w w 的值,把我们的参数往左边移动。
    在这里插入图片描述
    \qquad 在我们这个示例中, w w w 值是要增加的,那怎么增加呢?要增加多少呢?这边的增加量我们写成: ? η d L d w ∣ w = w 0 \displaystyle -\eta\frac{dL}{dw}|_{w=w^0} ?ηdwdL?w=w0? w w w 的增加量,我们也称作步长 s t e p ? s i z e step\ size step?size,踏一步的 s t e p ? s i z e step\ size step?size 取决于两件事:第一,取决于现在的微分值 d L d w \displaystyle \frac{dL}{dw} dwdL? 有多大。如果微分值越大,代表 w w w 点现在在一个越陡峭的地方,那它的移动距离就越大,反之越小。第二,取决于一个常数项 η \eta η。这个常数项 η \eta η 被称作 l e a r n i n g ? r a t e learning\ rate learning?rate(学习率),这个 l e a r n i n g ? r a t e learning\ rate learning?rate 决定说我们今天踏一步不只是取决于我们现在微分值算出来有多大,还取决于我们一个事先就定好的数值。如果这个事先定好的数值你给它定大一点的话,那今天踏出一步的时候,参数更新的幅度就比较大,反之更新幅度就比较小。如果参数更新的幅度比较大的话, l e a r n i n g ? r a t e learning\ rate learning?rate 设定大一点的话,那学习的效率,学习的速度就比较快。因为 d L d w ∣ w = w 0 \displaystyle \frac{dL}{dw}|_{w=w^0} dwdL?w=w0? 这一项的微分值与参数增加减少是反向的,所以我们前面需要乘以一个负号,因此 w 0 w^0 w0 踏一步变成 w 1 w^1 w1 可以表示为: w 0 ? η d L d w ∣ w = w 0 → w 1 \displaystyle w^0- \eta\frac{dL}{dw}|_{w=w^0} \rightarrow w^1 w0?ηdwdL?w=w0?w1
    在这里插入图片描述
  • 步骤3:重复步骤2,计算 w = w 1 w=w^1 w=w1 这个位置所算出来的微分值 d L d w ∣ w = w 1 \displaystyle \frac{dL}{dw}|_{w=w^1} dwdL?w=w1?。假设 w 1 w^1 w1 处的微分值如下图所示,这个微分值仍然建议我们应该往右移动我们的参数,只是现在移动的幅度可能是比较小的,因为 w 1 w^1 w1 处的微分值相较于前面 w 0 w^0 w0 这一项是比较小的。那么 w 1 ? η d L d w ∣ w = w 1 \displaystyle w^1- \eta\frac{dL}{dw}|_{w=w^1} w1?ηdwdL?w=w1? 就变成了 w 2 w^2 w2
    在这里插入图片描述
    \qquad 那这个步骤就反复不断的执行下去。经过非常非常多的 i t e r a t i o n iteration iteration 后,经历非常多次的参数更新以后,假设经过 T T T 次的更新,这个 T T T 是一个非常大的数字,最后你会到一个 l o c a l ? m i n i m a local\ minima local?minima 的地方 w T w^T wT。所谓 l o c a l ? m i n i m a local\ minima local?minima 的地方,就是这个地方的微分是 0,所以你接下来算出的微分都是 0 了,所以你的参数接下来就会卡在这边,就没有办法再更新了。这件事情你可能会觉得不太高兴,因为 w T w^T wT 的右侧有一个 g l o b a l ? m i n i m a global\ minima global?minima,你使用 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 找出来的 s o l u t i o n solution solution,你找出来的参数,它其实不是最佳解。但幸运的是,这件事情在 r e g r e s s i o n regression regression 上不是一个问题,因为在 l i n e a r ? r e g r e s s i o n linear\ regression linear?regression 上是没有 l o c a l ? m i n i m a local\ minima local?minima的。
    在这里插入图片描述

2. 两个参数 w,b 问题

\qquad 我们今天真正要处理的事情,是有两个参数的问题,也就是 w w w b b b。从一个参数推广到两个参数,其实是没有任何不同的。

  • 步骤1:随机选取两个初始值, w 0 w^0 w0 b 0 b^0 b0
  • 步骤2:计算 ? L ? w ∣ w = w 0 , b = b 0 \displaystyle \frac{\partial L}{\partial w}|_{w=w^0,b=b^0} ?w?L?w=w0,b=b0? ? L ? b ∣ w = w 0 , b = b 0 \displaystyle \frac{\partial L}{\partial b}|_{w=w^0,b=b^0} ?b?L?w=w0,b=b0?,计算出这两个偏微分以后,就分别去更新 w 0 w^0 w0 b 0 b^0 b0 这两个参数: w 0 ? η ? L ? w ∣ w = w 0 , b = b 0 ? w 1 \displaystyle w^0- \eta\frac{\partial L}{\partial w}|_{w=w^0,b=b^0} \Rightarrow w^1 w0?η?w?L?w=w0,b=b0??w1 b 0 ? η ? L ? b ∣ w = w 0 , b = b 0 ? b 1 \displaystyle b^0- \eta\frac{\partial L}{\partial b}|_{w=w^0,b=b^0} \Rightarrow b^1 b0?η?b?L?w=w0,b=b0??b1
  • 步骤3:重复步骤2,计算 w = w 1 w=w^1 w=w1 b = b 1 b=b^1 b=b1 这个位置所算出来的微分值: ? L ? w ∣ w = w 1 , b = b 1 \displaystyle \frac{\partial L}{\partial w}|_{w=w^1,b=b^1} ?w?L?w=w1,b=b1? ? L ? b ∣ w = w 1 , b = b 1 \displaystyle \frac{\partial L}{\partial b}|_{w=w^1,b=b^1} ?b?L?w=w1,b=b1?,然后对参数 w w w b b b 进行更新: w 1 ? η ? L ? w ∣ w = w 1 , b = b 1 ? w 2 \displaystyle w^1- \eta\frac{\partial L}{\partial w}|_{w=w^1,b=b^1} \Rightarrow w^2 w1?η?w?L?w=w1,b=b1??w2 b 1 ? η ? L ? b ∣ w = w 1 , b = b 1 ? b 2 \displaystyle b^1- \eta\frac{\partial L}{\partial b}|_{w=w^1,b=b^1} \Rightarrow b^2 b1?η?b?L?w=w1,b=b1??b2。你就反复进行这个步骤,最后你就可以找到一个 l o s s loss loss 相对比较小的 w w w 值跟 b b b 的值。
    在这里插入图片描述

\qquad 这边要补充说明的是,所谓 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent g r a d i e n t gradient gradient 指的是什么呢?其实 g r a d i e n t gradient gradient 就是 ? L = [ ? L ? w ? L ? w ] \nabla L=\left[\begin{matrix}\displaystyle \frac{\partial L}{\partial w} \\ \displaystyle \frac{\partial L}{\partial w} \end{matrix}\right] ?L=?????w?L??w?L?????? 这个向量。

3. 可视化

\qquad 刚才做的事情可视化如下,是一个等高线图,有两个参数 w w w b b b,这两个参数决定了一个 f u n c t i o n function function 长什么样。在这个图上的颜色代表了 l o s s ? f u n c t i o n loss\ function loss?function 的数值,越偏蓝色代表数值越小。那我们就随机选取一个初始值是在左下角红色的的点,接下来计算在红色这个点的偏微分 ? L ? w \displaystyle \frac{\partial L}{\partial w} ?w?L? ? L ? b \displaystyle \frac{\partial L}{\partial b} ?b?L?,然后把参数更新: w ? η ? L ? w \displaystyle w- \eta\frac{\partial L}{\partial w} w?η?w?L? b ? η ? L ? b \displaystyle b- \eta\frac{\partial L}{\partial b} b?η?b?L?,点移动的方向即 g r a d i e n t gradient gradient 的方向其实就是等高线的法线方向。接下来再计算一次偏微分,这个偏微分告诉你说现在应该往哪个方向更新你的参数。
在这里插入图片描述
g r a d i e n t ? d e s c e n t \qquad gradient\ descent gradient?descent 有一个让人担心的地方,假设你的 l o s s ? f u n c t i o n loss\ function loss?function 如下图所示,因为每次随机初始化值 w 0 w^0 w0 是随机的,按照 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 建议的方向更新参数最后得到的最优 f u n c t i o n function function 是不一定相同的。
在这里插入图片描述
\qquad 但是在 l i n e a r ? r e g r e s s i o n linear\ regression linear?regression 里面不存在这种担心,因为 l i n e a r r e g r e s s i o n linear regression linearregression l o s s f u n c t i o n loss function lossfunction c o n v e x convex convex(凸函数),它是没有 l o c a l ? o p t i m a l local\ optimal local?optimal(局部最优解)的。 l i n e a r ? r e g r e s s i o n linear\ regression linear?regression w w w b b b 的偏微分计算如下:
° ? L ( w , b ) = ∑ n = 1 10 ( y ^ n ? ( b + w ? x c p n ) ) 2 \qquad \circ\ \displaystyle L(w,b)=\sum\limits_{n=1}^{10}{(\hat{y}^n-(b+w\cdot x_{cp}^n))^2} °?L(w,b)=n=110?(y^?n?(b+w?xcpn?))2
° ? ? L ? w = ∑ n = 1 10 2 ( y ^ n ? ( b + w ? x c p n ) ) ( ? x c p n ) \qquad \circ\ \displaystyle \frac{\partial L}{\partial w}=\sum\limits_{n=1}^{10}2{(\hat{y}^n-(b+w\cdot x_{cp}^n))(-x_{cp}^{n})} °??w?L?=n=110?2(y^?n?(b+w?xcpn?))(?xcpn?)
° ? ? L ? b = ∑ n = 1 10 2 ( y ^ n ? ( b + w ? x c p n ) ) ( ? 1 ) \qquad \circ\ \displaystyle \frac{\partial L}{\partial b}=\sum\limits_{n=1}^{10}2{(\hat{y}^n-(b+w\cdot x_{cp}^n))(-1)} °??b?L?=n=110?2(y^?n?(b+w?xcpn?))(?1)

4. How’s the results?

l i n e a r ? r e g r e s s i o n \qquad linear\ regression linear?regression 的函式 y = b + w ? x y=b+w\cdot x y=b+w?x 根据 t r a i n i n g ? d a t a training\ data training?data 找出来最好的 b b b w w w 分别是 b = ? 188.4 b=-188.4 b=?188.4 w = 2.7 w=2.7 w=2.7。将 b b b w w w 的值分别画在图上如下所示,你会发现图中红色的直线没有办法完全正确的评定所有的宝可梦进化后的 CP 值。如果你想知道这个最优 f u n c t i o n function function 做的有多好或者多不好的话,你可以计算一下你的 e r r o r error error,也就是计算一下每一个蓝色的点跟这个红色的线之间的距离。通过计算得到这 10 只宝可梦 t r a i n i n g ? d a t a training\ data training?data 的平均 e r r o r error error 为 31.9。
在这里插入图片描述
\qquad 但是这不是我们最关心的,我们真正关心的是 g e n e r a l i z a t i o n generalization generalization c a s e case case,也就是说,假设你今天抓到一只新的宝可梦以后,如果使用你现在的 m o d e l model model 去预测的话,那做出来你估测的误差到底有多少。
\qquad 所以真正关心的是,那些你没有看过的新的 d a t a data data,这边我们叫做 t e s t i n g ? d a t a testing\ data testing?data,他的误差是多少。所以我们这边又抓了 10 只宝可梦当作 t e s t i n g ? d a t a testing\ data testing?data,这 10 只宝可梦与之前拿来当作训练的 10 只宝可梦不是同样的10 只。其实这新抓的 10 只跟刚才看到的 10 只的分布其实是蛮像的,它们就是下面图上的10个点。那你会发现说,我们刚才在训练资料上找出来这条红色的线,其实也可以大致上预测,在我们没有看到过的宝可梦上它的进化后的 CP 值。如果你要量化它的错误的话,那就计算一下它的错误,它的错误计算出来是 35.0,这个值是比我们刚才在 t r a i n i n g ? d a t a training\ data training?data 上看到的 e r r o r error error 还要稍微大一点。因为可以想想看我们最好的 f u n c t i o n function function 是在 t r a i n i n g ? d a t a training\ data training?data 上找到的,所以在 t r a i n i n g ? d a t a training\ data training?data 上面算出来的 e r r o r error error 本来就应该比 t e s t i n g ? d a t a testing\ data testing?data 上算出来的 e r r o r error error 要小一点。
在这里插入图片描述

5. How can we do better?

\qquad 如果你想要做的更好的话,接下来你要做的事情就是重新设计一下你的 m o d e l model model。如果你观察过你的 m o d e l model model,你就会发现说,在原进化前的 CP 值特别大的地方,还有进化前 CP 值特别小的地方,预测是比较不准的。从结果看来,能够正确预测的 f u n c t i o n function function 可能不是这样子一条直线,它可能是稍微更复杂一点,所以我们需要有一个更复杂的 m o d e l model model
\qquad 举例来说,我们这边可能需要引入二次式。我们今天可能需要引入 ( x c p ) 2 (x_{cp})^2 (xcp?)2 这一项,我们重新设计了一个 m o d e l model model,这个 m o d e l model model 它写成 y = b + w 1 ? x c p + w 2 ? ( x c p ) 2 y=b+w_1\cdot x_{cp}+w_2\cdot(x_{cp})^2 y=b+w1??xcp?+w2??(xcp?)2 。如果我们有了这个新的 f u n c t i o n function function,你可以用我们刚才讲的一模一样的方式去 d e f i n e define define 一个 f u n c t i o n function function 的好坏,然后用 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 找出一个在你的 f u n c t i o n ? s e t function\ set function?set 里面最好的 f u n c t i o n function function。根据 t r a i n i n g ? d a t a training\ data training?data 找出来的最好的 f u n c t i o n function function b = ? 10.3 b=-10.3 b=?10.3 w 1 = 1.0 w_1=1.0 w1?=1.0 w 2 = 2.7 × 1 0 ? 3 w_2=2.7\times10^{-3} w2?=2.7×10?3
\qquad 如果我们把这个最好的 f u n c t i o n function function 画在图上的话,它如下图所示。你就会发现说,现在我们有了这条新的曲线,有了新的 m o d e l model model,它的预测在 t r a i n i n g ? d a t a training\ data training?data 上面看起来是更准一点。在 t r a i n i n g ? d a t a training\ data training?data 上面你得到的 a v e r a g e ? e r r o r average\ error average?error 现在是 15.4。但我们真正关心的是 t e s t i n g ? d a t a testing\ data testing?data,那我们就把同样的 m o d e l model model a p p l y apply apply t e s t i n g ? d a t a testing\ data testing?data 上,然后再计算一下它的 a v e r a g e ? e r r o r average\ error average?error,那我们现在得到的是 18.4。在刚才如果我们没有考虑 ( x c p ) 2 (x_{cp})^2 (xcp?)2 的时候,算出来的 a v e r a g e ? e r r o r average\ error average?error 是 30 左右,现在有考虑平方项得到的是 18.4。
在这里插入图片描述
\qquad 那有没有可能做的更好呢?比如说我们可以考虑一个更复杂的 m o d e l model model,我们引入不只是 ( x c p ) 2 (x_{cp})^2 (xcp?)2,我们引入 ( x c p ) 3 (x_{cp})^3 (xcp?)3,所以我们现在的 m o d e l model model 长这个样子: y = b + w 1 ? x c p + w 2 ? ( x c p ) 2 + w 3 ? ( x c p ) 3 y=b+w_1\cdot x_{cp}+w_2\cdot(x_{cp})^2+w_3\cdot(x_{cp})^3 y=b+w1??xcp?+w2??(xcp?)2+w3??(xcp?)3 。你就用一模一样的方法,你就可以根据你的 t r a i n i n g ? d a t a training\ data training?data 找到在这一个 f u n c t i o n ? s e t function\ set function?set 里面,在这个model里面最好的一个 f u n c t i o n function function。那找出来是这样: b = 6.4 b=6.4 b=6.4 w 1 = 0.66 w_1=0.66 w1?=0.66 w 2 = 4.3 × 1 0 ? 3 w_2=4.3\times10^{-3} w2?=4.3×10?3 w 3 = ? 1.8 × 1 0 ? 6 w_3=-1.8\times10^{-6} w3?=?1.8×10?6,所以你发现 w 3 w_3 w3? 其实是它的值比较小,它可能是没有太大的影响,做出来的线其实跟刚才看到的二次的线是没有太大的差别的,那做出来看起来就如下图所示。那这个时候 a v e r a g e ? e r r o r average\ error average?error 算出来是 15.3,如果你看 t e s t i n g ? d a t a testing\ data testing?data 的话, t e s t i n g ? d a t a testing\ data testing?data 算出来的 a v e r a g e ? e r r o r average\ error average?error 是 18.1,跟刚刚二次的,有考虑 ( x c p ) 2 (x_{cp})^2 (xcp?)2 的结果比起来是稍微好一点点。二次项是 18.3,有考虑三次项后是 18.1。
在这里插入图片描述
\qquad 那有没有可能是更复杂的 m o d e l model model 呢?或许在宝可梦的那个程式背后,它产生进化后的 CP 值用的是一个更复杂的的一个 f u n c t i o n function function,或许它不只考虑了 ( x c p ) 3 (x_{cp})^3 (xcp?)3,或许它考虑的是四次方 y = b + w 1 ? x c p + w 2 ? ( x c p ) 2 + w 3 ? ( x c p ) 3 + w 4 ? ( x c p ) 4 y=b+w_1\cdot x_{cp}+w_2\cdot(x_{cp})^2+w_3\cdot(x_{cp})^3+w_4\cdot(x_{cp})^4 y=b+w1??xcp?+w2??(xcp?)2+w3??(xcp?)3+w4??(xcp?)4 也说不定,那你就用一模一样的方法再把这些参数: b 、 w 1 、 w 2 、 w 3 b、w_1、w_2、w_3 bw1?w2?w3? w 4 w_4 w4? 都找出来,那你得到的 f u n c t i o n function function 就如下图所示,你发现它在 t r a i n i n g ? d a t a training\ data training?data 上它显然可以做的更好,现在的 a v e r a g e ? e r r o r average\ error average?error 是 14.9。
\qquad 但我们真正关心的是 t e s t i n g ? d a t a testing\ data testing?data,我们真正关心的是如果没有看过的宝可梦,我们能够多精确的预测它进化后的 CP 值。我们发现说,如果我们看没有看过的宝可梦的话,我们得到的 a v e r a g e ? e r r o r average\ error average?error 是多少呢?我们得到的 a v e r a g e ? e r r o r average\ error average?error 其实是 28.8。我们在三次项的时候已经可以得到 a v e r a g e ? e r r o r average\ error average?error 是 18.1,但是我们换了一个更复杂的 m o d e l model model 以后,做出来是 28.8,结果竟然变得更糟了!我们换了一个更复杂的 m o d e l model model,在 t r a i n i n g ? d a t a training\ data training?data 上给我们比较好的结果,但在 t e s t i n g ? d a t a testing\ data testing?data 上看起来结果是更糟的。
在这里插入图片描述
\qquad 那如果换再更复杂的model会怎样呢?有没有可能是五次式 y = b + w 1 ? x c p + w 2 ? ( x c p ) 2 + w 3 ? ( x c p ) 3 + w 4 ? ( x c p ) 4 + w 5 ? ( x c p ) 5 y=b+w_1\cdot x_{cp}+w_2\cdot(x_{cp})^2+w_3\cdot(x_{cp})^3+w_4\cdot(x_{cp})^4+w_5\cdot(x_{cp})^5 y=b+w1??xcp?+w2??(xcp?)2+w3??(xcp?)3+w4??(xcp?)4+w5??(xcp?)5,有没有可能它背后的程式是如此的复杂。
\qquad 那这个时候我们把最好的 f u n c t i o n function function 找出来,你会发现它最好的 f u n c t i o n function function t r a i n i n g ? d a t a training\ data training?data 上如下图所示。这是一个合理的结果吗?你会发现说在原来的 CP 值是 500 左右的宝可梦,根据你现在的 m o d e l model model 预测出来,它的 CP 值竟然是负的。但是在 t r a i n i n g ? d a t a training\ data training?data 上我们可以算出来的 e r r o r error error 是 12.8,比我们刚才用四次式得到的结果又再更好一些。那在 t e s t i n g ? d a t a testing\ data testing?data 的结果上是怎样呢?如果我们把这个我们找出来的 f u n c t i o n function function a p p l y apply apply 到新的宝可梦上面,你会发现结果预测非常不准,所以算出来的 a v e r a g e ? e r r o r average\ error average?error 非常大为 232.1。所以当我们换了一个更复杂的model,考虑到五次的时候,结果又更加糟糕了。
在这里插入图片描述
\qquad 所以到目前为止,我们试了五个不同的 m o d e l model model。那这五个 m o d e l model model,如果你把他们分别的在 t r a i n i n g ? d a t a training\ data training?data 上面的 a v e r a g e ? e r r o r average\ error average?error 都画出来的话,你会得到下图中右上角的子图,图像从高到低,也就是说,如果你考虑一个最简单的 m o d e l model model,这个时候 e r r o r error error 是比较高的, m o d e l model model 稍微复杂一点,error稍微下降,model越复杂,在 t r a i n i n g ? d a t a training\ data training?data 上的 error 就会越来越小。那为什么会这样呢?这件事情非常容易解释,假设下图中黄色的这个圈圈代表有考虑到三次的式子所形成的function space。那四次的式子所形成的function space就是绿色的圈圈,它是包含黄色的圈圈的,因为只要将 w 4 w_4 w4?设为0,这个四次的式子就可以变成三次的式子,所以三次的式子都包含在这个四次的式子里面。那如果我们今天考虑更复杂的五次的式子的话,它又可以包含所有四次的式子。
在这里插入图片描述

\qquad 所以今天如果你有一个越复杂的 m o d e l model model,它包含了越多的 f u n c t i o n function function 的话,那理论上你就可以找出一个 f u n c t i o n function function,它可以让你的 e r r o r ? r a t e error\ rate error?rate t r a i n i n g ? d a t a training\ data training?data 上越来越低,前提是 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 要能够真正帮你找出 b e s t ? f u n c t i o n best\ function best?function。但是在 t e s t i n g ? d a t a testing\ data testing?data 上面看起来的结果是不一样的,在 t r a i n i n g ? d a t a training\ data training?data 上你会发现说 m o d e l model model 越复杂你的 e r r o r error error 越低,但是在 t e s t i n g ? d a t a testing\ data testing?data 上,在到第三个式子为止,你的 e r r o r error error 是有下降的,但是到第四个和第五个 f u n c t i o n function function 的时候 e r r o r error error 就暴增。所以今天我们得到一个观察,虽然说越复杂的 m o d e l model model 可以在 t r a i n i n g ? d a t a training\ data training?data 上面给我们越好的结果,但是越复杂的 m o d e l model model 并不一定能够在 t e s t i n g ? d a t a testing\ data testing?data 上给我们越好的结果,这件事情就叫做 Overfitting(过拟合),比如说在第四个和第五个式子的时候就发生了 O v e r f i t t i n g Overfitting Overfitting 的情形。那为什么会有 O v e r f i t t i n g Overfitting Overfitting 这个情形呢?这个我们日后再解释。所以 m o d e l model model 不是越复杂越好,我们必须选一个最合适的 m o d e l model model。比如说在这个 c a s e case case 里面,当我们选一个三次式的时候,可以给我们最低的 e r r o r error error,所以我们就应该选择三次的式子来作为我们的 m o d e l model model,来作为我们的 f u n c t i o n ? s e t function\ set function?set
在这里插入图片描述

6. 物种对 linear function 的影响

\qquad 你以为这样就结束了吗?其实还没有。刚才只收集了 10 只宝可梦,其实太少了,当我们收集到 60 只宝可梦的时候,你会发现说刚才都是白忙一场。将这 60 只宝可梦原来的 CP 值和进化后的 CP 值画出来,如下图所示。
在这里插入图片描述
\qquad 你会发现说他们中间有一个非常奇妙的关系,它显然不是什么一次二次三次一百次式。中间有另外一个力量,这个力量不是 CP 值,它在影响着进化后的数值,它到底式什么呢?其实非常的直觉,就是宝可梦的物种,这边我们把不同的物种用不同的颜色来表示。所以只考虑进化前的 CP 值显然是不对的,因为进化后的 CP 值受到物种的影响其实是很大的。
在这里插入图片描述
\qquad 所以我们要重新设计一下你的 f u n c t i o n ? s e t function\ set function?set,这个 i n p u t input input 宝可梦和 o u t p u t output output 进化后的 CP 值有什么关系呢?它们的关系如下图所示,其中 x s x_{s} xs? 代表不同的物种。也就是不同的物种,我们就代入不同的 l i n e a r ? f u n c t i o n linear\ function linear?function,然后得到不同的 y y y 作为最终的输出。
在这里插入图片描述

\qquad 你可能问一个问题说,你把 i f if if 放到整个 f u n c t i o n function function 里面,这样你不就不是一个 l i n e a r ? m o d e l linear\ model linear?model了吗? f u n c t i o n function function 里面有 i f if if 你搞得定吗?你可以用微分来做吗?你可以用刚才的 g r a d i e n t ? d e s c e n t gradient\ descent gradient?descent 来算参数对 l o s s ? f u n c t i o n loss\ function loss?function 微分吗?其实是可以的,这个式子你可以把它改写成一个 l i n e a r ? f u n c t i o n linear\ function linear?function
y = b 1 ? δ ( x s = P i d g e y ) + w 1 ? δ ( x s = P i d g e y ) x c p + b 2 ? δ ( x s = W e e d l e ) + w 2 ? δ ( x s = W e e d l e ) x c p + b 3 ? δ ( x s = C a t e r p i e ) + w 3 ? δ ( x s = C a t e r p i e ) x c p + b 4 ? δ ( x s = E e v e e ) + w 4 ? δ ( x s = E e v e e ) x c p \qquad y=b_1\cdot \delta(x_s=Pidgey)+w_1\cdot \delta(x_s=Pidgey)x_{cp}+b_2\cdot \delta(x_s=Weedle)+w_2\cdot \delta(x_s=Weedle)x_{cp}+b_3\cdot \delta(x_s=Caterpie)+w_3\cdot \delta(x_s=Caterpie)x_{cp}+b_4\cdot \delta(x_s=Eevee)+w_4\cdot \delta(x_s=Eevee)x_{cp} y=b1??δ(xs?=Pidgey)+w1??δ(xs?=Pidgey)xcp?+b2??δ(xs?=Weedle)+w2??δ(xs?=Weedle)xcp?+b3??δ(xs?=Caterpie)+w3??δ(xs?=Caterpie)xcp?+b4??δ(xs?=Eevee)+w4??δ(xs?=Eevee)xcp?
\qquad 其中 δ \delta δ 这个 f u n c t i o n function function 的意思是说,输入值符合括号中的表达式则为 1,否则为 0。举例来说,如果输入的是 P i d g e y Pidgey Pidgey,则只有 δ ( x s = P i d g e y ) \delta(x_s=Pidgey) δ(xs?=Pidgey) 为 1,其他 δ ( f u n c t i o n ) \delta(function) δ(function) 为 0,公式就变成 y = b 1 + w 1 ? x c p y=b_1+w_1\cdot x_{cp} y=b1?+w1??xcp?,对于其他种类的宝可梦来说也一样。所以当我们设计这个 f u n c t i o n function function 的时候,我们就可以做到我们刚才有 i f if if f u n c t i o n function function,这个 f u n c t i o n function function 就是一个 l i n e a r ? f u n c t i o n linear\ function linear?function,它就是一个 l i n e a r ? m o d e l linear\ model linear?model
在这里插入图片描述
\qquad 那有了这些以后,我们做出来的结果是怎么样呢?下图是在 t r a i n i n g ? d a t a training\ data training?data 上面的结果,我们知道不同种类在 t r a i n i n g ? d a t a training\ data training?data 上面的宝可梦,它用的参数就不一样,所以不同种类的宝可梦的线不一样。所以就发现说,当我们分不同种类的宝可梦来考虑的时候,我们的 m o d e l model model t r a i n i n g ? d a t a training\ data training?data 上面可以得到更低的 a v e r a g e ? e r r o r average\ error average?error 为 3.8。
在这里插入图片描述
\qquad 但我们更在意的是它能不能够预测新看到的宝可梦,也就是 t e s t i n g ? d a t a testing\ data testing?data 上面的结果。 t r a i n i n g ? d a t a training\ data training?data 上面的结果如下图所示,发现说它也把在 t e s t i n g ? d a t a testing\ data testing?data 上面的那些宝可梦 f i t fit fit 得很好。然后它的 a v e r a g e ? e r r o r average\ error average?error 是 14.3,这比我们刚才可以做到的 18.1 还要更好。
在这里插入图片描述

7. 其他参数对 linear function 的影响

\qquad 但是你再观察上面这个图的话,感觉应该是还有一些东西是没有做好的,还有一些没有 f i t fit fit 很好的地方,有一些值还是略高或略低于这条直线。或许还存在一些其他的东西在影响着宝可梦进化后的 CP 值,有什么其他可能的参数呢?比如说:会不会进化后的 CP 值是跟 w e i g h t weight weight 有关系的?会不会进化后的 CP 值是跟它的高度有关系的?会不会进化后的 CP 值是跟它的 HP 有关系的?其实我们不知道,如果你拥有 d o m a i n ? k n o w l e d g e domain\ knowledge domain?knowledge 的话,你就可能可以知道你应该把什么样的东西加到你的 m o d e l model model 里面去。但是我又没有 d o m a i n ? k n o w l e d g e domain\ knowledge domain?knowledge,那怎么办呢?没关系,有一招就是把你所有想到的东西,通通塞进去,我们来弄一个最复杂的 f u n c t i o n function function,然后看看会怎样?
在这里插入图片描述
\qquad 这个 f u n c t i o n function function 我写成如下这样,将所有可能对 l i n e a r ? f u n c t i o n linear\ function linear?function 有影响的参数整合在一起。其中 x h p x_{hp} xhp? 代表宝可梦的 HP 值; x h x_{h} xh? 代表宝可梦的 h e i g h t height height;其中 x h p x_{hp} xhp? 代表宝可梦的 HP 值; x w x_{w} xw? 代表宝可梦的 w e i g h t weight weight
在这里插入图片描述
\qquad 那我们现在有个这么复杂的 f u n c t i o n function function,在 t r a i n i n g ? d a t a training\ data training?data 上我们得到的 e r r o r error error,期望应该就是非常的低。我们果然得到一个非常低的 e r r o r error error为 1.9,这个function你可以把它写成线性的式子:
y = δ ( x s = P i d g e y ) ( b 1 + w 1 ? x c p + w 5 ? x c p 2 ) \qquad \displaystyle y=\delta(x_s=Pidgey)(b_1+w_{1}\cdot x_{cp}+w_{5}\cdot x^2_{cp}) y=δ(xs?=Pidgey)(b1?+w1??xcp?+w5??xcp2?)
+ δ ( x s = W e e d l e ) ( b 2 + w 2 ? x c p + w 6 ? x c p 2 ) \qquad\qquad \displaystyle +\delta(x_s=Weedle)(b_2+w_{2}\cdot x_{cp}+w_{6}\cdot x^2_{cp}) +δ(xs?=Weedle)(b2?+w2??xcp?+w6??xcp2?)
+ δ ( x s = C a t e r p i e ) ( b 3 + w 3 ? x c p + w 7 ? x c p 2 ) \qquad\qquad \displaystyle +\delta(x_s=Caterpie)(b_3+w_{3}\cdot x_{cp}+w_{7}\cdot x^2_{cp}) +δ(xs?=Caterpie)(b3?+w3??xcp?+w7??xcp2?)
+ δ ( x s = E e v e e ) ( b 4 + w 4 ? x c p + w 8 ? x c p 2 ) \qquad\qquad \displaystyle +\delta(x_s=Eevee)(b_4+w_{4}\cdot x_{cp}+w_{8}\cdot x^2_{cp}) +δ(xs?=Eevee)(b4?+w4??xcp?+w8??xcp2?)
+ w 9 ? x h p + w 10 ? x h p 2 \qquad\qquad \displaystyle +w_{9}\cdot x_{hp}+w_{10}\cdot x^2_{hp} +w9??xhp?+w10??xhp2?
+ w 11 ? x h + w 12 ? x h 2 \qquad\qquad \displaystyle +w_{11}\cdot x_{h}+w_{12}\cdot x^2_{h} +w11??xh?+w12??xh2?
+ w 13 ? x w + w 14 ? x w 2 \qquad\qquad \displaystyle +w_{13}\cdot x_{w}+w_{14}\cdot x^2_{w} +w13??xw?+w14??xw2?
\qquad 那你可以期待你在 t e s t i n g ? d a t a testing\ data testing?data 上也算出很低的 e r r o r error error 吗?倒是不见得,这么复杂的 m o d e l model model,很有可能会 o v e r f i t t i n g overfitting overfitting,你很有可能会在 t e s t i n g ? d a t a testing\ data testing?data 上面得到很糟的数字,我们今天得到的数字很糟是 102.3。 我们应该怎么办呢?

8. Regularization

\qquad 我们现在有一个办法来处理这个问题,这招叫做 r e g u l a r i z a t i o n regularization regularization r e g u l a r i z a t i o n regularization regularization 要做的事情是,我们重新定义了 s t e p ? 2 step\ 2 step?2 的时候,我们对一个 f u n c t i o n function function 是好还是坏的定义。
\qquad 我们重新定义了我们的 l o s s ? f u n c t i o n loss\ function loss?function,把一些 k n o w l e d g e knowledge knowledge 放进去,让我们可以找到比较好的 f u n c t i o n function function。什么意思呢?假设我们的 m o d e l ? i n ? g e n e r a l model\ in\ general model?in?general 写成这样: y = b + ∑ w i x i \displaystyle y=b+\sum w_ix_i y=b+wi?xi?,我们原来的 l o s s ? f u n c t i o n : L = ∑ n ( y ^ n ? ( b + ∑ w i x i ) ) 2 \displaystyle loss\ function:L=\sum\limits_n(\hat{y}^n-(b+\sum w_ix_i))^2 loss?functionL=n?(y^?n?(b+wi?xi?))2 只考虑了 e r r o r error error 这件事。原来的 l o s s ? f u n c t i o n loss\ function loss?function 只考虑了 p r e d i c t i o n prediction prediction 的结果减掉正确答案的平方,只考虑了 p r e d i c t i o n prediction prediction e r r o r error error。那 r e g u l a r i z a t i o n regularization regularization 它就是加上一项额外的 t e r m term term,这一项额外的 t e r m term term λ ∑ ( w i ) 2 \displaystyle\lambda\sum(w_i)^2 λ(wi?)2,其中 λ \lambda λ 是一个常数,这个是等一下我们要手调一下看要设多少,那 ∑ ( w i ) 2 \displaystyle \sum(w_i)^2 (wi?)2 就是把这个 m o d e l model model 里面所有的 w i w_i wi? 都算一下平方以后加起来。将这项合起来才是我们的 l o s s ? f u n c t i o n : L = ∑ n ( y ^ n ? ( b + ∑ w i x i ) ) 2 + λ ∑ ( w i ) 2 \displaystyle loss\ function:L=\sum\limits_n(\hat{y}^n-(b+\sum w_ix_i))^2+\lambda\sum(w_i)^2 loss?functionL=n?(y^?n?(b+wi?xi?))2+λ(wi?)2
l o s s ? f u n c t i o n \qquad loss\ function loss?function e r r o r error error 越小就代表越好的 f u n c t i o n function function,但是为什么我们期待一个参数的值越小,参数的值越接近 0 的 f u n c t i o n function function 呢?因为参数的值比较接近 0 的 f u n c t i o n function function,它是比较平滑的。所谓的比较平滑的意思是,当今天的输入有变化的时候,output对输入的变化是比较不敏感的,为什么参数小就可以达到这个效果呢?你可以想想看,假设 y = b + ∑ w i x i \displaystyle y=b+\sum w_ix_i y=b+wi?xi? 是我们的 m o d e l model model,现在 i n p u t input input 有一个变化,比如说我们对某一个 x i x_i xi? 加上 Δ x i \Delta x_i Δxi?,这时候输出的变化就是加上 w i Δ x i w_i\Delta x_i wi?Δxi?,你会发现说如果今天你的 w i w_i wi? 越小越接近0的话,输出对输入就越不敏感。现在的问题就是,为什么我们喜欢比较平滑的 f u n c t i o n function function?如果我们今天有一个比较平滑的 f u n c t i o n function function 的话,那今天如果我们的输入被一些杂讯干扰的话,平滑的 f u n c t i o n function function 就会收到比较少的影,而给我们一个比较好的结果。
在这里插入图片描述
\qquad 接下来我们就要看看说,如果我们加入了 r e g u l a r i z a t i o n regularization regularization 的项,对我们最终的结果会有什么样的影响?下图是实验的结果,我们把 λ \lambda λ 从 0、1、10 一直调到100000,所以 λ \lambda λ 越大,代表说今天我们找到的function越平滑。如果我们看看在 t r a i n i n g ? d a t a training\ data training?data 上的 e r r o r error error 的话,我们会发现说,如果 f u n c t i o n function function 越平滑,我们在 t r a i n i n g ? d a t a training\ data training?data 上得到的 e r r o r error error 其实是越大的。但是有趣的是,虽然在 t r a i n i n g ? d a t a training\ data training?data 上得到的 e r r o r error error 越大,但是在 t e s t i n g ? d a t a testing\ data testing?data 上得到的 e r r o r error error 可能是会比较小。
\qquad 我们喜欢比较平滑的 f u n c t i o n function function,因为比较平滑的 f u n c t i o n function function 它对 n o i s e noise noise 比较不 s e n s i t i v e sensitive sensitive,所以当我们增加 λ \lambda λ 的时候,你的 p e r f o r m a n c e performance performance 是越来越好。但是我们又不喜欢太平滑的 f u n c t i o n function function,如果今天 f u n c t i o n function function 太平滑的话,你反而会在 t e s t i n g ? d a t a testing\ data testing?data 上又得到糟糕的结果。所以现在的问题就是,我们希望我们的 m o d e l model model s m o o t h smooth smooth 呢?这件事情就变成是你们要调 λ \lambda λ 来解决这件事情。很多同学都了解 r e g u l a r i z a t i o n regularization regularization ,你有没有发现说 λ ∑ ( w i ) 2 \displaystyle\lambda\sum(w_i)^2 λ(wi?)2 没有把 b i a s bias bias 加进去,在做 r e g u l a r i z a t i o n regularization regularization 的时候其实是不需要考虑 b i a s bias bias 这一项的, r e g u l a r i z a t i o n regularization regularization 的预期是找到一个比较平滑的 f u n c t i o n function function b i a s bias bias 跟一个 f u n c t i o n function function 的平滑的程度是没有关系的,调整 b i a s bias bias 值的大小只是把 f u n c t i o n function function 上下移动而已。总之,搞了半天以后,我最后可以做到我们的 t e s t i n g ? e r r o r testing\ error testing?error 是 11.1。
在这里插入图片描述

9. Conclusion

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章           查看所有文章
加:2021-08-13 11:49:15  更:2021-08-13 11:54:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:02:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码