饱和函数

饱和函数是一种特殊类型的函数,当输入达到某个特定的值后,函数的输出将不再随输入的增加而增加,即输出达到最大或最小值并保持不变。在神经网络中,激活函数常常采用饱和函数来避免梯度消失的问题,增强网络的表示能力和拟合性能。

饱和函数的特点:

  1. 右饱和 :当输入值趋近于正无穷时,函数值趋近于0。

  2. 左饱和 :当输入值趋近于负无穷时,函数值趋近于0。

  3. 硬饱和 :存在一个常数c,当输入值大于c时,函数导数为0。

  4. 软饱和 :存在一个常数c,当输入值大于c时,函数导数趋近于0;当输入值小于c时,函数导数不趋于0。

常见的饱和函数:

  • Sigmoid函数h(x) = 1 / (1 + e^(-x))

  • 双曲正切函数(Tanh)h(x) = tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

  • ReLU函数h(x) = max(0, x)

  • Leaky ReLUh(x) = max(αx, x),其中α是一个小的正数。

饱和函数的应用:

  • 在神经网络中作为激活函数,增加网络的非线性表达能力。

  • 在控制系统中,如滑模控制,用于限制系统状态的变化范围。

饱和函数的构造示例(MATLAB):

function M = sat(x, k)
    d = abs(x / k);
    if d <= 1
        M = x / k;
    else
        M = sign(x / k);
    end
end

这个函数接受输入x和比例常数k,当x的绝对值小于或等于k时,输出为x / k,否则输出为x / k的符号。

注意事项:

  • 饱和函数可能导致梯度消失,这在深度神经网络训练中是一个问题。

  • 在设计神经网络时,选择合适的激活函数对网络性能至关重要。

Top