数学基础系列博客是自己在学习了稀牛学院&网易云课堂联合举办的《人工智能数学基础》微专业后的课程笔记总结。怀着对授课讲师Jason博士无限的敬佩与感激之情,我在完整听了两遍课程之后,对这门进行了笔记整理。Jason博士用深入浅出的方式把数学知识真的是讲透彻了,我的笔记显然无法完整传达Jason博士的精彩授课内容,在此非常推荐每一个打算进入或了解AI的同学去学习这门课程!
一:问题引入:线性回归问题
现在,我有如下一组关于病人收缩压的数据,包括患者姓名,性别,年龄,体重等信息,每一种信息为表中的一列。数据其中第6列为病人的收缩压。根据已有的这些数据记录,我需要对新的病例进行预测,那么怎么办呢?按照机器学习的方法,是首先对已有的数据进行训练,得到一个模型,然后利用该模型对新的未知病例进行预测。

符号说明:
1.{(x(i),y(i))}是一个训练样本,其中上角标i表示样本的编号;
2.{(x(i),y(i));i=1,⋯,N}是训练样本集,共有N个样本;
3.{(x1(i),x2(i),y(i))}→{(x(i),y(i))},x(i)=[x1(i)x2(i)] ,将多个影响因素组合成一个向量表示。其中x(i)表示特征,y(i)表示预测值(标签值)。

