激活函数就是在神经网络上运行的函数,负责将神经元的输入映射到输出端。本文主要介绍一些常用的激活函数。
一、ReLU函数
因为ReLU函数实现简单,且在各种预测任务中表现良好,所以,在实际应用中,ReLU函数的使用频率较高。
ReLU函数提供了一种非常简单的非线性变换
给定元素,ReLU函数被定义为该元素与0的最大值,即:
通俗地说,ReLU函数通过将相应的活性值设为0,仅保留正元素并丢弃所有负元素。
# ReLU函数(ReLU(x)=max(0, x))
x = torch.arange(-8.0, 8.0, 0.1)
y = torch.relu(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.show()
如图所示,ReLU函数是分段线性的。
二、Sigmoid函数
Sigmoid函数旨在将任意区间的输入压缩到(0,1)区间上进行输出:
# Sigmoid函数(将输入变换为区间(0,1)上的输出。sigmoid(x)=1/(1+exp(-x)))
y = torch.sigmoid(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.show()
注:当输入接近0时,Sigmoid函数接近线性变换。
三、tanh函数
与Sigmoid函数类似,tanh函数将输入压缩到(-1,1)区间上:
# tanh函数(将输入压缩转换到区间(-1,1)上。tanh(x)=(1-exp(-2x))/(1+exp(-2x))
y = torch.tanh(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.show()
当输入在0附近时,tanh函数接近线性变换。可以看出tanh函数和Sigmoid函数图像类似,不同的是tanh函数是关于原点对称的图像。
四、代码
import matplotlib.pyplot as plt
import torch
# ReLU函数(ReLU(x)=max(0, x))
x = torch.arange(-8.0, 8.0, 0.1)
y = torch.relu(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.show()
# Sigmoid函数(将输入变换为区间(0,1)上的输出。sigmoid(x)=1/(1+exp(-x)))
y = torch.sigmoid(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.show()
# tanh函数(将输入压缩转换到区间(-1,1)上。tanh(x)=(1-exp(-2x))/(1+exp(-2x))
y = torch.tanh(x)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.show()