5.1 神经元模型

神经网络是一门多学科交叉的研究领域,它由大量简单而具适应性的单元(即神经元)构成,这些神经元通过复杂的并行连接组成网络。我们在机器学习中讨论的神经网络,实际上是数学模型和学习算法的交汇点。


1. 神经元模型:基本单元

生物神经元的工作原理:

  • 互联与传递信号: 在生物神经系统中,每个神经元都与其他神经元相连。当一个神经元被激活(或称“兴奋”)时,它会向与之连接的神经元传递化学信号,这些信号会改变接收神经元的电位。
  • 阈值触发: 如果一个神经元接收到的总信号使其电位超过某个预设的“阈值”,它就会被激活,进而向其他神经元传递信号。

M-P神经元模型:

  • 提出背景: 1943年,[McCulloch and Pitts, 1943] 把生物神经元的工作方式抽象为一个数学模型,这就是经典的“M-P神经元模型”。
  • 模型构成:
    • 输入加权: 神经元从其他nn个神经元接收输入信号,每个信号都有对应的权重。
    • 求和与比较: 神经元将所有加权后的输入求和,然后与其阈值进行比较。
    • 激活函数: 求和结果经过激活函数处理后,输出最终的神经元信号。

2. 从神经元到神经网络

  • 单个神经元只是一个简单单元,它完成的功能是:

    y=f(i=1nwixiθ)y = f\Big(\sum_{i=1}^{n}w_i x_i - \theta\Big)

    其中:

    • 为输入信号
    • 为对应的权重
    • 为阈值
    • 为激活函数
  • 构建神经网络
    通过将许多这样的神经元按层次结构(如输入层、隐藏层、输出层)连接起来,构成一个神经网络。

    • 每一层神经元将上一层的输出作为输入,再经过权重加权、加偏置和激活函数处理,最终在输出层给出预测结果。
    • 从计算机科学角度看,神经网络就是一个由许多参数(权重和偏置)构成的数学模型,其计算可以用矩阵运算来表示。

3. 激活函数的选择

阶跃函数:

  • 理想情况: 理想的激活函数是阶跃函数(见图),它将输入直接分为两类:输出“1”(兴奋)或“0”(抑制)。
  • 问题所在: 但由于阶跃函数不连续且不光滑,在实际计算中会带来不便。

Sigmoid函数:

  • 常用选择: 因此,实际中更常用 Sigmoid 函数作为激活函数(见图)。
  • 特点: Sigmoid 函数能够将任意大范围的输入值“挤压”到 0 和 1 之间的连续范围内,因此也被称为“挤压函数”(squashing function)。

image.png


4. 神经网络的学习与数学基础

  • 学习过程
    神经网络中的权重和阈值最初是随机设定的,通过大量样本数据“训练”,不断调整这些参数,使得模型输出越来越接近真实目标。

  • 数学支撑
    有效的神经网络学习算法(如反向传播算法)有严密的数学证明,主要依靠梯度下降和链式法则来优化参数 。


5.2 感知机与多层网络

1. 感知机是什么?

定义

感知机(Perceptron)是一种最简单的神经网络,由两个部分组成:

  • 输入层:接收外界信号(如特征数据),无计算功能,仅传递数据。
  • 输出层:包含一个 M-P 神经元(阈值逻辑单元),通过激活函数(如阶跃函数)对输入信号加权求和后输出结果。

数学模型,输出公式:

y=f(i=1nwixiθ)y = f\left(\sum_{i = 1}^{n}w_ix_i - \theta\right)

其中:

  • wiw_i为权重,θ\theta为阈值,ff为激活函数(如阶跃函数)。

2. 感知机的逻辑运算示例

逻辑与(AND)

感知机是一种结构简单的神经网络,由两层神经元构成。输入层如同信息的“入口”,负责接收外界输入信号,然后将这些信号传递给输出层。输出层的神经元是M - P神经元,也被称作“阈值逻辑单元”。别看感知机结构简单,却能轻松实现逻辑与、或、非运算。这依赖于公式:

y=f(iwixiθ)y = f(\sum_i w_ix_i - \theta)

