0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种神经网络结构改进方法「ReZero」

倩倩 来源:机器之心Pro 2020-04-17 09:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

深度学习在众多领域都取得了显著进展,但与此同时也存在一个问题:深层网络的训练常常面临梯度消失或梯度爆炸的阻碍,尤其是像 Transformer 这样的大型网络。现在,加州大学圣迭戈分校的研究者提出了一种名为 ReZero 的神经网络结构改进方法,并使用 ReZero 训练了具有一万层的全连接网络,以及首次训练了超过 100 层的 Tansformer,效果都十分惊艳。

深度学习在计算机视觉、自然语言处理等领域取得了很多重大突破。神经网络的表达能力通常随着其网络深度呈指数增长,这一特性赋予了它很强的泛化能力。然而深层的网络也产生了梯度消失或梯度爆炸,以及模型中的信息传递变差等一系列问题。研究人员使用精心设计的权值初始化方法、BatchNorm 或 LayerNorm 这类标准化技术来缓解以上问题,然而这些技术往往会耗费更多计算资源,或者存在其自身的局限。

近日,来自加州大学圣迭戈分校(UCSD)的研究者提出一种神经网络结构改进方法「ReZero」,它能够动态地加快优质梯度和任意深层信号的传播。

论文地址:https://arxiv.org/abs/2003.04887v1

代码地址:https://github.com/majumderb/rezero

这个想法其实非常简单:ReZero 将所有网络层均初始化为恒等映射。在每一层中,研究者引入了一个关于输入信号 x 的残差连接和一个用于调节当前网络层输出 F(x) 的可训练参数α,即:

在刚开始训练的时候将α设置为零。这使得在神经网络训练初期,所有组成变换 F 的参数所对应的梯度均消失了,之后这些参数在训练过程中动态地产生合适的值。改进的网络结构如下图所示:

图 1:ReZero 结构示意图

ReZero 主要带来了以下两个益处:

1. 能够训练更深层神经网络

学习信号能够有效地在深层神经网络中传递,这使得我们能够训练一些之前所无法训练的网络。研究者使用 ReZero 成功训练了具有一万层的全连接网络,首次训练了超过 100 层的 Tansformer 并且没有使用学习速率热身和 LayerNorm 这些奇技淫巧。

2. 更快的收敛速度

与带有标准化操作的常规残差网络相比,ReZero 的收敛速度明显更快。当 ReZero 应用于 Transformer 时,在 enwiki8 语言建模基准上,其收敛速度比一般的 Transformer 快 56%,达到 1.2BPB。当 ReZero 应用于 ResNet,在 CIFAR 10 上可实现 32% 的加速和 85% 的精度。

ReZero (residual with zero initialization)

ReZero 对深度残差网络的结构进行了简单的更改,可促进动态等距(dynamical isometry)并实现对极深网络的有效训练。研究者在初始阶段没有使用那些非平凡函数 F[W_i] 传递信号,而是添加了一个残差连接并通过初始为零的 L 个可学习参数α_i(作者称其为残差权重)来重新缩放该函数。目前,信号根据以下方式进行传递:

在初始阶段,该网络表示为恒等函数并且普遍满足动态等距关系。在该架构修改中,即使某一层的 Jacobian 值消失,也可以训练深度网络(正如 ReLU 激活函数或自注意力机制出现这样的状况)。这一技术还可以在现有的已训练网络上添加新层。

实验结果

更快的深层全连接网络训练

图 3 展示了训练损失的演变过程。在一个简单实验中,一个使用了 ReZero 的 32 层网络,拟合训练数据的收敛速度相比其他技术快了 7 到 15 倍。值得注意的是,与常规的全连接网络相比,残差连接在没有额外的标准化层时会降低收敛速度。这可能是因为初始化阶段信号的方差并不独立于网络深度。

随着深度的增加,ReZero 架构的优势更加明显。为了验证该架构可用于深度网络训练,研究者在一台配备 GPU 的笔记本电脑上成功训练了多达 1 万层的全连接 ReZero 网络,使其在训练数据集上过拟合。

图 3:256 宽度和 ReLU 激活的 32 层全连接网络四种变体,在训练过程中的交叉熵损失。

更快的深层 Transformer 训练

研究者提出,常规的 Transformer 会抑制深层信号传递,他们在输入序列 x 的 n x d 个 entry 的无穷小变化下评估其变化,获得注意力处理的输入-输出 Jacobian,从而验证了之前的观点。

图 5a 展示了不同深度中使用 Xavier 统一初始化权重的 Transformer 编码层的输入-输出 Jacobian 值。浅层的 Transformer 表现出峰值在零点附近的单峰分布,可以发现,深层结构中 Jacobian 出现了大量超出计算精度的峰值。虽然这些分布取决于不同初始化方法,但以上量化的结论在很大范围内是成立的。这些结果与普遍认为的相一致,也就是深层 Transformer 很难训练。

