神经网络是学习复杂的非线性问题的一种很好的算法
顾名思义,神经网络的名字来源自人的大脑结构
为了构建神经网络模型,需要首先思考大脑中的神经网络是怎样的?-----每一个神经元都可以被认为是一个处理单元/神经核,它含有许多输入/树突,并且有一个输出/轴突。神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络。
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输入,并且根据本身的模型提供一个输出。下图是一个构建的神经网络示例,在神经网络中,参数又可被称为权重(weight)
其中是输入单元(input units),将原始数据(特征)输入给它们。是中间单元,它们负责将数据进行处理,然后呈递到下一层。最后是输出单元,它负责计算。
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。上图为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit),如下图所示:
引入一些标记来帮助描述模型: 代表第 j层的第 i个激活单元。代表从第 j层映射到第j+1 层时的权重的矩阵,例如代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第j+1 层的激活单元数量为行数,以第j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中的尺寸为 3*4。
对于上图所示的模型,激活单元和输出的表达式为:
可以知道:每一个都是由上一层所有的x和每一个x所对应的权重决定的。利用向量化的方法会使得计算更为简便。(以计算第二层的值为例)
我们令 ,则 ,计算后添加 =1。 计算输出的值为:
令,则。这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。
为了更好地了解神经网络的工作原理,先把前半部分遮住,如下图所示:
右半部分其实就是以a0,a1,a2,a3为特征,按照逻辑回归的方式输出
其实神经网络就像是逻辑回归,只不过我们把逻辑回归中的输入向量 x1,x2,x3变成了中间层的a1,a2,a3, 我们可以a0,a1,a2,a,3把看成更为高级的特征值,也就是x0,x1,x2,x3的进化体,并且它们是由 x与决定的,因为是梯度下降的,所以a是变化的,并且变得越来越厉害,所以这些更高级的特征值远比仅仅使用逻辑回归厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。
至此,解释前向传播的含义:从输入单元的激活项开始,然后进行前向传播给隐藏层,计算隐藏层的激活值。然后继续前向传播,直至计算出输出层的隐藏值。
多类分类初了解:
当有不止两种分类时(也就是y=1,2,3...),如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。
输入向量x有三个维度,两个中间层,输出层4个神经元分别用来表示4类,也就是每一个数据在输出层都会出现,且a,b,c,d中仅有一个为1,表示当前类。下面是该神经网络的可能结构示例:
神经网络算法的输出结果为四种可能情形之一:
关于神经网络的代价函数相关计算以及神经网络的反向传播算法将在下一篇文章中介绍。
网友评论