从零开始学AI——5

109 阅读4分钟

前言

到神经网络了,后面两小章看的有些水,有点疲惫

第五章

本节学习神经网络

5.1 神经元和感知机

神经网络是生物神经系统的抽象,由神经元作为基本单位组成。神经元可以接受、处理、输出信息,每一个神经元具有以下特征:

  1. 接受输入:类比生物神经元可以接受信号,神经元也可以接受其他神经元的数值形式的输入。
  2. 输入权重:每一个输入都会被赋予一个权重总输入是这些输入的加权求和
  3. 激活函数:总输入会与一个阈值 θ\theta 比较,若超过阈值,神经元被激发,此时总输入作为自变量传入激活函数,输出结果传递到下一神经元。激活函数的引入是为了引入非线性,否则神经网络只能表达线性模型,能力有限。

更形式化地,输入层每一个神经元都代表着一个属性,用 xix_{i} 表示第 ii 个神经元的输入,wiw_{i} 表示第 ii 个输入的权重,ff 表示激活函数,θ\theta 为阈值,则神经元输出为:

y=f(i=1Nwixiθ)\text{y} = f\left( \sum_{i=1}^{N} w_{i}x_{i} - \theta \right)

可以见得阈值通过对激活函数的输入的控制决定输出的内容,一个朴素的激活函数是阶跃函数