假设ff 是阶跃函数,具体如下:

  • “与”运算:以“x1x_1x2x_2”为例,令w1=w2=1w_1 = w_2 = 1θ=2\theta = 2 ,此时y=(1x1+1x22)y = (1 \cdot x_1 + 1 \cdot x_2 - 2) 。只有当x1x_1x2x_2都为1时,yy才等于1 ,和日常理解的“与”逻辑一致。
  • “或”运算:对于“x1x_1x2x_2” ,设置w1=w2=1w_1 = w_2 = 1θ=0.5\theta = 0.5y=(1x1+1x20.5)y = (1 \cdot x_1 + 1 \cdot x_2 - 0.5) 。只要x1x_1等于1或者x2x_2等于1 ,yy就等于1 ,符合“或”的逻辑。
  • “非”运算:在“非x1x_1”中,令w1=0.6w_1 = -0.6w2=0w_2 = 0θ=0.5\theta = -0.5y=(0.6x1+0x2+0.5)y = (-0.6 \cdot x_1 + 0 \cdot x_2 + 0.5) 。当x1=1x_1 = 1时,y=0y = 0x1=0x_1 = 0时,y=1y = 1 ,这就是“非”运算的结果。

3. 感知机的学习过程

一般情况下,给定训练数据集,感知机的权重wiw_ii=1,2,,ni = 1, 2, \ldots, n)和阈值 θ\theta 可以通过学习获得。我们可以把阈值 θ\theta 看作是一个固定输入为 -1.0 的“哑结点”所对应的连接权重 wn+1w_{n + 1} ,这样权重和阈值的学习就统一为权重的学习。

感知机的学习规则很直观,对于训练样例(x,y)(x, y) ,如果当前感知机的输出为 y^\hat{y} ,那么感知机权重会按以下方式调整:

其中,η(0,1)\eta \in (0, 1)被称为学习率。从式(5.1)能看出,如果感知机对训练样例的预测是正确的,即y^=y\hat{y} = y ,那么感知机的权重就不会改变;反之,就会依据错误程度调整权重。

4. 感知机的局限

  • 只能处理线性可分问题,感知机的决策边界是一个线性超平面,因此它只能解决线性可分的问题(例如与、或、非运算)。
    • 当问题可以用一条直线(或超平面)将不同类别分开时,感知机的学习过程可以收敛到合适的权重。
    • 如果数据不是线性可分的(比如异或问题 XOR),感知机在训练时会不断振荡,无法找到一个稳定的解。

image.png

5. 多层感知机——解决非线性问题

为什么需要多层?

为了解决像异或这样非线性可分的问题,仅靠单层感知机是不够的。通过增加一层或多层“隐藏层”,让网络在输入和输出之间进行非线性转换,就可以解决更复杂的问题。

网络结构

一个常见的多层前馈神经网络(也称为多层感知机)通常包含三个部分:

  • 输入层:仅用于接收数据,不进行计算。
  • 隐藏层:可以有一层或多层,每个隐藏层的神经元都会先对来自上一层的加权求和进行非线性激活,再传递给下一层。
  • 输出层:将隐藏层传递来的信息经过最后的处理,生成最终结果。

解决异或问题

  1. 隐含层通过组合输入特征生成新表示。
  2. 输出层对隐含层信号二次处理,实现非线性分类。

image.png

多层前馈神经网络结构(图5.6)

**层级连接:**输入层→隐含层→输出层,全连接且无跨层/同层连接。

功能划分:

  • 输入层:仅传递数据,无计算。
  • 隐含层/输出层:含功能神经元,负责信号加工。

术语说明

“单隐层网络”即输入层 + 1个隐含层 + 输出层。

学习目标

通过训练数据调整连接权重和阈值。

image.png

6. 神经网络的核心思想

  • 层级特征抽象,低层(如输入层)提取基础特征,高层(如隐含层)组合特征生成高阶表示。
  • 连接权与阈值,模型知识存储在权重和阈值中,学习过程即优化这些参数。
  • 从线性到非线性,单层感知机受限于线性可分性,多层网络通过非线性激活函数(如Sigmoid、ReLU)逼近复杂函数。

5.3 误差逆传播算法

1. 概述

误差逆传播(BackPropagation,简称 BP,亦称“反向传播算法”)算法是一种训练多层前馈神经网络的经典方法。它基于梯度下降原理,通过反向传播误差来调整网络中的各个参数(连接权和阈值),使得网络输出越来越接近目标值。BP 算法不仅适用于前馈网络,也能用于其他类型的神经网络(如递归网络)。

BP算法要解决什么问题?

  • 问题背景:单层感知机无法处理复杂问题(如异或),需要多层神经网络。
  • 核心挑战:如何调整各层之间的连接权重和神经元的阈值,使得网络能正确学习训练数据。

