激活函数的目标是为网络引入非线性,并使其能够学习并迫近复杂的数据模式
二、介绍GLU(Gated Linear Unit)
GLU:将输入分成两部分,一部分直接颠末线性变动,另一部分颠末 s i g m o i d sigmoid sigmoid 函数变动,然后将这两部分的输出逐点相乘
G L U ( x , W , V , B , c ) = σ ( x W + b ) ⊗ ( x V + c ) GLU(x, W, V, B, c) = \sigma (xW + b) \otimes (xV + c) GLU(x,W,V,B,c)=σ(xW+b)⊗(xV+c)
$ \sigma $ 是 $ sigmoid $ 激活函数
$ W, V $ 权重
$ b, c $ 偏置
绘制GLU激活函数
import torch
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pyplot as plt
# 定义GLU激活函数
class GLU(nn.Module):
def forward(self, x):
a, b = x.chunk(2, dim=-1)
print('a:', a, 'b:', b)
return a * F.sigmoid(b) # 应用sigmoid函数然后进行逐元素乘法(权重和偏置为1)
$ SwiGLU $ 是 $ GLU $ 的一种变体,其中包含了 G L U GLU GLU 和 S w i s h Swish Swish 激活函数。
S w i s h β ( x ) = x σ ( β x ) Swish_{\beta}(x) = x \sigma(\beta x) Swishβ(x)=xσ(βx)
将 G L U GLU GLU 中的激活函数 s i g m o i d sigmoid sigmoid 改为 S w i s h Swish Swish 就是 S w i G L U SwiGLU SwiGLU 激活函数。
S w i G L U ( x , W , V , B , c ) = S w i s h β ( x W + b ) ⊗ ( x V + c ) SwiGLU(x, W, V, B, c) = Swish_\beta(xW + b) \otimes (xV + c) SwiGLU(x,W,V,B,c)=Swishβ(xW+b)⊗(xV+c)