神经网络的结构和原理入门
神经网络的结构,简单示意图如下:
神经网络的关键是中间的连线,而不是节点,工作时,上一层的**值将决定下一层的**值,所以,神经网络的核心在于,一层**值是通过怎样的运算,算出下一层**值的,某种程度上是模仿的生物大脑的工作机制。某些神经元的激发,会触发另一些神经元的激发。当被训练好之后,就可以识别固定的模式了。
简单来说,第一层的输入图形会导致第二层的某种图形模式,然后继续触发第三层,第四层。。。,直到最后一层。有点类似于链式反应,不过链式反应无法控制,速率越来越快,但神经网络最终都会收敛到一个或者几个有意义的结果输出。
数学原理如下:
Size 28*28的图片含有像素点784各,构成输入向量
假设第一层的第i个节点对第二层的j的节点的权重为:
则
这样计算出来的神经元节点的值可以是任意大小,需要做归一化处理,常用的归一化函数是sigmoid函数,它可以将任意的数值映射为区间 [0,1]上的值,实现归一化处理,类似于将整个实轴压缩到(0,1)区间。
其函数图象为:
简而言之,它能把非常大的负值转换为接近于0,又能把非常大的正值转换为接近于1,在0值附近则是平稳增长。
所以,实际上神经元**值应该要在对上面的计算结果取一个sigmoid变换,通常还要再加上一个偏置换阈值。
转换为一般形式是:
这种形式简单很多,而且更有代表性。
传递矩阵为
W矩阵第一维代表后层的节点,第二维标识前层的节点.
神经网络既可以看成参数的容器,也可以从整体上看成一个函数,多输入多输出的函数,或者是一种集合的映射。
只是从参数角度看,参数实在太多,而且还有大量的矩阵类,归一化,累乘累加运算,导致需要极大的算力,普通的CPU根本难以承受。
看成函数的话,每一层的输入时上一层神经元的输出(除了第一层是数据输入外),而每一层的输出又成为了下一层的输入。整体上看,输入经过网络的处理后,变成了输出,例如,上面的网络可以看成如下函数:
只是这个函数过于复杂,以上面的网络为例,它使用了
784*12 + 12*12 + 12*10=9,672
权重,以及
12 + 12 + 10 = 34
个偏置。
总共9,672 + 34=9706个参数
来识别图形。
不过话说回来,识别图形本身就是很复杂的运算,这货不复杂还真不行。
关于神经网络是如何获取合适的权重和偏置的,就涉及到训练了。
神经网络的变种非常多,典型的:
卷积神经网络(convolutional neural network)适合于做图像识别
长短期记忆网络(long-short term memory network) lstm适合于做语音识别.