平面上有四个点:两个对角上的点属于一类,另外两个属于另一类。一条直线分不开它们。把更多线性层接起来也没用,因为它们仍能合成一个线性变换。下面从这个 XOR 例子看起:加入非线性以后,隐藏层怎样把原来分不开的点重新表示。
先看结构:隐藏层学特征,线性头读出
先看一种常见的分类网络:隐藏层学习特征,线性分类头读出结果。二分类时再接 sigmoid,就像在学到的特征上做逻辑回归。这是理解本章的入口,不是所有神经网络都必须采用的输出结构。
这一页从最小二乘推到反向传播,每一步都给出公式和一份不依赖框架的 Python 实现。
线性回归:决策边界只能是超平面
$$\hat{y} = \mathbf{w}^\top \mathbf{x} + b = \sum_{i=1}^{n} w_i x_i + b, \qquad \mathbf{x}, \mathbf{w} \in \mathbb{R}^n$$
配平方损失 $\mathcal{L} = \frac{1}{2}\sum_k (y_k - \hat y_k)^2$,把偏置吸收进 $\mathbf{w}$(给 $\mathbf{x}$ 补一维常数 1)。当 $X$ 列满秩时,令梯度为零可以解出:
$$\nabla_{\mathbf{w}}\mathcal{L} = X^\top(X\mathbf{w} - \mathbf{y}) = 0 \;\Longrightarrow\; \hat{\mathbf{w}} = (X^\top X)^{-1} X^\top \mathbf{y}$$
如果特征线性相关,$X^\top X$ 可能不可逆,可以用伪逆求最小范数解。实际代码通常用 QR / SVD 最小二乘求解器,不显式计算逆矩阵。
拿它做分类的话,判定面是
$$\{\mathbf{x} : \mathbf{w}^\top \mathbf{x} + b = 0\}$$
一个超平面(hyperplane)。二维是直线,三维是平面。这是线性模型能画出的唯一形状。
加入交互项后还算线性吗?
这里容易绕晕,因为「线性」有两个意思。
$$\hat{y} = w_1 x_1 + w_2 x_2 + w_3 \underbrace{x_1 x_2}_{\text{交互项}} + b$$
- 对参数线性:$\hat y$ 是 $\mathbf{w}$ 的线性函数,所以统计课仍叫它 linear regression,上面那个闭式解照用。
- 对输入线性:不是了。令 $\hat y = 0$ 解出来的不是直线,是双曲线。
发生了什么?你其实手动构造了一个特征映射(feature map)
$$\phi(x_1, x_2) = (x_1,\; x_2,\; x_1 x_2)$$
把二维的点映射到三维,在三维里用一个超平面分割,投影回原平面就成了曲线。$x^2$ 项给你抛物线,$x_1^2 + x_2^2$ 给你圆。polynomial regression、kernel SVM 都遵循这个思路:先确定一个 $\phi$,再使用线性边界。
问题是 $\phi$ 得你自己猜。
Sigmoid 改变输出形式,不增加表达能力
先算同一个线性分数,再压成概率:
$$z = \mathbf{w}^\top \mathbf{x} + b, \qquad \sigma(z) = \frac{1}{1 + e^{-z}}$$
决策边界(decision boundary)还是超平面:$\sigma(z) = 0.5 \iff z = 0 \iff \mathbf{w}^\top\mathbf{x} + b = 0$。sigmoid 单调,动不了那个面的形状,只是把「离面多远」翻译成概率。
那 sigmoid 到底解决什么
一个优化问题。假设不加 sigmoid,直接拿分数配 MSE 拟合 0/1 标签。有个点 $\mathbf{w}^\top\mathbf{x} = 100$,标签是 1,已经分对得不能再对——但残差是 99,梯度巨大,它会拼命把决策面往自己这边拉。已经分对的点在主导训练。
换成 sigmoid + 交叉熵(cross-entropy):
$$\mathcal{L} = -\big[\, y \log \sigma(z) + (1-y)\log(1 - \sigma(z)) \,\big]$$
推一遍梯度。先记住 sigmoid 的一个漂亮性质:
$$\sigma'(z) = \sigma(z)\big(1 - \sigma(z)\big)$$
代入链式法则,令 $s = \sigma(z)$:
$$\frac{\partial \mathcal{L}}{\partial s} = -\frac{y}{s} + \frac{1-y}{1-s} = \frac{s - y}{s(1-s)}$$
$$\frac{\partial \mathcal{L}}{\partial z} = \frac{\partial \mathcal{L}}{\partial s}\cdot \sigma'(z) = \frac{s-y}{s(1-s)} \cdot s(1-s) = \boxed{\;s - y\;}$$
分母被 $\sigma'$ 完全约掉,只剩预测减真值:
$$\nabla_{\mathbf{w}} \mathcal{L} = (\sigma(z) - y)\,\mathbf{x}, \qquad \frac{\partial \mathcal{L}}{\partial b} = \sigma(z) - y$$
这就是二分类里常用 sigmoid 配交叉熵的一个原因:
- 分对的远点 $\sigma(100) \approx 1$,$s - y \approx 0$ —— 自动闭嘴。
- 分错的点 $\sigma(-10) \approx 0$ 而 $y=1$,$s - y \approx -1$ —— 梯度饱和不了,优化器专心处理它。
如果 sigmoid 后面改接 MSE,梯度会多出一个 $\sigma'(z)$ 因子,在饱和区趋近 0,分错的点反而很难更新。对这里的线性 logistic regression,交叉熵关于参数是凸的,但不自动保证唯一或有限的最优解:特征共线可能带来多解;完全可分的数据上,无正则的参数还可能越长越大。换成多层网络后,也不能沿用这个凸性结论。
$\sigma'$ 在 $z=0$ 处最大($0.25$),两端趋近 $0$——这正是梯度消失(vanishing gradient)的来源,也是后来隐藏层多改用 ReLU 的主要原因之一。
Python:从零写一遍
只用 numpy,梯度是上面推出来的那一行。
import numpy as np
def sigmoid(values):
values = np.asarray(values, dtype=float)
return np.exp(-np.logaddexp(0.0, -values))
def fit_logistic(X, y, lr=0.1, steps=2000):
"""X: (N, d) y: (N,) in {0, 1}"""
w = np.zeros(X.shape[1])
b = 0.0
for _ in range(steps):
s = sigmoid(X @ w + b) # (N,)
err = s - y # 就是 dL/dz —— 全部推导浓缩成这一行
w -= lr * (X.T @ err) / len(y)
b -= lr * err.mean()
return w, b
四个常见函数:看起来都在“变数值”,角色完全不同
$$ \boxed{ \begin{aligned} \text{Sigmoid}&:\text{独立的软开关或二分类概率}\\ \text{Softmax}&:\text{在多个选项之间分配总量为 1 的概率}\\ \text{ReLU}&:\text{给隐藏层引入分段线性非线性}\\ \text{Tanh}&:\text{产生带正负方向的有界状态} \end{aligned}} $$
| 函数 | 怎样处理输入 | 输出范围 | 输出和为 1? | 导数 / Jacobian | 典型角色 |
|---|---|---|---|---|---|
| Sigmoid | 逐元素 | $(0,1)$ | 否 | $\sigma(x)(1-\sigma(x))$ | 二分类、多标签、gate |
| Softmax | 一个向量联合归一化 | 每项 $(0,1)$ | 是 | $p_i(\delta_{ij}-p_j)$ | 多分类、attention、词表(vocabulary)分布 |
| ReLU | 逐元素 | $[0,\infty)$ | 否 | $\mathbf 1[x>0]$($x=0$ 取约定的 subgradient) | 隐藏层非线性 |
| Tanh | 逐元素 | $(-1,1)$ | 否 | $1-\tanh^2(x)$ | RNN state、LSTM candidate |
最重要的分类不是“输出长什么样”,而是元素是否竞争。Sigmoid、ReLU、Tanh 对每个元素独立计算;Softmax 的每个输出都依赖整条输入向量,增大一个 logit 会改变其他类别的相对概率。
Sigmoid:什么时候把一个 logit 解释成概率或开关?
$$ \sigma(x)=\frac{1}{1+e^{-x}},\qquad \sigma'(x)=\sigma(x)(1-\sigma(x)). $$
$x=0$ 输出 $0.5$;很大的负数趋近 0,很大的正数趋近 1。一个 binary classifier 可以把 $\sigma(z)$ 解释为正类概率;multi-label classifier 则对每个标签独立做 sigmoid,因此“人、汽车、道路”可以同时为真。LSTM 的 forget / input / output gate 也使用它,把每个通道控制在 0 到 1。
代价是饱和:导数最大只有 $0.25$,$|x|$ 很大时趋近 0。因此它适合输出与门控(gating)语义,而不是现代深层网络的一般隐藏层。
Tanh:为什么 RNN 状态需要正负都有的有界值?
$$ \tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}},\qquad \tanh'(x)=1-\tanh^2(x),\qquad \tanh(x)=2\sigma(2x)-1. $$
Tanh 以 0 为中心,把值压进 $(-1,1)$。普通 RNN 用
$$h_t=\tanh(W_xx_t+W_hh_{t-1}+b),$$
LSTM 用它生成带正负方向的 candidate memory。Sigmoid gate 回答“通过多少”,tanh candidate 回答“写入什么带符号的内容”。它同样会在大绝对值区域饱和,所以不能解决长距离梯度消失;LSTM 真正关键的是 cell-state 的加法通路。
ReLU:为什么一个简单的 max 能让深层网络不再等价于线性层?
$$ \operatorname{ReLU}(x)=\max(0,x),\qquad \operatorname{ReLU}'(x)=\begin{cases}0,&x<0\\1,&x>0.\end{cases} $$
没有 activation 时,$W_2(W_1x)=(W_2W_1)x$,多层仍是一层线性映射。ReLU 在不同输入区域打开不同的线性路径,使网络成为 piecewise-linear function。正区间的导数为 1,避免了 sigmoid / tanh 的正侧饱和,计算也很便宜。
若一个单元长期落在负区间,输出和梯度都为 0,可能出现 dying ReLU。Leaky ReLU 保留负侧小斜率;现代 Transformer FFN 则更常见 GELU、SiLU 与 SwiGLU。
Softmax:为什么它不是逐元素 activation?
$$ p_i=\operatorname{softmax}(z)_i=\frac{e^{z_i}}{\sum_j e^{z_j}}, \qquad \sum_i p_i=1. $$
Softmax 把整组 logits 变成一个 categorical distribution。$[2,1,0]$ 大约变成 $[0.665,0.245,0.090]$。它用于 mutually exclusive 多分类、attention 每一行的权重,以及语言模型(language model, LM)的 next-token distribution。
它对整体平移不变,因此稳定实现先减最大值:
$$ \operatorname{softmax}(z)=\operatorname{softmax}(z-\max_j z_j). $$
这一步避免 $e^{z_i}$ 上溢但不改变结果。Softmax 本身不是“选最大值”;它保留多个非零权重,只是在 logit 差距很大时趋近 one-hot 并出现饱和。
Sigmoid 与 Softmax:独立标签还是互斥选择
| 问题 | 输出层 | 原因 |
|---|---|---|
| “图片里有哪些物体?” | 每类独立 Sigmoid + BCE | 人、车、道路可以同时出现,概率不必和为 1 |
| “图片的唯一主类别是什么?” | Softmax + categorical CE | 类别相互竞争,概率总和为 1 |
| “是否为正类?” | 单 logit Sigmoid,或两个 logits 的 Softmax | 二分类时,两类 Softmax 等价于对 logit difference 做 Sigmoid |
把四者放回模型
LSTM gates → Sigmoid:每个通道通过多少
LSTM candidate / RNN state → Tanh:写入带正负方向的值
Transformer attention → row-wise Softmax:在 key 之间分配注意力
LM head → vocabulary Softmax:下一个 token 的分布
Vanilla Transformer FFN → ReLU;现代模型多用 GELU / SiLU / SwiGLU
一句话记忆:Sigmoid 像独立阀门,Softmax 像在候选(candidate)项之间分票,ReLU 像截断负半轴,Tanh 像把带方向的状态压进 $(-1,1)$。
神经网络真正多做的事:把 $\phi$ 学出来
$$\mathbf{h} = \phi(W_1 \mathbf{x} + \mathbf{b}_1), \qquad \hat{y} = \sigma(\mathbf{w}_2^\top \mathbf{h} + b_2)$$
其中 $W_1 \in \mathbb{R}^{m \times n}$,$\mathbf{h} \in \mathbb{R}^m$,$\phi$ 是逐元素的激活函数(activation function)。第二行就是逻辑回归,只不过输入从 $\mathbf{x}$ 换成了 $\mathbf{h}$。
$\phi$ 不能省。 去掉它:
$$W_2(W_1\mathbf{x}) = (W_2 W_1)\mathbf{x} = W'\mathbf{x}$$
线性映射的复合还是线性映射。堆多少层都一样,整个网络塌回逻辑回归。
反向传播就是链式法则
沿用上面的结论 $\delta_2 \equiv \partial\mathcal{L}/\partial z_2 = \hat y - y$,往回推一层:
$$\frac{\partial \mathcal{L}}{\partial \mathbf{w}_2} = \delta_2\, \mathbf{h}, \qquad \frac{\partial \mathcal{L}}{\partial b_2} = \delta_2$$
$$\boldsymbol{\delta}_1 = \underbrace{(\delta_2\, \mathbf{w}_2)}_{\text{误差传回来}} \odot \underbrace{\phi'(\mathbf{z}_1)}_{\text{过激活的门}}, \qquad \frac{\partial \mathcal{L}}{\partial W_1} = \boldsymbol{\delta}_1 \mathbf{x}^\top$$
$\odot$ 是逐元素乘。对 ReLU,$\phi'(z) = \mathbb{1}[z > 0]$——梯度要么原样通过,要么被完全掐断。这就是全部。
def init(n_in, n_hidden, seed=0):
rng = np.random.default_rng(seed)
return {"W1": rng.normal(0, np.sqrt(2 / n_in), (n_hidden, n_in)), # He 初始化
"b1": np.zeros(n_hidden),
"w2": rng.normal(0, np.sqrt(2 / n_hidden), n_hidden),
"b2": 0.0}
def step(p, X, y, lr=0.05):
N = len(y)
z1 = X @ p["W1"].T + p["b1"] # (N, m) 前向
h = np.maximum(z1, 0) # ReLU
z2 = h @ p["w2"] + p["b2"] # (N,)
yhat = sigmoid(z2)
d2 = (yhat - y) / N # (N,) 反向:还是那一行
gw2, gb2 = h.T @ d2, d2.sum()
d1 = np.outer(d2, p["w2"]) * (z1 > 0) # (N, m) 过 ReLU 的门
gW1, gb1 = d1.T @ X, d1.sum(0)
for k, g in (("W1", gW1), ("b1", gb1), ("w2", gw2), ("b2", gb2)):
p[k] = p[k] - lr * g
loss = -np.mean(y * np.log(yhat + 1e-9) + (1 - y) * np.log(1 - yhat + 1e-9))
return loss, ((z2 > 0) == y).mean()
完整可运行版本在 code/why_nonlinear.py(PyTorch)和 code/make_figures.py(生成本页所有图)。
用 XOR 验证表达能力
四团高斯点,对角同类。没有任何直线能分开——这就是 1969 年 Minsky & Papert 用来说明感知机做不到什么的例子。
三个模型,同样的数据和训练配置:
| 模型 | 参数量 | 准确率 |
|---|---|---|
A Linear(2,1) |
3 | 50.0% |
B Linear(2,8) → Linear(8,1),无激活 |
33 | 50.0% |
C Linear(2,8) → ReLU → Linear(8,1) |
33 | 100% |
B 和 C 是同一个架构、同样 33 个参数,只差一个 ReLU。 B 的两个权重矩阵乘起来是 $(1,8)\times(8,2) = (1,2)$,一行而已,和 A 的形式完全相同——所以它和 3 参数的逻辑回归一样弱。
50% 不是没训好。对称 XOR 上,交叉熵的最优解就是权重全为 0:每个点都预测 0.5,损失停在 $\ln 2 \approx 0.693$,按 0.5 切分的准确率也就是 50%。就算换个目标直接追求准确率,一条直线最好的分法也只是把其中一团单独切出来,做到 75%,仍有一整团分错。
隐藏层在几何上做了什么
把输入空间的方格网推过隐藏层,看它被揉成什么样:
(画图用的是 2 个隐藏单元的版本,因为二维才画得出来。)ReLU 沿一条折痕把平面对折,两类点落到了同一条直线的两侧——输出层依然只是逻辑回归,只是长在了这个新坐标系上。
一张表:从线性模型到 Transformer
| 特征映射 $\phi$ | 最后一步 | 边界形状 | |
|---|---|---|---|
| 线性回归 | 无 | $\mathbf{w}^\top\mathbf{x}$ | 超平面 |
| 逻辑回归 | 无 | $\sigma(\mathbf{w}^\top\mathbf{x})$ | 超平面 |
| polynomial / kernel | 你自己选 | 线性分类器 | 输入空间里的曲面 |
| MLP | 学出来 | 线性分类器 | 同上,但 $\phi$ 是学的 |
| CNN | 学出来,卷积共享权重,满足平移等变 | 线性分类器 | 同上 |
| Transformer | 学出来,$N$ 层注意力 + FFN | 线性分类器 | 同上 |
Transformer 的最后一层也是线性分类器
$$\mathbf{h} = \text{TransformerBlocks}\big(\text{Embed}(\mathbf{x})\big), \qquad \text{logits} = W_{\text{head}}\, \mathbf{h}$$
$$p(\text{token}_i) = \text{softmax}(\text{logits})_i = \frac{e^{z_i}}{\sum_j e^{z_j}}$$
softmax 是 sigmoid 在多类上的推广(两类时二者等价)。而且那个漂亮的性质原样保留:配交叉熵时
$$\frac{\partial \mathcal{L}}{\partial z_i} = p_i - y_i$$
还是预测减真值。lm_head 就是那个线性分类器,类别数换成 vocab_size。可以这样理解底下几十层的作用:把表示空间一步步弯折,直到「下一个 token 是什么」能被一个线性头读出来。
最终都是 function approximator 吗?
广义上是。监督学习模型都在一个参数化的函数族里,寻找一个函数 $f_\theta$,去逼近未知的真实映射 $f^*$,或真实的条件分布 $p^*$:
$$ \theta^*=\arg\min_\theta \frac{1}{N}\sum_{i=1}^{N}\ell\big(f_\theta(x_i),y_i\big). $$
这里最容易混淆的是:“整个模型是 approximator”不等于“整个模型是 linear approximator”。
| 名称 | 形式 | 到底哪里是 linear |
|---|---|---|
| 线性逼近器(linear approximator) | $\hat f(x)=\mathbf{w}^\top\mathbf{x}+b$ | 对输入和参数都线性 |
| 固定 basis 的线性逼近器 | $\hat f(x)=\sum_j w_j\phi_j(x)$ | 对 $w_j$ 线性;对原始输入可以非线性 |
| 神经网络逼近器(neural function approximator) | $f_\theta(x)=W_L\phi(\cdots\phi(W_1x))$ | 最后一层常是 linear readout,但整个映射通常非线性 |
| 语言模型 | $p_\theta(x_t\mid x_{<t})$ | 逼近的是 next-token conditional distribution,不是一个固定答案函数 |
所以 polynomial regression 很有代表性:加入 $x^2$ 后,它对 $x$ 已经不是线性的,但仍然对参数线性(linear in parameters)。神经网络再向前一步,连 basis / feature map $\phi$ 也一起从数据中学习。
Universal approximation theorem 到底保证了什么?
对合适的非线性激活和足够宽的网络,在紧致集合(compact set)$K$ 上,对任意连续目标函数(objective function) $f^*$ 和任意 $\varepsilon>0$,都存在一组参数使
$$ \sup_{x\in K}\left|f_\theta(x)-f^*(x)\right|<\varepsilon. $$
它说明网络的函数族有足够强的表达能力(expressivity),但没有保证:
- gradient descent 一定能找到这组参数;
- 有限训练数据足以确定正确函数;
- 所需网络足够小、训练足够便宜;
- 训练分布外(out-of-distribution)仍能正确外推;
- 训练 loss 很低就一定有好的 generalization。
因此 “universal approximator” 是一个存在性结论(existence result),不是“这个模型一定学得好”的质量认证。
对 Transformer 也一样:最后的 lm_head 是线性的,但
$$ x_{<t}\longmapsto \mathbf{h}_t\longmapsto \operatorname{softmax}(W_{\text{head}}\mathbf{h}_t) $$
这条完整映射包含 attention、Softmax、MLP activation 和多层组合,所以整体是一个高度非线性的 conditional-distribution approximator。真正决定它是否有用的,不只是“能不能逼近”,还包括 inductive bias、data、objective、optimization 与 evaluation。
能表示,不等于能学到,更不等于能泛化
用折线逼近 $f(x)=x^2$。区间 $[a,b]$ 上的端点连线是 $s(x)=(a+b)x-ab$,所以
$$s(x)-x^2=(x-a)(b-x)\leq (b-a)^2/4.$$
在 $[0,1]$ 上均匀分成 $M$ 段,最大误差是 $1/(4M^2)$:4 段为 0.015625,10 段为 0.0025。折线也可以写成初始直线加上各拐点的斜率变化:
$$s(x)=b_0+a_0x+\sum_j c_j\operatorname{ReLU}(x-t_j).$$
$t_j$ 是拐点,$c_j$ 是斜率增量。这就给出了一个 ReLU 表示,但还没证明训练会找到它。
def square_interpolant(value, segments):
if type(segments) is not int or segments < 1 or not 0 <= value <= 1:
raise ValueError("Expected x in [0, 1] and a positive segment count")
index = min(int(value * segments), segments - 1)
left, right = index / segments, (index + 1) / segments
return (left + right) * value - left * right
for segments in (4, 10):
errors = [
square_interpolant((index + 0.5) / segments, segments)
- ((index + 0.5) / segments) ** 2
for index in range(segments)
]
assert abs(max(errors) - 1 / (4 * segments ** 2)) < 1e-12
再看数据够不够:如果只观察 $x=0,1$,$x^2$ 与 $x^2+10x(1-x)$ 在训练点上完全相同,中间却差很多。零训练误差无法判断哪个正确。需要更多数据、合理的先验或约束,而不是只扩大网络。
前面的经验损失最小化是在样本上选参数,不等于已经找到了真实规律。带噪声时,平方损失的总体最优预测在适当条件下是 $\mathbb E[Y\mid X=x]$,也不是逐次猜对所有随机波动。
什么时候先试更简单的方法?
| 场景 | 值得比较的 baseline | 主要检查 |
|---|---|---|
| 特征少、关系近似线性、数据有限 | 带正则的线性 / logistic regression | 缩放、校准(calibration)、解释性 |
| 结构化表格,有非线性和交互 | 树与 boosting | 类别、缺失值、跨时间迁移 |
| 有合适的相似性、样本量可控 | Kernel 方法 | 正则、kernel 和计算成本 |
| 文本、图像、需要迁移表示 | 神经网络 / 预训练(pre-training)表示 | 数据量、迁移收益、算力 |
这不是按数据类型选模型的死规则。公平比较要用相同切分、可比的调参预算,以及只在训练集拟合的预处理。时间序列随机打散不能证明未来泛化;同一个人的多条记录可能需要分组切分。结论应是“在这些数据和约束下更合适”,不是“函数族更强就一定赢”。
自检
- 为什么很多层 linear layer 中间没有 activation,最后仍然只是一层 linear?
- sigmoid + cross-entropy 真正改善的是表达能力,还是优化行为?
- “隐藏层学习一个新坐标系”这句话,怎样用 XOR 的图来证明?
- 为什么 multi-label 用 Sigmoid,而 mutually exclusive multi-class 用 Softmax?
- 为什么 LSTM 的 gate 用 Sigmoid,而 candidate memory 用 Tanh?
- 为什么
lm_head是 linear readout,但整个 Transformer 不是 linear approximator? - Universal approximation theorem 保证了什么,又没有保证什么?
继续阅读
- Transformer 架构 —— 那个 $\phi$ 具体长什么样
- Post-Training —— 训练完之后还怎么改它
- 表征与记忆 —— $\mathbf{h}$ 里该留下什么
快速学习:从 linear readout 到 learned feature map
一句话主线与标准回答
快速记忆:线性模型在给定特征空间里画超平面;神经网络用 nonlinear layers 学习新的坐标 $\phi_\theta(x)$,再由 linear head 读出结果。
面试回答
多层 linear layers 没有 activation 时仍可合并成一个矩阵。加入 ReLU 等非线性后,网络可以学习 piecewise nonlinear feature map,使原空间中的复杂边界在 hidden space 里变得 linearly separable。最后一层线性不代表整个模型线性。
被追问 universal approximation 时,回到上面那一节:它是存在性结论,不保证找得到、学得好。
参考论文
- Learning representations by back-propagating errors — Rumelhart, Hinton & Williams, 1986
- Multilayer feedforward networks are universal approximators — Hornik et al., 1989
- Delving Deep into Rectifiers — He 初始化与 ReLU
本页术语 13
- 超平面 hyperplane
- n 维空间里的 n−1 维平面;二维是直线,三维是平面
- 特征映射 feature map
- 把原始输入换到另一个坐标系的函数 φ
- 决策边界 decision boundary
- 模型对输入作出不同分类的分界线或分界面
- 交叉熵 cross-entropy
- 分类任务的标准损失,−log 正确类的概率
- 梯度消失 vanishing gradient
- 激活饱和导致梯度趋近 0,深层学不动
- 词表 vocabulary
- 模型能输出的所有 token 的集合
- 门控 gating
- 用可学习权重控制信息写入、保留或输出
- 语言模型 language model, LM
- 对文本序列建模,用上下文预测或生成后续内容
- 候选 candidate
- 召回阶段捞出来、等待精排挑选的内容
- 激活函数 activation function
- 逐元素的非线性函数,网络深度靠它才有意义
- 目标函数 objective function
- 训练直接优化的数学量;它不一定等于最终产品目标
- 校准 calibration
- 模型给出的置信度是否等于真实正确率
- 预训练 pre-training
- 先用大量数据学习通用表示和能力,再适配具体任务