例行汇报:2025/10/21
进度报告 2025/10/21
本周工作主要集中在学习基础课程上,详细的规划可以参考主页左侧 Notion 链接
1 理论学习
由于混乱的视频顺序,下文中的 P 仅仅对应手写笔记,并不对应视频链接顺序
下文中只汇报学习的内容,以及大致框架,具体详细的数学推导可以参见手写笔记
1.1 机器学习原理 (P8~P9)
通过设定 threshold 来进行分类的结果分割,设定 h 的范围属于给定的一个集合 H,设定数据集为 D
可以计算损失函数如下所示(如果正确为1,错误为0)
$$ L(h, \mathcal{D}) = \frac{1}{N} \sum_{n=1}^{N} l(h, x^n, \hat{y}^n) $$
在训练过程中常见问题就是:训练的阈值在实际的数据中表现不佳,先设定目标是如何将两个 Loss 接近?
$$ L(h^{train},D_{train}) \quad L(h^{train},D_{all}) $$
这里问题就出在数据集上,这里给出结论,为了让两者差距足够小:
$$ L(h^{train}, \mathcal{D}_{all}) - L(h^{all}, \mathcal{D}_{all}) \leq \delta $$
需要数据集满足条件:
$$ \forall h \in \mathcal{H}, \; \left| L(h, \mathcal{D}_{train}) - L(h, \mathcal{D}_{all}) \right| \leq \frac{\delta}{2} $$
经过一系列的推导后我们可以得到结论:
$$ P(\mathcal{D}_{train} \text{ is } bad) \leq |\mathcal{H}| \cdot 2 \exp(-2N\varepsilon^2) $$
这代表了在N不变的情况下,如果想让训练结果接近于实际数据集的结果,模型弹性H应该尽可能地小,数据集数量N应该尽可能大,
但是,H越大则模型在所有数据集上表现更好,这就涉及到了一个权衡
这个 Trade-off 可以通过 hidden-layer 实现,深度学习多个层可以通过类似于复用的方式,在少量的 H 的情况下获得很好的模型弹性。
1.2 训练攻略(P10)
- 为什么用了 Validation set 还是会出现过拟合的问题?
结论是: 验证数据集选择的太大了
- 有什么办法可以让 Error Surface 更加平滑?
这指的是,在训练到某个位置的时候,可能某个维度 feature 很大,导致同样的参数变化可以产生差异很大的 Loss 变化
解决方法成为 Batch Normalization 也就是对所有的,其中一种称为 Feature Normalization,也就是对所有的 feature 进行归一化
- 万一输入(例如测试集)数量不固定怎么 Normalization?
可以通过及计算 moving average 来实现,另外也有一些其他的方法用于优化 Error Surface(例如 Internal Covariate Shift)
1.3 卷积神经网络 CNN(P11)
卷积神经网络有两种解释方式,这里均不阐述,只写结论性
在处理图像的时候,由于数据过于庞大,不能像传统的处理方式一样直接使用 Fully Connected Network
输入的数据格式一般为:
$$ H \times W \times C $$
其中C是 Channel
- Kernel Size: 卷积核大小,一般 3*3
- Stride: 卷积的步长,1代表没有跳过
- Padding: 卷积到边缘会没有空间,Padding 代表在边界补充什么数值,可以是0或者平均值等等
对于处理同一个信息的块,称为 Receptive Field,他们使用同一组训练参数(这减少了参数量),共享的参数称为 Filter
在卷积完成后,一般也会使用 Pooling 操作将图像信息进一步提取,Channel 不变但是 H,W 会变小。
也有的网络不使用池化操作,因为池化会损失信息,本质是为了加快训练的速度。
在 Pooling 后通过 Flatten 展开成为 一个向量,输入全连接网络进入 SoftMax 完成最后的处理。
CNN的缺陷是:不可以处理放大(Scaling)和旋转(Rotation)后的数据,这个可以用 Spatial Transformer Layer 解决
CNN的框架是由图像处理的特性来实现:
- 不需要一次性完整地观看完所有的图片:使用卷积而不是直接全连接层
- 一个特征可能会出现在图片不同的位置:使用 Filter 共享参数
- 将图片缩小并不会影响图像特征:使用 Pooling 缩小图片
1.4 Self-attention(P12~P13)
self-attention 主要应对的是输入 Vector 会改变的数据,例如 语音输入,句子输入,图(CS数据结构)的操作
对于这种输入,一般有三种情况:
- 每一个向量对应一个 Label: POS tagging
- 每一组向量对应一个 Label: Sentiment analysis
- 需要让网络自行决定: Sequence to Sequence
在这种任务下,应当考虑使用串口 Window 输入,使用 self-attention 来判断不同元素之间的关联性
Self-attention的内容以公式为主,此处并不详细展开,仅仅给出核心公式
$$ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^{\mathrm{T}}}{\sqrt{d_k}}\right)V $$
Self-attention 有很多的变种,对于之前的CNN,实际上是 self-attention 的一种变种,CNN 的弹性更小,因此只需要更少的数据可以训练,但是如果训练数据足够大,self-attention 的表现会优于 CNN。这两者并不冲突,可以同时使用。
RNN 曾经作为一种网络结构,已经被 self-attention 取代,因为其计算关联性不可以并行运算
不同self-attention 之间的对比可以参考这篇论文 Long Range Arena 和 Efficient Transformers
评论已关闭