@songying
2018-10-04T22:12:51.000000Z
字数 3097
阅读 1023
deep-learning
阅读这篇文章之前,你最好对感知机的理论有一定了解。这篇文章会从一个典型的两层神经网络着手,讲述神经网络的基础知识,以及神经网络的前向传播过程。
一般情况下,神经元与感知机是一样的,区别在于:神经元的激活函数可以是多样的,而感知机的激活函数一般是指阶跃函数(sigmoid函数)。
如下图是一个典型的神经元模型:
学过高中生物知识的同学应该都知道,在我们大脑中,无数个神经元互相连接起来从而形成我们的神经系统。对比而言,神经网络就是按照一定规则连接起来的多个神经元。
上图展示了一个全连接的神经网络,我们以该图为例讲解神经网络的基本概念。
- 神经网络中,神经元按照层来布局。
- 最左边的层叫做输入层,负责接收输入数据;输入层只有1层
- 最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输出层只有1层
- 输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的。隐藏层可以有多层。
- 同一层的神经元之间没有连接。第N-1层神经元的输出就是第N层神经元的输入。
- 每个连接都有一个权值。
最后一点:一个神经网络的层数 = 隐层层数 + 输出层层数,如上图就是一个两层神经网络。
神经网络的正向传播过程实际上是数据通过输入计算每一层节点的值,最终算出输出层的值。在这个过程中,我们需要一步步算出每一层的输出值,最终才能得到输出层的值。
我们以上图为例讲解神经网络的正向传播过程。
首先我们先介绍一下上图:该图是一个两层的全连接网络,我们将该网络中的所有节点都编号,以便说明。在该图中,有几点要说明一下:
- 是输入层的的值
- 是输入层到第一层隐层的权重。
- 是隐层的输出值
- 是隐层到输出层的权重
- 是输出层的输出。
首先 是已知的,我们先看看如何计算节点4的输出值 , 在这里我们将隐层的激活函数设置为 (不设置具体的激活函数,我认为更清晰)。
我们从上图可以看到,节点4的输出值 与输入值, 输入层到隐层的权重 ,以及隐层的激活函数有关。
因此我们可得节点4的输出值为:
同理,你可以得到相应的 的值。这样我们就就算出来所有的隐层输出值了。
输出层有两个输出,这里我仅仅以 为例,这里假设输出层的激活函数为.
的值与隐层输出值 , 隐层到输出层的权重 以及激活函数有关,其实与计算隐层输出值时是一样的。
这就是正向传播的整个过程,相信不是很难理解吧,如果这都理解不了,那说明数学真的太差了。
在实际开发中,不可能是单独计算每一个节点的值,而是通过矩阵运算成批量的计算出某一层的节点值,因此,从矩阵角度理解整个流程还是很有必要的。从这一点也可以看出《线性代数》在深度学习中的重要性。
首先,从上一节中我们知道隐层输出值的计算:
然后,我们定义输入向量 和隐层节点 的权重向量为 ,则有:
那么可得:
上面都是向量表示,这时,我们将 放到一个矩阵中,如下:
代入,那么最终可得隐层的输出向量为:
上图是一个四层的全连接神经网络,其中
那么我们可以得到最终的结论:
这就是在神经网络中的前向传播的准确表示,在后面的学习中,你会一直遇到这个公式。
这一篇文章算是对神经网络做了一个大致的了解,理解这篇文章的内容是极为重要的,从难度上来讲,相对RNN,CNN的数学推导,这篇文章算是很简单的了,所以,数学还是很重要的啊。