f(x)={1if x0,0if x<0.f(x) = \begin{cases} 1 & \text{if } x \geq 0, \\ 0 & \text{if } x < 0. \end{cases}

但阶跃函数不连续性质不好,因此更常用光滑的激活函数,如 Sigmoid

f(x)=11+exf(x) = \frac{1}{1 + e^{-x}}

其值域为 [0,1][0,1],能将任意实数压缩到该区间(故称挤压函数),且满足 f(0)=0.5f(0)=0.5以及f(x)=f(x)(1f(x))f'(x)=f(x)(1-f(x))这个导数结论会在下一节用到)。

若将神经元按输入层/输出层组织为层层连接结构,则构成神经网络——本质上是一个由权重参数阈值参数构成的训练模型。我们先考察单个输出神经元连接一个或多个输入神经元的情况,这种结构称为感知机(Perceptron),如图所示:

graph LR
    A[输入神经元x1] -- w1 --> C[神经元]
    B[输入神经元x2] -- w2 --> C
    C --> D[输出 y]
    style A fill:#f9f,stroke:#333
    style B fill:#f9f,stroke:#333
    style C fill:#bbf,stroke:#333
    style D fill:#9f9,stroke:#333

此时模型输出即神经元的输出,表达式为: y=f(i=1Nwixiθ)y = f\left( \sum_{i=1}^{N} w_{i}x_{i} -\theta \right) 可以见得

  1. 感知机单层功能神经网络(输入层仅传递数据,不计入层数)。
  2. 其决策边界为超平面 iwixiθ=0\sum_{i} w_i x_i - \theta = 0,本质是线性分类器
    • 仅能将数据分为超平面两侧的两类,适用于线性可分问题
    • 收敛性:因决策边界为超平面,若数据线性可分,则算法必收敛。
  3. 逻辑分类能力:
    • 可实现等线性可分逻辑(如通过调整权重 wiw_i 和阈值 θ\theta)。
    • 无法实现异或:因异或需两个超平面(线性不可分问题),单层感知机无法解决。

不要混淆激活函数的分线性和模型分类决策的线性关系 激活函数 y()y(\cdot)非线性仅影响神经元输入-输出映射 模型分类能力仍由线性决策边界决定

现在我们来看如何学习一个感知机学习目的是确定两个参数:权重阈值

依旧是通过向量化技巧简化计算:

  • 将权重和阈值合并为增广向量 w=(w1,w2,...,wn,θ)T\mathbf{w} = (w_1, w_2, ..., w_n, -\theta)^T
  • 输入样本扩展为 x=(x1,x2,...,xn,1)T\mathbf{x} = (x_1, x_2, ..., x_n, 1)^T
    此时我们需要确定的参数就是这个权重向量了。对于训练样例 (x,y)(\mathbf{x}, y)输出预测值通过激活函数 ff 计算:
y^=f(wTx)\hat{\mathbf{y}} = f(\mathbf{w}^T \mathbf{x})

比较预测值和真实值,如果分量不一致(当 y^iyi\hat{y}_{i} \neq y_{i} 时),修改对应分量权重:

wiwi+η(yy^)xiw_i \leftarrow w_i + \eta (y - \hat{y}) x_i

其中:

  • η\eta学习率(一般设为0.10.1等较小值),控制更新步长
  • 更新仅发生在误分类时(错误驱动学习

终止条件:

  1. 所有样本被正确分类
  2. 达到预设的最大迭代次数

正如我们上文所述,感知机的功能只能应用在线性可分问题上,如果需要处理线性不可分问题,我们需要添加更多层的功能神经元。这种情况下神经网络分为:

  • 输入层:最开始输入样本的神经元层(不参与信息处理
  • 输出层:最终输出结果的神经元层
  • 隐含层(隐藏层):输入层和输出层之间的神经元层

这种包含隐含层的神经网络,我们通常称为多层神经网络(Multilayer Neural Network)。其层数定义规则为:对于nn层神经网络,nn仅统计隐含层和输出层的数量(因输入层无计算功能)。例如感知机实际是11层神经网络(仅含输出层)。

当神经网络满足:

  1. 全连接:每层神经元与下一层神经元完全连接
  2. 无循环:不存在同层连接或跨层连接 这种结构称为多层前馈神经网络(Multi-layer Feedforward Neural Network)。

5.2 误差逆传播算法

在多层神经网络中,使用感知机的简单算法进行训练是不足的,我们需要一个更强大的算法——误差逆传播算法(又称反向传播算法,简称BP)。该算法不仅适用于多层前馈神经网络,还可用于其他类型的神经网络(例如递归网络的训练)。但需注意,当我们提到BP网络时,通常特指用BP算法训练的多层前馈神经网络

其核心思想可归纳为以下关键步骤:

  1. 前向传播过程中,神经网络每一层的输出仅依赖于上一层输入,误差会随传播路径逐层累积
  2. 最终输出层产生预测值,与真实标签yy计算误差函数值
  3. 反向传播阶段计算每个参数贡献的误差
  4. 根据误差贡献调整参数,实现误差最小化

从形式角度看:

  • 误差δ(W,b)\delta(\mathbf{W}, \mathbf{b})仅是所有权重和阈值的函数(最先输入数据不会造成误差,所以不会被显示依赖)
  • 误差对参数的偏导数给出了该参数的误差的贡献,而对所有参数求偏导的过程就是求梯度
  • 反向传播实质是高效计算梯度的算法,将误差重新分配到隐藏层中

现在我们就来学习具体的BP算法(和书上差异较大,可以选择喜欢的方法看) 首先先定义神经网络结构:

  • 假设有LL层神经网络,定义 (nl×nl1)(n_{l}\times n_{l-1})维权重矩阵 WlW^{l}(nl×1)(n_{l}\times 1)维阈值向量 Θl\Theta^{l},其中:
  • 0lL0\leq l \leq L 表示层数(输入层为第00层)
  • WijlW^{l}_{ij}表示连接第l1l-1层第jj个神经元和第ll层第ii个神经元的权重,也就是说所有样本都会被同一个权重参数影响。
  • nln_{l} 为第ll层神经元个数
  • mm为样本数量
  • 激活函数选择 sigmoid函数 σ(x)=11+ex\sigma(x) = \frac{1}{1+e^{-x}} 考虑前向传播阶段(1lL1 \leq l \leq L)有:
Zl=WlAl1Θl1mT=WlAl1+Bl1mTAl=σ(Zl)\begin{align} Z^{l} &= W^{l}A^{l-1} - \Theta^{l}\mathbb{1}_{m}^{T} =W^{l}A^{l-1} + B^{l}\mathbb{1}_{m}^{T} \\ A^{l} &=\sigma(Z^{l}) \end{align}

其中

  • ZlZ^{l}:第ll层的线性变换结果,每一列代表一个样本在第ll层的线性输入向量。
  • Bl:=ΘlB^{l} := -\Theta^{l}偏置向量(与阈值Θl\Theta^{l}为相反数关系)
  • 1mT\mathbb{1}_{m}^{T}是分量全为11的横向量,这样Bl1mTB^{l}\mathbb{1}_{m}^{T}就是所有样本都是相同偏置的矩阵了
  • AlA^{l}:第ll层的输出矩阵,维度(nl×m)(n_{l} \times m),每一列代表一个样本在第ll层的激活输出向量
    • 特别的:
      • A0=XA^{0} = X 为输入样本矩阵,维度(n0×m)(n_{0} \times m),其中 n0=dn_{0}=d 是属性维度,基本上其他层nldn_{l}\neq d
      • ALA^{L} 为输出层结果,维度(nL×m)(n_{L} \times m)

偏置项BB的引入 查资料的时候发现比起阈值,偏置项似乎更常见,他们的关系就是相反数的关系。这种表示法在梯度推导时更直观。

前向传播结束就会得到我们的预测值,我们需要计算误差,这里我们选择简单的均方误差那么有:

MSE=12mj=1mi=1nL(YijAijL)2MSE = \frac{1}{2m}\sum_{j=1}^{m} \sum_{i=1}^{n_{L}} (Y_{ij} - A^{L}_{ij})^{2}

其中AijLA^{L}_{ij}LL层输出结果——预测矩阵的第jj个样本的第ii的预测值,22是为了后面计算方便的常数。有了误差值之后,我们就可以反向传播该误差了。

我们的目标是计算出MSE对权重分量 WijlW^{l}_{ij} 的偏导数的值,即 MSEWijlWijl\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}}该偏导数的绝对值反映了误差沿该权重变化的快慢程度。我们先介绍如何利用该偏导数的值更新权重以使误差减小,即梯度下降法

考虑权重WijlW^{l}_{ij}处的偏导数MSEWijl\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}的取值:

  1. MSEWijlWijl>0\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}}>0增加WijlW^{l}_{ij}会导致误差上升,因此应减小WijlW^{l}_{ij}的值
  2. MSEWijlWijl<0\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}}<0增加WijlW^{l}_{ij}会降低误差,因此应增大WijlW^{l}_{ij}的值

