神经网络分类:
机器学习的四要素
讨论:线性模型与广义线性模型
对于部分数据来说,其本身就是稀疏,可以通过线性模型直接优化求解,但是实际生活中大多数数据都是不稀疏,并且不可以通过简单的线性模型直接求解可得,但是此类数据在其他域可以稀疏表示(例如小波域,DCT域等),从而就可以通过线性模型进行优化求解。
深度学习(Deep Learning)
深度学习是机器学习的分支,使用的模型是人工神经网络(Artificial Neural Networks)。
1、人工神经网络(ANN)架构:
神经元——>神经层——>神经网络
图1 生物神经元结构图
转化为符号表示,为:
注:可以看出一个神经元就是一个复合函数,z是一个线性函数,f是一个非线性函数,展开可以写成z=f(∑wiai)。这就将sum函数和f(x)函数合并在一起,表示了神经元的内部计算。
另外,神经元可看作一个计算与存储单元,计算是神经元对其输入进行计算功能,存储是神经元会暂存计算结果,并传递到下一层。
2、单层神经网络(神经层)
在1985年,Rosenblatt提出了由两层神经元组成的神经网络。取名为:“感知器”(即单层神经网络),单层神经网络有两个层次,分别是输入层和输出层。输入层里的“输入单元”负责传输数据,不计算;输出层里的“输出单元”需要对前一层的输入进行计算。之后,我们把需要计算的层称为:“计算层”,并把具有一个计算层的神经网络称为:“单层神经网络”。
如果仔细看输出的计算公式,会发现这两个公式就是线性代数方程组,因此可以用矩阵乘法来表达这两个公式。
上面公式就是神经网络从前一层计算后一层的矩阵运算。与神经元模型不同的是,感知器中的权值是通过训练得到,因此,根据以前的知识我们知道,感知器类似一个逻辑回归模型,可以做线性分类任务,但只能简单的线性分类任务。
3、多层和深度学习网络
现在开始讲解前馈神经网络,首先还是从经典的全链接bp算法开始。
全链接bp算法
1、前馈神经网络
所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。如下图就是一个简单的神经网络。
我们使用圆圈来表示神经网络的输入,标上“
”的圆圈被称为偏置节点,也就是截距项。神经网络最左边的一层叫做输入层,最右的一层叫做输出层(本例中,输出层只有一个节点)。中间所有节点组成的一层叫做隐藏层,因为我们不能在训练样本集中观测到它们的值。同时可以看到,以上神经网络的例子中有3个输入单元(偏置单元不计在内),3个隐藏单元及一个输出单元。这里我们将激活函数
扩展为用向量(分量的形式)来表示,即
,那么上面的等式可以更简洁地表示为:
将上面的计算步骤叫作前向传播。之前我们用
表示输入层的激活值,那么给定第
层的激活值
后,第
层的激活值
就可以按照下面步骤计算得到:
将参数矩阵化,使用矩阵-向量运算方式,我们就可以利用线性代数的优势对神经网络进行快速求解。
2、反向传播
假设我们有一个固定样本集为:
它包含
个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例
,其代价函数为:
这是一个(二分之一的)方差代价函数。给定一个包含
个样例的数据集,我们可以定义整体代价函数为:
以上公式中的第一项
是一个均方差项。第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过度拟合。
[注:通常权重衰减的计算并不使用偏置项
,比如我们在
的定义中就没有使用。一般来说,将偏置项包含在权重衰减项中只会对最终的神经网络产生很小的影响。一般你会发现这个权重衰减实际上是贝叶斯规则化方法的变种。在贝叶斯规则化方法中,我们将高斯先验概率引入到参数中计算MAP(极大后验)估计(而不是极大似然估计)。]
权重衰减参数
用于控制公式中两项的相对重要性。在此重申一下这两个复杂函数的含义:
是针对单个样例计算得到的方差代价函数;
是整体样本代价函数,它包含权重衰减项。
以上的代价函数经常被用于分类和回归问题。在分类问题中,我们用y=0或1来代表两种类型的标签(回想一下,这是因为sigmoid激活函数的值域为[0,1];如果我们使用双曲正切型激活函数,那么应该选用-1和+1作为标签)。对于回归问题,首先要变换输出值域,以保证其范围为[0,1](同样地,如果使用双曲正切型激活函数,要使输出值域为[-1,+1])。
我们的目标是针对参数
和
来求其函数
的最小值。为了求解神经网络,我们需要将每一个参数
和
初始化为一个很小的、接近零的随机值生成的随机值(比如说,使用正态分布Normal(a,
^2),其中
设置为0.01),之后对目标函数使用诸如批量梯度下降法的最优化算法。因为
是一个非凸函数,梯度下降法很可能会收敛到局部最优解;但是在实际应用中,梯度下降法通常能得到令人满意的结果。最后,需要再次强调的是,要将参数进行随机初始化,而不是全部置为0。如果所有参数都用相同的值作为初始值,那么所有隐藏层单元最终会得到与输入值有关的、相同的函数。随机初始化的目的是使对称失效。
也就是说,对于所有
,
都会取相同的值,那么对于任何输入
都会有:
梯度下降法中每一次迭代都按照如下公式对参数
和
进行更新: