深度学习优化策略-4 基于Gate Mechanism的激活单元GTU、GLU

2023-12-09 00:20

本文主要是介绍深度学习优化策略-4 基于Gate Mechanism的激活单元GTU、GLU,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1、Sigmoid和Tanh激活函数及存在问题

    深度学习(神经网络)中最先被广泛使用的激活函数是Sigmoid函数和双曲正切激活函数,都是非线性的激活函数,两个激活函数的表达式如下:

sigmoid函数:      f(x)= 1 / (1+exp(−x))

双曲正切函数:       f(x)= tanh(x)

    激活函数的图形如图所示:

    Sigmoid和双曲正切激活函数有两个明显的缺点:

    1、存在饱和死区特性,梯度反向传播时,容易导致梯度爆炸(Gradient Explosion)和梯度消失(Gradient Vanish)问题。

    2、对于多层非线性变换嵌套操作的深度学习网络,关于参数W的梯度计算比较复杂,计算量大。

2、Relu系列激活函数

    为了解决上面两个问题,深度学习研究领域陆续提出了Relu(Rectified linear unit)及其变体Leaky Relu、Elu、pRelu、PRelu、RRelu等。借鉴LSTM的Gate Mechanism思想,基于Relu激活函数和Tanh激活函数,结合gate unit产生的GTU units、GLU units等激活单元。

    Relu激活函数的表达式为:f(x)=max(0,x)

    Relu激活函数及它一些变体的曲线如下图所示:

    关于Relu及其变体激活函数介绍的资料比较多,这里我就不赘述了。

3、基于Gate mechanism的GLU、GTU 单元

    介绍一下基于gate mechanism实现的,两个比较新颖的激活函数GTU和GLU。

    GTU(Gated Tanh Unit)的表达式为:

    f(X) = tanh(X*W+b) * O(X*V+c)

    GLU(Gated Liner Unit)的表达式为:

    f(X) = (X * W + b) * O(X * V + c)

    分析GTU和GLU的组成结构可以发现:

  Tanh激活单元:tanh(X*W+b),加上一个Sigmoid激活单元:O(X*V+c)构成的gate unit,就构成了GTU单元。

   Relu激活单元:(X * W + b),加上一个Sigmoid激活单元:O(X * V + c)构成的gate unit,就构成了GLU单元。

4、gate mechanism影响及各激活单元对比

    下图实验结果来源于论文《Language Modeling with Gated Convolutional Networks》 5.2节。

图1 Tanh、Relu、GTU和GLU激活单元性能对比

(1)、gate mechanism 影响

把GTU中的Sigmoid gate去掉的话,就是一个Tanh激活函数。因此,可以通过比较Tanh和GTU的实验效果,来对比Gate mechanism对模型性能的影响。通过图1中的左图可以发现,使用GTU的效果远远优于Tanh激活函数,可见,gate units有助于深度网络建模。

(2)、Tanh、GLU与Relu、GLU对比

Tanh激活函数和GTU都存在梯度消失的问题,因为即使是GTU,当units的激活处于饱和区时,输入单元激活单元:tanh(X*W+b)和gate单元:O(X * V + c)都会削弱梯度值。相反,GLU和Relu不存在这样的问题。GLU和Relu都拥有线性的通道,可以使梯度很容易通过激活的units,反向传播且不会减小。因此,采用GLU或Relu做为激活,训练时收敛速度更快。

(3)、Relu与GLU对比

Relu单元并没有完全抛弃GLU中的gate units,GLU可以看做是处于激活状态下的一种简化的Relu单元。对比Relu和GLU,通过图1右图可以大显,在相同的训练时间下,GLU单元可以获得比Relu更高的精度。

(4)GLU与GTU对比:

GTU存在tanh激活的非线性单元,GLU存在的线性单元,GLU中不存在类似于GTU中的梯度消失问题。通过对比可以发现,GLU获得比GTU更快的收敛速度,以及更高的准确率。

5、参考文献

[1] Conditional Image Generation with PixelCNN Decoders

[2] Language Modeling with Gated Convolutional Networks

更多深度学习在NLP方面应用的经典论文、实践经验和最新消息,欢迎关注微信公众号深度学习与NLPDeepLearning_NLP”或扫描二维码添加关注。


这篇关于深度学习优化策略-4 基于Gate Mechanism的激活单元GTU、GLU的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/471816

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