上图便是我们熟悉的线性回归模型,只不过是一维情况下的示意图。在实际的机器学习过程中,影响y的因素肯定不只有一个,就拿上述收缩压的例子来讲,影响收缩压的因素就有性别,年龄等诸多因素。因此,一维情形下的线性回归模型肯定不能够满足要求。这就引出了多维情形下的线性回归模型。
以下对一维和多维情形下的线性回归问题进行对比观察:
-
对于一维的线性回归,试图学习:f(x)=wx+b,使得f(x(i))≈y(i)
-
对于多维的线性回归,试图学习:f(x)=wTx+b,使得f(x(i))≈y(i),其中输入为向量,输出是标量。wTx代表向量内积(或者称为向量点乘),最终的结果是一个具体的数字(标量)。在线性代数中,向量默认是列向量。
接下来,核心的问题就在于怎么学到w和b?
二:无约束优化梯度分析法
2.1 定义无约束优化问题
自变量为标量的函数f: R→R:
minf(x)x∈R
自变量为向量的函数f: Rn→R:
minf(x)x∈Rn
通过将一维和多维情形下的优化函数进行对比,我们可以清楚的明白,优化问题的目的是求一个函数的最小值。在一维情况下,自变量为标量,而在多元情况下,自变量变成向量,但是最优的函数值依旧是标量。在实际应用中,一元的情况很少见,最常见到的就是多元的情况,而且自变量x的维度有可能非常高。
优化问题可能的极值点情况:
]
第一个图有极小值,第二个图有极大值,第三个图有鞍点(saddle point),可以类比(y=x3x=0)的情况。第四张图中,既有极大值也有极小值,而且有局部极大(小)值。在实际的应用中,最常出现的是最后一种图,当维度很高时,我们有时候根本就不可能知道函数到底是什么样子的,也无法可视化。而且我们往往只能找到函数的局部极值,很难找到函数的全局最值(客观条件所限)。但是能够找到函数的局部极值也是非常有意义的。
2.2 梯度和Hessian矩阵
同样采用一阶和二阶对照的角度来理解
一阶导数和梯度:f′(x);g(x)=∇f(x)=∂x∂f(x)=⎣⎢⎢⎡∂x1∂f(x)⋮∂xn∂f(x)⎦⎥⎥⎤
注解:
-
导数的大小代表了函数在某个方向上变化的快慢;梯度的方向为函数值增加最快的方向。梯度本身是一个n维向量。
-
一阶导数为对x(标量)求导,二阶导数为对x(n维的向量)求导,结果为f对向量中的每一个x单独求导,然后组成一个向量(列向量)。
二阶导数和Hessian矩阵:
f′′(x);H(x)=∇2f(x)=⎣⎢⎢⎡∂x12∂2f(x)∂x2∂x1∂2f(x)∂xn∂x1∂2f(x)∂x1∂x2∂2f(x)∂x22∂2f(x)∂xn∂x2∂2f(x)⋯⋯∂x1∂xn∂2f(x)⋯∂xn2∂2f(x)⎦⎥⎥⎤=∇(∇f(x))T
注解:
- 在多维情况下,二阶导数即为Hessian矩阵,在梯度的基础上再求一次导。是一个n∗n的矩阵。
- Hessian矩阵其实是一个实对称矩阵,对角元相等。
2.3 二次型
2.3.1 定义
给定矩阵A∈Rn×n,函数
xTAx=i=1∑nxi(Ax)i=i=1∑nxi(j=1∑naijxj)=i=1∑nj=1∑nxixjaij
被称为二次型。
- 给定对称矩阵A∈Rn×n,如果对于所有的x∈Rn,有XTAx≥0 ,则为半正定矩阵,此时特征值λ(A)≥0.
- 如果对于所有的x∈Rn,x̸=0,有XTAx>0 ,则为正定矩阵。反之,如果小于0,则为负定矩阵,否则为不定矩阵。
上式注解:
1.A是一个实对称矩阵。
2.Ax的乘积可以看作是一个列向量,然后与xT相乘。这样其实就是两个列向量做点乘,结果是一个具体的数(标量)。
3.可以类比x∗2∗x>0,此时对于任意的x(x不为0),函数值均大于0,此时2为正数。
2.3.2 具体计算
-
向量a与x无关,则∇(aTx)=a,∇2(aTx)=0
-
对称矩阵A与x无关,则∇(xTAx)=2Ax,∇2(xTAx)=2A (可类比(ax2)′=2ax;(ax2)′′=2a.
-
最小二乘:
f(x)=∥Ax−b∥22=(Ax−b)T(Ax−b)=xTATAx−xTATb−bTAx+bTb=xTATAx−2bTAx+bTb∇f(x)=2ATAx−2ATb
2.4 泰勒级数
2.4.1 泰勒级数展开(标量和向量)
-
输入为标量的泰勒级数展开
f(xk+δ)≈f(xk)+f′(xk)δ+21f′′(xk)δ2+⋯+k!1fk(xk)δk+⋯
-
输入为向量的泰勒级数展开
f(xk+δ)≈f(xk)+gT(xk)δ+21δTH(xk)δ
注解
-
理解向量情况时,与标量情况进行对照理解。
-
gT(xk)为梯度的转置(由列向量转变为行向量),相当于求一阶导数。H(xk)为Hessian矩阵,相当于求二阶导数。因为后边的高阶项数值太小,因此只保留到二阶项。
-
δ可正可负,代表x周边很小的一个值。
2.4.2 泰勒级数和极值
标量情况
- 输入为标量的泰勒级数展开:(保留到二阶项)
f(xk+δ)≈f(xk)+f′(xk)δ+21f′′(xk)δ2
- 严格的局部极小点是指:f(xk+δ)>f(xk)
- 称满足f′(x)=0的点为平稳点(候选点)
- 函数在xk由严格局部极小值的条件为f′(x)=0且f′′(x)>0.
向量情况(一定对照标量情况理解)
-
输入为向量的泰勒级数展开:(保留到二阶项)
f(xk+δ)≈f(xk)+gT(xk)δ+21δTH(xk)δ
-
称满足g(xk)=0的点为平稳点(候选点),此时如果H(xk)为正定矩阵,则xk为一严格局部极小点;如果为负定矩阵,则为严格局部极大点;如果为不定矩阵,则为鞍点(saddle point)。
通过2.4.1和2.4.2的分析,我们可以发现,当我们想要求函数的极小值时,首先需要找到一阶导数为0的点,然后再判断这些点处二阶导数的情况。但是实际中,当求解梯度为0时存在一些局限性。比如:
计算f(x)=x4+sin(x2)−ln(x)ex+7的导数。
f′(x)=4x(4−1)+dxd(x2)cos(x2)−dxd(lnx)ex−ln(x)dxd(ex)+0=4x3+2xcos(x2)−x1ex−ln(x)ex
从上面的结果中可以看出,当f′(x)=0时,很难通过直接求导等于0的方法求出显式解。此时,我们就需要采用另外的方法来解决这个问题,此时,无约束优化迭代法应运而生。
三:无约束优化迭代法
3.1 迭代法的基本结构(最小化f(x))
- 选择一个初始点,设置一个收敛容忍度ϵ,计数k=0
- 决定搜索方向dk,使得函数下降。(核心步骤)算法与算法最本质的区别就在于搜索方向的不同
- 决定步长αk,使得f(xk+αkdk)对于αk≥0最小化,构建xk+1=xk+αkdk
- 如果∣∣dk∣∣2<ϵ,则停止迭代(说明梯度已经非常小了,这时已经非常接近极值点了);否则继续迭代
αk太大,则容易在最低值处震荡,甚至冲过最低点导致不收敛。如果太小,则收敛速度会很慢,在实际应用中,这个值就是需要调的参数。
]
3.2 梯度下降法
- 方向选取: dk=−g(xk)(最重要)
原因分析:
我们展开泰勒级数,只保留一阶项,则f(xk+dk)≈f(xk)+gT(xk)dk,既然要使得函数值下降,则必须要使得f(xk+dk)<f(xk),也即是要求gT(xk)dk<0,这就说明是两个向量的内积小于0,相当于两个向量的夹角大于90度(−1≤cos(θ)≤1)。 当夹角为180度时,两个向量的内积最小(绝对值最大),此时dk=−g(xk),f(xk+dk)下降最多。
注释
-
两个向量的内积a⋅b=aTb=∣∣a∣∣∣∣b∣∣cos(θ)

