深度学习手记(三)之激活函数

激活函数在神经网络模型中是非常重要的一步。如果没有激活函数,那么不管神经网络有多少层,整个网络都是线性的,从而没有办法解决复杂的分类问题。
那么激活函数有哪些呢?
在维基百科上可以查到:https://en.wikipedia.org/wiki/Activation_function
在这里介绍几个比较常用的激活函数:
relu:
这里写图片描述
根据公式,我们可以用python代码简单实现:

def relu(inputs):
    y = [x * (x > 0) for x in inputs]
    return y

Relu函数的优点在于使用随机梯度下降优化器时,收敛的速度更快一点,但是,同时他对学习率的要求更高,如果学习率大了,就会导致一些的神经元不起作用。


tanh(双切正切函数):
这里写图片描述
根据公式,我们可以用python代码简单实现:

def tanh(inputs):
    y = [(np.exp(x) - np.exp(-x)) / float(np.exp(x) + np.exp(-x)) for x in inputs]
    return y

tanh在特征差异比较明显时得效果要好一点,因为,它的取值在[-1, 1]可以理解越往两端走,越容易分别类型。


sigmoid:
这里写图片描述
根据公式,我们可以用python代码简单实现:

def sigmoid(inputs):
    y = [1 / float(1 + np.exp(-x)) for x in inputs]
    return y

sigmoid函数对二分类问题比较实用,但是当特征复杂时,效果就不如tanh函数了。


softplus:
这里写图片描述
根据公式,我们可以用python代码简单实现:

def softplus(inputs):
    y = [np.log(1 + np.exp(x)) for x in inputs]
    return y

softplus是有效的梯度传播函数,没有梯度消失无法完成深度网络的训练的情况。
具体它的具体优势或问题,可以参考:
https://en.wikipedia.org/wiki/Rectifier_(neural_networks)


下面用python将这几种激活函数可视化表示出来:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/llh_1178/article/details/79652613