主要内容

gelu

应用高斯误差线性单元 (GELU) 激活

自 R2022b 起

    说明

    高斯误差线性单元 (GELU) 激活运算根据高斯分布下的概率对输入进行加权。

    该运算由下式给出

    GELU(x)=x2(1+erf(x2)),

    其中 erf 表示误差函数。

    注意

    此函数将 GELU 运算应用于 dlarray 数据。如果要在 dlnetwork 对象中应用 GELU 激活,请使用 geluLayer

    Y = gelu(X) 将 GELU 激活应用于输入数据 X

    示例

    Y = gelu(X,Approximation=method) 还指定了 GELU 运算的逼近方法。例如,Approximation="tanh" 指定底层误差函数的 tanh 逼近。

    示例

    全部折叠

    创建一个格式化的 dlarray 对象,其中包含一批(128 个)具有三个通道的 28×28 图像。指定格式 "SSCB"(空间、空间、通道、批量)。

    miniBatchSize = 128;
    inputSize = [28 28];
    numChannels = 3;
    X = rand(inputSize(1),inputSize(2),numChannels,miniBatchSize);
    X = dlarray(X,"SSCB");

    查看输入数据的大小和格式。

    size(X)
    ans = 1×4
    
        28    28     3   128
    
    
    dims(X)
    ans = 
    'SSCB'
    

    应用 GELU 激活。

    Y = gelu(X);

    查看输出的大小和格式。

    size(Y)
    ans = 1×4
    
        28    28     3   128
    
    
    dims(Y)
    ans = 
    'SSCB'
    

    输入参数

    全部折叠

    输入数据,指定为格式化或未格式化的 dlarray 对象。

    逼近方法,指定为下列值之一:

    • "none" - 不使用逼近。

    • "tanh" - 使用下式逼近底层误差函数

      erf(x2)tanh(2π(x+0.044715x3)).

    提示

    在 MATLAB® 中,计算 tanh 逼近通常不太准确,并且对于较大的输入大小,比不使用逼近计算 GELU 激活更慢。当需要重现使用此逼近的模型(例如 BERT 和 GPT-2)时,请使用 tanh 逼近。

    输出参量

    全部折叠

    GELU 激活,以 dlarray 形式返回。输出 Y 与输入 X 具有相同的基础数据类型。

    如果输入数据 X 是格式化的 dlarray 对象,则 YX 具有相同的维度格式。如果输入数据不是格式化的 dlarray 对象,则 Y 是未格式化的 dlarray 对象,其维度顺序与输入数据相同。

    算法

    全部折叠

    参考

    [1] Hendrycks, Dan, and Kevin Gimpel. "Gaussian error linear units (GELUs)." Preprint, submitted June 27, 2016. https://arxiv.org/abs/1606.08415

    扩展功能

    全部展开

    版本历史记录

    在 R2022b 中推出