激活函数集合

softmax:

将输入的向量映射为0-1之间的实数,并且归一化保证和为1。

f(x) = \frac{exp(x)}{\sum\nolimits_{1}^n exp(x_{i} ) }

python实现:

import numpy as np

z = np.array([1.0, 2.0, 3.0, 4.0, 1.0, 2.0, 3.0])

# z = z - np.max(z)  有资料做了这一步操作

print(np.exp(z)/sum(np.exp(z)))

tensorflow实现:

softmax = tf.exp(logits) / tf.reduce_sum(tf.exp(logits), axis)

图 1

softmax 一般用于输出层,而不用于中间层的激活函数。

sigmoid:

将输入的向量映射为0-1之间的实数,和softmax之间的区别是,每一项的加和不再为1,每一项都是竞争关系。

f(x) = \frac{1}{1 +exp(-x) }

python 实现:

import numpy as np

def sigmoid(x):

    num = 1 / (1 + np.exp(-x))

    return num

优点:平滑、易于求导。

缺点:只有在较小空间的梯度比较明显(图中-4~4区域),超过这个空间,梯度容易消失

导数:\sigma (x)*[1-\sigma(x)]

relu:

当输入值为负数是,梯度为0,输入为正值时梯度与函数斜率保持一致。

f(x) = max(0,x)

import numpy as np

def relu(x):

    num= np.where(x < 0, 0, x)

    return num

图 2

优势:

1.没有了其他复杂激活函数中诸如指数函数的影响,简化了计算过程

2.更加有效率的梯度下降以及反向传播:避免了梯度爆炸和梯度消失问题

导数:小于0时为0,大于0时为输入值。

tanh:

双曲正切函数(tanh)是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值

f(x) = \frac{sinh(x)}{cosh(x)} =\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)}

import numpy as np

def tanh(x):

    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

图 3

特点:双曲正切函数的图形夹在水平直线y=1及y=-1之间,且为奇函数,图形通过原点且关于原点对称。

导数:1-tanh^2(x)

softplus:

softplus 是对relu函数的平滑,使得负数部分的导数上调,正数部分的导数下调。

f(x) = log(1+exp(x))

import math

def softplus(x):

    num = math.log(1+math.exp(x))

    return num

图 4

mish:

在负值的时候并不是完全截断,而是允许比较小的负梯度流入。

import math

def mish(x):

    num = x * math.tanh(math.log(1 + math.exp(x)))

    return num

 图 5

优点:一种自正则的非单调神经激活函数,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化

激活函数大集合:

图 6
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。