【深度学习】5-2 与学习相关的技巧 - 权重的初始值

news2024/11/19 9:27:15

在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。本节将介绍权重初始值的推荐值,并通过实验确认神经网络的学习是否会快速进行。

可以将权重初始值设为0吗
后面我们会介绍抑制过拟合、提高泛化能力的技巧 —— 权值衰减
权值衰减就是一种以减小权重参数的值为目的进行学习的方法。

如果想减小权重的值,一开始就将初始值设为较小的值才是正途。实际上在这之前的权重初始值都是像0.01 * np.random.randn(10,100)这样,使用由高斯分布生成的值乘以0.01后得到的值(标准差为0.01的高斯分布)。

如果我们把权重初始值全部设为0以减小权重的值,会怎么样呢? 事实上,将权重初始值设为0的话,将无法正确进行学习。
为什么不能将权重初始值设为0呢? 严格地说,为什么不能将权重初值设成一样的值?
这是因为在误差反向传播法中,所有的权重值都会进行相同的更新。
比如,在2层神经网络中,假设第1层和第2层的权重为0。这样一来,正向传播时,因为输人层的权重为0,所以第2层的神经元全部被传递相同的值。第2层的神经元中全部输入相同的值,这意味着反向传播时第2层的权重全部都会进行相同的更新。因此,权重被更新为相同的值,并拥有了对称的值(重复的值)。这使得神经网络拥有许多不同的权重的意义丧失了,所以必须随机生成初始值。

隐藏层的激活值的分布
各层的激活值的分布都要求有适当的广度。因为通过在各层间传递多样性的数据,神经网络可以进行高效的学习。反过来,如果传递的是有所偏向的数据,就会出现梯度消失或者“表现力受限”的问题,导致学习可能无法顺利进行。

现在,在一般的深度学习框架中,Xavier初始值已被作为标准使用,比如,Cafe框架中,通过在设定权重初始值时赋予xavier参数,就可以使用Xavier初始值。Xavier的论文中,为了使各层的激活值呈现出具有相同广度的分布,推导了合适的权重尺度。推导出的结论是,如果前一层的节点数为n,则初值使用标准差为在这里插入图片描述
的分布
在这里插入图片描述

使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小。

ReLU的权重初始值
Xavier初始值是以激活函数是线性函数为前提而推导出来的。因为sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适合使用Xavier初始值。但当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值也就是“He初始值”,即:当前一层的节点数为n时,He初始值使用标准差为在这里插入图片描述的高斯分布。
总结一下,当激活函数使用ReLU时,权重初始值使用He初始值,当激活函数为sigmoid或tanh等S型曲线函数时,初始值使用Xavier初始值。这是目前的最佳实践。

基于MNIST数据集的权重初始值的比较
下面通过实际的数据,观察不同的权重初始值的赋值方法会在多大程度上影响神经网络的学习。这里,我们基于std=0.01、Xavier初始值、He初始值进行实验,测试代码如下:

# coding: utf-8
import os
import sys

sys.path.append(os.pardir)  # 为了导入父目录的文件而进行的设定
import numpy as np
import matplotlib.pyplot as plt
from dataset.mnist import load_mnist
from common.util import smooth_curve
from common.multi_layer_net import MultiLayerNet
from common.optimizer import SGD


# 0:读入MNIST数据==========
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)

train_size = x_train.shape[0]
batch_size = 128
max_iterations = 2000


# 1:进行实验的设置==========
weight_init_types = {'std=0.01': 0.01, 'Xavier': 'sigmoid', 'He': 'relu'}
optimizer = SGD(lr=0.01)

networks = {}
train_loss = {}
for key, weight_type in weight_init_types.items():
    networks[key] = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100],
                                  output_size=10, weight_init_std=weight_type)
    train_loss[key] = []