基于此,权重的更新公式为:

WijlWijlηMSEWijlWijlW^{l}_{ij} \leftarrow W^{l}_{ij} - \eta \left.\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}\right|_{W^{l}_{ij}}

其中,η\eta为学习率(取值较小的正实数),控制更新步长与感知机的权重更新原理一致,对于偏置也有类似的更新方式。

对梯度下降法的补充 一元函数导数的类比:若函数f(x)f(x)xx处的导数f(x)>0f'(x)>0增大xx会升高函数值;反之,若f(x)<0f'(x)<0增大xx会降低函数值,梯度下降法的思想就是这个。 梯度下降法仅通过调整参数改变取值,而不会直接修改误差曲面本身(即MSE\text{MSE}的几何形状保持不变)。

知道如何更新权重后,我们来看如何求偏导数,我们将分为33步走。我们首先分析输出层LL的情形(权重涉及L1L-1层的情况暂不讨论),此时均方误差由MSE=MSE(Z00L,Z01L,,ZnLmL)MSE = MSE(Z^{L}_{00}, Z^{L}_{01}, \dots, Z^{L}_{n_{L}m})给出。其偏导数为:

MSEZijL=MSEAijLAijLZijL=MSEAijLσ(ZijL)\frac{ \partial MSE }{ \partial Z^{L}_{ij} } = \frac{ \partial MSE }{ \partial A^{L}_{ij} } \cdot \frac{ \partial A^{L}_{ij} }{ \partial Z^{L}_{ij} } = \frac{ \partial MSE }{ \partial A^{L}_{ij} } \cdot \sigma'(Z^{L}_{ij})

第二项就是激活函数sigmoid的导数(具体形式在感知机一节中提到过),因此我们只需要计算第一项:

MSEAijL=12mAijL[q=1mp=1nL(ApqLYpq)2]=12mAijL(AijLYij)2=1m(AijLYij)\begin{align} \frac{ \partial MSE }{ \partial A^{L}_{ij} } &=\frac{1}{2m} \frac{ \partial }{ \partial A^{L}_{ij} }\left[ \sum_{q=1}^{m} \sum_{p=1}^{n_{L}} (A^{L}_{pq}-Y_{pq})^{2} \right] \\ &= \frac{1}{2m}\frac{ \partial }{ \partial A^{L}_{ij} } (A^{L}_{ij}-Y_{ij})^{2} \\ &= \frac{1}{m}(A^{L}_{ij}-Y_{ij}) \end{align}

