第九讲 · 人工神经网络基础

Views: --

线性判别器只有一个超平面,异或(XOR)这样简单的模式就已经无法分开。人工神经网络的关键跨越不是“把一个神经元做得更聪明”,而是:让许多简单单元通过带权连接组成多层非线性系统,再从数据中共同调整这些连接。

本讲先建立人工神经元与前馈网络,再解释误差如何通过反向传播分配给每一条连接,最后讨论表达能力、过拟合与径向基函数网络。

一、神经网络从哪里来

人工智能常被概括为符号主义、联结主义与进化 / 行为主义等路线。人工神经网络属于联结主义:智能不被写成一套显式逻辑规则,而是分布在大量处理单元及其连接中。

课件中的关键时间点是:

时间事件解决或暴露的问题
1943McCulloch 与 Pitts 提出阈值加权和模型把神经元抽象为可计算模型
1949Hebb 提出连接可随共同活动改变给出“学习就是改连接”的思想
20 世纪 50 年代Rosenblatt 等推动单层感知机让线性分类器能够从样本自学习
1969Minsky 与 Papert 系统讨论感知机局限单层感知机不能表达 XOR,引发研究低潮
1982–1984Hopfield 网络及其能量函数把神经网络与动力系统、联想记忆联系起来
1985Boltzmann 机引入随机机制发展随机神经网络学习
1986多层网络的 BP 算法重新受到重视解决多层连接权重怎样训练的问题

这段历史的主线很清楚:单个线性单元能力有限,多层网络可以表达非线性;但只有找到高效的多层学习算法,这种表达能力才真正可用。

Hopfield 网络还把网络状态与一个逐步下降的能量函数联系起来,并被用于旅行商问题等组合优化的近似求解;Boltzmann 机在此基础上引入随机状态。它们不是本讲后面要训练的前馈网络,但说明神经网络不只有“输入一张图、输出一个类别”这一种形态。

二、从生物启发到数学模型

生物神经元通过树突接收信号,经细胞体处理,再沿轴突输出;突触强度决定不同输入影响有多大。人工神经网络只保留这套结构的一阶抽象,并不等同于真实大脑。

对一个人工神经元,输入为 x1,,xnx_1,\ldots,x_n,连接权重为 w1,,wnw_1,\ldots,w_n,阈值为 θ\theta。先计算净输入

z=i=1nwixiθ=wTx+b,z=\sum_{i=1}^{n}w_ix_i-\theta =\mathbf w^{\mathsf T}\mathbf x+b,

其中 b=θb=-\theta,再经过激活函数

y=f(z).y=f(z).

因此一个神经元只有两步:线性加权,再做非线性变换。在网络中,前一层神经元的输出会成为后一层的输入;权重存储连接关系,学习就是调整权重与偏置。

从图结构看,人工神经网络由处理单元、激活状态、输出函数、带权连接、信号传递规则、学习规则和训练环境共同组成。每个单元只依赖局部输入,但大量单元能够并行、分布式地表示复杂模式。

课件还从系统角度概括了它的期望能力:通过分布式连接实现并行处理,通过修改权重学习并自适应,并在部分信息缺失或少量单元异常时保留一定容错与联想能力。这些是网络结构可能带来的性质,不代表任意网络在任意任务上都会自动具备。

三、激活函数为什么不可少

课件介绍三类基础激活:

激活形式作用与特点
阈值函数f(z)=1(z0)f(z)=\mathbb 1(z\ge0)直接给离散决策,不可微
Sigmoidf(z)=1/(1+ez)f(z)=1/(1+e^{-z})输出在 (0,1)(0,1),连续可微,两端饱和
线性函数f(z)=zf(z)=z保留实数范围,常用于回归输出

Sigmoid 的导数可以只用输出表示:

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

它既非线性又可微,适合用来讲解早期 BP 网络。

如果每一层都只用线性函数,那么无论堆多少层,结果仍是一次线性变换。例如

W2(W1x)=(W2W1)x.W_2(W_1\mathbf x)= (W_2W_1)\mathbf x.

深度并没有增加函数类型。隐藏层中的非线性激活,才让多层网络能组合出弯曲、分段的复杂决策边界。

四、感知机:会学习的单层神经元

单层感知机用阈值函数输出 0 或 1。对样本 (x,d)(\mathbf x,d),先计算预测

y=f(wTx+b),y=f(\mathbf w^{\mathsf T}\mathbf x+b),

再按预测误差调整连接:

ww+η(dy)x,\mathbf w\leftarrow \mathbf w+\eta(d-y)\mathbf x, bb+η(dy).b\leftarrow b+\eta(d-y).
  • 预测正确时 dy=0d-y=0,不更新;
  • 正样本被判成 0 时,沿 x\mathbf x 增大分数;
  • 负样本被判成 1 时,反向减小分数。

它本质上仍是学习一个线性分界面,所以只适用于线性可分问题。

