神经网络:
特点:
1943年,McCulloch和Pitts将生物神经细胞抽象成一个简单的数学模型,即经典的M-P神经元模型。
神经元模型:输入、输出、权重、偏置、激活函数
最简单的形式为阶跃函数,
用以表示兴奋或抑制状态。但是由于其不连续、不光滑等不好的数学性质,实际应用中不予采用,会使用光滑化后的近似函数。
感知器(perceptron)的结构类似于神经元模型,是对神经元最基本概念的模拟。它是由Rosenblatt在1957年首次提出,由两层神经元构成,即输入层和输出层。
感知器可以解决与、或、非,还可以解决线性分类、线性回归问题。
学习权重和偏置使得以下代价函数(cost function)/损失函数(loss function)最小:
对于训练数据 , 和 进行如下的更新:
其中 是学习率(梯度下降法的搜索步长)。
单层感知器只能对线性可分的数据集进行分类,不能解决逻辑问题异或(XOR)。
多层感知器可以模拟任意复杂的函数,其中函数的复杂性决定了网络的神经元个数和隐层层数。
多层感知器也叫神经网络,也即人工神经网络,它除了输入层、输出层,中间可以有一至多个隐层。
每个神经元只与前一层的神经元相连。当前层,只接收前一层的输出,而自身的输出只能输出给下一层,各层间没有反馈。注意偏置不能有输入。
每个神经元同时将自身的输出作为输入信号反馈给其它神经元。网络的连接图中具有回路,所以反馈神经网络需要工作一段时间后才能达到稳定。Hopfield神经网络是最简单且应用广泛的反馈神经网络。
为叙述方便,引入如下记号:
例如:
输出为
用向量表示各层的输入和输出,并定义 , 则上式可简化为:
神经网络模型:定义代价函数,根据样本数据和标签采用梯度下降法进行学习,求得权重等参数,对测试数据进行预测。
涉及:激活函数,代价函数,梯度下降法,反向传播算法。
激活函数:使模型具有非线性性
但是具有饱和性,,参数更新中,代价函数关于参数的偏导数会包含激活函数的导数项。当范围落入饱和区,会使得参数难以更新。还会导致向下一层传递的梯度也非常小,这种现象称为梯度消失,会使得整个网络的参数很难得到有效的训练。
范围在,其收敛速度快于Sigmoid函数,但同样具有饱和性,会造成梯度消失。
线性整流单元(rectified linear units),在正半轴上不存在梯度衰减问题,但在小于0区域,同样对应权重无法更新,称这种现象为神经元坏死。由于神经元坏死会影响网络的收敛性,因此提出了各种ReLU函数的变形。
它是ReLU函数的近似。
代价函数:训练模型使代价函数达到最小
为所求的参数集 (权值 和偏置), 是样本总数, 是训练数据的标签, 是 的神经网络输出。
均方误差作为代价函数的优点是形式简单,通俗易懂,但由于其修正项包含激活函数的导数,容易出现饱和现象,容易陷于局部极值。由此可以用交叉熵改进。
熵是由Shannon最早引入信息论,用来衡量不确定性程度;变量不确定性越大,熵越大。
例如,考虑激活函数为Sigmoid函数的情况:
考虑最外层(输出层),神经网络的输出
利用,则
可以看出修正项不再出现Sigmoid激活函数的导数项,而留下了误差项,如果误差越大,修正项就越大,参数更新就越快,训练速度也就越快。
其中称为步长,在机器学习中通常称为学习率。神经网络模型的学习常常需要大的训练集来得到较号的泛化能力。但由公式可知梯度下降法需要在每一迭代中对每个样本进行计算
对每一个样本求梯度,对所有样本求平均,显然当训练集样本量较大时,会使得训练消耗相当长的时间。甚至使得整个算法的整体计算量过大,时间过长,而被放弃。因此在实际计算中,往往采用小规模样本的梯度期望,或仅根据一个样本的梯度来近似代替。
具体而言,从训练集中随机抽出一小批量样本,对应的标签为。那么,代价函数的梯度近似为所抽取样本的梯度期望
其中的求和只对随机抽样出来的样本进行。小批量梯度下降法在迭代每一步,参数的更新只用了小批量样本的信息。相对于整个样本数据集来说,小批量样本的数目相对于样本总数要小得多,计算量大大减少,计算速度也可以极大地提升。
训练过程中,将遍历一次所有样本的计算称为一个epoch,在梯度下降法中迭代一次就是一个epoch,而在小批量梯度下降算法中,迭代(总样本数/批尺寸)次才是一个epoch,小批量梯度下降法是以迭代次数换取算法的运行速度。随机梯度下降算法是小批量梯度下降法的一个特里,即的情况。小批量梯度下降法和随机梯度下降法虽然每一次迭代的计算量大大减少,但迭代方向可能不是收敛方向(剧烈震荡),算法收敛可能需要更多的迭代次数。
1: 给定参数初始值,学习率 ;
2: while 终止条件未满足 do
3: 从训练集中随机抽出 个样本 , 相应的标签为
4: 计算小批量样本的梯度
5: 参数更新 .
6: end while
考虑网络的传播过程
可知输出的迭代形式
其中,。由此迭代更新参数。
而偏导数值根据反向传播和链式法则可知
由,得到
记,所以
可由输入层开始正向计算,而需要反向计算。
下面我们只考虑一个固定训练样本,代价函数为均方误差的情况。
引入哈达玛(Hadamard)乘积:
先计算输出层的误差项
写成矩阵向量的形式为
然后计算中间第隐层的误差项。根据链式法则,有
再由
故
即
1: 根据输入的训练数据,计算;
2: 根据神经网络正向计算
3: 计算输出层的误差项
4 : 反向计算
5: 让算输出的偏导数