如何用神经网络判断奇偶数?

算法进阶

共 2328字,需浏览 5分钟

 · 2022-04-25

这个题目挺有意思【看着简单,实际上。。。】,有点玄学的味道,又有点知识的味道,这也太难为神经网络了。


在做这个题目之前,先想一个问题,让神经网络判断阿猫阿狗难呢,还是判断奇偶数难呢?


再回顾下非线性的概念。


开始吟唱。


非线性,应该是从原始输入到目标决策之间gap的刻画,用博大精深的中文语言为例:


比如垃圾话,就很直白,无非是问候几个人物,几个器官,几个行为。可以望文生义。


但是阴阳话,这个就非常难了。


感恩两字,你要看他真的感恩,还是在那里只能咸因。威武支持有希望了,你看他是不是在叼飞盘,这就很难。


这些都要看具体的场景,人物和环境,这就叫非线性。


人的解决问题,大概就是把一个复杂目标化简解决的能力,目的是降低问题的非线性,把一个问题去解决的过程。具体到数据挖掘上,应该是把特征表达出来的能力。


具体到问题,非线性比较高的场景有,序列建模,大规模离散ID建模,阴阳话识别,语音的特征表达。这些都是非线性非常高的场景,基本都超出了手动解决输入到目标之间gap的能力。


我们再举一个例子。


题目:请使用一个逻辑回归的模型,建模一个身材分类器,身材分偏胖和偏瘦两种,输入的特征有身高和体重。


数据集大概长这样:


事实上,我们很难单纯地从身高和体重决策出一个人的身材,你说姚明体重280斤,他真的一定就胖吗??别忘了他身高有226公分的。


这组数据可能超出了你的认知,只看数据不看照片,一下子不好说他是胖还是瘦。(其实挺胖的哈哈)


嗯,这个你看到那组数据,不好一下子说出来的感觉,就是机器学习里面非常关键的概念,“非线性”。


回到题目,判断奇偶,这个非线性的层次又上了一大截。


一个刚出生的婴儿,你教会奇数偶数,要比教他识别猫狗难如登天。


那怎么办呢?


第一,特征工程


X%2,加在输入里,你看它牛不牛?这种对于人类小学生水平的知识,对于机器学习就捉襟见肘了。


或者把数据转化成二进制sequence输入,模型就根据最后一位的0和1,直接得到结果了。


本质上这两种方法都是用人的先验知识,把数据经过变化,处理成模型更易于理解的形式。这个过程,也就是特征工程这件事情的本质,降低非线性,助力模型学习。好风凭借力,助我上青云。


第二,升级模型


特征工程总有种case  by  case的感觉,处理特定的问题很好,如果我的模型想泛化起来,就不是有多少人工就有多少智能,这么简单了。


办法也有,神经网络的普遍的方式行不通,我们看看能不能搞一个融入先验知识的模型结构,改造神经网络,无非是模型结构,激活,池化这些东西。


最简单的方式就是使用有周期性的激活函数,本身mod这些操作都是不可导的,但是三角函数可以简单解决,答案呼之欲出。


y=0.5*cos(π*(x-1))+0.5


这个函数的图像长这样,而且它很好理解梯度下降的本质,激活结果就是答案,没有在拐点上的位置,损失函数都会push你产生梯度,逼着你的参数去找最优解。


我们再看语音领域,更玄学中的玄学了。



为了应对更复杂的非线性,聪明的人搞出了时频变换。

在这基础上,又搞出了MFCC。


这是典型的,用人脑解决非线性的例子。


好了,我们再回顾一下开头的另一道LR识别胖瘦题目吧。


升级模型,把线性的逻辑回归加上kernel来增加非线性的能力。我们使用这个模型 sigmoid(ax+by+kx*y^(-2)+c),这个模型通过多项式核方法的升级,解决了低维空间线性模型不太好解决的问题。


特征工程,掏出体检报告上的BMI指数,BMI=体重/(身高^2)。这样,通过BMI指数,就能非常显然地帮助我们,刻画一个人身材如何。甚至,你可以抛弃原始的体重和身高数据。


要是没有BMI指数的话。你也只能像LR那样,通过核方法来解决了。在方式一我们使用了核方法给这些模型升维,方式二使用了特征方法。


天下没有免费的午餐。


给模型引入非线性是有代价的,连LR这种最简单的神经网络形式都影响很大,一是共线性,二是噪声。


第一、共线性的意思是几个项表达的含义是趋同的,保持了很强的线性关系,对于逻辑回归是致命的问题,因为他带来了权重的不稳定,要知道逻辑回归权重可是暗示了特征重要性的。还会破坏朴素贝叶斯的基本假设。这些都是有副作用的。

(要是你对这段话,不好理解的话,仔细学习下逻辑回归模型和共线性的理论,此处不单独展开)


第二、噪声让你的分类器学习到了一些不好的东西,对你的决策没有产生泛化的贡献,反而带跑偏你的模型,学习到了一些不是知识的边边角角。


很多问题不像判断胖瘦,奇偶数,这样简单,为了获取他们的知识。


你围绕输入做了一系列特征工程,他们有的有用,有的有噪音。


你围绕着神经网络设计了一系列模型结构,他们一部分可以提取知识,一部分又学到了边边角角,歪门邪道。




事情都有两面性,神经网络的演进就是这样的哲学,用人脑的方法论,抓住主要矛盾,螺旋前进。于是搞出了各种各样的tricks,dropout,BN,LN,Adam,在计算机认知科学里,就像一颗颗发光的珍珠。学习工作也是这样吧。

推荐阅读-

深度学习系列

机器学习系列


文末,粉丝福利来了!!关注【算法进阶】👇


后台回复【课程】,即可免费领取Python|机器学习|AI 精品课程大全

机‍‍器学习算法交流群,邀您加入!!!

入群:提问求助、认识行业内同学、交流进步、共享资源...

扫描👇下方二维码,备注“加群”


浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报