【经验总结】训练模型常用的激活函数

1. 简介

激活函数是一种非线性函数,应用于神经网络的每个神经元上。它的作用是引入非线性映射,使神经网络能够学习和表示复杂的函数关系。激活函数能够增加网络的表达能力,解决线性不可分问题,并提取数据的高级特征和抽象表示,从而提高模型的拟合能力和学习能力。简而言之,激活函数使神经网络能够更好地适应复杂的任务和数据模式。

2. 常用的激活函数

2.1 Sigmoid函数

Sigmoid函数将输入的实数值映射到一个介于0和1之间的输出。它在前向传播过程中具有平滑的激活特性,通常用于二分类问题或需要将输出限制在概率范围内的情况。

2.1.1 数学公式

Sigmoid(x) = 1 / (1 + exp(-x))

2.1.2 代码

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.title('Sigmoid Function')
plt.grid(True)
plt.show()

2.1.2 图片

在这里插入图片描述

2.2 ReLU函数

ReLU函数(Rectified Linear Unit)在输入大于0时返回输入值,而在输入小于等于0时返回0。ReLU函数具有简单的计算和导数计算,可以在许多深度学习模型中使用。

2.2.1 数学公式

ReLU(x) = max(0, x)

2.2.2 代码

import numpy as np
import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-10, 10, 100)
y = relu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.title('ReLU Function')
plt.grid(True)
plt.show()

2.2.2 图片

在这里插入图片描述

2.3 Leaky ReLU函数

Leaky ReLU函数是ReLU函数的变种,在输入小于0时引入一个小的斜率,以解决ReLU函数中可能出现的死亡神经元问题。Leaky ReLU函数在负数区域具有非零梯度,可以在一定程度上避免梯度消失的问题。

2.3.1 数学公式

LeakyReLU(x) = max(0.01x, x)
其中,0.01是一个小的斜率(或称为Leak)

2.3.2 代码

import numpy as np
import matplotlib.pyplot as plt

def leaky_relu(x):
    return np.maximum(0.01 * x, x)

x = np.linspace(-10, 10, 100)
y = leaky_relu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Leaky ReLU(x)')
plt.title('Leaky ReLU Function')
plt.grid(True)
plt.show()

2.3.3 图片

在这里插入图片描述

2.4 ELU函数

ELU函数(Exponential Linear Unit)在输入小于0时引入一个小的斜率,同时在输入大于等于0时返回输入值。ELU函数在负数区域具有非零梯度,可以在一定程度上缓解梯度消失的问题。

2.4.1 数学公式

ELU(x) = { x, x >= 0; alpha * (exp(x) - 1), x < 0 }
其中,alpha是一个可调参数,用于控制负数区域的斜率。

2.4.2 代码

import numpy as np
import matplotlib.pyplot as plt

def elu(x, alpha=1.0):
    return np.where(x >= 0, x, alpha * (np.exp(x) - 1))

x = np.linspace(-10, 10, 100)
y = elu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ELU(x)')
plt.title('ELU Function')
plt.grid(True)
plt.show()

2.4.3 图片

在这里插入图片描述

2.5 Tanh函数

Tanh函数(双曲正切函数)将输入的实数值映射到一个介于-1和1之间的输出。它在前向传播过程中具有平滑的激活特性,常用于隐藏层的激活函数。

2.5.1 数学公式

Tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

2.5.2 代码

import numpy as np
import matplotlib.pyplot as plt

def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = tanh(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Tanh(x)')
plt.title('Tanh Function')
plt.grid(True)
plt.show()

2.5.3 图片

在这里插入图片描述

2.6 Softmax函数

Softmax函数通常用于多分类问题,将输入向量转换为一个概率分布,使得所有元素的和等于1。Softmax函数对于输出类别之间的概率关系建模,常用于最后一层的激活函数。

2.6.1 数学公式

Softmax(x_i) = exp(x_i) / sum(exp(x_j))

2.6.2 代码

import numpy as np
import matplotlib.pyplot as plt


def softmax(z):
    e_z = np.exp(z)
    return e_z / np.sum(e_z)

x = np.linspace(-10, 10, 100)
y = softmax(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('softmax(x)')
plt.title('Softmax Function')
plt.grid(True)
plt.show()

2.6.3 图片

在这里插入图片描述

2.6.4 注意

在计算Softmax函数时,减去最大值是为了提高数值的稳定性。这是因为指数函数的值在输入较大的情况下会变得非常大,导致数值溢出的问题。通过减去最大值,可以将输入值的范围控制在相对较小的范围内,避免指数函数的计算结果过大而导致数值溢出。
减去最大值后,输入向量的最大值变为0,其他元素相对于最大值的差值也变小。这使得指数函数的计算结果在数值上更加稳定
在这里插入图片描述
此时代码:

import matplotlib.pyplot as plt
import numpy as np

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / np.sum(e_x)

x = np.linspace(-10, 10, 100)
y = softmax(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('softmax(x)')
plt.title('Softmax Function')
plt.grid(True)
plt.show()
  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值