Web开发

首页 » 常识 » 问答 » 如何从零开始构建深度学习项目这里有一份详
TUhjnbcbe - 2025/8/9 9:25:00

在学习了有关深度学习的理论课程之后,很多人都会有兴趣尝试构建一个属于自己的项目。本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题。

本文由六大部分组成,涵盖深度学习(DL)项目的整个过程。我们将使用一个自动漫画着色项目来说明深度学习的设计、程序调试和参数调整过程。

本文主题为「如何启动一个深度学习项目?」,分为以下六个部分:

第一部分:启动一个深度学习项目第二部分:创建一个深度学习数据集第三部分:设计深度模型第四部分:可视化深度网络模型及度量指标第五部分:深度学习网络中的调试第六部分:改善深度学习模型性能及网络调参

第一部分:启动一个深度学习项目

应该选择什么样的项目?

很多人工智能项目其实并没有那么严肃,做起来还很有趣。年初,我着手启动了一个为日本漫画上色的项目,并作为我对生成对抗网络(GAN)研究的一部分。这个问题很难解决,但却很吸引人,尤其是对于我这种不会画画的人来说!在寻找项目时,不要局限于增量性改进,去做一款适销对路的产品,或者创建一种学习速度更快、质量更高的新模型。

调试深度网络(DN)非常棘手

训练深度学习模型需要数百万次的迭代,因此查找bug的过程非常艰难,而且容易崩坏。因此我们要从简单的地方着手,循序渐进,例如模型的优化(如正则化)始终可以在代码调试完成后进行。此外,我们还需要经常可视化预测结果和模型度量标准,并且我们首先需要令模型跑起来,这样就有一个可以后退的基线。我们最好不要陷在一个很大的模型,并尝试将所有的模块都弄好。

度量和学习

宏伟的项目计划可能带惨烈的失败。多数个人项目的第一个版本会持续两到四个月,这个时间非常短暂,因为研究、调试和实验都需要花费大量的时间。一般我们安排这些复杂的实验,使其通宵运行,到第二天清晨时,我们希望得到足够的信息来采取下一步行动。在早期阶段,这些实验不应超过12小时,这是一条良好的经验法则。为了做到这一点,我们将漫画上色项目范围缩小到单个动画人物的上色。此外,我们需要设计很多测试,因此借助它们分析模型在实验中的不足之处。一般这些测试不要计划得太远,我们需要快速度量、学习,并为下一步设计提供足够的反馈。

研究与产品

当我们在年春季开始讨论漫画上色项目时,KevinFrans有一个Deepcolor项目,用GAN为漫画添加色彩提示。

在确定目标时,你会花很大力气来确保项目完成后仍然具有意义。GAN模型相当复杂,年初还没达到嵌入产品所需的质量水准。然而,如果你把应用范围缩小到产品可以巧妙处理的程度,你就可以把质量提高到商用水准。为此,无论着手启动何种DL项目,都要把握好模型泛化、容量和准确性之间的平衡。

成本

必须使用GPU来训练实际模型。它比CPU快20到倍。价格最低的亚马逊GPUp2.xlarge站点实例要价7.5美元/天,而8核GPU的价格则高达75美元/天。在我们的漫画上色项目中,一些实验花费的时间就超过两天,因此平均每周花费至少需要美元。至于更快的AWS实例,花费可能高达0美元/周。我们可以购买独立计算机,而不是使用云计算。年2月,搭载NvidiaGeForceGTXTi的台式机售价约为美元。在训练精调的VGG模型时,它比P2实例大约要快5倍。

时间线

我们将开发分为四个阶段,最后三个阶段在多次迭代中进行。

项目研究模型设计实现及调试实验及调参

项目研究

我们会先对现有产品进行研究,以探索它们的弱点。许多GAN类型的解决方案使用空间颜色提示,图案有点不清晰,有时还会出现颜色混杂。我们为自己的项目设定了两个月的时间框架,其中有两个优先事项:生成不带提示的颜色及提高颜色保真度。我们的目标是:

在单个动画角色上为灰度漫画着色,且不使用空间颜色提示。

站在巨人的肩膀上

接下来,我们需要了解相关的研究和开源项目,许多人在开始实践之前至少要看几十篇论文和项目。例如,当我们深入研究GAN时,发现有十几个新的GAN模型:DRAGAN、cGAN、LSGAN等,阅读研究论文可能会很痛苦,但非常有意义。

深度学习(DL)代码简练,但很难排查缺陷,且很多研究论文常常遗漏了实现细节。许多项目始于开源实现,解决的问题也很相似,因此我们可以多多搜索开源项目。因此我们在GitHub上查看了不同GAN变体的代码实现,并对它们进行若干次测试。

第二部分:创建一个深度学习数据集

深度学习项目的成功取决于数据集的质量。在本文的第2部分中,我们将探讨创建优质训练数据集的核心问题。

公开及学术数据集

对于研究项目,可以搜索已建立的公开数据集。这些数据集可以提供更整齐的样本和基线模型性能。如果你有多个可用的公开数据集,请选择与你的问题最相关且质量最好的样本。

自定义数据集

