第5章 神经网络
5.1神经元模型
M-P神经元(一个用于模拟生物神经元的数学模型):接收n个输入值(通常来自其他神经元,x∈R^n),并对各输入值乘上权重并求和,然后将所求和与自身阈值θ作比较(所求和减去阈值θ),然后将所得结果带入激活函数(模拟“抑制”和“激活”)得到输出(通常传给下一个神经元)。
单个神经元:感知机(sgn作为激活函数)、对数几率回归(sigmoid作激活函数)
sgn函数: sigmoid函数:
多个神经元:神经网络
5.2感知机与多层网络
一、感知机(用于分类问题):
(1)模型:
从数学上看,感知机模型是以送给你为激活函数的神经元,
其中,x∈R^n是样本的n维特征向量,为感知机模型的输入,θ为感知机模型的阈值,w∈R^n为各个特征的权重。
从几何上看,给定一个线性可分(例如二分类问题,可以通过一个超平面把样本所在的特征空间划分为两个部分,各部分仅有正/负样本)的数据集T,感知机的学习目标是求得能对T中正负样本完全划分正确的超平面,即为超平面方程。
n维空间的超平面:
1、超平面方程不唯一
2、法向量w垂直于超平面
3、法向量w和位移项b唯一确定一个超平面
4、法向量w所指向的那一半空间为正空间,另一半为负空间
(一维空间上超平面为一个点,二维空间上超平面为一条线,三维空间上超平面为一个平面)
(2)策略:随机初始化w、b,将全体训练样本代入感知机模型找出误分类样本,若此时误分类样本的集合为M⊆T,对任意一个误分类样本(x,y)∈M,若≥0时,模型输出值为,样本真实的标记为y=0; 若≤0,模型输出值为,样本真实的标记为y=1,则恒有,因此可定义损失函数为:
此时,求得使L为最小值的w、b即可得模型。此损失函数非负,若无误分类点,损失函数为0.且误分类点越少,误分类点离平面越近,损失函数越小。
若将阈值看作一个固定输入为“-1”的哑结点,则,上述损失函数可简化为
(wT=(w1,w2,...,wn,θ),xT=(x1,x2,...,xn,-1))
(3)算法(随机梯度下降法):
当误分类集合M固定时,可求得损失函数L(w)的梯度为。
感知机的学习算法采用随机梯度下降法,即不是使M中所有误分类点的梯度下降,而是随机选取一个误分类点使其梯度下降,则w的更新公式为:
(w2=w1+△w1,w3=w2+△w2……;学习率η∈(0,1))
二、神经网络
单个神经元能力有限,对于感知机只能分类线性可分的数据集,二多个神经元构成的神经网络能够分类线性不可分的数据集。
通用近似定理:只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连线函数。因此,神经网络既能做回归,也能做分类,而且不需要复杂的特征工程。(神经网络可以自动对样本特征进行处理,可以自行增添特征(有其他特征组合而成)或删去冗余特征)
神经网络存在的问题:
(1)对于一个具体问题,神经网络的深度和宽度不确定
(2)对于一个具体问题,神经网络的结构不能确定
(3)对于一个具体问题,神经网络的输出结果难以解释(无法通过神经网络判断是哪一个特征对输出值的影响较大)
多层前馈网络:同层间的神经元相互不连接,每层中所有神经元都要与下一层中的每个神经元连接。(隐层阈值γh,输出层阈值θj),例如
输入层:输入层仅接收外界输入,不进行函数处理
隐层:该层神经网络可看作一个特征加工函数(NN(x)),其输入值为输入层所接收的值或上一隐层所输出的值(双隐层前馈网络),对该值进行加工处理后,将其作为新的特征x*输出给下一层神经元(输出层或下一隐层),即:
输出层:
(1)分类:将上一层神经元所传递的x*经函数处理后,转化为{0,1}输出的神经元,例激活函数为sigmoid函数的神经元
对于该类函数,损失函数常用交叉熵得出;算法常用BP算法
(2)单输出回归:将上一层神经元所传递的x*经函数处理后转化为一个常量输出的神经元 (),例如:没有激活函数的神经元(线性回归)
对于该类函数损失函数可以采用均方误差,但由于神经网络复杂,该函数通常不是凸函数,因此算法应采用BP算法
(3)多输出回归: 将上一层神经元所传递的x*经函数处理后转化为多个个常量输出的神经元
5.3BP算法(误差逆传播算法)
给定训练集D={(x1,y1),(x2,y2),...,(xm,ym)},xi为d维特征向量,yi为l维向量,即输入的样例有d个属性描述,l个输出实值。给出一个有d个输入神经元、l个输出神经元,q个隐层神经元的多层前馈神经网络,其中输出层第j个神经元的阈值为θi,隐层第h个神经元的阈值为γh,输入层第i个神经元与隐层第h个神经元之间的连接权为vih(第i个输入特征在隐层第h个神经元中的权重为vih),隐层第h个神经元与输出层第j个神经元的连接权为whj(隐层第h个神经元的输出值在输出层第j个神经元的权重为whj),隐层第h个神经元接受到的输入为,输出层第j个神经元接收到的输入为,bh为隐层第h个神经元的输出。
假设隐层和输出层神经元都使用sigmoid函数。对样例(xk,yk),假定神经网络的输出为,即,则网络在该样例上的均方误差为
该神经网络中共有d*q+q*l+q+l个参数需确定:输入层到隐层的d*q个权重值,q个隐层的阈值;隐层到输出层q*l个权重值,l个输出层阈值。
误差逆传播算法(BP算法):基于随机梯度下降的参数更新算法,任意参数的更新估计式为
以隐层到输出层的连接层whj为例:
(学习率η∈(0,1),根据经验自行选取)
上式仅需推导出损失函数Ek关于参数w的一节偏导数(梯度)即可(通过链式求导计算)
(由于NN(x)通常为复杂的非凸函数,随机梯度下降并不能保证一定走到全局最小值点,通常走到局部极小值点)
由于whj是先影响到输出层神经元的输入值βj,βj再影响到其输出值,再影响到Ek,因此,根据链式求导法则有
由βj定义,有
simoid函数具有如下性质
又由
可得到
对于输入层第i个神经元与隐层第h个神经元间的连接权,其更新公式为:
则
对于其他参数,类似可得:;(隐层和输出层的学习率未必相等)
BP算法工作流程:
先将样例特征输入至输入层,输入层再传至隐层,隐层加工处理后输出至输出层,输出层再产生其输出结果;
计算输出层的误差(4-5行),再将误差逆向传至隐层神经元(6行),最后根据隐层神经元误差对连接权和阈值进行调整(7行)
上述迭代过程循环进行,直至达到停止条件,例如训练误差达到一个很小值。
BP算法目标是要最小化训练集D上的累计误差
以上内容来自第5章-神经网络_哔哩哔哩_bilibili和周志华老师的《机器学习》