【第十四章】改进神经网络学习方式-权重初始化

news2024/11/30 12:44:52

当我们创建神经网络时,我们必须为初始权重和偏置做出选择。到目前为止,我们一直根据我在第一章中简要讨论过的一种方法来选择它们。提醒一下,那种方法是使用独立的高斯随机变量来选择权重和偏置,使它们的均值为0,标准差为1。虽然这种方法效果不错,但它相当随意,值得重新审视,看看我们是否能找到一种更好的方法来设置我们的初始权重和偏置,或许可以帮助我们的神经网络学习得更快。

事实证明,我们可以比使用归一化高斯更好地初始化。为了理解其中的原因,假设我们正在处理一个具有大量输入神经元 - 比如1000个 - 的网络。假设我们已经使用归一化高斯来初始化连接到第一个隐藏层的权重。现在我将专注于连接输入神经元和第一个隐藏层中的第一个神经元的权重,并忽略网络的其余部分。
在这里插入图片描述
为简单起见,假设我们试图使用一个训练输入 x,在这个输入中,一半的输入神经元是开启的,即设置为 1,另一半的输入神经元是关闭的,即设置为 0。后续的论证更一般地适用,但从这个特殊情况你也可以理解主要观点。让我们考虑我们隐藏神经元的加权和 z = ∑ j w j x j + b z = \sum_jw_j x_j+b z=jwjxj+b。这个总和中有 500 个项会消失,因为相应的输入 x j x_j xj 为零。因此,z 是一个总共由 501 个归一化高斯随机变量构成的和,其中包括 500 个权重项和 1 个额外的偏置项。因此,z 本身服从均值为零、标准差为 501 ≈ 22.4 \sqrt{501} \approx 22.4 501 22.4 的高斯分布,。也就是说,z 有一个非常宽的高斯分布,完全不是尖峰的。
在这里插入图片描述
特别是,我们可以从这张图中看出,|z| 很可能会非常大,即 z≫1 或 z≪−1。如果是这种情况,那么隐藏神经元的输出 σ(z) 将非常接近于 1 或 0。这意味着我们的隐藏神经元将饱和。而我们知道,当这种情况发生时,对权重进行微小的更改将只会导致隐藏神经元的激活产生极小的变化。这种微小变化的隐藏神经元激活,反过来几乎不会对网络中的其他神经元产生影响,我们将看到成比例地微小的成本函数变化。因此,当我们使用梯度下降算法时,这些权重将学习得非常缓慢。这与我们在本章早些时候讨论的问题类似,在该问题中,饱和在错误值上的输出神经元导致学习变慢。我们通过巧妙选择成本函数解决了早期的问题。不幸的是,虽然这对饱和的输出神经元有所帮助,但对于饱和的隐藏神经元的问题却毫无作用。

我一直在谈论输入到第一个隐藏层的权重。当然,类似的论点也适用于后续的隐藏层:如果后续隐藏层的权重使用标准化的高斯分布进行初始化,那么激活往往会非常接近于 0 或 1,学习将会进行得非常缓慢。

有没有办法我们可以选择更好的权重和偏差初始化,以避免这种饱和,从而避免学习速度变慢?假设我们有一个具有 n i n n_{in} nin 个输入权重的神经元。那么我们将使用均值为 0,标准差为 1 / n i n 1/\sqrt{n_{\rm in}} 1/nin 的高斯随机变量来初始化这些权重。也就是说,我们将缩小高斯分布,减少我们的神经元饱和的可能性。我们将继续选择偏差为均值为 0,标准差为 1 的高斯分布初始化偏置,稍后我将再谈到原因。通过这些选择,加权和 z = ∑ j w j x j + b z = \sum_j w_j x_j + b z=jwjxj+b 仍然是均值为 0 的高斯随机变量,但它的峰值要比以前明显得多。假设,正如我们之前所做的那样,500 个输入为零,500 个输入为 1。那么很容易证明,z 具有均值为 0 和标准差为 3 / 2 = 1.22 … \sqrt{3/2} = 1.22\ldots 3/2 =1.22 的高斯分布。这比以前更尖峰,以至于即使与先前的图形相比,下面的图形也无法完全反映情况,因为我不得不重新调整了垂直轴的比例:
在这里插入图片描述这样的神经元饱和的可能性要小得多,因此出现学习减速的问题也相应减少了。

如上所述,我们将继续像以前那样初始化偏置,即使用均值为 0、标准差为 1 的高斯随机变量。这是可以接受的,因为这样做不会使神经元过度饱和的可能性增加太多。事实上,初始化偏差的方式并不重要,只要我们避免了饱和的问题。有些人甚至将所有偏差都初始化为 0,并依靠梯度下降来学习适当的偏差。但由于初始化偏置很可能不会产生太大的影响,因此我们将继续使用与以前相同的初始化过程。

