{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "牛顿法是一种二阶优化算法，相对于梯度下降算法收敛速度更快。\n",
    "\n",
    "首先，我们在函数 $f(x)$ 上选择一个初始点 $x_1$，并计算相应的 $f(x_1)$ 和切线斜率 $f'(x_1)$，然后我们计算穿过点 $(x_1,f(x_1))$ 并且斜率为 $f'(x_1)$ 的直线和 X 轴的交点，也就是求如下方程的解：\n",
    "\n",
    "$$\n",
    "f(x_1) + f'(x_1)∗(x−x_1) = 0\n",
    "$$\n",
    "\n",
    "我们将新求得的点的坐标命名为 $x_2$，通常 $x_2$ 会比 $x_1$ 更接近 $f(x)=0$ 的解。因此我们现在可以利用 $x_2$ 开始下一轮迭代，迭代公式可化简为如下所示：\n",
    "\n",
    "$$\n",
    "x_{n+1} = x_n − \\frac{f(x_n)}{f'(x_n)}\n",
    "$$\n",
    "\n",
    "疑惑：不是二阶导数吗？\n",
    "\n",
    "牛顿法是基于当前位置的切线来确定下一次的位置，所以牛顿法又被很形象地称为是**切线法**。牛顿法的搜索路径（二维情况）如下图所示：\n",
    "\n",
    "![](../../images/NewtonIteration_Ani.gif)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 优缺点\n",
    "\n",
    "* 优点\n",
    "  * 相对于梯度下降法，收敛速度更快。\n",
    "\n",
    "* 缺点\n",
    "  * 每次计算都需要计算 Hessian 矩阵的逆，因此计算量较大。\n",
    "  * 在多变量的情况下，如果目标矩阵的 Hessain 矩阵非正定，牛顿法确定的搜索方向并不一定是目标函数下降的方向。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
