大家好,我是微学AI,今天给大家介绍一下深度学习中的激活函数。
一、激活函数的概念
激活函数(Activation Function)是神经网络中的一个重要组成部分,它是把一个神经元的输出映射到另一个值域,它可以将输入信号转换为非线性输出信号。激活函数是一种特殊的函数,它通过计算输入信号的线性组合,然后根据某种特定的函数来生成输出信号。激活函数的主要作用是对输入的特征进行组合,以便模型能够学习输入特征之间的非线性关系。
我们可以将激活函数比喻为一个按钮,每次按下按钮,就会发出一个信号,以此来激活神经网络中的神经元和层。当神经元接收到足够的激活信号时,它才会发挥它的功能,产生出有用的信息。
激活函数也可以比喻成一个水池,如果水位超过一定的高度,水就会从溢出口溢出,激活函数就是这样的溢出口。
二、激活函数的功能
(1)非线性化
激活函数可以将线性的输入信号转换为非线性的输出信号,从而使神经网络具有非线性的学习能力,使其能够拟合更复杂的函数。
(2)抑制过拟合
激活函数可以有效地抑制过拟合,因为它们可以限制信号的流动,使得输出不会过大或过小。
(3)促进反向传播
激活函数可以促进反向传播,因为它们可以把输入信号转换为可以进行反向传播的输出信号。
三、常见的激活函数
1. sigmoid函数
sigmoid函数又称为S型函数,它的输出值范围是[0,1],输入的值大于0时,输出值就大于0.5,输入的值小于0时,输出值就小于0.5。sigmoid函数也称之为logistic曲线,用来表示二分类的概率函数。
Sigmoid函数的数学表达式为:
ReLU函数又称为修正线性单元,它是一种非线性激活函数,具有简单的计算过程,增加了深度神经网络的计算效率。它的特点是在输入小于0时,输出就为0,输入大于0时,输出就为输入值,因此它可以把输入的小于0的值给抑制住,让模型的收敛速度更快。
ReLU函数的数学表达式为:
tanh函数也是一种非线性激活函数,它是sigmoid函数的变形,输出值的范围是[-1,1],输入的值大于0时,输出值就大于0,输入的值小于0时,输出值就小于0,它的优点是可以把输入的值分散在更广一些的范围内,使模型更好地提取特征。
Tanh函数的数学表达式为:
Softmax函数也叫多分类Logistic回归,是用来表示多分类概率函数的,它的输出是一组概率值,表示每个类别的概率,这些概率的总和为1。
Softmax函数的数学表达式为:
5. Leaky ReLU函数
Leaky ReLU函数是ReLU函数的变种,它在输入小于0时,输出不是0,而是一个比0小的值,这个值一般是0.01,它的优点是可以把输入的小于0的值给抑制住,但不会完全地把它们归零,避免了梯度消失的问题。
Leaky ReLU 函数:是Leaky ReLU函数的参数,通常设置为0.01。
四、激活函数的相关代码实现
import numpy as np
import matplotlib.pyplot as plt
# Sigmoid函数
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
x = np.linspace(-10, 10, 100)
y = sigmoid(x)
plt.plot(x, y)
plt.show()
# Tanh函数
def tanh(x):
return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
x = np.linspace(-5, 5, 100)
y = tanh(x)
plt.plot(x, y)
plt.show()
# ReLU函数
def relu(x):
return np.maximum(0, x)
x = np.linspace(-10, 10, 100)
y = relu(x)
plt.plot(x, y)
plt.show()
# Leaky ReLU函数
def leaky_relu(x, alpha = 0.05):
return np.maximum(alpha * x, x)
x = np.linspace(-10, 10, 100)
y = leaky_relu(x)
plt.plot(x, y)
plt.show()
五、总结
激活函数是神经网络中的一类非线性映射函数,它能够将输入数据转化为非线性形式,以便网络可以拟合训练数据中的非线性关系。常用的激活函数有sigmoid、tanh、ReLU、Leaky ReLU、Softmax等,每种激活函数都有不同的特性,应用于不同的神经网络结构,可以改善网络的性能。此外,激活函数还可以防止网络出现梯度消失或梯度爆炸等问题。
欢迎关注我,有什么问题可以私信!