如何修补 CNN 架构?

人工智能 神经网络 机器学习 卷积神经网络
2021-11-08 23:07:33

我正在考虑创建一个 CNN。现在众所周知,CNN 需要很长时间来训练,因此建议坚持使用已知的架构和超参数。

我的问题是:我想修改 CNN 架构(因为它是一项专门的任务)。一种方法是创建一个 CNN 并检查小型数据集,但是我无法知道最后的全连接层是否过度拟合数据而卷积层什么都不做(因为大型 FC 层可以很容易地过拟合数据)。交叉验证是检查它的好方法,但它可能并不令人满意(因为我的观点是,如果数据集足够小并且未来数据几乎没有变化,CNN 可以替换为全连接神经网络——套)。

那么有哪些方法可以修补 CNN 并在合理的训练时间内获得对未来数据集的良好估计?我之前的假设错了吗?一个详细的答案会很好!

1个回答

没有简单的方法可以使用 CNN 的超参数(层数、层配置、每层输出数)并准确了解这些将如何影响模型的最终性能。但是,您可以采取一些措施来避免浪费太多时间进行培训和重新培训。

为什么?

在训练 CNN 时,我们的目标是最小化损失函数,因此更好的 CNN 模型被定义为收敛到一组具有较低损失函数的模型参数的模型。确定给定 CNN 损失函数的最小值已经非常困难,并且不能保证梯度下降的错误都会达到真正的最小值。

由不同的超参数导致的 CNN 的每个变化仍然会导致大量的模型参数。没有办法知道损失函数在这个超维空间中的样子,更难估计它的最小值。

该怎么办?

首先,您应该尝试了解网络中的每一层如何影响其输入。你应该知道什么样的层用于什么样的数据。您还应该知道针对不同的数据分布使用哪种激活函数。您还应该知道每层要尝试多少模型参数,以便充分压缩数据同时不丢失重要信息。

通过阅读为特定任务找到成功模型的论文,您可以获得很多这种直觉。

此外,您可以使用更少量的数据进行训练,并通过查看损失函数向其最小值(动量)移动的速度来估计潜在的最小损失函数。当损失函数下降得更快时,通常会达到较低的最小值。然而,这并不总是正确的。损失函数可以先缓慢收敛,然后再加速。这是完全可能的。但是,您可以通过这种方式了解模型的潜力。