最近在学习得过程中感悟很大,即通过OKR的方法来形成自己学习内容中最小的闭环。另外对所谓学过的知识经常忘有了新的认识,所要做的不是以前的那套–所谓和遗忘作斗争不断去重复,而是思考清楚为什么会遗忘,一是自己没有真正理解,二是没有将知识点相互关联串起来。
一定要找到所学习内容中最小的闭环,然后,慢下来
梯度下降法:泰勒展开到一次项,忽略二次以上的项,用一次函数来线性代替,最后通过移项来得到迭代式;
牛顿法:把函数展开未二次,忽略二次以上的项,用二次函数来近似代替,最后通过对二次的函数求梯度,让梯度为0来得到迭代式;
梯度下降法是沿初始点梯度向量的反方向进行迭代,进而得到函数的极值点,参数迭代公式为:
x k + 1 = x k − γ ∇ f ( x k ) x_{k+1} = x_k - \gamma \nabla f(x_k) xk+1=xk−γ∇f(xk)
牛顿法是直接使用驻点处导数为零,推导处参数迭代公式:
x k + 1 = x k − γ H k − 1 g k x_{k+1} = x_k - \gamma H_k^{-1} g_k xk+1=xk−γHk−1gk
梯度下降沿着负梯度方向走,向目标函数梯度为零的点收敛,因此迭代可能停止在鞍点处;
什么是鞍点?->目标函数在此点上的梯度(一阶导数)值为 0,但从该点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。
判断鞍点标准:函数在一阶导数为0处(驻点)的海森矩阵为不定矩阵;
判断矩阵正定:对于n阶矩阵A,若有任意的非0向量X: $ X^{T} A X > 0 $
梯度下降法只会收敛到极小值点,而不一定是最小值点。当目标函数存在多个极小值点时,初始点 x 0 x_0 x0的选择就非常重要;
梯度下降法的学习率是人为设置的一个参数,当学习率较小时,达到收敛的迭代次数比较大。当学习率较大时,会存在极小值点处震荡无法收敛的情况。
改进方法:初始值的设定,步长的选择,迭代终止的判定规则;
由多元函数的泰勒公式:
f ( x ) = f ( x 0 ) + ∇ T f ( x 0 ) ( x − x 0 ) + ∘ ( ∣ x − x 0 ∣ ) f(x) = f(x_0)+\nabla ^ T f(x_0)(x-x_0)+\circ(|x-x_0|) f(x)=f(x0)+∇Tf(x0)(x−x0)+∘(∣x−x0∣)
当x在 x 0 x_0 x0的邻域内,则可以将高阶无穷小忽略,得到:
f ( x ) − f ( x 0 ) ≈ ∇ T f ( x 0 ) ( x − x 0 ) f(x)-f(x_0)\approx \nabla^T f(x_0)(x-x_0) f(x)−f(x0)≈∇Tf(x0)(x−x0)
因为目的是从 f ( x 0 ) f(x_0) f(x0)找更小的f(x),所以 f ( x ) − f ( x 0 ) f(x)-f(x_0) f(x)−f(x0)小于等于0,即: ∇ T f ( x 0 ) ( x − x 0 ) \nabla^T f(x_0)(x-x_0) ∇Tf(x0)(x−x0)小于等于0;
解释一:凑法
∇ T f ( x 0 ) ( x − x 0 ) \nabla^T f(x_0) (x-x_0) ∇Tf(x0)(x−x0)可以看作是两个向量做内积,我们可以令 x − x 0 = − ∇ T f ( x 0 ) x-x_0= -\nabla^T f(x_0) x−x0=−∇Tf(x0),
代入得:
− ∇ T f ( x 0 ) ∇ T f ( x 0 ) -\nabla^T f(x_0) \nabla^T f(x_0) −∇Tf(x0)∇Tf(x0),其一定小于等于0,故 x = x 0 − ∇ f ( x 0 ) x = x_0-\nabla f(x_0) x=x0−∇f(x0)
解释二:向量内积
根据向量得内积公式,得: X T Y = ∣ ∣ X ∣ ∣ ∣ ∣ Y ∣ ∣ c o s θ X^TY = ||X|| ||Y|| cos\theta XTY=∣∣X∣∣∣∣Y∣∣cosθ
当 θ \theta θ为钝角时即可保证函数是往降低得方向来进行移动,当取负方向时,即是梯度下降的最快的方向。
梯度下降优化的基本理论是采用迭代法近似求解,逐步求精。
在近似求解的过程中,我们把无穷小量忽略掉了,而忽略了无穷小量的前提是x与 x 0 x_0 x0离得充分近,才能忽略泰勒展开中一次以上的项。而步长的作用就是和 x 0 x_0 x0的梯度相乘后,控制让x与 x 0 x_0 x0离得充分近。
牛顿法的基本方法仍然是采用迭代法近似求解,逐步求精。和梯度下降法不同的是,其直接找
∇ f ( x ) \nabla f(x) ∇f(x)等于0,采用迭代法向着梯度为0的点靠近。
多元函数的泰勒展开公式展开到二阶得到:
f ( x ) = f ( x 0 ) + ∇ T f ( x 0 ) ( x − x 0 ) + 1 2 ( x − x 0 ) T H ( x − x 0 ) + ∘ ( ∣ x − x 0 ∣ 2 ) f(x) = f(x_0)+\nabla ^ T f(x_0)(x-x_0) + \frac{1}{2}\quad(x-x_0)^TH(x-x_0) + \circ(|x-x_0|^2) f(x)=f(x0)+∇Tf(x0)(x−x0)+21(x−x0)TH(x−x0)+∘(∣x−x0∣2)
如果x在 x 0 x_0 x0的邻域内,可以将无穷小给忽略掉,得到:
f ( x ) ≈ f ( x 0 ) + ∇ T f ( x 0 ) ( x − x 0 ) + 1 2 ( x − x 0 ) T H ( x − x 0 ) f(x)\approx f(x_0)+\nabla^T f(x_0)(x-x_0)+\frac{1}{2}\quad(x-x_0)^TH(x-x_0) f(x)≈f(x0)+∇Tf(x0)(x−x0)+21(x−x0)TH(x−x0)
在这里我们为了凑出 ∇ f ( x ) \nabla f(x) ∇f(x),对两边的x分别求梯度,由两个推导公式推得:
∇ W T x = W \nabla W^Tx = W ∇WTx=W
∇ X T A X = ( A + A T ) X \nabla X^T A X = (A+A^T)X ∇XTAX=(A+AT)X
∇ f ( x ) ≈ 0 + ∇ f ( x 0 ) + H ( x − x 0 ) \nabla f(x)\approx 0+\nabla f(x_0)+H(x-x_0) ∇f(x)≈0+∇f(x0)+H(x−x0)
令梯度值为0,得:
∇ f ( x 0 ) + H ( x − x 0 ) = 0 \nabla f(x_0)+H(x-x_0) = 0 ∇f(x0)+H(x−x0)=0
因为 f ( x 0 ) f(x_0) f(x0)已知,记为g,那么: H ( x − x 0 ) = − g H(x-x_0)=-g H(x−x0)=−g,如果海森矩阵可逆,则两边同时乘上 H − 1 H^{-1} H−1,有:
X − X 0 = − H − 1 g X-X_0 = -H^{-1}g X−X0=−H−1g
X = X 0 − H − 1 g X = X_0 - H^{-1}g X=X0−H−1g
同样,因为X需要在 X 0 X_0 X0的邻域内,所以也给加上步长,得:
x k + 1 = x k − γ H k − 1 g k x_{k+1} = x_k-\gamma H_k^{-1}g_k xk+1=xk−γHk−1gk
所以,当目标函数为二次函数时,海森矩阵为一个数,当步长为1时,可以直接得到最优的X
在令 ∇ f ( x ) = 0 \nabla f(x)=0 ∇f(x)=0后,需要对两边化简得出X时;