我们在上一篇文章说了单层感知机实现简单逻辑电路,多层感知机实现异或门电路。引入了阈值θ,偏置b。现在,我们根据上一篇的表达式,现实激活函数。
我们之前感知机的表达式如下:
y = {
x1w1+x2w2+b >0 return 1
x1w1+x2w2+b <=0 return 0
}
现在,我们将x1w1+x2w2+b这个整体令它等于α,现在有一种特殊的映射关系h,当α>0时,使得h(α)=1。当α<=0时,使得h(α)=0。这里的h(α)函数就称为激活函数。激活函数就是将输入总和转换成输出数值的函数。所以,表达式可以又写成y = h(α)。
感知机的优势,在于能够表达复杂的函数,或者是逻辑运算。不过,它存在一定缺陷,例如:权重w需要人为设定,还有偏置b同样也是,不能通过一定/一套具体的规则,来进行权重和偏置的自动优化。因此,神经网络的出现可以处理这个问题,因为神经网络的权重是可以进行自动调整的。神经网络与感知机类似,因为它也是存在输入层,中间层(隐藏层),输出层。神经网络使用的激活函数不属于阶跃函数(阶跃函数:设定一个阈值,当输入超出阈值就输出),常用的激活函数:sigmoid函数:h(α)= 1 / (1+e^(-x))。
阶跃函数的实现:
import numpy as np
import matplotlib.pyplot as plt
"""
#encoding="utf-8"
@Author:Mr.Pan_学狂
@finish_time:2022/2/10
感知机的阶跃函数与神经网络的激活函数对比
"""
def JY(inx):
if inx > 0:
return 1
else:
return 0
def JY2(inx):
shape_tup = inx.shape
print(shape_tup[0])
if len(shape_tup) > 1:#矩阵
for vector in inx:
for num in range(shape_tup[1]):
if vector[num] > 0:
vector[num] = 1
else:
vector[num] = 0
else:#向量
for n in range(shape_tup[0]):
if inx[n] > 0:
inx[n] = 1
else:
inx[n] = 0
return inx
def JY3(inx):
return np.array(
inx > 0,dtype=np.int
)
def sigmoid():
pass
if __name__ == '__main__':
print(JY(0.5))
print(JY2(np.array([-0.2,0.3,-1])))
print(JY2(np.array([[-0.5,0.5,1],[1,2,0],[0.2,-3,0.01],[-6,2,-0.9],[1,-2,6],[-0.3,0,1]])))
x = np.arange(-5.0, 5.0, 0.1)
y = JY3(inx=x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
def sigmoid(inx):
return 1 / (1 + np.exp(-inx))
不过,我们注意到一点,激活函数可以允许输入的数值是向量或矩阵类型的数据。而不像阶跃函数,只能指定一种数据类型的输入。
测试sigmoid函数:
X = np.array([-1,0,1,2])
X2 = np.array([[-0.5,-1,0],[1,2,-2]])
X3 = 1
print(sigmoid(X))
print(sigmoid(X2))
print(sigmoid(X3))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(inx=x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
sigmoid函数图像:
对比阶跃函数和激活函数图像,我们可以看出sigmoid函数图像变化更加平缓,阶跃函数的变化更加剧烈。且sigmoid是随着输入的变化,输出不断发生连续性变化的。在观察数值微小变化方面,sigmoid函数显然更加合适。
sigmoid函数与阶跃函数的相同之处,在于输入小的时候,输出接近于0。输入大的时候,输出接近于1。无论输入数据多大或者多小,输出结果总在(0,1)内。阶跃函数和sigmoid都是非线性函数。
神经网络的激活函数必须使用非线性函数。原因在于使用线性函数,会导致叠加层没有意义。例如:g(x)=Cx(C为常数),g(x)就是一个线性函数。那么经过3次叠加 g(g(g(x)))=CCCx。其实等同于h(x)=C^3*x(线性函数),并没有什么区别。因此,我们需要使用非线性函数作为神经网络的激活函数。
最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。