下载
中文
注册

ActivationOperation

功能描述

激活函数,可以引入非线性因素。

图1 ActivationOperation

定义

struct ActivationParam {
    enum GeLUMode : int{
        TANH_MODE = 0,
        NONE_MODE,
    };
    ActivationType activationType=ACTIVATION_UNDEFINED;
    float scale = 1.0f; // for Swish
    int32_t dim = -1;   // for Swiglu
    GeLUMode geluMode = TANH_MODE;
};

参数列表

成员名称

类型

默认值

描述

activationType

ActivationType

ACTIVATION_UNDEFINED

激活类型。

  • ACTIVATION_UNDEFINED: 未定义。
  • ACTIVATION_RELU: RELU激活类型。
  • ACTIVATION_GELU: GELU激活类型。
  • ACTIVATION_FAST_GELU: 快速运算的Gelu激活类型。
  • ACTIVATION_SWISH: SWISH激活类型。
  • ACTIVATION_LOG: LOG激活类型。
  • ACTIVATION_SWIGLU_FORWARD: Swiglu正向激活函数。
  • ACTIVATION_SWIGLU_BACKWARD: Swiglu_forward反向激活函数,求梯度时使用。
  • ACTIVATION_SIGMOID: Sigmoid激活类型。
  • ACTIVATION_MAX: 枚举最大值, 非激活类型

scale

float

1.0f

Swish激活函数中的缩放系数

dim

int32_t

-1

Swiglu正反向激活函数使用, 延最后一维切分。

geluMode

GeLUMode

TANH_MODE

Gelu模型选择

  • TANH_MODE: Tanh近似计算
  • NONE_MODE: 非近似计算

RELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float

ND

输出

和输入维度/类型/格式相同。

FAST_GELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16

ND

输出

和输入维度/类型/格式相同。

LOG激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/float

ND

输出

和输入维度/类型/格式相同。

SIGMOID激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输出

和输入维度/类型/格式相同。

SWISH激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输入

output

[dim_0,dim_1,... ,dim_n]

float16/bf16

ND

输出

和输入维度/类型/格式相同。

GELU激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输入

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输出

和输入维度/类型/格式相同。

SWIGLU_FORWARD激活类型输入输出描述

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输入

“activationType”为ACTIVATION_SWIGLU_FORWARD时:对于 Atlas 推理系列产品 ,最后一维需为32的倍数。

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND/NZ

输出

和输入维度/类型/格式相同,其dim维所对应的大小是输入的一半。

SWIGLU_BACKWARD激活类型输入输出描述

参数

维度

数据类型

格式

描述

x1

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

“activationType”为ACTIVATION_SWIGLU_BACKWARD时,不支持 Atlas 推理系列产品

x2

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

输入

和x1的维度/类型/格式相同,其dim维所对应的大小是输入x1的2倍。

output

[dim_0,dim_1,... ,dim_n]

float16/float/bf16

ND

输出

和x1的维度/类型/格式相同,其dim维所对应的大小是输入x1的2倍。

规格约束

激活函数类型请参考ActivationType

RELU激活类型功能

  • 使用参数

    activationType = ACTIVATION_RELU

  • 函数图

  • 表达式

GELU激活类型功能

  • Tanh近似计算
    • 使用参数
      • activationType = ACTIVATION_GELU
      • geluMode = TANH_MODE
    • 函数图

    • 表达式

  • 非近似计算
    • 使用参数
      • activationType = ACTIVATION_GELU
      • geluMode = NONE_MODE
    • 函数图

    • 表达式

      是高斯分布的累积分布函数

FAST_GELU激活类型功能

  • 使用参数

    activationType = ACTIVATION_FAST_GELU

  • 函数图

  • 表达式

SWISH激活类型功能

  • 使用参数
    • activationType = ACTIVATION_SWISH
    • scale
  • 函数图

    跟所输入的参数scale有关,当scale=1时

  • 表达式

LOG激活类型功能

  • 使用参数

    activationType = ACTIVATION_LOG

  • 表达式

SWIGLU_FORWARD激活类型功能

对于 Atlas 推理系列产品 ,仅支持32位对齐的数据。

  • 使用参数
    • activationType = ACTIVATION_SWIGLU_FORWARD
    • dim
  • 表达式

    a, b为对输入tensor延最后一维进行均分。

SWIGLU_BACKWARD激活类型功能

当前仅支持 Atlas 800I A2 推理产品 / Atlas A2 训练系列产品

  • 使用参数
    • activationType = ACTIVATION_SWIGLU_BACKWARD
    • dim
  • 表达式

    x1为输入tensor1

    x2为输入tensor2

    a,b为对x2延最后一维进行均分

SIDMOD激活类型功能

  • 使用参数

    activationType = ACTIVATION_SIGMOID

  • 函数图

  • 表达式