函数的导数(derivative)描述了函数的变化率:
- 导数越大,表示函数增加的越快
- 导数越小,表示函数减少的越快
- 导数 = 0,对应函数的极值
对于一个误差函数(error function),我们期望找到误差函数最小的点,使得E(x)最小,那么,就要找到一个x的变化量
Δ
x
\Delta x
Δx,使得导数最小,这样,误差函数会按照最快的减少速度逼近最小值。当x的变化方向与导数方向180°相反时,函数减少的越快,越容易逼近最小值,即:
Δ
x
=
−
η
∗
E
′
(
x
)
,
这
里
η
是
一
个
正
的
小
微
常
数
\Delta x = -\eta*E'(x) ,这里 \eta是一个正的小微常数
Δx=−η∗E′(x),这里η是一个正的小微常数
根据
Δ
x
=
x
n
+
1
−
x
n
\Delta x = x_{n+1} - x_{n}
Δx=xn+1−xn所以
x
n
+
1
=
x
n
−
η
∗
E
′
(
x
n
)
x_{n+1}=x_{n}-\eta*E'(x_{n})
xn+1=xn−η∗E′(xn)
当求得x=xn处的导数时,可以通过上式获得下一个x的取值,使得误差函数E(x)向最小值逼近。
当函数的自变量由一个x,变为多个x0,x1,x2…xn,即X={x0,x1,x2…xn},函数的导数则变为偏导数
误差函数的变化,满足下面的公式:
Δ
E
=
∂
E
∂
x
0
∗
Δ
x
0
+
∂
E
∂
x
1
∗
Δ
x
1
.
.
.
+
∂
E
∂
x
n
∗
Δ
x
n
\Delta E = \frac{\partial{E}} {\partial{x_0}}*\Delta{x_0}+ \frac{\partial{E}} {\partial{x_1}}*\Delta{x_1}...+ \frac{\partial{E}} {\partial{x_n}}*\Delta{x_n}
ΔE=∂x0∂E∗Δx0+∂x1∂E∗Δx1...+∂xn∂E∗Δxn
Δ
E
=
{
∂
E
∂
x
0
,
∂
E
∂
x
1
.
.
.
∂
E
∂
x
n
}
⋅
{
Δ
x
0
,
Δ
x
1
.
.
.
Δ
x
n
}
\Delta E = \lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace \cdot \lbrace \Delta{x_0},\Delta{x_1}...\Delta{x_n}\rbrace
ΔE={∂x0∂E,∂x1∂E...∂xn∂E}⋅{Δx0,Δx1...Δxn}
其中
{
∂
E
∂
x
0
,
∂
E
∂
x
1
.
.
.
∂
E
∂
x
n
}
是
E
(
X
)
函
数
的
梯
度
G
r
a
d
i
e
n
t
\lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace 是E(X)函数的梯度Gradient
{∂x0∂E,∂x1∂E...∂xn∂E}是E(X)函数的梯度Gradient
欲使E(X)以最快的方式向最小值逼近,令
X
=
−
η
∗
{
∂
E
∂
x
0
,
∂
E
∂
x
1
.
.
.
∂
E
∂
x
n
}
X = -\eta* \lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace
X=−η∗{∂x0∂E,∂x1∂E...∂xn∂E}
X
=
−
η
∗
G
r
a
d
i
e
n
t
X = -\eta* Gradient
X=−η∗Gradient
根据上述公式,梯度下降算法的步骤为:
- 任意找到位置作为起点
- 计算该点的梯度
- 用该点的梯度更新所有自变量,获得下一个位置
- 重复2~3步,直到找到最小值为止
在神经网络视角下,η成为学习率,可以看做移动的步长,如何确定学习率,没有明确的标准,只能通过反复试验来寻找恰当的值