Skip to content

[神经网络]01 神经网络

神经网络(neural network)大概已经是人工智能领域最典型的成就了,这节要是还不甚了解可就比较闹笑话了

7.1 神经网络中的基本概念

7.1.1 人工神经元

下图是人工神经元最为代表的M-P神经元模型的大致结构,它的结构其实很好地反映了在计算机中,我们关注的部分

M-P神经元结构

  • 图中,一个神经元接受 其他神经元的输出 作为输入xi,其中每个输入都有个权重wi,此外,这个神经元自身有一个参数θ
  • 当前这个神经元计算所有输出的加权和,然后减去阈值θ,最后通过一个激活函数f,得到输出y
    • 也就是图中的y=f(i=1nwixiθ)

7.1.2 激活函数

  • 理想的激活函数如下图(a)所示,应当对于负值输出0,对于正值输出1
    • 但是这样的函数不可导,不利于计算和优化,所以出现了(b)所示的最常用的激活函数之一:sigmoid函数

典型激活函数

7.2 感知机和多层网络

下图给出两个典型的神经网络的结构,其基本结构如下图 典型神经网络结构

  • 神经网络可分为3部分:输入层、隐藏层、输出层;其中隐藏层可以有多层。常说的神经网络主要是指前馈网络。
  • 前馈网络:神经元之间不存在同层连接和跨层连接,也就是网络中无环或回路。
  • 感知机:没有隐藏层,只有输入层和输出层的神经网络。
    • 感知机是一种线性分类器,其输出是输入的线性组合,经过阶跃函数后得到的
    • 感知机的局限性在于,它只能解决线性可分的问题

7.3 前向传播

此处介绍的是神经网络在一次迭代中做的事情的一部分。

  • bh为例,它将接受上一层(输入层) d个结点的输出x1,x2,,xk,并将其进行加权求和,得到图中的αh,然后再减去阈值γh,经过激活,得到该神经元的输出( 记作bh)。

  • 与这类似,输出层的神经元也是如此,yj接受上一层的q个神经元的输出,加权求和得到总的输入βj。然后再经过减阈值θj,激活函数,得到输出yj

  • 假设神经网络的输出为yk^=(y1k^,y2k^,,ylk^)

  • 则网络的预测输出在样本(xk,yk)上的均方误差(MSE)为

    Ek=12j=1l(yjk^yjk)2
    • 也就是预测输出和实际标记的差的平方和,再除以2。

7.4 误差逆传播(BP)算法

本章重点。BP全称为“error BackPropagation”。为便于演示,给出了下图所示的一个神经网络结构。

  • 输出层第j个神经元的阈值用θj表示
  • 隐藏第h个神经元的阈值用γh表示
  • 测试用例记作(xi,yi),但这里的xiyi都是向量,分别有d维和l维,正好对应图中输入层/输出层的神经元节点数。也就是每个节点输入/输出一个维度的信息。

神经网络结构示意图

(1) 反向传播/BP算法

简单来说,BP算法是用于优化神经网络中的参数的算法,其核心思想是梯度下降法——十分经典的优化算法。

(2) 拓展:估算神经网络参数量

这就考验对整个网络结构的理解了

  • 首先,三层的结点分别有d,q,l个,除了输入层,每个结点都有一个阈值,所以阈值个数为q+l个。

  • 然后,输入层-隐藏层是一个完全二部图,即d个输入层结点和q个隐藏层结点之间都有连接,而每个连接都有权重,所以,此处共d×q个权重。

  • 一样的,隐藏层-输出层之间也都有连接,此处共q×l个权重。

  • 汇总一下,共q+l+dq+ql=q(d+l+1)+l个参数。

  • 所以对于这种问题只需要考虑以下3步:

    • 首先搞清各层的结点数,以及各层间的连接情况(不过考试的时候为了方便,一般都是全连接)
    • 除了输入层之外,每一层都有用于激活的阈值,计算阈值总数
    • 计算各层之间的连接数之和,也就是权重总数
    • 参数量就是权重总数+阈值总数

    所以其实不难

(3) 标准BP和累积BP

  • 说白了就是:
    • 标准BP每次针对单个训练样例更新权重和阈值
    • 累积BP优化目标是最小化整个训练集上的累积误差