让我们比较一下使用旧方法和新方法初始化权重的结果,在 MNIST 数字分类任务中进行比较。与以前一样,我们将使用 30 个隐藏神经元、迷你批量大小为 10、正则化参数 λ=5.0 和交叉熵成本函数。我们将把学习率略微从 η=0.5 降低到 0.1,因为这样可以使结果在图表中更容易看到。我们可以使用旧的权重初始化方法进行训练:

>> import mnist_loader
>>> training_data, validation_data, test_data = \
... mnist_loader.load_data_wrapper()
>>> import network2
>>> net = network2.Network([784, 30, 10], cost=network2.CrossEntropyCost)
>>> net.large_weight_initializer()
>>> net.SGD(training_data, 30, 10, 0.1, lmbda = 5.0,
... evaluation_data=validation_data, 
... monitor_evaluation_accuracy=True)

我们也可以使用新的权重初始化方法进行训练。实际上,这甚至更容易,因为 network2 默认的权重初始化方式就是使用这种新方法。这意味着我们可以省略上面的 net.large_weight_initializer() 调用:

>>> net = network2.Network([784, 30, 10], cost=network2.CrossEntropyCost)
>>> net.SGD(training_data, 30, 10, 0.1, lmbda = 5.0,
... evaluation_data=validation_data, 
... monitor_evaluation_accuracy=True)

绘制结果如下:
在这里插入图片描述
在这两种情况下,我们最终的分类准确率都略高于96%。两种情况下的最终分类准确率几乎完全相同。但是新的初始化技术使我们能够更快地达到这一水平。在训练的第一个周期结束时,旧的权重初始化方法的分类准确率不到87%,而新方法几乎达到了93%。看起来发生的事情是,我们的新的权重初始化方法让我们从一个更好的起点开始,这让我们能够更快地取得良好的结果。如果我们使用100个隐藏神经元绘制结果,也会看到相同的现象:
在这里插入图片描述
在这种情况下,这两条曲线并不完全相交。然而,我的实验表明,经过几个额外的训练周期(未显示),准确率几乎完全相同。因此,根据这些实验,似乎改进的权重初始化只是加速了学习过程,而没有改变我们网络的最终性能。然而,在第4章中,我们将看到一些神经网络的例子,其中采用了 1 / n i n 1/\sqrt{n_{\rm in}} 1/nin 权重初始化方法后,长期行为明显更好。因此,改进的权重初始化不仅改善了学习速度,有时还改善了最终性能。

1 / n i n 1/\sqrt{n_{\rm in}} 1/nin 权重初始化方法有助于改进我们神经网络的学习方式。还提出了其他权重初始化技术,其中许多都建立在这个基本思想之上。我在这里不会回顾其他方法,因为 1 / n i n 1/\sqrt{n_{\rm in}} 1/nin 对我们的目的已经足够好了。如果你有兴趣深入了解,我建议查看Yoshua Bengio在2012年的一篇论文中关于第14和第15页的讨论,以及其中的参考文献。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1529492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从C++源代码到可执行文件?

从C源代码到可执行文件的转换是一个涉及多个步骤的过程,通常包括预处理、编译、汇编和链接四个主要阶段: 1.四个阶段 预处理 (Preprocessing) 预处理器(如cpp)首先读取原始的C源代码文件,并对其进行一系列文本替换操作…

【考研数学】武忠祥全年各阶段搭配用书汇总

如果选武忠祥,讲义方面选择基础篇和辅导讲义即可。分别在基础阶段和强化阶段使用。 此外复习全书不用买(无论是基础篇还是提高篇都不用)你以后可能会看到它的各种推广,不要轻信,有讲义的情况下全书很难利用得上。 武…

Positive Technologies 专家发现的漏洞已在 ABB 控制器中得到修复

🌟 我们的同事一如既往地表现出色:应用分析专家 Natalia Tlyapova 和 Denis Goryushev 因发现 Freelance AC 900F 和 AC 700F 控制器中的两个漏洞而受到 ABB 的表彰。 这些设备用于自动化大规模连续循环生产设施和构建企业配送控制系统。利用这些漏洞的…

一文彻底搞懂TCP三次握手和四次挥手,及常见的面试题带答案

TCP(传输控制协议)是一种可靠的、面向连接的协议。在TCP/IP协议栈中,它负责在两个网络应用程序之间建立可靠的会话连接。TCP通过“三次握手”建立连接,通过“四次挥手”断开连接。本文将详细介绍这两个过程,并给出一些…

Women of Polkadot:波卡生态的女性社群与创新力量

在 Web3 行业里,女性似乎总是被忽视的群体。线下峰会的合照一眼望去尽是西装革履的男性成员,项目和机构高管的名单里也似乎难以寻觅到女性领导者的身影。在这个强调技术、编程、极客精神的行业里,女性身份的缺席看起来如此天生自然。 根据 B…

湖北省地质灾害分布数据 崩塌滑坡泥石流空间分布地质灾害详查等数据集

