目录Contents
Regression
本文是笔者对机器学习中碰到的回归方法的一个总结,主要参考了网上的一些资料与李宏毅老师的视频。本文只是笔者对于回归问题的浅薄认识,如有错误,欢迎指出,共同进步。
1.前言(Introduction)
回归(Regression)是一种数学统计分析的方法,主要用来研究自变量(independent variable)与因变量(dependent variable)之间的关系,即回归是一种建模的方法。回归也常常用到机器学习的过程中,建立特征与目标之间的关系。本文将从机器学习与统计学的角度分析回归的各种性质,包括常见的回归的方法与其误差来源等。
2.基本原理(Principle)
回归实际上是在原有的数据的基础上,建立一个模型,然后通过梯度下降或其它优化方法对参数进行调整,使得该模型能够尽可能地贴近实际模型。如果建立的模型与实际模型相差太大,则可能需要更改模型参数;如果该模型在多次训练时变化太大,则可能需要进行正则化等方法。李宏毅老师把回归分析的过程可以分为三步:建模,评价与修正。
3.建模(Model)
选择一个恰当的模型对于回归分析具有非常重要的意义,如果模型选择不好则可能会造成差之毫厘,谬以千里的结果。这里我总结了两种主要使用的回归模型:
3.1. 线性回归(Linear Regression):
线性回归是最简单的回归模型了,其模型表达式如下:
y
^
=
∑
i
w
i
x
i
+
b
(1)
{\hat{y}=\sum_{i} \ {w_ix_i} + b \tag 1}
y^=i∑ wixi+b(1)这里
x
i
{x_i}
xi可以看成是自变量的参数,在机器学习中则可以看成是特征(feature),
w
i
{w_i}
wi是每个特征的权重值,
b
{b}
b是常数项,这两个值都是通过机器学习修正得到的,预测输出为
y
^
{\hat{y}}
y^。使用线性回归时,自变量与因变量之间必须满足线性关系,并且模型对于异常值非常敏感。
3.2. 多项式回归(Polynomial Regression):
多项式回归是在线性回归的基础上增加了变量的多次幂,其模型表达式如下:
y
^
=
∑
i
∑
j
w
i
j
x
i
j
+
b
(2)
{\hat{y} = \sum_{i} \sum_{j} \ {w_{ij}x^j_i} + b \tag 2}
y^=i∑j∑ wijxij+b(2)幂的次数需要非常小心的选择,因为幂太小的模型不够准确,幂太大的模型泛化误差太大。通常在线性回归的偏差太大的时候,会选择多项式回归。
4.模型评价(Model Estimation)
评价一个模型的好坏使用的函数叫损失函数(Loss Function)。在回归中常常使用的损失函数有:
4.1. 绝对值损失函数(Absolution Loss):
L
(
y
,
y
^
)
=
∣
y
−
y
^
∣
(3)
{L(y, \hat{y}) = |y - \hat{y}|} \tag 3
L(y,y^)=∣y−y^∣(3)其中
y
{y}
y是实际输出,
y
^
{\hat{y}}
y^是预测输出。
4.2. 交叉熵损失函数(Cross-Entropy Loss):
L
(
y
,
y
^
)
=
−
1
n
∑
x
[
y
l
n
y
^
+
(
1
−
y
)
l
n
(
1
−
y
^
)
]
(4)
{L(y, \hat{y}) = -\frac{1}{n} \sum_{x}[yln{\hat{y}} + (1-y)ln(1-\hat{y})]} \tag 4
L(y,y^)=−n1x∑[ylny^+(1−y)ln(1−y^)](4)其中
n
{n}
n是样本数量。
4.3. 均方误差(Mean Squared Error):
L
(
y
,
y
^
)
=
1
n
∑
i
=
1
n
(
y
−
y
^
)
2
(5)
{L(y, \hat{y}) = \frac{1}{n} \sum_{i = 1}^n{(y-\hat{y})^2}} \tag 5
L(y,y^)=n1i=1∑n(y−y^)2(5)
4.4. 根均方误差(Root Mean Squared Error):
L
(
y
,
y
^
)
=
1
n
∑
i
=
1
n
(
y
−
y
^
)
2
(6)
{L(y, \hat{y}) = \sqrt{\frac{1}{n} \sum_{i=1}^n{(y-\hat{y})^2}}} \tag 6
L(y,y^)=n1i=1∑n(y−y^)2(6)模型的损失函数值越小,表示模型的对于数据的拟合度更好。常常选择凸函数作为其损失函数,因为凸函数存在着最小值。
一种模型评价策略——N折交叉验证
主要思想就是在训练过程中,把训练集分成N个部分,每次用N-1个部分作为训练集,使用剩下的一部分作为测试集。最后模型的性能由另外的测试集验证。
5.模型修正(Model Modify)
修正是指修改模型的参数,使得模型的损失函数值变小。梯度下降法(Gradient descent)是常用的修正模型参数的方法。梯度下降法背后的数学原理就是我们常见的泰勒级数(Taylor Series)。
当
h
(
x
)
h(x)
h(x)在
x
=
x
0
x=x_0
x=x0处无限可导的时候,那么
h
(
x
)
h(x)
h(x)的表达式可以写成:
h
(
x
)
=
∑
k
=
0
∞
h
k
x
0
k
!
(
x
−
x
0
)
k
=
h
(
x
0
)
+
h
′
(
x
0
)
(
x
−
x
0
)
+
h
′
′
2
!
(
x
−
x
0
)
2
+
…
(7)
{h(x) = \sum_{k=0}^{\infty} {\frac{h^{k}{x_0}}{k!}(x-x_0)^k}} = h(x_0) + h^{'}(x_0)(x-x_0) + \frac{h^{''}}{2!}(x-x_0)^2 + \ldots \tag7
h(x)=k=0∑∞k!hkx0(x−x0)k=h(x0)+h′(x0)(x−x0)+2!h′′(x−x0)2+…(7)所以当
x
x
x与
x
0
x_0
x0非常接近时,有
h
(
x
)
≈
h
(
x
0
)
+
h
′
(
x
0
)
(
x
−
x
0
)
{h(x) \approx h(x_0) + h^{'}(x_0)(x-x_0)}
h(x)≈h(x0)+h′(x0)(x−x0)。多变量情况下的泰勒级数也是如此:
h
(
x
,
y
)
≈
h
(
x
0
,
y
0
)
+
∂
h
(
x
0
,
y
0
)
∂
x
(
x
−
x
0
)
+
∂
h
(
x
0
,
y
0
)
∂
y
(
y
−
y
0
)
(8)
{h(x, y) \approx h(x_0, y_0) + \frac{\partial h(x_0, y_0)}{\partial x}(x-x_0) + \frac{\partial h(x_0, y_0)}{\partial y}(y-y_0)}\tag8
h(x,y)≈h(x0,y0)+∂x∂h(x0,y0)(x−x0)+∂y∂h(x0,y0)(y−y0)(8)代入损失函数
L
(
θ
)
{L(\theta)}
L(θ)中有:
L
(
θ
)
≈
L
(
a
,
b
)
+
∂
L
(
a
,
b
)
∂
θ
1
∣
θ
1
=
a
(
θ
1
−
a
)
+
∂
L
(
a
,
b
)
∂
θ
2
∣
θ
2
=
b
(
θ
2
−
b
)
(9)
{L(\theta) \approx L(a, b) + \frac{\partial L(a, b)}{\partial \theta_1 {|_ {\theta_1=a}}}(\theta_1-a) + \frac{\partial L(a, b)}{\partial \theta_2{|_ {\theta_2=b}}}(\theta_2-b)} \tag9
L(θ)≈L(a,b)+∂θ1∣θ1=a∂L(a,b)(θ1−a)+∂θ2∣θ2=b∂L(a,b)(θ2−b)(9)其中
θ
=
{
θ
1
,
θ
2
}
,
a
,
b
{\theta = \lbrace \theta_1, \theta_2 \rbrace}, {a, b}
θ={θ1,θ2},a,b表示
θ
{\theta}
θ在某一时刻的取值。目标函数的解为:
θ
∗
=
a
r
g
min
θ
L
(
θ
)
(10)
{\theta^{*} = arg \min_{\theta}{L(\theta)}} \tag{10}
θ∗=argθminL(θ)(10)公式(9)中表示
a
,
b
{a, b}
a,b为已知的两个点,那么
L
(
a
,
b
)
,
∂
L
(
a
,
b
)
∂
θ
1
∣
θ
1
=
a
,
∂
L
(
a
,
b
)
∂
θ
2
∣
θ
2
=
b
{L(a, b), \frac{\partial L(a, b)}{\partial \theta_1 {|_ {\theta_1=a}}}, \frac{\partial L(a, b)}{\partial \theta_2{|_ {\theta_2=b}}}}
L(a,b),∂θ1∣θ1=a∂L(a,b),∂θ2∣θ2=b∂L(a,b)都为常数,只能通过修改
θ
1
\theta_1
θ1与
θ
2
\theta_2
θ2的值来使得损失函数变小。而当
(
θ
1
−
a
)
(\theta_1-a)
(θ1−a)与
∂
L
(
a
,
b
)
∂
θ
1
∣
θ
1
=
a
{\frac{\partial L(a, b)}{\partial \theta_1 {|_ {\theta_1=a}}}}
∂θ1∣θ1=a∂L(a,b)并且
(
θ
2
−
b
)
(\theta_2-b)
(θ2−b)与
∂
L
(
a
,
b
)
∂
θ
2
∣
θ
2
=
b
{\frac{\partial L(a, b)}{\partial \theta_2 {|_ {\theta_2=b}}}}
∂θ2∣θ2=b∂L(a,b)符号相反时,
L
(
θ
)
<
L
(
a
,
b
)
{L(\theta) < L(a, b)}
L(θ)<L(a,b)。所以参数的变化方向需要与损失函数在该点处的导数相反,即:
θ
n
+
1
=
θ
n
−
η
∂
L
(
θ
)
∂
θ
(11)
{\theta^{n+1} = \theta^n - \eta \frac{\partial L(\theta)}{\partial \theta}} \tag{11}
θn+1=θn−η∂θ∂L(θ)(11)其中
η
{\eta}
η为学习步长,使用梯度下降的几个小建议:
5.1. 改变学习步长
η
{\eta}
η:
不同的学习速率会是损失函数的收敛速度与方向不同,当
η
{\eta}
η太大的时候,甚至使损失函数的值更大。
一种简单的方法就是随着迭代次数的增加,逐渐减小
η
{\eta}
η。即:
η
t
=
η
t
+
1
(12)
{\eta^{t} = \frac{\eta}{\sqrt{t + 1}}} \tag{12}
ηt=t+1η(12)得到Vanilla Gradient descent:
θ
t
+
1
=
θ
t
−
η
t
g
t
(13)
{\theta^{t + 1} = \theta^t - \eta^tg^t} \tag{13}
θt+1=θt−ηtgt(13)其中
g
t
=
∂
L
(
θ
)
∂
θ
t
{g^t = \frac{\partial L(\theta)}{\partial \theta^t}}
gt=∂θt∂L(θ)。另一种改变
η
{\eta}
η的方法是Adagrad:
θ
t
+
1
=
θ
t
−
η
t
σ
t
g
t
(14)
{\theta^{t + 1} = \theta^t - \frac{\eta^t}{\sigma^t} g^t}\tag{14}
θt+1=θt−σtηtgt(14)其中
σ
t
{\sigma^t}
σt为0到t时刻梯度的根均方值:
σ
t
=
1
t
+
1
∑
i
=
0
t
(
g
i
)
2
(15)
{\sigma^t = \sqrt{\frac{1}{t + 1} \sum_{i = 0}^t {(g^i)^2}}}\tag{15}
σt=t+11i=0∑t(gi)2(15)把结合公式(12)代入到公式(15)有:
θ
t
+
1
=
θ
t
−
η
∑
i
=
0
t
(
g
i
)
2
g
t
(16)
{\theta^{t+1} = \theta^t - \frac{\eta}{\sqrt{\sum_{i = 0}^t{(g^i)^2}}}g^t}\tag{16}
θt+1=θt−∑i=0t(gi)2ηgt(16)Adagrad的做法可以将分母解释为梯度的二阶导数。并且使用Adagrad方法,也可以在梯度较大的时候移动的步伐较小(因为分母较大),即在陡峭的地方要小心移动;在梯度较小的时候移动的步伐较大,可以放心移动。
5.2. 随机梯度下降(Stochastic Gradient Descent,SGD):
当损失函数是由一批样本的误差构成的时候,使用的是朴素梯度下降,而当只抽取一个样本计算误差的时候,使用的方法是随机梯度下降。在相同样本数量的情况下,随机梯度下降的参数更新次数更多,而朴素梯度下降收敛更趋向于平缓。
5.3. 特征归一化(Feature Scaling):
特征归一化的好处就是能够使得损失函数在每个特征方向上的收敛速度一样,着有利于加快梯度收敛。归一化常用的公式有:
x
i
r
=
x
i
r
−
m
i
σ
i
(17)
{x_i^r = \frac{x_i^r - m_i}{\sigma_i}} \tag{17}
xir=σixir−mi(17)其中
i
i
i表示第
i
i
i维特征,
r
r
r表示第
r
r
r个样本,
m
u
m_u
mu表示第
i
i
i维特征的均值,
σ
i
{\sigma_i}
σi表示第
i
i
i维特征的标准差。
5.4. 鞍点(Saddle Point)与局部最小值(Local Minima):
在梯度下降的过程中,常常可能使损失函数陷入鞍点或者局部最小值中,这个时候损失函数的导数为零,但并不是最优的情况。常用的避免局部最优的方法有:
1.多次随机选择开始点:这个方法能在一定程度上避免鞍点和局部最小值,但是计算成本太大;
2.大批量训练:因为随机梯度下降更容易陷入鞍点或者局部最小值中,所以可以进行小批量样本的梯度下降,要尽可能地避免用大批量的样本进行训练,因为这样会使得网络的泛化能力下降,并且大批量的样本会更容易产生更尖锐的最小值;
3.添加噪声:在计算梯度的时候,给梯度赋予高斯噪声,这有利于逃逸局部最低点;
4.使用别的优化器:如动量随机梯度下降(SGD with Momentum, SGDM),在第t次梯度下降的时候,保留t-1次的方向,并综合两次的梯度生成新的下降方向:
v
t
=
λ
v
t
−
1
−
η
∇
L
(
θ
t
)
(18)
{v^t = \lambda v^{t-1} - \eta \nabla L(\theta^t)} \tag{18}
vt=λvt−1−η∇L(θt)(18)
θ
t
+
1
=
θ
t
+
v
t
(19)
{\theta^{t+1} = \theta^t + v^t} \tag{19}
θt+1=θt+vt(19)
6.模型误差来源(Source of Model Error)
模型的训练误差与测试误差主要来源于建立的模型与实际模型的偏差(Bias)与方差(Variance)。如果多次随机初始化并训练相同的模型时,得到的最优模型的平均值与实际模型之间的距离即是偏差,而这些模型之间的距离描述则是方差。
一般训练得到的四种情况如:
偏差与方差对于误差的影响:
当模型的偏差太大时,模型的训练误差与测试误差都较大,这个时候可能会出现欠拟合(Underfitting)的情况,可以通过调整模型的结构来纠正,包括调整激活函数,改变优化器等。
当模型的方差太大时,模型的训练误差较小,但是模型的泛化能力较差,这个时候可能会出现过拟合(Overfitting)的情况,可以通过增加训练样本,或者进行正则化来避免。正则化项常常添加到损失函数里,如2-正则化:
L
(
y
,
y
^
)
=
1
n
∑
i
=
1
m
(
y
−
∑
i
w
i
x
i
−
b
)
2
+
α
2
∑
i
w
i
2
(20)
{L(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^m{(y - \sum_{i}{w_ix_i} - b)^2} + \frac{\alpha}{2} \sum_{i}{w_i^2}} \tag{20}
L(y,y^)=n1i=1∑m(y−i∑wixi−b)2+2αi∑wi2(20)
7.总结(Conclusion)
本文是学习了李宏毅老师回归部分课程后的笔记。主要内容包含了线性回归的基本原理,两种常用的线性回归模型,以及回归模型中常用的损失函数与模型评价的一种方法。另外,还包含了模型参数更新常用的梯度下降法,并对模型误差来源部分进行了简要地介绍。
8.参考资料(Reference)
李宏毅老师2021课程
你应该掌握的 7 种回归模型!
【机器学习】逻辑回归(非常详细)
SGD过程中的噪声如何帮助避免局部极小值和鞍点?
版权声明
转载请注明出处