神经网络常见激活函数 14-Mish函数

文章目录

    • Mish
      • 函数+导函数
      • 函数和导函数图像
      • 优缺点
      • PyTorch 中的 Mish 函数
      • TensorFlow 中的 Mish 函数

Mish

  • 论文

    https://arxiv.org/pdf/1908.08681

函数+导函数

  • Mish函数
    Mish(x)=x⋅tanh⁡⁣(softplus(x))=x⋅tanh⁡⁣(ln⁡⁣(1+ex))\begin{aligned} \text{Mish}(x) &= x \cdot \tanh\!\bigl(\text{softplus}(x)\bigr) \\ &= x \cdot \tanh\!\Bigl(\ln\!\bigl(1+e^{x}\bigr)\Bigr) \end{aligned} Mish(x)=xtanh(softplus(x))=xtanh(ln(1+ex))

  • Mish函数导数

    已知:
    $$
    \frac{d}{dx}\tanh(x) =1- \rm tanh ^2(x) \[2mm]

    \frac{d}{dx}\operatorname{Softplus}(x)=\sigma(x)=\frac{1}{1+e^{-x}}
    $$
    参考:

    神经网络常见激活函数 2-tanh函数(双曲正切)

    则:
    $$
    \begin{aligned}
    \frac{\mathrm{d}}{\mathrm{d}x}\text{Mish}(x)
    &= x \cdot \tanh!\Bigl(\ln!\bigl(1+e^{x}\bigr)\Bigr)\

    &=\frac{\mathrm{d}}{\mathrm{d}x}x\cdot\tanh\bigl(\ln(1+e^{x})\bigr) + x \cdot \frac{\mathrm{d}}{\mathrm{d}x}\tanh\bigl(\ln(1+e^{x})\bigr) \[2mm]

    &=\tanh\bigl(\ln(1+e^{x})\bigr) + x \cdot\bigl(1-\tanh2(\ln(1+e{x})\bigr)\cdot\frac{1}{1+e^{-x}}\
    &=\tanh\bigl(\ln(1+e^{x})\bigr) + x \cdot\bigl(1-\tanh2(\ln(1+e{x})\bigr)\cdot\sigma(x)
    \end{aligned}
    $$


函数和导函数图像

  • 画图

    import numpy as np
    from matplotlib import pyplot as pltdef mish(x):"""Mish(x) = x * tanh(softplus(x))"""sp = np.log(1 + np.exp(x))          # softplus(x)return x * np.tanh(sp)def mish_derivative(x):"""Mish'(x) = tanh(softplus(x)) + x * (1 - tanh²(softplus(x))) * sigmoid(x)"""sp = np.log(1 + np.exp(x))          # softplus(x)t  = np.tanh(sp)                    # tanh(softplus(x))s  = 1 / (1 + np.exp(-x))           # sigmoid(x)return t + x  * (1 - t ** 2) * sx = np.linspace(-4, 4, 1000)
    y = mish(x)
    y1 = mish_derivative(x)plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label='Mish')
    plt.plot(x, y1, label='Derivative', linestyle='--')
    plt.title('Mish Activation Function and its Derivative')ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))plt.legend(loc='upper left')
    plt.savefig('./mish.jpg',dpi=300)
    plt.show()
    

    mish


优缺点

  • Mish 的优点

    1. 平滑无断点:Mish 函数在整个实数域内连续可导,有助于稳定的梯度流,缓解梯度消失问题。
    2. 非单调性:负半轴有一段“下凹再回升”的曲线,有助于梯度流动,提升网络的表达能力。
    3. 无上界正值:正值部分无饱和区,避免梯度消失,适合深层网络,有有下界(≈ −0.31)。
    4. 实验性能:在 ImageNet、COCO 等多个基准上,Mish 常优于 ReLU、Swish 等激活函数。(并非绝对)
  • Mish 的缺点

    1. 计算开销大:相比 ReLU,需要额外计算 softplus、tanh 与乘法,推理延迟略高。
    2. 显存占用:反向传播需缓存中间结果,显存开销高于 ReLU。
    3. 并非万能:在某些轻量级或实时任务中,性能提升可能无法抵消额外计算成本,需要实验验证。

