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

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

重磅干货,第一时间送达2d9a5051296d855c74b76fb491b0a33a.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


来补充一些东西。

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

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

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

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

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


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

问题其实没那么简单。假设我们就用余弦函数 2743f2d7-6c36-eb11-8da9-e4434bdf6706.svg 当作模型,其中有两个待学习的参数:频率 2a43f2d7-6c36-eb11-8da9-e4434bdf6706.svg 和初相 3543f2d7-6c36-eb11-8da9-e4434bdf6706.svg 。问题的一个最优解是 3843f2d7-6c36-eb11-8da9-e4434bdf6706.svg ,其实完整的最优解应该是 3943f2d7-6c36-eb11-8da9-e4434bdf6706.svg

我们在 [-20, 20] 的范围内随机取 10 个数 3b43f2d7-6c36-eb11-8da9-e4434bdf6706.svg 和它们的奇偶性 3f43f2d7-6c36-eb11-8da9-e4434bdf6706.svg 作为训练数据,用均方误差作为损失函数:

4343f2d7-6c36-eb11-8da9-e4434bdf6706.svg

4743f2d7-6c36-eb11-8da9-e4434bdf6706.svg 的范围内画出 4d43f2d7-6c36-eb11-8da9-e4434bdf6706.svg 的图象:

b971993a094ec5537cc8d1b53af7a06c.png

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

作者:KuNyahttps://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作激活函数。或许有人试过了,我不知道 

834a0e1800c4e30c88a14c81492a8392.png

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

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

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

2605955285374ef98a4385ec4b4dab09.png

▲长按加群

764885a02236fc1658e896bb9f131455.png

▲长按关注我们

麻烦给我一个在看!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值