Python可视化神经网络常见的激活函数

1 引言

所谓激活函数,就是在人工神经网络的神经元上运行的函数,主要负责将神经元的输入映射到输出端.
Python可视化神经网络常见的激活函数_第1张图片

在神经网络中,激活函数是神经元的一部分,在输入和输出信号之间的正向传播中引入了非线性,可以帮助神经网络学习到数据中的复杂模式.
本文主要对深度学习常见的激活函数进行简要的回顾.

2 线性函数

线性激活函数定义输入和输出之间的线性关系,最简单的形式为 y=x ,此时原函数和导函数的定义如下:
请添加图片描述
此时我们使用如下代码绘制二者图像:

def test1():
    v = np.linspace(-10, 10, 1000)
    phi = v
    phi_prime = v * 0 + 1
    plt.plot(v, phi, label='liner')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(ylim=[-8, 8])

得到结果如下:
Python可视化神经网络常见的激活函数_第2张图片

该函数的一些变形如下:
在这里插入图片描述
对应图像如下:
Python可视化神经网络常见的激活函数_第3张图片

3 单位阶跃函数

单位阶跃函数,该函数和其导数定义如下:
在这里插入图片描述
注意上述函数为不连续函数,其倒数在v=0出不存在.我们采用以下代码绘制其图像:

def test3():
    v = np.linspace(-10, 10, 1000)
    phi = v >= 0
    phi_prime = ~(v != 0)
    plt.plot(v, phi, label='heaviside')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot()

结果如下:
Python可视化神经网络常见的激活函数_第4张图片

4 Sigmoid 函数

Sigmoid 函数是一种常见的S函数,该函数起初阶段为指数增长,然后随之开始变得饱和,增加变慢,最后增加停止.

其函数和导函数的数学定义如下:

请添加图片描述
我们采用以下代码绘制其图像:

def test4():
    v = np.linspace(-10, 10, 1000)
    phi = 1 / (1 + np.exp(-v))
    phi_prime = phi * (1 - phi)
    plt.plot(v, phi, label='Sigmoid')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot()

结果如下:
Python可视化神经网络常见的激活函数_第5张图片
该函数的一些变形如下:
在这里插入图片描述对应图像如下:
Python可视化神经网络常见的激活函数_第6张图片

5 tanh 双曲正切函数

该激活函数也是S形,为双曲正切函数,其数学表达式和导函数的定义如下:
在这里插入图片描述
我们采用以下代码绘制其图像:

def test6():
    v = np.linspace(-10, 10, 1000)
    phi = 2 / (1 + np.exp(-2 * v)) - 1
    phi_prime = 1 - phi ** 2
    plt.plot(v, phi, label='tanh')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(ylim=[-1.1, 1.1])

结果如下:
Python可视化神经网络常见的激活函数_第7张图片
相应地,该函数的一些变形如下:
在这里插入图片描述
对应图像如下:
Python可视化神经网络常见的激活函数_第8张图片

6 SoftSign 函数

SoftSign是Tanh激活函数的替代选择, 该函数的数学表达式和导函数的定义如下:
在这里插入图片描述
我们采用以下代码绘制其图像:

def test8():
    v = np.linspace(-10, 10, 1000)
    phi = v / (1 + np.abs(v))
    phi_prime = 1 / (1 + np.abs(v)) ** 2
    plt.plot(v, phi, label='softsign')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(ylim=[-1.1, 1.1])

结果如下:
Python可视化神经网络常见的激活函数_第9张图片
相应地,该函数的一些变形如下:
在这里插入图片描述结果如下:
Python可视化神经网络常见的激活函数_第10张图片

7 ReLU 函数

ReLU函数是深度学习中比较流行的一种激活函数,其数学表达式和导函数的定义如下:
在这里插入图片描述
我们采用以下代码绘制其图像:

def test10():
    v = np.linspace(-10, 10, 1000)
    phi = v * (v >= 0)
    phi_prime = (v >= 0)
    plt.plot(v, phi, label='relu')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(xlim=[-2, 2], ylim=[-0.1, 1.1])

结果如下:
Python可视化神经网络常见的激活函数_第11张图片
相应地,该函数的一些变形如下:
在这里插入图片描述
对应图像如下:
Python可视化神经网络常见的激活函数_第12张图片

8 PReLU 函数

PReLU函数是ReLU激活函数的改进版,该函数和其导函数的定义如下:
在这里插入图片描述
我们采用以下代码绘制其图像:

def test12():
    v = np.linspace(-10, 10, 1000)
    a = 0.2
    phi = np.where(v >= 0, v, a * v)
    phi_prime = np.where(v >= 0, 1, a)
    plt.plot(v, phi, label='PReLU (α = {0})'.format(a))
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(xlim=[-2, 2], ylim=[-0.6, 1.1])

结果如下:
Python可视化神经网络常见的激活函数_第13张图片
相应地, 不同alpha取值下,该函数的结果图如下:
Python可视化神经网络常见的激活函数_第14张图片

9 ELU 函数

ELU函数也是ReLU函数的一种扩展,其函数定义和导函数的数学公式如下:
在这里插入图片描述
我们采用以下代码绘制其图像:

def test14():
    v = np.linspace(-10, 10, 1000)
    a = 1
    phi = np.where(v >= 0, v, a * (np.exp(v) - 1))
    phi_prime = np.where(v >= 0, 1, phi + a)
    plt.plot(v, phi, label='ELU (α = {0})'.format(a))
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(xlim=[-2, 2], ylim=[-1.1, 1.1])

结果如下:
Python可视化神经网络常见的激活函数_第15张图片相应地, 不同alpha取值下,该函数的结果图如下:
Python可视化神经网络常见的激活函数_第16张图片

10 SoftPlus 函数

SoftPlus函数定义和导函数的数学公式如下:

在这里插入图片描述
我们采用以下代码绘制其图像:

def test16():
    v = np.linspace(-10, 10, 1000)
    phi = np.log(1 + np.exp(v))
    phi_prime = 1 / (1 + np.exp(-v))
    plt.plot(v, phi, label='SoftPlus')
    plt.plot(v, phi_prime, '--', label='derivada')
    displayPlot(ylim=[-0.1, 2])

结果如下:
Python可视化神经网络常见的激活函数_第17张图片相应地,该函数的一些变形如下:
Python可视化神经网络常见的激活函数_第18张图片

对应图像如下:
Python可视化神经网络常见的激活函数_第19张图片

11 总结

本文对深度学习领域常见的激活函数进行了总结,并绘制了其函数和导函数的具体图像,并给出了完整代码示例.

您学废了吗?

12 参考

参考链接一

关注公众号《AI算法之道》,获取更多AI算法资讯。

在这里插入图片描述



注: 完整代码,关注公众号,后台回复 激活函数 , 即可获取。

你可能感兴趣的:(深度学习,神经网络,python,深度学习,计算机视觉,激活函数)