Abstract:神经网络产生的原因是人们想尝试设计出模仿大脑的算法。
Neural Networks import
线性回归对于非线性假设的不可行性分析
对上面的监督学习分类问题,若用逻辑回归算法解决,则需要首先构造一个包含很多非线性项的logstic regression function :g(θ0+θ1x1+θ2x2+θ3x1x2+θ4x21x2+θ5x31x2+θ6x1x22+…)
;当项数足够多时可得到一个分开正样本和负样本的分界线。
问题在于,当只有2项时,逻辑回归的确能得到不错的效果,因为x1,x2的所有组合都可被包含到多项式中。但对于这种复杂的机器学习问题,涉及的项往往多于两项,可能有成千上百的特征。而当项数过多时最终结果很可能是过拟合的,且运算量会很大。而且,若还要引入三次项,则项数将以O(n^3)的量级增长。(如100个特征——约170000个三次项组合。)故当特征个数增大时,高阶多项式项数将以几何数递增,特征空间随之急剧膨胀。所以,当特征数量过多时,这种方式构建分类器并不合适。
图像识别中使用线性回归的不可行性
场景:用ML算法训练一个分类器,用于检测一个图像是否为一辆汽车。
如图,取图像一小部分,人眼看到得失汽车,计算机看到的是一个数据矩阵。矩阵中每个元素表示像素强度值,即每个像素的亮度值。即计算机识别的方法变成:根据这个像素点亮度矩阵,来告诉我们这些数值代表一个汽车门把手。
构建汽车识别器(car detection)的方法:出一个带标签的样本集,其中各类汽车和非汽车事物各一些。将样本集输入给学习算法以训练出一个分类器。训练完毕后,输入一副新图片,让分类器判定“whats this?”
为什么一定要引入非线性分类器?—— 计算成本太高
如上图,我们在每幅图片(既包括汽车又包括非汽车)上挑出一组像素点,在坐标系上标出这幅汽车的位置(pixel1,pixel2)。随着样本数量的增多,我们将发现这两类数据分布在坐标系中的不同区域。因此我们现在需要一个非线性分类器,来尽量分开这两类样本。
这个分类问题中,特征空间的维度是多少呢?假设我们使用50∗50像素的图片,虽然这个图片尺寸很小,但依然有2500个像素点。因此我们的特征数量n是2500个,特征向量XX包含了所有像素点的亮度值。如果存储的是每个像素点的灰度值(典型的计算机图片表示方法),那么每个元素值应该介于0到255之间。如果图片存储形式是RGB模式,每个像素点包含红、绿、蓝三个子像素,那么n=7500。
因此,如果我们非要通过包含所有的二次项来解决这个非线性问题,那么,这个式子的所有条件的个数大约是300万个。这样计算成本太高了。
总结:若通过逻辑回归算法做图像识别,则项数过多会导致结果过拟合以及计算成本太高的问题,故最好使用非线性分类器来解决。
Model Representation 神经网络的表示
神经网络的表示1
概念
- 神经元:大脑中的细胞;一个计算单元,从输入神经接受一定数目的信息,并做一些计算,然后将结果通过它的轴突传送到大脑中的其他神经元
- 树突Dendrite:神经元的输入神经,可接收来自其他神经元的信息
- 轴突Axon:神经元的输出神经,可传递神经元信号给其他神经元
- 动作电位:神经元利用微弱的电流进行沟通
神经网络逻辑单元
我们将神经元模拟成一个逻辑单元。上图中,黄色的圆圈,你可以理解为类似神经元的东西,然后我们通过它的树突(或者说是它的输入神经)传递给它一些信息。然后神经元做一些计算,并通过它的输出神经(即它的轴突)输出计算结果。
x和θ指的是我们的参数向量。此即一个简单的模拟神经元模型。
当绘制一个神经网络时,有时会额外增加一个x0的输入节点,这个x0节点有时也被称作偏置单位(或偏置神经元)。但由于x0=1,有时是不会画出它的,这取决于它是否对例子有利。
激励函数g(z)
activation function:
其中:θ为模型的参数,也是权重weight
激励activation:由一个具体神经元读入计算并输出的值。
解读神经网络
神经网络:不同神经元组合在一起的集合。
layer1:输入层,有三个输入单元:x1,x2和x3,当然我们也可以加入值为1的x0 ;
layer2:隐藏层,有三个神经元:a(2)1,a(2)2和a3(2),同理,你可以可以加上值永远为1的偏置单元a(2)0;隐藏层的值在你的训练过程中是看不到的,它的值不是x也不是y,所以我们叫它隐藏层。神经网络可以有不止一个的隐藏层。在神经网络中,任何一个非输入层且非输出层,就被称为隐藏层。
layer3:输出层,输出h(x)的计算结果hθ(x);
神经网络运行原理
ai(j) 表示第j层的第i个神经元;如a1^2表示的是第2层的第1个激励,即隐藏层的第一个激励。
Θ(j) 表示层与层之间权重的参数矩阵(或者叫权重矩阵)(比如说从第一层到第二层、或者从第二层到第三层的作用)。
隐藏层的三个神经元的计算结果:
这里我们有三个输入单元和三个隐藏单元,这样一来,参数矩阵Θ(1)Θ(1)控制了我们来自三个输入单元到三个隐藏单元的映射。因此Θ(1)的维数是R^(3×4)的(考虑x0的情况下)矩阵。
如果一个神经网络在第j层有Sj个单元,在j+1层有Sj+1个单元,那么第j层的参数矩阵Θ(j)的维度就是sj+1 × (sj+1)
最后,在输出层,我们还有一个单元,它用来计算hΘ(x):
以上就是从数学上对一个人工神经网络的定义。
神经网络的表示2
Abstract:介绍如何高效地进行计算,并展示一个向量化的实现方法。更重要的是明白神经网络的好处所在,并且介绍它是如何帮助我们学习复杂的非线性假设的。神经网络使用的前向传播计算法就是从输入层到隐藏层到输出层的层层递进计算来获取最终结果的计算路径。其与逻辑回归的区别在于,逻辑回归的输入特征值为x1,x2,x3…,而前向传播的输入值为通过隐藏层的输入函数Θ(1)来学习而得的特征项a1(2)、a2(2)、a3(2) 。隐藏层内的计算是不可见的,但看起来就像逻辑回归在做的事。 最终的目的是从输出层输出一个假设函数的值h theta(x)。
前向传播(forward propagation)的向量化实现
前向传播:就是从输入层到隐藏层到输出层的层层递进计算来获取最终结果的计算路径。
从输入层的激励开始,然后进行前向传播给隐藏层,并计算隐藏层的激励,然后我们继续向前传播,并计算出层的激励,这个从输入层,到隐藏层,再到输出层,依次计算激励的过程,叫前向传播。
推导过程:我们将上图中的假设函数计算方程简化计算。先定义一些额外的项如a1(2)=…来简化表示,然后层层推导。最后h theta(x)只需2步即可推导出来。
为什么神经网络可以帮助我们学习非线性假设
盖住左边,发现神经网络很像逻辑回归。但区别是:神经网络的输入特征值是通过隐藏层计算的,即,神经网络所做的工作看起来就像逻辑回归,但它不是使用x1,x2,x3作为输入特征,而是使用特征项a1(2)、a2(2)、a3(2)。而特征项a1(2)、a2(2)、a3(2)是通过输入函数Θ(1)来学习的,即从layer1映射到layer2的函数。这个函数由其他一组参数Θ(1)决定。所以,在神经网络中,它没有用输入特征x1、x2、x3来训练逻辑回归,而是训练逻辑回归的输入:a1(2)、a2(2)、a3(2)。
神经网络的架构
神经网络的架构(Architecture):神经网络中神经元相连接的方式。
注:隐藏层可以是不止一层。
神经网络应用实例Applications
Abstract:本节通过具体的例子来解释神经网络是如何计算关于输入的复杂的非线性函数的。神经网络是通过层层递进的前向传播来计算复杂的非线性函数的。隐藏层数量增多,可计算更复杂的函数。
问题引入
Q:如上图,我们有一组二进制的输入特征x1和x2;x1,x2 ∈{1,0};我们的目的是用一个非线性的决策边界来区分正负样本。那么神经网络是如何做到的呢?
Solution:
- 求同或(真假性相同才真,真假性相异则假),即 y=x1 XNOR x2
- 求异或(真假性相同则假,真假性相同则真),即NOT(y=x1 XOR x2)
简单例子:AND、OR、NOT的实现
AND
条件:有二进制输入特征值x1,x2,目标函数是y = x1 AND x2
目的:得到一个具有单个神经元的神经网络来计算这个逻辑与。
步骤:
- 画出偏置单元x0,值为+1;不影响整体值;
- 给这个神经网络分配一些权重(参数),如上图;
- 故假设函数为hΘ(x)=g(−30+20x1+20x2);Θ10(1) = −30,Θ11(2) = 20,Θ12(3) = 20;
- 在输入不同特征值时,神经元输出计算结果hΘ(x)的值;
激励函数g(z):
当z的绝对值大于4时,g(z)的值必定等于1或0.故在选取权重值时一定要保证任何情况下g(z)的值只能为1或0.
假设在各种情况下的输出,即为逻辑与的计算结果:
x1 | x2 | hΘ(x) |
---|---|---|
0 | 0 | g(−30)≈0 |
0 | 1 | g(−10)≈0 |
1 | 0 | g(−10)≈0 |
1 | 1 | g(10)≈1 |
OR
如上图神经网络同理实现了“或”的功能。
假设函数为:hΘ(x)=g(−10+20x1+20x2)
NOT
如上图神经网络同理实现了“非”的功能。
假设函数为:hΘ(x)=g(10−20x1)
更复杂的例子
(NOTx1)AND(NOTx2)
如上图神经网络同理实现了(NOTx1)AND(NOTx2) 的功能。
假设函数为:hΘ(x)=g(10−20x1−20x2)
求解XNOR(组合多神经元求解)
目的:求解XNOR(组合多神经元求解)
方法:如上图将上面求解的三个神经网络(AND & (NOTx1)AND(NOTx2) & OR)组合成一个具有三个输出单元的神经网络,即可运算x1 XNO x2 ;为拟合x1 XNOR x2的非线性样本分布,我们可以构建双层神经网络隐藏层a1(2)、a2(2)。加入偏置单元x0(= +1)即可得到输出层。
计算路径:
- Neuron1:AND;Neuron2:(NOTx1)AND(NOTx2) ; Neuron3:OR
- **Neuron1只能输出1/Neuron2只能输出1/Neuron3只能输出0;
- 将特征值x1,x2同时输入3个神经元,输出结果h theta(X)即为结果。**
最终真值表如下:
x1 | x2 | a1(2) | a2(2) | hΘ(x) |
---|---|---|---|---|
0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 1 |
注:XNOR 是同或,真假性相同才真,真假性相异则假。
总结:通过一个含有输入层、隐藏层、输出层的神经网络,我们最终拟合了x1XNORx2x1。
更一般的理解是:在输入层中,我们有原始输入值,然后我们建立了一个隐藏层,用来计算稍微复杂一些的输入量的函数,然后通过添加另一个层我们得到了一个更复杂一点的函数,这就是神经网络可以计算较复杂函数的某种直观解释。
我们知道,当层数很多的时候,你有一个相对简单的输入量的函数作为第二层,而第三层可以建立在此基础上来计算更加复杂一些的函数,然后再下一层,又可以计算再复杂一些的函数.
神经网络的多类别分类
Abstract:使用神经网络解决多类别分类问题,即建立一个具有多个输出单元的神经网络。它和逻辑回归时介绍的一对多方法其实是一样的,只不过现在我们有四个逻辑回归的分类器,而我们需要对每一个分类器都分别进行识别分类(为什么多神经元:因为一个神经元只能输出一个预设的结果)。
我们处理多类别分类的方法实际上是基于一个多神经网络算法而延伸出来的。
譬如:识别图片中的对象,设定4个类别:行人,汽车,摩托车,卡车。此即多类别分类问题。
方法:建立一个具有4个输出单元的神经网络(如上图)。
- 此时神经网络的输出是一个思维向量。
- 因此现在的输出需要用一个向量hΘ(x)来表示,这个向量中有四个元素,即hΘ(x) = [y1,y2,y3,y4]T;
- 我们要做的是对第一个输出元素进行分辨图片上是不是一个行人(Pedestrian),然后对第二个元素分辨它是不是一辆轿车(Car),对第三个元素分辨它是不是摩托车(Motorcycle),对第四个元素分辨它是不是一辆卡车(Truck)。
输出结果hΘ(x):
- 若图上是汽车,则输出结果:hΘ(x) = [0,1,0,0]
- 若图上是摩托车,则输出结果:hΘ(x) = [0,0,1,0]
- 若图上是卡车,则输出结果:hΘ(x) = [0,0,0,1]
- 若图上是行人,则输出结果:hΘ(x) = [1,0,0,0]
总结:使用神经网络解决多类别分类问题,和逻辑回归时介绍的一对多方法其实是一样的,只不过现在我们有四个逻辑回归的分类器,而我们需要对每一个分类器都分别进行识别分类。