神经网络概述

多层神经网络是由单层神经网络叠加而成的,所以形成了成的概念,常见的多层神经网络由如下结构:

  • 输入层(Input Layer):由众多神经元(Neuron)组成,用来接收输入信息,输入的信息成为输入向量
  • 输出层(Output Layer):信息通过神经元链接传输、分析、权衡,形成输出结果,输出的信息称为输出向量
  • 隐藏层(Hidden Layer):简称:“隐层”,是输入层和输出层之间众多神经元和链接组成的各层,隐层可以有一层或者多层,隐层的结点(神经元)数目不定,数目越多神经网络的非线性越显著,从而神经网络的强健性(robustness)越显著

多层神经网络

参数定义

  • x:神经网络输入
  • y:实际数据标签
  • y^\hat{y}y^:神经网络输出
  • w:权重参数
  • b:偏置参数
  • L:损失函数
  • J:成本函数
  • nx:神经元输出x个数
  • m:隐藏层的节点数

神经元定义

神经元

非向量化实现

z=w1∗x1+w2∗x2+w3∗x3+...+wnx∗xnx+b z=w_1*x_1+w_2*x_2+w_3*x_3+...+w_{nx}*x_{nx}+b z=w1x1+w2x2+w3x3+...+wnxxnx+b

向量化实现

W=[w1,w2,w3...wnx]T W=[w_1,w_2,w_3...w_{nx}]^T W=[w1,w2,w3...wnx]T
X=[x1,x2,x3...xnx]T X = [x_1,x_2,x_3...x_{nx}]^T X=[x1,x2,x3...xnx]T
Z=WT∗X+b Z=W^T*X+b Z=WTX+b

神经网络定义(一层)

神经网络图示

非向量化实现

W[1]=[w11,w12,w13...w1nx]TW[2]=[w21,w22,w23...w2nx]TW[3]=[w31,w32,w33...w3nx]T...W[m]=[wm1,wm2,wm3...wmnx]T W_{[1]}=[w_{11},w_{12},w_{13}...w_{1nx}]^T\\ W_{[2]}=[w_{21},w_{22},w_{23}...w_{2nx}]^T\\ W_{[3]}=[w_{31},w_{32},w_{33}...w_{3nx}]^T\\ ...\\ W_{[m]}=[w_{m1},w_{m2},w_{m3}...w_{mnx}]^T W[1]=[w11,w12,w13...w1nx]TW[2]=[w21,w22,w23...w2nx]TW[3]=[w31,w32,w33...w3nx]T...W[m]=[wm1,wm2,wm3...wmnx]T
z1=W[1]T∗X+b[1]z2=W[2]T∗X+b[2]z3=W[3]T∗X+b[3]...zm=W[m]T∗X+b[m] z_1=W_{[1]}^T*X+b_{[1]}\\ z_2=W_{[2]}^T*X+b_{[2]}\\ z_3=W_{[3]}^T*X+b_{[3]}\\ ...\\ z_m=W_{[m]}^T*X+b_{[m]} z1=W[1]TX+b[1]z2=W[2]TX+b[2]z3=W[3]TX+b[3]...zm=W[m]TX+b[m]

向量化实现

W=[W[1]T,W[2]T,W[3]T...W[m]T]T W = [W_{[1]}^T,W_{[2]}^T, W_{[3]}^T...W_{[m]}^T]^T W=[W[1]T,W[2]T,W[3]T...W[m]T]T
X=[x1,x2,x3...xnx]T X = [x_1,x_2, x_3...x_{nx}]^T X=[x1,x2,x3...xnx]T
B=[b1,b2,b3...bm]T B = [b_1,b_2,b_3...b_{m}]^T B=[b1,b2,b3...bm]T
Z=WT∗X+B=[z1,z2,z3...zm]T Z=W^T*X+B=[z_1,z_2,z_3...z_{m}]^T Z=WTX+B=[z1,z2,z3...zm]T

神经网络定义(多批次数据输入)

非向量化实现

多批量数据输入:
X(1)=[x11,x12,x13...x1nx]TX(2)=[x21,x22,x23...x2nx]TX(3)=[x31,x32,x33...x3nx]T...X(n)=[xn1,xn2,xn3...xnnx]T X^{(1)}=[x_{11},x_{12},x_{13}...x_{1nx}]^T\\ X^{(2)}=[x_{21},x_{22},x_{23}...x_{2nx}]^T\\ X^{(3)}=[x_{31},x_{32},x_{33}...x_{3nx}]^T\\ ...\\ X^{(n)}=[x_{n1},x_{n2},x_{n3}...x_{nnx}]^T X(1)=[x11,x12,x13...x1nx]TX(2)=[x21,x22,x23...x2nx]TX(3)=[x31,x32,x33...x3nx]T...X(n)=[xn1,xn2,xn3...xnnx]T
多批量神经网络输出:
Z(1)=WT∗X(1)+BZ(2)=WT∗X(2)+BZ(3)=WT∗X(3)+B...Z(n)=WT∗X(n)+B Z^{(1)}=W^T*X^{(1)}+B\\ Z^{(2)}=W^T*X^{(2)}+B\\ Z^{(3)}=W^T*X^{(3)}+B\\ ...\\ Z^{(n)}=W^T*X^{(n)}+B Z(1)=WTX(1)+BZ(2)=WTX(2)+BZ(3)=WTX(3)+B...Z(n)=WTX(n)+B

向量化实现

X=[X(1),X(2),X(3)...X(n)] X=[X^{(1)},X^{(2)},X^{(3)}...X^{(n)}] X=[X(1),X(2),X(3)...X(n)]
Z=WT∗X+B=[Z(1),Z(2),Z(3)...Z(n)] Z=W^T*X+B=[Z^{(1)},Z^{(2)},Z^{(3)}...Z^{(n)}] Z=WTX+B=[Z(1),Z(2),Z(3)...Z(n)]

总结

在实际运用过程中,往往使用显式循环语句的效率是低下的,将输入数据、训练参数等向量化能够极大地提升神经网络的训练效率。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