神经网络
神经网络
神经网络(Neural Networks)
激活函数
类比时要小心,实际上生理学上的神经元要比我们刚才描述的要复杂的多,有很多种类,它们的树突会表现出异常复杂的非线性,而我们的突触,我们之前同W0进行类比的,并非像我们所描述的那样只有简单的权重,它们实际上非常复杂,是一个动态的非线性系统。另外,我们将激活函数作为为神经元的激活机制的类比也一样。
到现在,已经讨论了多种不同激发函数,它们是怎么使用的,后续进行更加详细的讨论,针对需要讨论如何选择激活函数。
全连接前馈神经网络
同时,也会讨论神经元的不同架构形式,已经举例了这些全连接的神经网络,每一层都是矩阵相乘计算,之前我们讲的是两层神经元网络,具体来讲,我们有两个线性层,针对每个线性层我们做了一次矩阵乘法,我们称之为两个全连接层,也会成为单隐藏层神经网络。我们不是去计算,我们做了多少次矩阵乘法,而是去数有多少隐藏层。你也可以用另一种叫法,我想两层神经网络这个叫法用的更多一些,右边这个叫做三层神经网络。
当我们做正向计算时,正向地通过神经网络,神经网络中的节点主要进行神经元各种运算。实际情况是这样的,你可以认为每一个隐藏层是一个向量,一组神经元的集合,像这样将它们引出来,利用矩阵乘法来计算神经元的值,针对整个神经元层,我们可以这样高效率地进行计算,所以通过一次矩阵乘法我们得出了该层所有神经元输出结果,比方说一层有10个神经元、50个,或者100个。
把它们全写出来,所有按照矩阵或者向量的形式,针对非线性f函数是我们要用的,在这里我们用sigmoid函数。我们可以把输入数据x作为一个向量,这样我们就可以进行第一次矩阵乘法,W1在前一步,之后用f进行一步非线性计算,接着可以进行第二次矩阵乘法,可以得到第二个隐藏层h2,最后我们可以得到输出值,如果能大致做到这些,就可以去写神经网络了。
以上便是神经网络的基本应用过程。
练习:自己写个代码,训练神经网络
总结
针对全连接,或者说线性层,我们刚才讨论了如何将神经元组织起来进行运算,神经元层的抽象有一个好处,就是我们可以采用非常高效的向量化代码去进行所有的运算。
关于卷积神经网络,请听下回分解。





