4种激活函数

1,sigmoid函数

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重


特点:1,输出值落于[0,1]连续区间;

2,输入值从横坐标左侧移动到右侧的过程中,其输出值呈现从平缓到加速再到平缓的特点;

3,sigmoid函数的导数值落于[0,0.25]的连续区间;

注意:在神经网络中,sigmoid函数其实有很大的局限性,在逆向参数调整back propagation过程中,使用链式法则chain rule,可以推导出下面的公式:

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重_02


并对深度神经网络模型的权重调整幅度进行计算,中间是sigmoid函数导数的乘积,多个小于0.25的值相乘后,会严重影响最终的权重调整幅度,所以第一层的初始权重很难通过back propagation再产生变换,这个问题被称为梯度消失(vanishing Gradient)。另外,sigmoid函数在进行指数计算时,会消耗较多的算力资源。

函数实现

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
    y = 1/(1+np.exp(-x))
    return y


X = np.arange(-10, 10, 0.01)
Y = sigmoid(X)

plt.plot(X, Y)
plt.xlim(-11,11)
plt.ylim(0, 1)
plt.scatter(0,0.5,marker='*',c='r')
plt.show()

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_激活函数_03

2,Tanh函数(与sigmoid类似)

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重_04


**特征:**1,值落在[-1,1]之间;

2,导数落于[0,1]之间,因此Tanh能缓解sigmoid梯度消失的问题,在激活函数的选择时,优先于sidmoid.

import numpy as np
import matplotlib.pyplot as plt

def tanh(x):
    y = (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
    return y

X = np.arange(-10, 10, 0.1)
y = tanh(X)
plt.plot(X, y)
plt.scatter(0,0,marker='+',c='r')
plt.show()

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重_05


3,ReLu(Rectified Linear Unit)

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_激活函数_06


sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_激活函数_07

import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.arange(-10, 10, 0.1)
y= relu(x)

plt.plot(x,y)
plt.show()

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_结点_08

leakReLu

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重_09


在负数区间内,通过添加一个较小斜率的线性部分,使负数区域内也能够产生梯度调整值,完美解决之前的神经元熄灭问题(指ReLU函数在取值小于0时会等于0,这时神经元不激活,称为神经熄灭状态 )

4,softmax

它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类。

假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_权重_10


在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。

import numpy as np
import numpy as np
import matplotlib.pyplot as plt

def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    return exp_a/sum_exp_a

X = np.arange(-5, 5, 0.1)
y = softmax(X)
plt.plot(X, y)
plt.show()

sigmoid函数能够吧输入的连续实值变换为0和1之间的输出对吗 sigmoid函数可用于_激活函数_11


1)分子:通过指数函数,将实数输出映射到零到正无穷。

2)分母:将所有结果相加,进行归一化。