GELU 激活函数

GELU 激活函数GaussianErro GELUS 论文链接 https arxiv org abs 1606 08415 最近在看 bert 源码 发现里边的激活函数不是 Relu 等常见的函数 是一个新的激活函数 GELUs 这里记录分析一下该激活函数的特点 不管其他领域的鄙视链 在激活函数领域 大家公式的鄙视链应该是 Elus amp amp gt Relu amp amp gt Sigmoid

Gaussian Error Linerar Units(GELUS)

不管其他领域的鄙视链,在激活函数领域,大家公式的鄙视链应该是:Elus > Relu > Sigmoid ,这些激活函数都有自身的缺陷, sigmoid容易饱和,Elus与Relu缺乏随机因素。

在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如dropout(随机置一些输出为0,其实也是一种变相的随机非线性激活), 而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的。

GELUs正是在激活中引入了随机正则的思想,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比Relus与ELUs都要好。

GELUs其实是 dropout、zoneout、Relus的综合,GELUs对于输入乘以一个0,1组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X, mask为m,则m服从一个伯努利分布( Φ ( x ) \Phi(x) Φ(x), Φ ( x ) = P ( X < = x ) , X 服 从 标 准 正 太 分 布 \Phi(x)=P(X<=x), X服从标准正太分布 Φ(x)=P(X<=x),X),这么选择是因为神经元的输入趋向于正太分布,这么设定使得当输入x减小的时候,输入会有一个更高的概率被dropout掉,这样的激活变换就会随机依赖于输入了。
数学表达如下:
G E L U ( x ) = x P ( X < = x ) = x Φ ( x ) GELU(x) = xP(X<=x) = x\Phi(x) GELU(x)=xP(X<=x)=xΦ(x)
这里 Φ ( x ) \Phi(x) Φ(x)是正太分布的概率函数,可以简单采用正太分布 N ( 0 , 1 ) \N(0,1) N(0,1), 要是觉得不刺激当然可以使用参数化的正太分布 N ( μ , σ ) \N(\mu,\sigma) N(μ,σ), 然后通过训练得到 μ , σ \mu,\sigma μ,σ






对于假设为标准正太分布的 G E L U ( x ) GELU(x) GELU(x), 论文中提供了近似计算的数学公式,如下:
G E L U ( x ) = 0.5 x ( 1 + t a n h [ 2 / π ( x + 0.044715 x 3 ) ] ) GELU(x) = 0.5x(1+tanh[\sqrt{2/\pi}(x+0.044715x^3)]) GELU(x)=0.5x(1+tanh[2/π
(x+
0.044715x3)])

翻看bert源码给出的GELU代码表示如下:




def gelu(input_tensor): cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0))) return input_tesnsor*cdf 

感觉bert源码中的近似计算更简单,具体怎么近似的,我猜不出来。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201410.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午9:27
下一篇 2026年3月20日 上午9:27


相关推荐

  • 导数定义考法一网打尽

    导数定义考法一网打尽1 全概率公式 2 贝叶斯公式 03 导数定义考法 1 导数的两种表示方法

    2026年3月17日
    2
  • attempted to return null from_unable to process jar entry

    attempted to return null from_unable to process jar entry**Springboot启动时报错Ifyouwantanembeddeddatabase(H2,HSQLorDerby),pleaseputitontheclasspath.**产生这个错误的原因是springboot的自动配置,如果你没有配置DataSource就会导致下图这个错误解决方案1@SpringBootApplication(exclude…

    2026年2月19日
    8
  • JAX-WS SOA杂谈

    JAX-WS SOA杂谈[b][size=medium]代码优先[/size][color=blue]先编写类,通过注解定义wsdl的各项属性,基于类来生成wsdl文件[/color][size=medium]契约优先[/size][color=blue]先制定标准,与其它系统一起定义一个统一的标准,实现系统之间数据传输的规范性,即先有wsdl再有类[/color][size=me…

    2022年7月15日
    16
  • Java中static的作用详解_Java中static变量作用和用法详解

    Java中static的作用详解_Java中static变量作用和用法详解Java中static变量作用和用法详解发布于2020-7-23|复制链接Java中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问.下面我们来详细了解一下吧前言static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Jav…

    2022年7月15日
    16
  • msfconsole攻击工具_服务器console接口是干嘛的

    msfconsole攻击工具_服务器console接口是干嘛的?Msfconsole工具概括:???Msfconsole简称(msf)是一款常用的渗透测试工具,包含了常见的漏洞利用模块和生成各种木马,方便于安全测试人员的使用.(1)进行端口扫描.(2)进行服务的扫描.(3)扫描3306(Mysql)端口的弱口令.(4)在msf模块里也可以使用nmap进行扫描.(5)扫描了服务器是用WinXP,然后对服务器进行渗透测试.

    2025年9月28日
    5
  • LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

    一、LVS简介    LVS(LinuxVirtualServer)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求…

    2022年4月5日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号