图 5:多个输入-输出 Jacobian 矩阵中对数奇异值λ_io 的直方图。(a)层数分别为 4、12、64 层的 Transformer 编码器网络;(b)是 64 层时训练前和训练中的 ReZero Transformer 编码器网络。深层 Transformer 距离动态等距很远,即λ_io 1,而 ReZero Transformer 更接近动态等距,平均奇异值 λ_io ≈ 1。

能够在多项 NLP 任务中实现 SOTA 的 Transformer 模型通常是小于 24 层的,这项研究中,最深层模型最多使用了 78 层,并且需要 256 个 GPU 来训练。研究者又将这一模型扩展至数百个 Transformer 层,并且仍然可以在台式机上训练。为了检查该方法是否可以扩展至更深层的 Transformer 模型之上,研究者将 ReZero Transformer 拓展到了 64 及 128 层,并与普通 Transformer 进行了对比。

结果显示,收敛之后,12 层的 ReZero Transformer 与常规的 Transformer 取得了相同的 BPB。也就是说,用 ReZero 来替代 LayerNorm 不会失去任何模型表现。训练普通的 Transformer 模型会导致收敛困难或训练缓慢。当达到 64 层时,普通的 Transformer 模型即使用了 warm-up 也无法收敛。ReZero Transformer 在α初始化为 1 时发散,从而支持了α = 0 的初始化理论。深层的 ReZero Transformer 比浅层的 Transformer 表现出了更优越的性能。

表 3:在 enwiki8 测试集上的 Transformers (TX) 对比。

收敛速度比较

选择 enwiki8 上的语言建模作为基准,因为较难的语言模型是 NLP 任务性能的良好指标。在实验中,其目标是通过测量 12 层的 Transformer 在 enwiki8 上达到 1.2 位每字节(BPB)所需的迭代次数,由此来衡量所提出的每种方法的收敛速度。

表二:针对 ReZero 的 12 层 Transformers 归一化后与 enwiki8 验证集上达到 1.2 BPB 时所需的训练迭代比较。

更快的残差网络训练

通过前述部分,看到了 ReZero 的连接是如何使深层网络的训练成为可能的,并且这些深层网络都包含会消失的 Jacobian 奇异值,例如 ReLU 激活或自我注意力。但是,如果没有 ReZero 的连接或者是其他架构的更改,其中某些架构将无法执行训练。在本节中,会将 ReZero 连接应用于深层残差网络从而进行图像识别。

虽然这些网络并不需要 ReZero 连接便可以进行训练,但通过观察发现,在 CIFAR-10 数据集上训练的 ResNet56 model4(最多 200 个 epochs)的验证误差得到了非常明显的提升:从(7.37±0.06)%到(6.46±0.05)%。这一效果是将模型中的所有残差连接转换为 ReZero 连接之后得到的。在实施 ReZero 之后,验证误差降低到 15%以下的次数也减少了(32±14)%。尽管目前这些结果只提供了有限的信息,但它们仍指出了 ReZero 连接拥有更广泛的适用性,从而也推进了进一步的研究。

上手实操

项目地址:

https://github.com/majumderb/rezero

在此提供了自定义的 ReZero Transformer 层(RZTX),比如以下操作将会创建一个 Transformer 编码器:

import torchimport torch.nn as nnfrom rezero.transformer import RZTXEncoderLayerencoder_layer = RZTXEncoderLayer(d_model=512, nhead=8)transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=6)src = torch.rand(10, 32, 512)out = transformer_encoder(src)

创建一个 Transformer 解码器:

import torchimport torch.nn as nnfrom rezero.transformer import RZTXDecoderLayerdecoder_layer = RZTXDecoderLayer(d_model=512, nhead=8)transformer_decoder = nn.TransformerDecoder(decoder_layer, num_layers=6)memory = torch.rand(10, 32, 512)tgt = torch.rand(20, 32, 512)out = transformer_decoder(tgt, memory)

