今天学习的是现在人工智能领域最火的神经网络啦,很牛逼的深度学习也是这部分的内容。但是我还没学看深度学习,准备机器学习系统学习后再重点学习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)遗传算法


θ

5.5 深度学习
  1. 深度学习(deep learning)是很深层的神经网络。其提高容量的方法是增加隐层数目,这比增加隐层神经元数目更有效,这样不但增加了拥有**函数的神经元数目,而且增加了**函数嵌套的层数。
  2. 该模型太复杂,下面给出两种节省开销的训练方法:无监督逐层训练、权共享。
  3. 无监督逐层训练(unsupervised layer-wise training): 
    • 预训练(pre-training):每次训练一层,将上层作为输入,本层结果作为下层的输入。
    • 微调训练(fine-training):预训练结束后的微调。
    • 可视为将大量参数分组,每组先找到好的设置,基于局部较优进行全局寻优。
  4. 权共享(weight sharing):让一组神经元使用相同的连接权。这在卷积神经网络(Convolutional Neural Network,CNN)发挥了重要作用。

θ

相关文章:

  • 2021-09-26
  • 2021-06-21
  • 2021-12-10
  • 2022-12-23
  • 2021-10-27
  • 2022-02-08
  • 2021-09-10
  • 2022-01-15
猜你喜欢
  • 2021-11-24
  • 2021-06-11
  • 2021-09-24
  • 2022-01-18
  • 2021-08-24
相关资源
相似解决方案