前言
第一课是机器学习的动机与应用观看后不再进行记录,多为介绍吴恩达老师和研究生的研究领域,以及一些机器学习的背景常识,博主已经读过周志华老师的《机器学习》书籍,已有对机器学习内容的基本了解,因此不再针对背景和太基本内容进行总结,直接记录干货,所以想要了解更为全面的相关领域知识可以学习下周志华老师的《机器学习》、图灵出版的《机器学习实战》以及《Deep Learning》。
监督学习应用.梯度下降
- 线性回归 Linear regression
- 梯度下降 Gradient descent
- 正规方程组 Normal equations
线性回归
首先我们假设预测结果函数
h
(
x
)
h(x)
h(x)如下
h
(
x
)
=
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
h(x)=h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2
h(x)=hθ(x)=θ0+θ1x1+θ2x2
x
x
x为当前样本,
x
i
x_i
xi分别代表了样本的某个属性值,为简明表示,这里
x
0
=
1
x_0=1
x0=1,这样
θ
0
\theta_0
θ0则代表了线性模型中的偏移量。
h
(
x
)
=
∑
i
=
0
n
θ
i
x
i
=
θ
T
x
h(x)=\sum_{i=0}^n\theta_ix_i=\theta^Tx
h(x)=i=0∑nθixi=θTx
n表示了特征的数量
"
θ
\theta
θ are called parameters"(文中带引号的为吴恩达教授的课堂笔记)也就是说
θ
\theta
θ代表了模型中的参数,是得出最终模型的目标。
那么我们如何去求得这个
θ
\theta
θ值呢。我们可在不断地最小化误差的过程中,取得
θ
\theta
θ的值(当然这里还要考虑过拟合、欠拟合、样本噪声,提取特征等一系列问题,先做初步了解)。
min
θ
J
(
θ
)
=
min
θ
1
2
∑
i
=
0
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\min_\theta\mathtt{J}(\theta)=\min_\theta\frac{1}{2}\sum_{i=0}^m\left(\mathtt{h}_\theta(x^{(i)})-\mathtt{y}^{(i)}\right)^2
θminJ(θ)=θmin21i=0∑m(hθ(x(i))−y(i))2
求解算法
下面来讲述如何去求解这个最小化问题
搜索算法
“start with some
θ
\theta
θ.(Say
θ
=
0
⃗
\theta=\vec0
θ=0).Keep changing
θ
\theta
θ to reduce
J
(
θ
)
J(\theta)
J(θ)”
其实这一过程就是穷举法,通俗地讲就是逐个尝试,从0(或随机一个值)带入参数,得到的结果最小,那么就是参数的选取值。
批梯度下降法(batch gradient descent)
最为代表的一句“如果我想下山,那么我往哪个方向走最快”,即三维空间中(只有两个参数的情况下)梯度下降就像在这个不规则曲面上找最小一点,也就是误差最小点(这里要考虑梯度消失、梯度爆炸的情况,涉及权值共享等方法,这些内容读者可自行查阅,或者在之后的笔记中会有详解)
θ
\theta
θ初始化为
0
⃗
\vec0
0或堆积产生的
θ
\theta
θ。更新
θ
\theta
θ的方法如下:
θ
i
:
=
θ
i
−
α
∂
∂
θ
i
J
(
θ
)
\theta_i:=\theta_i-\alpha\frac{\partial}{\partial\theta_i}\mathtt{J}(\theta)
θi:=θi−α∂θi∂J(θ)
“
:
=
:=
:=”为赋值号,即将右边的值赋值给左边的变量
对于这个式子的求导过程不再详述,非常简单的过程,请读者一定要亲自计算一遍,对后面的学习有很大帮助。
结果为(只有一个训练样本的计算结果):
θ
i
:
=
θ
i
−
α
(
h
θ
(
x
)
−
y
)
⋅
x
\theta_i:=\theta_i-\alpha(\mathtt{h}_{\theta}(x)-\mathtt{y})\cdot x
θi:=θi−α(hθ(x)−y)⋅x
α
\alpha
α控制了“迈出步子”的大小(通常
α
\alpha
α的值是手动设置的,值过大则会越过最小值,值过小则影响效率)
一般化到多个样本中公式为:
θ
i
=
θ
i
−
α
∑
j
=
1
m
(
h
θ
(
x
(
j
)
)
−
y
(
j
)
)
⋅
x
i
(
j
)
\theta_i=\theta_i-\alpha\sum_{j=1}^m(\mathtt{h}_{\theta}(x^{(j)})-\mathtt{y}^{(j)})\cdot x_i^{(j)}
θi=θi−αj=1∑m(hθ(x(j))−y(j))⋅xi(j)
∑
j
=
1
m
(
h
θ
(
x
(
j
)
)
−
y
(
j
)
)
⋅
x
i
(
j
)
\sum_{j=1}^m(\mathtt{h}_{\theta}(x^{(j)})-\mathtt{y}^{(j)})\cdot x_i^{(j)}
∑j=1m(hθ(x(j))−y(j))⋅xi(j)即为
∂
∂
θ
i
J
(
θ
)
\frac{\partial}{\partial\theta_i}\mathtt{J}(\theta)
∂θi∂J(θ)的结果
随机梯度下降算法(stochastic gradient descent)
当 m m m的值过大,每走一步就要遍历一遍训练集时,可想而知其运行效率,尤其数据集高达亿级时,处理一亿个数据求和还未能完成第一步,这时我们就要考虑随机梯度下降算法(增量梯度下降法)了。
repeat{for j=1 to m{
θ i = θ i − α ( h θ ( x ( j ) ) − y ( j ) ) ⋅ x i ( j ) \theta_i=\theta_i-\alpha(\mathtt{h}_{\theta}(x^{(j)})-\mathtt{y}^{(j)})\cdot x_i^{(j)} θi=θi−α(hθ(x(j))−y(j))⋅xi(j)
这样做和批梯度下降算法的区别是,更新 θ \theta θ前不需要遍历整个训练集,只需要将当前第j个样本用来更新(用一个样本更新了所有的“方向”的梯度),这样的结果会使得“下坡”的路径变得曲折,但是最终会徘徊在低谷(即极小值)位置。
m = 训练样本集
x = 输入变量/特征
y = 输出变量/标签
(x,y)训练样本
正规方程
定义一个梯度关于函数,他是一个n+1维的向量
∇
θ
J
=
[
α
J
α
θ
0
⋮
α
J
α
θ
n
]
∈
R
n
+
1
\nabla_\theta\mathtt{J}=\begin{bmatrix} \frac{\alpha J}{\alpha\theta_0}\\ \vdots\\ \frac{\alpha J}{\alpha\theta_n}\\ \end{bmatrix} \in \mathbb{R}^{n+1}
∇θJ=⎣⎢⎡αθ0αJ⋮αθnαJ⎦⎥⎤∈Rn+1
some fact
t r A B = t r B A trAB = trBA trAB=trBA
t r A B C = t r C A B = t r B C A ( 依 次 将 最 后 一 位 向 前 提 ) trABC = trCAB = trBCA(依次将最后一位向前提) trABC=trCAB=trBCA(依次将最后一位向前提)
设 f ( A ) = t r A B , ∇ A t r A B = B T 设f(A) = trAB,\quad \nabla_AtrAB = B^T 设f(A)=trAB,∇AtrAB=BT
t r A = t r A T trA = trA^T trA=trAT
I f a ∈ R , t r a = a If\ a\in\mathbb{R},tr\ a=a If a∈R,tr a=a
∇ A t r A B A T C = C A B + C T A B T \nabla_A trABA^TC=CAB+C^TAB^T ∇AtrABATC=CAB+CTABT
下面进行分析:
X X X为样本矩阵
X θ = [ — ( x ( 1 ) ) T — — ( x ( 2 ) ) T — ⋮ — ( x ( m ) ) T — ] θ X\theta= \begin{bmatrix} —(x^{(1)})^T—\\ —(x^{(2)})^T—\\ \vdots\\ —(x^{(m)})^T—\\ \end{bmatrix} \theta Xθ=⎣⎢⎢⎢⎡—(x(1))T——(x(2))T—⋮—(x(m))T—⎦⎥⎥⎥⎤θ
由预测结果 h ( x ) = h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h(x)=h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2 h(x)=hθ(x)=θ0+θ1x1+θ2x2可得
X θ = [ x ( 1 ) T θ ⋮ x ( m ) T θ ] = [ h θ ( x ( 1 ) ) ⋮ h θ ( x ( m ) ) ] X_\theta = \begin{bmatrix} x^{(1)T}\theta\\ \vdots\\ x^{(m)T}\theta\\ \end{bmatrix}= \begin{bmatrix} h_\theta(x^{(1)})\\ \vdots\\ h_\theta(x^{(m)})\\ \end{bmatrix} Xθ=⎣⎢⎡x(1)Tθ⋮x(m)Tθ⎦⎥⎤=⎣⎢⎡hθ(x(1))⋮hθ(x(m))⎦⎥⎤
y ⃗ \vec y y为样本标记
y ⃗ = [ y ( 1 ) ⋮ y ( m ) ] \vec y= \begin{bmatrix} y^{(1)}\\ \vdots\\ y^{(m)}\\ \end{bmatrix} y=⎣⎢⎡y(1)⋮y(m)⎦⎥⎤
求 X θ − y ⃗ X\theta -\vec y Xθ−y
X θ − y ⃗ = [ h ( x ( 1 ) ) − y ( 1 ) ⋮ h ( x ( m ) ) − y ( m ) ] X\theta -\vec y= \begin{bmatrix} h(x^{(1)})-y^{(1)}\\ \vdots\\ h(x^{(m)})-y^{(m)}\\ \end{bmatrix} Xθ−y=⎣⎢⎡h(x(1))−y(1)⋮h(x(m))−y(m)⎦⎥⎤
R e a l : z T z = ∑ i z i 2 Real: z^Tz=\sum_iz_i^2 Real:zTz=i∑zi2
则
1 2 ( X θ − y ⃗ ) T ( X θ − y ⃗ ) = 1 2 ∑ i m ( h ( x ( 1 ) ) − y ( 1 ) ) 2 = J ( θ ) \frac{1}{2}(X\theta-\vec y)^T(X\theta-\vec y) = \frac{1}{2}\sum_i^m{(h(x^{(1)})-y^{(1)})}^2=\mathtt J(\theta) 21(Xθ−y)T(Xθ−y)=21i∑m(h(x(1))−y(1))2=J(θ)
令
∇ θ J ( θ ) = s c t 0 ⃗ \nabla_{\theta}\mathtt J(\theta)=^{sct} \vec0 ∇θJ(θ)=sct0
求解
∇ θ 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ∇ θ t r ( θ T X T X θ − θ T X T y − y T X θ + y T y ) \nabla_{\theta}\frac{1}{2}(X\theta-y)^T(X\theta-y)= \frac{1}{2}\nabla_{\theta}tr(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^Ty) ∇θ21(Xθ−y)T(Xθ−y)=21∇θtr(θTXTXθ−θTXTy−yTXθ+yTy)
实数的转至依然为其本身
= 1 2 [ ∇ θ t r θ θ T X T X − ∇ θ t r y T X θ − ∇ θ y T X θ ] =\frac{1}{2}[\nabla_\theta tr \theta \theta^TX^TX-\nabla_\theta tr y^TX\theta-\nabla_\theta y^TX\theta] =21[∇θtrθθTXTX−∇θtryTXθ−∇θyTXθ]
基于前面的fact
∇ θ t r θ I θ T X T X = X T X θ I + X T X θ I ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ( 6 ) \nabla_\theta tr \theta I\theta^TX^TX=X^TX\theta I+X^TX\theta I·········(6) ∇θtrθIθTXTX=XTXθI+XTXθI⋅⋅⋅⋅⋅⋅⋅⋅⋅(6)
∇ θ t r y T X θ = X T y ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ( 3 ) \nabla_\theta tr y ^TX\theta=X^Ty·········(3) ∇θtryTXθ=XTy⋅⋅⋅⋅⋅⋅⋅⋅⋅(3)
因此
∇ θ J ( θ ) = 1 2 [ X T X θ + X T X θ − X T y − X T y ] \nabla_\theta \mathtt J(\theta)=\frac{1}{2}[X^TX\theta+X^TX\theta-X^Ty-X^Ty] ∇θJ(θ)=21[XTXθ+XTXθ−XTy−XTy]
= X T X θ − X T y =X^TX\theta-X^Ty =XTXθ−XTy
令其为 0 ⃗ \vec0 0
X T X θ = X T y X^TX\theta = X^T y XTXθ=XTy
称其为正规方程
最终结果为:
θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy