深度学习常见概念解释(三)——激活函数定义,作用与种类(附公式,求导,图像和代码)

前言

在深度学习中,激活函数是神经网络中的一个关键组件,起着引入非线性因素的作用,从而增加神经网络的表达能力和拟合复杂函数的能力。在神经网络中,每个神经元接收来自上一层神经元的输入,并对这些输入进行加权求和,然后将结果输入到激活函数中。激活函数对加权求和的结果进行变换,输出给下一层神经元。通过激活函数,神经网络可以学习和表示数据中的非线性关系,使得其在处理图像、语音、自然语言等复杂任务时表现出色。本文将详细介绍激活函数的定义、作用及其种类,并通过具体例子和代码实现展示每种激活函数的性质和导数。

作用

  1. 引入非线性:激活函数引入了非线性因素,使得神经网络可以学习和表示非线性关系。如果没有激活函数,多层神经网络就变成了单一的线性变换,无法拟合复杂的数据分布和模式。

  2. 实现分段线性变换:一些激活函数(如ReLU)可以实现分段线性变换,使得神经网络能够学习到不同区间内的不同线性关系,提高了网络的灵活性和表达能力。

  3. 去除数据的线性相关性:激活函数可以打破输入数据的线性相关性,使得神经网络可以学习到更复杂的特征和模式,提高了网络的泛化能力。

  4. 限制输出范围:某些激活函数(如Sigmoid和Tanh)可以将神经元的输出限制在一个特定的范围内(如0到1或-1到1),有助于控制神经元输出的幅度。

总的来说,激活函数在神经网络中扮演着非常重要的角色,通过引入非线性,增强了网络的表达能力,使得神经网络可以更好地拟合复杂的数据分布和模式。

激活函数种类

目前深度学习中常用的激活函数有以下几种:

1. ReLU (Rectified Linear Unit)

ReLU函数将所有负值都设为零,保持正值不变。优点是计算简单且有效,但可能导致神经元输出稀疏性,且在负值区域不具备梯度。

  • 公式
    ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
  • 激活函数图像
    在这里插入图片描述
  • 导数公式
    ReLU ′ ( x ) = { 1 , if  x > 0 0 , if  x ≤ 0 \text{ReLU}'(x) = \begin{cases} 1, & \text{if } x > 0 \\ 0, & \text{if } x \leq 0 \end{cases} ReLU(x)={ 1,0,if x>0if x0ReLU 函数在不同区间上的导数是不一样的。
  • 求导后的图像
    在这里插入图片描述
  • 特点
    计算简单且有效,但可能导致神经元输出稀疏性,且在负值区域不具备梯度。
  • Python 代码实现图像
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 定义输入范围
    x = np.linspace(-10, 10, 400)
    
    # 计算 ReLU 激活函数值
    y = np.maximum(0, x)
    
    # 绘制 ReLU 激活函数图像
    plt.plot(x, y, label="ReLU")
    plt.title("ReLU Activation Function")
    plt.xlabel("x")
    plt.ylabel("ReLU(x)")
    plt.legend()
    plt.grid(True)
    plt.show()
    
    # 计算 ReLU 激活函数的导数值
    y_prime = np.where(x > 0, 1, 0)
    
    # 绘制 ReLU 激活函数导数图像
    plt.plot(x, y_prime, label="ReLU Derivative")
    plt.title("Derivative of ReLU Activation Function")
    plt.xlabel("x")
    plt.ylabel("ReLU'(x)")
    plt.legend()
    plt.grid(True)
    plt.show()
    

2. Leaky ReLU

为了解决ReLU在负值区域没有梯度的问题,Leaky ReLU引入了一个小的斜率(通常很小,如0.01)以保证负值区域也有梯度。

  • 公式
    f ( x ) = { x , if  x > 0 a x , otherwise f(x) = \begin{cases} x, & \text{if } x > 0 \\ ax, & \text{otherwise} \end{cases} f(x)={ x,ax,if x>0otherwise
    其中 a 是一个小的正数(例如 0.01),用于控制负值区域的斜率。
  • 激活函数图像在这里插入图片描述- 求导公式
    f ′ ( x ) = { 1 if  x ≥ 0 α if  x < 0 f'(x) = \begin{cases} 1 & \text{if } x \geq 0 \\ \alpha & \text{if } x < 0 \end{cases} f(x)={ 1αif x0if x<0
  • 求导后的图像
    在这里插入图片描述
  • Python 代码实现图像
    import matplotlib.pyplot as plt
    import numpy as np
    
    def leaky_relu(x, alpha=0.01):
        return np.where(x >= 0, x, alpha * x)
    
    x = np.linspace(-10, 10, 400)
    y = leaky_relu(x)
    
    plt.plot(x, y, label="Leaky ReLU")
    plt.title("Leaky ReLU Activation Function")
    plt.xlabel("x")
    plt.ylabel("f(x)")
    plt.legend(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值