-
在保留一阶项的时候,梯度下降法是最优的方法,所选取的负梯度方向为最优的方向;但是这并不代表负梯度方向就是全局最优的方向,因为我们把二阶项给舍弃了。
3.3 牛顿法
3.3.1 牛顿法介绍
方向:dk=−H−1(xk)g(xk)
方向选取的依据:
f(xk+dk)=f(xk)+gT(xk)dk+21dkTH(xk)dk
在上面这个式子中,xk是已知的,dk是未知的。我们的目的是找到一个dk使得f(xk+dk)最小,因此我们对dk求导,得到:
∂dk∂f(xk+dk)=0⇒g(xk)+H(xk)dk=0
如果Hessian正定,则有dk=−H−1(xk)g(xk)。
**注:**需要强制要求Hessian矩阵正定。原因如下:
(1)把dk的结果表达式代入,可得:f(xk+dk)=f(xk)−1/2gT(xk)H−1(xk)g(xk),只有当H−1(xk)正定,也就是H(xk)正定时,才能保证f(xk+dk)<f(xk),即函数值下降。
(2)只有当H正定时,才能保证H可逆,才能求得dk。
3.3.2 应用牛顿法的困难点
- 在实际工程中,Hessian矩阵H很难求,而H−1更加难求。而且H本身可能就不是正定矩阵。
- 解决办法:
- 修正牛顿法:当Hessian矩阵不是正定矩阵时,可以对Hessian矩阵进行修正:H(xk)+E,典型方法E=δI,δ>0很小。这样做的目的是:通过添加一个单位阵,让E中最小的特征值也大于0,这就就可以保证修正后的Hessian矩阵是正定的,然后再求逆矩阵。
- 拟牛顿法
3.4 拟牛顿法
3.4.1 核心思想
dk=−Skgk
其中:Sk={IHk−1 steepest Newton
-
由于牛顿法的困难之处在于H−1很难求,那么我们可以尝试这样的思路,不直接求Hk−1,而是尝试用一个正定矩阵去逼近Hk−1。
-
定义δk=xk+1−xk,γk=gk+1−gk
-
用于近似Hk−1的矩阵应满足这样的条件:Sk+1γk=δk
-
理解方式:xk+1−xkgk+1−gk=Hk,因此,就可以得到Sk+1:=γkδk=Hk−1,当满足Sk+1γk=δk时,Sk+1可用来近似H−1
-
注意:关于Sk+1的推导是不严谨的,仅仅通过上述方法用于理解思想。(即一阶导数再求导,便可以得到二阶导数)
-
只有δk和γk是不可能计算出Sk+1的(因为δk和γk都是向量,不能直接做除法),因此,我们继续考虑使用迭代的方法。
3.4.2 DFP法
-
给定初始S0=I
-
Sk+1=Sk+ΔSk,k=0,1,⋯
-
ΔSk=αuuT+βvvT,因此
Sk+1=Sk+αuuT+βvvT
-
两边同时乘γk,有δk=Skγk+1(αuTγk)u+−1(βvTγk)v=Skγk+u−v,令αuTγk=1,βvTγk=−1(类似待定系数法)
-
解得:α=uTγk1,β=−vTγk1且u−v=δk−Skγk,可得u=δk;v=Skγk,从而最终解得DFP更新公式:
Sk+1=Sk+δkTγkδkδkT−γkTSkγkSkγkγkTSk
注意:Sk是对称矩阵,其转置和自身相等。
3.4.3 BFGS法
思想与DFP方法一致,区别在于ΔSk的选取不一致。一般来讲,BFGS法在数值上更稳定一些。
更新公式:
Broyden-Fletcher-Goldfarb-Shanno (BFGS): S0=ISk+1=Sk+(1+δkTγkγkTSkγk)δkTγkδkδkT−δkTγkδkγkTSk+SkγkδkT
3.5 步长选取问题
第一种方法:每次迭代选择固定的步长。这种方法在实际中最常用,例如αk=α=0.1。
第二种方法:每次选取最优步长。例如,对于二次型问题:f(x)=xTAx+2bTx+c,
需要解:α≥0minf(x+αd),令h(α)=f(x+αd),则∂α∂h(α)=0⇒α=−2dTAddT∇f(x)。该α即为每次迭代时的最优步长。
推导计算
h(α)=(x+αd)TA(x+αd)+2bT(x+αd)+c=(xTA+αdTA)(x+αd)+2bT(x+αd)+c=xTAx+αdTAx+αxTAd+α2dTAd+2bTx+2αbTd+c∂α∂h(α)=dTAx+xTAd+2αdTAd+2bTd=02xTAd+2αdTAd+2bTd=0α=−dTAdxTAd+bTd=−dTAddTAx+dTb=−2dTAddT(2Ax+2b)=−2dTAddT∇f(x)
注:当采用梯度下降法时,d=−g=−∇f(x),α=2dTAd∣∣∇f((x)∣∣22;当采用牛顿法或者拟牛顿法时,d=−Sg.
通过以上求解,可以得到每次迭代时的最优步长。
四:线性回归求解
4.1 利用梯度等于0直接求解
对于一个线性回归问题,我们试图学习到这样一个模型 :f(x)=wTx+b,使得f(x(i))≈y(i)。关键在于如何学习得到w和b。
-
令w=[wb],X=⎣⎢⎡x(1)T⋮x(N)T1⋮1⎦⎥⎤N×(d+1),则有y≈Xw。
-
损失函数:∥y−Xw∥22,我们的目标在于求解使得损失函数最小的w和b。即:
W,bmin∥y−Xw∥22
-
损失函数对w求导,令导函数为0可得:
g(w)=0⇒2XT(Xw−y)=0⇒w∗=(XTX)−1XTy
这样便可以直接求得最优参数,但是我们也观察到结果中存在求逆的步骤。求逆的运算量特别大,在实际工程中一般都会避免,并且,也不一定在任何情形下均可以求逆。因此,我们可以采用梯度下降法来进行迭代。
4.2 梯度下降法求解
g(w)==2XT(Xw−y)2i=1∑NX(i)(wTX(i)−y(i))w←w−αg(w)
注意:其中X(i)=[x(i)T,1]T.是一个列向量。
-
随机梯度下降法(SGD),在实际中很常用。其实就是把梯度下降法中的求和运算去掉,每次更新时,只选择一个样本进行计算。
{i=1:N,2X(i)(wTX(i)−y(i))}
-
当∣∣g(w)∣∣2<ϵ时,停止迭代。