因此有MSEZijL=1m(AijLYij)σ(ZijL):=δijL\frac{ \partial MSE }{ \partial Z^{L}_{ij} }=\frac{1}{m}(A^{L}_{ij}-Y_{ij})\sigma'(Z^{L}_{ij}):=\delta^{L}_{ij},定义为误差信号矩阵元δijL\delta^{L}_{ij} ,将其矩阵化并且把系数1m\frac{1}{m}吸收进梯度下降时的学习率η\eta中有

δL=(ALY)σ(ZL)\delta^{L} = (A^{L}-Y) \odot\sigma'(Z^{L})

其中\odot表示两矩阵对应位置矩阵元直接乘积,LL层误差信号矩阵的维度是(nL×m)(n_{L}\times m)

接下来我们考虑隐藏层ll层的误差信号矩阵δl\delta^{l},这里我们用递推的思想,假设我们已经知道δl+1:=MSEZl+1\delta^{l+1}:=\frac{ \partial MSE }{ \partial Z^{l+1} },那么对ll层的误差信号矩阵元有

δijl=MSEZijl=MSEAijlAijlZijl\delta^{l}_{ij}=\frac{ \partial MSE }{ \partial Z^{l}_{ij} } =\frac{ \partial MSE }{ \partial A^{l}_{ij} } \cdot \frac{ \partial A^{l}_{ij} }{ \partial Z^{l}_{ij} }

第二项我们已经知道是σ(Zijl)\sigma'(Z^{l}_{ij}),那么重点还是第一项,但是和LL层不同的是这里没有MSEMSEAijlA^{l}_{ij}的直接关系式,但根据假设我们已知δijl+1=MSEZijl+1\delta^{l+1}_{ij}=\frac{ \partial MSE }{ \partial Z^{l+1}_{ij} },所以将其引入进来,并且要注意l+1l+1层的所有神经元的输入向量Z()jl+1Z^{l+1}_{()j}都和ll层的激活输出向量A()jlA^{l}_{()j}有关,因此写成偏导数为

MSEAijl=p=1nl+1MSEZpjl+1Zpjl+1Aijl=p=1nl+1δpjl+1Zpjl+1Aijl\frac{ \partial MSE }{ \partial A^{l}_{ij} } = \sum_{p=1}^{n_{l+1}}\frac{ \partial MSE }{ \partial Z^{l+1}_{pj} } \cdot \frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} } = \sum_{p=1}^{n_{l+1}} \delta^{l+1}_{pj} \cdot \frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} }

根据向前传播中Zl+1Z^{l+1}AlA^{l}的关系,我们有

Zpjl+1Aijl=Aijl[q=1nlWpql+1Aqjl+Bpl+1]=Wpil+1\frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} } = \frac{ \partial }{ \partial A^{l}_{ij} } \left[ \sum_{q=1}^{n_{l}}W^{l+1}_{pq}A^{l}_{qj} +B^{l+1}_{p} \right] = W^{l+1}_{pi}

于是

δijl=(p=1nl+1δpjl+1Wpil+1)σ(Zijl)\delta^{l}_{ij}=\left(\sum_{p=1}^{n_{l+1}} \delta^{l+1}_{pj}W^{l+1}_{pi}\right) \sigma'(Z^{l}_{ij})

我们就得到了ll层误差信号矩阵元,其矩阵形式为(注意到乘积第一项是δl+1\delta^{l+1}(Wl+1)T(W^{l+1})^{T}的矩阵乘法分量表示形式)

δl=((Wl+1)Tδl+1)σ(Zl)\delta^{l} = ((W^{l+1})^{T}\delta^{l+1})\odot\sigma'(Z^{l})

最后我们再来看权重梯度的计算 我们的目标是求得MSEWijl\frac{ \partial MSE }{ \partial W^{l}_{ij} }误差函数对任一ll层的权重的偏导数,考虑到该偏导数会影响到所有经过该神经元(ll层第ii个神经元)的样本,所以Zipl,p=1,2,3,,mZ^{l}_{ip},p=1,2,3,\dots,m都依赖于该权重参数WijlW^{l}_{ij}

