- Regression
- Gradient Descent
一、绪论
机器学习就是找函式。
寻找函式的方法----Gradient Descent
15个知识点。
- Regression:输出一个数值
- Binary Classification:输出值只有Y或N
3. Multi-class Classification:输出值在很多个中选一个
4. Generation:生成
5.Supervised Learning:给机器有label的资料
5. Unsupervised Learning:给机器无label的资料
6. Reinforcement Learning:Reward
7. Transfer Learning:训练集和数据集不一样也能生成
8. 函式的Loss:评判一个函式的好坏
9.
二、Regression(回归)
task:预测PM2.5;预测股票系统;预测自动车;推荐系统;预测出的结果应该是一个数值。
以宝可梦为例(根据十只宝可梦预测CP值):
Step1:Model
y
=
b
+
w
⋅
x
c
p
y = b + w \cdot x_{cp}
y=b+w⋅xcp
=>Linear model:
y
=
b
+
∑
w
i
x
i
y = b + \sum{w_{i}x_{i}}
y=b+∑wixi
其中,
x
i
x_{i}
xi:input feature(各种不同的属性);
w
i
w_{i}
wi:weight;b:bias
Step2:Goodness of Function
y
=
b
+
w
⋅
x
c
p
y = b + w \cdot x_{cp}
y=b+w⋅xcp
用
x
n
x^{n}
xn表示第n个object,
y
^
n
y\hat{}^{n}
y^n表示第n个output。
输出是一个数值。
Loss function L:衡量函式多不好,它的input:function;
output:how bad it is.
L
(
f
)
=
L
(
w
,
b
)
L(f) = L(w , b)
L(f)=L(w,b)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
=\sum_{n = 1}^{10}(\hat{y}^{n} - (b + w \cdot x_{cp}^{n}))^{2}
=n=1∑10(y^n−(b+w⋅xcpn))2
(以上选择estimation error定义L,也可选择其他的方式)
Step3:Best Function
穷举所有的w b使L最小
也可以用Gardient Descent(梯度下降):
1.只有一个参数w时:
(随机)选一个初始点 w 0 w^{0} w0,计算在 w = w 0 w =w^{0} w=w0位置参数w对Loss的微分;假如微分(即切线斜率)为负,则w越大,L越小,则应该增加w的值(增加一个step size);反之,减少w值。
step size取决于两件事:
- 现在的微分值 d L d w \frac{dL}{dw} dwdL多大,若越大,移动距离越大
- learning rate
η
\eta
η
假如微分值为负,则应增加w值,step size为 η d L d w \eta\frac{dL}{dw} ηdwdL是负的,应该减去它,即
接下来,在 w 1 w^{1} w1位置继续计算微分,以此类推,直到 w T w^{T} wT的位置到达local minimum ,微分为0
2.有两个参数w和b时:
(随机)选一个初始点
w
0
w^{0}
w0和
b
0
b^{0}
b0,计算在
w
=
w
0
w =w^{0}
w=w0和
b
=
b
0
b =b^{0}
b=b0位置对Loss的偏微分;
不过,可能有好几个local optimal(局部最优)值,取决于初始值
但linear regression不用担心这个问题,因为它 No local optimal,是convex(凸形)
回到宝可梦:
最终得到一条结果如图:
若想知道做的多好或者多不好可以计算一下error:
即每个蓝点到红线的距离,相加再平均
training data到此结束,再抽新的10只宝可梦作为testingdata,再计算error。
可以看到这个model在x很小和很大时是不准确的,如何做得更好呢?
重新设计一个二次式的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
然后根据training data再进行Gradient Descent得到新的best functon:
可以看到error变小了。
如何做得更好呢?
可以考虑设计一个更复杂的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
再通过training data再进行Gradient Descent得到新的best functon:
model为加到四次式:
结果居然比上一个model更糟。
当model加到五次式,结果比四次式更糟糕。
统计五次model得到的training data–average data的图:
统计五次model得到的testing data–average data与training data–average data的对比图:
得到结论:复杂的model在training data在有好的结果,但是在testing data上不一定有好结果,这叫做Overfitting(过度拟合)。
但是宝可梦还会受到种类的影响,假如分为Pidgey、Eevee、Weedle、Caterpie四种,然后回到设计function model:
综合起来就是:
得到的结果:
得到的结果比之前更好。
但是可能还有很多因素没有考虑进去,为了更好可以再考虑因素加入model中(比如使model变为二次式,再加上生命值和高度值):
但是得到的结果过度拟合了。
可以通过Regularization(正则化)来解决这个问题(重新定义Loss function,w越小得到的function越平滑):
重新定义loss function:在原有的lossfunction后面加上额外的term即
λ
∑
(
w
i
)
2
\lambda \sum{(w_{i})^{2}}
λ∑(wi)2,其中
λ
\lambda
λ为常数,后面的表示把所有的
w
i
w_{i}
wi平方后相加,即:
三、bias和variance
要想得到平滑的function考虑的有两项error和smooth,
λ
\lambda
λ越大代表考虑smooth的那个regularization那一项的影响力越大,
λ
\lambda
λ越大得到的function越平滑(在做regularization时没有考虑bias:b,因为对平滑程度没有影响)
error的两个来源:bias和variance(方差)
f
∗
f^{\ast }
f∗ is an estimator of
f
^
\hat{f}
f^,两者的距离来自于bias或variance。
一个estimator(估计值)的bias和variance:假如现在有一个变量x,要估计它的mean(平均值)
μ
\mu
μ,假设它的variance是
σ
2
\sigma ^{2}
σ2:
- 取样N个{ x 1 , x 2 , . . . , x N x^{1},x^{2},...,x^{N} x1,x2,...,xN}
- 计算这N个点的平均值得到m:
m
=
1
N
∑
n
x
n
m = \frac{1}{N}\sum_{n}x^{n}
m=N1n∑xn
但是 m ≠ μ m \neq \mu m=μ,且多次计算的m都可能不等于 μ \mu μ,但是m的期望值一定是等于 μ \mu μ的(unbiased) - m的期望值:
E [ m ] = E [ 1 N ∑ n x n ] = 1 N ∑ n E [ x n ] = μ E[m] = E[\frac{1}{N}\sum_{n}x^{n}] = \frac{1}{N}\sum_{n}^{}E[x^{n}] = \mu E[m]=E[N1n∑xn]=N1n∑E[xn]=μ - m在
μ
\mu
μ的周围散布情况取决于m的variance:
V a r [ m ] = σ 2 N Var[m] = \frac{\sigma ^{2} }{N} Var[m]=Nσ2
variance值取决于取了多少个sample,即N
估测variance的方法:1.先按照刚才的方法估测出m;2.再计算 s 2 = 1 N ∑ n ( x n − m ) 2 s^{2} = \frac{1}{N}\sum_{n}^{}(x^{n} - m)^{2} s2=N1n∑(xn−m)2,这个 s 2 s^{2} s2可用来估计 σ 2 \sigma ^{2} σ2,但是 s 2 s^{2} s2的期望值并不等于 σ 2 \sigma ^{2} σ2,是biased, s 2 s^{2} s2的期望值: E [ s 2 ] = N − 1 N σ 2 ≠ σ 2 E[s^{2}] = \frac{N - 1}{N}\sigma ^{2} \neq \sigma ^{2} E[s2]=NN−1σ2=σ2
bias就是你射中的位置的期望值距离中心的偏移;variance就是你射中的位置距离瞄准的位置的偏移;如图
Bias:
E
[
f
∗
]
=
f
ˉ
E[f^{\ast }] = \bar{f}
E[f∗]=fˉ ,此与
f
^
\hat{f}
f^的距离即为bias;
比较简单的model,它的bias比较大,但variance比较小;比较复杂的model,它的bias比较小但variance比较大;这张图,从左到右,bias逐渐下降,但variance越来越大;若error来源于variance很大,这种情况叫做Overfitting;若error来源于bias很大,这种情况叫做Underfitting。
如果你的model没办法fit你的training examples 说明bias大(Underfitting);
如果在training data上得到小的error,但是在testing data 上得到一个大的error,意味着model的variance比较大(Overfitting)。
解决bias大和variance大的方法:
bias大说明model你们根本没有包含target,这个是时候redesign你的model,比如重新设计model式子,把更多feature加进去(这种情况collect更多data没用);
variance大的话,第一种方法就是可以增加data,不会伤害bias(由于可能无法收集到更多data ,可generate fake training data,比如手写字的training data,可旋转角度,或颠倒图片,比如语音识别只有男声没有女声,可将之前的男声用变音器转换一下);第二种方法就是regularization(正则化),让曲线变得平滑(可能会伤害bias)。
如何trade-off(平衡)bias和variance?
Cross Validation(交叉验证):
把你的training set分为两组,一组是training set(train model),一组是validation set(选model);将model1、2、3在training set上train好后,再放在validation set(如果担心分开后training data变少,可以在定好最好的performance的model之后拿这个model在原来的training data再train一次)上看每个的performance即error;将performance最好的model apply在public testing set上。
如果在testing set上得到的结果大于选择的model的error,不建议返回去再改变什么,因为这样就把testing data的bias考虑进去了。
如果担心分坏training data,可以做N-fold Cross Validation(N次交叉验证):比如做3-fold把你的training set分为3份,拿其中一份做validation set,另外两份当training set;每次选择不同的一份做validation set,共三种情景,每个情境下算一次每个model的error,然后算一下它的average error;然后把performance最好的那和model放在完整的training set上再train一次,最后再去apply在testing set上。
本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。