人工神经网络(Artificial Neural Network,简记ANN)是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及功能的一种抽象数学模型。
自1943 年美国心理学家W. McCulloch 和数学家W. Pitts 提出形式神经元的抽象数学模型—MP 模型以来,人工神经网络的研究取得了重大进展,有关的理论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。
它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及专家系统等领域得到广泛的应用,提出了40 多种神经网络模型,其中比较著名的有感知机,Hopfield 网络,Boltzman 机,自适应共振理论,深度学习…等。
神经元的人工模型
神经元及其突触是神经网络的基本器件。因此,模拟生物神经网络应首先模拟生物神经元------人工神经元(节点)
从三个方面进行模拟生物神经网络:
- 节点本身的信息处理能力(数学模型)
- 节点与节点之间连接(拓扑结构)
- 相互连接的强度(通过学习来调整)
神经元的输出
人工神经元的输出也同生物神经元一样仅有一个,如用o表示神经元输出,则输出与输入之间的对应关系可用图(d)中的某种非线性函数来表示,这种函数一般都是非线性的。
1.神经元的数学模型
o
(
t
+
1
)
=
f
{
[
∑
i
=
1
n
w
i
x
i
(
t
)
]
−
T
}
o(t+1)=f\left\{\left[\sum_{i=1}^{n} w_{i} x_{i}(t)\right]-T\right\}
o(t+1)=f{[i=1∑nwixi(t)]−T}
“输入总和”常称为神经元在t 时刻的净输入,用下面的式子表示
n
e
t
′
(
t
)
=
∑
i
=
1
n
w
i
x
i
(
t
)
n e t^{\prime}(t)=\sum_{i=1}^{n} w_{i} x_{i}(t)
net′(t)=∑i=1nwixi(t)
用向量表示就是:
n
e
t
′
=
W
T
X
net ^{\prime}=\boldsymbol{W}^{T} \boldsymbol{X}
net′=WTX,其中,
W
=
(
w
1
,
w
2
,
…
,
w
n
)
T
\boldsymbol{W}=\left(w_{1}, w_{2}, \ldots, w_{n}\right)^{T}
W=(w1,w2,…,wn)T,
X
=
(
x
1
x
2
…
x
n
)
T
\boldsymbol{X}=\left(x_{1} x_{2} \ldots x_{n}\right)^{T}
X=(x1x2…xn)T.
令
w
0
=
T
,
x
0
=
−
1
,
w_{0}=T, \quad x_{0}=-1, \quad
w0=T,x0=−1, 则有
−
T
=
w
0
x
0
-T=w_{0} x_{0}
−T=w0x0,那么,净输入与阈值之差可表达为
n
e
t
′
−
T
=
n
e
t
=
∑
i
=
0
n
w
i
x
i
=
W
T
X
n e t^{\prime}-T=n e t=\sum_{i=0}^{n} w_{i} x_{i}=\mathbf{W}^{T} \mathbf{X}
net′−T=net=∑i=0nwixi=WTX
注意公式的起始下标,净输入改写为net,与原来的区别是包含了阈值。
令
w
0
=
T
,
x
0
=
−
1
w_0=T,x_0=-1
w0=T,x0=−1,则有
−
T
=
w
0
x
0
-T=w_0x_0
−T=w0x0
import numpy as np
import matplotlib.pyplot as plt
w = np.array([0.3,0.3,0.4,0.5])
x = np.array([-1,1.24,1.37,1.56])
print(np.sign(np.dot(w,x))) #1.0
1.1 神经元的转移函数
神经元各种不同数学模型的主要区别在于采用了不同的转移函数,从而使神经元具有不同的信息处理特性。神经元的信息处理特性是决定人工神经网络整体性能的三大要素之一,反映了神经元输出与其激活状态之间的关系,最常用的转移函数有4种形式。
- Active function 激活函数(阶跃函数)
s g n ( x ) = 1 x > = 0 sgn(x)=1 x >= 0 sgn(x)=1x>=0 - 非线性转移函数(实数域R到[0,1]闭集的非减连续函数,代表了状态连续型神经元模型,函数本身及其导数都是连续的,便于处理)
- 分段线性转移函数(一定区间内满足线性关系,模拟了实际系统中的饱和特性。 )
f ( x ) = { 0 x ⩽ 0 c x 0 < x ⩽ x c 1 x c < x f(x)=\left\{\begin{array}{ll}0 & x \leqslant 0 \\ c x & 0<x \leqslant x_{c} \\ 1 & x_{c}<x\end{array}\right. f(x)=⎩⎨⎧0cx1x⩽00<x⩽xcxc<x - ReLU
- 概率型转移函数(输入与输出之间的关系是不确定的,需用一个随机函数来描述输出状态为1或为0的概率)
设神经元输出为1的概率为:
P ( 1 ) = 1 1 + e − x / T P(1)=\frac{1}{1+e^{-x / T}} P(1)=1+e−x/T1,T是温度参数
由于采用该转移函数的神经元输出状态分布与热力学中的玻尔兹曼(Boltzmann)分布相类似,因此这种神经元模型也称为热力学模型。
Python中的传递函数:‘identity’, ‘logistic’, ‘tanh’, ‘relu’
‘identity’, no-op activation, useful to implement linear bottleneck, returns f(x) = x
‘logistic’, the logistic sigmoid function, returns f(x) = 1 / (1 + exp(-x)).
‘tanh’, the hyperbolic tan function, returns f(x) = tanh(x).
‘relu’, the rectified linear unit function, returns f(x) = max(0, x)
R语言中的传递函数如下
“purelin”: 线性函数
“tansig” : 传递函数
“sigmoid”. S型函数
“hardlim”.
“custom”: 用户自定义的函数
#用python画传递函数 logistic,tanh
x = np.linspace(-10, 10,50)
y = np.tanh(x)
z = 1/(1+np.exp(-x))
plt.plot(x,y,x,z)
plt.legend(['tanh(x)','1/(1+np.exp(-x))'])
plt.show()
1.2 人工神经网络模型
分类:
按网络连接的拓扑结构分类
- 层次型结构
- 互连型网络结构
按网络内部的信息流向分类
- 前馈型网络
- 反馈型网络
前馈型网络
输入节点:只负责从外界引入信息后向前传递给第一隐层;
具有处理能力的节点:包括各隐层和输出层节点。
前馈网络中一层的输出是下一层的输入,信息的处理具有逐层传递进行的方向性,一般不存在反馈环路。
2 神经网络的学习方式
神经网络的学习方式是决定神经网络信息处理性能的第三大要素,因为有关学习的研究在神经网络研究中具有重要的地位。
W
(
t
+
1
)
=
W
(
t
)
+
Δ
W
(
t
)
\mathbf{W}(t+1)=\mathbf{W}(t)+\Delta W(t)
W(t+1)=W(t)+ΔW(t),
Δ
W
=
η
[
W
(
t
)
,
X
(
t
)
,
d
(
t
)
]
X
(
t
)
\Delta \mathbf{W}=\eta[\mathbf{W}(t), \mathbf{X}(t), d(t)] \mathbf{X}(t)
ΔW=η[W(t),X(t),d(t)]X(t)
def ad_weight(w,x,d,e):
'''
Parameters
----------
w : list
权重向量.
x : list
输入向量.
d : int
标记.
e : float
学习率.
Returns
-------
权重变化.
'''
x = np.array(x)
w = np.array(w)
delta = d-np.sign(np.dot(x,w))
if delta == 0:
return w
else:
return e*delta*x+w
X = [[-1,1,-2,0],[-1,0,1.5,-0.5],[-1,-1,1,0.5]] #输入向量的二维数组
D = [-1,-1,1] #期望输出,标签.
w = [1,-1,-1,0.5]
for i in range(len(X)):
w = ad_weight(w, X[i], D[i], 0.1)
print(w)
[ 1.1 -1.1 -0.8 0.5]
[ 1.1 -1.1 -0.8 0.5]
[ 0.9 -1.3 -0.6 0.6]
[ 0.9 -1.3 -0.6 0.6]
[ 0.9 -1.3 -0.6 0.6]
[ 0.9 -1.3 -0.6 0.6]
参考资料:李老师的上课ppt