BP算法的核心思想

  • 类比学习过程:像教孩子认图,先看结果再调整。
    1. 前向传播:输入数据通过网络计算输出结果。
    2. 计算误差:比较输出结果与正确答案的差距。
    3. 反向传播:将误差从输出层反向传递到各层,指导权重调整。
    4. 梯度下降:沿着误差减小的方向微调参数(权重和阈值)。

2. BP算法推导过程


1. 符号说明

假设你有一个多层前馈神经网络,其结构大致如下:

  • 输入层:有 dd 个神经元,对应输入向量 x=(x1,x2,,xd)x = (x_1, x_2, \dots, x_d)
  • 隐藏层:有 qq 个神经元,每个隐藏神经元的输入为

    αh=i=1dvihxi,\alpha_h = \sum_{i=1}^{d} v_{ih} x_i,

    经过激活函数得到输出

    bh=f(αhγh),b_h = f(\alpha_h - \gamma_h),

    其中 vihv_{ih} 是输入层到隐藏层的权值,γh\gamma_h 是隐藏层神经元的阈值。
  • 输出层:有 ll 个神经元,每个输出神经元的输入为

    βj=h=1qwhjbh,\beta_j = \sum_{h=1}^{q} w_{hj} b_h,

    输出为

    y^j=f(βjθj),\hat{y}_j = f(\beta_j - \theta_j),

    其中 whjw_{hj} 是隐藏层到输出层的权值,θj\theta_j 是输出层神经元的阈值。

通常激活函数 ff 采用 Sigmoid 函数,其导数有一个很好的性质:

f(x)=f(x)(1f(x)).f'(x) = f(x)(1-f(x)).

对单个训练样本 (xk,yk)(x_k, y_k),定义输出误差为

Ek=12j=1l(y^jkyjk)2.E_k = \frac{1}{2}\sum_{j=1}^{l} (\hat{y}_j^k - y_j^k)^2.

我们的目标是利用梯度下降法,使得整个训练集上的累积误差不断减小

链式法则的应用:

Ew=Ey^y^zzw\frac{\partial E}{\partial w}=\frac{\partial E}{\partial \hat{y}}\cdot\frac{\partial \hat{y}}{\partial z}\cdot\frac{\partial z}{\partial w}

例如输出层权重梯度:

Ewhj=(y^y)损失梯度σ(βj)激活导数ah前层输出\frac{\partial E}{\partial w_{hj}}=\underbrace{(\hat{y}-y)}_{\text{损失梯度}}\cdot\underbrace{\sigma'(\beta_j)}_{\text{激活导数}}\cdot\underbrace{a_h}_{\text{前层输出}}

image.png


2. 梯度下降与链式法则

梯度下降法的基本思想是:对于任一参数 vv,使用更新公式

vv+Δv,其中Δv=ηEkv,v \leftarrow v + \Delta v,\quad \text{其中} \quad \Delta v = -\eta \frac{\partial E_k}{\partial v},

来调整参数,η\eta 是学习率,控制每次更新的步长。

而由于网络是多层的,每个参数对最终输出的影响需要经过多层传递,所以我们使用链式法则将导数分解成多个部分,从而求得每个参数的梯度。


3. 输出层参数的推导

3.1 输出层权值的更新
  1. 定义输出,输出层第 jj 个神经元的输出为

    y^j=f(βjθj),\hat{y}_j = f(\beta_j - \theta_j),

    其中

    βj=h=1qwhjbh.\beta_j = \sum_{h=1}^{q} w_{hj} b_h.

  2. 误差函数,单个样本的误差为

    Ek=12j=1l(y^jyj)2.E_k = \frac{1}{2}\sum_{j=1}^{l} (\hat{y}_j - y_j)^2.

  3. 梯度求导(链式法则),我们需要计算 Ekwhj\frac{\partial E_k}{\partial w_{hj}}。利用链式法则有:

    Ekwhj=Eky^jy^jβjβjwhj.\frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y}_j} \cdot \frac{\partial \hat{y}_j}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}}.

    分别来看各项:

    • 第一项:

      Eky^j=y^jyj.\frac{\partial E_k}{\partial \hat{y}_j} = \hat{y}_j - y_j.

    • 第二项:
      由于 y^j=f(βjθj)\hat{y}_j = f(\beta_j-\theta_j)ff 为 Sigmoid 函数,所以有 f(x)=f(x)(1f(x)f'(x) = f(x)(1-f(x)),因此

      y^jβj=f(βjθj)=y^j(1y^j).\frac{\partial \hat{y}_j}{\partial \beta_j} = f'(\beta_j-\theta_j)= \hat{y}_j(1-\hat{y}_j).

    • 第三项:
      因为 βj=hwhjbh\beta_j = \sum_{h} w_{hj}b_h,对 whjw_{hj} 求导得

      βjwhj=bh.\frac{\partial \beta_j}{\partial w_{hj}} = b_h.

  4. 综合求导结果,将各项乘起来:

    Ekwhj=(y^jyj)y^j(1y^j)bh.\frac{\partial E_k}{\partial w_{hj}} = (\hat{y}_j - y_j) \cdot \hat{y}_j(1-\hat{y}_j) \cdot b_h.

  5. 引入梯度项 gjg_j,为了简化表达,我们定义:

    gj=y^j(1y^j)(yjy^j).g_j = \hat{y}_j(1-\hat{y}_j)(y_j - \hat{y}_j).

    注意这里将 (y^jyj)(\hat{y}_j - y_j) 转换为 (yjy^j)(y_j - \hat{y}_j) 并在更新时调整负号。于是权值更新公式为:

    Δwhj=ηgjbh.\Delta w_{hj} = \eta g_j b_h.

3.2 输出层阈值的更新

同理,对于输出层神经元的阈值θj\theta_j ,我们有:

Δθj=ηgj.\Delta \theta_j = -\eta g_j.

这里的负号反映了阈值在输出时的“偏移”作用。


4. 隐藏层参数的推导

由于隐藏层位于输入和输出之间,其参数更新需要将输出层的误差“传递回来”。

4.1 隐藏层梯度 ehe_h 的求解

隐藏层神经元 hh 的输出为

bh=f(αhγh),其中αh=i=1dvihxi.b_h = f(\alpha_h-\gamma_h),\quad \text{其中} \quad \alpha_h = \sum_{i=1}^{d} v_{ih}x_i.

我们需要求出 eh=Ekαhe_h = \frac{\partial E_k}{\partial \alpha_h}

由于隐藏层神经元 hh对最终误差的影响是通过其对各个输出神经元的贡献实现的,所以利用链式法则:

Ekαh=bhαhj=1lEkβjβjbh.\frac{\partial E_k}{\partial \alpha_h} = \frac{\partial b_h}{\partial \alpha_h} \sum_{j=1}^{l} \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h}.

