当人工智能深度学习模型走进死胡同时该咋办?
欢迎关注“创事记”的微信订阅号:sinachuangshiji
文/安妮 编译自 Semantics3官方博客 (量子位 公众号 QbitAI)
深度学习是一项庞大又复杂的工程,在建立深度学习模型时,走进死胡同被迫从头再来似乎是常事。
近日,Semantics3网站的联合创始人Govind Chandrasekhar在官方博客上发表了一篇文章,讲述了程序员在解决深度学习问题时的应该自问的五个问题。
Semantics3是一家2012年成立的数据科学初创公司,它创建了一个数据库,跟踪产品在网上的销售过程,为零售商提供数据。对于Govind Chandrasekhar写的这篇文章,量子位全文翻译如下:
研究数据科学是一件悲喜交加的事情。喜在当你偶然的发现提高了算法的性能,可能让你拥有持久的兴奋感;悲在你会经常发现自己站在一条单行道的尽头,苦苦探索到底哪里出了问题。
在这篇文章里,我将详述走过无数条深度学习死路后,得到的五个教训。在处理新问题或新方法前,我都会用想想下面这五个问题。
问题一:
先不管神经网络,一个没有先验知识、只受过你的数据集训练的人能解决这个问题吗?
这个问题对解决监督学习的困境尤为受用——这些问题的典型前提是,一个小的高质量数据集(比如N个实体)可以帮助你的模型近似得到一个潜在的功能,之后泛化到包含1000N个实体的整个数据集。
这些方法的好处在于,人类只需要研究很小部分数据就可以了,机器会学会把它运用到大范围的示例中。
但是在现实世界中,问题不总是含有可以被优先识别的模式。人们利用外部常识来解决的认知挑战比我们意识到的还要多,这经常导致我们错误地期望我们的算法在没有常识的情况下能够解决同样的挑战。
举个例子吧,看下面这三种描述:
Pets First Arkansas Dog Jersey, X-Small, Pink
Pets First Arizona Dog Jersey, X-Small, Pink
Pets First AR Dog Jersey, X-Small, Pink
这三组描述中,有两个表示的含义相同,你能找出那个含义不同的吗?
大多数美国人都不难解决这个问题,因为AR=Arkansas,AR!=Arizona是个常识。但是,一个对美国并不熟悉的人,可能就不知道答案是什么了。
你会发现,你创建的神经网络也没有能力解决这个问题,因为在语言应用这方面,没有特定的缩写规则可以供神经网络去模仿。当然指定了Arkansas等同于AR的情况除外。
类似这样的问题还有很多(可能在一开始你并不理解这些问题),并且它们在实际工作中还经常出现。回头审视之前建造的神经网络,并且明确需要补充的新知识是非常困难的。所以,在构建神经网络时,要及时跳出自己的思维定式。
问题二:
你构建的神经网络能通过正确的视角理解你的数据吗?
假设地区的缩写始终是名字的前两个字母,同时这个缩写不会重复。那么,我们再来用不同的示例回看刚刚的匹配问题:
“Pets First Arkansas Dog Jersey, X-Small”
“Pets First Arkansas Dog Jersey, Extra-Small”
“Pets First AR Dog Jersey, X-Small”
“Pets First Arkansas Dog Jersey, Large”
“Pets First MA Dog Jersey, Large”
你的目标是建立一个神经网络用于识别1、2、3等价而4、5不同。这个任务是在考验神经网络对“大小”这个概念理解——它们是否知道X-Small=Extra-Small ?也是在考验它对缩写的理解能力,比如Arkansas=ARkansas=AR因为前两个字母相同,而Arkansas不等于MA,等等。
你可能会通过Word2Vec来构建一个嵌入空间,将 X-Small映射为Extra-Small来解决这个问题。
尽管这种方法是一个标准解法,但可能你会妨碍神经网络找到你想让它学习的内容。如果把AR换成小写的ar,对人类来说就比较难识别了,我们会纠结ar到底指的的Arizona还是are。
同样,如果你选择建立词汇的嵌入空间,有效地将每一个单词映射到唯一的标记,那么你就掐断了神经网络理解组成字符“ARkansans”的机会。
这种模糊网络问题在你构建网络时经常出现,尤其是在建立考虑不同类型的输入信号的模型时。
问题三:
你的网络是在钻你训练集里的牛角尖,还是帮你解决手头的问题?
假设你正在构建一个二分的图像分类器,来检查文档中的文本是计算机打印的还是手写的。为了构建计算机打印文本的训练数据集,你用电脑上的软件直接生成了带文字的jpeg图片;为了获取手写文本的样本,你把这些jpeg图片发送到做数据标注的公司,让他们把这些图片转录成文字,并将扫描成jpeg文件。
之后,就可以运行你的分类器了。不要高兴得太早,虽然目前它的训练准确率已经超过了99%,但当我们用实际场景来测试时,分类器表现并不好。这是为什么呢?
你构建的神经网络可能带有简单的指示性偏差,扫描手写的图片可能带有灰白的背景色,而软件生成的JPEG是纯白色的背景。你的神经网络为了解决你交给它的问题,可能并没有去分析内容、上下文、形状和颜色等要素,而是只抓住了背景色的这一点微小差别。
需要记住的是,你的神经网络永远都不会明白你的大方向,它所做的就是基于手头的目标和数据,以最简单的方式尽快给出一个答案。
彻底审查你的数据集,消除可供神经网络钻牛角尖的特征,可以节约成本和时间。
问题四:
你的网络有兄弟问题可以为它提供支持吗?
在特定领域的问题上,诸如GloVe和Inception之类的预先训练模型可能并不好用。这将迫使你开始随机初始化神经网络,也就意味着可能经过好几天的训练,你还不知道自己的模型效果如何。
你的模型可能还面临着一个问题:数据集太小了或者质量太差了,即使通过旋转、变形等手段扩充之后,也还是达不到训练的要求。
在这种情况下,寻找它的兄弟问题可能是个解决办法。但要注意,这些问题需要符合两个标准:
它们不能和你手头的数据集有同质量和数量的问题。
它们的神经网络需要有一组层,能捕捉到你的模型所需的概念。
问题五:
你的网络是做不到还是懒?如果它懒,如何逼迫它学习?
假如你是一个绘画外行,让你猜测三幅昂贵的绘画作品价格。有三个可用信息可供你查看——作品的年限、作品十年前的价格和这幅画的高分辨率图像。
在没有经过前期训练的情况下,让你完成这个任务,给出尽可能正确的答案,你会怎么办?
你是会报名参加一个为期两月的绘画课程,来学习复杂的绘画技艺,还是会考虑用作品的年限和十年前的价格做一个方程来猜测价格?
即使你能意识到理想的价格方程式包含这三种信息的组合,但你还是很愿意接受一个懒惰的选项:、用两种信息来进行预测。虽然这个选项不是最优解,但也是在能接受范围的。你会更倾向只依赖容易理解和表达的信息。
在用机器学习解决真实问题时,如果你的模型有多个输入信息,它们的复杂度差异很大时,也会遇到这个问题。对这样的模型进行训练,几个周期之后,你可能会发现你的模型好像已经接近完成,并且拒绝进一步学习。
在这种情况下,最好的解决方法是去掉一个输入项,看整体指标的变化。如果一个输入项和结果相关,去掉了之后却对结果毫无影响,你就应该考虑单独用这个输入项来训练模型,当模型学会了依据这个输入项做判断之后,再逐渐将其余的信息也加入进来。
(声明:本文仅代表作者观点,不代表新浪网立场。)