地质灾害是指在自然或者人为因素的作用下形成的,对人类生命财产造成的损失、对环境造成破坏的地质作用或地质现象。地质灾害在时间和空间上的分布变化规律,既受制于自然环境,又与人类活动有关,往往是人类与自然界相互作用的结果。…

防火墙的原理和配置

“防火墙”一词起源于建筑领域,用来隔离火灾,阻止火势从一个区域蔓延到另一个区域。引入到通信领域,防火墙这一具体设备通常用于两个网络之间有针对性的、逻辑意义上的隔离。这种隔离是选择性的,隔离“火”的蔓延,而又…

Vue.js+SpringBoot开发大学生相亲网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4.2 查询相亲大会4.3 新增留言4.4 查询新闻4.5 新增新闻 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的大学生相亲网站,包含了会员管理模块、新闻管…

python 基础知识点(蓝桥杯python科目个人复习计划65)

今日复习内容:做题 例题1:遥远的雪国列车 问题描述: 小蓝和小红今天在房间里一起看完了“雪国列车”这部电影,看完之后他们感触颇深,同时他们想到了这样一道题目: 现在有一个数轴,长度为N&a…

【Godot4.2】2D导航02 - AstarGrid2D及其使用方法

概述 AstarGrid2D是Godot4.0新增的A*寻路辅助类型。可以看做是Astar2D的加强版。它允许你通过设置其size和cell_size属性来创建一个虚拟的网格。 并使用set_point_solid()这样的方法来在指定位置创建障碍物。 AstarGrid2D的好处是你不再需要手动的添加点以及点与点之间的连接…

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)

基于python语言,采用经典自适应大邻域算法(ALNS)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作,目前…

OPTEE v3.20.0 FVP环境搭建

目录 一、前提条件 二、下载fvp代码 三、下载工具链 四、下载Foundation_Platform FVP平台 五、编译及运行 一、前提条件 1、安装如下的依赖工具 sudo apt-get install android-tools-adb android-tools-fastboot autoconf \ automake bc bison build-essential ccache c…

精酿啤酒:开启时尚派对的钥匙

Fendi club啤酒,一个代表着时尚与品味的品牌,如今进入了啤酒市场,推出了名为“Fendi club”的啤酒。这一创新的举措不仅展现了品牌的多元化发展,更为消费者提供了一种全新的时尚生活方式。 Fendi club啤酒不仅仅是一种产品&#x…

IPD集成产品开发:塑造企业未来竞争力的关键

随着市场竞争的日益激烈,企业对产品开发的要求也越来越高。如何在快速变化的市场环境中,既保证产品的批量生产效率,又满足客户的个性化需求,成为了企业面临的重要挑战。IPD(集成产品开发)模式,作…

HarmonyOS NEXT应用开发—投票动效实现案例

介绍 本示例介绍使用绘制组件中的Polygon组件配合使用显式动画以及borderRadius实现投票pk组件。 效果预览图 使用说明 加载完成后会有一个胶囊块被切割成两个等大的图形来作为投票的两个选项,中间由PK两字分隔开点击左边选项,两个图形会随着选择人数…

简单了解多线程

并发和并行 并发: 在同一时刻,多个指令在单一CPU上交替指向 并行:在同一时刻,多个指令在多个CPU上同时执行 2核4线程,4核8线程,8核16线程,16核32线程 基础实现线程的方式 Thread :继承类 &…

英伟达深夜放王炸|字节跳动游戏之路波折不断|文旅短剧风口将至|25岁QQ魅力不减,5亿人在用|云计算市场疯长152%|电商巨头齐瞄向富足悠闲银发族

新闻一分钟速览 文旅短剧风口将至,一地狂拍十部,影视界看法分歧,悬念丛生!字节跳动游戏之路波折不断,能否逆风翻盘引关注。折叠屏手机痛症治愈,实力席卷高端市场,势头强劲!雷军豪言…

框架篇常见面试题

1、Spring框架的单例bean是线程安全的吗? 2、什么是AOP? 3、Spring的事务是如何实现的? 4、Spring事务失效的场景 5、SpringBean的声明周期 6、Spring的循环依赖 7、SpringMVC的执行流程 8、SpringBoot自动配置原理 9、Spring常见注解

1.IP复习课作业

1.IP复习课作业 1.为路由器各接口配置IP以及环回 R1 R2 R3 R4 R5 R6 2.配置dhcp为主机下发IP PC1 PC2 3.配置静态路由 R1 R2 R3 R4 R5 PC端通信 4.防止成环 R1 R2、4、5一样 5.修改优先级 R1 R2、3、4、5同样进行修改 6.均可访问R6环回 R5配置easy IP R1 ping R6环回 PC ping R…

微信小程序开发学习笔记——4.4常见的导航栏api接口

>>跟着b站up主“咸虾米_”学习微信小程序开发中,把学习记录存到这方便后续查找。 课程连接:https://www.bilibili.com/video/BV19G4y1K74d?p29&vd_source9b149469177ab5fdc47515e14cf3cf74 一、属性 界面 / 导航栏 / wx.showNavigationBar…