# 2:开始训练==========
for i in range(max_iterations):
    batch_mask = np.random.choice(train_size, batch_size)
    x_batch = x_train[batch_mask]
    t_batch = t_train[batch_mask]
    
    for key in weight_init_types.keys():
        grads = networks[key].gradient(x_batch, t_batch)
        optimizer.update(networks[key].params, grads)
    
        loss = networks[key].loss(x_batch, t_batch)
        train_loss[key].append(loss)
    
    if i % 100 == 0:
        print("===========" + "iteration:" + str(i) + "===========")
        for key in weight_init_types.keys():
            loss = networks[key].loss(x_batch, t_batch)
            print(key + ":" + str(loss))


# 3.绘制图形==========
markers = {'std=0.01': 'o', 'Xavier': 's', 'He': 'D'}
x = np.arange(max_iterations)
for key in weight_init_types.keys():
    plt.plot(x, smooth_curve(train_loss[key]), marker=markers[key], markevery=100, label=key)
plt.xlabel("iterations")
plt.ylabel("loss")
plt.ylim(0, 2.5)
plt.legend()
plt.show()

结果如下:
在这里插入图片描述

std =0.01时完全无法进行学习。这和才观察到的激活值的分布一样,是因为正向传播中传递的值很小(集中在附近的数据)。因此,逆向传播时求到的梯度也很小,权重几乎不进行更新。
相反,当权重初始值为Xavier初始值和He初始值时,学习进行得很顺利并且,我们发现He初始值时的学习进度更快一些。

综上,在神经网络的学习中,权重初始值非常重要。很多时候权重初值的设定关系到神经网络的学习能否成功。权重初始值的重要性容易被忽视而任何事情的开始(初始值)总是关键的,因此在结束本节之际,再次强调权重初始值的重要性

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

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

相关文章

搜索引擎的个性化搜索:为何搜索结果因人而异

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言搜索引擎的工作原理…

uniapp uView2 字体加载错误提示处理(字体离线方案)

最近老是收到有人反馈 uView2的字体图标报错,具体错误提示如下图 这个报错的原因有2种情况 at.licdn.com 网站维护,无法加载;国内这些小程序平台的开发工具日常抽风,代码能跑,但就是报错,简直离谱&#x…

漏洞复现 D-Link DCS 密码泄露漏洞

0x01 漏洞描述 D-link DCS是一款网络摄像机,工作温度为0-50℃。D-link DCS系统存在密码泄露漏洞,攻击者通过漏洞可以获取后台权限。 0x02 漏洞复现 fofa:app“D_Link-DCS-4622” 1.使用poc进行账号密码查看,得到密码登录即可 …

网络安全是什么?怎么学

网络安全基础 安全的定义: 1)一种能够识别和消除不安全因素的能力; 2)安全是一个持续的过程网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性科学。 网络…

Redis原理 - 数据结构的底层实现

原文首更地址,阅读效果更佳! Redis原理 - 数据结构的底层实现 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-datastruct-underlying-implementation.html 动态字符串SDS #基本概念 Redis 中保存的 Key 是字符串,V…

C国演义 [第六章]

第六章 最长递增子序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长连续递增序列题目理解步骤dp含义递推公式初始化遍历顺序 代码 最长递增子序列 力扣链接 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&am…

什么是http代理504网关超时错误,怎么处理

HTTP代理504网关超时错误是指代理服务器在尝试连接目标服务器时,等待目标服务器响应的时间超过了预设的时间,导致代理服务器无法返回请求结果给客户端,从而出现网关超时。 为什么会遇到http代理504网关超时错误 我们遇到HTTP代理504网关超时…

CSPM项目管理专业人员能力评价证书报考条件与考试形势

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

【人工智能概论】 Python标准库——dalib(领域自适应)

