假设函数
假设函数就是假设某一个函数可以代表大多数数据的分布。这个函数的参数是未知的,而不同的参数所得到的假设函数是不同的。
模型参数与假设函数之间的关系:参数设定的不同,直接导致假设函数的不同。
损失函数(loss function)
损失函数也称代价函数,是描述假设函数在不同参数值下的损失。损失函数最终作为模型建立的学习准则和优化问题,通常将损失函数用来判断模型预测出来的结果与实际值的差距程度。
优化函数
优化函数对损失函数进行优化,寻找最优参数。
优化损失函数的方式有很多种,常用到的是最小二乘和梯度下降
最小二乘法是通过最小化误差的平方和来寻找数据的最佳函数(即最佳参数)并与之匹配。最小二乘法是用数学公式直接求解线性回归方程的参数的方法。
一元线性回归方程
以最简单的一元线性回归( y = x + b y = x+b y=x+b)为例,一元线性回归可以看成Y的值随着X的改变而改变,每个X都对应一个Y,每个X都可通过公式计算出一个预测值 Y ′ Y' Y′(公式2),需要做的就是让所有的预测值 Y ′ Y' Y′与真实值Y之间的误差(即 ∑ k = 1 n ( Y − Y ′ ) \sum_{k = 1} ^n (Y-Y') ∑k=1n(Y−Y′))最小
[
Y
1
′
Y
2
′
Y
3
′
⋅
⋅
⋅
Y
n
]
=
c
[
X
1
X
2
X
3
⋅
⋅
⋅
X
n
]
+
b
(2)
\begin{matrix} \\ \left[ \begin{matrix} Y_1' \\ Y_2' \\ Y_3' \\ · \\ · \\ · \\ Y_n \end{matrix} \right] = c \left[ \begin{matrix} X_1 \\ X_2 \\ X_3 \\ · \\ · \\ · \\ X_n \end{matrix} \right] \tag{2} +b \end{matrix}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡Y1′Y2′Y3′⋅⋅⋅Yn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=c⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡X1X2X3⋅⋅⋅Xn⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤+b(2)
公式2中一系列的X值可以求出一系列的预测值Y’,目的是使得每一对预测的Y’和Y之间的误差(Y- Y’)最小化。由于误差有正误差有负误差,为了避免彼此抵消,需要使用误差的平方来衡量。虽然绝对值也可以避免误差抵消,但是绝对值的代数计算性不如平方好,不便于求微分。二乘表示平方,最小二乘法就表示求误差平方和最小的方法。所以总误差公式如下:
E
=
∑
k
=
1
n
(
Y
−
Y
′
)
2
=
∑
k
=
1
n
(
Y
k
−
c
X
k
+
b
)
2
)
(3)
E = \sum_{k=1}^n(Y-Y')^2 = \sum_{k=1}^n(Y_k-cX_k+b)^2\tag3)
E=k=1∑n(Y−Y′)2=k=1∑n(Yk−cXk+b)2)(3)
公式3中,E表示总误差;n表示有n个数据点;k表示数据点的下标;Y真实值;
Y
′
Y'
Y′预测值;c和b是使得E最小的最优参数。
对公式3进行微积分,E最小化时E对c和E对b的偏微分要等于0。
∂
E
∂
c
=
∂
E
∂
b
=
0
∂
E
∂
c
=
∑
k
=
1
n
2
×
(
Y
k
−
c
X
k
−
b
)
(
−
X
k
)
=
0
∂
E
∂
b
=
∑
k
=
1
n
2
×
(
Y
k
−
c
X
k
−
b
)
(
−
1
)
=
0
用
这
两
个
公
式
分
别
得
到
一
个
二
元
一
次
方
程
∑
k
=
1
n
X
k
Y
k
=
c
×
∑
k
=
1
n
X
k
2
+
b
×
∑
k
=
1
n
X
k
∑
k
=
1
n
Y
k
=
c
×
∑
k
=
1
n
X
k
+
n
×
b
对
上
面
的
方
程
组
进
行
求
解
得
b
=
∑
k
=
1
n
Y
k
−
c
×
∑
k
=
1
n
X
k
n
=
Y
‾
−
c
X
‾
c
=
∑
k
=
1
n
(
X
k
−
X
‾
)
(
Y
k
−
Y
‾
)
∑
k
=
1
n
(
X
k
−
X
‾
)
2
\frac{\partial E}{\partial c} = \frac{\partial E}{\partial b} = 0 \\ \frac{\partial E}{\partial c} = \sum_{k=1}^n2×(Y_k-cX_k-b)(-X_k) = 0 \\ \frac{\partial E}{\partial b} = \sum_{k=1}^n2×(Y_k-cX_k-b)(-1) = 0 \\ 用这两个公式分别得到一个二元一次方程 \\ \sum_{k=1}^nX_kY_k = c × \sum_{k=1}^nX_k^2 + b× \sum_{k=1}^nX_k \\ \sum_{k=1}^nY_k = c × \sum_{k=1}^nX_k + n×b \\ 对上面的方程组进行求解得 \\ b = \frac{\sum_{k=1}^nY_k - c×\sum_{k=1}^nX_k}{n} = \overline{Y} - c \overline{X} \\ c = \frac{\sum_{k=1}^n(X_k - \overline{X})(Y_k - \overline{Y})}{ \sum_{k=1}^n(X_k - \overline{X} )^2}
∂c∂E=∂b∂E=0∂c∂E=k=1∑n2×(Yk−cXk−b)(−Xk)=0∂b∂E=k=1∑n2×(Yk−cXk−b)(−1)=0用这两个公式分别得到一个二元一次方程k=1∑nXkYk=c×k=1∑nXk2+b×k=1∑nXkk=1∑nYk=c×k=1∑nXk+n×b对上面的方程组进行求解得b=n∑k=1nYk−c×∑k=1nXk=Y−cXc=∑k=1n(Xk−X)2∑k=1n(Xk−X)(Yk−Y)
X
‾
\overline{X}
X和
Y
‾
\overline{Y}
Y表示平均值,
也称为最快下降法,假设从任意某一点出发,需要最快搜索到函数的最大值,也就是从函数变化最快(即梯度下降最快的方向)的方法搜索。
多元线性回归方程
多个自变量X与因变量Y之间存在线性相关关系。
公式如下
Y
=
c
1
X
1
+
c
2
X
2
+
c
3
X
3
+
…
+
c
n
X
n
+
b
Y = c_1X_1 + c_2X_2 + c_3X_3 + \ldots + c_nX_n + b
Y=c1X1+c2X2+c3X3+…+cnXn+b
简写为
Y
=
∑
i
=
1
n
c
i
X
i
+
b
Y=\sum_{i=1}^nc_iX_i+b
Y=∑i=1nciXi+b
用矩阵表示为:
[
Y
1
′
Y
2
′
Y
3
′
…
Y
n
]
=
[
c
1
′
c
2
′
c
3
′
…
c
n
]
×
[
1
X
11
X
12
…
X
1
n
1
X
21
X
22
…
X
2
n
1
X
31
X
32
…
X
3
n
…
…
…
…
1
X
n
1
X
n
2
…
X
n
n
]
\begin{matrix} \\ \left[ \begin{matrix} Y_1' \\ Y_2' \\ Y_3' \\ \ldots \\ Y_n \end{matrix} \right] = \left[ \begin{matrix} c_1' \\ c_2' \\ c_3' \\ \ldots \\ c_n \end{matrix} \right] × \left[ \begin{matrix} 1& X_{11} & X_{12} \ldots & X_{1n} \\ 1& X_{21} & X_{22} \ldots & X_{2n} \\ 1& X_{31} & X_{32} \ldots & X_{3n}\\ \ldots & \ldots & \ldots& \ldots \\ 1& X_{n1} & X_{n2} \ldots & X_{nn} \end{matrix} \right] \end{matrix}
⎣⎢⎢⎢⎢⎡Y1′Y2′Y3′…Yn⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡c1′c2′c3′…cn⎦⎥⎥⎥⎥⎤×⎣⎢⎢⎢⎢⎡111…1X11X21X31…Xn1X12…X22…X32……Xn2…X1nX2nX3n…Xnn⎦⎥⎥⎥⎥⎤
简写为
Y
′
=
X
C
\bf{Y' } = \bf{X C}
Y′=XC,其中
Y
′
\bf Y'
Y′、
X
\bf X
X、
C
\bf C
C都表示矩阵
同样是对真实值与预测值误差的平方和求最小值,可以得到回归系数矩阵
C
\bf C
C:
C
=
(
X
T
X
)
−
1
X
T
Y
\bf C = (X^TX)^{-1}X^TY
C=(XTX)−1XTY
需要注意的是,上式中设计对
X
T
X
X^TX
XTX矩阵求逆,因此之恩给你在逆矩阵存在的时候使用,当这个矩阵不存在的时候,不能使用最小二乘法求解。但是即使存在逆矩阵,对于一个高阶矩阵求逆的代价也是非常昂贵的,一般情况下,一个n矩阵求逆的时间复杂度大约为
O
(
n
3
)
O(n^3)
O(n3),使用分治法可以缩短到
O
(
n
2.18
)
O(n^{2.18})
O(n2.18)。可以想象,当自变量的个数增加到一定程度后(在深度学习中参数常会上万),最小二乘法求回归系数矩阵就不再可行。因此,对于多元线性回归常常使用梯度下降法来求解。
再微积分中,在多元函数的参数求偏导,把求得的参数的偏导数以向量的形式写出来,就是梯度。如函数
f
(
x
,
y
)
f(x,y)
f(x,y),分别对x,y求偏导数,求得的梯度向量就是
(
∂
f
∂
x
,
∂
f
∂
y
)
T
(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y})^T
(∂x∂f,∂y∂f)T,简称
g
r
a
n
d
f
(
x
,
y
)
或
∇
f
(
x
,
y
)
grand f(x,y)或\nabla f(x,y)
grandf(x,y)或∇f(x,y)。点
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)的具体梯度向量就是
(
∂
f
∂
x
0
,
∂
f
∂
y
0
)
T
或
者
∇
f
(
x
0
,
y
0
)
(\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial y_0})^T或者\nabla f(x_0,y_0)
(∂x0∂f,∂y0∂f)T或者∇f(x0,y0),如果是3个参数的梯度向量,就是
(
∂
f
∂
x
,
∂
f
∂
y
,
∂
f
∂
z
)
T
(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},\frac{\partial f}{\partial z})^T
(∂x∂f,∂y∂f,∂z∂f)T,依此类推。
梯度向量的几何意义就是函数变化增加最快的地方。具体来说,对于函数 f ( x , y ) f(x,y) f(x,y)在点 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),沿着梯度向量的方向就是 ( ∂ f ∂ x 0 , ∂ f ∂ y 0 ) T (\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial y_0})^T (∂x0∂f,∂y0∂f)T的方向是 f ( x , y ) f(x, y) f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反之,沿着梯度向量相反的方向,也就是 − ( ∂ f ∂ x 0 , ∂ f ∂ y 0 ) T -(\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial y_0})^T −(∂x0∂f,∂y0∂f)T的方向,就更加容易找到函数的最小值。 因此,梯度向量可以指引用迭代的方式找到误差平方的最小值,以及这个最小值所对应的回归参数。
下图显示了梯度下降法的迭代过程,
J
(
θ
0
,
θ
1
)
J(\theta_0,\theta_1)
J(θ0,θ1)是一个有两个自变量的函数,与一元线性回归中的误差平方和函数类似该函数也有b和c两个变量。超过两个的变量,在数据上的处理类似,只是无法像只有两个函数那样直观用图形表示出来。我们的目的是从图上的任意点出发,找到函数的最小值,即误差平方和最小的点,得到这个点对应的两个自变量(图中
θ
0
,
θ
1
,
就
是
一
元
线
性
回
归
方
程
中
的
b
和
c
\theta_0,\theta_1,就是一元线性回归方程中的b和c
θ0,θ1,就是一元线性回归方程中的b和c),即为求解的回归参数。
假设的起始点在误差平方和的最大值处,计算该点的梯度,梯度的负方向集误差和下降最快的方向,然后参数b和c移动固定的距离(步长),到第二个画x的点,再次计算这个点的梯度,得到另一个方向,继续移动,这个过程一直迭代至梯度为0(实践中是一个非常小的数,不会正好是0)即为函数的最小值。