激活函数的作用是什么?常见激活函数有哪些?
从多元线性回归说起
“线性回归”一节介绍过一元线性回归和多元线性回归,一元线性回归的公式为:
,多元线性回归的公式为:
,或者写成向量形式
,用图形化的形式可以表示为:
多元线性函数可以看做多个一元线性函数的加和,但遗憾的是多个线性函数的加和仍然仍然是线性的,无法拟合诸如抛物线、正余弦曲线等非线性的函数。有没有一种方法可以将线性函数变成非线性呢?答案是肯定的,这类函数统称为“激活函数”。
常见激活函数
激活函数一个将线性空间向非线性空间映射的函数,用以增强神经网络的表达能力。常见的激活函数包括:sigmoid, relu, tanh,softplus等,他们的公式如下:
用python画出函数曲线:
import numpy as np
import matplotlib.pyplot as plt
def sigmod(x):
return 1. / (1. + np.exp(-x))
def relu(x):
return np.maximum(x, 0)
def tanh(x):
return np.tanh(x)
def softplus(x):
return np.log(1.+np.exp(x))
x = np.arange(-8, 8, 0.2)
plt.plot(x, sigmod(x), label='sigmod')
plt.plot(x[:48], relu(x[:48]), label='relu')
plt.plot(x, tanh(x), label='tanh')
plt.plot(x[:50], softplus(x[:50]), label='softplus')
plt.legend()
激活函数的应用
再来回顾多元线性回归的公式:
上图中这一组称作一个线性单元,在线性单元的输出之后加一个激活函数,可以将线性函数变换成非线性函数:
经过这种变换之后再将激活函数的输出作为下一个单元的输入,这样经过多次组合就能拟合出任意复杂的函数了。这样的复杂组合就是神经网络。
通常神经网络的隐藏层采用relu作为激活函数,输出层常常采用softmax。