【人工智能概论】 Python标准库——dalib(领域自适应) 文章目录 【人工智能概论】 Python标准库——dalib(领域自适应)一. 领域鉴别器(DomainDiscriminator)二. 领域对抗损失(DomainAdversarial…

【MongoDB】五、MongoDB分片集群的部署

【MongoDB】五、MongoDB分片集群的部署 实验目的实验内容实验步骤环境准备部署 Config server配置Config Server副本集部署Shard部署mongos启动分片功能查看分片信息 实验小结 实验目的 能够通过部署MongoDB分片集群熟悉MongoDB分片集群架构和基本操作,从而解决大数…

调用有道API实现语音翻译(汉译英)

目录 1. 作者介绍2. 相关介绍2.1 API介绍2.2 网易API介绍 3. 实验过程3.1 调用过程3.2 代码获取3.3 完整代码 1. 作者介绍 南旭东,男,西安工程大学电子信息学院,2022级研究生 研究方向:机器视觉与人工智能 电子邮件:1…

win10 搭建vue环境并运行项目

win10 搭建vue环境并运行项目 1、参考链接2、遇到的问题及解决 1、参考链接 https://blog.csdn.net/qq_44959735/article/details/128886550 2、遇到的问题及解决 运行的时候不要再git bash里,要在自带的powershell里,以管理员权限运行。 问题&#xf…

未来5年,生产力的底层逻辑变了,影响所有企业

上周,K哥带领20多位企业家、技术高管参访了阿里钉钉,学习AI大模型如何应用到企业生产经营和组织管理当中,以及企业如何使用新生产力工具实现降本增效。 通过这次参访,我对AI大模型如何驱动企业管理变革有了新的认识,三…

js-排序数组中两个数字之和

给定一个已按照 升序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 &#xff0c;所以答案数组应当满足 0 < answer[0] < answ…

【ArcGIS】栅格重分类(Reclass)

ArcGIS栅格重分类&#xff08;Reclass&#xff09; 1 重分类&#xff08;Relassify&#xff09;1.1 新值替代1.2 将值组合到一起1.3 按相同等级对一组栅格的值进行重分类1.4 将特定值设置为NoData或者为NoData像元设置某个值1.5 操作步骤 2 查找表&#xff08;Lookup&#xff0…

CS5366设计原理图|Type-C转HDMI2.0 4K60+USB3.0+PD3.1视频转换芯片应用电路图

CS5366Type-C转HDMI2.0的显示协议转换芯片, 内部集成了PD3.0及DSC decoder, 并能按客户需求配置成不同的功能组合&#xff0c; 是目前集成度与功耗更小的一颗芯片。 Type-C转HDMI2.0 4K60USB3.0PD3.1视频转换芯片应用电路图&#xff1a; CS5366系列符合USB电源传输规范3.0。CS…

C语言+单片机-内存分布详解,全网最全,值得收藏保存

目录 一、C语言内存分区 1. 代码区 2. 常量区 3. 全局(静态)区 4. 堆区(heap) 5. 栈区(stack) 二、STM32存储器分配 1. 随机存储器—RAM 2. 只读存储器—ROM 三、基于STM32代码验证 1. 详细代码如下 2. 运行结果如下 四、单片机中的内存分布 1.含义解释 2. 程序…

Makerbase CANable V2.0在Window系统使用

应用软件与固件 应用软件CANable V2.0CANable V1.0cangaroocandleLight/slcan(支持CAN FD)candleLight/slcan/cantactBUSMASTER V3.2.2candleLightcandleLight/pcan/cantactTSMastercandleLightcandleLight/pcan/cantactPCAN-Explorer 5、pcan view不支持pcancantactslcan(不支…

北理工软件工程基础考试要点

文章目录 前言题型分析概念部分大题部分数据流图和数据字典数据流图数据字典 前言 这篇文章就是针对北理工计科同学写的&#xff0c;这是精心筛选&#xff0c;针对老师最后一节课的重点以及题型写的笔记&#xff0c;保你一天速通软件工程基础这门课。 题型分析 闭卷 单选题…

SAP-ABAP-SM30自建表维护如何如何自动带出描述

文章目录 1 Requirement2 Process2.1 When you finish table maintainer , and create event .2.2 Create sub routine .2.3 Write code 3. Result4 Reference Document 1 Requirement The requirement is that we input MATNR and HKONT and get the description automatic .…