常见的梯度下降法
通常最优化一个损失函数:
\(cost = \jmath (\theta ) = \frac{1}{2m} \sum_{m}^{i=1} (h_{\theta } (x^{i})-y^{i}))^{2}\)
梯度向量的方向即为函数值增长最快的方向。简单说就是损失函数以最快的速度减小,就是梯度的方向。
那么梯度就是:
\(\frac{\partial \jmath(\theta ) }{\partial \theta _{j} } = -\frac{1}{m} \sum_{i=1}^{m} (h_{\theta }(x^{i})-y^{i}))x_{j}^{i}\)
- 批量梯度下降法(
Batch Gradient Descent
,BGD
)
得到每个\(\theta\)的梯度之后,就可以按照下降的方向取更新每个\(\theta\),即
\(\acute{\theta }_{j} = \theta_{j} - \alpha \frac{\partial \jmath(\theta ) }{\partial \theta _{j} }\), 其实就是按照所有梯度的均值选择下降梯度。 - 随机梯度下降法(Stochastic Gradient Descent, SGD)
随机梯度下降法的特点是,每计算一个样本之后就要更新一次参数,这样参数更新的频率就高了,其公式如下:
\(\acute{\theta }_{j} = \theta_{j} - \alpha (h_{\theta }(x^{i})-y^{i}))x_{j}^{i}\) - 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)
Mini-batch的方法是目前主流使用最多的一种方式,它每次使用一个固定数量的数据进行优化。这个固定数量,称为batch size,较为常见的事2的n次方例如32、128、512等。越小的batch size对应的更新速度就越快,反之则越慢,但是更新速度慢就不容易陷入局部最优。具体数值设成多少,也跟项目的不同特点不同,比如图像就会设置小一些,NLP任务设置大一些。