| 项 | 内容 |
|---|---|
| 课程版本 | 李宏毅 2016 秋季《Machine Learning》Lecture 6:Brief Introduction of Deep Learning |
| 视频分 P | https://www.bilibili.com/video/BV1ou411N7X3?p=11 (46:30;搬运合集) |
| 官方讲义 | DL (v2).pdf,32 页 |
| 材料说明 | 对应官方讲义整理+必要补充,非视频逐字稿 |
页码为 PDF 物理页(封面第 1 页)。这一版幻灯片用 sigmoid 作激活、用 softmax + cross-entropy 作输出,和 2021 版(P1/P2)的 ReLU 讲法不是同一套素材;本文只按 2016 讲义的内容写,不把后来的经验倒灌进来。
一、本节的问题与直观理解
这一讲要回答「深度学习到底是什么」,答案朴素得有点反高潮:它还是三步,只是第一步的函数集合换成了神经网络。第 4 页把三步写成:定义一组函数(neural network)、评价函数好坏、挑出最好的那个。第 5 页画出一个「神经元」——把输入做加权和、加偏置、过激活函数——并说明不同的连接方式给出不同的网络结构,而网络参数 \(\theta\) 就是所有神经元里的权重与偏置。
直观上,一个神经元是一把「带方向的尺子」:\(w^\top x+b\) 衡量输入在某个方向上的投影,\(\sigma\) 把它压到 0–1 之间,表示这个方向上的特征「有多强」。一层神经元就是同时拿很多把尺子量同一个输入,得到一个特征向量;下一层再对这些特征量一遍。所谓「深度」,就是这种「重新描述」重复很多次。第 5 页把这个结构叫 fully connect feedforward network:相邻层全连、信息单向往前。
二、核心知识:结构、矩阵形式、输出层
单个神经元。 第 5–6 页的神经元与 sigmoid 定义写成
\(x\in\mathbb{R}^{D}\)、\(w\in\mathbb{R}^{D}\)、\(b\in\mathbb{R}\),输出是标量 \(a\)。
一层与多层。 第 9 页把层分成 input layer、hidden layers、output layer;第 13–14 页把逐神经元求和写成矩阵:
若第 \(l\) 层有 \(n_l\) 个神经元,则 \(W^{l}\in\mathbb{R}^{n_l\times n_{l-1}}\)、\(\mathbf{b}^{l}\in\mathbb{R}^{n_l}\)、\(\mathbf{a}^{l}\in\mathbb{R}^{n_l}\)。第 14 页顺带说明为什么大家敢堆层:矩阵乘法可以并行算,GPU 正好擅长这个。
输出层与 softmax。 第 15 页把输出层解释成 multi-class classifier:隐藏层是「替代人工特征工程的 feature extractor」,最后一层接 softmax 把 \(K\) 个实数变成概率。第 16–17 页的例子是手写数字:\(16\times16=256\) 维输入(有墨为 1、无墨为 0),输出 10 维,每一维代表「是 0」「是 1」……的置信度,取最大者为预测。第 21 页给出单样本损失
其中 \(y\) 是 softmax 输出(预测分布),\(\hat y\) 是 target 的 one-hot 向量。第 22 页把总损失写成 \(L=\sum_{n=1}^{N}C_n\),训练目标就是找使 \(L\) 最小的 \(\theta^*\)。
优化与反传。 第 24–26 页仍是梯度下降:算出 \(\nabla L\) 的每个分量、按 \(-\mu\,\partial L/\partial w\) 更新,重复。第 27 页点明反向传播只是「高效算 \(\partial L/\partial w\) 的方法」,不是另一种学习算法。
三、关键推导:一次前向的维度账(复习补充)
讲义第 6–8 页用一个小网络手算,给出 \(f(0,0)=[0.51,0.85]\)、\(f(1,-1)=[0.62,0.83]\) 两组输入输出,用来说明「结构定下来,函数就定下来了」。为了把维度讲清楚,这里另编一个 \(3\to4\to2\) 的例子(权重自编,仅用于核对形状,不是讲义数据)。
取 \(\mathbf{x}\in\mathbb{R}^{3}\)、第一层 4 个 sigmoid、第二层 2 个 sigmoid:
用一组自编权重与 \(\mathbf{x}=(1.0,0.5,-1.0)\) 实算,得到 \(\mathbf{z}^{1}=(0.2229,-0.1562,0.6083,-0.2967)\)、\(\mathbf{a}^{1}=(0.5555,0.4610,0.6476,0.4264)\)、\(\mathbf{y}=(0.2053,0.2815)\)。这个网络的参数是 \(W^{1}\) 的 12 个、\(\mathbf{b}^{1}\) 的 4 个、\(W^{2}\) 的 8 个、\(\mathbf{b}^{2}\) 的 2 个,共 26 个。
如果输出层接 softmax,则 \(\mathrm{softmax}(\mathbf{y})=(0.4809,0.5190)\),两个数相加为 1。注意 softmax 的输入应是 logits(未过 sigmoid 的 \(\mathbf{z}^{2}\)),把 sigmoid 输出再送 softmax 在数学上不算错,但等于人为压窄了动态范围;工程实现里输出层通常只做 linear + softmax,不再套 sigmoid。
四、原讲义例子:深度到底带来了什么
历史不是直线。 第 3 页列了一串时间点:1958 年 perceptron(线性模型)、1969 年指出其局限、1980 年代多层感知机、1986 年反向传播、1989 年「一个隐藏层就够用,为什么要深」、2006 年 RBM 初始化、2009 年 GPU、2011 年语音识别起势、2012 年 ILSVRC 夺冠。这段的作用不是背年份,而是提醒:「深」这个问题在 1989 年就被提出过,后来是靠数据、算力与初始化/训练技巧一起解决的,不是单靠一个公式。
更深是否更好(第 29 页)。 语音识别的词错误率:
| 结构 | WER | 结构 | WER |
|---|---|---|---|
| 1×2k | 24.2% | 1×3772 | 22.5% |
| 2×2k | 20.4% | 1×4634 | 22.6% |
| 3×2k | 18.4% | 1×16k | 22.1% |
| 4×2k | 17.8% | ||
| 5×2k | 17.2% | ||
| 7×2k | 17.1% |
同样每层 2k,1 层到 7 层从 24.2% 降到 17.1%;而把单层加宽到 16k,只有 22.1%。表面上看是「深比宽好」。但第 29 页自己也写了一行 “Not surprised, more parameters, better performance”——层数增加同时参数也增加,这张表无法把「深度」和「参数量」分开。读表时要意识到这是观察,不是受控实验。
表达能力(第 30 页)。 通用逼近定理:任意连续函数 \(f:\mathbb{R}^{N}\to\mathbb{R}^{M}\),只要隐藏层神经元足够多,一个隐藏层的网络就能实现。这句话常被误读成「深没有必要」。它说的是存在性:存在一组参数能逼近,不保证梯度下降找得到,也不保证在有限数据上泛化得好。第 30 页把「为什么是深而不是胖」标成下一讲的问题,本讲没有给答案。
复习补充:参数预算的对比。 同为 56 维输入、1 维输出:一个隐藏层 1000 个神经元需要 \(56\times1000+1000+1000+1=58001\) 个参数;8 层各 100 个需要 \(5700+7\times10100+101=76501\) 个;单层要 4000 个神经元才到 \(232001\) 个参数。也就是说「宽」要用更多参数换同样的覆盖,但这只是算术,不能反过来证明「深更省参数」——真正省不省取决于函数的结构,讲义没有在这里下结论。
五、易错点
- 通用逼近定理 ≠ 一个隐藏层就够了。 它要求「足够多神经元」,且只保证存在;优化难度、样本效率、泛化都不在定理里。
- 第 29 页的表不能证明「深优于宽」。 参数量没控制,讲者自己都标注了这一点;把它当成「深度必然更好」的证据是过度解读。
- softmax 不是激活函数。 它作用在输出层,把 \(K\) 个 logits 归一化成概率;隐藏层用什么激活是另一件事。
- cross-entropy 的符号方向。 \(C=-\sum_i \hat y_i\ln y_i\),\(\hat y\) 是 one-hot target,\(y\) 是预测;写反了在 one-hot 下数值相同,但多分类软标签时会出错。
- \(\theta\) 包含所有层。 说「参数量」时要把每层 \(W\) 与 \(\mathbf{b}\) 都算上,只数权重会漏掉偏置。
- 这是 2016 年的讲义。 全篇用 sigmoid,没有 ReLU、没有 batch norm、没有 Adam;不要拿 2021 版的结论去补它没讲的内容。
六、自测
Q1. 输入 256 维、隐藏层 100 个 sigmoid、输出 10 类,参数量是多少?
参考答案
第一层 \(100\times256+100=25700\),输出层 \(10\times100+10=1010\),合计 \(26710\)。若输出层接 softmax,softmax 本身没有参数。
Q2. 通用逼近定理说一个隐藏层可以逼近任意连续函数,为什么实际还要堆深?
参考答案
定理只保证「存在一组参数」,不保证这组参数能被梯度下降在有限样本、有限算力下找到,也不保证泛化。深层结构提供了参数共享与特征复用的归纳偏置,实践中更容易学、更省参数;但这是经验与结构设计问题,不是定理的直接推论。
Q3. 为什么第 29 页「1×16k 只有 22.1%」不能直接说明宽网络不行?
参考答案
因为宽网络的参数量(约 16k×输入维)与深层网络不同,且只试了一个宽度;要比较「深 vs 宽」必须控制参数量、训练预算与数据,做受控实验。这张表只说明在这个语音任务上,加深比加宽带来的收益更大。
Q4. 输出层已经用了 softmax,还能在前面再套一个 sigmoid 吗?
参考答案
技术上可以,但会把 logits 压到 (0,1) 再取 softmax,等于缩小了可用的动态范围、削弱了置信度的区分度;标准做法是输出层保持 linear,直接接 softmax 与 cross-entropy。
七、30 秒速记
三步:函数集合(网络)→ 损失(cross-entropy 求和)→ 梯度下降。神经元 \(a=\sigma(w^\top x+b)\);一层 \(\mathbf{a}=\sigma(W\mathbf{x}+\mathbf{b})\),\(W\) 形状「本层×上层」。输出层 softmax + one-hot cross-entropy。深度 = 隐藏层多;第 29 页更深更好但参数量未控制;第 30 页通用逼近只是存在性;「为什么深」本讲留白。
八、和其他 P 的关系
- P1 / P2 是 2021 版对同一主题的另一种讲法:P1 从「预测观看人数」这个回归任务长出一个 sigmoid 网络,P2 讲参数向量、batch、ReLU 与过拟合。本文则从「结构」切入,补上 P1/P2 没展开的 softmax 输出层与通用逼近定理;两边的公式同构,符号不同。
- P12 接着本文第 27 页那句「BP 是高效算梯度的方法」,把 \(\partial C/\partial z\) 的递推写清楚。
- P13 / P14 是 2016 版紧随其后的两个 case study:P13 用宝可梦 CP 走完回归三步,P14 用宝可梦属性走完分类三步,正好对应本文第 4 页那个空泛的三步框架。