递归人工神经网络研究报告
摘要
本文在已有的MP神经网络基础上,从生物仿生学角度入手,根据赫布法则(Hebbian theory)与霍普菲尔德网络,构建出了一种连续的递归神经网络,根据研究发现,这种递归神经网络与深层全连接前馈神经网络(DNN)的结构具有一定的相似性,或许可以在后续关于深层神经网络的可解释性以及其他应用方面做出贡献。
人工神经网络的历史
人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型.按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。
MP神经网络
MP神经网络是目前最流行的神经网络模型,目前的许多应用都是基于此,例如卷积神经网络(CNN),长短时记忆网络等,但是这些模型尤其是CNN,虽然已经在许多方面取得了重大的进步,但是在一些方面始终存在着缺陷与短板,例如可解释性,图像的旋转不变性等,我认为原因在于:列如CNN这样的模型,重点在于特征的提取更加的清晰,从CNN的结构上我们可以看到,卷积,池化等操作都是为了将原始信息重点特征进行提取,最后通过一个DNN进行学习,为了提高网络的性能,人们研究出了各种各样的方法提取信息的特征,诸如不同的卷积核,不同的层数,注意力机制的引入,甚至是图像的各种预处理,或者网络的预训练,当然根据实践来讲,这些方法各有优劣,在不同的数据集上也有着不俗的表现,但是从“第一性原理”的角度思考,总觉得有些“治标不治本” ,所以我认为,要想让深度学习迈入下一个阶段,必须要从传统的DNN下手,事实上,许多的学者也已认识到这一问题,例如南京大学的周志华研究小组所提出的
而我们将在此基础上研究其在一般的深度学习任务范式下的表现。即分类,回归,预测。
算法推导:
符号解释
符号 | 解释 |
---|---|
x ⃗ p × 1 ( i ) \vec x_{p\times 1}^{(i)} xp×1(i) | 输 入 向 量 输入向量 输入向量 |
W I J W_{IJ} WIJ | 输 入 层 − 隐 藏 层 权 重 矩 阵 输入层-隐藏层权重矩阵 输入层−隐藏层权重矩阵 |
S ( x ) S(x) S(x) | 逻 辑 斯 蒂 函 数 ( l o g i s i c ) 逻辑斯蒂函数(logisic) 逻辑斯蒂函数(logisic) |
b J b_{J} bJ | 隐 藏 层 偏 置 ( b i a s ) 隐藏层偏置(bias) 隐藏层偏置(bias) |
W J K W_{JK} WJK | 隐 藏 层 − 输 出 层 权 重 矩 阵 隐藏层-输出层权重矩阵 隐藏层−输出层权重矩阵 |
y ⃗ q × 1 ( i ) \vec y_{q\times 1}^{(i)} yq×1(i) | 输 出 向 量 ( 观 测 向 量 ) 输出向量(观测向量) 输出向量(观测向量) |
E ( x ) E(x) E(x) | 损 失 函 数 损失函数 损失函数 |
p | 特征矩阵维度 |
q | 标签矩阵维度 |
n | 样本总量 |
J n u m J_{num} Jnum | 隐藏层神经元个数 |
X p × n X_{p\times n} Xp×n | 输入矩阵 |
Y q × n Y_{q\times n} Yq×n | 观测矩阵 |
∘ \circ ∘ | 哈达马积(基本积) |
在神经网络的发展初期,其一般流程被定义为下几个步骤
正向传播过程
定义:
X
p
×
n
=
(
x
⃗
(
1
)
,
x
⃗
(
2
)
,
.
.
.
,
x
⃗
(
p
)
)
T
,
x
⃗
(
i
)
=
(
x
(
1
,
1
)
,
x
(
1
,
2
)
,
.
.
.
,
x
(
1
,
n
)
)
(0)
X_{p\times n} = (\vec x^{(1)},\vec x^{(2)},...,\vec x^{(p)})^T,\vec x^{(i)} = (x^{(1,1)},x^{(1,2)},...,x^{(1,n)})\tag{0}
Xp×n=(x(1),x(2),...,x(p))T,x(i)=(x(1,1),x(1,2),...,x(1,n))(0)
Y
q
×
n
=
(
y
⃗
(
1
)
,
y
⃗
(
2
)
,
.
.
.
,
y
⃗
(
q
)
)
T
,
y
⃗
(
i
)
=
(
y
(
1
,
1
)
,
y
(
1
,
2
)
,
.
.
.
,
y
(
1
,
n
)
)
(1)
Y_{q\times n} = (\vec y^{(1)},\vec y^{(2)},...,\vec y^{(q)})^T,\vec y^{(i)} = (y^{(1,1)},y^{(1,2)},...,y^{(1,n)})\tag{1}
Yq×n=(y(1),y(2),...,y(q))T,y(i)=(y(1,1),y(1,2),...,y(1,n))(1)
W
I
J
=
{
w
1
,
1
.
.
.
w
1
,
p
.
.
.
w
i
,
j
.
.
.
w
n
,
1
.
.
.
w
n
,
p
}
n
×
p
(2)
W_{IJ} = \left\{ \begin{matrix} w_{1,1} &... & w_{1,p} \\ ... & w_{i,j} & ... \\ w_{n,1} & ... & w_{n,p} \end{matrix} \right\}_{n\times p}\tag{2}
WIJ=⎩⎨⎧w1,1...wn,1...wi,j...w1,p...wn,p⎭⎬⎫n×p(2)
W
J
K
=
{
w
1
,
1
.
.
.
w
1
,
q
.
.
.
w
i
,
j
.
.
.
w
n
,
1
.
.
.
w
n
,
q
}
n
×
q
(3)
W_{JK} = \left\{ \begin{matrix} w_{1,1} &... & w_{1,q} \\ ... & w_{i,j} & ... \\ w_{n,1} & ... & w_{n,q} \end{matrix} \right\}_{n\times q}\tag{3}
WJK=⎩⎨⎧w1,1...wn,1...wi,j...w1,q...wn,q⎭⎬⎫n×q(3)
输入层(
I
I
I)输出:
I
o
u
t
p
u
t
:
x
⃗
(
i
)
(4)
I_{output}:\vec x^{(i)}\tag{4}
Ioutput:x(i)(4)
隐藏层(
J
J
J)输入:
J
i
n
p
u
t
:
W
I
J
⋅
I
o
u
t
p
u
t
(5)
J_{input}:W_{IJ}\cdot I_{output}\tag{5}
Jinput:WIJ⋅Ioutput(5)
隐藏层(
J
J
J)输出:
J
o
u
t
p
u
t
:
S
(
J
i
n
p
u
t
−
b
J
)
(6)
J_{output}:S(J_{input}-b_J)\tag{6}
Joutput:S(Jinput−bJ)(6)
输出层(
K
K
K)输入:
K
i
n
p
u
t
:
W
J
K
⋅
J
o
u
t
p
u
t
(7)
K_{input}:W_{JK}\cdot J_{output}\tag{7}
Kinput:WJK⋅Joutput(7)
输出层(
K
K
K)输出:
K
o
u
t
p
u
t
=
K
i
n
p
u
t
(8)
K_{output}=K_{input}\tag{8}
Koutput=Kinput(8)
误差向量(
E
E
E):
e
⃗
(
i
)
=
y
⃗
(
i
)
−
K
o
u
t
p
u
t
(9)
\vec e^{(i)}=\vec y^{(i)}-K_{output}\tag{9}
e(i)=y(i)−Koutput(9)
损失函数:
E
(
K
(
o
u
t
p
u
t
)
)
=
1
2
n
∑
i
=
1
n
(
e
(
i
)
)
2
(10)
E(K_{(output)})=\frac{1}{2n}\sum_{i=1}^{n}(e^{(i)})^2\tag{10}
E(K(output))=2n1i=1∑n(e(i))2(10)
神经网络的在初期发展的过程中遭遇了很大的挫折,第一代神经网络的结构缺陷制约了其发展。感知机中特征提取层的参数有人手工调整,这违背了其“智能”的要求。另一方面,单层结构限制了它的学习能力,很多函数都超出了它的学习范畴。
1985年,Geoffrey Hinton使用多个隐藏层来代替感知机中原先的单个特征层,并使用BP算法(Back-propagation algorithm,proposed in 1969,practicable in 1974)来计算网络参数,BP算法采用了梯度下降法来作为优化器,下面我们简单介绍一下BP算法。
反向传播过程
我们知道梯度下降的一般形式:
f
(
x
k
+
1
)
=
f
(
x
k
)
+
α
d
k
(11)
f(x_{k+1}) = f(x_k)+\alpha d_k\tag{11}
f(xk+1)=f(xk)+αdk(11)
d
k
dk
dk指
f
(
x
)
f(x)
f(x)在x方向上的负导数,即梯度。
d
k
=
−
∂
f
(
x
)
∂
x
(12)
d_k = -\frac{\partial f(x)}{\partial x}\tag{12}
dk=−∂x∂f(x)(12)
已知损失函数
E
(
K
(
o
u
t
p
u
t
)
)
=
1
2
n
∑
i
=
1
n
(
e
(
i
)
)
2
(13)
E(K_{(output)})=\frac{1}{2n}\sum_{i=1}^{n}(e^{(i)})^2\tag{13}
E(K(output))=2n1i=1∑n(e(i))2(13)
使用这个损失函数的原因是因为它可以消除正负误差所带来的抵消效应,同时平滑连续,这使得梯度下降法很好地发挥作用——没有间断,也没有突然的跳跃。
然后我们对隐藏层与输出层之间的参数
W
o
u
t
p
u
t
_
h
i
d
d
e
n
(
W
J
K
)
(14)
W_{output_hidden}(W_{JK})\tag{14}
Woutput_hidden(WJK)(14)求偏导
∂
E
∂
W
J
K
=
∂
1
2
n
∑
i
=
1
n
(
e
(
i
)
)
2
∂
W
J
K
(15)
\frac{\partial E}{\partial W_{JK}}=\frac{\partial \frac{1}{2n}\sum_{i=1}^{n}(e^{(i)})^2}{\partial W_{JK}\tag{15}}
∂WJK∂E=∂WJK∂2n1∑i=1n(e(i))2(15)
但是实际上误差函数并不需要对所有节点求和,因为在这个一元函数回归问题里面输出节点只有一个,单个节点的输出只与与它相连的权重有关系,所以
n
=
1
n=1
n=1
∂
E
∂
W
J
K
=
∂
1
2
(
e
)
2
∂
W
J
K
=
∂
E
∂
K
o
u
t
p
u
t
∂
K
o
u
t
p
u
t
∂
W
J
K
=
−
e
I
o
u
t
p
u
t
T
(16)
\frac{\partial E}{\partial W_{JK}}=\frac{\partial \frac{1}{2}(e)^2}{\partial W_{JK}}=\frac{\partial E}{\partial K_{output}}\frac{\partial K_{output} }{\partial W_{JK}} =-eI_{output}^T\tag{16}
∂WJK∂E=∂WJK∂21(e)2=∂Koutput∂E∂WJK∂Koutput=−eIoutputT(16)
接下来对隐含层-输入层参数求导:
∵
∂
S
(
x
)
∂
x
=
S
(
x
)
(
1
−
S
(
x
)
)
(17)
\because \frac{\partial S(x)}{\partial x} = S(x)(1-S(x))\tag{17}
∵∂x∂S(x)=S(x)(1−S(x))(17)
∴
∂
E
∂
W
I
J
=
∂
E
∂
K
o
u
t
p
u
t
∂
K
o
u
t
p
u
t
∂
J
o
u
t
p
u
t
∂
J
o
u
t
p
u
t
∂
W
I
J
=
−
e
W
J
K
T
∘
J
o
u
t
p
u
t
∘
(
1
−
J
o
u
t
p
u
t
)
I
o
u
t
p
u
t
T
(18)
\therefore \frac{\partial E}{\partial W_{IJ}} = \frac{\partial E}{\partial K_{output}}\frac{\partial K_{output}}{\partial J_{output}}\frac{\partial J_{output}}{\partial W_{IJ}}\\ =-eW_{JK}^T\circ J_{output}\circ (1-J_{output})I_{output}^T\tag{18}
∴∂WIJ∂E=∂Koutput∂E∂Joutput∂Koutput∂WIJ∂Joutput=−eWJKT∘Joutput∘(1−Joutput)IoutputT(18)
对隐含层的偏置
b
J
b_J
bJ求导:
∂
E
∂
b
J
=
∂
E
∂
K
o
u
t
p
u
t
∂
K
o
u
t
p
u
t
∂
J
o
u
t
p
u
t
∂
J
o
u
t
p
u
t
∂
b
J
=
−
e
W
J
K
T
∘
J
o
u
t
p
u
t
∘
(
1
−
J
o
u
t
p
u
t
)
(19)
\frac{\partial E}{\partial b_J}=\frac{\partial E}{\partial K_{output}}\frac{\partial K_{output}}{\partial J_{output}}\frac{\partial J_{output}}{\partial b_{J}} =-eW_{JK}^T\circ J_{output}\circ (1-J_{output})\tag{19}
∂bJ∂E=∂Koutput∂E∂Joutput∂Koutput∂bJ∂Joutput=−eWJKT∘Joutput∘(1−Joutput)(19)
参数迭代式:
W
J
K
k
+
1
=
W
J
K
k
−
α
∂
E
∂
W
J
K
W_{JK}^{k+1} = W_{JK}^k-\alpha \frac{\partial E}{\partial W_{JK}}
WJKk+1=WJKk−α∂WJK∂E
其他类似。
其中
k
k
k为迭代次数,
α
\alpha
α为学习率。
人工神经网络处理回归任务的表现
任务目标:拟合函数
s
i
n
2
x
+
1
sin2x + 1
sin2x+1
最终效果: