在本節中,我們將討論優化與深度學習之間的關系以及在深度學習中使用優化的挑戰。對于一個深度學習問題,我們通常會先定義一個 損失函數。一旦我們有了損失函數,我們就可以使用優化算法來嘗試最小化損失。在優化中,損失函數通常被稱為優化問題的目標函數。按照傳統和約定,大多數優化算法都與最小化有關。如果我們需要最大化目標,有一個簡單的解決方案:只需翻轉目標上的標志。
12.1.1。優化目標
盡管優化為深度學習提供了一種最小化損失函數的方法,但從本質上講,優化和深度學習的目標是根本不同的。前者主要關注最小化目標,而后者關注在給定有限數據量的情況下找到合適的模型。在 第 3.6 節中,我們詳細討論了這兩個目標之間的區別。例如,訓練誤差和泛化誤差通常不同:由于優化算法的目標函數通常是基于訓練數據集的損失函數,因此優化的目標是減少訓練誤差。然而,深度學習(或更廣泛地說,統計推斷)的目標是減少泛化誤差。為了完成后者,除了使用優化算法來減少訓練誤差外,我們還需要注意過度擬合。
%matplotlib inline
import numpy as np
import tensorflow as tf
from mpl_toolkits import mplot3d
from d2l import tensorflow as d2l
為了說明上述不同的目標,讓我們考慮經驗風險和風險。如第 4.7.3.1 節所述 ,經驗風險是訓練數據集的平均損失,而風險是整個數據群的預期損失。下面我們定義兩個函數:風險函數f
和經驗風險函數g
。假設我們只有有限數量的訓練數據。結果,這里g
不如 平滑f
。
def f(x):
return x * torch.cos(np.pi * x)
def g(x):
return f(x) + 0.2 * torch.cos(5 * np.pi * x)
下圖說明了訓練數據集上經驗風險的最小值可能與風險的最小值(泛化誤差)位于不同的位置。
def annotate(text, xy, xytext): #@save
d2l.plt.gca().annotate(text, xy=xy, xytext=xytext,
arrowprops=dict(arrowstyle='->'))
x = torch.arange(0.5, 1.5, 0.01)
d2l.set_figsize((4.5, 2.5))
d2l.plot(x, [f(x), g(x)], 'x', 'risk')
annotate('min of\nempirical risk', (1.0, -1.2), (0.5, -1.1))
annotate('min of risk', (1.1, -1.05), (0.95, -0.5))
def annotate(text, xy, xytext): #@save
d2l.plt.gca().annotate(text, xy=xy, xytext=xytext,
arrowprops=dict(arrowstyle='->'))
x = np.arange(0.5, 1.5, 0.01)
d2l.set_figsize((4.5, 2.5))
d2l.plot(x, [f(x), g(x)], 'x', 'risk')
annotate('min of\nempirical risk', (1.0, -1.2), (0.5, -1.1))
annotate('min of risk', (1.1, -1.05), (0.95, -0.5))
def annotate(text, xy, xytext): #@save
d2l.plt.gca().annotate(text, xy=xy, xytext=xytext,
arrowprops=dict(arrowstyle='->'))
x = tf.range(0.5, 1.5, 0.01)
d2l.set_figsize((4.5, 2.5))
d2l.plot(x, [f(x), g(x)], 'x', 'risk')
annotate('min of\nempirical risk', (1.0, -1.2), (0.5, -1.1))
annotate('min of risk', (1.1, -1.05), (0.95, -0.5))
12.1.2。深度學習中的優化挑戰
在本章中,我們將特別關注優化算法在最小化目標函數方面的性能,而不是模型的泛化誤差。在 3.1 節中,我們區分了優化問題中的解析解和數值解。在深度學習中,大多數目標函數都很復雜,沒有解析解。相反,我們必須使用數值優化算法。本章的優化算法都屬于這一類。
深度學習優化有很多挑戰。一些最令人煩惱的是局部最小值、鞍點和梯度消失。讓我們來看看它們。
12.1.2.1。局部最小值
對于任何目標函數f(x), 如果值f(x)在 x小于的值f(x)在附近的任何其他點x, 然后f(x)可能是局部最小值。如果值f(x)在x是整個域內目標函數的最小值,則f(x)是全局最小值。
例如,給定函數
我們可以逼近這個函數的局部最小值和全局最小值。
x = np.arange(-1.0, 2.0, 0.01)
d2l.plot(x, [f(x), ], 'x', 'f(x)')
annotate('local minimum', (-0.3, -0.25), (-0.77, -1.0))
annotate('global minimum',
評論
查看更多