本文摘自 刘铁岩等《分布式机器学习》的第4章和第5章。
[toc]
1. 确定性算法——一阶
1.1 梯度下降法
由Cauchy在1847年提出。基本思想是:最小化目标函数在当前状态的一阶泰勒展开,从而近似地优化目标函数本身。
更新规则如下:
其中是步长,也常被称为学习率。
Initialize:
Iterate: for
1. 计算梯度
2. 更新参数
end
当目标函数是强凸函数时,梯度下降法的收敛速率是线性的;当目标函数是凸函数时,其收敛速率是次线性的。
1.1.1 投影次梯度下降法
梯度下降法有两个局限:①只适用于无约束优化问题;②只适用于梯度存在的目标函数。
投影次梯度下降法可以解决这两个局限性。迭代公式如下:
其中,为状态处目标函数的次梯度所构成的集合,为变量到约束域的投影。
Initialize: ,凸集合
Iterate: for
1. 随机选取一个次梯度
2. 更新参数
3. 将参数投影回集合:
end
对于光滑函数,在凸和强凸两种情形下,收敛速率与梯度下降法相同。
-
近端梯度下降法
是投影次梯度下降法的一种推广,适用于不可微的凸目标函数的优化问题。(个人理解是求解一个可微凸函数,再投影回原空间) -
Frank-Wolfe算法
是投影次梯度下降法的另一个替代算法。如果投影的计算很复杂,投影次梯度下降的效率将会成为瓶颈。该算法可解决这个问题。
1.1.2 Nesterov加速法
Nesterov在1983年对光滑的目标函数提出了一种加快一阶优化算法收敛的方法。
在任意时刻,对当前状态计算梯度方,按照一定步长计算辅助变量。然后将新计算的辅助变量和上一时刻计算的辅助变量做线性加权,作为时刻的状态。更新规则如下:
Initialize:
Iterate: for
1. 计算梯度
2. 更新变量
3. 做加权:
end
1.2 坐标下降法
其基本思想是,在迭代的每一步,算法选择一个维度,并更新这一维度,其他维度的参数保持不变,或者将维度分为多个快,每次只更新某块中的维度,其他维度保持不变。更新公式如下:
其中,为第个维度块的约束域。
Initialize:
Iterate: for
1. 令
2. 更新参数
end
对强凸并且光滑的目标函数,循环坐标下降法具有线性的收敛速率。
2. 确定性算法——二阶
2.1 牛顿法
基本思想是将目标函数在当前状态进行二阶泰勒展开,然后最小化这个近似目标函数,即
更新公式如下:
Initialize:
Iterate: for
1. 计算梯度
2. 计算海森矩阵,并求逆矩阵
3. 更新参数
end
具有二次收敛速率。
2.2 拟牛顿法
解决牛顿法的两个问题:①海森矩阵计算量和存储代价大;②海森矩阵不一定是正定的。
主要思想是构造一个与海森矩阵相差不太远的正定矩阵作为其替代品。
记,。在时刻,对时刻的海森矩阵加一个或者两个秩为1的矩阵作为对时刻海森矩阵的估计,例如:
海森矩阵的更新需要满足一定的条件(拟牛顿条件)。
对一阶泰勒展开的左右两边计算梯度,
所以
其中,为目标函数导数的更新量,为模型的更新量。
在拟牛顿条件下,更新规则为:
Initialize: ,
1.
2.Iterate: for
3. 计算
4. 计算导数和模型的更新量:,
5. 利用更新量和,多次迭代更新海森矩阵和海森逆矩阵:
end
还有DFP、Broyden、SR1等算法,当初始点离最优点足够近时,拟牛顿法和牛顿法同样具有二次收敛速率。
3. 确定性算法——对偶方法
前面各种优化算法都是直接求解原始优化问题。某些时候,把原始优化问题转化成对偶优化问题,会更容易求解。比如,当原始问题的变量维度很高,但是约束条件个数不太多时,对偶问题的复杂度(对偶变量的维度对应于约束条件的个数)会远小于原始问题的复杂度,因而更容易求解(这也是支持向量机方法高效的主要原因)。
如果一个优化问题需要通过求解其对偶问题来解决,我们可以首先推导出他所对应的对偶问题,并用各种一阶或者二阶方法来最大化对偶目标函数。
4. 随机算法——一阶
4.1 随机梯度下降法
SGD对训练数据做随机采样,其更新公式如下:
其中,是第轮随机采样的数据标号,是模型关于第个训练数据的(正则化)损失函数取值。
Initialize:
Iterate: for
1. 随机选取一个样本
2. 计算梯度
3. 更新参数
end
收敛速率慢于梯度下降法,但当样本量很大时,计算复杂度低。
4.1.1 小批量随机梯度下降法
随机梯度下降法的一个推广是小批量(mini-batch)随机梯度下降法,该方法每次迭代时随机抽取多个样本来计算梯度。
Initialize:
Iterate: for
1. 随机选取一个小批量样本集合
2. 计算梯度
3. 更新参数
end
4.2 随机坐标下降法
除了对样本进行随机采样外,还可以对模型的维度进行采样。其更新公式如下:
其中,表示第次迭代中随机抽取的维度标号,是损失函数对于模型中的第个维度的偏导数。
Initialize:
Iterate: for
1. 随机选取一个维度
2. 计算梯度
3. 更新参数
end
收敛速率与梯度下降法相同。
4.2.1 随机快坐标下降法
随机坐标下降法的一个推广是随机快坐标下降法,也就是将参数维度分为几块,算法每次随机选取其中的一块,更新这一块中的所有维度。
Initialize:
将个维度均等切分为块Iterate: for
1. 随机选取一块
2. 计算梯度
3. 更新参数
end