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

这篇具有很好参考价值的文章主要介绍了【深度学习】5-2 与学习相关的技巧 - 权重的初始值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

可以将权重初始值设为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,则初值使用标准差为【深度学习】5-2 与学习相关的技巧 - 权重的初始值
的分布
【深度学习】5-2 与学习相关的技巧 - 权重的初始值

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

ReLU的权重初始值
Xavier初始值是以激活函数是线性函数为前提而推导出来的。因为sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适合使用Xavier初始值。但当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值也就是“He初始值”,即:当前一层的节点数为n时,He初始值使用标准差为【深度学习】5-2 与学习相关的技巧 - 权重的初始值的高斯分布。
总结一下,当激活函数使用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()

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

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

综上,在神经网络的学习中,权重初始值非常重要。很多时候权重初值的设定关系到神经网络的学习能否成功。权重初始值的重要性容易被忽视而任何事情的开始(初始值)总是关键的,因此在结束本节之际,再次强调权重初始值的重要性文章来源地址https://www.toymoban.com/news/detail-495068.html

到了这里,关于【深度学习】5-2 与学习相关的技巧 - 权重的初始值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法小记】深度学习——循环神经网络相关原理与RNN、LSTM算法的使用

    文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 卷积神经网络在图像领域取得了良好的效果,卷积核凭借优秀的特征提取能力通过深层的卷积操作可是实现对矩形张量的复杂计算处理。但是生活中除了图像这样天然以矩阵形

    2024年01月25日
    浏览(40)
  • 模型权重和深度学习训练框架之间的关系

    通常我们可以看到有Caffe或Pytorch或TensorFlow的模型参数文件 不同的团队可能会使用不同的深度学习训练框架, 然后使用其 内部的模型权重保存函数 进行保存, 以便之后 自己的复用 或 发布开源 , 让别人使用自己已经训练好的模型权重, 在其基础上进一步做改进或训练 那么该团

    2024年02月11日
    浏览(39)
  • 深度学习技术栈 —— Pytorch中保存与加载权重文件

    权重文件是指训练好的模型参数文件,不同的深度学习框架和模型可能使用不同的权重文件格式。以下是一些常见的权重文件格式: PyTorch 的模型格式: .pt 文件。 Darknet 的模型格式: .weight 文件。 TensorFlow 的模型格式: .ckpt 文件。 一、参考文章或视频链接 [1] Navigating Mode

    2024年01月19日
    浏览(40)
  • 第56步 深度学习图像识别:CNN梯度权重类激活映射(TensorFlow)

    一、写在前面 类激活映射(Class Activation Mapping,CAM)和梯度权重类激活映射(Gradient-weighted Class Activation Mapping,Grad-CAM) 是两种可视化深度学习模型决策过程的技术。他们都是为了理解模型的决策过程,特别是对于图像分类任务,它们可以生成一种热力图,这种图可以突出显

    2024年02月13日
    浏览(40)
  • 【机器学习300问】78、都有哪些神经网络的初始化参数方法?

            在训练神经网络时,权重初始化是确保良好收敛的关键步骤之一。不合适的初始化方法可能会导致梯度消失或爆炸,特别是在深层网络中。那么都有哪些神经网络的初始化参数方法呢?选择它这些方法的原则是什么?         关于随机初始化神经网络参数的方法

    2024年04月23日
    浏览(37)
  • 深度学习学习笔记——解决过拟合问题的方法:权重衰减和暂退法,与正则化之间的关系

    解决过拟合问题是机器学习和深度学习中关键的任务之一,因为它会导致模型在训练数据上表现良好,但在未见数据上表现不佳。以下是一些解决过拟合问题的常见方法: 增加训练数据 : 增加更多的训练数据可以帮助模型更好地捕捉数据的真实分布,减少过拟合的可能性。

    2024年02月09日
    浏览(42)
  • Pytorch权重初始化/参数初始化

    refer: 【Pytorch】各网络层的默认初始化方法 https://blog.csdn.net/guofei_fly/article/details/105109883 其实Pytorch初始化方法就在各自的层的 def reset_parameters(self) - None: 方法中。 有人可能会问 为什么这个方法和Pytorch直接出来的权重初始值不一样 ?单步调试会发现其实这个方法运行了至少两

    2024年02月11日
    浏览(50)
  • 【深度学习实验】注意力机制(一):注意力权重矩阵可视化(矩阵热图heatmap)

    ​    注意力机制 作为一种模拟人脑信息处理的关键工具,在深度学习领域中得到了广泛应用。本系列实验旨在通过理论分析和代码演示,深入了解注意力机制的原理、类型及其在模型中的实际应用。 本文将介绍将介绍 注意力权重矩阵可视化 (矩阵热图heatmap)   本系

    2024年02月05日
    浏览(31)
  • 【学习笔记】神经网络相关

    人工神经网络(Artificial Neural Network,ANN)常简称为神经网络(Neural Network,NN),它是一种通过数学模型来模拟生物大脑神经网络以及生物大脑功能的技术。 1943年,心理学家McCulloch和数学家Pitts提出了MP模型。该模型将一个生物神经元的结构简化成数学模型。 单个MP模型可以

    2024年01月16日
    浏览(31)
  • 【深度学习】第一门课 神经网络和深度学习 Week 1 深度学习概论

    🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊 1.1 欢迎来到深度学习 1. 为什么要学深度学习? 2. 我们将学习到哪些内容? 1.2 什么是

    2024年02月04日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包