其中:

  • (同样使用 Sigmoid 函数的性质)。
  • βj=hwhjbh\beta_j = \sum_h w_{hj}b_h 所以
  • 而前面我们已经有 Ekβj=gj\frac{\partial E_k}{\partial \beta_j} = -g_j(这里符号上已经包含了方向)。

综合后,我们定义:

eh=bh(1bh)j=1lwhjgj.e_h = b_h(1-b_h)\sum_{j=1}^{l} w_{hj} g_j.

4.2 输入层到隐藏层权值 vihv_{ih} 的更新

利用梯度下降,权值更新为:

Δvih=ηEkvih.\Delta v_{ih} = -\eta \frac{\partial E_k}{\partial v_{ih}}.

注意 αh=ivihxi\alpha_h = \sum_i v_{ih} x_ivihv_{ih} 的导数为 xix_i,因此:

Ekvih=Ekαhαhvih=ehxi.\frac{\partial E_k}{\partial v_{ih}} = \frac{\partial E_k}{\partial \alpha_h} \cdot \frac{\partial \alpha_h}{\partial v_{ih}} = e_h x_i.

于是更新公式为:

Δvih=ηehxi.\Delta v_{ih} = \eta e_h x_i.

4.3 隐藏层阈值 γh\gamma_h 的更新

同样,隐藏层阈值的更新为:

Δγh=ηeh.\Delta \gamma_h = -\eta e_h.


5. BP 算法的整体流程

将以上推导整合后,BP 算法的训练过程如下:

  1. 初始化
    (0,1)(0,1) 内随机初始化所有权值和阈值。

  2. 迭代更新(对每个训练样本 (xk,yk)(x_k, y_k)):

    • 前向传播
      将输入 xkx_k 依次通过输入层、隐藏层、输出层,计算得到输出 y^k\hat{y}_k

    • 计算输出层误差及梯度
      计算输出误差 EkE_k 和每个输出神经元的梯度 gj=y^j(1y^j)(yjy^j)g_j = \hat{y}_j(1-\hat{y}_j)(y_j - \hat{y}_j)

    • 反向传播误差到隐藏层
      对每个隐藏神经元计算梯度 eh=bh(1bh)jwhjgje_h = b_h(1-b_h)\sum_{j}w_{hj}g_j

    • 更新参数
      使用上述推导得到的公式更新:

      • 隐藏层到输出层的权值:Δwhj=ηgjbh\Delta w_{hj} = \eta g_j b_h
      • 输出层阈值:Δθj=ηgj\Delta \theta_j = -\eta g_j
      • 输入层到隐藏层的权值:Δvih=ηehxi\Delta v_{ih} = \eta e_h x_i
      • 隐藏层阈值:Δγh=ηeh\Delta \gamma_h = -\eta e_h
  3. 重复迭代
    不断重复以上步骤,直至达到预设的停止条件(如误差足够低或迭代次数达到上限)。