MSEWijl=p=1mMSEZiplZiplWijl\frac{ \partial MSE }{ \partial W^{l}_{ij} } = \sum_{p=1}^{m} \frac{ \partial MSE }{ \partial Z^{l}_{ip} } \cdot \frac{ \partial Z^{l}_{ip} }{ \partial W^{l}_{ij} }

第一项正是δipl\delta^{l}_{ip}现在需要计算第二项,和之前一样考虑向前传播中ZlZ^{l}l^{l}的关系,有

ZiplWijl=Wijl[q=1nl1WiqlAqpl1+Bil]=Ajpl1\frac{ \partial Z^{l}_{ip} }{ \partial W^{l}_{ij} } = \frac{ \partial }{ \partial W^{l}_{ij} } \left[ \sum_{q=1}^{n_{l-1}} W^{l}_{iq}A^{l-1}_{qp}+B^{l}_{i} \right]=A^{l-1}_{jp}

所以

MSEWijl=p=1mδiplAjpl1\frac{ \partial MSE }{ \partial W^{l}_{ij} } =\sum_{p=1}^{m} \delta^{l}_{ip}A^{l-1}_{jp}

这一项正好是矩阵(Al1)T(A^{l-1})^{T}δl\delta^{l}乘法的矩阵元表示,所以最终有

MSEWl=δl(Al1)T\frac{ \partial MSE }{ \partial W^{l} } = \delta^{l}(A^{l-1})^{T}
  • 其中δl\delta^{l}(nl×m)(n_{l}\times m)维,而Al1A^{l-1}(nl1×m)(n_{l-1}\times m)维,梯度矩阵是(nl×nl1)(n_{l}\times n_{l-1})矩阵
  • 不要忘记样本数1m\frac{1}{m}已经被吸收进学习率η\eta中了
  • 类似的,我们也可以求得MSEBl=δl1m\frac{ \partial MSE }{ \partial B^{l} }=\delta^{l}\mathbb{1}_{m}

那么我们整个流程也就很清晰了:

  1. 初始化:随机初始化矩阵WlW^{l}BlB^{l}
  2. 重复以下步骤直到满足停止条件
    1. 向前传播:计算所有的Zl,AlZ^{l},A^{l}
    2. 计算误差:使用均方误差函数 MSEMSE
    3. 反向传播:计算误差信号δl\delta^{l}
    4. 计算梯度,依照梯度下降法更新参数值
  3. 停止条件一般是达到最大迭代次数或误差足够小

书上称这种算法为累积BP算法,如果只针对一个样例的时候m=1m=1,称为标准BP算法,我们最后看看这种特例:

  • m=1m=1时,除了权重矩阵WlW^{l}和偏置向量BlB^{l}其他的矩阵都变为向量
  • 简单带入此时WlWlηδl(al1)TW^{l} \leftarrow W^{l}-\eta\delta^{l}(a^{l-1})^{T}
  • 和书上可以对应上gjδl,bhal1g_{j}\rightarrow \delta^{l},b_{h}\rightarrow a^{l-1}

以下是优化后的表述,已对重点内容进行标记并补充了缺失部分:

一般来说,先通过累积BP算法(即在整个训练集上计算误差后统一更新权重)使模型误差下降到一定程度后,当发现收敛速度明显降低时,转为使用标准BP算法(每个样本单独更新权重)往往能获得更优解。

虽然BP神经网络具有强大的拟合能力,但容易遭遇过拟合问题。常用的缓解方法包括:

  1. 早停(Early Stopping)
    • 在每次参数更新后,用验证集估计模型性能
    • 当验证误差上升时立即终止训练
  2. 正则化(Regularization):在误差函数中增加一个用于描述网络复杂度的部分,将误差和复杂度进行折中

最后关于隐层神经元个数的选取仍然是个未解决的问题,实践中一般采用试错法。

5.3 全局最小和局部极小

