写在开头:看了AndroidNG的斯坦福公开课之后,又想重新审视对之前学的似懂非懂的梯度下降方法。写篇博客研究一下其中的数学知识。
1.线性回归
1.线性回归的预测模型:
hθ(x)=θ0+θ1x1+⋯+θnxn
给定m个样本
(x(1),x(2),…,x(m))
对应的标记分别为
(y(1),y(2),…,y(m))
:
我们要做的就是根据这m个样本去估计theta的值,
如何去估计呢?
方法一:直接将m个样本值带入回归模型求
θ
,可以得到:
注: x(i)j 表示的是第i个样本的第j个特征
令
x0=1
则上式转化成向量表示:
Y=θT∗X
其中
Y=(y(1),y(2),…,y(m));θ=(θ0,θ1,…,θn)T
根据线性代数可知:
而且所有的点都位于拟合曲线上,会出现过拟合问题
方法二:最优化方法,构造损失函数,求得能使损失函数最小的最优
θ
值
机器学习中常用的损失函数:
(1) 0−1 loss function
f(θ)={1,0,y≠hθ(x)y=hθ(x)J(θ)=∑θ=θ0θkf(θ)
(2)quadratic loss function
J(θ)=∑i=1m(y(i)−hθ(x(i)))2
(3)absolute loss function
J(θ)=∑i=1m∣∣(y(i)−hθ(x(i)))∣∣
(4)logarithmic loss function
J(θ)=−∑i=1mlogP(y(i)∣x(i))
在线性规划中最常用的是平方损失函数
J(θ)=∑mi=1(y(i)−hθ(x(i)))2
。
我们实际上要最优化
θ
的目标也就等价于最小化损失函数
J(θ)
,这里的
J(θ)
就是关于
θ
的函数,其中这个式子中
x
和
下面介绍几种常用的优化方法:
1.梯度下降
2.牛顿法
2.梯度下降(Gradient Descent)
考虑无约束数学规划问题:
步骤:
(1)选取初始点 θ(0) ,指定计算精度 ϵ>0 。令 k=0
(2)计算迭代方向向量 dk=−▿J(θ(k)) (负梯度方向)
(3)如果 ||▿J(θ(k))||≤ϵ (偏导为0,同样也可以判断函数值的变化),停止迭代, θ∗=θ(k) ,算法结束。
(4)否则,求最优步长 λk ,也就是 λk=argminλJ(θ(k)+λdk) (其中 θ(k),dk 都是已知,所以很容易求 λk ),令 θ(k+1)=θ(k)+λkdk,k=k+1 转步骤2。
编程的大致伪代码即为:
首先程序给予
θ(0)
,
repeat{
θ(k+1)=θ(k)−λk∗ddθJ(θ(k))
//梯度方法
}
注意:
此处的
θ
为向量也就是,上式可以转化为:
repeat{
θ(k+1)0=θ(k)0−λkddθ0J(θ(k))
θ(k+1)1=θ(k)1−λkddθ1J(θ(k))
⋮
θ(k+1)n=θ(k)n−λkddθnJ(θ(k))
}
直到
J(θ)
的值不在变化时,停止迭代。
理论:沿着逆梯度方向函数值在减小,执行梯度下降需要满足原函数是凸函数,关于
J(θ)
是否满足,因为是二次函数,所以明显是满足的
缺点:首先需要说明的一点是 dk+1⊥dk ,证明方法简单,步骤(4)中求最优 λk 时,求导等于0,即可得到上述结论。由于这个特点的存在,会导致在接近最优点的时候,每次迭代的步长会特别小,导致迭代次数增加。所有就有了牛顿法。
牛顿法
逻辑回归简述
MATLAB编程实现
关于最优化的思考
无约束优化
黄金搜索法
二次插值法
Nelder-Mead算法
最速下降法
牛顿法
模拟退火法
遗传算法
约束优化
拉格朗日乘子法
惩罚函数法
写在最后:这篇博客还没写完,编辑公式太浪费时间了。下面所要写的也都是优化问题的方法,所以一次没写完,要等着之后慢慢补充。关于优化问题,读者可以最好买几本数学的教材读一读。机器学习中充斥的最多的也就是优化问题。可以先随便看一本国内的优化问题的教材,然后攻读Stephen Boyd的Convex optimization(凸优化)。
——2016.12.8