五、为什么单层感知机解决不了 XOR

XOR 的真值表为:

x1x_1x2x_2yy
000
101
011
110

若存在单层感知机,阈值记为 θ\theta,四个点必须同时满足

θ<0,w1θ0,w2θ0,w1+w2θ<0.\begin{aligned} -\theta&<0,\\ w_1-\theta&\ge0,\\ w_2-\theta&\ge0,\\ w_1+w_2-\theta&<0. \end{aligned}

由中间两式可得 w1θw_1\ge\thetaw2θw_2\ge\theta;第一式给出 θ>0\theta>0,于是

w1+w22θ>θ,w_1+w_2\ge2\theta>\theta,

却与最后一式 w1+w2<θw_1+w_2<\theta 矛盾。因此不是训练不够久,而是模型假设空间里根本不存在 XOR 的线性解

加入隐藏层后,可以让不同隐藏单元分别刻画局部线性条件,再由输出层组合。多层结构由此突破单个超平面的限制。

六、多层前馈网络怎样计算

前馈网络中的连接只从前一层指向后一层,不形成回路。设第 \ell 层输入激活为 a(1)\mathbf a^{(\ell-1)},则

z()=W()a(1)+b(),\mathbf z^{(\ell)} =W^{(\ell)}\mathbf a^{(\ell-1)} +\mathbf b^{(\ell)}, a()=f()(z()).\mathbf a^{(\ell)}=f^{(\ell)}(\mathbf z^{(\ell)}).

其中 a(0)=x\mathbf a^{(0)}=\mathbf x。输入层负责接收数据,中间层称为隐藏层,最后一层给出预测。

前向传播只是逐层代入。真正的问题是:预测错了以后,怎样知道几百、几万甚至更多参数各自应该改多少?答案是把输出误差按链式法则向后传播。

七、反向传播不是“把数据倒着跑”

设训练样本为 (x,t)(\mathbf x,\mathbf t),网络预测为 y\mathbf y。以均方误差为例:

L=12j(tjyj)2.L=\frac{1}{2}\sum_j(t_j-y_j)^2.

训练要沿负梯度方向更新每个权重:

wwηLw.w\leftarrow w-\eta\frac{\partial L}{\partial w}.

反向传播的工作就是高效计算这些偏导数。它先在前向传播时保存每层的 z\mathbf za\mathbf a,再从输出层开始复用局部导数。

课件中的两输入、两输出算例

两个输入先汇入隐藏神经元 3,再连接到输出神经元 4、5:

z3=w13x1+w23x2,h=f(z3),z_3=w_{13}x_1+w_{23}x_2,\qquad h=f(z_3), z4=w34h,y1=f(z4),z_4=w_{34}h,\qquad y_1=f(z_4), z5=w35h,y2=f(z5).z_5=w_{35}h,\qquad y_2=f(z_5).

损失为

L=12[(t1y1)2+(t2y2)2].L=\frac{1}{2} \left[(t_1-y_1)^2+(t_2-y_2)^2\right].

先定义输出层对净输入的误差信号:

δ4=Lz4=(y1t1)f(z4),\delta_4=\frac{\partial L}{\partial z_4} =(y_1-t_1)f'(z_4), δ5=Lz5=(y2t2)f(z5).\delta_5=\frac{\partial L}{\partial z_5} =(y_2-t_2)f'(z_5).

隐藏单元 3 同时影响两个输出,因此两条下游误差都要加回来:

δ3=Lz3=(w34δ4+w35δ5)f(z3).\delta_3 =\frac{\partial L}{\partial z_3} =(w_{34}\delta_4+w_{35}\delta_5)f'(z_3).

每条权重的梯度等于“终点的误差信号 × 起点的激活”:

Lw34=δ4h,Lw35=δ5h,\frac{\partial L}{\partial w_{34}}=\delta_4h,\qquad \frac{\partial L}{\partial w_{35}}=\delta_5h, Lw13=δ3x1,Lw23=δ3x2.\frac{\partial L}{\partial w_{13}}=\delta_3x_1,\qquad \frac{\partial L}{\partial w_{23}}=\delta_3x_2.

这就是反向传播最核心的模式。对一般第 \ell 层,可写成

δ()=((W(+1))Tδ(+1))f(z()),\boldsymbol{\delta}^{(\ell)} =\left((W^{(\ell+1)})^{\mathsf T} \boldsymbol{\delta}^{(\ell+1)}\right) \odot f'(\mathbf z^{(\ell)}), LW()=δ()(a(1))T.\frac{\partial L}{\partial W^{(\ell)}} =\boldsymbol{\delta}^{(\ell)} (\mathbf a^{(\ell-1)})^{\mathsf T}.

\odot 表示逐元素乘法。反向传播并没有发明新的求导规则,它只是按计算图组织链式法则,并复用已经算过的中间结果。

