当前位置: 首页 > news >正文

卷积神经网络基础(八)

六、与学习相关的技巧

下面我们会进入全新的一章,主要学习与学习相关的技巧。

本章主要介绍神经网络学习过程的重要观点,主题涉及寻找最优权重参数的最优化方法、权重参数的初始值、超参数的设定方法等。为了应对过拟合,本章还会介绍权值衰减、Dropout等正则化方法,并进行实现。最后会介绍一些研究实验中Batch Normalization方法进行简单介绍。

6.1 参数更新

神经网络学习的目的就是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称作最优化(optimization)。然而,这个问题极其复杂,无法轻易找到最优解,并且神经网络中参数数量庞大,最优化问题更加复杂。

在前几章的学习中,我们使用参数梯度(导数)作为线索。使用参数梯度,沿梯度方向更新参数并重复该步骤,逐渐靠近最优参数,这个过程称为随机梯度下降法(stochastic gradient descent),简称SGD。这个方法简单,但也算聪明,只不过根据不同问题也有更好地方法。

6.1.1 探险家故事

SGD法就好比探险家故事。

这个探险家在广袤的干旱地带旅行,坚持寻找山谷。他的目的就是要找到最深的谷底,但是他给自己制定了两个规则:1、不看地图2、把眼睛蒙上。 因此他什么也看不见,那要如何寻找呢?

这就是在寻找最优化参数时的情况,我们要在没有地图且不睁眼的情况下寻找最深的谷底。尽管看不到周围,但是我们能够知道当前所在位置的坡度,(即通过脚底感受地面的倾斜情况)。于是我们可以朝着当前所在位置坡度最大的方向前进,这就是SGD的策略。我们只要重复这个策略,总会到达谷底。

6.1.2 SGD

接下来我们复习一下SGD:

W \leftarrow W -\eta \frac{\partial L}{\partial W}

将需要更新的权重参数记为W,损失函数关于W的梯度记为\frac{\partial L}{\partial W},η表示学习率。实际上会先取好一个值如0.01、0.0001等。⬅表示用右边的值更新左边的值。SGD是一个朝着梯度方向只前进一定距离的简单方法,现在我们将其以python实现。

Class SGD:def __init__(self, lr=0.01):self.lr = lrdef update(self, params, grads):for key in params,keys():params[key] -= self.lr * grads[key]

lr表示学习率(learning rate),这个变量会保存为实例变量。此外类中还定义了update方法,这个方法会被反复调用。参数params和grads是字典型变量,按params['W1']、grads['W1']的形式分别保存权重参数和他们的梯度。有了类的定义,我们就可以在神经网络中实现它:

network = TwoLayerNet()
optimizer = SGD()for i in range(10000):...x_batch, t_batch = get_mini_batch(...)grads = network.gradient(x_batch, t_batch)params = network.paramsoptimizer.update(params, grads)...

参数的更新由optimizer实现,即SGD承担这个角色。我们这里仅需要将参数和梯度信息传递给optimizer。

像这样单独实现最优化的类,功能模块变得简单。后面我们会实现另一个最优化方法Momentum,同样具有update方法。这样只用将optimizer = SGD()更换为optimizer = Momentum(),就可以从SGD切换回Momentum。

6.1.3 SGD缺点

SGD实现较为简单,但执行起来存在一定的缺陷。比如考虑一个实际问题,求解下面这个函数的最小值问题:

f(x,y)=\frac{1}{20}x^{2}++y^{2}

这个函数表示的是向x轴方向延伸的碗状函数,其等高线也是呈向x轴方向延伸的椭圆状。

现在我们来看一下它的梯度,用图表示就是:

这个梯度的特征是,y轴方向上大,x轴方向上小。换句话说, 就是y轴方向的坡度大,而x轴方向的坡度小。这里需要注意的是,虽然式 (6.2)的最小值在(x,y)=(0,0)处,但是图6-2中的梯度在很多地方并没有指向(0,0)。

我们来尝试对图6-1这种形状的函数应用SGD。从(x,y)=(−7.0,2.0)处 (初始值)开始搜索,结果如图6-3所示。 在图6-3中,SGD呈“之”字形移动。这是一个相当低效的路径。也就是说, SGD的缺点是,如果函数的形状非均向(anisotropic),比如呈延伸状,搜索 的路径就会非常低效。因此,我们需要比单纯朝梯度方向前进的SGD更聪明的方法。SGD低效的根本原因是,梯度的方向并没有指向最小值的方向。

http://www.xdnf.cn/news/339913.html

相关文章:

  • (leetcode) 力扣100 7.接雨水(两种非官解,三种官解,对官解进一步解释)
  • MCP vs Function Call:AI交互的USB-C革命
  • Amazon Redshift 使用场景解析与最佳实践
  • 快速上手Pytorch Lighting框架 | 深度学习入门
  • 华为HCIP-AI认证考试版本更新通知
  • 自定义Widget开发:自定义布局实现
  • Redis 重回开源怀抱:开源精神的回归与未来展望
  • 终极终端体验:Warp 使用完全指南
  • 事务(transaction)-中
  • Opencv进阶操作:图像拼接
  • 【金仓数据库征文】金仓数据库:创新驱动,引领数据库行业新未来
  • 电容知识小结
  • LeetCode第284题 - 窥视迭代器
  • 立式筒仓式发酵槽实验台试验装置
  • Lua从字符串动态构建函数
  • LeetCode 热题 100 238. 除自身以外数组的乘积
  • IC ATE集成电路测试学习——PLL测试(一)
  • Redis-商品缓存
  • pycharm无法导入相对路径下其它文件
  • 性能远超SAM系模型,苏黎世大学等开发通用3D血管分割基础模型
  • 【造包工具】【Xcap】精讲Xcap构造分片包(IPv4、ipv6、4G\5G等pcap均可),图解超赞超详细!!!
  • 开发者如何优雅应对HTTPS抓包难题
  • 智能量化策略开发全流程:数据准备,因子计算,因子分析,模型训练,策略构建(附python代码)
  • 硬件选型:工控机的选择要素
  • 00 Ansible简介和安装
  • ubuntu 22.04 换源
  • 【Linux】FreeRTOS与Linux:实时与通用的终极对比
  • LeetCode热题100--54.螺旋矩阵--中等
  • Hutool的`BeanUtil.toBean`方法详解
  • Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