Activation function

Activation function(激活函数),是一类非线性函数,与之对应的就是线性函数。线性函数就是一条直线,形式化表示就是:

$m$是直线的斜率,$y$通常是预测的值,$x$是输入的特征值,$b$是$y$轴的截距。

由于现实世界的复杂性,输入特征和预测之间的关系通常不是简单的线性关系,换言之就是非线性关系。然后就发现一些非线性函数,满足一定的性质(这个得看人家的论文),通过非线性函数多层的组合,可以来拟合非常复杂的非线性函数。

更过关于激活函数的介绍,请看这里.

TensorFlow中更多激活函数,请看TensorFlow Activation Function.

Binary step

阶跃函数是理想的激活函数,但是不可导。

下面对几种常见的激活函数进行可视化。

ReLu(rectified linear unit, ReLu)

Logistic(Sigmoid or Soft step)

TanH

Softplus

Softmax

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import tensorflow as tf # machine learning framwork
import numpy as np # scientific computation
import matplotlib.pyplot as plt # data visualization

with tf.Graph().as_default(), tf.Session() as sess:
x_data = np.linspace(-6, 6, 256)

y_relu = tf.nn.relu(x_data)
y_sigmoid = tf.nn.sigmoid(x_data)
y_tanh = tf.nn.tanh(x_data)
y_softplus = tf.nn.softplus(x_data)
y_softmax = tf.nn.softmax(x_data) # softmax is a special kind of activation function, it is about probablity

y_relu, y_sigmoid, y_tanh, y_softplus, y_softmax = sess.run([y_relu, y_sigmoid, y_tanh, y_softplus, y_softmax])

# plot
fig = plt.figure(1, figsize=(8, 6))
plt.subplot(221)
plt.plot(x_data, y_relu, c='red', label='relu')
plt.ylim(-1, 6)
plt.legend(loc='best')

plt.subplot(222)
plt.plot(x_data, y_sigmoid, c='green', label='sigmoid')
plt.ylim(-0.3, 1.5)
plt.legend(loc='best')

plt.subplot(223)
plt.plot(x_data, y_tanh, c='blue', label='tanh')
plt.ylim(-1.2, 1.2)
plt.legend(loc='best')

plt.subplot(224)
plt.plot(x_data, y_softplus, c='yellow', label='softplus')
plt.ylim(-0.3, 6)
plt.legend(loc='best')

plt.show()

Activation Functions-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
with tf.Graph().as_default(), tf.Session() as sess:
x_data = np.linspace(-6, 6, 256)

y_relu = tf.nn.relu(x_data)
y_sigmoid = tf.nn.sigmoid(x_data)
y_tanh = tf.nn.tanh(x_data)
y_softplus = tf.nn.softplus(x_data)
y_softmax = tf.nn.softmax(x_data) # softmax is a special kind of activation function, it is about probablity

y_relu, y_sigmoid, y_tanh, y_softplus, y_softmax = sess.run([y_relu, y_sigmoid, y_tanh, y_softplus, y_softmax])

# plot
fig = plt.figure(1, figsize=(8, 6))
plt.plot(x_data, y_relu, c='red', label='relu')
plt.plot(x_data, y_sigmoid, c='green', label='sigmoid')
plt.plot(x_data, y_tanh, c='blue', label='tanh')
plt.plot(x_data, y_softplus, c='yellow', label='softplus')
plt.xlim(-4, 4)
plt.ylim(-1.2, 4)
plt.legend(loc='best')

# gca get current axes
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0)) # outward, axes
ax.spines['left'].set_position(('data', 0))

plt.show()

Activation Functions-2