在本節(jié)中,我們將討論優(yōu)化與深度學(xué)習(xí)之間的關(guān)系以及在深度學(xué)習(xí)中使用優(yōu)化的挑戰(zhàn)。對于一個深度學(xué)習(xí)問題,我們通常會先定義一個 損失函數(shù)。一旦我們有了損失函數(shù),我們就可以使用優(yōu)化算法來嘗試最小化損失。在優(yōu)化中,損失函數(shù)通常被稱為優(yōu)化問題的目標(biāo)函數(shù)。按照傳統(tǒng)和約定,大多數(shù)優(yōu)化算法都與最小化有關(guān)。如果我們需要最大化目標(biāo),有一個簡單的解決方案:只需翻轉(zhuǎn)目標(biāo)上的標(biāo)志。
12.1.1。優(yōu)化目標(biāo)
盡管優(yōu)化為深度學(xué)習(xí)提供了一種最小化損失函數(shù)的方法,但從本質(zhì)上講,優(yōu)化和深度學(xué)習(xí)的目標(biāo)是根本不同的。前者主要關(guān)注最小化目標(biāo),而后者關(guān)注在給定有限數(shù)據(jù)量的情況下找到合適的模型。在 第 3.6 節(jié)中,我們詳細(xì)討論了這兩個目標(biāo)之間的區(qū)別。例如,訓(xùn)練誤差和泛化誤差通常不同:由于優(yōu)化算法的目標(biāo)函數(shù)通常是基于訓(xùn)練數(shù)據(jù)集的損失函數(shù),因此優(yōu)化的目標(biāo)是減少訓(xùn)練誤差。然而,深度學(xué)習(xí)(或更廣泛地說,統(tǒng)計推斷)的目標(biāo)是減少泛化誤差。為了完成后者,除了使用優(yōu)化算法來減少訓(xùn)練誤差外,我們還需要注意過度擬合。
%matplotlib inline
import numpy as np
import tensorflow as tf
from mpl_toolkits import mplot3d
from d2l import tensorflow as d2l
為了說明上述不同的目標(biāo),讓我們考慮經(jīng)驗風(fēng)險和風(fēng)險。如第 4.7.3.1 節(jié)所述 ,經(jīng)驗風(fēng)險是訓(xùn)練數(shù)據(jù)集的平均損失,而風(fēng)險是整個數(shù)據(jù)群的預(yù)期損失。下面我們定義兩個函數(shù):風(fēng)險函數(shù)f
和經(jīng)驗風(fēng)險函數(shù)g
。假設(shè)我們只有有限數(shù)量的訓(xùn)練數(shù)據(jù)。結(jié)果,這里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)
下圖說明了訓(xùn)練數(shù)據(jù)集上經(jīng)驗風(fēng)險的最小值可能與風(fēng)險的最小值(泛化誤差)位于不同的位置。
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。深度學(xué)習(xí)中的優(yōu)化挑戰(zhàn)
在本章中,我們將特別關(guān)注優(yōu)化算法在最小化目標(biāo)函數(shù)方面的性能,而不是模型的泛化誤差。在 3.1 節(jié)中,我們區(qū)分了優(yōu)化問題中的解析解和數(shù)值解。在深度學(xué)習(xí)中,大多數(shù)目標(biāo)函數(shù)都很復(fù)雜,沒有解析解。相反,我們必須使用數(shù)值優(yōu)化算法。本章的優(yōu)化算法都屬于這一類。
深度學(xué)習(xí)優(yōu)化有很多挑戰(zhàn)。一些最令人煩惱的是局部最小值、鞍點和梯度消失。讓我們來看看它們。
12.1.2.1。局部最小值
對于任何目標(biāo)函數(shù)f(x), 如果值f(x)在 x小于的值f(x)在附近的任何其他點x, 然后f(x)可能是局部最小值。如果值f(x)在x是整個域內(nèi)目標(biāo)函數(shù)的最小值,則f(x)是全局最小值。
例如,給定函數(shù)
我們可以逼近這個函數(shù)的局部最小值和全局最小值。
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',
評論