对于深度学习问题,通常是先定义损失函数,获得损失之后在通过优化函数尽量减小损失,大多数的优化算法都是涉及最小化。要最大化也很简单只需要在目标上取反即可。
1 优化和估算
优化和深度学习本质上目标是不同的。优化的目的是最小化损失,而深度学习是根据提供的数据找到最佳模型。训练误差和泛化误差通常是不同的:优化算法的目标是损失函数,因此其优化的目的是减少训练误差。而深度学习的目的是减少泛化误差。为了实现后者除了优化函数还需要注意过拟合问题。
from d2l import mxnet as d2l
from mxnet import np, npx
import plotly.express as px
import plotly.graph_objs as go
import pandas as pd
npx.set_np()
这里定义两个函数, 期望函数 f f f 以及经验函数 g g g。这里 g g g 不如 f f f平滑因为我们只有有限的数据。
def f(x):
return x*np.cos(np.pi*x)
def g(x):
return f(x) + 0.2 * np.cos(5*np.pi*x)
训练误差的最小值和预测误差的最小值不在一个同一个位置。
x = np.arange(0.5, 1.5, 0.01)
df = pd.DataFrame([f(x).tolist(), g(x).tolist()], index=['expected', 'empirical'], columns=x.tolist()).T
def annotations_set():
return dict(
xref="x",
yref="y",
showarrow=True,
arrowhead=2,
arrowwidth=1.5,
arrowcolor="#636363",
bordercolor="#c7c7c7",
borderwidth=2,
bgcolor="#ff7f0e"
)
fig = px.line(df, width=600, height=380, labels={
'index':'x', 'value': 'rish'})
fig.add_annotation(x=1.1