(4) 过拟合与缓解策略

BP算法常常导致过拟合

  • 什么是过拟合?

    • 过拟合(Overfitting)是指模型过度适应训练数据集,导致泛化性能不佳的现象。
    • 过拟合通常发生在模型复杂度较高训练数据相对较少的情况下。当模型复杂度过高时,它可能会记住训练数据中的每个细节和噪声 ,而无法捕捉到普遍的模式。这种情况下,模型可能会在训练数据上表现得非常好,但在新的数据上却无法正确地进行预测或分类。
  • 主要策略

    • 早停:监控模型在验证集上的性能,当性能不再提高时提前停止训练
    • 正则化:通过添加惩罚项来约束模型参数的大小

7.4 全局最小与局部最小

分析BP算法可以看出其算法核心是梯度下降法,但如果损失函数不是凸函数,那么梯度下降法就不能保证找到全局最小值( 就是有可能会卡在“鞍点”,即局部极小值点),所以需要一些其他策略来缓解这个问题。

  • 模拟退火
  • 随机梯度下降法
  • 遗传算法

Extra07-总结

  • 本章的知识脉络如下:
  • BP算法是本章的重点,因为此处可以出计算题,需要能够手算。
  • 除此之外,为考量对于神经网络整体的理解,还会出一些简单计算题,比如估计神经网络的参数量。当然这里的神经网络不特意说明,指的都是全连接的前馈神经网络。

Ques07-例题整理

[概念理解·神经网络参数量估计]

题目内容

7.3 神经网络结构示意图

  • 对于如图所示的神经网络,假定这三层的神经元分别有d,q,l个,请估算一次BP算法过程中更新的参数量

分析与解答

  • 首先,三层的结点分别有d,q,l个,除了输入层,每个结点都有一个阈值,所以阈值个数为q+l个。
  • 然后,输入层-隐藏层是一个完全二部图,即d个输入层结点和q个隐藏层结点之间都有连接,而每个连接都有权重,所以,此处共d×q个权重。
  • 一样的,隐藏层-输出层之间也都有连接,此处共q×l个权重。
  • 汇总一下,共q+l+dq+ql=q(d+l+1)+l个参数。

[计算·神经网络参数更新]

题目内容

7.3 神经网络结构示意图

  • 还是这个题,请给出完整的whj的更新流程

分析与解答

  • 对于任意一个参数,其每一轮迭代的更新公式为vv+Δvv表示任意一个可学习的参数

  • 接下来以权重whj为例。假如我们想更新whj,那么可见,最重要的是计算出Δwhj=ηEkwhj,其中η是学习率。

  • 根据求导的链式法则:

Ekwhj=Ekyjk^yjk^βjβjwhj
  • 这个公式中有2个部分很好算,因为这两个部分都是累加式求导:
Ekyjk^=yjk^yjkβjwhj=bh
  • 而对于yjk^/βj,由于yjk^=f(βjθj)f是Sigmoid函数,所以这里实际上是f(βjθj)(βjθj)βj=f(βjθj)
  • 此时利用Sigmoid函数的特点:f(x)=f(x)(1f(x)),代换为:
f(βjθj)(1f(βjθj))=yjk^(1yjk^)
  • 至此,已大体上推导完毕,将上述各部分回代,得到
Δwhj=ηgjbhgj=Ekyjk^yjk^βj=(yjk^yjk)(yjk^(1yjk^))=yjk^(1yjk^)(yjkyjk^)
  • 这就是BP算法中,梯度下降法的核心公式

[概念理解·BP算法的流程]

题目内容

  • 什么是神经网络的反向传播算法(back propagation)?它是如何用于训练多层感知机的?

分析与解答

  • BP算法是一个迭代算法,它的核心思想是根据每次迭代结果计算损失,并结合一些优化算法(以梯度下降为例) 计算每个权重的梯度以更新权重。反复迭代直到达到迭代结束条件。
  • 在训练多层感知机时,反向传播算法计算每个神经元的误差,并将误差反向传播到前一层,以计算前一层的误差( 其实现形式实际上是求导的链式法则)。然后,它使用这些误差来计算每个权重的偏导数,并使用这些偏导数来更新权重。

上次更新于: