学习资料
本课思路
以如何预测Pokemon Go里的宝可梦进化后的CP值(Combat Power)为例,按照上一课里提到的训练和测试过程,找出最合适的函数模型。期间用到了以下概念
- 回归(Regression)与线性模型(Linear Model)
- 训练数据(Training Data)和测试数据(Testing Data)
- 损失函数(Loss Function)
- 梯度下降(Gradient Descent)
- 过拟合(Overfitting)、正则化(Regularization)与函数的平滑(Smooth)程度
还记得机器学习的目的是通过分析输入与输出数据,找到两者间的关系。这里就讲了找这层关系的过程:
1.设定回归问题的目标:预测宝可梦进化后的CP值
2.准备训练数据和测试数据:一组宝可梦进化前后的数据
3.假设只考虑进化前CP值的线性模型:y = b + w ⋅ xcp
4.设定损失函数 L(𝑓)
5.以梯度下降算法,用训练数据来找出最佳函数 𝑓* = arg min L(𝑓)
6.用训练数据和测试数据分别测试 𝑓* 的平均误差(error)值
7.重新设计线性模型:y = b + w1 ⋅ xcp + w2 ⋅ (xcp)2
8.重复5-6-7步,比较所有模型,得出结论:越复杂的模型,对训练数据更准确,但对训练数据可能越不准确,这就叫做过拟合。
9.考虑引入更多因素,如宝可梦的种类、HP、重量、身高
10.重新设计损失函数: 加上𝜆Σ (wi)2,提高𝜆同时找到相对更小的wi,即意味函数更平滑,测试数据的误差就越小
数学水平大概还不如小学生的我,看到数学公式瞬间脑爆,这还仅仅是最简单的线性和微分。听老师授课,慢慢琢磨感觉自己能懂,但无法用自己的语言复述,说明还未真正消化理解。
一、 第一句话
数学真TMD神奇
二、回归(本文讲的是线性回归)有什么用?
- 预测数字,比如下周股票价格、明天气温、无人汽车转向角度、用户购买某商品的概率、预测宝可梦进化后的CP值……
- 线性回归算法是预测模型的首选技术之一
三、 线性模型是什么样子的?

- x: input object,包含各种xi
- xi: x的第i个特征(feature)
- wi: weight,是xi的权重,
- b: bias,偏差,回归线在Y轴上下移动的距离
四、训练数据是什么样子的?
我抓来10只宝可梦,用x1,x2,到x10表示。每只宝可梦有几个特征值,,可分别用xcp、xs、xhp、xh、xw来表示CP,种类名称,HP,身高,体重。还知道这10只进化后的数据,用ŷ1到ŷ10表示,进化后的CP值就用ŷcp来表示。
训练数据就是10组这样的数据
(x1,ŷ1),(x2,ŷ2),...,(x10,ŷ10)
x是原始的input,ŷ是标记过的output,所以我们在讨论的是监督学习。
表示原始cp与进化后cp关系的10个点
五、 损失函数有什么用,长什么样
损失函数的输入是函数,输出是这个函数的总误差值,误差值越小,说明输入的函数越好越准确。损失函数可根据经验自行设计,常见的方法就是计算值与目标值的误差之和。

六、梯度下降是什么鬼?如何帮我找出𝑓*
说来话长,我们有了训练数据(x1,ŷ1),(x2,ŷ2),...,(x10,ŷ10),设定了线性模型y = b + w ⋅ xcp,设定了损失函数L(𝑓) =∑(ŷn -
( b + w ⋅ xncp))2,接下来要做的就是穷举w和b,算出L(𝑓)的最小值,可以写成下图公式。

argmin表示的是函数取值最小时的自变量取值,比如 L(𝑓) 最小值在 𝑓 = 𝑓* 时取得,那么便有:𝑓* = argmin L(𝑓)
穷举法太反人类,于是我们可以用梯度下降法来找出最小值的点,以求找L(w)最小值来举例,算法过程如下
- 选取一个初始随机值 w0
- 计算w0的偏微分,就是L(w)这个点的斜率
斜率<0时,左边高右边低,要找更低的L(w)就要增加w
斜率>0时,左边低右边高,要找更低的L(w)就要减少w- 然后计算w要增加/减少的值,这个值可以用微分值(dl/dw|w=w0)乘上η(读作eta)来表示。微分值越大,斜率越大,越陡峭,可以迈出的步子越大。η是人为设定学习速率(learning rate),η越大,迈出的步子越大,学习速度越快。
于是就能算出w1 <-- w0- 反复2和3步,直到偏微分值=0时,找到最小值(minima)。这时可能会发现该数值只是一个局部最小值,取决于初始点w0落在哪里。然而线性回归不存在局部最小值。

同理L(w,b)的计算过程和L(w)的一样


七、过拟合是什么鬼?
用我自己的话来说
为了使得模型与训练数据更匹配,导致模型过于复杂,但在测试数据上的结果反而更糟糕。这种情况就叫做过拟合。
用李老师的举例
在驾校学车时,教练告诉你的各种应试技巧,如倒桩入库要从反光镜看车后一个铁杆子与车屁股的位置balabala,于是很顺利地通过考试。等真正自己开车时,这些技巧没有任何用处。
A more complex model does not always lead to better performance on testing data
知乎上找到的
用简单易懂的语言描述「过拟合 overfitting」?https://www.zhihu.com/question/32246256
过拟合的表现1
过拟合的表现2
八、正则化与平滑的函数
我们可用正则化来避免过拟合的发生,怎么做?修改损失函数,加入正则化公式。

𝜆Σ (wi)2是我们加入的正则化公式
- 𝜆是一个常数,手动调整。𝜆设的越大,参数w会越小
- 参数w越小越接近于0,函数输出对输入的变化就越小,函数则越平滑
- 一个平滑的函数在大量测试数据的表现会更好

这里我们选择𝜆=100,测试数据的误差值11.1最小,是“最佳”的模型(仅考虑xcp时)
Next Lecture
有哪些因素会导致模型出现误差值?我们会继续了解更多关于过拟合、正则化、验证的原理。
网友评论