神经网络的学习 Neural Networks:Learning
1.代价函数
假设神经网络的训练样本有m个,每个包含一组x和一组输出信号y,L表示神经网络的层数,sl表示每层neuron的个数,(sl表述输出神经元的个数)。
将神经元分类定义成两种情况:二类分类和多类分类。
我们回顾一下逻辑回归的代价函数:
但是在神经网络中我们不是只有一个输出的变量。有k个输出变量。我们的h(x)是一个维度为k的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数比逻辑回归函数更加复杂一些。
2.反向传播 算法
为了说明这个过程,使用了具有两个输入和一个输出的三层神经网络,如下图所示:
每个神经元由两个单元组成。第一单元添加权重系数和输入信号的乘积。第二个单元实现非线性功能,称为神经元激活功能。信号e是加法器输出信号,y = f(e)是非线性元件的输出信号。信号y也是神经元的输出信号。
为了教授神经网络,我们需要训练数据集。训练数据集由分配有相应目标(期望输出)z的输入信号(x 1和 x 2)组成。网络培训是一个迭代过程。在每次迭代中,使用来自训练数据集的新数据来修改节点的权重系数。使用下面描述的算法计算修改:每个教学步骤从强制来自训练集的两个输入信号开始。在此阶段之后,我们可以确定每个网络层中每个神经元的输出信号值。下面的图片说明了信号如何通过网络传播,符号w (xm)n 表示网络输入之间的连接权重x m和输入层中的神经元n。符号y n 表示神经元n的输出信号。
通过隐藏层传播信号。符号Wmn代表的神经元输出之间的连接权重 米和神经元的输入N中下一层。
通过输出层传播信号。
在下一个算法步骤中,将网络y的输出信号与在训练数据集中找到的期望输出值(目标)进行比较。差异称为输出层神经元的误差信号d。
不可能直接计算内部神经元的误差信号,因为这些神经元的输出值是未知的。多年来,培训多人游戏网络的有效方法尚不得而知。仅在八十年代中期才开发出反向传播算法。这个想法是将误差信号d(在单个教学步骤中计算)传播回所有神经元,输出信号被输入用于讨论的神经元。
权重系数Wmn用来传播错误背面都等于该计算的输出值时使用。仅改变数据流的方向(信号从输出一个接一个地传播到输入)。该技术用于所有网络层。如果传播的错误来自少数神经元,则会添加它们。图示如下:
当计算每个神经元的误差信号时,可以修改每个神经元输入节点的权重系数。在下面的公式中, df(e)/ de表示神经元激活函数的导数(其权重被修改)。
系数h影响网络教学速度。有几种技术可以选择此参数。第一种方法是以较大的参数值开始教学过程。在建立权重系数的同时,参数逐渐减小。第二种更复杂的方法是以较小的参数值开始教学。在教学过程中,当教学进行时参数增加,然后在最后阶段再次减少。以低参数值开始教学过程使得能够确定权重系数符号。
3.梯度下降
4.整理放一起
前期准备:搭建网络的大体框架。
例如,我们要确定神经网络有多少输入单元,有多少隐藏层,每一层隐藏层又有多少个单元,还有多少输出单元。那我们怎么去选择呢?
当然输入输出单元是很简单的,有多少个输入和输出都是我们已知的。假如我们是处理多元分类问题,我们要把输出单元写成矩阵的形式,例如有3个分类, 输出单元应该写成
至于隐层数量的话,我们有一个默认的规则就是只是用单个隐藏层,所以上图左边是最普遍的一种模型。或者我们使用不止一个隐藏层的话,我们每一层隐藏层的单元数量都是相等的。对于隐藏单元的数量,虽然计算量较大,但是一般隐藏单元越多越好。下面就是介绍我们怎么训练我们的神经网络了。