文章目录
- 1. 非线性假设
- 2. 神经元和大脑
- 3. 模型表示I
- 4. 模型表示II
- 5. 特征和直观理解I
- 6. 样本和直观理解II
- 7. 多类别分类
神经网络最初是一个生物学的概念,一般是指大脑神经元、触点、细胞等组成的网络,用于产生意识,帮助生物思考和行动,后来人工智能受神经网络的启发,发展出了人工神经网络。
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称连接模型(Connection Model),它是一种模仿动物神经网络行为特征进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。神经网络的分支和演进算法很多种,从著名的卷积神经网络CNN,循环神经网络RNN,再到对抗神经网络GAN等等。
无论是在学习机器学习还是深度学习时,我们都会频繁接触神经网络这个词,人工智能、机器学习、深度学习、神经网络这几个概念之间的关系图如图1所示。
图1 人工智能、机器学习、深度学习、神经网络的关系
1. 非线性假设
我们之前学的线性回归和Logistic回归都有这样一个缺点:当特征太多时,计算的负荷会非常大。图2是一个非线性分类的例子。
图2 非线性分类
的多次项式进行预测时,我们可以应用的很好。但当假设我们有非常多的特征时,例如有100个变量,我们希望用这100个特征来构建一个非线性的多项式模型,结果将是一个数量非常惊人的特征组合。即使我们只采用两两特征的组合 ,也会有接近5000个组合而成的特征,这对于一般的Logistic回归来说需要计算的特征太多了。
下面是一个关于计算机视觉的例子,假设我们想要通过机器学习算法来训练一个分类器检测图像,判断某张图片是否为一辆汽车。当我们把一张汽车图片中的门把手部位放大时,人眼看到的红框部分,对计算机而言看到的是一个表示像素强度值的数据矩阵,如图3所示。计算机视觉问题就是根据这个像素点亮度矩阵来告诉我们这些数值代表一个门把手。
图3 计算机看到的像素强度值的数据矩阵
具体而言,用机器学习算法构造一个汽车识别器时,我们要做的就是提供一个带标签的样本集,其中一部分样本是各类汽车图片,另一部分样本不是汽车的图片,如图4所示。将这个样本集输入给学习算法,以训练出一个分类器,然后进行测试,即输入一张新的图片判断其是否为汽车。
图4 带标签的样本集
为了更加深入地理解引入非线性假设的必要性,我们从学习算法的训练样本中找出一些汽车图片和一些非汽车图片,假设我们只选用灰度图片。我们从图片中选择一组像素点(pixel1,pixel2),在坐标系中标出汽车的位置,汽车的位置取决于pixel1和pixel2的强度。接下来我们用同样的方法处理其他图片,依次将其他图片的位置标记到坐标系中(汽车用“+”标记,非汽车用“-”标记),我们可以发现汽车样本和非汽车样本分布在坐标系中的不同区域,如图5所示。因此,我们需要一个非线性假设来使这两类样本尽量分开。
图5 汽车样本和非汽车样本在坐标系中的位置分布
像素的图片,并且我们将所有的像素视为特征,则会有 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约 个(接近三百万个)特征。
普通的Logistic回归模型不能有效地处理这么多的特征,这时候我们就需要神经网络来帮助我们处理输入特征n很大时的情况。
2. 神经元和大脑
神经网络兴起于二十世纪八九十年代,当时应用的非常广泛。但由于各种原因,在90年代后期,它的应用逐渐减少了。近些年,神经网络可谓是又东山再起了,其中一个原因是:神经网络是一种计算量偏大的算法,随着近些年计算机的运行速度变快,才足以真正运行起大规模的神经网络,如今的神经网络对于许多应用来说是最先进的技术。
神经元是神经系统最基本的结构和功能单位,由三部分组成,分别是树突、胞体和轴突,如图6所示。树突是接受输入,轴突是用于输出的。神经元的树突在接收到特定的输入刺激后,其胞体就会被激活,并通过轴突向其它神经元或神经元群输出兴奋,从而导致更多的神经元被激活,形成此起彼伏的神经元网络激活现象,而神经元间的有序激活就是产生我们的思维和行为的根本原因。
图6 神经元的组成
当我们想模拟大脑时,是指想制造出与人类大脑作用效果相同的机器。大脑可以学会用看而不是听的方式处理图像,学会处理我们的触觉,如图7所示。
图7 大脑体感皮层图
神经系统科学家做了一个非常有趣的实验,把耳朵到听觉皮层的神经切断。在这种情况下,将其重新接到一个动物的大脑上,这样从眼睛到视神经的信号最终将传到听觉皮层,那么结果表明听觉皮层将会学会“看”。所以,如果对动物这样做,那么动物就可以完成视觉辨别任务,它们可以看图像,并根据图像做出适当的决定。这被称为神经重接实验。
从这个意义上说,如果人体有同一块脑组织可以处理光、声或触觉信号,那么也许存在一种学习算法,可以同时处理视觉、听觉和触觉,而不是需要运行上千个不同的程序,或者上千个不同的算法来实现这些大脑所完成的成千上万的事情。也许我们需要做的就是找出一些近似的或实际的大脑学习算法,然后实现大脑通过自学掌握如何处理这些不同类型的数据。在很大的程度上,可以猜想如果我们把几乎任何一种传感器接入到大脑的几乎任何一个部位的话,大脑就会学会处理它。
3. 模型表示I
为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的?每一个神经元都可以被认为是一个处理单元/神经核(processing unit/Nucleus),它包含许多输入/树突(input/Dendrite),并且有一个输出/轴突(output/Axon),如图8所示。神经网络是大量神经元相互连接并通过电脉冲来交流的一个网络。
图8 大脑中的神经元
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输入,并且根据本身的模型提供一个输出。图9所示是一个以Logistic回归模型作为自身学习模型的神经元例子。在神经网络中,参数又可被称为权重(weight)。
图9 Logistic单元神经元模型
,即Sigmoid激活函数。
接下来我们设计出了类似于神经元的神经网络,如图10所示。
图10 神经网络模型
、 、 是输入单元(input units),我们将原始数据输入给它们。 、 、 是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算。
神经网络模型是许多Logistic单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。图10为一个3层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏置单元(bias unit),如图11所示。
图11 增加偏置单元的神经网络模型
代表第层的第个激活单元。 代表从第层映射到第层时的权重的矩阵,其尺寸为以第层的激活单元数量为行数,以第层的激活单元数加一为列数的矩阵。例如,上图所示的神经网络中的尺寸为。
对于上图所示的模型,激活单元和输出分别表达为:
都是由上一层所有的和每一个所对应的决定的。我们把这样从左到右的算法称为前向传播算法( Forward Propagation)。
把 、、 分别用矩阵表示:
我们可以得到
在此做一个简单的说明,神经网络中偏置单元的作用是什么呢?
1、什么是bias?
偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b 的意义是一致的。
在 y=wx+b中,b表示函数在y轴上的截距,控制着函数偏离原点的距离,其实在神经网络中的偏置单元也是类似的作用。
2、bias的计算方式?
神经网络结构中对偏置单元的计算处理方式如下:
设置偏置单元=1,并在参数矩阵 中设置第 0 列对应偏置单元的参数。例如: 是第一层的偏置单元(设置为1),、 … (n为下一层神经元的个数)是对应该偏置单元 的参数;是第二层的偏置单元,、 … (n为下一层神经元的个数)是对应该偏置单元的参数。
相当于bias本身值为1,但它连接各个神经元的权重不为1,即——整个神经网络只有1个bias,对应有多个不同的权重(权重个数等于hide层和out层神经元的个数)
4. 模型表示II
相对于使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值:
, 则 , 计算后添加 。 计算输出的值为:
, 则 。
这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
为了更好地了解神经网络的工作原理,我们先把左半部分遮住,如图12所示。
图12 遮住左半部分的神经网络模型
按照Logistic回归的方式输出 。
其实神经网络就像是Logistic回归,只不过我们把Logistic回归中的输入向量变成了中间层的, 即:。我们可以把 、 、 、看成更为高级的特征值,也就是的进化体,并且它们是由与 决定的。因为是梯度下降的,所以是变化的,并且变得越来越厉害,那么这些更高级的特征值远比仅仅将次方厉害,也能更好的预测新数据。 这就是神经网络相比于Logistic回归和线性回归的优势。
5. 特征和直观理解I
从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。
在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得出的一系列用于预测输出变量的新特征。
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
以逻辑或为例说明。
6. 样本和直观理解II
二元逻辑运算符当输入特征为布尔值(0或1)时,我们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。
下图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑与(AND):
下图的神经元(三个权重分别为-10,20,20)可以被视为作用等同于逻辑或(OR):
下图的神经元(两个权重分别为 10,-20)可以被视为作用等同于逻辑非(NOT):
与此同时,我们可以使用神经网络表示更为复杂的逻辑表达式,只需将逻辑表达逐步拆解,用简单的神经结构表达出来,然后利用神经网络的传递功能即可顺利表达出复杂的逻辑表达。
7. 多类别分类
),该怎么办?在神经网络中实现多类别分类采用的方法本质上就是一对多法的扩展。
如果我们要训练一个神经网络算法来识别行人、汽车、摩托车和卡车,如图13所示。不同于之前识别汽车与非汽车的例子,这次在输出层我们应该有4个值,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车,第三个值用于判断是否为摩托车,第二个值用于判断是否为卡车。
图13 多类别分类例子
有三个维度,两个中间层,输出层有4个神经元分别用来表示4类,也就是每一个数据在输出层都会出现,且中仅有一个为1,表示当前类。该例子对应的神经网络的可能结构如图14所示。
图14 四个输出的神经网络模型
, 其中 为样本数量, 为四种物体其中 某一种的图片, 为向量 四种情况中的一种。
我们希望构建的神经网络模型的输出值 。当 时, 预测图片为行人;
当 时, 预测图片为汽车; 当 时, 预测图片为摩托车; 当
时, 预测图片为卡车。