模型训练技巧——激活函数mish

代码地址:https://github.com/lessw2020/mish

1. mish的公式表达和曲线

   公式表达:Mish=x * tanh(ln(1+e^x))

   曲线表达,如下图所示:

Caption

2. mish的pytorch实现

class Mish(torch.nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        x = x * (torch.tanh(torch.nn.functional.softplus(x)))
        return x

  效果还不错,你也试试吧!

### Mish激活函数的非饱和梯度特性及其优点 #### 非饱和梯度特性 Mish激活函数是一种自正则化的非单调激活函数[^2],它的定义为 \( \text{Mish}(x) = x \cdot \tanh(\text{softplus}(x)) \),其中 softplus 函数表示 \( \text{softplus}(x) = \ln(1 + e^x) \)[^4]。由于其无上界的特性[^3],Mish 不会像某些传统激活函数(如 Sigmoid 或 Tanh)那样在输入较大或较小时导致梯度接近于零的现象,即所谓的“梯度饱和”。这种非饱和梯度特性使得网络能够在训练过程中保持较高的学习效率。 以下是具体解释: - **避免梯度消失**:对于传统的有界激活函数(如 Sigmoid 和 Tanh),当输入值过大或过小时,导数趋于零,从而引发梯度消失问题。而 Mish 的无上界设计使其能够有效缓解这一现象。 - **平滑过渡**:相比 ReLU 这样的分段线性函数,在负半轴上的导数值不为零的情况下,Mish 提供了一个更加平滑的变化曲线[^4]。这有助于优化器更稳定地更新参数,减少震荡并加速收敛。 #### 主要优点 1. **增强表达能力** - 通过引入非单调性以及复杂的数学形式,Mish 能够捕捉到数据分布中的更多细节特征。相比于单一方向增长的传统激活方式来说,它允许神经元输出既可能增加也可能减小,增加了模型灵活性。 2. **促进泛化性能** - 自正则化效应来源于 Mish 结构本身所具备的特定约束条件——即使是在高维空间里也能维持良好平衡状态下的探索行为模式。这意味着即便面对复杂任务场景时也无需额外依赖外部机制来控制过度拟合风险。 3. **提升训练稳定性与速度** - 平滑且连续可微的特点让反向传播算法更容易找到全局最优解路径。再加上前面提到过的防止梯度爆炸/消失的能力共同作用下,整体训练流程变得更加高效可靠。 ```python import numpy as np def mish(x): return x * np.tanh(np.log(1 + np.exp(x))) ``` 上述代码展示了如何简单实现 Mish 激活函数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值