今天学习的是现在人工智能领域最火的神经网络啦,很牛逼的深度学习也是这部分的内容。但是我还没学看深度学习,准备机器学习系统学习后再重点学习DL。所以今天学的也只是一个系统概论。
5.1 神经元模型
高中已经学过神经元了,给个刺激,神经元就会有反应。机器学习的神经元模型也是模仿生物上的,典型的"M-P神经元模型“如下:
x1到xn都是神经元的输入,w1到wn是每个输入连接的权值。θ是阈值,总输入和阈值比较后经过“**函数”f的处理产生神经元的输出。
这里的**函数就是前面的线性模型里提到的sigmoid函数。
5.2 感知机和多层网络
上面图片展示的是一层神经元,感知机就是有两层神经元,如下:
感知机能方便实现逻辑与或非运算,举个与运算的例子。
假设**函数用阶跃函数(实际用sigmoid),输出
令w1=w2=1,θ=2,则y=f(1*x1+1*x2-2),仅当x1与x2都等于1时,y=1才成立。
这里的wi(i=1,2,…,n)以及阈值θ都是可以通过学习得到的。为了方便一些,我们把θ也看做是一个连接权值Wn+1,输入永远为-1。这样就可以把任务集中在权值的学习上。
怎么学呢?看这个式子:
y^是当前输出,η是学习率。上面这两个式子就是训练一个样本后,输出和实际标记肯定有误差,通过这个差值来更新权值。我们可以想象,如果没有误差,权值就不会更新。
如果两类问题是线性可分的,感知机的学习一定会收敛,即会求得适当的权值。比如上面提的与或非问题。线性可分的意思就是存在一个线性超平面能把他们分开。像下面这样:
如果线性不可分,感知机就无能为力了,像“异或”:
为什么无能为力呢?因为我们看到感知机只有两层神经元,而且只有输出神经元有**函数处理,学习能力很受限。所以我们下意识就会想到我多加几层带**函数的功能神经元就好了嘛,事实正是如此。
比如用这个两层感知机能解决异或问题:
中间那层我们叫:隐含层,也是有**函数的。
更一般的,我们把下面这样的神经网络叫“多层前馈神经网络”:
特点是每层神经元与下一层全互连,不存在同层连接,不存在跨层连接。
我们稍微小结一下:神经网络输入层接受输入,不做处理,隐含层和输出层(统称功能神经元)来加工,输出层最后输出。神经网络的任务就是在训练中调整连接权值和功能神经元的阈值。所以学习的东西就是阈值和连接权值。
5.3误差逆传播算法
这个就是很经典的BP算法啦。因为多层神经网络肯定没法用简单的感知机学习算法来训练啊,所以BP算法应运而生。一般我们说BP网络时是说BP算法训练的“多层前馈神经网络”。当然BP算法不限于此。
具体看一下BP算法的内容吧:
我们以上面这个 神经网络来说。
推导并不难,关键理解其中的梯度下降思想和求导的链式法则。
看一下BP的算法流程:
BP算法的目标是最小化训练集的累计误差:
但是我们发现,上面的“标准BP算法”每次更新参数是在一个样本训练之后,也就是说更新规则是针对单个Ek推导的,似乎不太符合我们的目标函数。
我们提出一个基于累计误差最小化的更新规则,就的到了累计BP算法。
讨论累计BP算法和标准BP算法区别:
标准BP算法每次更新针对单个样例,就会很频繁,而且可能会出现“互抵”现象。
累计就是整个数据集训练一遍后才更新参数,频率低得多,但是累计误差下降到一定程度后,进一步下降很慢,这时候标准BP算法表现更好。
为了防止有强大学习能力的神经网络“过拟合”,我们有两种方法缓解它:
早停:类似留出法,用测试集来估计误差。训练集误差降低,而测试集上升,停止训练。
正则化:误差目标函数中加入一个描述网络复杂程度的部分:
ωw
不多解释。
5.4全局最小和局部最小
这个概念很简单 ,误差函数可能有很多局部最小,但只有一个全局最小。
刚才的BP算法也注意到了,梯度下降的思想来搜索最优解。很明显,这种方法你没法分辨梯度为0时的点是局部最小还是全局最小,而这时算法可不管,就这么停止了更新。
所以往往会陷入局部最小。
怎么跳出来呢?提几个策略:
(1)以多组不同参数值初始化多个神经网络,照常训练后,取误差最小的当最终解。
(2)模拟退火
(3)随机梯度下降
(4)遗传算法
θ
- 深度学习(deep learning)是很深层的神经网络。其提高容量的方法是增加隐层数目,这比增加隐层神经元数目更有效,这样不但增加了拥有**函数的神经元数目,而且增加了**函数嵌套的层数。
- 该模型太复杂,下面给出两种节省开销的训练方法:无监督逐层训练、权共享。
-
无监督逐层训练(unsupervised layer-wise training):
- 预训练(pre-training):每次训练一层,将上层作为输入,本层结果作为下层的输入。
- 微调训练(fine-training):预训练结束后的微调。
- 可视为将大量参数分组,每组先找到好的设置,基于局部较优进行全局寻优。
- 权共享(weight sharing):让一组神经元使用相同的连接权。这在卷积神经网络(Convolutional Neural Network,CNN)发挥了重要作用。