深度学习 :基础与概念 (第一章 深度学习革命 注解)
这类模型可以在大型文本数据集上通过提取训练对(training pair)进行训练。训 练对的输入是随机选定的词序列,输出是已知的下一个词。这是自监督学习(selfsupervised learning)的一个例子,在自监督学习中,模型学习从输入到输出映射函数, 有标注的输出是从输入训练数据中自动获取的,无须进行另外的人工标注。这种方法 能把多种来源的大量文本作为大型训练集,从而训练出超大规模神经网络。
- 下面是一个自监督学习的例子,具体说明“训练对”和“自监督”是如何运作的:
-
原始句子:
今天天气真好,我们一起去公园散步吧。
-
✅ 训练对的构造(训练过程中的“输入-输出”对):
在自监督学习中,不需要人工标注,而是自动从原始文本中构造训练对。比如:输入(模型看到的) 输出(模型要预测的) 今天天气 真 今天天气真 好 今天天气真好, 我 今天天气真好,我们 一起 今天天气真好,我们一起 去 …… …… -
这些输入-输出对(training pairs)是从原始句子中自动滑动生成的。模型学习的目标是根据前面的词预测下一个词。
-
🧠 自监督的核心特点:
无需人工标注:训练对从原始文本中自动生成,不需要人来标记“正确答案”。
自我监督:输出标签就是原始文本中的一部分,是“输入的一种变形”。
可以利用大量未标注数据:任何自然语言文本(网页、书籍、新闻)都可以用来训练。
-
有一类重要 的大语言模型称为自回归(autoregressive)语言模型,它们能够输出语言,因此属于 生成式 AI 的一种。这类模型以一个词序列作为输入,生成这个词序列最可能的下一 个词,我们可以把末尾添加了新词的扩展序列再输入到模型中,让它生成后续的词, 重复这个过程,就会得到越来越长的词序列。这样的模型还可以输出一个特殊的“停 止”词,来表示文本生成的结束,这样就使得模型在输出一定长度的文本后停止。此 时,用户可以在词序列的末尾添加自定义的词序列,然后将完整的词序列重新输入 模型以触发生成后续的词。通过这种方式,人们就可以和神经网络对话了。
“用户可以在词序列的末尾添加自定义的词序列,然后将完整的词序列重新输入模型以触发生成后续的词。通过这种方式,人们就可以和神经网络对话了。”
这句话的含义可以分为两个层次理解:
✅ 1. 技术原理层面解释
自回归语言模型(如 GPT)在生成文本时,是一个逐词预测的过程
- 模型的输入是一个词序列(如:“你好,你是谁?”)
- 模型会预测最可能的下一个词(比如:“我”)
- 然后把这个“我”加到原词序列的末尾,形成新的输入序列(“你好,你是谁?我”)
- 再次输入模型,继续生成(“是”),以此类推,直到遇到一个“停止词”或达到最大长度
✅ 2. 与人类交互的角度解释
这句话强调了模型能够响应用户输入,从而实现“对话”:
- “用户在词序列的末尾添加自定义词序列” —— 意思是,用户输入一段话,例如:“你喜欢什么电影?”
- “将完整的词序列重新输入模型” —— 这段用户输入的话变成模型的新输入
- 模型接着这个输入生成一个合适的回复,比如:“我喜欢科幻电影,比如《星际穿越》。”
- 然后,用户可以继续输入:“你觉得它哪里好看?”
- 再把上下文一起送进模型,让模型生成新的回答
🧠 这就模拟了一个自然的问答过程 —— 人与模型的“对话”。(用户通过不断添加新输入(问题或回应)到已有的对话上下文中,然后把整个对话历史输入给模型,模型就能基于上下文生成新的内容,从而实现类人对话体验。)
“通过这种方式生成数据,我们可以捕获许多现实世界数据集的一个重要特性——它们具有我们希望了解的潜在规律,但个别观测值会被随机噪声干扰。”这种噪声可能源于它们固有的随 机过程(例如放射性衰变),但更常见的原因是存在未被观测
现实中的数据通常并不是完全规则的,它们背后存在某种真实的模式(比如物理规律、经济趋势),但观测值(样本)往往被各种因素**“污染”**了,比如:
- 测量误差
- 环境干扰
- 未观测变量(隐藏影响)
👉 噪声来源可以是自然的随机性,也可以是数据中遗漏的特征或变量导致的预测误差
我们可以通过选择能够使 E(w) 尽可能 小的 w 值来解决曲线拟合问题。因为平方 和误差函数是系数 w 的二次函数,其对系 数的导数是系数 w 的线性函数,所以该误 差函数的最小化有一个唯一解,记为 w*, 可以通过解析形式求得封闭解(也叫解析 解)(参见 4.1 节)。最终的多项式由函数 y(x, w*) 给出
🔍 什么是“解析解”?
就是我们可以用一个数学公式直接计算出最优解w∗w*w∗ ,不需要反复试错或用计算机不断调整。
🔍 什么是"封闭解"?
用有限次的基本数学运算(加、减、乘、除、开方、指数、对数等)就能直接写出来的解,不需要反复试验或迭代。
🚫 非封闭解的情况是什么?
有时候方程太复杂,不能直接写出解,比如:
- 解一个复杂的非线性方程
- 深度神经网络中的参数优化
- 某些积分或微分方程
这时我们只能用迭代法(比如梯度下降)来逐步逼近答案 —— 这叫数值解(numerical solution),不是封闭解。
根据可用训练集的大小来限制模型中参数的数量,其结果有些不尽如人意。而根 据待解决问题的复杂性来选择模型的复杂性似乎更合理。作为限制参数数量的替代方 案,正则化(regularization)技术经常被用于控制过拟合现象,它通过向误差函数添加 一个惩罚项来抑制系数取值过大
如果训练集小,就减少模型的参数数量(比如用低阶多项式)但这种方法的问题是:
它可能太保守,导致模型太简单,无法表达数据中的真实规律也就是说,“怕学多了”而不敢用好模型,结果模型学得不够.
“作为限制参数数量的替代方案,正则化(regularization)技术经常被用于控制过拟合现象。”
🔍 意思是:
- 为了解决“模型太复杂会过拟合”的问题,我们可以用另一种更聪明的方法 —— 正则化
- 它不是简单地“减少参数数量”,而是允许参数多,但限制它们的取值方式
其中 ,并且系数 控制着正则化项与平方和误差项 之间的相对重要性。注意,正则化项中通常不包含系数 ,因为如果包含 w0w_0w0,就会导 致最终结果受到目标变量所选原点的影响(Hastie, Tibshirani, and Friedman, 2009)。当 然也可以包含w0w_0w0 ,但需要单独为其配置一个正则化系数(参见 9.2.1 小节)。同样,我 们可以求得式(1.4)中误差函数的精确闭式解(见习题 4.2)。在统计学文献中,这类 方法被称为收缩方法(shrinkage),因为它们会使系数的值缩小。在神经网络领域,这 种方法称为权重衰减(weight decay),因为神经网络中的参数通常称为权重,而这种 正则化手段会促使这些权重向零衰减。
“注意,正则化项中通常不包含系数 ,因为如果包含 w0w_0w0,就会导 致最终结果受到目标变量所选原点的影响”
🔍 这是个细节,但很重要:
- w0w_0w0 是偏置项,也叫截距项(就像直线方程 y=wx+by = wx+by=wx+b)
- 它的作用是让模型整体上下移动以适应数据中心
- 如果我们也对 w0w_0w0 正则化(也惩罚它太大),就相当于限制了输出可以偏移的空间
- 这会导致模型对目标变量ttt的“中心位置”(比如均值)非常敏感
⚠️ 所以通常不正则化 ,只对其余权重施加正则化。
“当 然也可以包含w0w_0w0 ,但需要单独为其配置一个正则化系数”
🔍有些高级玩法中,可能你也想对 w0w_0w0施加一点正则化,但不要太强,就可以:
- 给 w0w_0w0单独设一个正则系数 λ0\lambda_0λ0
- 然后写成:
E(w)=∑(y(xn,w)−tn)2+λ∑i=1Mwj2+λ0w02 E ( w ) = \sum ( y ( x _ { n } , w ) - t _ { n } ) ^ { 2 } + \lambda \sum _ { i = 1 } ^ { M } w _ { j } ^ { 2 } + \lambda _ { 0 } w _ { 0 } ^ { 2 }E(w)=∑(y(xn,w)−tn)2+λi=1∑Mwj2+λ0w02
这样灵活地调控偏置项和其余参数的正则强度。
“在统计学文献中,这类方法被称为收缩方法(shrinkage)。”
🔍 关键概念来了:
-
叫收缩,因为正则化让参数 wjw_jwj 被压小、缩回原点(不让它们胡乱放大)
-
就像给模型穿上了弹力衣,不能让它随便挥舞大动作
-
越强的正则(大 λ\lambdaλ)→ 越“缩”,越保守
“在神经网络领域,这种方法称为权重衰减(weight decay)。”
🔍 换个圈子,换个叫法:
- 在神经网络里,参数通常叫“权重”
- 所以同样的正则化方法,被叫做 权重衰减
- 因为惩罚项会让权重慢慢趋近于 0,像慢慢“腐蚀掉”的感觉
λ 作为一个超参数(hyperparameter),它的值在基于误差函数最小化来 确定模型参数 w 的过程中始终保持不变。需要注意的是,我们不能通过同时对 w 和 λ 最小化误差函数的方式来简单地确定 λ 的取值,因为这样会导致 λ 趋近于 0,从而产生一个在训练集上误差极小甚至为零的过拟合模型。类似地,多项式的阶数 M 也是模型 的一个超参数,单纯地优化训练集误差关于 M 的取值会导致 M 过大,同样会引发过 拟合问题。因此,我们需要找到一种有效的方法来确定这些超参数的合理取值。1.1 节 的讲述提供了一种简单的思路,即将已有的数据集划分为训练集和验证集(validation set)[也称为保留集(hold-out set)或开发集(development set)],其中训练集用于确 定模型系数 w,而我们最终选择在验证集上误差最小的模型。如果使用有限规模的数 据集多次迭代模型设计,也可能会出现对验证集的过拟合现象。为此,通常需要预留 出测试集,用于对最终选定模型的性能进行评估。
λ(正则化系数) 是一个超参数,意思是它不像模型参数www 那样通过数据学习得到,而是我们在训练之前手动设定的。
“1.1 节的讲述提供了一种简单的思路,即将已有的数据集划分为训练集和验证集(validation set)[也称为保留集(hold-out set)或开发集(development set)],其中训练集用于确定模型系数 w,而我们最终选择在验证集上误差最小的模型。”
🔍 这个是一个解决方案:
- 把数据集划分成 训练集 和 验证集:
- 训练集 用来训练模型,找出最优的 www
- 验证集 用来评估模型,在验证集上误差最小的模型就是我们最终选择的模型。
验证集的作用是:帮助我们选择超参数(比如 𝜆和𝑀)的合理取值。
如果我们多次根据验证集来调整模型(比如每次调整后都选择在验证集上误差最小的模型),可能会出现验证集过拟合的情况。这就像我们在不断“调整模型的参数”以便在验证集上表现更好,结果模型只会记住验证集的数据特征,而无法泛化到其他数据。
“为此,通常需要预留出测试集,用于对最终选定模型的性能进行评估。”
🔍 这是最后一个步骤:
- 为了避免验证集过拟合,我们需要预留出一个单独的测试集:
- 这个测试集不参与训练,也不参与超参数调整。
- 它的作用是:当我们选择了模型和超参数后,用测试集来评估最终模型的性能。
这样就可以更客观地评估模型的泛化能力(对未见数据的预测能力)。
在某些实际应用场景中,可用于模型训练和 测试的数据量往往较为有限。为了构建性能良好 的模型,我们希望尽量充分地利用一切可获取的 数 据 进 行 训 练。 然 而, 如 果 验 证 集 的 规 模 过 小, 则会导致对模型预测性能的评估存在较大偏差。 交叉验证(cross-validation)技术为解决这一困境 提供了一种有效途径,如图 1.12 所示。该方法允 许将 的数据用于模型训练,与此同时, 利用全部数据来评估模型的性能。当数据资源极 度匮乏时,还可以考虑 S = N 的极端情况,其中 N 表示数据点的总数,这时的交叉验证就演变成了 留一法(leave-one-out)
“交叉验证(cross-validation)技术为解决这一困境提供了一种有效途径"
🔍 交叉验证(Cross-validation)是一种常用的模型评估技术:
- 交叉验证可以帮助我们更好地利用数据,同时避免验证集过小的问题。
- 通过将数据划分成多个子集,模型会在不同的子集上训练和验证,从而获得更加稳定和可靠的评估。
-
交叉验证是一种有效的方法,尤其在数据有限时,可以充分利用所有数据来进行训练和评估,避免过小验证集带来的偏差。
-
通过将数据分成多个子集,模型会在不同的子集上训练和验证,提供更稳健的评估。
-
如果数据非常少,留一法(LOO)是一种特别的交叉验证方法,它让每个数据点都参与过验证。
交叉验证的主要缺点在于所需的训练次数增加了 S 倍,这对于训练过程本身计 算成本较高的模型来说是一个大问题。交叉验证等使用独立数据评估性能的技术还 存在另一个问题,即对于单个模型可能存在多个复杂度超参数(例如,可能有多个 正则化超参数)。在最坏的情况下,探索这些超参数设置的最佳组合可能需要指数级 数量的训练次数。现代机器学习的前沿领域需要非常大的模型和大规模训练数据集。 因此,超参数设置的探索空间有限,很大程度上依赖于从小模型获得的经验和启发 式方法。
“交叉验证的主要缺点在于所需的训练次数增加了 S 倍, 这对于训练过程本身计算成本较高的模型来说是一个大问题。”
🔍 这句话是在说明交叉验证的缺点:
-
训练次数增加:假设我们使用 𝑘-折交叉验证(k-fold cross-validation),那么如果原本训练一次模型需要 𝑇 次计算,那么交叉验证就会让这个过程增加 𝑘倍的计算量。
-
S 倍:具体来说,如果我们将数据集分成 𝑆个子集(例如,𝑆=10,就使用 10 折交叉验证),那就需要训练 10 次,每次用不同的子集作为验证集,剩下的作为训练集。
这个增加的计算量对于计算成本较高的模型(比如深度神经网络)来说是一个大问题,因为每次训练都会消耗大量资源和时间。
“交叉验证等使用独立数据评估性能的技术还存在另一个问题,即对于单个模型可能存在多个复杂度超参数(例如,可能有多个正则化超参数)。”
🔍 这个是在讲另一个问题:
- 多个超参数:在现实应用中,模型往往不止一个超参数需要调节。比如:
- 正则化超参数:例如,𝜆和 𝛼 等,这些决定了模型的复杂度。
- 对于复杂的模型,可能不仅仅是一个超参数需要优化,还可能有多个不同的超参数(例如神经网络中的学习率、层数、每层神经元数量等)。
这些超参数的组合可能会极其复杂,需要进行大量的训练来寻找最佳组合。
“在最坏的情况下,探索这些超参数设置的最佳组合可能需要指数级数量的训练次数。”
🔍 这里在警告我们:
-
探索超参数组合:为了找到超参数的最佳组合,必须对所有可能的超参数组合进行尝试。
-
指数级的训练次数:随着超参数的数量增加,组合数量呈指数增长。假设我们有 3 个超参数,每个超参数有 10 个不同的值,那么就需要 10310^3103=1000 次训练。
-
如果超参数更多,甚至可能需要进行指数级别的训练,这对于大型数据集和复杂模型来说,是非常消耗资源和时间的。
“因此,超参数设置的探索空间有限,很大程度上依赖于从小模型获得的经验和启发式方法。”
🔍 这个总结了目前的实际情况:
- 有限的探索空间:由于计算资源的限制,无法对所有超参数的组合进行全面的尝试。探索的空间会被限制,只能尝试少量的超参数组合。
- 从小模型获得经验:通常,研究人员和工程师会先用小规模的模型(例如小型神经网络或低阶的多项式模型)进行实验,从这些小模型中积累经验和启发。
- 启发式方法:由于无法穷举所有组合,很多时候会使用启发式方法来选择超参数,这些方法基于经验、直觉或以往的工作来选择超参数,而不是完全依赖于交叉验证。
感知机由 Rosenblatt(1962 年)首创,他开发了一种特 定的训练算法,该算法有一个有趣的特点,即如果存在一组权重值使得感知机能够完 美分类其训练数据,则该算法保证在有限步数内收敛到这一解(Bishop, 2006)。除了 学习算法之外,感知机还需要一个专用的模拟硬件,如图 1.15 所示。典型的感知机配 置有多个处理层,但其中只有一层可以从数据中学习,因此感知机被认为是一个“单 层”神经网络。
“他开发了一种特定的训练算法,该算法有一个有趣的特点,即如果存在一组权重值使得感知机能够完美分类其训练数据,则该算法保证在有限步数内收敛到这一解。”
感知机的训练算法是一个非常早期的监督学习算法,它的核心特点是:
- 目标:学习一组权重 𝑤,使得可以将正负样本准确地区分开(即线性可分)。
- 保证收敛:如果训练数据是“线性可分”的,算法一定会在有限步数内找到一个完美分类的权重解,这就是感知机收敛定理(Perceptron Convergence Theorem)。
- 线性可分:就是说,你能用一条直线(二维)、一个超平面(高维)把正类和负类的数据点“完全分开”。
这个模型也 暴露出重大的局限性。Minsky and Papert(1969)分析了感知机的特性,并从数学上严 格证明了单层网络的能力局限。他们还推测,这样的局限性将会扩展到具有多个可学 习参数层的神经网络。尽管这一猜想后来被证明是极其错误的,但它在当时极大地打 击了人们对神经网络模型的热情,并直接导致了 20 世纪 70 年代和 80 年代初学术界和 工业界对神经网络领域缺乏足够的兴趣和资金投入
“这个模型也暴露出重大的局限性。”
指的是感知机虽然在理论上可以处理一些简单分类问题,但它能力非常有限。主要表现为:
- 只能处理线性可分的问题(比如把两个类别用直线分开)。
- 对于更复杂的问题(例如异或 XOR 问题),感知机完全无能为力。
“他们还推测,这样的局限性将会扩展到具有多个可学习参数层的神经网络。”
-
Minsky 和 Papert 在书中推测,就算你给感知机增加几层、堆叠起来,这种神经网络也未必能解决那些复杂问题。
-
🚨 这其实是一个错误的推论。他们错过了多层网络的关键点:非线性激活函数和反向传播算法(后来才发展出来)。
对于训练具有多层可学习参数的神经网络问题,其解决方案来自微分学的应用以及基于梯度的优化方法。一项重要的改进是用具有非零梯度的连续可微激活函数取代 了原有的阶跃函数式(1.7)。另一项关键的改进是引入了可微的误差函数,该函数能 量化地评估在给定参数配置下模型对训练集中目标变量的预测效果。我们在 1.2 节中 利用平方和误差函数[式(1.2)]进行多项式拟合时,就已经接触到了此类误差函数 的一个示例。
早期的单层感知机(用的是阶跃函数)不能解决复杂问题。后来人们试着加层,但卡住了,因为:
- 不知道怎么训练多个层;
- 梯度根本传不动;
- 激活函数和误差函数都不好用。
那怎么办?接下来讲的,就是让神经网络“复活”的两个大改进!
✨ 第一个改进:激活函数从阶跃变成了光滑可导函数
“用具有非零梯度的连续可微激活函数取代了原有的阶跃函数式(1.7)”
🔍 阶跃函数是啥?
像这种:
f(x)={0x<01x≥0f(x) = \begin{cases} 0 & x < 0 \\ 1 & x \ge 0 \end{cases}f(x)={01x<0x≥0
它是“跳一下”,要么0,要么1,没有中间值。
❌ 问题在哪?
- 它是不可导的(中间断了),无法用微积分的方法计算梯度。
- 梯度 = 0,反向传播无法工作,网络无法学习。
✅ 改进方案:
使用可微函数来代替,比如:
- Sigmoid 函数:σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1
- Tanh 函数:tanh(x)\tanh(x)tanh(x)
- ReLU(现在用得最多):ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)
🌟 这些函数的优点是:
- 光滑、连续、有梯度;
- 可以用来做反向传播,进行梯度下降。
🎯 第二个改进:设计一个可微的误差函数
“引入了可微的误差函数,该函数能量化地评估在给定参数配置下模型对训练集中目标变量的预测效果。”
🔍 误差函数干嘛的?
衡量模型预测的好坏。例如预测和实际值之间的差距有多大。
✅ 常见的误差函数举例:
-
平方和误差(Sum-of-squares):
E(w)=12∑n(y(xn,w)−tn)2 E(w) = \frac{1}{2} \sum_n (y(x_n, w) - t_n)^2 E(w)=21n∑(y(xn,w)−tn)2
就是预测值和真实值之间的差平方,适合回归任务。
-
交叉熵误差(Cross-entropy):
常用于分类任务,更能反映“分类信心”。
🧮 为什么要求误差函数“可微”?
- 因为我们要用梯度下降方法更新参数。
- 不可导就没法优化。
一个关键的认识是,从数据中进行学习的 过程不可避免地会引入一些背景假设,这些假设被称为先验知识(prior knowledge)或 归纳偏置(inductive bias)。这些先验知识可以显式地融入模型设计之中,例如,可以 设计一种特定的神经网络结构,使得皮肤病变的分类结果不依赖于图像中病变的具体 位置;或者,它们也可以隐式地蕴含在模型的数学形式或其训练方法的选择中
这段话是机器学习领域特别关键的一个理念——任何“从数据中学习”的模型,背后都隐藏着“先入为主”的假设。
🔑 核心观点:学习 = 数据 + 假设
“一个关键的认识是,从数据中进行学习的过程不可避免地会引入一些背景假设。”
📌 就是说:
- 机器学习不等于“纯靠数据说话”。
- 学习模型在理解数据、做出判断的时候,必须依赖某种“先验假设”,不然模型啥都学不出来。
这些假设就叫做:
💡 先验知识 / 归纳偏置(inductive bias)
“这些假设被称为先验知识(prior knowledge)或归纳偏置(inductive bias)。”
这两个术语意思差不多:
- 先验知识(prior knowledge):我们在学习之前就“知道”的东西。
- 归纳偏置(inductive bias):模型对数据的偏好,也就是它“倾向”相信什么样的规律存在。
比如说:
- 如果你训练了个线性模型,它“偏好”认为数据是可以用直线分开的(这就是它的归纳偏置)。
- 如果你用 CNN(卷积神经网络)处理图像,它“相信”图像的局部区域有用,位置不重要(这也是偏置)。
✅ 显式地加入(通过模型结构设计)
“可以设计一种特定的神经网络结构,使得皮肤病变的分类结果不依赖于图像中病变的具体位置。”
📍 举例:CNN 卷积神经网络就是这种设计!
- 皮肤图像中,病变可能出现在左上角或右下角。
- 我们不希望模型“记住”具体位置,只要能识别病变就好。
- 所以我们设计“卷积层”,让模型关注“图像局部特征”,而且它的位置无关。
✅ 这就是把先验知识“硬编码”到模型结构里。
🤫 隐式地加入(通过训练方法或数学形式)
“它们也可以隐式地蕴含在模型的数学形式或其训练方法的选择中。”
比如:
- 正则化(L2、L1):它假设“模型参数应该尽可能小” → 避免过拟合。
- 选择线性模型:意味着你假设数据的规律是线性的。
- 选择梯度下降而不是随机策略:你假设误差函数是“光滑的”可优化的。
这些假设你没写在纸上,但通过你的训练方式、模型选择体现了出来。
反向传播算法和基于梯度的优化技术显著提升了神经网络解决实际问题的能力。 然而,研究人员注意到,在具有多层结构的神经网络中,通常只有最后两层的权重参 数能够学习到有效的信息。除了少数例外,特别是用于图像分析的卷积神经网络模型 (LeCun et al., 1998)(详见第 10 章),具有两层以上结构的网络模型鲜有成功的应用。为了在各种实际应用中获得令人 满意的性能,人们通常要设计预处理步骤,将原始输入变量变换到一个新的特征空间 中,希望在这个新的空间中机器学习任务能更容易解决。这种预处理步骤有时也被称 为特征提取(feature extraction)。尽管这种人工特征提取的方法有时见效,但一个更理 想的解决方案显然是直接从数据中自动学习出这些特征,而不是依赖于人工设计。
🔴 神经网络的学习局限性:仅有最后两层有效
“在具有多层结构的神经网络中,通常只有最后两层的权重参数能够学习到有效的信息。”
📍 现象:即便使用了反向传播算法和梯度优化,深层神经网络(即有多个隐藏层的网络)在实际应用中往往会出现一个问题:
- 只有最后几层的权重会学习到有用的特征。
- 这意味着前面的层大部分没有发挥作用,学习到的特征无法有效反映输入数据的真实规律。
✅ 原因:
- 这种现象叫做 梯度消失(Vanishing Gradient) 或 梯度爆炸(Exploding Gradient) 问题。
- 在多层网络中,误差(损失函数)会随着层数的增加而变得越来越小,导致反向传播过程中的梯度难以传递到前面层,训练变得极其缓慢,甚至无法更新早期层的参数。
🧠 卷积神经网络(CNN)的特殊情况
“除了少数例外,特别是用于图像分析的卷积神经网络模型 (LeCun et al., 1998)”
📍 卷积神经网络(CNN)是一种在图像分析中非常成功的深度神经网络结构。
- CNN 在图像数据中通过卷积层自动提取特征,避免了传统手工特征提取的复杂性。
- 与传统的多层感知机不同,CNN 利用了局部感受野、权重共享等技术,使得信息能够在网络中有效传播,避免了梯度消失的问题。
LeCun et al. (1998) 研究了 LeNet,这是一个非常著名的卷积神经网络模型,后来成为图像识别、手写数字识别等任务中的基础。
⚙️ 人工特征提取的挑战
“为了在各种实际应用中获得令人满意的性能,人们通常要设计预处理步骤,将原始输入变量变换到一个新的特征空间中…”
📍 特征提取:
- 在传统机器学习中,如果输入数据(比如图像、文本等)直接送入模型,往往效果不佳。
- 特征提取是通过人工方法(例如:边缘检测、颜色直方图、TF-IDF等)将原始数据转化成对模型更友好的特征。
- 但这个过程通常是手动设计的,需要领域知识,且效率低下,无法自动适应数据的变化。
🎯 理想的解决方案:自动学习特征
“然而,一个更理想的解决方案显然是直接从数据中自动学习出这些特征,而不是依赖于人工设计。”
📍 这里说的是深度学习的核心优势:
- 通过 自动学习特征,深度神经网络可以从数据中自我发现并提取有效特征,而不需要依赖人工设计。
例如,卷积神经网络(CNN) 会自动从原始图像中学到哪些特征是有用的(例如边缘、角点、纹理等),而无需你手动去提取这些特征。
这个过程是逐层抽象的:
- 第一层学习低级特征(如边缘、角落)。
- 随着网络深度增加,网络逐渐学习到更高级的语义特征(如形状、面部、对象)。
人们常常发现,通过架构创新或引入更复杂形式的归纳偏置而带来的性能改进, 很快就会被简单地通过扩大训练数据量替代,同时伴随着相应的模型规模和用于训练 的相关计算能力的扩展(Sutton, 2019)。大语言模型不仅在特定任务上表现更优,还 可以用同一个训练好的神经网络解决更广泛范围的问题。大语言模型就是一个显著的 例子,因为单个网络不仅拥有非凡的能力广度,甚至还能够胜过为解决特定问题而设 计的专业网络
🔑 性能改进的来源:架构创新 vs 扩展数据量
“人们常常发现,通过架构创新或引入更复杂形式的归纳偏置而带来的性能改进, 很快就会被简单地通过扩大训练数据量替代。”
📍 架构创新和归纳偏置:
- 这是说,研究人员在不断优化神经网络架构时(例如设计新的网络层、激活函数、优化算法等),确实能带来一定的性能提升。
- 这些方法是通过对网络的结构或假设(归纳偏置)进行调整,从而改善网络的学习能力。
但,问题来了:
这种性能提升是有限的。
📈 数据量的扩展:
- 扩大训练数据集,特别是通过收集更多的真实数据或利用数据增强技术,可以大大提高模型的表现,甚至有时比单纯依赖架构创新更有效。
- 这其实是因为更多的数据可以帮助模型更好地学习和泛化,尤其是在复杂任务中,模型能看到更多样本,从而避免过拟合。
所以,最终数据量扩展和计算能力的提升可能替代了对网络架构的复杂创新,成为模型提升性能的关键因素。
✅ 什么是 Scaling Law?
Scaling Law 指的是:
在一定条件下,模型的性能随着 模型规模(参数数量)、训练数据量 和 计算量(训练步数) 的 增长,呈现出规律性的持续提升。
这是 OpenAI 等机构在训练大型神经网络时发现的一条经验性规律。
📈 Scaling Law 的具体表现:
扩展项 | 效果 |
---|---|
模型变大(更多参数) | 性能提升:更复杂任务学得更好 |
数据量增加 | 泛化能力更强,避免过拟合 |
训练时间/计算量加大 | 更充分收敛,表现更稳定 |
这三者必须同步扩展,才能继续获得收益。比如只把模型做大而不加数据,可能反而导致过拟合。
🔍 举个例子:GPT 系列的 Scaling
OpenAI 训练 GPT-2 → GPT-3 → GPT-4 时,都发现了类似的规律:
- GPT-2(1.5 亿参数)对一些任务表现尚可;
- GPT-3(1750 亿参数)一跃成为多任务通用模型;
- GPT-4 表现更好,部分任务已经达到人类水平。
这一切的前提是:训练数据、模型参数、训练计算量全都扩大了。
🧠 为什么重要?
Scaling Law 告诉我们:
- 模型并没有在“变聪明”,而是通过简单的数学扩展,在更多数据中学到了更多规律。
- 构建强大 AI,不一定靠设计新算法,而是靠 足够大、足够久、足够多数据。
网络的深度对于神经网络实现卓越性能至关重要。要理解深度 神经网络中隐藏层的作用,一种有效的视角是表示学习(representation learning,也称 表征学习)(Bengio, Courville, and Vincent, 2012)。在这种视角下,网络能够学习把原 始输入数据转换成某种新的、富有语义信息的表示形式,从而显著降低后续网络层需 要解决的问题的难度。这些学习到的内部表示还可以通过迁移学习技术被重新利用来 解决其他相关问题,正如前文在皮肤病变分类任务中所展示的那样。一个有趣的发现 是,用于处理图像的神经网络模型所学习到的内部表示,与在哺乳动物视觉皮层中观 察到的神经表征惊人地相似(详见第 10.3 节)。那些能够针对一系列下游任务进行适 配或微调(fine-tuned)的大规模神经网络模型,称为基础模型(foundation model)。这 些模型可以充分利用海量且多样化的数据集,从而构建出具有广泛适用性的通用模型 (Bommasani et al., 2021)。
🔍 深度神经网络与隐藏层的作用
“网络的深度对于神经网络实现卓越性能至关重要。”
- 这句话强调了 深度神经网络(DNN) 在处理复杂任务时的重要性。
- 深度 指的是神经网络中包含的 隐藏层的数量。更多的层意味着网络有更多的学习能力,可以对数据进行更深入的处理和表达。
例如,浅层网络(只有一两层隐藏层)可能只能从输入中提取出简单的特征(如边缘、颜色等),而深度神经网络可以在多层隐藏层中逐步抽象、提炼特征,最终学到非常复杂的、具有高度语义信息的表示。
🧠 表示学习(Representation Learning)
“一种有效的视角是表示学习 (representation learning, 也称表征学习)…”
- 表示学习 是指 神经网络 通过 多层结构 学习从原始数据到更抽象、更有意义的特征表示的过程。
- 换句话说,神经网络不仅仅是进行分类或回归任务,它还在不断地学习如何 转换输入数据(如图像、文本等)为 更富有语义的特征表示。这种表示能够更有效地帮助后续的任务。
例如,图像分类任务中的一个神经网络,可能通过学习逐层将图像的原始像素值映射成不同的特征表示:
- 第一层可能学习到 边缘;
- 第二层可能学习到 形状;
- 第三层可能学习到 更复杂的结构或物体。
这让后面的层可以更容易地识别图像中的对象或场景。
🚀 迁移学习与基础模型(Foundation Model)
“这些学习到的内部表示还可以通过迁移学习技术被重新利用来解决其他相关问题。”
- 迁移学习 是指 在一个任务上训练得到的模型 或其内部表示,可以被用来 帮助解决其他相关任务。这样,不需要从零开始训练模型,而是可以充分利用已经学到的知识。
比如,一个在大规模图像分类数据集上训练的神经网络,它学习到的图像表示可以迁移到其他任务(如目标检测、图像分割等),因为这些任务和分类任务有着共同的特征表达。
“一个有趣的发现是,用于处理图像的神经网络模型所学习到的内部表示,与在哺乳动物视觉皮层中观察到的神经表征惊人地相似。”
- 这一点提到了生物启发的研究,表明神经网络学习到的表示与哺乳动物的视觉皮层中的神经元反应非常相似。这也印证了深度学习模型与大脑处理信息的方式有某些共性。
这类研究的成功为神经网络的通用性和学习能力提供了生物学上的支持。