文章目录
从需要解决的问题来说,Regression的目的就是让模型根据输入得到一个scalar的输出
李宏毅教授使用的是预测宝可梦进化后的cp值作为讲解Regression的例子
1. 机器学习基本步骤
根据上一篇文章中介绍的ML三部曲choose Model->define loss function->pick the best funciton来完成Regression任务
Step1 choose Model
linear model
y
=
b
+
w
∗
x
c
p
y = b + w*x_{cp}
y=b+w∗xcp 使用进化前的cp值预测进化后的cp值
w
i
w_i
wi——权重参数(weight)
b
i
b_i
bi——偏置参数(bias)
x
c
p
x_cp
xcp——特征量(feature),
x
j
i
x^{i}_j
xji——第i个样本的第j个特征,即上标表示一个object,下标表示一个object对应的那个feature component
Step2 define loss function
均方误差
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
∗
x
c
p
n
)
)
2
L(w, b) = \sum^{10}_{n=1}(\hat{y}^{n}-(b+w*x^n_{cp}))^2
L(w,b)=∑n=110(y^n−(b+w∗xcpn))2
(
y
^
n
−
f
(
x
c
p
n
)
)
2
(\hat{y}^n-f(x^n_{cp}))^2
(y^n−f(xcpn))2——预测误差(estimation error)
Step3 pick the best function
w
∗
,
b
∗
=
a
r
g
m
i
n
w
,
b
L
(
w
,
b
)
w*, b* = arg min_{w, b}L(w, b)
w∗,b∗=argminw,bL(w,b)
so how to pick the best
w
∗
w^*
w∗ and
b
∗
b^*
b∗?——使用梯度下降方法(gradient descent)
2. Gradient Descent
使用gradient descent的步骤:
- 随机选取一个初始参数 w 0 w^0 w0和 b 0 b^0 b0
- 计算梯度 ∂ L ∂ w ∣ w = w 0 , b = b 0 \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 \frac{\partial L}{\partial b}|_{w=w^0, b=b^0} ∂b∂L∣w=w0,b=b0
- 更新参数 w 1 = w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 w^1 = w^0-\eta\frac{\partial L}{\partial w}|_{w=w^0, b= b^0} w1=w0−η∂w∂L∣w=w0,b=b0 和 b 1 = b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 b^1 = b^0-\eta\frac{\partial L}{\partial b}|_{w = w^0, b=b^0} b1=b0−η∂b∂L∣w=w0,b=b0
- 继续迭代…
η \eta η——学习率(learning rate),表示参数更新快慢程度
η
\eta
η对梯度下降的影响:
η
\eta
η越大,梯度下降速度是越快的。
η
\eta
η太小的时候,找到相同的best function所需迭代次数将更多;
η
\eta
η太大的时候,可能会错过the best function,找不到最优解。
(ps:在迭代过程中的理想情况是,loss function的值越来越小,最后我们pick一个合适的参数值。但事实上,当学习率比较大的时候,loss function在过程中是会出现震荡的。这也就要求我们要pick一个合适的learning rate,顺便说一句,像learning rate这种需要我们自己pick的参数称为超参数,这与w,b等参数是不同的。在DL中选择合适的超参数的过程也称为“炼丹”)
这页ppt中指出了我们使用的梯度下降法存在的问题:
- 在plateau也即梯度值比较小的位置参数更新慢,
- 在saddle point也即鞍点即梯度值为0点参数更新会停滞
- 可能陷入局部最小值点的困境(local minima)
ps:这里linear regression使用均方误差作为loss function是convex function,其局部最小值就是全局最小值,不会出现local minima的困境
3. 修改Model
- 对得到的 w ∗ w^* w∗和 b ∗ b^* b∗的泛化能力进行评估
- 泛化能力:将从training data上pick的best function用于testing data上进行预测的性能
- 评估标准:average error on testing data. 这里的error指的仍然是estimation error ( ( y − ( w ∗ x + b ∗ ) ) 2 (y-(w^*x+b^*))^2 (y−(w∗x+b∗))2),再求和取平均即可
当我们对当前得到的函数的generalization ability不满意的时候,我们就需要改变ML第一步中确定的Model再pick出另一个best function
3.1 通过增加参数的方式修改Model
for example: 在model里引入一次项,二次项得到
y
=
b
+
w
1
x
c
p
+
w
2
(
x
c
p
)
2
y = b+w_1x_{cp}+w_2(x_{cp})^2
y=b+w1xcp+w2(xcp)2
更多Model如下图所示:
原因:增加参数使得prediction function能够表示的input与output之间的作用机制的范围更大,更可能在training data上达到better fit的效果,从而期望在testing data上也能better fit
但并不是在training data上有最小的error,the function就会有最好的泛化能力
过拟合(overfitting):当model 太复杂以至于我们能在training data上得到一个非常好的结果,但在testing data上的预测误差却很大
overfitting的结果展示:
3.2 增加feature以修改Model
将宝可梦品种和它进化前的cp值都作为输入feature得到的Model:
这个模型进行预测得到的结果:
当我们认为prediction result on testing data依然不够好的时候,我们还可以怎么办?
4. 修改loss function
当更改Model得到的预测函数的泛化能力仍不能达到要求的时候,我们需要考虑改变ML第二步中的loss function
李宏毅教授在课程中使用的是regularization(正则化)
4.1 对权重参数进行regularization
- 怎么做?
设计loss function L = ∑ ( y ^ n − ( b + ∑ w i x i ) ) 2 + λ ∑ ( w i ) 2 L=\sum(\hat y^n-(b+\sum w_ix_i))^2 + \lambda \sum(w_i)^2 L=∑(y^n−(b+∑wixi))2+λ∑(wi)2 - 正则项的影响?
the functions with smaller w i w_i wi are better. 更可能得到一个 w i w_i wi小的预测函数
出现error on training data增大,error on testing data减小 -
w
i
w_i
wi更小的作用?
预测函数变得更平滑,对噪声更不敏感。于是在处理一些带有噪声的input的时候,它会有更好的表现。
关于"smoother",举个例子:
prediction function为
y
=
b
+
∑
w
i
x
i
y = b + \sum w_ix_i
y=b+∑wixi,当input变化,
y
+
∑
w
i
Δ
x
i
y+\sum w_i \Delta x_i
y+∑wiΔxi
=
b
+
∑
w
i
(
x
i
+
Δ
x
i
)
= b+ \sum w_i(x_i + \Delta x_i)
=b+∑wi(xi+Δxi) 会得到对应的output变化。
如果
w
i
w_i
wi更小,则input的变化对应的outputp变化也更小。
这也能说明,不需要在bias上做regularization,因为
Δ
y
\Delta y
Δy中没有受到bias的影响
课程中给出了加入正则化对预测结果的影响: