用深度学习解决Bongard问题

摘要: 本文介绍了深度学习和Bongard问题,以及如何用深度学习更好的解决Bongard问题。

Bongard问题是苏联计算机科学家Mikhail Bongard提出的。从20世纪60年代,他致力于研究模式识别,并且设计了100个这样的谜题,使之成为评判模式识别能力的一个好基准。而且这些谜题对人和算法都具有挑战性。举个简单例子:

 

如图所示,左边的6张图片符合某种规则,而右边的图片则符合另外一种规则。要解决这个问题,需要了解模式并找出它们各自的规则(即解决方案)。规则:“左边:三角形,右边:四边形”。

这个例子很简单,几秒钟就能搞定,但也有更难的问题,例如:

 

你可以试着找找规则,测试下自己的模式识别能力,答案请点击:22293754

这些问题在Douglas Hofstadter于1979年出版的《哥德尔,埃舍尔,巴赫—集异璧之大成》一书中出现后更广为人知。Hofstadter的博士生Harry Foundalis建立了一个自动化系统来解决他的博士研究项目,这个系统称为“Phaeco”。这个程序不仅能解决Bongard问题,而且是认知视觉模式识别的一种架构。

深度学习和Bongard问题

2006年创建的Phaeco影响非常大,因为它不仅能演示15个问题的解决方案,而且在许多情况下效率比人类还要快。其实它能够解决更多的问题,但是需要额外的工作来增强特征提取器或者探测器。

最近人工智能和ML的研究取得了显著的进展。卷积神经网络(CNN)实现在GPU上已经赢得了大量的ImageNet竞争,近年来,CNN算法和体系结构一直在不断改进。

所以我想,利用深度学习方法能够帮助解决Bongard问题吗?Bongard问题激发了我对深度学习的研究,但是由于它是基于简化的图像,而深度学习只有很少的生产图像的类,导致对原始的Bongard问题的答案并不确定。

现在我决定尝试解决这个问题。

问题的形成和方法


将深度学习方法应用于Bongard问题至少会有两个问题。

1、这是一次性学习问题。深度学习效果最好的应用都是基于监督学习的。例如,对数百万张图片进行训练并分类。在这种情况下,神经网络显示出了与人类相似甚至更好的表现。

但是如果仅仅从几个例子中学习,在“一次性学习”中,机器学习方法在灵活性和性能方面远不如人类。BPs每个类只有6个例子,这使得很难用算法解决。

2、这实际上是一个多模式的学习问题。也就是说输入的是图像形式,而输出的是以自然语言描述的分类规则的形式。虽然已经存在一些解决这些问题的方法,但是我没找到一个明确的解决方案。所以我决定以更简单的东西开始,以最终扩展到完整的问题公式为目标。

你可以将Bongard问题的解决方案作为一个分类问题,而不是一个对它规则的口头描述。在这种情况下,12张图片可以被分成两组:10张为“训练”图片,2张为“测试”图片。对于训练图片来说,它明确的知道自己属于哪个类,左边还是右边。而测试图片是随机交换的,它们属于哪个类是未知的。要解决这个问题就意味着先看“训练”图像,然后再决定“测试”图像属于哪个类。

图三展示了这个公式的分类模式。

 

图3

现在,通过简化问题描述,我决定使用转移学习来实际解决问题。它是单点学习的方法之一,其在视觉类比中显示了很好的效果。首先,要在类似目标问题的示例中多次训练模型,然后重用该模型的相关参数。

深度神经网络学习训练数据的层次化特征表示。如果要在Bongard图像上训练一个卷积神经网络,它将先学习不同的几何形状的相应特征,每个特征可以被看成一个过滤器。如果存在对应的特征,就会激活对应分类器。

为了训练一个特征提取神经网络(NN),我必须创建一个新的数据集而不能用BP的图像,因为它们太少了而且相似性太少。

合成数据集


为了对特征提取网络进行训练,我生成了一组类似于Bongard问题中的图像的随机图像。每幅图像都包括一个几何形状,并在随机位置,按随机的比例,随机的旋转。如果形状是闭合的,还可以随机的填充成黑色。该组总共24个类,示例如下:


我生成了1M图像的训练集,以及10K图像的测试集。图像链接

神经网络


为了训练生成的合成图像的分类器,我是用了一个相对较小的神经网络。它是基于“Darknet Reference”模型的,并因为输入图像相对较小而删除了一些maxpool图层。它有9个卷积层,架构描述如下所示;

 

经过8 epochs的数据训练后,它收敛到了可以接受的精确度:top 1:0.848000,top 2:0.968000。

神经网络输出处理


为Bongard问题做一个分类器的第一步是将所有12张图像通过神经网络的正向传递。在卷积神经网络中,每一层都有一组具有共享权重的过滤器,每个过滤器的响应形成一个特征映射。图6显示了所有层的特征图。输入图像位于左侧,由左至右依次按层进行处理。

 

激活映射中的每个值(每个“像素”)都有可能是一个特性。但是这些特征的值并不意味着输入图像的位置、方向、大小和其他参数不变。基于这一特性仅在10个图像上训练出的分类器可能找不到一个抽象的分类规则,但是很快就能适应这种分类。

为了使特征转换不变,要将每个特征映射以如下方式变换成单个二进制特征:1)标准化跨层特征图,2)将阈值设置为0.3(图7),3)如果特征映射的值高于阈值,则将生成的特性值设为1,否则为0(图8)。

 

图7 归一化和阈值化后的特征映射(原页面可以水平滚动)

 

图8 基于特征映射的二值制特征(原网页该图片可以水平滚动)

通过这种方式每个图像都能被CNN描述。我只是用了6-10层的特性,在这些图层上一共有1050个特征映射,这意味着每个图像都要用一个长度为1050的二进制向量来描述。

寻找解决问题的分类器


提取到特征后,就可以把它们用于实际的分类问题了。现在我决定使用最简单的分类器—一个决策树。它通常是复杂分类器的一部分,但在这种情况下最简单的分类器就足够了。用了这种分类器后,只需要一个特征值就能判断出图像属于左边还是右边了。

要想学习这个规则的算法其实很简单,就是一个简单的直接搜索。它可以通过举例来演示:

1)对10个训练图像进行特征提取。如上所述,对每个图像都用一个二元特征向量来表示,该向量从NN角度描述这个图像。

 

图9基于CNN特性的二进制描述符

2)对于每个特征,检查所有10个训练图像的值。如果5个左图像的特征值和5个右图想的特征值不同,那么它就有可能成为分类器。

3)如果有好几个分类器,那么就需要一个验证标准来选择出其中一个。我们可以通过比较两个测试图像的特征值:因为图像属于不同类,所以特征值应该是不同的。忽略测试类的精确度,只把它们特征值是否相等用作验证标准。

4)把通过验证的分类器应用于测试图像,以检查是否能够正确分类。如果是正确的,问题就被认为是正确解决了。

5)如果没有发现规则或者没有规则通过验证,那么问题就被认为是未解决的。

表1展示了搜索6号问题分类特征的示例(如图1所示)。所有的特征中,只显示在左边图像和右边图像的特征值不同时的特征。只有特性731通过了验证,且经过测试后发现是正确的。

 

表1:问题6的特性分析

表2显示了错误分类的示例(问题62)。虽然这两个特性被选为分类器并通过了验证,但是对测试图像还是显示了错误的结果。

 

表2:问题62的错误分析

如上所示数据可视化以及分类的代码在github上。

结果分析


把以上算法应用在232个问题上进行运算,结果如下:解决了47个,正确了41个,所以,解决率为20%,正确率为87%。

为了更好地显示结果,解决了的问题在表3中用不同颜色所示,绿色-正确,红色-不正确。

 

表3:已解决问题

问题集的不同部分具有不同的复杂性,根据结果可知前几十个问题比较简单。如图10所示,准确性依赖于问题数。

 

图10 解决问题的正确率,按问题序数排序

表4.显示了由不同作者设计的问题的准确性。由M.Bongard设计的前100个问题用本文说的算法最容易解决,其余的问题则更具挑战性。

 

表4:不同作者设计的问题的平均精度

H.Foundalis在他的论文中收集了人们在解决问题1-100时的成绩数据。图11显示了成绩排名前20的正确率。所有的问题都是独一无二的而且结果也各不相同,这表明,即使是对人类来说,有些问题也是相当具有挑战性的。

 

图11 人类求解Bongard问题时的精度

结论


