量化交易中文教材

第 07 章 有监督 Hebb 学习

对应原书第 7 章。Hebb 规则是最早的神经网络学习律之一,1949 年作为大脑突触修改的可能机制提出。本章用第 05 章的线性代数说明它为什么有效、何时失效,再引出它的改进版——伪逆规则。对量化读者来说,本章有一个特别重要的结论:Hebb 规则就是"用相关系数加权",伪逆规则就是最小二乘回归,两者的差别正是因子共线时"串扰"带来的偏差。

学习目标

读完本章,你应当能够:

  1. 复述 Hebb 假设,写出线性联想器和有监督 Hebb 规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^T\)。
  2. 证明输入原型标准正交时 Hebb 规则能精确回忆,并写出非正交时的串扰误差项。
  3. 写出伪逆规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^+\) 及 Moore–Penrose 伪逆的两种显式公式,正确区分 \(R>Q\) 与 \(R<Q\) 两种情形,并把后者对应到 OLS 回归。
  4. 用 Hebb 或伪逆规则设计自联想记忆和带偏置的感知机,掌握"增广 1 引入偏置"和二值/双极表示之间的换算。
  5. 说出 Hebb 规则的四种变体(学习率、衰减、delta 规则、无监督 Hebb),并把衰减规则对应到 EWMA 估计、把 delta 规则对应到在线回归。
  6. 分析正交原型下 Hebb 权值矩阵的特征结构。

读前导读

这一章在解决什么问题

结论先说:本章的两个学习规则,你在 CFA 里都见过,只是换了名字。设想用 \(R\) 个因子预测一只股票的收益,单个线性神经元 \(a=\mathbf{w}^T\mathbf{p}\) 就是一个无截距的多元回归。怎么定权值 \(\mathbf{w}\)?

  • Hebb 规则的做法是"每个因子的权值 = 它与收益的协方差(交叉矩)",各因子各算各的,不管彼此是否相关。这就是"按 IC 加权":哪个因子和收益相关性高,就给哪个大权重。
  • 伪逆规则的做法是"解一个最小二乘问题",在 \(R<Q\)(样本多于因子)时就是 OLS:\(\hat{\boldsymbol\beta}=(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}\)。

两者的差别是 \((\mathbf{X}^T\mathbf{X})^{-1}\) 这一项:它负责扣除因子之间的相关性。因子两两不相关、方差为 1 时,这一项是单位矩阵,两种方法一样;因子相关时,Hebb 规则会把有效因子的功劳"分"给与之相关的无效因子,这就是本章说的"串扰"。用回归的语言讲,这和"一元回归的斜率在遗漏相关变量时有偏"是同一个现象:IC 是一元的,回归系数是多元的。

本章还讲了 Hebb 规则的几个变体,它们都能在量化里找到对应:带衰减的 Hebb 规则就是 EWMA 协方差(RiskMetrics),delta 规则就是逐期更新的在线回归。

需要先想起来的数学

  • 外积与"外积之和 = 矩阵乘积"。\(\sum_q\mathbf{t}_q\mathbf{p}_q^T=\mathbf{T}\mathbf{P}^T\),其中 \(\mathbf{T}\)、\(\mathbf{P}\) 的第 \(q\) 列分别是 \(\mathbf{t}_q\)、\(\mathbf{p}_q\)。在回归记号下就是 \(\mathbf{X}^T\mathbf{y}=\sum_q\mathbf{x}_qy_q\)。见 第 00 册第 06 章 线性代数速成。
  • 标准正交。一组向量两两内积为 0、各自长度为 1。写成矩阵:\(\mathbf{P}^T\mathbf{P}=\mathbf{I}\)。例:\([0.5,-0.5,0.5,-0.5]^T\) 与 \([0.5,0.5,-0.5,-0.5]^T\) 内积 \(0.25-0.25-0.25+0.25=0\),各自长度平方 \(4\times0.25=1\)。
  • 矩阵求逆与转置的规则。\((\mathbf{A}\mathbf{B})^T=\mathbf{B}^T\mathbf{A}^T\);对称矩阵 \(\mathbf{A}^T=\mathbf{A}\);\(\mathbf{P}^T\mathbf{P}\) 和 \(\mathbf{P}\mathbf{P}^T\) 永远对称。
  • 多元函数求最小值:梯度为零。\(F(\mathbf{w})=\sum_q(t_q-\mathbf{w}^T\mathbf{p}_q)^2\) 对每个 \(w_j\) 求偏导令其为 0,就得到 OLS 的正规方程。偏导就是"其他变量不动、只对一个变量求导"。见 第 00 册第 05 章 多元微积分与优化。
  • 几何级数与指数加权。\((1-\gamma)^k\) 随 \(k\) 指数衰减;半衰期 \(h\) 满足 \((1-\gamma)^h=0.5\)。见 第 00 册第 04 章 级数与收敛。

怎么读这一章

核心必读是 7.2 节(Hebb 规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^T\))、7.3 节(串扰公式 7.14)、7.4 节(伪逆规则,尤其 7.4.2 两种情形的区分)和 7.8.1 节(量化对应关系)。7.1 节历史可浏览。7.4.1 节 Moore–Penrose 的四个条件第一次只需知道"伪逆是逆矩阵的推广、pinv 能直接算"。7.5 节自联想记忆和 7.6 节偏置与二值表示属于应用,可以先看结论;7.5 节末尾的特征结构建议读,它连接了第 05 章。7.7 节变体请读,后面第 10、15 章都从这里出发。


7.1 Hebb 假设

