1. 優化在深度學習中的挑戰
我們在博客《機器學習中解析解和數值解的區別》中對優化問題的解析解和數值解做了區分。深度學習中絕大多數目標函數都很複雜。因此,很多優化問題並不存在解析解,而需要使用基於數值方法的優化算法找到近似解,即數值解。
這裏討論的優化算法都是這類基於數值方法的算法。爲了求得最小化目標函數的數值解,我們將通過優化算法有限次迭代模型參數來儘可能降低損失函數的值。
優化在深度學習中有很多挑戰。下面描述了其中的兩個挑戰,即局部最小值和鞍點。
1.1 局部最小值
對於目標函數 𝑓(𝑥),如果 𝑓(𝑥) 在 𝑥 上的值比在 𝑥 鄰近的其他點的值更小,那麼 𝑓(𝑥)可能是一個局部最小值(local minimum)。如果 𝑓(𝑥) 在 𝑥 上的值是目標函數在整個定義域上的最小值,那麼 𝑓(𝑥)是全局最小值(global minimum)。
舉個例子,給定函數我們可以大致找出該函數的局部最小值和全局最小值的位置。需要注意的是,圖中箭頭所指示的只是大致位置。
%matplotlib inline
import d2lzh as d2l
from mpl_toolkits import mplot3d
import numpy as np
def f(x):
return x * np.cos(np.pi * x)
d2l.set_figsize((4.5, 2.5))
x = np.arange(-1.0, 2.0, 0.1)
fig, = d2l.plt.plot(x, f(x)) # 逗號表示只取返回列表中的第一個元素
fig.axes.annotate('local minimum', xy=(-0.3, -0.25), xytext=(-0.77, -1.0),
arrowprops=dict(arrowstyle='->'))
fig.axes.annotate('global minimum', xy=(1.1, -0.95), xytext=(0.6, 0.8),
arrowprops=dict(arrowstyle='->'))
d2l.plt.xlabel('x')
d2l.plt.ylabel('f(x)');
深度學習模型的目標函數可能有若干局部最優值。當一個優化問題的數值解在局部最優解附近時,由於目標函數有關解的梯度接近或變成零,最終迭代求得的數值解可能只令目標函數局部最小化而非全局最小化。
1.2 鞍點
剛剛我們提到,梯度接近或變成零可能是由於當前解在局部最優解附近造成的。事實上,另一種可能性是當前解在鞍點(saddle point)附近。
舉個例子,給定函數我們可以找出該函數的鞍點位置。
x = np.arange(-2.0, 2.0, 0.1)
fig, = d2l.plt.plot(x, x**3)
fig.axes.annotate('saddle point', xy=(0, -0.2), xytext=(-0.52, -5.0),
arrowprops=dict(arrowstyle='->'))
d2l.plt.xlabel('x')
d2l.plt.ylabel('f(x)');
再舉個定義在二維空間的函數的例子,例如:我們可以找出該函數的鞍點位置。也許你已經發現了,該函數看起來像一個馬鞍,而鞍點恰好是馬鞍上可坐區域的中心。
x, y = np.mgrid[-1: 1: 31j, -1: 1: 31j]
z = x**2 - y**2
ax = d2l.plt.figure().add_subplot(111, projection='3d')
ax.plot_wireframe(x, y, z, **{'rstride': 2, 'cstride': 2})
ax.plot([0], [0], [0], 'rx')
ticks = [-1, 0, 1]
d2l.plt.xticks(ticks)
d2l.plt.yticks(ticks)
ax.set_zticks(ticks)
d2l.plt.xlabel('x')
d2l.plt.ylabel('y');
在圖的鞍點位置,目標函數在 𝑥x 軸方向上是局部最小值,但在 𝑦y 軸方向上是局部最大值。
假設一個函數的輸入爲 𝑘k 維向量,輸出爲標量,那麼它的海森矩陣(Hessian matrix)有 𝑘k 個特徵值。該函數在梯度爲0的位置上可能是局部最小值、局部最大值或者鞍點。
- 當函數的海森矩陣在梯度爲零的位置上的特徵值全爲正時,該函數得到局部最小值。
- 當函數的海森矩陣在梯度爲零的位置上的特徵值全爲負時,該函數得到局部最大值。
- 當函數的海森矩陣在梯度爲零的位置上的特徵值有正有負時,該函數得到鞍點。
隨機矩陣理論告訴我們,對於一個大的高斯隨機矩陣來說,任一特徵值是正或者是負的概率都是0.5 。那麼,以上第一種情況的概率爲 。由於深度學習模型參數通常都是高維的( 𝑘 很大),目標函數的鞍點通常比局部最小值更常見。
在深度學習中,雖然找到目標函數的全局最優解很難,但這並非必要。我們將逐一介紹深度學習中常用的優化算法,它們在很多實際問題中都能夠訓練出十分有效的深度學習模型。
1.3 小結
- 由於優化算法的目標函數通常是一個基於訓練數據集的損失函數,優化的目標在於降低訓練誤差。
- 由於深度學習模型參數通常都是高維的,目標函數的鞍點通常比局部最小值更常見。
參考資料:《動手學深度學習》