判断机器学习中常见的几个激活函数(附绘制图代码)

229 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

激活函数: 激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。

常见的激活函数有sigmoid、tanh、ReLU、阶跃函数等等

1)sigmoid函数

公式:

f(x)=11+e(x)f(x) = \frac{1}{1+e^{(-x)}}

代码:

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

2)tanh函数

公式:

f(x)=exe(x)ex+e(x)f(x) = \frac{e^{x}-e^{(-x)}}{e^{x}+e^{(-x)}}

代码:

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

3)relu函数

公式:

f(x)={x,x>00,x<=0f(x)=\begin{cases} x,&x>0\\ 0,&x<=0\\ \end{cases}

代码:

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

4)LeakyReLU函数

公式:

f(x)={x,x>0αx,x<=0,α(0,1)f(x)=\begin{cases} x,&x>0\\ \alpha{x},&x<=0,\alpha\in(0,1)\\ \end{cases}

代码:

def leaky_relu(x):
    alpha = 0.1
    return np.array([alpha * xi if xi <= 0 else xi for xi in x])

5)softmax函数

公式:

f(xi)=exij=1Nexjf(x_i) = \frac{{{e}^{x_i}}}{\sum_{j=1}^N{e^{x_j}}}

代码:

def softmax(x):
    x = x - np.max(x)
    return np.array([np.exp(xi)/np.sum(np.exp(x)) for xi in x])

6)swish函数

公式:

f(x)=xexf(x) = \frac{x}{{e^{-x}}}

代码:

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

全部代码:

from matplotlib import pyplot as plt
import numpy as np

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


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


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


def leaky_relu(x):
    alpha = 0.1
    return np.array([alpha * xi if xi <= 0 else xi for xi in x])


def softmax(x):
    x = x - np.max(x)
    return np.array([np.exp(xi)/np.sum(np.exp(x)) for xi in x])


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


space_title_plot = -0.7

x = np.arange(-10, 10, 1)
y = sigmoid(x)
plt.subplot(3, 2, 1)
plt.plot(x, y)
plt.title('(a) sigmoid', y=space_title_plot)
plt.grid()

y2 = tanh(x)
plt.subplot(3, 2, 2)
plt.plot(x, y2)
plt.title('(b) tanh', y=space_title_plot)
plt.grid()

y3 = relu(x)
plt.subplot(3, 2, 3)
plt.plot(x, y3)
plt.title('(c) relu', y=space_title_plot)
plt.grid()

y4 = leaky_relu(x)
plt.subplot(3, 2, 4)
plt.plot(x, y4)
plt.title('(d) leakyRelu', y=space_title_plot)
plt.grid()

y5 = softmax(x)
plt.subplot(3, 2, 5)
plt.plot(x, y5)
plt.title('(e) softmax', y=space_title_plot)
plt.grid()

plt.subplot(3, 2, 6)
y6 = swish(x)
plt.plot(x, y6)
plt.title('(f) swish', y=space_title_plot)
plt.grid()

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=0.8)
plt.show()

运行截图: