(一)梯度下降算法
深度学习的核心精髓就是梯度下降算法。在某些方面深度学习表现出来的结果可以接近人的智力,就是因为它可以求解出一个巨大的函数,而这个函数的用来求解的方法就是梯度下降算法。
下面我们来看一个函数:
l
o
s
s
=
x
2
∗
s
i
n
(
x
)
loss = x^2 * sin(x)
loss=x2∗sin(x)
令
f
(
x
)
=
x
2
∗
s
i
n
(
x
)
f(x) = x^2 * sin(x)
f(x)=x2∗sin(x)
所以
f
′
(
x
)
=
2
x
s
i
n
(
x
)
+
x
2
c
o
s
(
x
)
f'(x) = 2xsin(x) + x^2cos(x)
f′(x)=2xsin(x)+x2cos(x)
这样我们就能计算在当前位置
x
x
x的导数值。通过高等数学的学习我们知道梯度是一个矢量,但是对于只有一个变量的情况,导数值等于梯度的模,所以此时的梯度值等于导数值。我们令
Δ
x
\Delta x
Δx为
x
x
x的梯度所以我们可以通过公式
x
′
=
x
−
l
r
Δ
x
x' = x - lr\Delta x
x′=x−lrΔx
对
x
x
x迭代更新去让
x
x
x不断地逼近极小值(注意这里是极小值不是最小值),具体如下图:
从图中可见 x x x会不断向右增大到极小值点后停止。这里的 l r lr lr是学习速率(learning rate),我们可以通过调节学习速率改变 x x x的变化速率。假如 l r lr lr 过大那么就会出现下图的情况:
由于 x x x每一步移动过大,这时它会在极小值点周围发生比较大的左右抖动,而无法逼近极小值。
总的来说,梯度下降算法就是通过利用当前位置的梯度信息去不断比较我们所想要得到的那个最优解。
利用当前位置的梯度信息去不断比较我们所想要得到的那个最优解。