注意确保 norm 参数保留为 None,以免在 Transformer 中用到 LayerNorm。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    4011

    浏览量

    143374
  • 神经网络
    +关注

    关注

    42

    文章

    4842

    浏览量

    108185
  • 自然语言处理

    关注

    1

    文章

    630

    浏览量

    14724
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    为什么 VisionFive V1 板上的 JH7100 中并存 NVDLA 引擎和神经网络引擎?

    我想知道为什么 VisionFive V1 板上的 JH7100 中并存 NVDLA 引擎和神经网络引擎,请问?您能否举些关于他们的用例的例子?
    发表于 03-25 06:01

    神经网络的初步认识

    日常生活中的智能应用都离不开深度学习,而深度学习则依赖于神经网络的实现。什么是神经网络神经网络的核心思想是模仿生物神经系统的结构,特别是大
    的头像 发表于 12-17 15:05 460次阅读
    <b class='flag-5'>神经网络</b>的初步认识

    Transformer如何让自动驾驶变得更聪明?

    ]自动驾驶中常提的Transformer本质上是一种神经网络结构,最早在自然语言处理里火起来。与卷积神经网络(CNN)或循环神经网络(RNN)不同,Transformer能够自动审视所
    的头像 发表于 11-19 18:17 2465次阅读

    自动驾驶中常提的卷积神经网络是个啥?

    在自动驾驶领域,经常会听到卷积神经网络技术。卷积神经网络,简称为CNN,是一种专门用来处理网格状数据(比如图像)的深度学习模型。CNN在图像处理中尤其常见,因为图像本身就可以看作是由像素排列成的二维网格。
    的头像 发表于 11-19 18:15 2252次阅读
    自动驾驶中常提的卷积<b class='flag-5'>神经网络</b>是个啥?

    NMSIS神经网络库使用介绍

    NMSIS NN 软件库是组高效的神经网络内核,旨在最大限度地提高 Nuclei N 处理器内核上的神经网络的性能并最​​大限度地减少其内存占用。 该库分为多个功能,每个功能涵盖特定类别
    发表于 10-29 06:08

    在Ubuntu20.04系统中训练神经网络模型的些经验

    , batch_size=512, epochs=20)总结 这个核心算法中的卷积神经网络结构和训练过程,是用来对MNIST手写数字图像进行分类的。模型将图像作为输入,通过卷积和池化层提取图像的特征,然后通过全连接层进行分类预测。训练过程中,模型通过最小化损失函数来优化模型参数,从而提高分类准确性。
    发表于 10-22 07:03

    CICC2033神经网络部署相关操作

    在完成神经网络量化后,需要将神经网络部署到硬件加速器上。首先需要将所有权重数据以及输入数据导入到存储器内。 在仿真环境下,可将其存于个文件,并在 Verilog 代码中通过 readmemh 函数
    发表于 10-20 08:00

    液态神经网络(LNN):时间连续性与动态适应性的神经网络

    1.算法简介液态神经网络(LiquidNeuralNetworks,LNN)是一种新型的神经网络架构,其设计理念借鉴自生物神经系统,特别是秀丽隐杆线虫的
    的头像 发表于 09-28 10:03 1570次阅读
    液态<b class='flag-5'>神经网络</b>(LNN):时间连续性与动态适应性的<b class='flag-5'>神经网络</b>

    神经网络的并行计算与加速技术

    随着人工智能技术的飞速发展,神经网络在众多领域展现出了巨大的潜力和广泛的应用前景。然而,神经网络模型的复杂度和规模也在不断增加,这使得传统的串行计算方式面临着巨大的挑战,如计算速度慢、训练时间长等
    的头像 发表于 09-17 13:31 1299次阅读
    <b class='flag-5'>神经网络</b>的并行计算与加速技术

    MSCMG无刷直流电机改进的I_f无位置起动方法

    针对磁悬浮控制力矩陀螺无刷直流电机电阻、电感值极小的特点和已有的无位置传感器 I/f 起动算法加速阶段换相精度不高且算法复杂的问题,通过分析电磁转矩和换相时刻的关系,提出了一种改进的 I/f起动方法
    发表于 08-06 14:27

    MSCMG无刷直流电机改进的I_f无位置起动方法

    方法。该方法在电磁转矩恒定的情况下,结合电机模型,精确计算出电机换相的具体时刻。为保证电磁转矩恒定确保换相时刻的准确性,采用神经网络法估计反电势系数,并设计了基于三相绕组不对称补偿的改进
    发表于 07-23 13:19

    无刷电机小波神经网络转子位置检测方法的研究

    摘要:论文通过对无刷电机数学模型的推导,得出转角:与三相相电压之间存在映射关系,因此构建了个以三相相电压为输人,转角为输出的小波神经网络来实现转角预测,并采用改进遗传算法来训练网络结构
    发表于 06-25 13:06

    神经网络专家系统在电机故障诊断中的应用

    摘要:针对传统专家系统不能进行自学习、自适应的问题,本文提出了基于网络专家系统的并步电机故障诊断方法。本文将小波神经网络和专家系统相结合,充分发挥了二者故障诊断的优点,很大程度上降
    发表于 06-16 22:09

    神经网络RAS在异步电机转速估计中的仿真研究

    众多方法中,由于其结构简单,稳定性好广泛受到人们的重视,且已被用于产品开发。但是MRAS仍存在在低速区速度估计精度下降和对电动机参数变化非常敏感的问题。本文利用神经网络的特点,使估计更为简单、快速
    发表于 06-16 21:54

    基于FPGA搭建神经网络的步骤解析

    本文的目的是在神经网络已经通过python或者MATLAB训练好的神经网络模型,将训练好的模型的权重和偏置文件以TXT文件格式导出,然后通过python程序将txt文件转化为coe文件,(coe
    的头像 发表于 06-03 15:51 1506次阅读
    基于FPGA搭建<b class='flag-5'>神经网络</b>的步骤解析