神经网络的结构
单一的神经元能够学习的函数是有限的,仅仅能学习线性可分的很熟;当学习非线性的复杂函数时,就要用到神经网络。同一层的神经元在两方面是相同:(一)同一层中的神经元连接着相同的源头,即他们的接收的信息是相同的;(二)同一层中的神经元有着相同的动态更新机制。即同一层中的神经元有着相同的连接源头、目的和相同的激活函数。一个神经网络中有两种权重:层内权重(intralayer weights)(intral
单一的神经元能够学习的函数是有限的,仅仅能学习线性可分的函数;当学习非线性的复杂函数时,就要用到神经网络。
同一层的神经元在两方面是相同:(一)同一层中的神经元连接着相同的源头,即他们的接收的信息是相同的;(二)同一层中的神经元有着相同的动态更新机制。即同一层中的神经元有着相同的连接源头、目的和相同的激活函数。
一个神经网络中有两种权重:层内权重(intralayer weights)(intralayer \; weights)(intralayerweights)——指在同一层中神经元之间的权重;层间权重(interlayer weights)(interlayer\; weights)(interlayerweights)——指不同层神经元之间的权重。一个神经网络可能包含其中一种权重或两种权重都有。
神经网络的典型类型
1.前馈神经网络(FNN,Feedforward Neural Networks)
一个标准的前馈神经网络由三层组成:输入层、隐层(不止一层)、输出层。实际上,只要隐层具有足够的隐神经元,具有单调递增且可微的 FNN可以用一个隐层逼近任意连续函数。只有一个隐层的 FNN 示意图如下:
对于上图所示的 FNN 网络,给定任意输入 zp\mathbf z_pzp,对于任意的输出单元 oko_kok,有 :
ok,p=fok(netok,p)=fok(∑j=1J+1ωkj⋅fyj(netyj,p))=fok(∑j=1J+1ωkj⋅fyj(∑i=1I+1vji⋅zi,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))
其中,fokf_{o_k}fok 和 fyjf_{y_j}fyj 分别代表输出单元 oko_kok 和隐层单元 yjy_jyj 的激活函数;ωkj\omega_{kj}ωkj 是输出单元 oko_kok 和隐层单元 yjy_jyj 之间的权重;zi,pz_{i,p}zi,p 表示第 p 个输入 zp\mathbf z_pzp 的第 iii 个维度的值;输入单元的第 I+1I+1I+1 维度和隐层的第 J+1J+1J+1 维度代表的是对应的偏差项;其输入层的激活函数为线性函数。
2.功能连接神经网络(FLNN, Functional Link Neural Networks)

在FLNN中,输入单元执行激活函数的操作,一个FLNN只是将FNN的输入层扩展为一层较高功能单元层的神经网络。输入层有 III 维,将其扩展为函数单元 h1,h2,⋯ ,hLh_1,h_2,\cdots,h_Lh1,h2,⋯,hL,LLL 是总的函数单元个数,其中每个函数单元 hlh_lhl 是输入向量 (z1,z2,⋯ ,zI)(z_1,z_2,\cdots,z_I)(z1,z2,⋯,zI) 的函数。输入层和函数功能单元层直接的权重矩阵设置为:
uli={1,if 函数单元 hl 独立于 zi0,otherwise\displaystyle u_{li}=\left\{ \begin{aligned} 1, & & {if\,\,函数单元 \,h_l\,独立于\,z_i}\\ 0, & & {otherwise}\\ \end{aligned} \right.uli={1,0,if函数单元hl独立于ziotherwise
而 vjlv_{jl}vjl 是隐层单元 yjy_jyj 和连接函数单元 hlh_lhl 之间的权重。类似于 FNN ,计算输出单元如下:
ok,p=fok(∑j=1J+1ωkj⋅fyj(∑l=1L+1vjl⋅hl(zp)))\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结构,一种是每个输入单元同求和单元连接,并连接到一组专用的求积单元;另一种是具有交替的求积层和求和层。这里仅讨论隐层只有求积单元的情况,其输出单元是求积单元,并假定网络中的所有神经元的激活函数均为线性激活函数。那么,对应每个隐层单元 yjy_jyj,其节点输入(不考虑偏差)是:
netyj,p=∏i=1Izi,pvji=∏i=1Iexp{vji⋅ln(zi,p)}=exp{∑i=1Ivji⋅ln(zi,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)},其中 vjiv_{ji}vji 是输入单元 ziz_izi 和隐层单元 yjy_jyj 之间的权重。
若考虑扰动项(偏差),则 netyj,p=∏i=1I+1zi,pvji\displaystyle net_{y_{j,p}}=\prod^{I+1}_{i=1}z^{v_{ji}}_{i,p}netyj,p=i=1∏I+1zi,pvji,其中 zI+1,p=−1,vj,I+1z_{I+1,p}=-1,v_{j,I+1}zI+1,p=−1,vj,I+1 是扰动因子,扰动因子的作用是在训练过程动态的塑造激活函数,使得更逼近训练数据所代表的真实函数的形状。
若 zi,p<0z_{i,p}<0zi,p<0, 则考虑以复数形式表达,即 zi,p=i2⋅∣zi,p∣,i=−1z_{i,p}=i^2\cdot|z_{i,p}|,i=\sqrt{-1}zi,p=i2⋅∣zi,p∣,i=−1,则有:
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⋅π)+i sin(∑i=1Ivji⋅π)]\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⋅π)]
抛开虚部(虚部对性能提升没有帮助),则 netyj,p=exp{∑i=1Ivji⋅ln∣zi,p∣}⋅cos(π∑i=1Ivji)\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=1Ivji⋅ln∣zi,p∣, ϕj,p=∑i=1Ivji⋅Ii\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,而 Ii={0,if zi,p>01,if zi,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,那么 netyj,p=eρj,p⋅cos(πϕ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),
可得,每个输出单元的值为:ok,p=fok(∑j=1J+1ωkj⋅fyj(eρj,p⋅cos(πϕ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=(z1,⋯ ,zI+1,⏟actual inputszI+2,⋯ ,zI+1+J⏟context units)\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);
文本层单元 zI+2,⋯ ,zI+1+Jz_{I+2},\cdots,z_{I+1+J}zI+2,⋯,zI+1+J 与隐层单元全链接,隐层单元 yjy_jyj 到相应的文本层单元 zI+1+jz_{I+1+j}zI+1+j 的权重是 1(可根据需要调整),此时,激活值 yjy_jyj 被复制到 zI+1+jz_{I+1+j}zI+1+j 。可计算得到输出单元:
ok,p=fok(∑j=1J+1ωkj⋅fyj(∑i=1I+1+Jvji⋅zi,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)),其中 (zI+2,p,⋯ ,zI+1+J,p)=(y1,p(t−1),⋯ ,yJ,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=(z1,⋯ ,zI+1,⏟actual inputszI+2,⋯ ,zI+1+K⏟state units)\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),
输出单元变为:ok,p=fok(∑j=1J+1ωkj⋅fyj(∑i=1I+1+Kvji⋅zi,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)),其中 (zI+2,p,⋯ ,zI+1+K,p)=(o1,p(t−1),⋯ ,oK,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示意图如下所示。第一个神经元的每个输入信号延迟 ntn_tnt,这种类型的神经元被用作构建一个完整的前馈 TDNN 的构件。
初始时,t=0t=0t=0,只有 zi,p(t)z_{i,p}(t)zi,p(t) 有值,而 ∀i=1,⋯ ,I\forall i=1,\cdots,I∀i=1,⋯,I;时间步 t′=1,⋯ ,ntt'=1,\cdots,n_tt′=1,⋯,nt,都有 zi,p(t−t′)=0z_{i,p}(t-t')=0zi,p(t−t′)=0,ntn_tnt 是总的时间步(延迟的时间数)。
第一个模式出现之后,第二个模式出现之前,有 zi,p(t−1)=zi,p(t)z_{i,p}(t-1)=z_{i,p}(t)zi,p(t−1)=zi,p(t);
第 t′t't′ 个模式出现之后,第 t′+1t'+1t′+1 个模式出现之前,有 zi,p(t−t′)=zi,p(t−t′+1)z_{i,p}(t-t')=z_{i,p}(t-t'+1)zi,p(t−t′)=zi,p(t−t′+1);
zi,p(t−t′)和zi,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。这就使得总共有 ntn_tnt 个模式(输入)会影响权重更新,从而使得时间特征可以驱动函数形成。
TDNN是输出为:ok,p=fok(∑j=1J+1ωkj⋅fyj(∑i=1I∑t=0ntvj,i(t)⋅zi,p(t)+zI+1⋅vj,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的输出为:ok,p=fok(∑i=1I+1uki⋅zi+∑j=1Jωkj⋅fyj(∑i=1I+1vji⋅zi+∑l=1j−1sjl⋅yl))\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)),其中 ukiu_{ki}uki 表示输出单元 k 和输入单元 i 之间的权重,sjls_{jl}sjl 是隐层单元 j 和 l 之间的权重,yly_lyl 是隐层单元 lll 的激活。
值得注意的是,CNN的训练是由寻找网络权重和网络尺寸大小共同组成的。训练开始时,即为最简单的结构,包含 (I+1)K(I+1)K(I+1)K 个输入与输出间的直接连接权重;若达不到网络要求的精度,则增加 (I+1)J+(J−1)+JK(I+1)J+(J-1)+JK(I+1)J+(J−1)+JK 个权重到网络中。如上图所示,若 J=1J=1J=1,网络权重包括方形和圆形;当 J=2J=2J=2 时,网络中添加了三角形的权重。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)