摘要: 本贴从极简的角度描述深度网络的特征提取本质.
1. 线性模型
一维线性模型
题目 1: 到水果店买苹果, 1 个苹果 5 元钱, 2 个苹果 9 元钱, 3 个苹果 13 元钱. 请问: 6 个苹果多少钱?
解: 将苹果的数量为
x
x
x, 价格记为
y
y
y, 我们需要获得一个函数
f
f
f, 使得
y
=
f
(
x
)
y = f(x)
y=f(x)
假设
f
f
f 为线性函数, 可以将其记为
f
(
x
)
=
a
x
+
b
(1)
f(x) = ax + b \tag{1}
f(x)=ax+b(1)
代入前两条数据, 有
f
(
1
)
=
a
+
b
=
5
f(1) = a + b = 5
f(1)=a+b=5;
f
(
2
)
=
2
a
+
b
=
9
f(2) = 2a + b = 9
f(2)=2a+b=9. 可求得
a
=
4
a = 4
a=4,
b
=
1
b = 1
b=1.
将该结果代入第 3 条数据, 有
f
(
3
)
=
3
×
4
+
1
=
13
f(3) = 3 \times 4 + 1 = 13
f(3)=3×4+1=13. 与数据本身一致, 完美!
因此, 6 个苹果需要花
f
(
6
)
=
6
×
4
+
1
=
25
f(6) = 6 \times 4 + 1 = 25
f(6)=6×4+1=25 元钱.
解释: 包装费 1 元, 苹果每个 4 元.
多维线性模型
题目 2: 学生们参加考试, 几个学生的单科成绩 (换算成百分制) 与总成绩如表1所示.
学生编号 | 政治| 语文 | 数学 | 英语 | 物理 | 化学 | 总分 |
---|---|---|---|---|---|---|
1 | 90 | 92 | 95 | 85 | 88 | 80 |
2 | 88 | 82 | 85 | 77 | 76 | 70 |
… | … | … | … | … | … | … |
10 | 92 | 88 | 82 | 90 | 75 | 78 |
自变量 (关于科目) 有 6 个, 因变量 (总分) 有 1 个, 函数记为:
y
=
f
(
x
1
,
x
2
,
x
3
,
x
4
,
x
5
,
x
6
)
=
a
x
1
+
b
x
2
+
c
x
3
+
d
x
1
+
e
x
2
+
f
x
3
+
g
y = f(x_1, x_2, x_3, x_4, x_5, x_6 ) = a x_1 + b x_2 + c x_3 + d x_1 + e x_2 + f x_3 + g
y=f(x1,x2,x3,x4,x5,x6)=ax1+bx2+cx3+dx1+ex2+fx3+g
这里
a
a
a 到
f
f
f 相当于每科的加权系数,
g
g
g 如果不为 0, 可以认为是基础分数 (如体育达标).
线性模型的本质是特征提取器
从题目2可以看出, 线性模型是基本的特征提取器, 它从单科成绩 (基本特征) 通过加权和, 提取出了总成绩 (复合特征).
线性模型的优缺点
优点: 简单, 易于计算, 避免过拟合
缺点: 只能拟合简单的情况
2. 全连接神经网络 BP
全连接神经网络在线性模型上进行了 3 方面的改进:
a) 从原始的
m
m
m 个特征提取了
m
1
m_1
m1 个特征;
b) 对提取的特征使用激活函数, 进行简单的特征变换, 改变了线性的特点;
c) 在第 2) 点的支撑下, 做成多层网络, 各层的特征数依次是
m
m
m,
m
1
m_1
m1,
m
2
m_2
m2, …,
m
k
m_k
mk. 只要最后一层的特征数与目标特征数 (因变量的个数) 一致就行.
除了输入层与输出层, 中间的层次都称为隐藏层.
有两个流派:
a) 深度学习.
k
k
k 值比较大, 也就是在提取的 (浅层) 特征基础上, 进一步获得新的 (深层) 特征, 具有更强的表达能力.
b) 宽度学习.
k
k
k 值比较小, 甚至可以取 2. 但
m
1
m_1
m1 非常大. 基本思想是: 一次性搞了这么多特征, 总有几个是赌对了的.
早就有理论证明, 深度学习与宽度学习等价.
当变量只有一个的时候, 神经网络的作用相当于一个函数:
y
=
f
(
x
1
,
x
2
,
…
,
x
m
)
(1)
y = f(x_1, x_2, \dots, x_m ) \tag{1}
y=f(x1,x2,…,xm)(1)
3. dropout 技术
第
i
i
i 层的
m
i
m_i
mi 个节点, 与第
i
+
1
i + 1
i+1 层的
m
i
+
1
m_{i + 1}
mi+1 个节点都有连接, 这导致两方面问题:
a) 参数量大, 训练开销大;
b) 过拟合, 即训练数据上效果好, 但测试数据的效果不好.
为了解决该问题, 我们需要随机去除掉一些连接吗?
No. 现有技术更加武断, 直接在训练的时候忽略 (但不是物理删除) 某些节点. 这相当于每次只提取部分特征, 但在预测的时候使用所有特征这种方案很大程度缓解了上述问题. Amazing~
4. 循环神经网络 RNN
对于文本 (如小说)、时序 (如股票) 等序列数据, 数据点 (特征) 之间存在前后关系. 如果使用全连接神经网络, 忽视了这样的关系, 就会导致效果不好. 为此, 循环神经网络把上一时间点的输出也作为下一时间点的输入, 即考虑了上文对下文的影响. 这样就可以提取时序特征.
5. 长短期记忆网络 LSTM
延续了 RNN 的思想, 但并不是越近的上文越重要, 而是要把一些离得比较远的、重要的信息也记住. 网络比较复杂, 记忆门、遗忘门之类.
6. Transformer
RNN 和 LSTM 可以利用上文信息, 而 Transformer 还可以利用下文信息. 广为流传的一个例子是: “研表究明,汉字序顺并不定一影阅响读”. 人类在阅读的时候, 可能很快地抓取关键信息, 而从一定程度上忽略顺序.
Transformer 具有两个特点:
a) 并行, 而不是串行地理解序列的不同部分;
b) 由于 a) 带来的速度提升.
7. 卷积神经网络 CNN
对于计算机视觉领域, 图片数据是二维的, 像素点之间不但有左右相邻, 还有上下相邻. 这时使用 RNN 肯定就不合适了.
卷积核类似于一个哈哈镜, 使用它扫描图片一遍, 就获得了新的特征, 这个被称为 卷积操作. 不同的卷积核导致不同的新特征. 这些卷积核获得的结果又叠加, 获得了下一层的图. 本质上讲, 卷积操作就是将全连接网络的加权和改成了卷积再求和.
假设前一层有
m
i
m_i
mi 个图 (或称有
m
i
m_i
mi 个通道, 彩色图通常作为 RGB 3 通道输入), 后一层有
m
i
+
1
m_{i+1}
mi+1 个图, 则这两层之间有
m
i
×
m
i
+
1
m_i \times m_{i+1}
mi×mi+1 条连边, 需要相应个数的卷积核.
需要注意, 这里是按照图的个数来计算卷积核 (参数) 个数, 而不是按照像素点. 因此, 参数量比全连接神经网络的少很多.
由于每层的图片有长度、宽度, 还有通道数, 构成了三维的 Tensor (张量), 网络中的数据就像是张量在从左到右流动. 这就是TensorFlow 名字的由来.
一般来说, 卷积操作之后要跟激活操作.
池化既是一个特征提取的过程, 也是一个特征降维的过程. 以
2
×
2
2 \times 2
2×2 平均池化为例,
4
4
4 个格子里的数据取均值, 获得
1
1
1 个新的特征.
以针对手写阿拉伯数字识别的 MNIST 数据集为例.
- 原始图像为 28 × 28 28 \times 28 28×28 的矩阵 (每个点取 [ 0 , 255 ] [0, 255] [0,255] 的值表示灰度), 其通道数为 1, 即 1 × 28 × 28 1 \times 28 \times 28 1×28×28 的张量.
- 第 1 层使用 6 6 6 个 5 × 5 5 \times 5 5×5 的卷积核, 获得了 6 × 24 × 24 6 \times 24 \times 24 6×24×24 的张量 ( 28 − 5 + 1 = 24 28 - 5 + 1 = 24 28−5+1=24).
- 第 1 层激活后, 使用 2 × 2 2 \times 2 2×2 的平均池化, 获得了 6 × 12 × 12 6 \times 12 \times 12 6×12×12 的张量 ( 24 / 2 = 12 24/2 = 12 24/2=12).
- 第 2 层使用 12 12 12 个 5 × 5 5 \times 5 5×5 的卷积核, 获得了 12 × 8 × 8 12 \times 8 \times 8 12×8×8 的张量 ( 12 − 5 + 1 = 8 12 - 5 + 1 = 8 12−5+1=8).
- 第 2 层激活后, 使用 2 × 2 2 \times 2 2×2 的平均池化, 获得了 12 × 4 × 4 12 \times 4 \times 4 12×4×4 的张量 ( 8 / 2 = 4 8/2 = 4 8/2=4).
- 第 3 层 (输出层) 使用 10 10 10 个 4 × 4 4 \times 4 4×4 的卷积核, 获得了 10 × 1 × 1 10 \times 1 \times 1 10×1×1 的张量. 即 10 10 10 维向量. 如果第 1 1 1 个分量最大, 则判断输入为 0 0 0; 第 10 10 10 个分量最大, 则判断输入为 9 9 9.
8. ViT: Vision Transformer
把图片打碎成多个小块来理解 (提取特征), 同时打通了文字与图片之间的壁垒。 Amazing + ^{+} +.
9. 编码-解码器 Encoder-decoder
以机器翻译.
- 编码: 把一个源语言 (中文、英文等) 写句子通过若干的操作 (one-hot 编码, RNN 读入与输出, 卷积等等), 获得机器的内部表示 (可以是长度为 512 的实数向量). 这可以看作是特征提取的过程.
- 解码: 把内部表示通过类似的操作, 获得自然语言的表示. 这也是特征提取的过程.
需要注意, 不管把中文翻译为英文或法文, 有可能获得的机器内部编码是一致的.
自监督学习利用这个原理, 把中文句子编码后解码成中文句子, 这样就有大量的数据来训练编码器.
同样的原理可以用于图像处理, 比如去噪、风格迁移.