如何确定我的深度学习模型需要什么类型的层?

机器算法验证 深度学习 张量流 喀拉斯
2022-03-28 00:12:38

假设我想制作一个可以做某事的模型。现在,当我在 Google 或 YouTube 上搜索该主题时,我会找到许多相关的教程,似乎一些聪明的程序员已经使用深度学习实现了该模型。

但是他们怎么知道他们需要什么类型的层、什么类型的激活函数、损失函数、优化器、单元数等,他们需要使用深度学习来解决某个问题。

有什么技巧可以知道这一点,还是只是理解和经验的问题?如果有人可以向我指出一些回答我的问题的视频或文章,那将非常有帮助。

2个回答

我有一些好消息和一些坏消息要告诉你。好消息是,由于之前的研究,我们知道哪种架构最适合解决许多问题。坏消息是,由于今天我们没有很好的深度网络泛化理论,因此我们缺乏关于如何为新问题选择架构的理论指导(但是,请阅读此处以获得一些见解)。因此,总的来说,最诚实的答案是“这只是理解和经验的问题”。另一方面,对于一些特定的领域,我们可以给出更多的罐头建议:

计算机视觉

我们知道Convnet 系列架构非常适用于图像分类:LeNet、Alexnet、VGGNet、ResNets 等。您可以在非 GPU 笔记本电脑上训练增强版 LeNet,这是开始学习的好方法关于他们。我建议你从这个 Keras 实现开始

https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py

并尝试对其进行一些改进,方法是在 Keras 中复制在这个 Jupyter notebook的 TensorFlow 层 API中实现 CNN 部分顺便说一句,我不能高度推荐Sebastian Raschka 的书的第二版——这是获得有关机器学习和深度学习的实用知识的好方法。与其浪费时间阅读互联网上的多个教程,不如买本书——你会对该主题有更扎实的理解,另外因为很多关于卷积神经网络的被引用最多的博客文章基本上都是第一版的摘要这本书。

如果您想训练在真实的大数据集(例如 CIFAR-100 或 ImageNet)上表现良好的架构,您需要访问 GPU 集群。

自然语言处理

在这里,我们知道 RNN 运行良好。实际上,称为 LSTM 的“简单”RNN 架构提供的结果比大多数人通常预期的要好得多,如本文所示:On the State of the Art of Evaluation in Neural Language Models这篇论文还强调了现代深度学习研究的一个很大的局限性:很多论文对结果的可重复性和再现性不够关心,有些结果不是作为最新的技术呈现出来的,而是由于不受控制的实验造成的。变化。同样,Raschka 的书以及相应的Jupyter notebook对开始学习 RNN 非常有用。

一般情况

如果您想解决一个已知问题,但可能使用新数据集(例如,您想对汽车零件进行图像分类,因为您为汽车制造商工作),您需要使用模型选择技术,例如交叉验证。您构建不同的网络(不同的层数、不同的激活函数等)并选择具有最小交叉验证误差的网络。然后,您在完整的数据集上重新训练它,并将其用于预测。

但是,由于替代方案的数量可能令人望而却步,您可以使用一些自动化机器学习框架来帮助您探索可能的网络空间,例如:

如果您需要处理大数据集,这些工具将不起作用(它们基于 scikit-learn,因此目前不支持 GPU)。您可以看一下这篇论文,图像分类器的大规模演化:就像我链接的另一篇论文一样,这篇论文需要适当注意以确保结果的可重复性。

如果你想解决一个我们仍然不知道哪种架构效果最好的新问题(比如神经程序综合),你最好的选择可能是参加NIPSICML(或跟踪 arXiv 的正确部分),在希望有人已经解决了您的问题。

如果你想使用深度学习,你必须知道它在当前的艺术状态下擅长什么,以及哪些问题仍然具有挑战性。从本质上讲,问题的类别是(不,我的清单绝对不是详尽无遗的):

a.   image recognition and classification
b.   natural language processing:   translation and 
c.   audio:   speech recognition

什么问题仍然是一个挑战:

a.   logic processing / understanding and proving
b.   source code processing:  automated programming, bug fixing, bugs finding etc.
c.   problem diagnosis (eg, engine, or mechanical problem diagnosis).

我的知识是有限的,比如上面的最后一项现在可能已经很先进了,因为它从使用专家系统进行问题诊断开始的历史悠久(并且有很多成功案例)。

因此,就像上面的 (c) 一样,在识别算法之前,您必须以适合上述知名领域或问题类别之一的形式来构建您的问题。

从广义上讲,算法可以大致分为以下几类:

https://www.quora.com/Machine-learning-is-a-broad-discipline-Where-can-I-find-a-mind-map-knowledge-tree-of-all-the-areas-and-方法及其关系

在此处输入图像描述