现在我们换个角度来看什么是梯度下降,我们有个代价函数,而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数
时,它们会计算出两样东西:
以及j等于 0、 1 直到n时的偏导数项。

假设我们已经完成了可以实现这两件事的代码,那么梯度下降所做的就是反复执行这些更新。对于梯度下降来说,我认为从技术上讲,你实际并不需要编写代码来计算代价函数。你只需要编写代码来计算导数项,但是,如果你希望代码还要能够监控
的收敛性,那么我们就需要自己编写代码来计算代价函数
和偏导项
而**梯度下降并不是我们可以使用的唯一算法**,还有其他一些算法,更高级、更复杂。如果我们能用这些方法来计算代价函数和偏导数项的话,那么这些算法就是为我们优化代价函数的不同方法, **共轭梯度法 BFGS (变尺度法) 和 L-BFGS (限制变尺度法) **就是其中一些更高级的优化算法。它们需要有一种方法来计算以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。<br /> 这三种算法有许多优点:<br /> 一个是使用这其中任何一个算法,你**通常不需要手动选择学习率**,所以对于这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,而且,事实上,他们确实有一个智能的内部循环,称为**线性搜索(line search)算法**,它可以自动尝试不同的学习率 ,并自动选择一个好的学习速率,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。这些算法实际上在做更复杂的事情,而不仅仅是选择一个好的学习率,所以它们往往最终收敛得远远快于梯度下降,_不过关于它们到底做什么的详细讨论,已经超过了本门课程的范围。_