现在一些简单的深度学习方法对解决Bongard问题非常有用,至少在该问题简化的分类形式下是这样的。有趣的是,M.Bongard几乎在《模式识别》中预测了一些类似的方法。在该实例中,特征空间要通过预先训练一个神经网络来对图像进行分类,使其与问题域中的图像相似。原始问题的表述包括用自然语言解释分类规则,这对人们来说是相当容易的,这对于基于手工构造特征与模式检测器的“经典”算法(如“Phaeco”)来讲,似乎也是可能的。但是对于神经网络来说,具有透明和可解释的解决方案是一个已知的弱点,因此原始问题对神经网络可能更具有挑战性。有几种方法可以解决这个问题:

创建一个包括图像和Bongard问题中规则解释的多模态合成数据集,并将其用于监督学习。但是,产生有意义的谜题本身是很困难的,即使有可能产生,我也不确定迁移学习在该情况下是否仍有效。

CNN可视化方法可以用来解释解决方案。即通过突出显示用于分类的像素,并显示哪些模式是由用于分类的CNN滤波器所表示的。关于是否将视觉解释和口头解释看做是一样恰当的,值得进一步探讨的。

生成式神经网络架构也可以用于该问题,如变分自编码器(VAE)或生成式的对抗性网络(GAN)。在这种情况下,就是“用例子来解释”。

“我理解不了我创造不出来的东西。”——理查德·费曼

套用这句名言:“我能创造的,我就能理解”。NN会在Bongard问题中生成新的图像示例,如果生成的图像捕获了分类规则所表达的概念,那么它就足以显示神经网络对问题的理解。

总的来说,Bongard问题将仍然是机器学习的一个挑战性的基准。

 

文章原标题《Solving-Bongard-problems-with-deep-learning》

作者:Sergii Kharagorgiev

译者:奥特曼,审校:袁虎。


原文链接


干货好文,请关注扫描以下二维码:




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Jenkins+Sonarqueb进行自动化测试和代码质量检测

摘要: Jenkins Jenkins是一款开源的持续集成工具,它的特点:易于安装、易于配置、可扩展(自己开发插件),并且它拥有数以百计的成熟插件,这种插件式的特点提供可做任何事情的可能。 简介 Jenkins …

工作流实战_15_flowable 我发起的流程实例查询

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示![在这里插入图片描述](https://img-blog.csdnimg.cn…

Istio 庖丁解牛六:多集群网格应用场景

戳蓝字“CSDN云计算”关注我们哦!作者 | 钟华来源 | ServiceMesher随着容器技术的流行,大量互联网公司和传统 IT 企业都在尝试应用容器化和服务上云。容器化是一个持续的过程,伴随着多地域部署、安全等级隔离、多云和混合云等复杂的场景需求。…

NAT网关之SNAT进阶使用(一)SNAT POOL

摘要: NAT网关是云上VPC ECS访问Internet的出入口。SNAT可实现指定的VPC ECS使用指定的公网IP访问互联网。阿里云NAT网关控制台创建SNAT条目时,默认是为指定的交换机配置1个公网IP地址。 (一)前言 为什么使用SNAT POOL NAT网关是云…

工作流实战_16_flowable 办理任务

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示2. 代码分享1. 演示 2. 代码分享 public ReturnVo&l…

OpenStack精华问答 | OpenStack的网络类型有哪些?

戳蓝字“CSDN云计算”关注我们哦!关于OpenStack的探讨几乎从未间断,从2010年10月份一个版本正式发布至今,OpenStack在8年发展历程中,成为了最有争议的那一个。今天,我们就来看看有关于OpenStack的精华问答吧1Q&#xf…

秘籍分享:SLB实例克隆

摘要: 秘籍分享:SLB实例的备份与克隆 1. Greetings :) Hi,大家好,2018年春节刚过不久,想必大家一定觉得假期短暂,没有玩爽吧,但我们IT民工的命就是这么苦逼,想想也只能撸起袖子使劲干…

工作流实战_08_flowable 流程实例的启动

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://space.bilibili.com/485524575/channel/detail?cid94579 用户名密码0000001test0000002test0000003test0000004test文章目录1. 演示1. 演示 ### 2. 代码 public ReturnVo<ProcessI…

SD-WAN新价值:中企通信与Fortinet强强联合 安全先行

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹当前&#xff0c;云计算、大数据、人工智能等数字技术方兴未艾&#xff0c;全球正快速进入数字经济时代&#xff0c;企业数字化转型的浪潮已经到来。与此同时&#xff0c;企业数字化转型也带动了一系列技术与应用&#x…

人工智能开发人员需要具备技能

摘要&#xff1a; 对于那些想要从事人工智能项目的开发人员来说&#xff0c;他们需要具备哪些必要的技能&#xff1f;对于那些想要从事人工智能项目的开发人员来说&#xff0c;他们需要具备哪些必要的技能&#xff1f;我们就这个问题采访了22位相关企业的高管&#xff0c;以下就…

rubymine 保存成unix格式_如何免费在线试用 200+ Linux 和 Unix 发行版?

☞ 程序员进阶架构师必备资源免费送 ☜Linux 和 Unix 都有着各种各样的发行版&#xff0c;有的界面美观&#xff0c;有的功能强大。如果你想要尝试不同的 Linux 和 Unix 发行版&#xff0c;传统的作法是先在本地安装对应版本&#xff0c;再进行体验。这样效率非常低下&#xff…

WPF使用prism框架进行页面跳转

首先下载prism.dryloc框架 创建两个文件夹&#xff0c;Views和ViewModels文件夹&#xff0c;在Views里面创建的是页面&#xff0c;在Viewmodels里面创建的是对 应的类&#xff0c;文件不能创建错误 在App.xaml.cs中将App修改成PrismApplication&#xff0c;创建App的CreateShe…

每个产品经理都应该知道的机器学习术语

摘要&#xff1a; 公司正在上马AI项目&#xff1f;想要熟悉机器学习的世界&#xff0c;想要了解所有关于机器学习的术语&#xff0c;看看本文吧&#xff01;公司正在上马AI项目&#xff1f;或许你已经熟悉了机器学习的世界&#xff0c;但是仍然希望扩展你的知识面&#xff0c;并…

工作流实战_22_flowable 驳回/回退 并行网关驳回 多实例驳回 子流程驳回

项目地址https://gitee.com/lwj/flowable.git代码分支flowable-base视频讲解地址https://www.bilibili.com/video/av78779999/ 用户名密码0000001test0000002test0000003test0000004test文章目录1. 场景2. 演示3. 代码分享3.1. 获取可驳回节点3.2. 驳回代码分享1. 场景 驳回&…

真相了!AI 程序员:我们根本没有 80w 年薪好么?

去年大家曾热议一篇文章《已毕业年薪就80万&#xff0c;没出校门就抢光&#xff0c;AI人才真这么值钱&#xff1f;》&#xff0c;大多数业内人士都表示&#xff0c;其实这是幸存者偏差&#xff0c;有人拿到80万&#xff0c;但不是全部。笔者综合了BOSS招聘、拉勾网、猎聘、领英…

ECS控制台实例搜索的优化与改进

摘要&#xff1a; 搜索功能是控制台非常重要的功能&#xff0c;承载着实例管理入口的作用&#xff0c;应该好用&#xff0c;快速和准确。然而&#xff0c;ECS控制台实例列表的搜索功能经常被吐槽不好用&#xff0c;痛点主要有以下三点&#xff1a; 每次搜索之前需要选择搜索类型…

Wpf中的sqlite数据库的连接和迁移

首先你需要安装如图的三个第三方包&#xff0c;创建APi项目并且将此项目设置为启动项第二步&#xff0c;在你的APi项目里面创建context文件夹&#xff0c;在此文件夹下创建你所需要的类&#xff08;数据库的表&#xff09;&#xff0c;在类中创建字段&#xff08;数据库中的字段…

python request url 转义_Python爬虫入门笔记

来源&#xff1a;blog.csdn.net/weixin_44864260爬虫四大步骤&#xff1a;1.获取页面源代码2.获取标签3.正则表达式匹配4.保存数据1. 获取页面源代码5个小步骤:1.伪装成浏览器2.进一步包装请求3.网页请求获取数据4.解析并保存5.返回数据代码&#xff1a;import urllib.request,…

ECS TAG功能详解

摘要&#xff1a; Tag&#xff08;标签&#xff09;&#xff0c;阿里云提供的一种标记资源的方式&#xff0c;对资源添加标签可以方便地对资源进行标记&#xff0c;从而方便的进行资源的批量管理&#xff0c;现在ECS可以使用Tag标记的资源主要有以下几种&#xff1a;实例、磁盘…

日本三大移动通信运营商已重启华为手机销售;高通与LG和解 签署新的5年期专利授权协议; Facebook加密货币Libra被审查...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…