6. 单层推导公式

  • 核心思想
    BP 算法通过前向传播计算输出误差,再利用反向传播将误差信号按层次传递回去,从而利用链式法则计算出每个参数对总误差的贡献,进而进行梯度下降更新。

  • 推导过程
    对于每一层,我们利用链式法则将梯度拆解成“局部梯度”乘以“上层梯度”,这样可以逐层计算并更新参数。

  • 关键公式

    • 输出层:

      gj=y^j(1y^j)(yjy^j),Δwhj=ηgjbh,Δθj=ηgj.g_j = \hat{y}_j(1-\hat{y}_j)(y_j - \hat{y}_j),\quad \Delta w_{hj} = \eta g_j b_h,\quad \Delta \theta_j = -\eta g_j.

    • 隐藏层:

      eh=bh(1bh)jwhjgj,Δvih=ηehxi,Δγh=ηeh.e_h = b_h(1-b_h)\sum_{j}w_{hj}g_j,\quad \Delta v_{ih} = \eta e_h x_i,\quad \Delta \gamma_h = -\eta e_h.

7.多层推导公式


通用公式推导

假设网络结构为: 输入层 → 隐藏层1 → 隐藏层2 → … → 隐藏层L → 输出层 设:

  • 层的神经元激活值为 ,激活函数为
  • 为第 层到第 层的权重矩阵。
  • 为第 层的偏置向量。
  • 为第 层的误差项。

1. 输出层(第 层)的误差项,输出层的误差由损失函数对输出的导数计算:

δ(L+1)=La(L+1)f(z(L+1)),\delta^{(L+1)} = \frac{\partial \mathcal{L}}{\partial \mathbf{a}^{(L+1)}} \odot f'\left(\mathbf{z}^{(L+1)}\right),

其中 z(L+1)=W(L+1)a(L)+b(L+1)\mathbf{z}^{(L+1)} = \mathbf{W}^{(L+1)} \mathbf{a}^{(L)} + \mathbf{b}^{(L+1)}\odot 表示逐元素相乘。

参数更新

ΔW(L+1)=ηδ(L+1)a(L)T,Δb(L+1)=ηδ(L+1).\Delta \mathbf{W}^{(L+1)} = \eta \cdot \delta^{(L+1)} \cdot \mathbf{a}^{(L)T}, \quad \Delta \mathbf{b}^{(L+1)} = -\eta \cdot \delta^{(L+1)}.


2. 隐藏层 (第 层到第 层)的误差项,对于隐藏层 ,误差项由后一层误差反向传播:

δ(l)=(W(l+1)Tδ(l+1))f(z(l)).\delta^{(l)} = \left( \mathbf{W}^{(l+1)T} \delta^{(l+1)} \right) \odot f'\left( \mathbf{z}^{(l)} \right).

其中

参数更新

ΔW(l)=ηδ(l)a(l1)T,Δb(l)=ηδ(l).\Delta \mathbf{W}^{(l)} = \eta \cdot \delta^{(l)} \cdot \mathbf{a}^{(l-1)T}, \quad \Delta \mathbf{b}^{(l)} = -\eta \cdot \delta^{(l)}.


3. 输入层到第 隐藏层的更新,输入层无参数需更新,但误差传播到第一隐藏层:

δ(1)=(W(2)Tδ(2))f(z(1)).\delta^{(1)} = \left( \mathbf{W}^{(2)T} \delta^{(2)} \right) \odot f'\left( \mathbf{z}^{(1)} \right).


