感知机即阈值逻辑单元,通过阈值来进行判断类别,神经网络则是多个感知机的集合,可以应用于处理更复杂的问题
首先我们来介绍在神经网络网络中的激活函数,激活函数相当于在感知机中设置的阈值,不过感知机中的激活函数使用的是阶跃函数,而在神经网络中这样的激活函数明显是不够的
特征
公 式 为 : s i g m o i d ( x ) = 1 1 + e − x 公式为:sigmoid(x)=\frac{1}{1+e^{-x}} 公式为:sigmoid(x)=1+e−x1
特征
t a n h ( x ) = 2 1 + e − 2 x − 1 tanh(x)=\frac{2}{1+e^{-2x}}-1 tanh(x)=1+e−2x2−1
特征
特征
m i s h ( x ) = x ⋅ t a n h ( l n ( 1 + e x ) ) mish(x)=x \cdot tanh(ln(1+e^x)) mish(x)=x⋅tanh(ln(1+ex))
特征
y = e x p ( a k ) ∑ i = 1 n e x p ( a i ) y = \frac{exp(a_k)}{\sum_{i=1}^{n}exp(ai)} y=∑i=1nexp(ai)exp(ak)
画图代码实现如下
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
def step_function(x):
return np.array(x > 0, dtype=np.int)
def sigmoid(x):
return 1 / (1 + np.e ** (-x))
def relu(x):
x[x<=0] = 0
return x
def softmax(x):
return np.e ** x / np.sum(np.e ** x)
def mish(x):
return x * np.tanh(np.log(1+np.e ** x))
def tanh(x):
return 2 / (1 + np.exp(-2 * x)) - 1
x = np.linspace(-10, 10, 100)
plt.plot(x, step_function(x.copy()), label='step_function')
plt.plot(x, sigmoid(x.copy()), label='sigmoid')
plt.plot(x, relu(x.copy()), label='relu')
plt.plot(x, softmax(x.copy()), label='softmax')
plt.plot(x, mish(x.copy()), label='mish')
plt.plot(x, tanh(x.copy()), label='tanh')
plt.title("激活函数")
plt.legend()
plt.savefig("激活函数.png")
plt.show()