能否使用神经网络来判断奇偶数?

2020 年 1 月 3 日 CVer

点击上方“CVer”,选择加"星标"或“置顶”

重磅干货,第一时间送达

编辑:Amusi(CVer)  来源:知乎

https://www.zhihu.com/question/364113452

本文仅作为学术分享,如果侵权,会删文处理


能否使用神经网络来判断奇偶数?


如我们生成一系列的随机整数,并且,将样本数据中的奇数标记为1,将偶数标记为0,那么,我们能训练出一个神经网络,在我们输出奇数时返回1,输入偶数时返回0吗?


有个初学者问了这个问题。我模拟了一下,的确搞不定,关键问题是,我们应该怎么解释这个现象呢?这么强大的神经网络模拟不了这么简单的问题?


从信息论的角度来说,奇偶性的信息就藏在二进制的最后一位,信息就在那里,可是神经网络竟然无法捕获它。该怎么理解呢?


作者:王赟 Maigo
https://www.zhihu.com/question/364113452/answer/960517450

机器学习里面有一个「没有免费午餐」定理(No Free Lunch Theorem):任意一种算法,如果对于某些类型的问题效果好,必然对于另一些类型的问题效果差。


上面的定理对于「机器学习」整体也是适用的。机器学习适合处理的问题,一般都有这么一个特点:在特征空间中相近的输入,对应的输出一般也相近(暂且称为「平滑性」)。这是机器学习能够把从训练数据中学到的知识推广(generalize)到新数据上的前提。如果一个问题不「平滑」,也就是说,输入稍微变一点儿,输出往往都会有巨大的变化,那么机器学习一般就会表现得惨不忍睹。


题主的问题,如果就以数值本身作为输入特征,那就是一个典型的「不平滑」问题:输入稍微变动一点儿,输出就变动很大。教科书里往往还会提到另一个例子:输入是若干个布尔特征,输出是它们的异或。这简直就是最「不平滑」的问题了。


如果你要用机器学习来解决这样的问题,就需要输入一点儿人类的智慧,通过设计合适的特征,把问题转化成一个「平滑」的问题。比如:


  • 对于题主「判断奇偶性」的问题,可以把输入数值转换成二进制,每一位作为一个布尔特征,一般的机器学习方法都会很容易地学习到个位特征就对应着答案,而其它特征与答案无关。哪怕你是用十进制来表示,也不难。

  • 对于「异或」问题,可以取「输入中 1 的个数」为特征,这样就转化成了题主的「判断奇偶性」的问题;或者干脆一步到位,取「输入中 1 的个数的奇偶性」为特征。


当然,作为人类,一般很难预判所面临的问题是否「平滑」。不过,如果你观察到机器学习的效果不好,就可以往「不平滑」的方向去想,设计一些合适的特征,将典型的「不平滑」问题转化成「平滑」的。



来补充一些东西。


关于「平滑性」,我一直没想出应该怎么来准确界定它。它并不要求输入到输出的映射连续。比如,完全可以要求模型去学习一个阶跃函数,模型只是不一定能学到非常精确的分界线而已,但是「阶跃」的精神是可以学到的。


我觉得「平滑性」可以这么理解:一般的机器学习模型中的运算(比如神经网络里的激活函数),都没有太多的转折,不会把特征空间切得很碎。这些运算组合而成的函数,也往往不会很「崎岖」。机器学习适合做的,就是拟合比较「平滑」的函数,而对「崎岖」的函数则拟合不好。


一个问题算是「平滑」还是「崎岖」,跟输入特征的范围,以及训练数据的密度,都有关系。仍以判断奇偶性的问题为例:


  • 如果输入特征的范围是 0 ~ 10,也就是 5 个周期,问题就可以算「平滑」。但如果输入特征的范围是 0 ~ 100,也就是 50 个周期,就得算「崎岖」了。

  • 如果你的输入数据间隔很密,涵盖了输入范围内的所有整数,甚至涵盖了它们之间的小数(通过某种方式合理地指定输出),那么问题就可以算「平滑」。但如果输入数据跳过了很多整数,那么模型就会倾向于用平滑的函数填充这些空隙,而不会想到用崎岖的奇偶性函数去填充,此时空隙中模型的 generalize 方式就不是你想要的了。



评论里有不少人指出:如果我就用一个「崎岖」的非线性函数当模型呢?比如,假设问题对奇数指定的输出是 1,对偶数指定的输出是 -1,用余弦函数 似乎就可以完美拟合数据了呀!


问题其实没那么简单。假设我们就用余弦函数 当作模型,其中有两个待学习的参数:频率 和初相 。问题的一个最优解是 ,其实完整的最优解应该是

我们在 [-20, 20] 的范围内随机取 10 个数 和它们的奇偶性 作为训练数据,用均方误差作为损失函数:

的范围内画出 的图象:



你可以感受一下这个损失函数的地形有多么崎岖,有多少局部最小值。如果增大数据量,或者增大输入数据的绝对值,损失函数会变得更加崎岖。想要准确地学到 处的全局最优解(图中有四个),几乎是不可能的。



作者:KuNya
https://www.zhihu.com/question/364113452/answer/959652356


看你的输入空间怎么定义了


如果你直接丢一个整数给神经网络,大概率是不work 的


但是如果你把输入转换成2进制或者10进制,然后再填充或者截断高位部分,每一位分别单独作为一个特征,再用 NN 来解就不会太难了(稍微解释一下,把每一个进制位看做一个 token 然后用 one-hot 或者 embedding 来表示,原问题就被建模为一个 NLP 里的情感分类问题了。如果进制选择得当, NN 要识别的 pattern 是很简单的)


甚至更加激进一点,你把整数转成图片再用各种 CNN 来跑图像分类,大概率效果也不会太差(比如10以内的奇偶分类问题可以看做一个2分类的MNIST)


总的来说,NN 可以缓解 ML 对特征工程的要求,但绝不是说什么特征丢给 NN 它都能自己学。同时,在不同的特征空间下,同一问题的难度也是不同的(比如考虑一个7进制和一个2进制下的整数奇偶判断问题,显然后者更简单),合理的特征选择往往在实践中对模型影响很大。



作者:匿名用户
https://www.zhihu.com/question/364113452/answer/959172205


目前的回答都是在提解决方案,好像没有分析原因的,我来谈谈自己的看法吧。这个任务看似简单实则大坑。


1. 由于神经网络的本质是利用梯度下降做参数估计,loss连续、可导是很重要的条件。例如在图像识别上,些许像素的值发生扰动对最终结果几乎不产生影响。


但是求奇偶不连续更不可导,1是奇数2是偶数,但1.01,2.35这些数既不是奇数又不是偶数,甚至根本不会出现在数据集里。


2. 数据的分布。神经网络往往需要归一化来使输入、输出、权重都保持在一定的范围,包括预处理、BN等方式,主要是为了保证梯度下降的有效性同时在一定程度上防止过拟合。


但是这个任务的数据是分布在整个整数范围的,可以想像,同样的学习率,对于1和1e10两个输入,几乎不可能同时进行有效的学习。而且也没法归一化,因为把1和1e10变成1e-10和1没有任何意义。


3.噪音。判断奇偶只需要二进制下的最后一位,但输入数据包含的其他信息过多,模型难以挖掘到有效信息。


说了这么多,我也来提个思路。把数字转化为序列,embedding后利用rnn得到奇偶判断的结果。不过这也是使用了最后一位最有用这个先验知识。



作者:伊礼呵撒棱
https://www.zhihu.com/question/364113452/answer/959700933

哈哈,非常简单,用一个神经元就可以算出来了,激活函数用这个,多大样本都可以

d*sin(ax+b)+c,a,b,c,d是参数


_原回答可忽略


放一个整数进去当然不可能成功,神经网络终究是数值计算,你输入的数直接就影响最后结果了。神经网络只是瞎学,而且奇数偶数是对半开,网络最后肯定是50%准确率。而且输入数太大根本难以训练,输入最好0-1之间。

人判断奇偶是根据最后一位数,你让神经网络判断的是一个数值,数值跟位是不一样的概念。神经网络能做的是不断除某个数,乘以数,看等不等于整数,小范围肯定行,大范围就看网络的深度了,如果有很多层很宽肯定能判断成功。如果用小数判断,大数预测最后结果肯定也不行。就算自己也没办法只用数值计算判断是不是整数,而且计算机判断也是有逻辑计算而不是加减乘除,网络自己没办法进行逻辑判断,当然预测不好。


我觉得是一个有意思的实验,把预测的数和正确或错误结果画出来,会有一个玄学的曲线


还有一个观点是数值的奇偶不光滑,不可导,当然,任何一个函数都能表达为傅里叶级数,如果用sin cos作激活函数也许能行。我也很奇怪为什么没人用sin cos作激活函数。或许有人试过了,我不知道 



重磅!CVer-学术交流群已成立


扫码可添加CVer助手,可申请加入CVer大群和细分方向群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索等群。


一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加群


▲长按关注我们

麻烦给我一个在看!

登录查看更多
0

相关内容

一图搞定ML!2020版机器学习技术路线图,35页ppt
专知会员服务
92+阅读 · 2020年7月28日
斯坦福EE364a《凸优化》课件,301页ppt
专知会员服务
93+阅读 · 2020年7月14日
【CVPR2020-北京大学】自适应间隔损失的提升小样本学习
专知会员服务
81+阅读 · 2020年6月9日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
BAT机器学习面试题1000题(376~380题)
七月在线实验室
9+阅读 · 2018年8月27日
BP神经网络
Datartisan数据工匠
5+阅读 · 2018年8月9日
一文详解生成对抗网络(GAN)的原理,通俗易懂
人工智能头条
6+阅读 · 2018年5月6日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
如何简单形象又有趣地讲解神经网络是什么?
算法与数据结构
5+阅读 · 2018年1月5日
【深度学习】神经网络和深度学习简史
产业智能官
8+阅读 · 2017年11月16日
人工神经网络是否模拟了人类大脑?
数说工作室
9+阅读 · 2017年7月19日
wGAN如何解决GAN已有问题(附代码实现)
数据派THU
17+阅读 · 2017年6月27日
Learning to Weight for Text Classification
Arxiv
8+阅读 · 2019年3月28日
Adversarial Transfer Learning
Arxiv
12+阅读 · 2018年12月6日
Meta-Transfer Learning for Few-Shot Learning
Arxiv
7+阅读 · 2018年12月6日
Multi-task Deep Reinforcement Learning with PopArt
Arxiv
4+阅读 · 2018年9月12日
Arxiv
7+阅读 · 2018年5月23日
VIP会员
相关资讯
BAT机器学习面试题1000题(376~380题)
七月在线实验室
9+阅读 · 2018年8月27日
BP神经网络
Datartisan数据工匠
5+阅读 · 2018年8月9日
一文详解生成对抗网络(GAN)的原理,通俗易懂
人工智能头条
6+阅读 · 2018年5月6日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
如何简单形象又有趣地讲解神经网络是什么?
算法与数据结构
5+阅读 · 2018年1月5日
【深度学习】神经网络和深度学习简史
产业智能官
8+阅读 · 2017年11月16日
人工神经网络是否模拟了人类大脑?
数说工作室
9+阅读 · 2017年7月19日
wGAN如何解决GAN已有问题(附代码实现)
数据派THU
17+阅读 · 2017年6月27日
Top
微信扫码咨询专知VIP会员