由数学知识可知,单纯使用梯度下降法(Gradient Descent)得到的驻点可能只是局部极小值而非全局最优解。为缓解此问题,常用以下方法增强搜索能力:

  1. 多初始点策略
    多次随机初始化参数,通过反向传播(BP)分别计算误差,最终选择所有结果中误差最小的参数组合。本质是通过增加搜索起点数量,提升找到全局最小值的概率。

  2. 模拟退火(Simulated Annealing)
    在迭代过程中以概率 pp 接受比当前解更差的结果,其中接受概率 pp 随温度参数 TT 衰减,通常按 p=eΔE/Tp = e^{-\Delta E/T} 计算。通过阶段性允许“上山”行为逃离局部极小值,同时保证算法最终收敛。

  3. 随机梯度下降(SGD)
    在计算梯度时引入随机性(如mini-batch采样),使得即使到达局部极小值,由于梯度估计噪声存在,f(x)0\nabla f(x) \neq 0 仍可能继续搜索。噪声机制提供逃离局部极小的可能性

  4. 遗传算法(Genetic Algorithm)
    通过种群进化机制(选择、交叉、变异)在参数空间进行全局探索,适合高维非凸优化问题

这些方法的共同特点是:

  • 增加找到全局最小值的概率(通过扩大搜索范围或引入随机性)
  • 可能牺牲部分收敛速度(如模拟退火的退火过程需要精细调参)
  • 无法严格保证获得全局最优解,但在实际工程中往往能显著改善模型性能

5.4 其他神经网络

5.4.1 RBF网络

重点径向基函数网络是一种两层前馈网络,通过径向基函数实现输入到隐层的映射。其核心公式为隐藏层神经元的激活函数:

φ(x)=i=1qwiρ(x,ci)\varphi(\mathbf{x}) = \sum_{i=1}^{q}w_{i}\rho(\mathbf{x},\mathbf{c}_{i})

特点

  • 首先确定基函数中心ci\mathbf{c}_{i}
  • ρ\rho是径向基函数,要求径向对称(只显示依赖于径向距离)
    • 一般采用高斯径向基函数eβixci2e^{-\beta_{i}||\mathbf{x}-\mathbf{c}_{i}||^{2}}
  • 输出层为线性组合,适合函数逼近任务
  • 然后用BP算法等确定参数 wi,βiw_{i},\beta_{i}
5.4.2 ART网络

