跳转至

1.激活函数

ReLU

ReLU(x)=(x)+=max(0,x)

alt text

  • Dying ReLU 问题:如果一部分神经元输入为负数,那么输出一直为0,输出为0则无法被反向传播(因为无法求得导),所以这部分神经元就死掉了。

ReLU 变种

Leaky ReLU

LeakyReLU(x)={x, if x0 negative_slope ×x, otherwise 

LeakyReluPic

  • 解决了Dying ReLU 问题。

PReLU

Leaky RelU的小于零部分的斜率可以学习。

f(x)={xif x>0αixif x0

ELU

  • 输出均值接近0,且对噪音稳定。
  • 但是计算比较慢,有超参数。
f(x)={xif x>0α(exp(x)1)if x0

alt text

SELU

在特定条件下,实现自归一化。避免梯度消失/爆炸,可以训练非常深的网络。

f(x)=λ{xif x>0α(exp(x)1)if x0

alt text

SiLU

即x乘上一个sigmoid函数。

f(x)=xσ(x)=x1+exp(x)

alt text

GELU

关键在于高斯分布的累积分布函数(CDF)。利用GELU(x)=xΦ(x) alt text

Sigmoid

σ(x)=11+ex

SigmoidPic

  • 当使用Sigmoid激活函数时,反向传播过程中会出现"梯度消失"。Sigmoid函数在输入值较大或较小时,其导数接近于0。当我们计算误差从输出层向输入层传播时,每经过一层都要乘以该层激活函数的导数。如果网络层数很多,这些小于1的导数值会不断相乘,导致最终传递到前面层的梯度变得极小,几乎为零。这使得它们的权重几乎不会更新,网络前面的层几乎无法学习。
  • 此外,函数不是以零为中心的,这会导致训练过程中的收敛速度较慢。由于上一层sigmoid出来都是正数,所以在反向传播时,权重只能同加同减。

    假设当前权重是 (w1, w2) = (1, 1)。而理想的最优权重是(w1_opt, w2_opt) = (3, -1)。且梯度更新规则不允许在一个步骤中同时增大 w1和减小w2,所以迭代次数需要很多次。

tanh

tanh(x)=exexex+ex

alt text

  • 与Sigmoid相比,它是以零为中心,所以可以加快收敛速度
  • 能稍稍缓解梯度消失,但是消除不了

Softmax

非线性,但是所有概率都在0,1之间,且总和为1。

  • 多类别分类问题:作为神经网络的最后一层,将原始得分转换为各类别的概率分布
  • 注意力机制:在注意力计算中,用于将相关性分数转换为权重
Softmax(xi)=exp(xi)jexp(xj)

Softmin

距离或成本最小化:当需要基于距离或成本进行软选择时,Softmin 可以赋予较小值更高的权重

Softmax(xi)=exp(-xi)jexp(-xj)

LogSoftmax

在反向传播时,LogSoftmax往往更加稳定。

LogSoftmax(xi)=log(exp(xi)jexp(xj))