动手学深度学习:7.2 梯度下降和随机梯度下降

7.2 梯度下降和随机梯度下降

在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。

7.2.1 一维梯度下降

我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导的函数f:RRf:R→R f: \mathbb{R} \rightarrow \mathbb{R}x的值较接近最优解。

def gd(eta):
    x = 10
    results = [x]
    for i in range(10):
        x -= eta * 2 * x  # f(x) = x * x的导数为f'(x) = 2 * x
        results.append(x)
    print('epoch 10, x:', x)
    return results

res = gd(0.2)Copy to clipboardErrorCopied

输出:

epoch 10, x: 0.06046617599999997Copy to clipboardErrorCopied

下面将绘制出自变量xx xx的迭代轨迹。

def show_trace(res):
n = max(abs(min(res)), abs(max(res)), 10)
f_line = np.arange(-n, n, 0.1)
d2l.set_figsize()
d2l.plt.plot(f_line, [x x for x in f_line])
d2l.plt.plot(res, [x x for x in res], ‘-o’)
d2l.plt.xlabel(‘x’)
d2l.plt.ylabel(‘f(x)’)

show_trace(res)Copy to clipboardErrorCopied


7.2.2 学习率

上述梯度下降算法中的正数ηη \etax的值依然与最优解存在较大偏差。

show_trace(gd(0.05))Copy to clipboardErrorCopied

输出:

epoch 10, x: 3.4867844009999995Copy to clipboardErrorCopied

如果使用过大的学习率,ηf(x)∣ηf′(x)∣ \left|\eta f'(x)\right|x=0并逐渐发散。

show_trace(gd(1.1))Copy to clipboardErrorCopied

输出:

epoch 10, x: 61.917364224000096Copy to clipboardErrorCopied

7.2.3 多维梯度下降

在了解了一维梯度下降之后,我们再考虑一种更广义的情况:目标函数的输入为向量,输出为标量。假设目标函数f:RdRf:Rd→R f: \mathbb{R}^d \rightarrow \mathbb{R}u来最小化方向导数

你可能感兴趣的:(#,深度学习)