PyTorch 中的 Mish 函数

  • 代码

    import torch
    import torch.nn.functional as F# 固定随机种子
    torch.manual_seed(1024)      # CPU
    if torch.cuda.is_available():torch.cuda.manual_seed_all(42)   # GPU,如果有x = torch.randn(2,dtype=torch.float32)
    mish_x = mish(x)print(f"x:\n{x}")
    print(f"mish_x:\n{mish_x}")
    """输出示例"""
    x:
    tensor([-1.4837,  0.2671])
    mish_x:
    [-0.29912564  0.18258688]
    

TensorFlow 中的 Mish 函数

  • 环境

    python: 3.10.9
    tensorflow: 2.19.0

  • 代码

    import tensorflow as tfdef mish(x):return x * tf.math.tanh(tf.math.softplus(x))# 生成随机张量
    x = tf.constant([-1.4837, 0.2671], dtype=tf.float32)
    mish_x = mish(x)print(f"x:\n{x.numpy()}")
    print(f"mish_x:\n{mish_x.numpy()}")"""输出示例"""
    x:
    [-1.4837  0.2671]
    mish_x:
    [-0.29912373  0.18255362]
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914881.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LAMP迁移LNMP Nginx多站点配置全流程

文章目录前言备份与停止服务nginx安装与配置nginx 编译安装配置服务php-fpm多站点配置phf-fpm介绍多站点配置nginx 多站点配置nginx ssl 配置参考前言 之前服务器使用的是 LAMP环境,想充分利用服务器资源,再运行另外一个站点 在LAMP环境下应该是也可以…

Nginx屏蔽国外IP访问

下载IP列表 # 下载到文件 wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest # 直接输出到终端 curl -sSL https://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest得到一份国内IP配置 # 原始IP列表格式:apnic|CN|ipv4|218.78.0.0|1310…

stl-string模拟

1.介绍主要进行cpp中string的模拟,方便我们更好的对stl进行使用,string没有模板,我们将头文件和函数写在两个不同的文件2.头文件3.cpp文件如有问题,欢迎纠正!

基于MATLAB的极限学习机ELM的数据回归预测方法应用

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取 或者私信获取。 1.项目背景 在当今的数据驱动时代,准确且高效的预测模型对于解决复杂问题至关重要。极限学习机&#…

芯谷科技--双四通道模拟/数字多路复用器74HC4052

在电子系统中,信号的多路复用与解复用是常见的需求,特别是在需要对多个信号源进行选择和切换的场景中。芯谷科技推出的 74HC4052 双四通道模拟/数字多路复用器/解复用器,以其高效、灵活的设计,为工程师提供了可靠的解决方案。产品…

基于MATLAB的极限学习机ELM的数据分类预测方法应用

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取 或者私信获取。 1.项目背景 在现代数据挖掘与机器学习领域,面对日益复杂的数据结构和快速增长的数据量,开…

复合机器人在生物制药实验室上下料搬运案例

在医疗行业的物料搬运环节,传统的人工操作模式逐渐暴露出诸多弊端,成为制约企业发展的瓶颈。富唯智能通过引入先进的复合机器人技术,为医疗企业提供了高效、智能的上下料搬运解决方案,助力医疗行业实现自动化与智能化升级。​客户…

嵌入式学习-PyTorch(7)-day23

损失函数的调用import torch from torch import nn from torch.nn import L1Lossinputs torch.tensor([1.0,2.0,3.0]) target torch.tensor([1.0,2.0,5.0])inputs torch.reshape(inputs, (1, 1, 1, 3)) target torch.reshape(target, (1, 1, 1, 3)) #损失函数 loss L1Loss…

用 Ray 跨节点调用 GPU 部署 DeepSeek 大模型,实现分布式高效推理

