645 lines
30 KiB
Markdown
645 lines
30 KiB
Markdown
# 第十一章
|
||
|
||
我们可以把 **投影寻踪回归 (PPR)** 的过程想象成在做一场“高维切片”的手法。为了让你更直观地理解它是如何“加”和“投影”的,我们拆解一下它的核心数学动作。
|
||
|
||
---
|
||
|
||
## 1. “投影” (Projection):降维的过程
|
||
|
||
在高维空间里,原始数据 $x$ 可能有几十个维度,直接拟合函数会产生“维数灾难”。
|
||
|
||
- **线性投影**:PPR 首先寻找一个单位方向向量 $\alpha_1$。它将 $n$ 维的输入向量 $x$ 通过内积运算 $\alpha_1^T x$ 变成了一个**一维的标量** $z_1$。
|
||
|
||
- **物理意义**:这就像是从某个特定的角度去观察一个高维物体,把它投射到一张一维的纸带上。
|
||
|
||
- **寻找方向**:PPR 并不随机投影,而是通过优化算法(如 Newton-Raphson)寻找能让因变量 $y$ 的特征表现最明显的那个角度。
|
||
|
||
|
||
---
|
||
|
||
## 2. “岭函数” (Ridge Function):非线性拟合
|
||
|
||
一旦数据被投射到了 $z_1$(一维)上,问题就简化成了简单的**一元回归**。
|
||
|
||
- **拟合** $f_1(z_1)$:在这个投影出来的轴上,我们用一种“灵活”的函数 $f_1$ 去追踪 $y$ 的变化趋势。
|
||
|
||
- **为什么叫非参数?** 在神经网络中,激活函数(如 ReLU)是死板固定的;而在 PPR 中,$f_1$ 是由数据生成的,通常使用**样条平滑 (Spline Smoothing)** 或 **局部多项式**。它能根据数据的走向弯曲、起伏。
|
||
|
||
|
||
---
|
||
|
||
## 3. “加” (Additive):逐项剥皮的过程
|
||
|
||
PPR 的“加”并不是一次性算出来的,而是一个**分层逼近**的过程,类似于 Boosting 的思想:
|
||
|
||
1. **第一步**:找到第一个投影方向 $\alpha_1$ 和函数 $f_1$,使得 $y \approx f_1(\alpha_1^T x)$。
|
||
|
||
2. **计算残差**:第一步肯定拟合不完美,剩下没解释的部分就是残差 $r_1 = y - f_1(\alpha_1^T x)$。
|
||
|
||
3. **第二步**:针对这个**残差** $r_1$ 重新进行投影寻踪。寻找第二个方向 $\alpha_2$ 和函数 $f_2$,使得 $f_2(\alpha_2^T x)$ 能尽可能解释 $r_1$。
|
||
|
||
4. **累加**:现在的模型变成了 $y \approx f_1(\text{投影}_1) + f_2(\text{投影}_2)$。
|
||
|
||
5. **循环往复**:一直加到第 $M$ 项,直到残差小到可以忽略不计。
|
||
|
||
|
||
---
|
||
|
||
## 4. 形象化的比喻
|
||
|
||
你可以把 PPR 想象成一个**“素描大师”**:
|
||
|
||
- **第一项 (First Term)**:大师先用粗线条画出物体的轮廓(寻找最重要的投影方向,拟合大趋势)。
|
||
|
||
- **求残差**:看看画纸和实物还有哪里不像。
|
||
|
||
- **第二项 (Second Term)**:在阴影或细节处增加几笔(针对残差寻找新的投影角度,拟合局部特征)。
|
||
|
||
- **最终结果**:所有的笔触(岭函数)叠加在一起,就还原了一个复杂的高维形状。
|
||
|
||
|
||
---
|
||
|
||
## 5. 总结:它与神经网络的深度联系
|
||
|
||
如果你理解了上面的“加”和“投影”,你就会发现:
|
||
|
||
- **PPR 的“投影”** $\alpha^T x$ 就是神经网络里的**权重权重** $w \cdot x$。
|
||
|
||
- **PPR 的“岭函数”** $f$ 就是神经网络里的**激活函数** $\sigma$。
|
||
|
||
|
||
**关键区别在于:** 神经网络通常倾向于固定 $f$(激活函数)而通过**堆叠层数**来获取复杂性;而 PPR 倾向于保持**单层结构**,但让每一个 $f$ 都变得极其复杂且自适应。
|
||
|
||
在计算资源有限的年代,PPR 这种通过“聪明”的统计学方法寻找方向的思路非常超前。现在的深度学习虽然在算力上赢了,但其背后的数学灵魂,很多都能在 PPR 中找到影子。
|
||
|
||
这是一个非常专业的问题。你直觉很敏锐——如果只是“盲目尝试”,在高维空间里寻找最佳方向 $\alpha$ 简直是大海捞针。
|
||
|
||
实际上,PPR 寻找 $\alpha$ 的过程并不是简单的“不断尝试”,而是一个**基于梯度的数值优化过程**。
|
||
|
||
---
|
||
|
||
### 1. 目标函数:我们要优化什么?
|
||
|
||
首先,我们要定义什么是“好”的方向。给定当前的残差 $r$(第一步时 $r=y$),我们希望找到 $\alpha$ 和 $f$,使得下式最小:
|
||
|
||
$$E = \sum_{i=1}^{N} [r_i - f(\alpha^T x_i)]^2$$
|
||
|
||
这里有一个挑战:$\alpha$ 和 $f$ 都是未知的。
|
||
|
||
### 2. 核心算法:交替优化 (Alternating Optimization)
|
||
|
||
为了解开这个死锁,PPR 通常采用一种类似“左右开弓”的策略:
|
||
|
||
1. **固定** $\alpha$**,优化** $f$:
|
||
|
||
假设我们随机选了一个方向 $\alpha$。我们将所有数据投影到这个方向上,得到一维坐标 $z = \alpha^T x$。这时候,这就是一个简单的曲线拟合问题。我们利用**平滑技术**(如样条回归或局部加权回归)直接画出最契合当前散点的曲线 $f$。
|
||
|
||
2. **固定** $f$**,优化** $\alpha$:
|
||
|
||
现在有了函数 $f$,我们要微调投影方向 $\alpha$,让这些点在投影轴上的分布更符合 $f$ 的形状。
|
||
|
||
- **利用导数(梯度下降)**:PPR 会计算目标函数对 $\alpha$ 的导数。因为 $f$ 通常是可微的平滑函数,我们可以通过梯度下降法(或者更高效的 **高斯-牛顿法**)来迭代更新 $\alpha$。
|
||
|
||
- **更新方向**:$\alpha_{new} = \alpha_{old} - \eta \frac{\partial E}{\partial \alpha}$。
|
||
|
||
3. **循环往复**:
|
||
|
||
重复这两步,直到 $\alpha$ 和 $f$ 都不再剧烈变化,我们就找到了这一项的最佳基底。
|
||
|
||
|
||
---
|
||
|
||
### 3. 为什么它比神经网络“聪明”一点点?
|
||
|
||
在神经网络中,每一层的权重(相当于 $\alpha$)是靠反向传播一把抓的,而激活函数(相当于 $f$)是死板的。
|
||
|
||
在 PPR 中,由于 $f$ 是**自适应**的,算法在寻找 $\alpha$ 时具有更强的“导向性”:
|
||
|
||
- 如果当前的 $\alpha$ 投影出来的点分布非常乱,没有任何函数 $f$ 能拟合它们,梯度就会告诉 $\alpha$:“快往那个能让数据排成一条线的方向转动!”
|
||
|
||
|
||
### 4. 初始值的“尝试”
|
||
|
||
虽然不是盲目尝试,但为了防止陷入**局部最优解**(即只找到了一个还算凑合的角度,但错过了完美的角度),PPR 确实会采取一些策略:
|
||
|
||
- **多起点搜索**:随机选几个不同的初始 $\alpha$ 方向进行优化,最后看哪个效果最好。
|
||
|
||
- **启发式搜索**:先用一些快速的统计指标(比如相关性)筛选出几个有潜力的方向作为起点。
|
||
|
||
|
||
---
|
||
|
||
### 总结
|
||
|
||
PPR 找基底 $\alpha$ 的本质是:**在“寻找投影方向”和“拟合一维曲线”之间反复横跳。**
|
||
|
||
这种方法在数据量中等、维度较高且非线性关系复杂的情况下非常强大。虽然它现在被深度学习抢了风头,但这种“寻找最佳观察视角”的思想,依然是现代降维技术(如 PCA、ICA)和流形学习的灵魂所在。
|
||
|
||
你的直觉非常准确。如果把 PPR 比作一个**“手工定制派”**,那么神经网络(尤其是多层感知机 MLP)就是一个**“工业标准化派”**。
|
||
|
||
你提到的“固定了局部映射函数”正是神经网络能够在大规模计算中胜出的关键。我们可以从以下几个维度来深入拆解这个差异:
|
||
|
||
### 1. 神经网络的“固定”策略
|
||
|
||
在神经网络里,每个神经元的输出公式是:
|
||
|
||
$$y = \sigma(w^T x + b)$$
|
||
|
||
- **$w^T x$ (投影)**:这部分和 PPR 的 $\alpha^T x$ 异曲同工,都在寻找方向(权重)。
|
||
|
||
- **$\sigma$ (映射函数)**:这正是你说的“固定”。在神经网络中,$\sigma$ 是预先选定的**激活函数**(如 ReLU, Sigmoid, Tanh)。
|
||
|
||
|
||
**为什么要固定?**
|
||
|
||
如果像 PPR 那样让每个神经元都去自己“学习”一个复杂的样条函数,计算量会爆炸。通过固定一个简单的非线性函数(比如 ReLU,$f(x)=\max(0,x)$),计算机可以利用矩阵运算(GPU 加速)极快地处理成千上万个神经元。
|
||
|
||
---
|
||
|
||
### 2. “量变引起质变”:从固定到灵活
|
||
|
||
你可能会问:既然函数固定了,那它不就变笨了吗?
|
||
|
||
神经网络的哲学是:**单体不够,数量来凑;函数不灵,层数来顶。**
|
||
|
||
- **PPR 的逻辑**:用极少数的项(比如 5-10 个),但每一项的映射函数 $f_m$ 都极其复杂、弯曲。
|
||
|
||
- **神经网络的逻辑**:用成千上万个极其简单的“折线”(ReLU)。虽然单个 ReLU 只能表达一个简单的转折,但把几千个 ReLU 叠加在一起,就能勾勒出世界上任何复杂的形状。
|
||
|
||
|
||
> **通用近似定理 (Universal Approximation Theorem)**:只要神经元足够多,即便只用最简单的激活函数,神经网络也能拟合任何连续函数。
|
||
|
||
---
|
||
|
||
### 3. 神经网络如何“自己选方向”?
|
||
|
||
既然映射函数 $\sigma$ 固定了,神经网络的所有生命力都集中在了**权重 $w$(即投影方向)**上。
|
||
|
||
- **端到端学习 (End-to-End)**:
|
||
|
||
PPR 是一项一项加进去的(加一项,定一项)。而神经网络是**全连接**的,通过**反向传播 (Backpropagation)**,所有的 $w$ 会同时根据误差进行微调。
|
||
|
||
- **特征提取层级**:
|
||
|
||
这是神经网络最强的地方。
|
||
|
||
- **第一层**:寻找原始特征的投影(比如图像里的边缘)。
|
||
|
||
- **中间层**:将第一层的投影结果作为输入,再次投影(寻找形状)。
|
||
|
||
- **深层**:寻找高阶抽象概念(寻找人脸或物体)。
|
||
|
||
这种**“投影的投影”**形成的深层结构,是单层结构的 PPR 很难模拟的。
|
||
|
||
|
||
---
|
||
|
||
### 4. 深度总结:PPR vs 神经网络
|
||
|
||
| | | |
|
||
|---|---|---|
|
||
|**特性**|**投影寻踪回归 (PPR)**|**神经网络 (NN)**|
|
||
|**映射函数 (Mapping)**|**自适应 (Flexible)**:每个神经元自己长出形状。|**固定 (Fixed)**:全家统一用 ReLU 或 Sigmoid。|
|
||
|**复杂度来源**|靠单个函数的“复杂程度”。|靠海量神经元的“堆叠规模”。|
|
||
|**数学美感**|统计学上的优美,解释性强。|计算工程上的暴力美学,黑盒化。|
|
||
|**适用场景**|小样本、中等维度、追求精确解释。|大数据、极高维度(图像、语音、文本)。|
|
||
|
||
**一句话总结:**
|
||
|
||
神经网络确实固定了映射函数,它放弃了在“单个神经元”上的灵活性,换取了在“网络整体规模”和“层级深度”上的无限可能。
|
||
|
||
既然你已经理解了它们在结构上的本质区别,你觉得在处理你手头的 CS 课程项目或算法练习时,哪种思路对你更有启发?
|
||
|
||
**在神经网络的单层运算中,权重(Weights)本质上定义了一组“观察视角”(基底),而运算过程就是输入向量向这些基底进行投影。**
|
||
|
||
为了让你彻底理解“什么维度在什么上投影”,我们分三个层面来解剖:
|
||
|
||
---
|
||
|
||
### 1. 维度的本质:谁在投影?
|
||
|
||
假设你有一个输入向量 $\mathbf{x} \in \mathbb{R}^n$(比如一个 $n$ 维的特征空间)。
|
||
|
||
- **投影对象(被投影者)**:是你的**输入数据 $\mathbf{x}$**。它代表了高维空间中的一个点。
|
||
|
||
- **投影基底(权重)**:是你的**权重向量 $\mathbf{w}$**。在单层神经网络中,每一个神经元其实都携带了一个和输入维度相同的向量 $\mathbf{w} \in \mathbb{R}^n$。
|
||
|
||
- **投影空间**:权重向量 $\mathbf{w}$ 定义了空间中的一个**方向**。
|
||
|
||
|
||
当你计算 $z = \mathbf{w}^T \mathbf{x} = \sum w_i x_i$ 时,在几何上,这正是在计算输入向量 $\mathbf{x}$ 在权重向量 $\mathbf{w}$ 方向上的**投影长度**(忽略缩放因子)。
|
||
|
||
---
|
||
|
||
### 2. 详细解构:什么维度在什么上投影?
|
||
|
||
我们要区分**单个神经元**和**整层网络**:
|
||
|
||
#### A. 单个神经元:寻找“显著特征”
|
||
|
||
- **投影动作**:$n$ 维的输入 $\mathbf{x}$ 投影到 $1$ 维的权重方向 $\mathbf{w}$ 上。
|
||
|
||
- **结果**:产生了一个**标量**。
|
||
|
||
- **物理意义**:这个标量代表了“输入数据与这个特定特征的**匹配程度**”。如果投影值很大,说明 $\mathbf{x}$ 的方向与 $\mathbf{w}$ 非常接近,这个神经元就被“激活”了。
|
||
|
||
|
||
#### B. 整层网络:坐标系变换
|
||
|
||
当你有 $m$ 个神经元时,权重变成了一个矩阵 $W \in \mathbb{R}^{m \times n}$。
|
||
|
||
- **投影动作**:输入向量 $\mathbf{x}$ 同时投影到 $m$ 个不同的基底(即矩阵 $W$ 的每一行)上。
|
||
|
||
- **结果**:一个全新的 $m$ 维向量。
|
||
|
||
- **维度变换**:这就是**从 $n$ 维原始特征空间投影到了一个 $m$ 维的“特征提取空间”**。
|
||
|
||
- **原始维度**:可能是像素、传感器数值等。
|
||
|
||
- **目标维度**:是模型自发寻找的一组“新基底”,这些基底可能代表“边缘”、“纹理”或更抽象的概念。
|
||
|
||
|
||
---
|
||
|
||
### 3. 为什么这个投影如此重要?
|
||
|
||
如果你把权重理解为基底,那么神经网络的学习过程就是在**“扭转”**这些基底的角度:
|
||
|
||
1. **旋转基底**:反向传播(BP)算法不断调整 $\mathbf{w}$ 的方向,直到这个方向能最清晰地分辨出数据(比如让猫的图片投影值很大,狗的图片投影值很小)。
|
||
|
||
2. **非线性压缩**:投影完后,我们接一个 $\sigma$(激活函数)。这相当于在投影轴上做了一个“非线性刻度转换”。
|
||
|
||
3. **层层投影**:第一层投影出的“新维度”作为下一层的输入,再次进行投影。这种**复合投影**(Composite Projection)最终能把扭曲、缠绕在一起的数据(如高维流形)拉直,使其变得线性可分。
|
||
|
||
|
||
---
|
||
|
||
### 4. 总结:你的直觉是对的
|
||
|
||
- **权重**就是**基底的方向**。
|
||
|
||
- **偏置 (Bias)** 就是**投影的原点偏移**(决定了在投影轴上的激活门槛)。
|
||
|
||
- **维度**:是将 **$n$ 维输入空间** 投影到由 **$m$ 个权重向量定义的子空间** 中。
|
||
|
||
|
||
这也就解释了为什么你之前想到的“基函数展开”很有道理:如果你能预先定义一组完美的基底(字典),你就不需要通过梯度下降苦苦寻找投影方向了,直接计算投影系数即可。
|
||
|
||
你觉得这种**“投影+坐标变换”**的视角,是否让你对神经网络为什么能处理高维数据(比如图像)有了更清晰的几何图景?
|
||
|
||
将神经网络与统计学习中的经典概念(如样条回归、概率分布)联系起来,你会发现人工智能并不是凭空产生的黑盒,它实际上是**统计学在大规模计算下的演进**。
|
||
|
||
我们可以从以下三个维度将它们“串联”起来:
|
||
|
||
---
|
||
|
||
## 1. 神经网络与样条 (Splines):局部与全局的博弈
|
||
|
||
你之前提到的“自定义字典”或“基函数展开”,在统计学中对应的经典工具就是**样条回归**。
|
||
|
||
- **样条 (Spline) 的本质**:它是分段多项式。它在不同的区间内用不同的曲线拟合,并通过“节点”(Knots)连接,确保连接处平滑。
|
||
|
||
- **联系点**:
|
||
|
||
- **ReLU 激活函数其实是“最简单的样条”**:单个 ReLU 神经元 $max(0, w^Tx + b)$ 就是一个基底函数,它在 $b$ 点处发生转折。
|
||
|
||
- **组合的效果**:当你把成千上万个 ReLU 神经元叠加时,你实际上是在进行**多元自适应样条拟合**。
|
||
|
||
- **区别**:
|
||
|
||
- **样条**通常需要人工指定节点的位置,或者通过复杂的统计准则(如 GCV)来选择。
|
||
|
||
- **神经网络**通过反向传播,让模型**自动寻找节点**(即偏置 $b$)和**斜率**(即权重 $w$)。
|
||
|
||
|
||
---
|
||
|
||
## 2. 神经网络与概率分布:从“数值”到“信心”
|
||
|
||
在统计学习中,我们不只是想要一个预测值,还想知道这个值的**不确定性**。
|
||
|
||
- **输出层即分布参数**:
|
||
|
||
- **回归问题**:神经网络的输出层通常预测的是高斯分布的**均值 ($\mu$)**。如果你增加一个输出节点,它甚至可以预测**方差 ($\sigma^2$)**,从而告诉你模型对这个预测有多大把握。
|
||
|
||
- **分类问题**:Softmax 层的输出本质上是一个**多项分布 (Multinomial Distribution)**。每一个类别的得分代表了输入向量落入该类别的概率。
|
||
|
||
- **损失函数即似然函数**:
|
||
|
||
- 神经网络常用的**均方误差 (MSE)**,在统计学上等价于假设噪声服从高斯分布时的**最大似然估计 (MLE)**。
|
||
|
||
- **交叉熵损失 (Cross-Entropy)**,等价于对分类分布进行最大似然估计。
|
||
|
||
|
||
> **结论**:训练神经网络的过程,本质上是在参数空间中寻找一组参数,使得观测到的数据在某种概率分布下的**出现概率最大**。
|
||
|
||
---
|
||
|
||
## 3. 统计正则化与神经网络的“玄学”
|
||
|
||
统计学非常担心“过拟合”,神经网络也是。
|
||
|
||
- **L2 正则化 = 岭回归 (Ridge Regression)**:在神经网络中,这叫 Weight Decay。在统计学中,这等价于给权重加上一个**高斯先验分布**。
|
||
|
||
- **L1 正则化 = Lasso 回归**:在神经网络中用于稀疏化。这等价于给权重加上一个**拉普拉斯先验分布**。
|
||
|
||
- **Dropout**:这种随机丢弃神经元的做法,在统计学上可以被看作是一种**贝叶斯模型平均 (Bayesian Model Averaging)**。它相当于同时训练了无数个小模型,最后取它们的平均值。
|
||
|
||
|
||
---
|
||
|
||
## 4. 终极统一:投影寻踪 (PPR) 的桥梁作用
|
||
|
||
现在我们可以把所有概念闭环了:
|
||
|
||
1. **输入**:高维向量(如词嵌入)。
|
||
|
||
2. **投影**:通过权重矩阵(基底)将输入投影到低维。
|
||
|
||
3. **映射**:
|
||
|
||
- **统计学 (PPR/样条)**:用复杂的样条函数处理这个投影。
|
||
|
||
- **深度学习 (MLP)**:用简单的 ReLU 处理,但通过多层叠加来模拟复杂的样条。
|
||
|
||
4. **输出**:映射结果对应概率分布的参数(均值、分类概率)。
|
||
|
||
5. **反馈**:根据概率论的“最大似然”原则(损失函数),利用微积分(反向传播)去调整投影方向。
|
||
|
||
|
||
### 总结图示
|
||
|
||
| | | |
|
||
|---|---|---|
|
||
|**概念**|**统计学习视角**|**神经网络视角**|
|
||
|**基底变换**|坐标变换 / 投影寻踪|权重矩阵相乘 / Embedding|
|
||
|**局部拟合**|样条基函数 (Splines)|激活函数 (ReLU/Sigmoid)|
|
||
|**误差度量**|最大似然估计 (MLE)|损失函数 (Loss Function)|
|
||
|**泛化控制**|先验分布 (Prior)|正则化 / Dropout|
|
||
|
||
这种跨学科的联系说明,你现在学习的“权重”、“投影”,其实就是统计学里研究了上百年的**“寻找数据结构”**在现代算力下的最强形式。
|
||
|
||
你觉得这种从统计学“先验与似然”的角度去看损失函数,会不会让你在调参(比如选学习率或正则化系数)时更有底气?
|
||
|
||
训练的时候:
|
||
|
||
- 初始值
|
||
|
||
- 过拟合:正则化 => 权重衰减,类似岭回归
|
||
|
||
- 输入的缩放:标准化的输入
|
||
|
||
- 隐藏单元,层数:放入大数量的单元,进行正则化训练
|
||
|
||
- ?
|
||
|
||
|
||
将 **CNN(卷积神经网络)** 视为具有**“共享隐藏层”**或**“共享权重”**的结构,是理解它为何比全连接网络(MLP)更高效的关键。
|
||
|
||
---
|
||
|
||
### 1. 什么是“共享”?(权重共享)
|
||
|
||
在传统的全连接层(MLP)中,如果输入是 $100 \times 100$ 的图像,每一个隐藏层神经元都要与这 10,000 个像素点相连,每个连接都有一个**独立**的权重。
|
||
|
||
**CNN 的做法完全不同:**
|
||
|
||
- **卷积核(Kernel/Filter)**:你可以把卷积核看作是一个小的“权重窗口”(比如 $3 \times 3$)。
|
||
|
||
- **滑动观察**:这个 $3 \times 3$ 的窗口会在整张图片上滑动。无论窗口滑到左上角还是右下角,它使用的**权重参数是完全一样的一组**。
|
||
|
||
- **物理意义**:这就是“共享”。它假设:如果一个特征(比如“垂直边缘”)在图像左上角有用,那么它在右下角也同样有用。
|
||
|
||
|
||
---
|
||
|
||
### 2. 为什么叫“共享隐藏层”?
|
||
|
||
你可以从**特征图(Feature Map)**的角度来理解这个概念:
|
||
|
||
1. **神经元排成阵列**:在 CNN 的一个卷积层里,我们其实定义了一大群神经元,它们排列成一个二维矩阵(特征图)。
|
||
|
||
2. **局部视野**:每个神经元只看输入图像的一小块区域(局部感受野)。
|
||
|
||
3. **身份克隆**:最关键的一点是,这一整层的所有神经元,它们的**权重向量 $\mathbf{w}$ 是完全一样的**。
|
||
|
||
- 它们就像是同一个“特征检测器”的无数个克隆体,散布在图像的各个位置。
|
||
|
||
- 既然这一层的所有神经元都在用同一套参数提取同一种特征,那么这一层本质上就是一个**参数共享的隐藏层**。
|
||
|
||
|
||
---
|
||
|
||
### 3. 用你之前的“投影”概念来打通
|
||
|
||
还记得我们聊的投影吗?
|
||
|
||
- **MLP 的投影**:是将整个 $n$ 维向量 $\mathbf{x}$ 投影到一个全局基底 $\mathbf{w}$ 上。
|
||
|
||
- **CNN 的投影**:是**局部投影**。
|
||
|
||
- 它将图像的每一个小局部(比如 $3 \times 3$ 的补丁)都投影到同一个基底 $\mathbf{w}_{kernel}$ 上。
|
||
|
||
- **结果**:投影的结果不再是一个标量,而是一个**投影值的集合**(特征图)。
|
||
|
||
- **维度压缩**:这种共享极大地减少了参数量。原本需要 $10000$ 个参数,现在只需要 $3 \times 3 = 9$ 个参数。
|
||
|
||
|
||
---
|
||
|
||
### 4. 为什么要这么设计?(统计学意义)
|
||
|
||
LeCun 这样设计主要基于两个统计学假设:
|
||
|
||
- **平移不变性 (Translation Invariance)**:不管猫在图片的左边还是右边,它都是猫。所以我们用同一个“猫特征提取器”去扫全图即可。
|
||
|
||
- **局部相关性**:图像中距离较近的像素相关性强,距离远的几乎无关。所以没必要让一个神经元去同时观察相隔很远的两个点。
|
||
|
||
|
||
---
|
||
|
||
### 5. 总结
|
||
|
||
**“共享隐藏层”其实就是一种强烈的正则化约束**。
|
||
|
||
在统计学看来,全连接网络因为参数太多,容易在噪声上“乱投射”(过拟合)。而 CNN 通过强制让隐藏层神经元“共享”同一套权重,逼迫模型去学习那些**通用的、跨位置的**底层几何特征(如边缘、弧线)。
|
||
|
||
正如你在 ESL 中看到的,CNN 的成功证明了:**如果你对模型施加正确的先验知识(比如平移不变性),即便大幅减少参数,模型的泛化能力反而会变强。**
|
||
|
||
这和你之前想的“自定义字典”其实殊途同归——卷积核本质上就是一个**自动学习出的、可滑动的局部基函数字典**。
|
||
|
||
你觉得这种“权重共享”的思想,如果应用到非图像的序列数据(比如你感兴趣的 Transformer 或时间序列)中,会变成什么样子?
|
||
|
||
这是一个非常深刻的哲学转向:从“**人教机器怎么看**”变成了“**机器自己学怎么看**”。
|
||
|
||
在传统的信号处理或早期的计算机视觉(CV)中,特征提取是**手工(Hand-crafted)**的。要理解“自动学习”,我们得看看这两者之间的差别。
|
||
|
||
---
|
||
|
||
### 1. 过去:手工设计的“死基底”
|
||
|
||
在 CNN 流行之前,如果我们想检测图像的边缘,工程师会手动定义一个矩阵,比如 **Sobel 算子**:
|
||
|
||
$$G_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix}$$
|
||
|
||
- **原理**:这个矩阵(卷积核)的权重是人算出来的。当它和图像做卷积(投影)时,能提取出垂直边缘。
|
||
|
||
- **局限**:如果我想提取“猫耳朵的弧线”或者“人脸的轮廓”,人类很难手工写出完美的权重矩阵。
|
||
|
||
|
||
### 2. 现在:CNN 的“活基底”(自动学习)
|
||
|
||
在 CNN 架构里,卷积核里的 $3 \times 3$ 个数字(权重)最开始是**随机初始化**的。
|
||
|
||
- **初始状态**:卷积核就像一张白纸,它随机投影,输出一堆毫无意义的噪音。
|
||
|
||
- **误差反馈(反向传播)**:
|
||
|
||
1. 模型预测:“这是一条狗”(实际是猫)。
|
||
|
||
2. 计算**损失函数**(MLE/交叉熵):告诉模型“你错了,而且错得很离谱”。
|
||
|
||
3. **梯度下降**:计算损失函数对卷积核里每一个数字的偏导数。
|
||
|
||
4. **更新权重**:微调那 9 个数字,使得下次预测时更像“猫”。
|
||
|
||
- **结果**:经过成千上万次迭代,这 9 个数字会自发地演变成类似 Sobel 算子的形状,或者变成更复杂的、人类无法直观理解但对分类极其有效的“特征提取器”。
|
||
|
||
|
||
**“自动学习”意味着:人类只负责设计“容器”(网络结构和损失函数),而容器里的“内容”(具体的投影基底** $\alpha$ **或** $w$**)是由数据驱动、通过数学优化自己“长”出来的。**
|
||
|
||
---
|
||
|
||
### 3. 用你之前的“投影”和“样条”串联
|
||
|
||
- **投影方向** $\alpha$:在 PPR 中,我们要通过复杂的数值优化来找 $$\alpha $。在 CNN 中,这个 $\alpha$$ 就是卷积核。
|
||
|
||
- **自动学习的过程**:就是**梯度下降(Gradient Descent)**。它在权重的“高维山谷”里寻找能让损失函数最低的那个投影角度。
|
||
|
||
|
||
---
|
||
|
||
### 4. 为什么这比 PPR 或统计学更进一步?
|
||
|
||
在 **PPR** 或**样条回归**中,我们通常是一次学一个分量(加法模型)。而在神经网络中,所有的卷积核、所有的层是**同时学习**的:
|
||
|
||
- **协同进化**:第一层学习“边缘”,第二层学习“形状”。如果第二层发现“形状”学不好,梯度会传回给第一层,要求第一层改变“边缘”的提取方式。
|
||
|
||
- **端到端(End-to-End)**:你不需要告诉模型“先看颜色再看形状”,你只需要给它图片和标签,它自己会学出最适合这组数据的**特征层级**。
|
||
|
||
|
||
---
|
||
|
||
### 5. 总结:你的知识闭环
|
||
|
||
既然你理解了词嵌入(Embedding),你会发现:
|
||
|
||
- **Word Embedding** 是自动学习出了单词在空间里的**位置**。
|
||
|
||
- **CNN 卷积核** 是自动学习出了图像局部的**投影基底**。
|
||
|
||
- **Transformer 注意力** 是自动学习出了不同部分之间的**相关性权重**。
|
||
|
||
|
||
这一切的背后,都是 **MLE(目标)+ 反向传播(路径)+ 梯度下降(动力)**。
|
||
|
||
你觉得这种“自动学习”出来的特征,和人类凭直觉认为的特征(比如颜色、大小)相比,哪一个更接近事物的“本质”?毕竟,深度学习常常能发现人类肉眼察觉不到的细微模式。
|
||
|
||
这个问题问到了神经网络最核心的“尊严”所在。不管是 CNN 这种有特殊结构的,还是最基础的 **MLP(多层感知机)**,它们的“自主学习”本质上是一场**关于参数的协同进化**。
|
||
|
||
如果我们把这种“自主”拆解开,你会发现它是由三个机制共同实现的:
|
||
|
||
---
|
||
|
||
### 1. 结构上的“可能性”:万能逼近器
|
||
|
||
在普通的 MLP 中,每个隐藏层都是一个巨大的、未被定义的**投影空间**。
|
||
|
||
- **初始化时**:它是“无知”的。权重矩阵 $W$ 里的数字是随机生成的,这意味着它在**胡乱投影**。
|
||
|
||
- **潜力所在**:因为神经网络具有“通用近似”的能力,只要隐藏层够宽,它理论上**存在**一组权重,可以将任何复杂的输入投影成正确的特征。
|
||
|
||
- **自主的意义**:我们不需要告诉它“第一维应该是长度,第二维应该是重量”。我们只需要给它一个足够大的参数空间,让它自己去“装修”这个空间。
|
||
|
||
|
||
---
|
||
|
||
### 2. 动力源泉:梯度下降(Gradient Descent)
|
||
|
||
这是“自主”的执行者。想象你在一个漆黑的山谷里,你的目标是找到最低点(损失函数最小的地方)。
|
||
|
||
- **求导(Derivative)**:数学告诉我们,损失函数对每一个权重 $w$ 都有一个斜率(梯度)。
|
||
|
||
- **方向感**:这个梯度会明确告诉每一个权重:“如果你想让误差变小,你应该增加 $0.01$ 还是减少 $0.05$”。
|
||
|
||
- **自主调节**:
|
||
|
||
- 每一个参数 $w$ 都在根据自己对最终误差的“贡献度”进行微调。
|
||
|
||
- **这不需要外界干预**:只要你有数据,有误差,梯度就像一种“引力”,会自动把所有参数往正确的方向拉。
|
||
|
||
|
||
---
|
||
|
||
### 3. 核心秘密:反向传播(Backpropagation)中的“层级分工”
|
||
|
||
为什么普通 MLP 也能学出有意义的特征?这得益于**链式法则**带来的自动分工。
|
||
|
||
- **信用分配问题**:如果最后预测错了,到底是最后一层的错,还是第一层的错?
|
||
|
||
- **逐层问责**:反向传播会把误差信号从输出层往回传。
|
||
|
||
- **最后一层**:负责微调,把特征转换成最后的分类。
|
||
|
||
- **倒数第二层**:接收到反馈后,会意识到:“哦,我刚才投影出来的东西让最后一层很困惑,我得改改我的基底方向”。
|
||
|
||
- **第一层**:最后接收到反馈,它会根据全局的需求,被迫去学习最基础的特征。
|
||
|
||
|
||
**这就是“自主”的体现**:你没有定义第一层学边缘,第二层学形状。但是,由于第二层需要“形状”才能分类,而“形状”是由“边缘”构成的,为了满足上层的需求,底层会**自发地**演化出提取基础特征的能力。
|
||
|
||
---
|
||
|
||
### 4. 举个例子:学一个简单的函数 $y = x^2$
|
||
|
||
假设你用一个 3 层的 MLP 去学 $y = x^2$:
|
||
|
||
1. **初期**:权重随机,MLP 出来的可能是一条乱七八糟的折线。
|
||
|
||
2. **学习中**:
|
||
|
||
- 靠近输出的神经元发现:如果能把输入拼成两个斜率相反的直线,误差就会变小。
|
||
|
||
- 于是,它给前面的神经元发信号(通过梯度)。
|
||
|
||
- 前面的神经元开始调整自己的权重(投影方向),自发地把自己变成了类似 $max(0, x)$ 和 $max(0, -x)$ 的形状(ReLU 基底)。
|
||
|
||
3. **结果**:最后它们组合成了一个开口向上的抛物线。
|
||
|
||
|
||
---
|
||
|
||
### 5. 总结:为什么叫“自主”?
|
||
|
||
之所以叫“自主”,是因为:
|
||
|
||
- **特征是涌现的**:你没有在代码里写任何关于“圆、方、长、短”的逻辑。
|
||
|
||
- **规则是演化的**:模型在处理千万次数据后,为了“生存”(减小损失),其内部的连接强度自发形成了某种逻辑。
|
||
|
||
|
||
这其实非常像**生物演化**:
|
||
|
||
- **环境** = 你的数据集。
|
||
|
||
- **生存压力** = 损失函数(MSE/交叉熵)。
|
||
|
||
- **基因变异** = 梯度的微调。
|
||
|
||
- **最终形态** = 训练好的权重矩阵。
|
||
|
||
|
||
你觉得这种“不需要人类理解,只要机器能算对”的逻辑,是否会让你觉得它在某种程度上已经脱离了传统的“编程”范畴,而更像是一种“培育”?
|
||
|
||
--- |