机器学习篇——优化方法

机器学习问题推导最终大多转化为对目标函数或者损失函数的优化
最优化模型包括梯度下降法、牛顿法及其改进
梯度下降法和牛顿法:
1、泰勒展开
对损失函数L(wt+1)在wt处展开,可以得到L(wt+1)为L(wt)加上一阶导数乘以(wt+1减去wt)
2、最小化损失函数
若要减小损失函数,即令一阶导数乘以(wt+1减去wt)小于0
3、求得w的更新量
技巧:可以令(wt+1减去wt)=-学习率*一阶导数,其中学习率大于0
这样就推出了梯度下降公式,牛顿法则是二次展开,令一次项+二次项等于0,解得(wt+1减去wt)的值

x += - learning_rate * dx #learning_rate为学习率,dx为一阶导数

批梯度下降法和随机梯度下降法:
1、原理
同梯度下降法,只不过梯度下降法每次更新用了所有的数据,而这两种方法采用部分数据更新
2、公式
同梯度下降法,只是求导数时,用部分数据的期望代替梯度下降法中所有数据的期望
动量梯度下降法
1、原理
保留一定比例上一轮更新量,给以更新量一定的惯性
2、公式

v = mu * v - learning_rate * dx # v为每次更新量,mu为保留的比例,
x += v 

3、变体
Nesterov动量,用x+muv处的导数代替x处的

x_ahead = x + mu * v
# 计算dx_ahead(在x_ahead处的梯度,而不是在x处的梯度)
v = mu * v - learning_rate * dx_ahead
x += v

Adagrad
1、学习率退火
学习率退火即每一轮对学习率乘以一个0到1的数(可以是指数函数、幂函数在第一象限单调递减形式)
2、公式

cache += dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

RMSP
1、原理
同adagrad,但是不同轮次的导数对cache贡献度不同,采用梯度平方的指数加权平均
2、公式

cache =  decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)

Adam
1、原理
在RMSP的基础上再对梯度进行改进,引入梯度的滑动平均
2、公式

m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
m_=m/(1-beta1**t)
v_=v/(1-beta2**t)
x += - learning_rate * m_ / (np.sqrt(v_) + eps)

启发式优化算法:
模拟退火方法、遗传算法、蚁群算法以及粒子群算法
有约束问题:
拉格朗日乘子法
要点:kkt条件是原始问题(最小最大问题)和对偶问题(最大最小问题)同解的充要条件
这里写图片描述
参考:cs229

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页