什么是神经网络?
神经网络是神经科学的一个重要研究领域。对于计算机科学家、工程师或纯粹神经科学领域之外的其他专业人士来说,神经网络实际上是指人工神经网络
人工神经网络的设计灵感来自生物大脑结构。下面的人工网络中使用的神经元本质上是数学函数。
每个网络都具有:
- 输入神经元 - 称之为神经元的输入层
- 输出神经元 - 称之为神经元的输出层
以及
- 内部神经元 - 称之为神经元的隐藏层。每个神经网络可以有很多个隐藏层
下图是一个简单的神经网络,其中只有一个隐藏层。
这个简化的人工神经网络由以下部分组成:
- 一个输入向量
- 一个隐藏层向量
以及
- 一个输出向量
向量中的每个元素都是一个数学参数,稍后我们会详细讲解。注意,输入数量和隐藏层中的隐藏神经元数量或输出数量没有联系。(此处用到的记法是行向量,这些向量也可以表示为列向量)
神经元如何相连?
注意到连接不同神经元的“线条”了吗?
在实际操作中,这些线条表示以数学方式将一个神经元与另一个神经元相连的系数(标量)。这些系数称之为权重。
这些“线条”将特定层中的每个神经元与下个层中的所有神经元相连。例如,在我们的示例中,可以看出隐藏层中的每个神经元都与输出层中的神经元相连。
因为有太多的权重将一个层与另一个层相连,因此我们以数学方式将这些系数整理为一个矩阵,称之为权重矩阵。
权重矩阵的数字记法
- 是权重矩阵
- 是权重矩阵 的第 个元素
我们来看这个人工神经网络的一个基础模型, 该模型只有一个简单的隐藏层, 每个输入都分别与隐藏层的各神经元相连, 而这些神经元, 又分别与输出层的各神经元相连, 而输出层的每个神经元分别代表着一个输出, 我们可以将这个网络看成一个数学函数集
- 每个输入都以一定的数学关系通过一系列权重与隐藏层的神经元相连
- 权重是我们需要调整的对象
- 隐藏层的每个神经元又以类似的方式与输出层相连
- 无论是输入、隐藏层的神经元还是输出都没有数量限制, 这些数字之间也没有任何相关性, 所以我们可以有 n 个输入, m 个隐藏神经元和 k 个输出
更具体通俗地来看, 每个输入会与相应的权重相乘, 然后在下一层的神经元里与bias(偏置)相加, 偏置是神经元的外部参数可以用外部固定输入值进行建模
这整个运算的和通常会输入到一个激活函数中从而进入下一层或输出层
但这样做的目的是什么呢?
我们可以把整个系统看成一个黑盒子 盒子里有 n 个输入 k 个输出, 我们的目的就是设计一个系统 使其在输入 x 时能正确输出对应的 y, 我们要做的就是决定黑盒子里应该装什么
我们知道自己想使用人工神经网络, 所以需要训练该网络成为一个特定的系统 使其能生成与某个输入相对应的正确输出, 至少大部分时候能生成正确输出
本质上 我们要做的就是找出一批最优权重, 将输入与隐藏层连接起来, 再找出另一批最优权重 将隐藏层和输出连接起来, 或许我们永远找不到完美的预测方案 但我们可以尽可能地接近完美
在处理神经网络时,会涉及到 2 个主要阶段:
- 训练
- 验证
在训练阶段,我们会获取数据集(也称为训练集),其中包含很多输入和对应的目标(输出)对。我们的目标是找到一组能将输入以最佳方式映射到期望输出的权重。
在验证阶段,我们使用在训练阶段创建的网络,对其应用新的输入并期望获得理想的输出。
训练阶段将包含两个步骤:
- 前馈
- 反向传播
我们将重复这些步骤很多次,直到我们认为系统已经达到最佳权重集合,能够带来可能的最佳输出。
前馈流程 - 计算
为了简化, 使用包含三个神经元的隐藏层, 两个输出
假设有一个隐藏层,我们将需要完成两个计算步骤。第一步是计算隐藏状态的值,第二步是计算输出的值。
注意,隐藏层和输出层都显示为向量,因为它们都由多个神经元表示。
- 计算隐藏状态的值。
隐藏层的向量 的计算方式为,如下所示地将输入向量与权重矩阵
通过向量和矩阵乘法,我们可以按如下方式理解此计算过程:
算出 后,我们需要激活函数。
激活函数的符号是希腊字母 Φ: 。
此激活函数会确定隐藏层值的计算结果。我们可以使用以下两个方程表示最后的隐藏向量 :
或
因为 表示权重矩阵的权重部分,将输入中的神经元 i 与隐藏层中的神经元 j 相连,我们还可以使用线性组合表示这些计算过程
前馈流程 - 计算
计算输出向量的流程在数学上和计算隐藏层向量相似。我们同样会使用矩阵乘法。向量是新计算的隐藏层,矩阵是将隐藏层与输出相连的矩阵。
本质上,神经网络中的每个新层都通过向量与矩阵相乘计算得出,其中向量表示新层的输入,矩阵表示将这些新输入与下个层相连的矩阵。
在我们的示例中,输入向量为,矩阵为 ,因此 。
模型泛化
例如n=3