当前位置: 首页 > article >正文

神经网络常见激活函数 12-Swish函数

Swish

函数+导函数

  • Swish函数
    S w i s h ( x ) = x ⋅ σ ( β x ) = x 1 + e − β x \begin{aligned} \rm Swish(x) &= x \cdot \sigma(\beta x) \\ &= \frac{x}{1 + e^{-\beta x}} \end{aligned} Swish(x)=xσ(βx)=1+eβxx
  • Swish函数导数
    d d x S w i s h = ( x ⋅ σ ( β x ) ) ′ = σ ( β x ) + x ⋅ ( σ ( β x ) ) ′ ∵ σ ′ ( u ) = σ ( u ) ( 1 − σ ( u ) ) ∴ = σ ( β x ) + β x ⋅ σ ( β x ) ⋅ ( 1 − σ ( β x ) ) = 1 + e − β x + β x e − β x ( 1 + e − β x ) 2 \begin{aligned} \frac{d}{dx} \rm Swish &= \left(x \cdot\sigma(\beta x) \right)' \\ &=\sigma(\beta x) + x\cdot \left(\sigma(\beta x) \right)'\\ \quad \\ \because &\quad \sigma'(u)= \sigma(u)(1-\sigma(u)) \\ \quad \\ \therefore &=\sigma(\beta x) + \beta x \cdot \sigma(\beta x) \cdot (1 - \sigma(\beta x)) \\ &= \frac{1 + e^{-\beta x} + \beta x e^{-\beta x}}{(1 + e^{-\beta x})^2} \end{aligned} dxdSwish=(xσ(βx))=σ(βx)+x(σ(βx))σ(u)=σ(u)(1σ(u))=σ(βx)+βxσ(βx)(1σ(βx))=(1+eβx)21+eβx+βxeβx
    其中, σ ( ⋅ ) \sigma(\cdot) σ() 是 sigmoid 函数, β \beta β 是一个可学习的参数或固定的超参数,控制着函数的形状。


函数和导函数图像

  • 画图

    import numpy as np
    from matplotlib import pyplot as plt
    
    # 定义 Swish 函数
    def swish(x, beta=1.0):
        return x * (1 / (1 + np.exp(-beta * x)))
    
    # 定义 Swish 的导数
    def swish_derivative(x, beta=1.0):
        sigmoid = 1 / (1 + np.exp(-beta * x))
        return sigmoid * (1 + x * beta * (1 - sigmoid))
    
    # 生成数据
    x = np.linspace(-5, 5, 1000)
    beta = 1.0  # 可以调整 beta 的值
    y = swish(x, beta)
    y1 = swish_derivative(x, beta)
    
    # 绘制图形
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label=f'Swish (β={beta})')
    plt.plot(x, y1, label='Derivative')
    plt.title(f'Swish (β={beta}) and Derivative')
    
    # 设置上边和右边无边框
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    
    # 设置 x 坐标刻度数字或名称的位置
    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=2)
    plt.savefig('./swish.jpg')
    plt.show()
    

    swish


优缺点

  • Swish 函数的优点
    1. 非单调性:Swish 是一个非单调函数,这使得它在负输入时仍然可以保持小梯度,同时在正输入时能够有效激活。
    2. 自适应性:Swish 是一个自适应激活函数,能够根据输入动态调整输出,这有助于改善优化和泛化。
    3. 性能优势:在某些深度学习模型中,Swish 已经被证明比 ReLU 及其变体表现更好,尤其是在深层网络中。
    4. 平滑过渡:Swish 函数在整个定义域上是平滑的,这有助于避免梯度消失问题,同时提供更稳定的梯度流动。
  • Swish 的缺点
    1. 计算复杂度高:与 ReLU 相比,Swish 的计算成本更高,因为它涉及到 sigmoid 函数的计算。
    2. 训练时间增加:由于计算复杂度的增加,Swish 可能会导致训练时间变长。
    3. 适用性有限:虽然 Swish 在某些任务中表现出色,但并非所有任务都能从中受益。需要根据具体任务和数据集进行实验和调整。
    4. Swish 函数是一种较新的激活函数,其非单调性和自适应性使其在某些深度学习模型中表现优异,尤其是在深层网络中。然而,其计算复杂度较高,可能会增加训练时间,因此在实际应用中需要根据具体任务进行权衡和选择。

pytorch中的Swish函数

  • 代码

    import torch
    import torch.nn.functional as F
    
    # 定义 Swish 函数
    def swish(x,beta=1):
        return x * torch.sigmoid(beta*x)
    
    x = torch.randn(2)  # 生成一个随机张量作为输入
    
    swish_x = swish(x,beta=1)  # 应用 Swish 函数
    
    print(f"x: \n{x}")
    print(f"swish_x:\n{swish_x}")
    
    """输出"""
    x: 
    tensor([ 1.3991, -0.1989])
    swish_x:
    tensor([ 1.1221, -0.0896])
    

tensorflow 中的Swish函数

  • 代码

    python: 3.10.9

    tensorflow: 2.18.0

    import tensorflow as tf
    
    # 创建 SWISH 激活函数
    swish = tf.keras.activations.swish
    
    # 生成随机输入
    # x = tf.random.normal([2])
    x = [ 1.3991, -0.1989]
    
    # 应用 SWISH 激活函数
    beta = 1
    swish_x = swish(beta*x)
    
    print(f"x: \n{x}")
    print(f"swish_x:\n{swish_x}")
    
    """输出"""
    x: 
    [1.3991, -0.1989]
    swish_x:
    [ 1.1221356  -0.08959218]
    


http://www.kler.cn/a/547708.html

相关文章:

  • 游戏引擎学习第104天
  • Nacos 详细介绍:微服务架构中的服务发现与配置管理利器
  • 用大模型学大模型04-机器学习建模过程
  • 基于单片机的常规肺活量SVC简单计算
  • DeepSeek官方推荐的AI集成系统
  • python股票分析系统部署操作过程及代码实现
  • Java 大视界 -- 全球数据治理格局下 Java 大数据的发展路径(89)
  • C++中常用的十大排序方法之3——插入排序
  • C++ 设计模式-组合模式
  • 【vue3】实现pdf在线预览的几种方式
  • 【实战篇】DeepSeek全自动视频工厂搭建指南
  • CAS单点登录(第7版)19.监控和统计
  • 华为OD最新机试真题-投骰子问题-Java-OD统一考试(E卷)
  • DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”
  • Typescript 【详解】配置文件 tsconfig.json
  • 【第6章:强化学习基础与深度强化学习—6.4 强化学习在游戏、自动驾驶等领域的应用案例】
  • 无人机雨季应急救灾技术详解
  • 智慧城市V4系统小程序源码独立版全插件全开源
  • Day45(补)【软考】2022年下半年软考软件设计师综合知识真题-计算机软件知识1
  • Sass更新:@import——>@use