在大模型时代,单节点 GPU 资源往往难以满足大模型(如 7B/13B 参数模型)的部署需求。借助 Ray 分布式框架,我们可以轻松实现跨节点 GPU 资源调度,让大模型在多节点间高效运行。本文将以 DeepSeek-llm-7B-Chat 模型为例&…

快速了解 HTTPS

1. 引入 在 HTTP 协议 章节的 reference 段,曾提到过 HTTPS。这里对HTTPS进行详细介绍。 HTTPS 是在 HTTP 的基础上,引入了一个加密层 (SSL)。HTTP 是明文传输的 (不安全)。当下所见到的大部分网站都是 HTTPS 的。 起初是拜运营商劫持所赐(…

mysql备份与视图

要求:1.将mydb9_stusys数据库下的student、sc 和course表,备份到本地主机保存为st_msg_bak.sql文件,然后将数据表恢复到自建的db_test数据库中;2.在db_test数据库创建一视图 stu_info,查询全体学生的姓名,性别,课程名&…

【数据结构】 链表 + 手动实现单链表和双链表的接口(图文并茂附完整源码)

文章目录 一、 链表的概念及结构 二、链表的分类 ​编辑 三、手动实现单链表 1、定义单链表的一个节点 2、打印单链表 3、创建新节点 4、单链表的尾插 5、单链表的头插 6、单链表的尾删 7、单链表的头删 8、单链表的查找 9、在指定位置之前插入一个新节点 10、在指…

Go语言时间控制:定时器技术详细指南

1. 定时器基础:从 time.Sleep 到 time.Timer 的进化为什么 time.Sleep 不够好?在 Go 编程中,很多人初学时会用 time.Sleep 来实现时间控制。比如,想让程序暂停 2 秒,代码可能是这样:package mainimport (&q…

C# 转换(显式转换和强制转换)

显式转换和强制转换 如果要把短类型转换为长类型,让长类型保存短类型的所有位很简单。然而,在其他情况下, 目标类型也许无法在不损失数据的情况下容纳源值。 例如,假设我们希望把ushort值转化为byte。 ushort可以保存任何0~65535的…

浅谈自动化设计最常用的三款软件catia,eplan,autocad

笔者从上半年开始接触这三款软件,掌握了基础用法,但是过了一段时间不用,发现再次用,遇到的问题短时间解决不了,忘记的有点多,这里记录一下,防止下次忘记Elpan:问题1QF01是柜安装板上的一个部件&…

网络编程7.17

练习&#xff1a;服务器&#xff1a;#include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include &…

c++ 模板元编程

听说模板元编程能在编译时计算出常量&#xff0c;简单测试下看看&#xff1a;template<int N> struct Summation {static constexpr int value N Summation<N - 1>::value; // 计算 1 2 ... N 的值 };template<> struct Summation<1> { // 递归终…

【深度学习】神经网络过拟合与欠拟合-part5

八、过拟合与欠拟合训练深层神经网络时&#xff0c;由于模型参数较多&#xff0c;数据不足的时候容易过拟合&#xff0c;正则化技术就是防止过拟合&#xff0c;提升模型的泛化能力和鲁棒性 &#xff08;对新数据表现良好 对异常数据表现良好&#xff09;1、概念1.1过拟合在训练…

JavaScript的“硬件窥探术”:浏览器如何读取你的设备信息?

JavaScript的“硬件窥探术”&#xff1a;浏览器如何读取你的设备信息&#xff1f; 在Web开发的世界里&#xff0c;JavaScript一直扮演着“幕后魔术师”的角色。从简单的页面跳转到复杂的实时数据处理&#xff0c;它似乎总能用最轻巧的方式解决最棘手的问题。但你是否想过&#…

论安全架构设计(层次)

安全架构设计&#xff08;层次&#xff09; 摘要 2021年4月&#xff0c;我有幸参与了某保险公司的“优车险”项目的建设开发工作&#xff0c;该系统以车险报价、车险投保和报案理赔为核心功能&#xff0c;同时实现了年检代办、道路救援、一键挪车等增值服务功能。在本项目中&a…