机器学习笔记:监督学习应用.梯度下降


前言
第一课是机器学习的动机与应用观看后不再进行记录,多为介绍吴恩达老师和研究生的研究领域,以及一些机器学习的背景常识,博主已经读过周志华老师的《机器学习》书籍,已有对机器学习内容的基本了解,因此不再针对背景和太基本内容进行总结,直接记录干货,所以想要了解更为全面的相关领域知识可以学习下周志华老师的《机器学习》、图灵出版的《机器学习实战》以及《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=0nθ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=0m(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αθiJ(θ)
: = := :=”为赋值号,即将右边的值赋值给左边的变量
对于这个式子的求导过程不再详述,非常简单的过程,请读者一定要亲自计算一遍,对后面的学习有很大帮助。
结果为(只有一个训练样本的计算结果):
θ 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=1m(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) θiJ(θ)的结果

随机梯度下降算法(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)

(for all i)
} }

这样做和批梯度下降算法的区别是,更新 θ \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αJRn+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 aR,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 RealzTz=izi2

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 )=21im(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θθTXTyyTXθ+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θXTyXTy]
= 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值