深度学习中优化的两个挑战:局部最小值和鞍点
(1)局部最小值 :对于目标函数f(x),如果存在f(x)的值比在x邻近的其他值更小,那么f(x)可能是一个局部最小值(local minimum)
举个例子,给定函数: f ( x ) = x ⋅ c o s ( p i ∗ x ) f(x)=x \cdot cos(pi*x) f(x)=x⋅cos(pi∗x)
%matplotlib inline
import sys
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
import torch
def f(x):
return x*np.cos(np.pi *x)
x=np.arange(-1.0,2.0,0.1) #x的范围和步长
figure=plt.figure(figsize=(8,4))#创建图表窗口并设置大小
plt.plot(x,f(x))
plt.title('f(x) graph') #图名
plt.xlabel('x')
plt.ylabel('f(x)')
# annotate an important value
plt.annotate("local minimum", (-0.3,-0.25), xytext=(-0.62, -1.0),
fontsize=12,arrowprops=dict(arrowstyle='->'))
plt.annotate("global minimum", (1.1,-0.95), xytext=(0.74, 1.0),
fontsize=12,arrowprops=dict(arrowstyle='->'))
Text(0.74,1,'global minimum')
深度学习模型的目标函数可能存在若干局部最优值,当优化问题的数值解在局部最优解附近时,由于目标函数的有关解的梯度接近或者变为零,最终迭代求得的数值解可能只是灵目标函数最小化而非全局最小化。
解决局部最小值的基本方案 (PS:后面优化方法会细讲)
(1)使用随机梯度下降代替梯度下降
(2)设置冲量
(3)使用不同的初始权值进行训练
(2)鞍点(saddle point)
举个例子,给定函数: f ( x ) = x 3 f(x)=x^3 f(x)=x3
x1=np.arange(-2,2.0,0.1) #x的范围和步长
figure1=plt.figure(figsize=(8,4))#创建图表窗口并设置大小
plt.plot(x1,x1**3)
plt.title('$ f(x)=x^3 $ graph') #图名
plt.xlabel('x')
plt.ylabel('f(x)')
# annotate an important value
plt.annotate("saddle point", (0,0.2), xytext=(-0.36, 4.0),
fontsize=12,arrowprops=dict(arrowstyle='->'))
Text(-0.36,4,'saddle point')
再举个二维的例子: f ( x , y ) = x 2 − y 2 f(x,y)=x^2-y^2 f(x,y)=x2−y2
#线框图
x,y=np.mgrid[-1: 1: 31j,-1: 1: 31j]
z=x**2-y**2
fig =plt.figure()
ax