深度学习系列一——优化问题

1、优化问题简介

深度学习(神经网络)的优化是指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,包括模型选择以及参数学习等。

深度神经网络是一个高度非线性的模型,其风险函数是一个非凸函数,(因此风险最小化即深度学习的优化问题是非凸优化问题。)找到全局最优解比较困难。绝大多数深度学习中的目标函数都很复杂。因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法(eg:SGD)找到近似解。 这类优化算法一般通过不断迭代更新解的数值来找到近似解。

2、 存在的挑战

优化问题中的两个挑战:局部最小值和鞍点。这两种情况都会造成梯度接近或变成零,从而使得网络很难继续优化。

  • 低维空间的非凸优化问题:主要是存在一些局部最优点。 采用梯度下降方法时,不合适的参数初始化会导致陷入局部最优点,因此主要的难点是如何选择初始化参数和逃离局部最优点。
  • 高维空间中非凸优化的难点:并不在于如何逃离局部最优点,而是如何逃离鞍点。鞍点(saddle point)是梯度为0,但是在一些维度上是最高点,在另一些维度上是最低点。

(a)、局部最小值

绝大多数深度学习的目标函数有若干局部最优值。当一个优化问题的数值解在局部最优解附近时,由于梯度接近或变成零,最终得到的数值解可能只令目标函数局部最小化而非全局最小化。

例子:
对于目标函数 f ( x ) f(x) f(x),如果 f ( x ) f(x) f(x) x x x上的值比在 x x x邻近的其他点的值更小,那么 f ( x ) f(x) f(x)可能是一个局部最小值(local minimum)。如果 f ( x ) f(x) f(x) x x x上的值是目标函数在整个定义域上的最小值,那么 f ( x ) f(x) f(x)是全局最小值(global minimum)。

举个例子,给定函数

f ( x ) = x ⋅ cos ( π x ) , − 1.0 ≤ x ≤ 2.0 , f(x) = x \cdot \text{cos}(\pi x), \qquad -1.0 \leq x \leq 2.0, f(x)=xcos(πx),1.0x2.0,

我们可以大致找出该函数的局部最小值和全局最小值的位置。需要注意的是,图中箭头所指示的只是大致位置。
在这里插入图片描述

【代码实现】

%matplotlib inline
import sys
sys.path.append('E:\d2lzh_pytorch')#加上d2lzh_pytorch的路径
import d2lzh_pytorch 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)');

(b)、鞍点

鞍点(saddle point)是梯度为0,但是在一些维度上是最高点,在另一些维度上是最低点。

在这里插入图片描述

【代码实现】
图一:

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 = 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)');
  • 鞍点导致梯度接近或变成零,从而导致梯度消失。
  • 在高维空间中,大部分驻点(梯度为0的点)都是鞍点
  • 梯度接近或变成零可能是由于当前解在局部最优解附近在鞍点附近所造成的。由于大多数深度学习模型参数都是高维的,因此,目标函数的鞍点往往比局部最小值更常见。
  • 基于梯度下降的优化方法会在鞍点附近接近于停滞,很难从这些鞍点中逃离。通过在梯度下降方向上引入随机性,可以有效的逃离鞍点。因此,随机梯度下降对于高维空间中的非凸优化问题非常重要。

3、优化的实质

在这里插入图片描述

从上面的分析来看,神经网络的优化实质是找到一个局部最小值

4、 神经网络优化的改善方法

改善神经网络优化的目标是找到更好的局部最小值和提高优化效率。目前,比较有效的经验性改善方法通常分为以下几个方面:

1)使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性,比如动态学习率调整、梯度估计修正等。

2)使用更好的参数初始化方法、数据预处理方法来提高优化效率。

3)修改网络结构来得到更好的优化地形,比如使用ReLu激活函数、残差连接、逐层归一化等。

4)使用更好的超参数优化方法。

参考资料:

神经网络与深度学习

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
yolo-v5系列算法是一种基于深度学习的目标检测算法,其通过将输入图像划分为一系列网格单元,并对每个单元预测出目标的类别和边界框,从而实现对图像中目标的检测和定位。 模型移植是指将训练好的yolo-v5模型从一个平台或框架移植到另一个平台或框架的过程。在实际应用中,由于硬件设备或软件平台的限制,往往需要将模型移植到适用于特定平台的框架上,以便进行推理和应用。 模型移植的主要步骤包括模型导出、模型转换和模型部署。首先,需要将yolo-v5模型导出为通用的模型文件,例如ONNX或TensorFlow格式。然后,利用模型转换工具将导出的模型文件转换为目标平台所支持的模型格式,如Tensorflow Lite或Caffe等。最后,将转换后的模型部署到目标平台上,以便进行推理和应用。 模型移植的关键问题是确保模型在移植过程中的准确性和效率。为了保持模型的准确性,需要注意模型转换过程中参数的正确性和一致性。同时,还需要针对目标平台的硬件设备和软件框架进行优化,以提高模型在目标平台上的推理速度和性能。 总而言之,yolo-v5系列算法的模型移植是将训练好的模型从一个平台移植到另一个平台的过程。通过合理的模型导出、转换和部署步骤,可以将yolo-v5模型应用于不同的硬件设备和软件平台,以实现目标检测和定位的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值