Donald Hebb 原想当小说家,后来为理解人性转向心理学,研究过巴甫洛夫条件反射、早期经验对视觉的影响、脑手术患者的智力变化。1949 年他在《The Organization of Behavior》中提出:行为可以用神经元的活动来解释。这与当时主张"只研究刺激–反应、排斥生理假设"的行为主义针锋相对。书中最著名的一段话被称为 Hebb 假设(Hebb's postulate):

当细胞 A 的轴突足够接近并能激发细胞 B,且反复或持续地参与使 B 放电时,一个或两个细胞中会发生某种生长过程或代谢变化,使 A 作为激发 B 的细胞之一的效率提高。

它第一次为"细胞层面的学习"提供了一个物理机制,后来的研究也确实发现某些细胞表现出 Hebb 式学习。这个思想有先驱:William James 1890 年就提出过联想原理——两个脑过程同时或紧接着活跃,其中一个再次出现时,倾向于把兴奋传给另一个。


7.2 线性联想器与 Hebb 规则

7.2.1 线性联想器

为了专注于学习律本身,本章用最简单的结构:线性联想器(linear associator,Anderson 与 Kohonen 1972 年各自提出)。它是一个无偏置的线性层:

\[\mathbf{a}=\mathbf{W}\mathbf{p},\qquad a_i=\sum_{j=1}^R w_{ij}p_j .\tag{7.1–7.2}\]

它是一种联想记忆(associative memory):学习 \(Q\) 对原型输入/输出 \(\{\mathbf{p}_1,\mathbf{t}_1\},\dots,\{\mathbf{p}_Q,\mathbf{t}_Q\}\)。输入 \(\mathbf{p}=\mathbf{p}_q\) 时应输出 \(\mathbf{t}_q\);输入略有偏差(\(\mathbf{p}_q+\boldsymbol\delta\))时,输出也只应略有偏差(\(\mathbf{t}_q+\boldsymbol\varepsilon\))。

7.2.2 Hebb 规则

把 Hebb 假设改述为:突触两侧的神经元同时激活时,突触强度增加。由式(7.2),连接输入 \(p_j\) 与输出 \(a_i\) 的突触就是 \(w_{ij}\)。一种数学表达是

\[w_{ij}^{new}=w_{ij}^{old}+\alpha f_i(a_{iq})\,g_j(p_{jq}),\tag{7.4}\]

权值变化与突触两侧活动的乘积成正比,\(\alpha>0\) 是学习率(learning rate)。本章取最简单的形式

\[w_{ij}^{new}=w_{ij}^{old}+\alpha\,a_{iq}\,p_{jq}.\tag{7.5}\]

它比 Hebb 的原意走得更远:两侧同为负时权值也增加,异号时权值减小。

式(7.5)用的是实际输出,不需要目标,是无监督规则。本章关注有监督 Hebb 规则:把实际输出换成目标输出——告诉算法网络"应该做什么",而不是"正在做什么"——并取 \(\alpha=1\):

\[w_{ij}^{new}=w_{ij}^{old}+t_{iq}p_{jq},\qquad \mathbf{W}^{new}=\mathbf{W}^{old}+\mathbf{t}_q\mathbf{p}_q^T .\tag{7.6–7.7}\]

权值从零开始、每对样本用一次,得到

\[\mathbf{W}=\sum_{q=1}^Q\mathbf{t}_q\mathbf{p}_q^T=[\mathbf{t}_1\ \cdots\ \mathbf{t}_Q]\begin{bmatrix}\mathbf{p}_1^T\\ \vdots\\ \mathbf{p}_Q^T\end{bmatrix}=\mathbf{T}\mathbf{P}^T,\tag{7.8–7.9}\]

其中 \(\mathbf{T}=[\mathbf{t}_1\ \cdots\ \mathbf{t}_Q]\)(\(S\times Q\)),\(\mathbf{P}=[\mathbf{p}_1\ \cdots\ \mathbf{p}_Q]\)(\(R\times Q\))。这就是外积规则(outer product rule),也叫相关矩阵记忆。注意它和第 04 章感知机规则 \(\mathbf{W}^{new}=\mathbf{W}^{old}+\mathbf{e}\mathbf{p}^T\) 的形式几乎一样,区别是这里乘的是目标 \(\mathbf{t}\),而不是误差 \(\mathbf{e}\)。

推导拆解:式 (7.9) 的第二个等号是"按块相乘"。把 \(\mathbf{T}\) 看成一行 \(Q\) 个列块 \([\mathbf{t}_1\cdots\mathbf{t}_Q]\),把 \(\mathbf{P}^T\) 看成一列 \(Q\) 个行块 \(\mathbf{p}_1^T,\dots,\mathbf{p}_Q^T\),按"行乘列"的规则,结果是对应块相乘再加总:\(\mathbf{t}_1\mathbf{p}_1^T+\cdots+\mathbf{t}_Q\mathbf{p}_Q^T\)。逐元素看,\(\mathbf{W}\) 的第 \((i,j)\) 元是 \(\sum_qt_{iq}p_{jq}\),即"第 \(i\) 个目标与第 \(j\) 个输入在所有样本上的乘积之和"。若输入、目标都已去均值,除以 \(Q\) 就是样本协方差。所以 Hebb 权值矩阵就是"目标–输入的交叉协方差矩阵"(差一个常数倍)。


7.3 性能分析:正交与串扰

7.3.1 标准正交原型:精确回忆

输入 \(\mathbf{p}_k\):

\[\mathbf{a}=\mathbf{W}\mathbf{p}_k=\Big(\sum_{q}\mathbf{t}_q\mathbf{p}_q^T\Big)\mathbf{p}_k=\sum_q\mathbf{t}_q\,(\mathbf{p}_q^T\mathbf{p}_k).\tag{7.11}\]

若原型标准正交(orthonormal),\(\mathbf{p}_q^T\mathbf{p}_k\) 在 \(q=k\) 时为 1、否则为 0,于是 \(\mathbf{a}=\mathbf{t}_k\)。输入原型标准正交时,Hebb 规则对每个原型都给出正确输出。

7.3.2 非正交原型:串扰误差

原型只是单位长度、但不正交时:

\[\mathbf{a}=\mathbf{W}\mathbf{p}_k=\mathbf{t}_k+\underbrace{\sum_{q\ne k}\mathbf{t}_q(\mathbf{p}_q^T\mathbf{p}_k)}_{\text{误差(串扰)}}.\tag{7.14}\]

误差的大小取决于原型之间的相关程度(内积)。这个误差项通常叫串扰(crosstalk):其他记忆"漏"进了当前回忆。

推导拆解:式 (7.11)、(7.14) 只用了一个技巧——矩阵乘法的结合律。\((\mathbf{t}_q\mathbf{p}_q^T)\mathbf{p}_k=\mathbf{t}_q(\mathbf{p}_q^T\mathbf{p}_k)\),括号里是一个数(内积),所以每一项都是"目标向量 \(\mathbf{t}_q\) 乘以一个相似度系数"。输出因此是所有目标的加权和,权重是"当前输入与各原型的相似度"。正交时只有自己那一项的权重非零(且为 1),就精确回忆;不正交时,相似的原型也分到权重,它们的目标就"漏"了进来。

金融直觉:把它类比为"按与历史情景的相似度加权预测"。分析师说"今天的市场像 2008 年,也有点像 2020 年",于是把两段历史的后续走势按相似度加权当作预测。如果各历史情景本身彼此相似(不正交),同一个信息会被重复计入,预测就偏了。伪逆规则的作用就是先把历史情景之间的重叠扣掉。

例(正交情形,原书 7.15–7.18)

\[\mathbf{p}_1=\begin{bmatrix}0.5\\-0.5\\0.5\\-0.5\end{bmatrix},\ \mathbf{t}_1=\begin{bmatrix}1\\-1\end{bmatrix};\qquad \mathbf{p}_2=\begin{bmatrix}0.5\\0.5\\-0.5\\-0.5\end{bmatrix},\ \mathbf{t}_2=\begin{bmatrix}1\\1\end{bmatrix}.\]

两者标准正交。

\[\mathbf{W}=\mathbf{T}\mathbf{P}^T=\begin{bmatrix}1&1\\-1&1\end{bmatrix}\begin{bmatrix}0.5&-0.5&0.5&-0.5\\0.5&0.5&-0.5&-0.5\end{bmatrix}=\begin{bmatrix}1&0&0&-1\\0&1&-1&0\end{bmatrix},\]

\(\mathbf{W}\mathbf{p}_1=[1,-1]^T\),\(\mathbf{W}\mathbf{p}_2=[1,1]^T\),完全正确。

例(苹果/橙子,原书 7.19–7.23) 原型 \([1,-1,-1]^T\) 与 \([1,1,-1]^T\) 不正交(内积为 1)。先归一化,目标取 −1(橙子)和 1(苹果):

\[\mathbf{p}_1=\begin{bmatrix}0.5774\\-0.5774\\-0.5774\end{bmatrix},\ t_1=-1;\qquad \mathbf{p}_2=\begin{bmatrix}0.5774\\0.5774\\-0.5774\end{bmatrix},\ t_2=1.\]
\[\mathbf{W}=\mathbf{T}\mathbf{P}^T=[0\ \ 1.1548\ \ 0],\qquad \mathbf{W}\mathbf{p}_1=-0.6668,\quad \mathbf{W}\mathbf{p}_2=0.6668 .\]

接近但不等于目标。误差来自归一化原型的内积 \(1/3\):\(\mathbf{W}\mathbf{p}_1=t_1+t_2\cdot\frac13=-1+\frac13=-\frac23\),与式(7.14)一致。


7.4 伪逆规则

7.4.1 把"记住"写成最小化问题

我们真正想要的是 \(\mathbf{W}\mathbf{p}_q=\mathbf{t}_q\),\(q=1,\dots,Q\)。不能精确满足时,就让它尽量满足:最小化

\[F(\mathbf{W})=\sum_{q=1}^Q\|\mathbf{t}_q-\mathbf{W}\mathbf{p}_q\|^2=\|\mathbf{T}-\mathbf{W}\mathbf{P}\|^2,\tag{7.25, 7.28}\]

这里矩阵范数是所有元素平方和(Frobenius 范数)。原型标准正交时 Hebb 规则使 \(F=0\);不正交时 Hebb 规则的 \(F>0\),而且一般不是最小值。

若 \(\mathbf{P}\) 是可逆方阵,\(\mathbf{W}=\mathbf{T}\mathbf{P}^{-1}\) 使 \(F=0\)。但这很少见:\(\mathbf{P}\) 是 \(R\times Q\),通常不是方阵。Albert(1972)证明,使 \(F\) 最小的权值由伪逆规则给出:

\[\boxed{\ \mathbf{W}=\mathbf{T}\mathbf{P}^+\ }\tag{7.32}\]

\(\mathbf{P}^+\) 是 Moore–Penrose 伪逆,即同时满足以下四条的唯一矩阵:

\[\mathbf{P}\mathbf{P}^+\mathbf{P}=\mathbf{P},\quad \mathbf{P}^+\mathbf{P}\mathbf{P}^+=\mathbf{P}^+,\quad (\mathbf{P}^+\mathbf{P})^T=\mathbf{P}^+\mathbf{P},\quad (\mathbf{P}\mathbf{P}^+)^T=\mathbf{P}\mathbf{P}^+ .\tag{7.33}\]

(四条依次是:广义逆、自反、\(\mathbf{P}^+\mathbf{P}\) 对称、\(\mathbf{P}\mathbf{P}^+\) 对称。)

白话解释:普通的逆矩阵只对可逆方阵存在。伪逆是它的推广:对任何形状的矩阵都存在且唯一,矩阵可逆时就等于普通的逆。四个条件不必背,它们共同刻画了"\(\mathbf{P}\mathbf{P}^+\) 和 \(\mathbf{P}^+\mathbf{P}\) 是两个正交投影"——前者把向量投影到 \(\mathbf{P}\) 的列空间,后者投影到 \(\mathbf{P}\) 的行空间。回到回归:\(\mathbf{X}\mathbf{X}^+=\mathbf{X}(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\) 正是回归里的"帽子矩阵" \(\mathbf{H}\),它把 \(\mathbf{y}\) 映射成拟合值 \(\hat{\mathbf{y}}\)。实际计算一律用 np.linalg.pinv(基于奇异值分解),它在因子完全共线、\(\mathbf{X}^T\mathbf{X}\) 不可逆时也能给出答案。

7.4.2 两种显式公式,以及它们分别对应什么

伪逆有两种常用的显式公式,适用的情形不同,务必分清:

情形一:\(R>Q\)(输入维数多于样本数),\(\mathbf{P}\) 列满秩。这是原书本章的主要情形——少量原型、每个原型维数很高。

\[\mathbf{P}^+=(\mathbf{P}^T\mathbf{P})^{-1}\mathbf{P}^T .\tag{7.34}\]

此时 \(\mathbf{P}^+\mathbf{P}=\mathbf{I}\),\(\mathbf{W}\mathbf{P}=\mathbf{T}\) 精确成立,\(F=0\)。方程 \(\mathbf{W}\mathbf{P}=\mathbf{T}\) 的未知数多于方程,有无穷多个精确解,\(\mathbf{T}\mathbf{P}^+\) 是其中 Frobenius 范数最小的那个(最小范数解)。

情形二:\(R<Q\)(样本数多于输入维数),\(\mathbf{P}\) 行满秩(原书 E7.7)。

\[\mathbf{P}^+=\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}.\]

此时一般不能精确满足,\(\mathbf{W}=\mathbf{T}\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\) 是最小二乘解。换成回归记号:令 \(\mathbf{X}=\mathbf{P}^T\)(\(Q\times R\),每行一个样本),\(\mathbf{y}=\mathbf{T}^T\),则

\[\mathbf{W}^T=(\mathbf{P}\mathbf{P}^T)^{-1}\mathbf{P}\mathbf{T}^T=(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y},\]

正是 OLS 的正规方程解。量化里"样本(股票×期数)多、因子少"的标准回归属于这一情形。

推导拆解:情形二的公式从哪来?取单个输出神经元(\(S=1\)),权值行向量 \(\mathbf{w}^T\),\(F(\mathbf{w})=\sum_q(t_q-\mathbf{w}^T\mathbf{p}_q)^2\)。对 \(\mathbf{w}\) 的每个分量求偏导并令其为 0(这里用了链式法则:外层平方求导得 \(2(\cdot)\),内层对 \(w_j\) 求导得 \(-p_{jq}\)),得 \(\sum_q(t_q-\mathbf{w}^T\mathbf{p}_q)p_{jq}=0\),\(j=1,\dots,R\)。写成矩阵:\(\mathbf{T}\mathbf{P}^T=\mathbf{w}^T\mathbf{P}\mathbf{P}^T\),即"残差与每个输入正交"(第 05 章投影的最优性)。\(\mathbf{P}\mathbf{P}^T\) 是 \(R\times R\),行满秩时可逆,右乘它的逆就得到 \(\mathbf{w}^T=\mathbf{T}\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\)。对照 Hebb 的 \(\mathbf{T}\mathbf{P}^T\),伪逆只多了一个"\(\times(\mathbf{P}\mathbf{P}^T)^{-1}\)"——这就是扣除因子间相关性的那一步。

情形一为什么叫"最小范数解"?\(R>Q\) 时方程比未知数少,好比用 10 个因子去精确拟合 3 只股票,能完全拟合的系数有无穷多组。伪逆从中挑出系数平方和最小的那一组,相当于"在完全拟合的前提下,系数尽量小",这和岭回归惩罚大系数的思路相通,可以减轻对噪声的过度拟合。

更正说明:精读笔记的量化注释把两种情形写反了,称"\(R>Q\)(特征多于样本)时用 \(\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\) 给出最小范数解",并把 \((\mathbf{P}^T\mathbf{P})^{-1}\mathbf{P}^T\) 直接等同于正规方程。按原书记号(\(\mathbf{P}\) 的列是样本),正确的对应是:\(R>Q\) 用 \((\mathbf{P}^T\mathbf{P})^{-1}\mathbf{P}^T\),得到精确拟合的最小范数解;\(R<Q\) 用 \(\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\),得到最小二乘解,才与 OLS 正规方程同构。数值计算中不必区分,直接用基于 SVD 的 np.linalg.pinv,它对秩亏的情形也成立。

7.4.3 例:苹果/橙子

伪逆规则不需要把输入归一化。\(\mathbf{p}_1=[1,-1,-1]^T\),\(t_1=-1\);\(\mathbf{p}_2=[1,1,-1]^T\),\(t_2=1\)。\(R=3>Q=2\),用式(7.34):

\[\mathbf{P}^+=\begin{bmatrix}3&1\\1&3\end{bmatrix}^{-1}\begin{bmatrix}1&-1&-1\\1&1&-1\end{bmatrix}=\begin{bmatrix}0.25&-0.5&-0.25\\0.25&0.5&-0.25\end{bmatrix},\qquad \mathbf{W}=\mathbf{T}\mathbf{P}^+=[-1\ \ 1]\mathbf{P}^+=[0\ \ 1\ \ 0].\]

\(\mathbf{W}\mathbf{p}_1=-1\),\(\mathbf{W}\mathbf{p}_2=1\),精确匹配目标,而 Hebb 规则只能给出 ±0.6668。巧合的是,这正是第 03 章画图设计出的感知机权值。

7.4.4 例:正交但未归一化(原书 P7.1)

\(\mathbf{p}_1=[1,-1,1,-1]^T\),\(\mathbf{t}_1=[1,-1]^T\);\(\mathbf{p}_2=[1,1,-1,-1]^T\),\(\mathbf{t}_2=[1,1]^T\)。

  • Hebb:\(\mathbf{W}^h=\mathbf{T}\mathbf{P}^T=\begin{bmatrix}2&0&0&-2\\0&2&-2&0\end{bmatrix}\),\(\mathbf{W}^h\mathbf{p}_1=[4,-4]^T\ne\mathbf{t}_1\)。
  • 伪逆:\(\mathbf{P}^T\mathbf{P}=4\mathbf{I}\),\(\mathbf{P}^+=\frac14\mathbf{P}^T\),\(\mathbf{W}^p=\begin{bmatrix}1/2&0&0&-1/2\\0&1/2&-1/2&0\end{bmatrix}\),\(\mathbf{W}^p\mathbf{p}_1=\mathbf{t}_1\)。

原因:原型正交但长度为 2,Hebb 输出是 \(\mathbf{t}_1(\mathbf{p}_1^T\mathbf{p}_1)=4\mathbf{t}_1\)。伪逆规则相当于自动做了"除以 \(\mathbf{P}^T\mathbf{P}\)"的校正。这个例子清楚地显示了两者的关系:当 \(\mathbf{P}^T\mathbf{P}=\mathbf{I}\) 时 \(\mathbf{P}^+=\mathbf{P}^T\),伪逆规则退化为 Hebb 规则;伪逆规则就是"去掉原型之间相关性(和长度)影响之后"的 Hebb 规则。


7.5 应用:自联想记忆

自联想记忆(autoassociative memory)的目标输出等于输入,\(\mathbf{t}_q=\mathbf{p}_q\),用来存储模式并在输入受损时把它回忆出来。

原书存储数字 0、1、2,每个是 \(6\times5\) 的像素网格(30 像素),白格 −1、黑格 1,按列扫描成 30 维向量。Hebb 规则给出

\[\mathbf{W}=\mathbf{p}_1\mathbf{p}_1^T+\mathbf{p}_2\mathbf{p}_2^T+\mathbf{p}_3\mathbf{p}_3^T .\tag{7.42}\]

元素只取 ±1,所以把线性传递函数换成对称硬限幅:\(\mathbf{a}=\mathrm{hardlims}(\mathbf{W}\mathbf{p})\)。原书的测试结果:

  1. 下半部 50% 被遮挡(置白):三个数字都正确恢复;
  2. 下部 2/3 被遮挡:只有"1"正确恢复,另两个输出不对应任何原型——这叫伪模式(spurious patterns),是联想记忆的常见问题;
  3. 每个数字随机翻转 7 个像素:全部正确恢复。

(原书此处说伪模式问题"将在第 18 章循环联想记忆中再谈",按第二版目录,Hopfield 网络的设计在原书第 21 章,即本册第 19 章。)

为什么非线性很重要(原书 P7.2)。两个 6 像素原型 \(\mathbf{p}_1=[1,1,-1,1,-1,-1]^T\)、\(\mathbf{p}_2=[-1,1,1,1,1,-1]^T\) 正交但未归一化(长度平方 6)。测试 \(\mathbf{p}_t=[1,1,1,1,1,-1]^T\):

\[\mathbf{a}=\mathrm{hardlims}(\mathbf{P}\mathbf{P}^T\mathbf{p}_t)=\mathrm{hardlims}([-2,6,2,6,2,-6]^T)=[-1,1,1,1,1,-1]^T=\mathbf{p}_2,\]

正确(\(\mathbf{p}_t\) 与 \(\mathbf{p}_2\) 的 Hamming 距离为 1,与 \(\mathbf{p}_1\) 为 2)。P7.1 里困扰线性联想器的"长度没归一化"问题在这里消失了,因为 hardlims 把输出强制到 ±1。原书由此总结:神经网络大多数有趣、有用的性质来自非线性。

原型不正交时(原书 P7.3)。三个 7 维原型不正交,测试向量与 \(\mathbf{p}_3\) 的距离为 1、与另两个为 2。Hebb 自联想器给出一个不是任何原型的输出;伪逆自联想器正确回忆出 \(\mathbf{p}_3\)。

正交原型下 Hebb 矩阵的特征结构(原书 P7.5)。设 \(Q\) 个长度为 \(R\)、元素为 ±1 的正交原型,\(\mathbf{W}=\mathbf{P}\mathbf{P}^T\):

  • \(\mathbf{W}\mathbf{p}_k=\sum_q\mathbf{p}_q(\mathbf{p}_q^T\mathbf{p}_k)=R\,\mathbf{p}_k\),每个原型都是特征向量,特征值为 \(R\);原型张成的 \(Q\) 维子空间是特征值 \(R\) 的特征空间。
  • 与原型正交的 \((R-Q)\) 维子空间中任一向量 \(\mathbf{z}\):\(\mathbf{W}\mathbf{z}=\mathbf{0}\),特征值为 0。

推导拆解:第二条的理由:若 \(\mathbf{z}\) 与每个原型都正交,则 \(\mathbf{W}\mathbf{z}=\sum_q\mathbf{p}_q(\mathbf{p}_q^T\mathbf{z})=\sum_q\mathbf{p}_q\cdot0=\mathbf{0}\)。第一条中 \(\mathbf{p}_k^T\mathbf{p}_k=R\) 是因为 \(R\) 个元素都是 \(\pm1\),平方后都是 1。任一输入都能拆成"原型子空间里的部分"加"与之正交的部分",\(\mathbf{W}\) 对前者乘 \(R\)、对后者乘 0。这就是第 05 章 \(\mathbf{W}^t\mathbf{a}(0)=\sum c_i\lambda_i^t\mathbf{z}_i\) 只算一步(\(t=1\))的情形。类比 PCA 降噪:只保留前几个主成分方向上的分量,其余方向当噪声丢掉。

所以 Hebb 自联想器做的事是:把输入投影到原型子空间并放大 \(R\) 倍,正交于原型的分量(噪声)全部丢掉。这正是第 05 章"特征值决定迭代命运"在联想记忆中的体现,第 19 章(原书第 21 章)设计 Hopfield 网络时还会用到。


7.6 偏置与二值表示

7.6.1 用增广输入引入偏置(原书 P7.6)

感知机要分开 \(\mathbf{p}_1=[1,1]^T\)(\(t_1=1\))与 \(\mathbf{p}_2=[2,2]^T\)(\(t_2=-1\))。

  • 为什么必须有偏置:无偏置时边界 \(\mathbf{W}\mathbf{p}=0\) 过原点,而两点在过原点的同一条射线上,任何过原点的直线都分不开它们。
  • 做法:把偏置看成输入恒为 1 的权值,增广 \(\mathbf{p}'_1=[1,1,1]^T\),\(\mathbf{p}'_2=[2,2,1]^T\),
\[\mathbf{P}^+=\begin{bmatrix}3&5\\5&9\end{bmatrix}^{-1}\begin{bmatrix}1&1&1\\2&2&1\end{bmatrix}=\begin{bmatrix}-0.5&-0.5&2\\0.5&0.5&-1\end{bmatrix},\qquad \mathbf{W}'=\mathbf{T}\mathbf{P}^+=[-1\ \ -1\ \ 3].\]

即 \(\mathbf{W}=[-1\ -1]\),\(b=3\),边界 \(p_1+p_2=3\) 正好分开两点。这和回归中"加一列 1 作为截距"是同一件事。

7.6.2 二值与双极表示(原书 P7.7)

若用 \(\{0,1\}\) 的二值(binary)表示代替 \(\{-1,1\}\) 的双极(bipolar)表示,Hebb 规则怎样修改?两者关系为 \(\mathbf{p}'=\frac12\mathbf{p}+\frac12\mathbf{1}\)。二值网络用 hardlim,并且需要偏置——二值向量都落在第一象限,过原点的边界不一定能分开它们。要求两种网络的净输入相同:\(\mathbf{W}'\mathbf{p}'+\mathbf{b}=\mathbf{W}\mathbf{p}\),代入得 \(\frac12\mathbf{W}'\mathbf{p}+\frac12\mathbf{W}'\mathbf{1}+\mathbf{b}=\mathbf{W}\mathbf{p}\),所以

\[\mathbf{W}'=2\mathbf{W},\qquad \mathbf{b}=-\mathbf{W}\mathbf{1},\]

其中 \(\mathbf{W}\) 是双极表示下的 Hebb 权值矩阵。量化里把哑变量(0/1)换成 ±1 编码、或反过来,模型的截距和斜率按同样的规律变化。


7.7 Hebb 学习的变体

原型很多时,基本规则 \(\mathbf{W}^{new}=\mathbf{W}^{old}+\mathbf{t}_q\mathbf{p}_q^T\) 的权值会越来越大。后文很多学习律都可以看成它的变体:

  1. 加学习率 \(\alpha<1\):\(\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha\mathbf{t}_q\mathbf{p}_q^T\),限制增长速度。

  2. 加衰减项(decay):

    \[\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha\mathbf{t}_q\mathbf{p}_q^T-\gamma\mathbf{W}^{old}=(1-\gamma)\mathbf{W}^{old}+\alpha\mathbf{t}_q\mathbf{p}_q^T,\qquad 0<\gamma<1.\tag{7.45}\]
    它像一个平滑滤波器,更清楚地记住最近的输入。\(\gamma\to0\) 退化为标准规则;\(\gamma\to1\) 迅速遗忘、只记住最近的模式。衰减项还防止了权值无界增长。展开递推可见 \(\mathbf{W}\) 是历史外积的指数加权和,权重按 \((1-\gamma)^k\) 衰减。

    推导拆解:从 \(\mathbf{W}_0=\mathbf{0}\) 出发逐步代入。\(\mathbf{W}_1=\alpha\mathbf{t}_1\mathbf{p}_1^T\);\(\mathbf{W}_2=(1-\gamma)\alpha\mathbf{t}_1\mathbf{p}_1^T+\alpha\mathbf{t}_2\mathbf{p}_2^T\);\(\mathbf{W}_3=(1-\gamma)^2\alpha\mathbf{t}_1\mathbf{p}_1^T+(1-\gamma)\alpha\mathbf{t}_2\mathbf{p}_2^T+\alpha\mathbf{t}_3\mathbf{p}_3^T\)。规律是:\(k\) 期前的样本被乘了 \(k\) 次 \((1-\gamma)\)。若一直输入同一个外积 \(\mathbf{M}\),\(\mathbf{W}_t\) 趋于 \(\alpha\mathbf{M}\sum_{k\ge0}(1-\gamma)^k=\frac{\alpha}{\gamma}\mathbf{M}\)(几何级数求和),所以不会无界增长;取 \(\alpha=\gamma\) 时恰好收敛到 \(\mathbf{M}\) 本身,各权重之和为 1,这就是 EWMA。这和 RiskMetrics 的 \(\sigma_t^2=\lambda\sigma_{t-1}^2+(1-\lambda)r_t^2\) 完全同构,\(\lambda=1-\gamma\)。

  3. delta 规则:把目标换成"目标与实际输出之差":

    \[\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha(\mathbf{t}_q-\mathbf{a}_q)\mathbf{p}_q^T .\tag{7.46}\]
    它也叫 Widrow–Hoff 算法,调整权值以最小化均方误差(第 10 章),因此与最小化误差平方和的伪逆规则殊途同归。它的优点是每来一个新样本就能更新,而伪逆规则要等全部样本到齐才能一次算出;顺序更新使 delta 规则能适应变化的环境。

    白话解释:Hebb 与 delta 只差"\(\mathbf{t}\) 换成 \(\mathbf{t}-\mathbf{a}\)",含义却完全不同。Hebb 是"不管预测得怎样,每来一个样本都按目标加一点",所以权值会一直累加;delta 是"只按预测误差修正",预测对了(\(\mathbf{t}=\mathbf{a}\))就不动,类似分析师只在业绩超预期或低于预期时才调整盈利预测。单样本误差平方 \(\frac12(t-\mathbf{w}^T\mathbf{p})^2\) 对 \(\mathbf{w}\) 的梯度是 \(-(t-a)\mathbf{p}\),所以 delta 规则就是"沿负梯度走一小步",这是第 09、10 章的主线。因子相关时,delta 规则会自动把多算的部分减回来,最终收敛到回归解而不是 IC 加权解。

  4. 无监督 Hebb 规则:用实际输出代替目标,

    \[\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha\,\mathbf{a}_q\mathbf{p}_q^T .\tag{7.47}\]
    它比本章的有监督形式更直接地体现了 Hebb 假设。原书此处写"见第 13 章",按本版目录应为第 15 章(联想学习)。

滤波式的权值更新和可调学习率的思想会在第 10、12、15、16、18、19 章反复出现。


7.8 量化实战:Hebb 是 IC 加权,伪逆是回归

7.8.1 三组对应关系

伪逆规则 = OLS。截面因子收益回归、多因子模型中估计因子收益、Fama–MacBeth 每期回归,都是 \(\mathbf{W}=\mathbf{T}\mathbf{P}^+\),其中 \(\mathbf{P}\) 的列是样本(股票)、行是因子,属于 \(R<Q\) 的情形。P7.6 的增广 1 就是回归里的截距列。

Hebb 规则 = 交叉矩 / 相关系数加权。\(\mathbf{T}\mathbf{P}^T/Q\) 是输出与输入的样本交叉矩;因子标准化后,它与"每个因子与收益的相关系数"(IC)成正比。所以"按各因子 IC 加权合成"本质上是 Hebb 规则。它只在 \(\mathbf{P}\mathbf{P}^T/Q=\mathbf{I}\)(因子两两不相关、方差为 1)时与回归一致;因子相关时,式(7.14)的串扰项让一个本身无效、但与有效因子相关的因子也拿到权重。这就是为什么因子合成前要正交化(第 05 章),或者干脆用回归。

一个容易混淆的地方:联想记忆里 Hebb 规则精确的条件是原型(\(\mathbf{P}\) 的列)标准正交,\(\mathbf{P}^T\mathbf{P}=\mathbf{I}\);回归里 Hebb 等于 OLS 的条件是因子(\(\mathbf{P}\) 的行)标准正交,\(\mathbf{P}\mathbf{P}^T=\mathbf{I}\)。前者对应 \(R>Q\),后者对应 \(R<Q\),正好是伪逆的两种显式公式。

衰减 Hebb 规则 = EWMA;delta 规则 = 在线回归。\((1-\gamma)\mathbf{W}^{old}+\alpha\mathbf{t}\mathbf{p}^T\) 在 \(\alpha=\gamma\) 时就是指数加权移动平均的递推。自联想形式 \(\mathbf{W}\leftarrow(1-\gamma)\mathbf{W}+\gamma\mathbf{p}\mathbf{p}^T\) 正是 RiskMetrics 的 EWMA 协方差(日频常取 \(1-\gamma=0.94\))。\(\gamma\) 越大,对新信息反应越快,但估计噪声越大。delta 规则则是逐期更新的在线回归,能跟踪随时间变化的因子暴露。

7.8.2 代码

import numpy as np
np.set_printoptions(precision=4, suppress=True)
hardlims = lambda n: np.where(n >= 0, 1.0, -1.0)

# ---------- 原书 7.4–7.5 节 ----------
P = np.array([[0.5, 0.5], [-0.5, 0.5], [0.5, -0.5], [-0.5, -0.5]]); T = np.array([[1, 1], [-1, 1]])
W = T @ P.T
print("(7.16) W =\n", W, "\n W P =\n", W @ P)
P = np.array([[1, 1], [-1, 1], [-1, -1]], float); T = np.array([[-1, 1]], float)
Pn = P / np.linalg.norm(P, axis=0)
Wh = T @ Pn.T
print("(7.21) Hebb W =", Wh, " W p =", Wh @ Pn)
Wp = T @ np.linalg.pinv(P)
print("(7.38) pinv W =", Wp, " W p =", Wp @ P)

# ---------- 自联想记忆:6x5 数字(图案为本书自绘,仿照原书 7.6 节) ----------
digits = {
 "0": [".XXX.", "X...X", "X...X", "X...X", "X...X", ".XXX."],
 "1": [".XX..", "..X..", "..X..", "..X..", "..X..", ".XXX."],
 "2": ["XXXX.", "....X", "..XX.", ".X...", "X....", "XXXXX"]}
to_vec = lambda rows: np.array([[1.0 if c == "X" else -1.0 for c in r] for r in rows]).T.ravel()  # 按列扫描
Pd = np.column_stack([to_vec(v) for v in digits.values()])              # 30 x 3
print("prototype inner products:\n", Pd.T @ Pd)
W_hebb = Pd @ Pd.T
W_pinv = Pd @ np.linalg.pinv(Pd)                                        # T = P 的伪逆规则
def recall(W, p):
    return hardlims(W @ p)
def occlude(p, keep_rows):
    img = p.reshape(5, 6).T.copy(); img[keep_rows:, :] = -1.0; return img.T.ravel()
rng = np.random.default_rng(3)
for name, W in [("Hebb", W_hebb), ("pinv", W_pinv)]:
    res = []
    for k in range(3):
        p = Pd[:, k]
        ok50 = np.array_equal(recall(W, occlude(p, 3)), p)
        ok67 = np.array_equal(recall(W, occlude(p, 2)), p)
        noisy_ok = 0
        for _ in range(100):
            q = p.copy(); idx = rng.choice(30, 7, replace=False); q[idx] *= -1
            noisy_ok += np.array_equal(recall(W, q), p)
        res.append((ok50, ok67, noisy_ok))
    print(name, "(50%遮挡, 67%遮挡, 7像素噪声100次成功数):", res)

# ========== 量化 1:Hebb = 交叉矩(IC 加权),伪逆 = OLS ==========
Q, R = 2000, 3
C = np.array([[1, .7, 0], [.7, 1, 0], [0, 0, 1]])
X = rng.multivariate_normal(np.zeros(R), C, size=Q)             # 行=股票(回归记号)
beta = np.array([1.0, 0.0, 0.5])
y = X @ beta + rng.standard_normal(Q) * 2.0
P, T = X.T, y[None, :]                                          # 原书记号:P 为 R x Q
w_hebb = (T @ P.T / Q).ravel()                                  # = 样本交叉矩 X^T y / Q
w_pinv = (T @ np.linalg.pinv(P)).ravel()                        # R<Q:P^+ = P^T (P P^T)^{-1}
w_ols = np.linalg.lstsq(X, y, rcond=None)[0]
print("true beta:", beta, "\nHebb  w  :", w_hebb, "\npinv  w  :", w_pinv, "\nOLS   w  :", w_ols)
Xo = rng.multivariate_normal(np.zeros(R), C, size=Q); yo = Xo @ beta + rng.standard_normal(Q) * 2.0
for nm, w in [("Hebb", w_hebb), ("pinv", w_pinv)]:
    print("out-of-sample corr(pred, y) %s: %.4f" % (nm, np.corrcoef(Xo @ w, yo)[0, 1]))

# ========== 量化 2:带衰减的 Hebb 规则 = EWMA;delta 规则 = 在线回归 ==========
n = 1000
f = rng.standard_normal(n)
beta_t = np.where(np.arange(n) < 500, 1.0, -0.5)               # 第 500 期结构突变
r = beta_t * f + rng.standard_normal(n) * 0.5
gamma = alpha = 0.03
S_ff = S_rf = 0.0; w_delta = 0.0; lr = 0.03
path = []
for t in range(n):
    S_ff = (1 - gamma) * S_ff + alpha * f[t] * f[t]            # 衰减 Hebb(自联想):EWMA 方差
    S_rf = (1 - gamma) * S_rf + alpha * r[t] * f[t]            # 衰减 Hebb(有监督):EWMA 协方差
    e = r[t] - w_delta * f[t]
    w_delta += lr * e * f[t]                                    # delta / Widrow-Hoff 规则
    path.append((S_rf / S_ff, w_delta))
path = np.array(path)
full = np.linalg.lstsq(f[:, None], r, rcond=None)[0][0]
for t in [450, 520, 560, 650, 999]:
    print(f"t={t}: true={beta_t[t]:+.2f}  EWMA-Hebb ratio={path[t,0]:+.3f}  delta rule={path[t,1]:+.3f}  full-sample OLS={full:+.3f}")

运行输出:

(7.16) W =
 [[ 1.  0.  0. -1.]
 [ 0.  1. -1.  0.]] 
 W P =
 [[ 1.  1.]
 [-1.  1.]]
(7.21) Hebb W = [[0.     1.1547 0.    ]]  W p = [[-0.6667  0.6667]]
(7.38) pinv W = [[ 0.  1. -0.]]  W p = [[-1.  1.]]
prototype inner products:
 [[30.  4.  6.]
 [ 4. 30.  8.]
 [ 6.  8. 30.]]
Hebb (50%遮挡, 67%遮挡, 7像素噪声100次成功数): [(True, False, 91), (True, True, 82), (True, False, 87)]
pinv (50%遮挡, 67%遮挡, 7像素噪声100次成功数): [(True, False, 92), (True, True, 96), (True, False, 98)]
true beta: [1.  0.  0.5] 
Hebb  w  : [0.9339 0.5995 0.5177] 
pinv  w  : [ 0.9696 -0.0868  0.5497] 
OLS   w  : [ 0.9696 -0.0868  0.5497]
out-of-sample corr(pred, y) Hebb: 0.4550
out-of-sample corr(pred, y) pinv: 0.4740
t=450: true=+1.00  EWMA-Hebb ratio=+0.964  delta rule=+0.976  full-sample OLS=+0.296
t=520: true=-0.50  EWMA-Hebb ratio=+0.211  delta rule=+0.179  full-sample OLS=+0.296
t=560: true=-0.50  EWMA-Hebb ratio=-0.119  delta rule=-0.115  full-sample OLS=+0.296
t=650: true=-0.50  EWMA-Hebb ratio=-0.496  delta rule=-0.486  full-sample OLS=+0.296
t=999: true=-0.50  EWMA-Hebb ratio=-0.503  delta rule=-0.508  full-sample OLS=+0.296

解读:

  • 原书数字全部复现:(7.16)的精确回忆,(7.21)Hebb 的 ±0.6667,(7.38)伪逆的精确匹配。
  • 数字自联想(图案为本书自绘,与原书图案不同):50% 遮挡三个数字都能恢复;67% 遮挡只有"1"能恢复——与原书的定性结论一致。随机翻转 7 个像素时,Hebb 的成功率为 82%–91%,伪逆为 92%–98%。三个原型的内积为 4、6、8(不正交),Hebb 受串扰影响,伪逆去掉了相关性的影响,所以更稳。
  • 因子合成:真实模型中第二个因子无效(\(\beta_2=0\)),但它与第一个因子相关 0.7。Hebb(交叉矩/IC 加权)给了它约 0.60 的权重,几乎等于 \(0.7\times\beta_1\)——这就是串扰项;伪逆与 OLS 结果完全相同,第二个因子的权重接近 0。样本外,伪逆预测与真实收益的相关系数更高(0.474 对 0.455)。
  • 结构突变:前 500 期暴露为 +1,之后为 −0.5。全样本 OLS 给出一个两段混合的 +0.296,哪个时期都不对;衰减 Hebb(EWMA 协方差/EWMA 方差)和 delta 规则在突变后约 150 期内跟上了新值(\(\gamma=0.03\) 对应半衰期约 23 期,完全"忘掉"旧状态需要几个半衰期)。\(\gamma\) 和学习率的选择是"反应速度"与"估计噪声"的权衡,与第 06 册第 07a 章 RiskMetrics(EWMA 波动率)的衰减因子选择是同一个问题。

本章小结

有监督 Hebb 规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^T=\sum\mathbf{t}_q\mathbf{p}_q^T\) 把每对样本的外积累加起来。原型标准正交时它精确回忆,否则产生与原型间内积成正比的串扰误差。伪逆规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^+\) 最小化 \(\sum\|\mathbf{t}_q-\mathbf{W}\mathbf{p}_q\|^2\),不需要归一化:\(R>Q\) 时用 \((\mathbf{P}^T\mathbf{P})^{-1}\mathbf{P}^T\),精确拟合且范数最小;\(R<Q\) 时用 \(\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\),给出最小二乘解,即 OLS。\(\mathbf{P}^T\mathbf{P}=\mathbf{I}\) 时伪逆规则退化为 Hebb 规则。自联想记忆配合 hardlims 能从遮挡和噪声中恢复模式,但会出现伪模式;正交原型下 Hebb 矩阵在原型子空间的特征值为 \(R\)、正交补上为 0。偏置可以通过增广输入纳入,二值与双极表示可以互换。Hebb 规则的变体——学习率、衰减、delta 规则、无监督 Hebb——分别对应量化中的步长控制、EWMA 估计、在线回归和无监督学习。

概念 公式 / 要点
线性联想器 \(\mathbf{a}=\mathbf{W}\mathbf{p}\)
有监督 Hebb 规则 \(\mathbf{W}^{new}=\mathbf{W}^{old}+\mathbf{t}_q\mathbf{p}_q^T\),\(\mathbf{W}=\mathbf{T}\mathbf{P}^T\)
串扰 \(\mathbf{W}\mathbf{p}_k=\mathbf{t}_k+\sum_{q\ne k}\mathbf{t}_q(\mathbf{p}_q^T\mathbf{p}_k)\)
伪逆规则 \(\mathbf{W}=\mathbf{T}\mathbf{P}^+\),最小化 \(|\mathbf{T}-\mathbf{W}\mathbf{P}|^2\)
\(R>Q\),列满秩 \(\mathbf{P}^+=(\mathbf{P}^T\mathbf{P})^{-1}\mathbf{P}^T\),精确拟合、最小范数
\(R<Q\),行满秩 \(\mathbf{P}^+=\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\),最小二乘,等价 OLS
自联想 Hebb 特征结构 原型方向特征值 \(R\),正交补方向特征值 0
二值/双极换算 \(\mathbf{W}'=2\mathbf{W}\),\(\mathbf{b}=-\mathbf{W}\mathbf{1}\)
衰减规则 \(\mathbf{W}^{new}=(1-\gamma)\mathbf{W}^{old}+\alpha\mathbf{t}_q\mathbf{p}_q^T\)(EWMA)
delta 规则 \(\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha(\mathbf{t}_q-\mathbf{a}_q)\mathbf{p}_q^T\)
无监督 Hebb \(\mathbf{W}^{new}=\mathbf{W}^{old}+\alpha\mathbf{a}_q\mathbf{p}_q^T\)

练习

基础

  1. 用 Hebb 规则和伪逆规则分别为原书 P7.1 设计线性联想器,验证 \(\mathbf{W}^h\mathbf{p}_1=4\mathbf{t}_1\)、\(\mathbf{W}^p\mathbf{p}_1=\mathbf{t}_1\),并解释差异。
  2. 用 Hebb 规则设计无偏置、hardlims、4 输入 2 输出的感知机,识别 \(\mathbf{p}_1=[1,-1,1,1]^T\)、\(\mathbf{p}_2=[1,1,-1,1]^T\)、\(\mathbf{p}_3=[-1,-1,-1,1]^T\),目标取 \(\mathbf{t}_1=[-1,-1]^T\)、\(\mathbf{t}_2=[-1,1]^T\)、\(\mathbf{t}_3=[1,-1]^T\)。测试 \(\mathbf{p}_t=[1,-1,1,-1]^T\)。(原书 P7.4) 答案要点:\(\mathbf{W}=\begin{bmatrix}-3&-1&-1&-1\\1&3&-1&-1\end{bmatrix}\),\(\mathbf{a}=\mathrm{hardlims}([-2,-2]^T)=[-1,-1]^T=\mathbf{t}_1\),正确(\(\mathbf{p}_t\) 与 \(\mathbf{p}_1\) 的 Hamming 距离为 1,与另两者为 3)。
  3. \(\{[1,1]^T,1\}\)、\(\{[1,-1]^T,-1\}\):分别用 Hebb 和伪逆规则设计感知机,两者的判决有区别吗?(原书 E7.10) 答案要点:两个输入正交、长度相同,\(\mathbf{P}^T\mathbf{P}=2\mathbf{I}\),伪逆权值是 Hebb 权值的 \(1/2\),hardlims 输出完全相同。
  4. 证明:把 Hebb 自联想矩阵的对角线清零,\(\mathbf{W}=\mathbf{P}\mathbf{P}^T-Q\mathbf{I}\)(\(\pm1\) 正交原型),原型仍是特征向量,特征值变为 \(R-Q\)。(原书 E7.5) 提示:\(\mathbf{P}\mathbf{P}^T\) 的对角元都等于 \(Q\)(每个 \(p_{jq}^2=1\));\((\mathbf{P}\mathbf{P}^T-Q\mathbf{I})\mathbf{p}_k=R\mathbf{p}_k-Q\mathbf{p}_k\)。
  5. 按 P7.7 的公式,把练习 2 的网络改写成 \(\{0,1\}\) 二值输入、hardlim 输出的等价网络,写出 \(\mathbf{W}'\) 与 \(\mathbf{b}\)。 提示:\(\mathbf{W}'=2\mathbf{W}\),\(\mathbf{b}=-\mathbf{W}\mathbf{1}=[6,-2]^T\);输出端同样需要从 ±1 换成 0/1。

进阶

  1. 训练集 \(\{[2,4]^T,26\},\{[4,2]^T,26\},\{[-2,-2]^T,-26\}\),用线性联想器。(a) 用 Hebb 规则求权值;(b) 这里 \(R=2<Q=3\),用 \(\mathbf{P}^+=\mathbf{P}^T(\mathbf{P}\mathbf{P}^T)^{-1}\) 求伪逆权值;(c) 比较两者对训练点的拟合。(原书 E7.7) 答案要点:Hebb 权值 \(\mathbf{W}^h=\mathbf{T}\mathbf{P}^T=[208\ \ 208]\)。\(\mathbf{P}\mathbf{P}^T=\begin{bmatrix}24&20\\20&24\end{bmatrix}\),\(\mathbf{P}\mathbf{T}^T=[208,208]^T\),伪逆权值 \(\mathbf{W}^p=[52/11\ \ 52/11]\approx[4.73\ \ 4.73]\),对三个训练点输出 28.4、28.4、−18.9,是最小二乘意义下的最佳折中,不能精确拟合(三个方程、两个未知数)。Hebb 输出的量级完全不对(\([2,4]^T\) 处为 1248),但两者方向相同,若接 hardlims,决策边界都是 \(p_1+p_2=0\)。
  2. \(\{[1,0]^T,1\},\{[1,1]^T,-1\},\{[0,1]^T,1\}\):证明无偏置的感知机无法解决,再用增广输入和伪逆规则设计带偏置的网络,并检验是否全部分对。(原书 E7.6) 提示:增广后 \(\mathbf{P}\) 是 \(3\times3\) 可逆矩阵,伪逆即逆矩阵,线性联想器能精确输出目标,hardlims 后自然全部分对。
  3. 证明衰减规则 \(\mathbf{W}_t=(1-\gamma)\mathbf{W}_{t-1}+\gamma\mathbf{p}_t\mathbf{p}_t^T\)(\(\mathbf{W}_0=\mathbf{0}\))展开为 \(\mathbf{W}_t=\gamma\sum_{k=0}^{t-1}(1-\gamma)^k\mathbf{p}_{t-k}\mathbf{p}_{t-k}^T\),并求权重的半衰期。 答案要点:半衰期 \(h=\ln0.5/\ln(1-\gamma)\);\(1-\gamma=0.94\) 时约 11.2 期。
  4. 容量实验:仿照原书 E7.11,从"0""1"开始逐个增加存储的数字(可自绘到"6"),每次随机翻转 2、4、6 个像素各测若干次,画出错误率随存储数量变化的曲线,比较 Hebb 与伪逆。 提示:存储越多、原型越相关,Hebb 的串扰越严重;伪逆规则在原型线性无关时始终能精确存储,但抗噪声能力也会下降。
  5. 量化思考:你有 50 个高度相关的技术因子,打算按各自 IC 加权合成一个信号。根据本章的分析,这样做会出现什么问题?给出至少两种改进方案。 答案要点:串扰会把权重分给"沾了有效因子的光"的冗余因子,且相关因子组被重复计权;可先正交化或做 PCA 再加权,或用带正则化的回归(岭回归)求权重。

原书推荐习题:P7.1、P7.6(Hebb 与伪逆对比、增广偏置);P7.5、E7.5、E7.8(Hebb 矩阵的特征结构);E7.7、E7.9(两种伪逆情形下的边界比较);E7.11(联想记忆容量实验)。


原书对照

本章内容 原书章节 PDF 页码
7.1 Hebb 假设 Objectives、Theory: Hebb 生平与假设 p.194–196
7.2 线性联想器与 Hebb 规则 Linear Associator、The Hebb Rule p.196–198
7.3 性能分析 Performance Analysis p.198–200
7.4 伪逆规则 Pseudoinverse Rule p.200–203
7.5 自联想记忆 Application p.203–205
7.7 变体 Variations of Hebbian Learning p.205–206
结果汇总 Summary of Results p.207–208
7.4.4、7.5、7.6 中的例题 Solved Problems P7.1–P7.7 p.209–221
结语、延伸阅读 Epilogue、Further Reading p.222–223
练习 Exercises E7.1–E7.11 p.224–227

原书配套演示:nnd7sh(Hebb 自联想记忆)。伪逆理论的主要参考是 Albert《Regression and the Moore-Penrose Pseudoinverse》。