公式总结

  • 误差反向传播:从输出层到输入层逐层计算误差项 ,公式为:

    δ(l)={La(L+1)f(z(L+1))输出层,(W(l+1)Tδ(l+1))f(z(l))隐藏层.\delta^{(l)} = \begin{cases} \frac{\partial \mathcal{L}}{\partial \mathbf{a}^{(L+1)}} \odot f'\left(\mathbf{z}^{(L+1)}\right) & \text{输出层}, \\ \left( \mathbf{W}^{(l+1)T} \delta^{(l+1)} \right) \odot f'\left( \mathbf{z}^{(l)} \right) & \text{隐藏层}. \end{cases}

  • 参数更新

    ΔW(l)=ηδ(l)a(l1)T,Δb(l)=ηδ(l).\Delta \mathbf{W}^{(l)} = \eta \cdot \delta^{(l)} \cdot \mathbf{a}^{(l-1)T}, \quad \Delta \mathbf{b}^{(l)} = -\eta \cdot \delta^{(l)}.


示例:三层网络(输入层→隐藏层1→隐藏层2→输出层)

  1. 输出层(第3层)

    δ(3)=(yy^)y^(1y^).\delta^{(3)} = (\mathbf{y} - \hat{\mathbf{y}}) \odot \hat{\mathbf{y}} \odot (1 - \hat{\mathbf{y}}).

  2. 隐藏层2(第2层)

    δ(2)=(W(3)Tδ(3))a(2)(1a(2)).\delta^{(2)} = \left( \mathbf{W}^{(3)T} \delta^{(3)} \right) \odot \mathbf{a}^{(2)} \odot (1 - \mathbf{a}^{(2)}).

  3. 隐藏层1(第1层)

    δ(1)=(W(2)Tδ(2))a(1)(1a(1)).\delta^{(1)} = \left( \mathbf{W}^{(2)T} \delta^{(2)} \right) \odot \mathbf{a}^{(1)} \odot (1 - \mathbf{a}^{(1)}).


关键点

  1. 误差传播:每一层的误差项 依赖于后一层的权重和误差。
  2. 激活函数导数:如使用 Sigmoid,导数为 ;ReLU 则为 0 或 1。
  3. 权重更新:始终是学习率 、当前层误差 、前一层激活值 的乘积。

8. 关键细节与注意事项

  1. 梯度下降的本质

每次迭代沿着误差曲面的负梯度方向调整参数,类似“下山找最低点”。
学习率(η):步长过大会震荡,过小收敛慢(通常设为0.1以下)。

  1. 标准BP vs 累积BP
类型 更新频率 特点 适用场景
标准BP 每个样本更新一次 更新频繁,可能振荡 大规模数据集、快速响应
累积BP 整个数据集更新一次 更稳定,但收敛慢 小数据集、精确优化
  1. 过拟合的解决方案
  • 早停(Early Stopping)
    分训练集和验证集,当验证集误差上升时停止训练(防止“死记硬背”)。
  • 正则化
    在误差函数中增加权重惩罚项,如E=λE = \lambda \cdot平均误差+(1λ)+ (1 - \lambda) \cdot权重平方和,平衡模型复杂度。

常见问题释疑

Q1:为什么需要隐藏层?

万能逼近定理:只要隐藏层神经元足够多,多层网络能逼近任意连续函数。
实践建议:隐藏层神经元数通常通过试验确定(例如输入/输出维度的中间值)。

Q2:Sigmoid函数的作用?

将神经元输出压缩到(0,1),且导数f(x)=f(x)(1f(x))f'(x) = f(x)(1 - f(x))便于梯度计算。

Q3:参数初始化为何要随机?

避免对称权重导致所有神经元学习相同内容(例如全零初始化会失去多样性)。

算法优缺点总结

优点 缺点
通用性强(可训练多层网络) 可能陷入局部最优解
可处理非线性问题 学习率选择敏感
易于实现(只需链式法则求导) 过拟合风险高(需正则化/早停)

5.4 全局最小与局部极小

1. 梯度下降与陷入局部极小

  • 梯度下降原理
    以负梯度方向作为搜索方向,每次更新参数使误差下降最快。更新公式为:

    vvηEv,v \leftarrow v - \eta \frac{\partial E}{\partial v},

    其中 是学习率。

  • 问题所在

    • 当误差函数 存在多个局部极小时,梯度在局部极小点处为零,算法就会停留在该点,不再更新参数。
    • 如果这个局部极小点不是全局最小,则最终的网络性能可能无法达到最优。

image.png


2. 跳出局部极小的常用策略

为了避免参数优化陷入局部极小,人们通常采用以下方法:

  • 多次随机初始化

    • 用不同的初始参数训练多个神经网络。
    • 选择训练误差最低的那个网络作为最终结果,从而增加找到全局最小的机会。
  • 模拟退火 (Simulated Annealing)

    • 在每一步迭代中,有一定概率接受比当前解差的参数组合。
    • 随着迭代进行,这种接受“次优解”的概率逐渐降低,帮助算法在初期跳出局部极小,在后期稳定下来。
  • 随机梯度下降 (SGD)

    • 在计算梯度时引入随机性,使得即使处于局部极小,计算出来的梯度可能不为零,从而有机会跳出局部极小继续寻找更优解。
  • 遗传算法 (Genetic Algorithms)

    • 使用种群进化的方式寻找参数组合,利用交叉、变异等操作搜索整个参数空间,以更好地逼近全局最小。

注意:以上方法大多属于启发式策略,虽然实践中常用,但理论上并不能完全保证一定能找到全局最小。


3. 总结

  • 局部极小:在一个小范围内是最低误差,但可能不是整个参数空间中的最低值。
  • 全局最小:整个参数空间中误差最低的点,也是最终期望找到的最佳解。
  • 梯度下降法:常用但易陷入局部极小;为避免这一问题,常用随机初始化、模拟退火、随机梯度下降和遗传算法等方法来增加找到全局最小的可能性。

5.5 其他常见神经网络

神经网络不仅仅只有我们常用的BP(误差反向传播)前馈网络,还有许多其他类型,它们在结构、激活方式和学习机制上各有不同。常见的几种有:

1. RBF 网络(径向基函数网络)

  • 基本结构
    • 只有单隐层,由输入层、单隐层和输出层组成。
  • 激活函数
    • 隐层神经元采用径向基函数(例如高斯函数):

      ρ(x,ci)=eβixci2\rho(x, c_i) = e^{-\beta_i \|x - c_i\|^2}

  • 工作原理
    • 每个隐层神经元都有一个“中心”
    • 网络的输出是所有隐层输出的加权线性组合:

      φ(x)=i=1qwiρ(x,ci)\varphi(x) = \sum_{i=1}^{q} w_i \rho(x, c_i)

  • 训练方法
    • 第一步确定各隐层神经元的中心(例如采用聚类或随机选取)。
    • 第二步使用BP等方法训练权重 (和可能的参数 )。

2. ART 网络(自适应谐振理论网络)

  • 核心机制
    • 采用竞争型学习,也称为“胜者通吃”,即每次只有一个神经元被激活。
  • 结构组成
    • 包含比较层(接收输入)、识别层(进行竞争输出)、识别阈值和重置模块。
  • 工作流程
    • 输入信号经过比较层后传递给识别层,各识别层神经元计算与自身“代表向量”的距离;
    • 距离最小者获胜,若该距离低于设定的阈值,则输入归为该类别,同时更新对应的权值;
    • 若距离不够小,则重置模块在识别层中新建神经元,将当前输入作为新的代表向量。
  • 特点
    • 良好的可塑性(学习新知识)和稳定性(保留旧知识),适合增量学习在线学习

3. SOM 网络(自组织映射网络)

  • 基本概念
    • 一种无监督的竞争学习网络,用于将高维数据映射到低维(通常二维)空间。
  • 结构特点
    • 输出层神经元通常以二维矩阵形式排列,每个神经元有一个权向量。
  • 训练过程
    • 当输入一个样本时,每个输出神经元计算与样本的距离,距离最小的神经元为“最佳匹配单元”;
    • 除了最佳匹配单元,其邻近神经元的权向量也会被更新,使得相近的神经元能代表相似的数据;
    • 经过多次迭代后,高维数据的拓扑结构在二维映射上得到保留。

image.png


4. 级联相关网络(Cascade-Correlation)

  • 基本思想
    • 网络结构不是预先固定的,而是在训练过程中逐步增加隐藏神经元来构建层次结构。
  • 主要特点
    • 级联:从最小结构(只有输入和输出层)开始,逐步添加新的隐藏神经元,形成层次连接;
    • 相关:新添加的神经元通过最大化其输出与网络剩余误差之间的相关性来确定其权重。
  • 优点与缺点
    • 优点:不需要预先确定隐藏层数目和每层神经元数量,训练速度较快;
    • 缺点:在数据较少时容易过拟合。

image.png


5. Elman 网络

  • 网络类型
    • 属于递归神经网络(RNN),即存在反馈连接。
  • 结构特点
    • 类似于前馈网络,但在隐层与输出层之间有一个额外的“连接层”或“上下文层”;
    • 隐层的输出不仅传递到下一层,还反馈到自身,影响下一时刻的计算。
  • 应用
    • 适合处理具有时序特性的任务,如时间序列预测、自然语言处理等。

image.png


6. Boltzmann 机

  • 基本原理
    • 基于能量模型,网络的状态由一个能量函数描述,目标是使能量最低。
  • 结构构成
    • 通常包括两层:显层(用于输入和输出数据)和隐层(捕捉数据的内在结构),神经元通常是二值(0或1)。
  • 受限 Boltzmann 机(RBM)
    • 为了降低训练复杂度,受限Boltzmann机仅保留显层与隐层之间的连接(不连接同层神经元),形成二部图结构。
  • 训练方法
    • 常用“对比散度”(Contrastive Divergence,CD)算法来近似训练。

image.png


7. 小结

  • RBF网络:利用径向基函数映射,适合函数逼近和分类。
  • ART网络:通过竞争学习实现在线与增量学习,兼顾新旧知识。
  • SOM网络:将高维数据映射到低维平面,同时保持数据的拓扑结构。
  • 级联相关网络:动态构建网络结构,通过增量添加隐藏神经元来逼近全局最优。
  • Elman网络:在前馈网络基础上增加反馈机制,适用于时序问题。
  • Boltzmann机:通过能量最小化进行学习,受限Boltzmann机是其简化版本,常用于无监督学习与特征提取。

5.6 深度学习


1. 深度学习概述

  • 理论基础

    • 模型的参数越多,网络的复杂度和“容量”(capacity)越大,意味着它有能力完成更复杂的任务。
  • 现实挑战

    • 复杂模型往往训练效率低,而且容易过拟合(即在训练集上表现很好,但在新数据上表现差)。
  • 环境改善

    • 随着云计算和大数据时代的到来:
      • 计算能力大幅提高,可加速复杂模型的训练;
      • 大量训练数据有助于降低过拟合风险。

2. 深度学习的典型模型

1. 深层神经网络

  • 增加隐层数目

    • 提升模型容量最直接的方法是增加隐层的层数,而不仅仅是增加每层的神经元数量。
    • 增加层数能让激活函数嵌套,提取更高层次、更抽象的特征。
  • 训练难点

    • 多层网络的训练难度较大:传统的BP(反向传播)算法在深层网络中容易出现误差传递“发散”,使得网络难以收敛。

3.深层网络的训练策略

1. 无监督逐层训练(预训练 + 微调)

  • 基本思想

    • 将大量参数分为多个“组”,先对每一层进行单独训练,再将各层组合起来进行整体训练。
  • 步骤

    1. 预训练(Pre-training)
      • 从输入层开始,每次训练一层隐层。
      • 训练时,把上一层输出作为当前层输入。
      • 例如,在**深度信念网络(DBN)**中,每层都是一个受限Boltzmann机(RBM)。
    2. 微调(Fine-tuning)
      • 各层预训练完成后,再利用BP算法对整个网络进行全局优化。
  • 优点

    • 能较好地利用局部“较优”参数配置,进而联合搜索全局最优解,同时降低整体训练的开销。

2. 权共享

  • 基本思想

    • 让一组神经元使用相同的连接权,即同一层内某些神经元共享参数。
  • 应用实例:卷积神经网络(CNN)

    • CNN在处理图像任务时非常成功。
    • 工作流程
      • 卷积层:通过多个卷积滤波器提取局部特征,每个滤波器产生一个特征映射(平面)。
      • 采样/池化层:利用局部相关性对特征图进行降采样,减少数据量同时保留重要信息。
    • 优势
      • 由于参数共享,显著减少需要训练的参数数量,使得网络更容易训练。

image.png


4. 表示学习(Feature / Representation Learning)

  • 传统方法
    • 以往,特征需要由人类专家设计(称为特征工程),这通常既费时又依赖经验。
  • 深度学习优势
    • 通过多层结构,网络可以自动从原始数据中提取并转化出适合任务的“高层”特征表示。
    • 换句话说,深度学习实现了特征学习表示学习,使得原本复杂的任务可以由较简单的后续模型完成。

5. 总结

  • 深度学习利用深层网络结构提高了模型的容量,从而能够处理更复杂的任务。
  • 由于多层网络训练难度大,常用无监督逐层预训练+微调权共享(如CNN)等策略来降低训练难度和防止过拟合。
  • 这种方法的本质是将初始的、与任务目标联系较弱的输入表示,逐步转化为与任务更密切的高层特征,从而实现自动特征学习,减少对专家设计特征的依赖。