对于实际问题,我们需要来自问题领域的样本。首先尝试查找公共数据集。关于创建高质量自定义数据集的研究还有所欠缺。如果没有可用的资料,请搜寻你可以抓取数据的位置。该位置通常有很多参考,但数据质量通常较低,还需要投入大量精力进行整理。在抓取样本之前,要专门抽出时间评估所有选项并选择最相关的选项。

高质量数据集应该包括以下特征:

类别均衡数据充足数据和标记中有高质量信息数据和标记错误非常小与你的问题相关

不要一次爬取所有数据。我们经常借助标签和分类来抓取网站样本,从而获取与我们的问题相关的数据。最好的爬取方法是在你的模型中训练、测试少量样本,并根据得到的经验教训改善抓取方法。

清理你抓取的数据非常重要,否则,即使最好的模型设计也达不到与人类水平相当的表现。Danbooru和Safebooru是两个非常受欢迎的动漫人物来源,但是一些深入学习的应用程序偏爱Getchu,以获得更高质量的绘图。我们可以使用一组标签从Safebooru下载图像,并直观地检查样本并运行测试来分析错误(表现不佳的样本)。

模型训练和视觉评估都提供了进一步的信息来细化我们的标签选择。随着迭代的继续,我们将学到更多,并逐渐进行样本积累。我们还需要使用分类器进一步过滤与问题无关的样本,如清除所有人物过小的图像等。与学术数据集相比,小型项目收集的样本很少,在适当情况下可以应用迁移学习。

下面的左图由PaintsChainer提供,右图由最终的模型上色:

我们决定用一些训练样本来对算法进行测试。结果并没有给人惊喜,应用的颜色较少,样式也不正确。

由于对模型进行了一段时间的训练,我们知道什么样的绘图表现欠佳。正如预期的那样,结构错综复杂的绘图更难上色。

这说明好好选择样本非常重要。作为一款产品,PaintsChainer专注于它们擅长的线条类型,这点非常明智。这次我使用了从互联网上挑选的干净线条艺术,结果再次给人惊喜。

这里有一些经验教训:数据没有好坏之分,只是有些数据不能满足你的需求。此外,随着样本类别的增加,训练和保持输出质量会变得更加困难,删除不相关的数据可以得到一个更好的模型。

在开发早期,我们认识到一些绘图有太多错综复杂的结构。在不显著增加模型容量的情况下,这些绘图在训练中产生的价值很小,因此最好不要使用,否则只会影响训练效率。

重点回顾

尽可能使用公共数据集;寻找可以获取高质量、多样化样本的最佳网站;分析错误并过滤掉与实际问题无关的样本;迭代地创建你的样本;平衡每个类别的样本数;训练之前先整理样本;收集足够的样本。如果样本不够,应用迁移学习。

第三部分:深度学习设计

第三部分介绍了一些高层次的深度学习策略,接下来我们将详细介绍最常见的设计选择,这可能需要一些基本的DL背景。

简单灵活

设计初始要简单、小巧。在学习阶段,人们脑海中会充斥大量很酷的观念。我们倾向于一次性把所有细节都编码进来。但这是不现实的,最开始就想要超越顶尖的结果并不实际。从较少网络层和自定义开始设计,后面再做一些必要的超参数精调方案。这些都需要查证损失函数一直在降低,不要一开始就在较大的模型上浪费时间。

在简短的Debug之后,我们的模型经过次迭代产生了简单的结果。但至少该模型所上的颜色开始限制在固定区域内,且肤色也有些显露出来。

在模型是否开始上色上,以上结果给了我们有价值的反馈。所以不要从大模型开始,不然你会花费大量时间Debug和训练模型。

优先性以及增量设计

首先为了创造简单的设计,我们需要选出优先项。把复杂问题分解成小问题,一步一步解决。做深度学习的正确策略是快速的执行学到的东西。在跳到使用无暗示(nohints)模型之前,我们先使用带有空间颜色暗示的模型。不要一步跳到「无暗示」模型设计,例如我们首先去掉暗示中的空间信息,颜色质量会急剧下降,所以我们转变优先性,在做下一步前先精炼我们的模型。在设计模型的过程中,我们会遇到许多惊喜。相比于做个要不断改变的长期计划,还不如以优先性驱动的计划。使用更短、更小的设计迭代,从而保证项目可管理性。

避免随机改进

首先分析自己模型的弱点,而不是随意地改进,例如用双向LSTM或者PReLU。我们需要根据可视化模型误差(表现极差的场景)以及性能参数来确定模型问题。随意做改进反而适得其反,会成比例的增加训练成本,而回报极小。

限制

我们把限制应用到网络设计,从而保证训练更高效。建立深度学习并不是简单的把网络层堆在一起。增加好的限制(constraints)能使得学习更为有效,或者更智能。例如,应用注意机制,能让网络知道注意哪里,在变分自编码器中,我们训练隐藏因子使其服从正态分布。在设计中,我们应用去噪方法通过归零除去空间颜色暗示的大量分数。啼笑皆非的是,这使得模型能更好地学习、泛化。

设计细节

文章接下来的部分,将讨论深度学习项目中会遇到的一些常见的设计选择。

深度学习软件框架

自谷歌年11月发布TensorFlow以来,短短6个月就成为了最流行的深度学习框架。虽然短期看起来难有竞争对手,但一年后Facebook就发布了PyTorch,且极大的受研究社区的

1
查看完整版本: 如何从零开始构建深度学习项目这里有一份详