单一的神经元能够学习的函数是有限的,仅仅能学习线性可分的函数;当学习非线性的复杂函数时,就要用到神经网络。
同一层的神经元在两方面是相同:(一)同一层中的神经元连接着相同的源头,即他们的接收的信息是相同的;(二)同一层中的神经元有着相同的动态更新机制。即同一层中的神经元有着相同的连接源头、目的和相同的激活函数。
一个神经网络中有两种权重:层内权重
(
i
n
t
r
a
l
a
y
e
r
w
e
i
g
h
t
s
)
(intralayer \; weights)
(intralayerweights)——指在同一层中神经元之间的权重;层间权重
(
i
n
t
e
r
l
a
y
e
r
w
e
i
g
h
t
s
)
(interlayer\; weights)
(interlayerweights)——指不同层神经元之间的权重。一个神经网络可能包含其中一种权重或两种权重都有。
神经网络的典型类型
1.前馈神经网络(FNN,Feedforward Neural Networks)
一个标准的前馈神经网络由三层组成:输入层、隐层(不止一层)、输出层。实际上,只要隐层具有足够的隐神经元,具有单调递增且可微的 FNN可以用一个隐层逼近任意连续函数。只有一个隐层的 FNN 示意图如下:
对于上图所示的 FNN 网络,给定任意输入 z p \mathbf z_p zp,对于任意的输出单元 o k o_k ok,有 :
o k , p = f o k ( n e t o k , p ) = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( n e t y j , p ) ) = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( ∑ i = 1 I + 1 v j i ⋅ z i , p ) ) \begin{array}{ll} &o_{k,p}= f_{o_k}(net_{o_k,p})\\ &\\ & = f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(net_{y_j,p}))\\ &\\ &= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{I+1}_{i=1}v_{ji}\cdot z_{i,p})) \end{array} ok,p=fok(netok,p)=fok(∑j=1J+1ωkj⋅fyj(netyj,p))=fok(∑j=1J+1ωkj⋅fyj(∑i=1I+1vji⋅zi,p))
其中, f o k f_{o_k} fok 和 f y j f_{y_j} fyj 分别代表输出单元 o k o_k ok 和隐层单元 y j y_j yj 的激活函数; ω k j \omega_{kj} ωkj 是输出单元 o k o_k ok 和隐层单元 y j y_j yj 之间的权重; z i , p z_{i,p} zi,p 表示第 p 个输入 z p \mathbf z_p zp 的第 i i i 个维度的值;输入单元的第 I + 1 I+1 I+1 维度和隐层的第 J + 1 J+1 J+1 维度代表的是对应的偏差项;其输入层的激活函数为线性函数。
2.功能连接神经网络(FLNN, Functional Link Neural Networks)
在FLNN中,输入单元执行激活函数的操作,一个FLNN只是将FNN的输入层扩展为一层较高功能单元层的神经网络。输入层有
I
I
I 维,将其扩展为函数单元
h
1
,
h
2
,
⋯
,
h
L
h_1,h_2,\cdots,h_L
h1,h2,⋯,hL,
L
L
L 是总的函数单元个数,其中每个函数单元
h
l
h_l
hl 是输入向量
(
z
1
,
z
2
,
⋯
,
z
I
)
(z_1,z_2,\cdots,z_I)
(z1,z2,⋯,zI) 的函数。输入层和函数功能单元层直接的权重矩阵设置为:
u l i = { 1 , i f 函 数 单 元 h l 独 立 于 z i 0 , o t h e r w i s e \displaystyle u_{li}=\left\{ \begin{aligned} 1, & & {if\,\,函数单元 \,h_l\,独立于\,z_i}\\ 0, & & {otherwise}\\ \end{aligned} \right. uli={1,0,if函数单元hl独立于ziotherwise
而 v j l v_{jl} vjl 是隐层单元 y j y_j yj 和连接函数单元 h l h_l hl 之间的权重。类似于 FNN ,计算输出单元如下:
o k , p = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( ∑ l = 1 L + 1 v j l ⋅ h l ( z p ) ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{L+1}_{l=1}v_{jl}\cdot h_l(\mathbf z_{p}))) ok,p=fok(j=1∑J+1ωkj⋅fyj(l=1∑L+1vjl⋅hl(zp)))
更高输入功能单元的组合使得训练更快,准确度也会增加。
3.乘积单元神经网络(PUNN,Product Unit Neural Networks)
PUNN的神经元计算输入单元的幂权重乘积,而非权重求和。有不同类型的PUNN结构,一种是每个输入单元同求和单元连接,并连接到一组专用的求积单元;另一种是具有交替的求积层和求和层。这里仅讨论隐层只有求积单元的情况,其输出单元是求积单元,并假定网络中的所有神经元的激活函数均为线性激活函数。那么,对应每个隐层单元 y j y_j yj,其节点输入(不考虑偏差)是:
n e t y j , p = ∏ i = 1 I z i , p v j i = ∏ i = 1 I e x p { v j i ⋅ l n ( z i , p ) } = e x p { ∑ i = 1 I v j i ⋅ l n ( z i , p ) } \displaystyle net_{y_{j,p}}=\prod^I_{i=1}z^{v_{ji}}_{i,p}=\prod^I_{i=1}exp\{v_{ji}\cdot ln(z_{i,p})\}=exp\{\sum^I_{i=1}v_{ji}\cdot ln(z_{i,p})\} netyj,p=i=1∏Izi,pvji=i=1∏Iexp{vji⋅ln(zi,p)}=exp{i=1∑Ivji⋅ln(zi,p)},其中 v j i v_{ji} vji 是输入单元 z i z_i zi 和隐层单元 y j y_j yj 之间的权重。
若考虑扰动项(偏差),则 n e t y j , p = ∏ i = 1 I + 1 z i , p v j i \displaystyle net_{y_{j,p}}=\prod^{I+1}_{i=1}z^{v_{ji}}_{i,p} netyj,p=i=1∏I+1zi,pvji,其中 z I + 1 , p = − 1 , v j , I + 1 z_{I+1,p}=-1,v_{j,I+1} zI+1,p=−1,vj,I+1 是扰动因子,扰动因子的作用是在训练过程动态的塑造激活函数,使得更逼近训练数据所代表的真实函数的形状。
若 z i , p < 0 z_{i,p}<0 zi,p<0, 则考虑以复数形式表达,即 z i , p = i 2 ⋅ ∣ z i , p ∣ , i = − 1 z_{i,p}=i^2\cdot|z_{i,p}|,i=\sqrt{-1} zi,p=i2⋅∣zi,p∣,i=−1,则有:
n e t y j , p = e x p { ∑ i = 1 I v j i ⋅ l n ∣ z i , p ∣ } ⋅ e x p { ∑ i = 1 I v j i ⋅ l n ( i 2 ) } = e x p { ∑ i = 1 I v j i ⋅ l n ∣ z i , p ∣ } ⋅ e x p { ∑ i = 1 I v j i ⋅ π i } = e x p { ∑ i = 1 I v j i ⋅ l n ∣ z i , p ∣ } ⋅ [ c o s ( ∑ i = 1 I v j i ⋅ π ) + i s i n ( ∑ i = 1 I v j i ⋅ π ) ] \begin{array}{ll} &net_{y_{j,p}}= exp\{\sum^I_{i=1}v_{ji}\cdot ln|z_{i,p}|\}\cdot exp\{\sum^I_{i=1}v_{ji}\cdot ln(i^2)\}\\ &\\ & = exp\{\sum^I_{i=1}v_{ji}\cdot ln|z_{i,p}|\}\cdot exp\{\sum^I_{i=1}v_{ji}\cdot \pi i\}\\ &\\ &= exp\{\sum^I_{i=1}v_{ji}\cdot ln|z_{i,p}|\}\cdot [cos(\sum^I_{i=1}v_{ji}\cdot\pi)+i\,sin(\sum^I_{i=1}v_{ji}\cdot\pi)] \end{array} netyj,p=exp{∑i=1Ivji⋅ln∣zi,p∣}⋅exp{∑i=1Ivji⋅ln(i2)}=exp{∑i=1Ivji⋅ln∣zi,p∣}⋅exp{∑i=1Ivji⋅πi}=exp{∑i=1Ivji⋅ln∣zi,p∣}⋅[cos(∑i=1Ivji⋅π)+isin(∑i=1Ivji⋅π)]
抛开虚部(虚部对性能提升没有帮助),则 n e t y j , p = e x p { ∑ i = 1 I v j i ⋅ l n ∣ z i , p ∣ } ⋅ c o s ( π ∑ i = 1 I v j i ) \displaystyle net_{y_{j,p}}=exp\{\sum^I_{i=1}v_{ji}\cdot ln|z_{i,p}|\}\cdot cos(\pi\sum^I_{i=1}v_{ji}) netyj,p=exp{i=1∑Ivji⋅ln∣zi,p∣}⋅cos(πi=1∑Ivji),
令 ρ j , p = ∑ i = 1 I v j i ⋅ l n ∣ z i , p ∣ , ϕ j , p = ∑ i = 1 I v j i ⋅ I i \displaystyle\rho_{j,p}=\sum^I_{i=1}v_{ji}\cdot ln|z_{i,p}|,\;\phi_{j,p}=\sum^I_{i=1}v_{ji}\cdot\mathcal I_i ρj,p=i=1∑Ivji⋅ln∣zi,p∣,ϕj,p=i=1∑Ivji⋅Ii,而 I i = { 0 , i f z i , p > 0 1 , i f z i , p < 0 \displaystyle \mathcal I_i=\left\{ \begin{aligned} 0, & & {if\,\,z_{i,p}>0}\\ 1, & & {if\,\,z_{i,p}<0}\\ \end{aligned} \right. Ii={0,1,ifzi,p>0ifzi,p<0,那么 n e t y j , p = e ρ j , p ⋅ c o s ( π ϕ j , p ) \displaystyle net_{y_{j,p}}=e^{\rho_{j,p}}\cdot cos(\pi\phi_{j,p}) netyj,p=eρj,p⋅cos(πϕj,p),
可得,每个输出单元的值为: o k , p = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( e ρ j , p ⋅ c o s ( π ϕ j , p ) ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(e^{\rho_{j,p}}\cdot cos(\pi\phi_{j,p}))) ok,p=fok(j=1∑J+1ωkj⋅fyj(eρj,p⋅cos(πϕj,p)))
4.简单循环神经网络(SRNN,Simple Recurrent Neural Networks)
SRNN有反馈连接,这使得其具备学习数据集时间特征的能力。
Elman SRNN
由Elman对FNN进行扩展,得到的Elman SRNN结构如下,其创建了一个隐层的副本,被称为文本层,其目的是存储隐层的先前状态。文本层充当输入层的扩展,向隐层提供表示以前网络状态的信号。
其输入向量变为: z = ( z 1 , ⋯ , z I + 1 , ⏟ a c t u a l i n p u t s z I + 2 , ⋯ , z I + 1 + J ⏟ c o n t e x t u n i t s ) \displaystyle\mathbf z=(\underbrace{z_1,\cdots,z_{I+1},}_{actual\; inputs}\underbrace{z_{I+2},\cdots,z_{I+1+J}}_{context\;units}) z=(actualinputs z1,⋯,zI+1,contextunits zI+2,⋯,zI+1+J);
文本层单元 z I + 2 , ⋯ , z I + 1 + J z_{I+2},\cdots,z_{I+1+J} zI+2,⋯,zI+1+J 与隐层单元全链接,隐层单元 y j y_j yj 到相应的文本层单元 z I + 1 + j z_{I+1+j} zI+1+j 的权重是 1(可根据需要调整),此时,激活值 y j y_j yj 被复制到 z I + 1 + j z_{I+1+j} zI+1+j 。可计算得到输出单元:
o k , p = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( ∑ i = 1 I + 1 + J v j i ⋅ z i , p ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{I+1+J}_{i=1}v_{ji}\cdot z_{i,p})) ok,p=fok(j=1∑J+1ωkj⋅fyj(i=1∑I+1+Jvji⋅zi,p)),其中 ( z I + 2 , p , ⋯ , z I + 1 + J , p ) = ( y 1 , p ( t − 1 ) , ⋯ , y J , p ( t − 1 ) ) (z_{I+2,p},\cdots,z_{I+1+J,p})=(y_{1,p}(t-1),\cdots,y_{J,p}(t-1)) (zI+2,p,⋯,zI+1+J,p)=(y1,p(t−1),⋯,yJ,p(t−1))
Jordan SRNN
由Jordan对FNN进行扩展,得到的Jordan SRNN结构如下,其创建了一个输出层的副本,被称为状态层,输出层的先前状态被作为网络的输入。
其输入向量变为: z = ( z 1 , ⋯ , z I + 1 , ⏟ a c t u a l i n p u t s z I + 2 , ⋯ , z I + 1 + K ⏟ s t a t e u n i t s ) \displaystyle\mathbf z=(\underbrace{z_1,\cdots,z_{I+1},}_{actual\; inputs}\underbrace{z_{I+2},\cdots,z_{I+1+K}}_{state\;units}) z=(actualinputs z1,⋯,zI+1,stateunits zI+2,⋯,zI+1+K),
输出单元变为: o k , p = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( ∑ i = 1 I + 1 + K v j i ⋅ z i , p ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{I+1+K}_{i=1}v_{ji}\cdot z_{i,p})) ok,p=fok(j=1∑J+1ωkj⋅fyj(i=1∑I+1+Kvji⋅zi,p)),其中 ( z I + 2 , p , ⋯ , z I + 1 + K , p ) = ( o 1 , p ( t − 1 ) , ⋯ , o K , p ( t − 1 ) ) (z_{I+2,p},\cdots,z_{I+1+K,p})=(o_{1,p}(t-1),\cdots,o_{K,p}(t-1)) (zI+2,p,⋯,zI+1+K,p)=(o1,p(t−1),⋯,oK,p(t−1))
5.时间延迟神经网络(TDNN,Time-Delay Neural Networks)
时间延迟神经网络也被称为通过时间的反向传播,是一个时间网络,其输入模式在时间上相继延迟,简单的TDNN示意图如下所示。第一个神经元的每个输入信号延迟
n
t
n_t
nt,这种类型的神经元被用作构建一个完整的前馈 TDNN 的构件。
初始时, t = 0 t=0 t=0,只有 z i , p ( t ) z_{i,p}(t) zi,p(t) 有值,而 ∀ i = 1 , ⋯ , I \forall i=1,\cdots,I ∀i=1,⋯,I;时间步 t ′ = 1 , ⋯ , n t t'=1,\cdots,n_t t′=1,⋯,nt,都有 z i , p ( t − t ′ ) = 0 z_{i,p}(t-t')=0 zi,p(t−t′)=0, n t n_t nt 是总的时间步(延迟的时间数)。
第一个模式出现之后,第二个模式出现之前,有 z i , p ( t − 1 ) = z i , p ( t ) z_{i,p}(t-1)=z_{i,p}(t) zi,p(t−1)=zi,p(t);
第 t ′ t' t′ 个模式出现之后,第 t ′ + 1 t'+1 t′+1 个模式出现之前,有 z i , p ( t − t ′ ) = z i , p ( t − t ′ + 1 ) z_{i,p}(t-t')=z_{i,p}(t-t'+1) zi,p(t−t′)=zi,p(t−t′+1);
z i , p ( t − t ′ ) 和 z i , p ( t − t ′ + 1 ) z_{i,p}(t-t')和z_{i,p}(t-t'+1) zi,p(t−t′)和zi,p(t−t′+1) 之间的连接权重为1。这就使得总共有 n t n_t nt 个模式(输入)会影响权重更新,从而使得时间特征可以驱动函数形成。
TDNN是输出为: o k , p = f o k ( ∑ j = 1 J + 1 ω k j ⋅ f y j ( ∑ i = 1 I ∑ t = 0 n t v j , i ( t ) ⋅ z i , p ( t ) + z I + 1 ⋅ v j , I + 1 ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{J+1}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{I}_{i=1}\sum^{n_t}_{t=0}v_{j,i(t)}\cdot z_{i,p}(t)+z_{I+1}\cdot v_{j,I+1})) ok,p=fok(j=1∑J+1ωkj⋅fyj(i=1∑It=0∑ntvj,i(t)⋅zi,p(t)+zI+1⋅vj,I+1))
6.级联神经网络(CNN,Cascade Neural Networks)
注意,此处CNN指级联神经网络,而非卷积神经网络。CNN是一个多层FNN,其所有输入单元直接连接到所有隐层单元和输出单元,即每个隐层单元的输出作为所有后续隐层单元和所有输出单元的输入。其结构如下所示:
CNN的输出为: o k , p = f o k ( ∑ i = 1 I + 1 u k i ⋅ z i + ∑ j = 1 J ω k j ⋅ f y j ( ∑ i = 1 I + 1 v j i ⋅ z i + ∑ l = 1 j − 1 s j l ⋅ y l ) ) \displaystyle o_{k,p}= f_{o_k}(\sum^{I+1}_{i=1}u_{ki}\cdot z_i+\sum^{J}_{j=1}\omega_{kj}\cdot f_{y_j}(\sum^{I+1}_{i=1}v_{ji}\cdot z_i+\sum^{j-1}_{l=1}s_{jl}\cdot y_l)) ok,p=fok(i=1∑I+1uki⋅zi+j=1∑Jωkj⋅fyj(i=1∑I+1vji⋅zi+l=1∑j−1sjl⋅yl)),其中 u k i u_{ki} uki 表示输出单元 k 和输入单元 i 之间的权重, s j l s_{jl} sjl 是隐层单元 j 和 l 之间的权重, y l y_l yl 是隐层单元 l l l 的激活。
值得注意的是,CNN的训练是由寻找网络权重和网络尺寸大小共同组成的。训练开始时,即为最简单的结构,包含 ( I + 1 ) K (I+1)K (I+1)K 个输入与输出间的直接连接权重;若达不到网络要求的精度,则增加 ( I + 1 ) J + ( J − 1 ) + J K (I+1)J+(J-1)+JK (I+1)J+(J−1)+JK 个权重到网络中。如上图所示,若 J = 1 J=1 J=1,网络权重包括方形和圆形;当 J = 2 J=2 J=2 时,网络中添加了三角形的权重。