八、一次完整训练循环

对训练集 {(xk,tk)}\{(\mathbf x_k,\mathbf t_k)\},基本 BP 训练过程为:

  1. 初始化各层权重与偏置;
  2. 取一个样本或一批样本,逐层前向计算预测;
  3. 根据预测与目标计算损失;
  4. 从输出层到第一隐藏层反向计算误差信号与梯度;
  5. 沿负梯度方向更新所有参数;
  6. 遍历训练样本并重复,直到验证指标不再改善或达到停止条件。

课件总结的 BP 优点是推导严格、适用于一般前馈多层网络;经典局限包括收敛可能较慢、隐藏单元数量难以直接确定,以及梯度法会受非凸优化地形影响。今天的初始化、归一化、优化器和残差结构缓解了许多训练问题,但并没有改变“前向计算 + 反向求梯度 + 参数更新”这条主线。

九、隐藏层究竟学到了什么

课件用一个小型自编码任务展示隐藏表示:输入和目标输出都是 8 维 one-hot 向量,中间只有 3 个隐藏单元。网络必须把 8 种输入压缩进 3 个数,再重建原输入。

训练后,隐藏层近似学到 8 个彼此不同的三位编码:

输入隐藏表示(取近似二值)输出目标
1000000010010000000
0100000000101000000
0010000001000100000
0001000011100010000
0000100000000001000
0000010001100000100
0000001010100000010
0000000111000000001

这些编码的顺序不必与人工规定的二进制编号一致;只要 8 个输入在隐藏空间中可区分,输出层就能解码。这个例子说明:隐藏层不是必须对应人工命名的概念,它会学习完成任务所需的内部表示。

十、网络能表达什么

课件给出的定性结论是:

  • 适当宽度的两层网络可以精确表示任意布尔函数,但所需隐藏单元可能随输入数指数增长;
  • 使用 Sigmoid 等非线性激活时,单隐藏层网络可以在有界区域内以任意精度逼近连续函数;
  • 增加层数可以用多级组合表示更复杂函数。

这里的“几层”在不同教材中可能把输入层算入,也可能不算;“任意逼近”也依赖激活函数、宽度、定义域等条件。它说明存在某组参数可以表示目标函数,并不保证有限数据上的训练算法一定能找到它,也不保证找到后能对新数据泛化。

十一、训练误差下降,为什么验证误差会上升

随着训练继续,网络可能从学习稳定规律转向记忆训练样本中的噪声:训练误差继续下降,验证误差却回升,这就是过拟合。

一个直接办法是保留验证集并早停:记录验证误差最低时的参数或迭代次数,而不是机械训练到训练误差最小。

数据较少时可使用 KK 折交叉验证:

  1. mm 个样本分成 KK 个互不相交的子集;
  2. 每次用其中一折验证,其余 K1K-1 折训练;
  3. 轮换验证折,记录各次验证表现与最佳迭代次数;
  4. 汇总各折结果选择模型设置,再用完整训练数据按选定设置训练。

训练集用于拟合参数,验证集用于选训练轮数、网络规模等超参数;最终报告泛化性能时还应使用未参与这些选择的测试集。

十二、另一种隐藏层:径向基函数网络

径向基函数(Radial Basis Function,RBF)网络通常只有一个隐藏层。每个隐藏单元不是计算全局线性投影,而是响应“输入离某个中心有多近”。常用高斯基函数为

ϕj(x)=exp((xcj)T(xcj)2σj2).\phi_j(\mathbf x) =\exp\left( -\frac{(\mathbf x-\mathbf c_j)^{\mathsf T} (\mathbf x-\mathbf c_j)}{2\sigma_j^2} \right).
  • cj\mathbf c_j 是第 jj 个中心;
  • σj\sigma_j 控制响应范围;
  • 输出层对各基函数响应做线性加权。

于是

yk=jvkjϕj(x)+bk.y_k=\sum_jv_{kj}\phi_j(\mathbf x)+b_k.

RBF 隐层把原空间映射到由“到各中心的相似度”组成的新空间,输出层再做线性分类或函数逼近。需要学习的参数包括中心、宽度和输出权重,可以分阶段估计,也可以用梯度法联合优化。

本讲速记

  • 人工神经元先做 wTx+b\mathbf w^{\mathsf T}\mathbf x+b,再经过激活函数;权重承载网络学到的连接关系。
  • 单层感知机只能形成线性边界,XOR 的四个不等式彼此矛盾。
  • 多层网络靠非线性激活获得更强表达能力;纯线性层叠加仍只是线性变换。
  • BP 用链式法则把输出误差逐层传回,梯度结构是“本层误差信号 × 上一层激活”。
  • 表达能力不等于可训练性或泛化能力;要用验证、早停和交叉验证监控过拟合。
  • RBF 网络用到中心的距离构造局部非线性特征,再由线性输出层组合。

评论