自适应共振理论 (Adaptive Resonance Theory, ART) 网络是一种基于无监督学习的神经网络模型。它通过模拟生物大脑的稳定性-可塑性平衡,解决了机器学习中“学习新信息时遗忘旧知识”的核心矛盾。 其核心机制包含两个关键阶段:

  1. 共振机制 (Resonance)
    • 输入模式与所有已存储的类别原型进行相似度比较(选择阶段
    • 用预设的警惕参数 ρ\rho(Vigilance Parameter)进行最佳匹配类别。
  2. 匹配度检测 (Match Tracking)
    • 匹配成功:更新原型权重
    • 匹配失败:抑制当前类别并重新选择,若无合适类别则动态扩展网络结构创建新类别
      • 这种抑制其他类别,同一时刻只有一个神经元胜出的策略被称为竞争型学习,是无监督学习常用的策略

目前已经成为算法族,主要变体家族:

  • 基础型:ART1(二进制输入)、ART2(连续值输入)
  • 扩展型模糊ART(Fuzzy ART,支持混合数据) ARTMAP(监督学习版本,含反馈机制)
5.4.3 SOM网络

SOM(自组织映射) 是一种无监督神经网络,其核心功能是将高维数据映射到低维网格(通常是二维)上,同时保持数据的拓扑结构

核心原理

  1. 竞争机制:输入数据会激活网络中最相似的神经元(称为最佳匹配单元(BMU)),通过距离度量(如欧氏距离)确定。
  2. 权重调整:不仅调整 BMU 的权重,其网格空间中的邻近神经元也会根据输入数据更新权重
  3. 动态衰减:随着训练进行,邻域范围学习率逐渐减小,最终形成有序的映射结构,反映数据的内在分布。
5.4.4 级联相关网络

级联相关网络是一种监督学习算法,其核心特征是在训练过程中动态扩展网络结构,通过逐个添加隐藏单元来优化性能。

原理:

  1. 初始结构:网络从最小架构开始(仅包含输入层输出层)。
  2. 误差评估:若当前网络的输出误差未达目标,则触发候选单元生成
  3. 候选单元训练
    • 新隐藏单元作为候选加入,其训练目标为最大化输出与网络残差的相关性
  4. 单元固化:选择相关性最高的候选单元永久加入网络,并冻结其输入权重
  5. 输出层调参:重新训练所有输出层连接权重(使用反向传播等算法)。
  6. 终止条件:重复步骤2-5,直至达到预设的误差阈值最大单元数
    优势
  • 结构自适应性:无需预设隐藏层规模。
  • 训练效率:固定权重的单元减少后续计算量。
    但是数据量小的时候容易过拟合
5.4.5 Elman网络

Elman网络是一种早期的、结构相对简单的循环神经网络(RNN),它的核心机制是通过一个显式的上下文层来实现时间上的信息传递和记忆。

工作原理

  1. 在每个时间步,网络的隐层不仅接收当前的外部输入
  2. 同时,它还会接收来自上下文层的输入。
  3. 这个上下文层的作用很简单:它完整地复制并保存了上一个时间步隐层的激活值(状态)
  4. 因此,当前隐层的计算是基于当前输入上一时刻的隐层状态共同决定的,这就形成了时间上的递归

关键特点

  • 简单反馈回路:通过上下文层实现了隐层状态向下一步的直接反馈。
  • 动态记忆:这种反馈机制使网络能够拥有一定的“记忆”能力,处理与时间顺序相关的信息。
  • 短期记忆局限:由于上下文层只存储紧邻前一时间步的状态,对于需要回顾更早信息的长期依赖问题,Elman网络的表现通常不佳。

主要应用: 因其结构简单和短期记忆特性,常用于:

  • 处理具有较短时间依赖的时间序列数据(例如简单的信号预测)。
  • 作为早期研究中进行小规模序列建模的基础(如初期的语音识别或简单文本生成任务)。
5.4.6 Boltzmann机

Boltzmann机是一种基于能量函数概率统计的随机神经网络,其核心特性是网络中的单元状态通过概率性决策确定。

-原理:

  • 网络通过定义全局能量函数 E(s)=i<jwijsisjE(\mathbf{s}) = -\sum_{i<j} w_{ij} s_i s_j(其中 wijw_{ij} 为连接权重,sis_i 为单元状态)来描述系统状态。
  • 能量最小化驱动:单元状态按概率 P(si=1)=11+eΔEi/TP(s_i=1) = \frac{1}{1+e^{-\Delta E_i/T}} 更新(ΔEi\Delta E_i 为状态变化能量差,TT 为温度参数),通过模拟退火等随机过程逐步收敛到低能量状态。
  • 学习目标:调整权重 wijw_{ij},使网络在热平衡时的状态分布 P(s)P(\mathbf{s}) 逼近训练数据的真实概率分布,通常通过对比散度(Contrastive Divergence)等算法实现。

本节不是重点,所以我也只是囫囵吞枣地看了一遍,只有玻尔兹曼让我有点熟悉

5.5 深度学习

深度学习是机器学习的一个分支,其核心在于使用包含多个处理层(即“深度”结构)的模型,通过自动学习数据从低级到高级的层次化特征表示来解决问题。与传统机器学习相比,深度学习具有两大优势:

  1. 减少人工特征工程:传统方法依赖领域知识手动设计特征,耗时且性能受限;
  2. 更强的表征能力:浅层模型只能捕捉简单特征,而深层模型可表达复杂非线性关系。

早期深度网络面临梯度消失/爆炸问题,导致误差在多隐层反向传播时难以收敛。突破性解决方案包括: 1. 逐层预训练 (Layer-wise Pre-training)

  • 无监督初始化:逐层训练(如用RBM)获得输入数据的有效表示,初始化权重
  • 监督微调 (Fine-tuning):用有标签数据和反向传播(BP)联合优化整个网络
    本质是通过分组参数优化(预训练+微调)解决问题。典型实现如深度信念网络 (DBN),由多层受限玻尔兹曼机 (RBM)堆叠后BP微调。

2. 权共享 (Weight Sharing)
通过让一组神经元共享连接权重显著减少参数量,这一策略在卷积神经网络 (CNN)中成为处理网格结构数据(如图像)的关键。

深度学习在我的学习计划之内,所以这一章节我仅仅看个大概 本文由博客一文多发平台 OpenWrite 发布!