计算智能人工神经网络专题(一):人工神经元基本模型
人工神经元基本模型
一、数学原理
人工神经元是一个多输入、单输出的非线性组件,是人工神经网络的基本单元,其简化结构如图:

其输入与输出关系可具体描述为如下形式:
$$
y=f(I)
$$
$$
I=\sum_{i=1}^{n}{\omega_{i}x_{i}-\theta}
$$
式中,$x{i}(i=1,2,…,n)$ 是输入信号,从其他神经元传入或从外部输入;$w{i}$ 表示从神经元 $i$ 到本神经元的连接权重(加权系数);$\theta$ 为神经元内部阈值,设置用于正确分类样本;$f()$ 为激活函数,决定神经元输出。以下为几种常见的激活函数:
1.阈值型函数
其输出只有两种情况,一种可用阶跃型函数表示,另一种可用符号函数表示,两种函数公式如下:
$$
f(x)=\left{
\begin{aligned}
1, x≥0 \
0, x<0
\end{aligned}
\right.
$$
$$
f(x)=\left{
\begin{aligned}
1, x≥0 \
-1, x<0
\end{aligned}
\right.
$$
其函数图像如下:
2.饱和型函数
其输出在某一区间呈线性变换。函数公式如下:
$$
f(x)=\left{
\begin{aligned}
1, x≥\frac {1}{k} \
kx, -\frac {1}{k}≤x<\frac {1}{k} \
-1, x<-\frac {1}{k}
\end{aligned}
\right.
$$
其函数图像如下:
3.双曲正切函数
其与饱和型函数图形相似,但更接近实际情况。函数公式如下:
$$
f(x)=\tanh(x)=\frac {e^{x}-e^{-x}}{e^{x}+e^{-x}}
$$
其函数图像如下:
4.S型函数
其在 $(0,1)$ 内连续取值且单调可微,被称为 Sigmoid 函数,简称 S 型函数,用于 BP 网络。函数公式如下:
$$
f(x)=\frac{1}{1+\exp{(1-\beta x)}}
$$
其函数图像如下:
5.高斯函数
用于 RBF 网络。函数公式如下:
$$
f(x)=e^{-\frac{x^2}{\delta^2}}
$$
其函数图像如下:
6.ReLU函数
其使得神经网络的神经元具有稀疏激活性。函数公式如下:
$$
f(x)=\left{
\begin{aligned}
x, x≥0 \
0, x<0
\end{aligned}
\right.
$$
其函数图像如下:
二、代码复现
假设我们想要创建一个神经元,它有两个输入,权重分别为 0.5 和 -0.3,偏置为 0.6,并使用使用 S 型激活函数,其超参数 beta 设置为 1。实现代码如下:
import numpy as np
# 定义神经元类
class Neuron:
def __init__(self, weights, bias):
self.weights = np.array(weights) # 权重数组
self.bias = bias # 偏置项
# 阈值型函数
def threshold(self, x):
return np.where(x >= 0, 1, 0)
# 饱和型函数
def saturated(self, x, k):
dk = 1 / k
return np.where(x >= dk, 1, np.where(-dk <= x, k * x, 0))
# 双曲正切函数
def hyperbolic_tangent(self, x):
return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
# S型函数
def sigmoid(self, x, beta):
return 1 / (1 + np.exp(-beta * x))
# 高斯函数
def guass(self, x, delta):
return np.exp(-x ** 2 / delta)
def ReLU(self, x):
return np.where(x >= 0, x, 0)
# 激活函数选择及输出
def activation_function(self, x, c, p):
if c == 1:
return self.threshold(x)
elif c == 2:
return self.saturated(x, p)
elif c == 3:
return self.hyperbolic_tangent(x)
elif c == 4:
return self.sigmoid(x, p)
elif c == 5:
return self.guass(x, p)
elif c == 6:
return self.ReLU(x)
else:
raise ValueError('激活函数不存在')
# 输出结果,设置默认激活函数为S型函数,超参数设置为1
def forward(self, inputs, c=4, p=1):
# 计算输入的加权和加上偏置
z = np.dot(inputs, self.weights) + self.bias
# 应用激活函数
return self.activation_function(z, c, p)
if __name__ == "__main__":
# 示例使用
# 假设我们有一个神经元,有两个输入,权重为[0.5, -0.3],偏置为0.6
weights = [0.5, -0.3]
bias = 0.6
# 创建神经元实例
neuron = Neuron(weights, bias)
# 假设输入为[0.1, -0.2]
inputs = np.array([0.1, -0.2])
# 进行前向传播计算输出
output = neuron.forward(inputs)
print("神经元输出:", output)
在上述代码中,Neuron 类先通过 forward 函数计算神经元模型数学公式中的 $I$,然后通过 activation_function 实现对激活函数的选择及输出。案例实现结果如下:
神经元输出: 0.6704011598088686
参考文献
[1] 毕晓君. 2020. 计算智能 [M]. 人民邮电出版社, 北京. 17-19.