为什么都说神经网络是个黑箱?
title: 为什么都说神经网络是个黑箱? - Moenova 的回答
url: https://www.zhihu.com/question/263672028/answer/2250289371
author: Moenova (8fe719935ddab5c2181ca8d2c807bda3)
voteup: 792 赞同
created: 2021-11-27 16:00:00
updated: 2021-11-27 16:00:00
fetched: 2021-12-09 05:46:40
count: 约 1688 字
version:
tags: [人工智能, 机器学习, 神经网络, 深度学习(Deep Learning)]
接触深度学习领域不到两年,还没有什么很深刻的经验,但是个人感觉神经网络在很大程度上近似于复合函数,back propagation 也差不多就是链式求导,相对于logistic regression,decision tree这一类算法,应该更加直观和便于理解。然而在工业中,大家似乎都默认ANN不具有可解释性,是个黑盒子。为什么相对传统算法,ANN会更不具有解释性?当我们说一个算法的可解释性时,我们是在解释什么?
人工智能, 机器学习, 神经网络, 深度学习(Deep Learning)
这是一个很简单的信息论知识,信息不可能无限压缩。
我们为什么会觉得所有的真理都可以被压缩,或者说都可以建模成人类能理解的样子呢?
人类理想中的世界是真理都可以被压缩成几句简单的语言,然后凭借几句“真言”就可以了解整个世界。
但这种幻想是不切实际的,世界本来就是一个黑箱,只不过人类找出了其中的某些规律,但除此之外还有很多是人类所不能理解的。
用黑箱,或者函数来比喻神经网络其实并没有触及到神经网络的本质。
神经网络的本质是纯粹的信息流和纯粹的逻辑,只是用函数的方式实现了出来(如果不用函数,那么就很难求导,找寻极值点会变得很困难)
你可以这么理解神经网络,神经网络是一个只会用简单运算符号的程序员,每当程序出错,神经网络就在程序里加上一个if条件,在先开始的时候大家都能看懂神经网络在写什么。
但是随着需求越来越多,神经网络加了成千上万行的 if 语句,然后整个代码就变成了难以理解的屎山,但是却能很好的解决所有见过的问题以及相似的问题。
神经网络中有一类特殊的函数激活函数,很多初学者难以理解激活到底意味着什么,好好的函数为啥要激活?还这么简单?为什么不是sin,cos,log,等等稍微复杂点的函数呢?
因为激活函数只为完成一个简单的需求,用四则运算,模拟出 if 条件语句的效果。
很少有大学教授会把这个原理讲述出来,大部分学校老师只会念PPT,他们只知道这个东西是什么,而不会从原理出发,理解当初第一个使用激活函数的人到底是出于什么目的使用激活函数。
简单的神经网络可以理解成线性运算,if条件,然后如此循环。而激活函数也是if条件中最简单的一种就是,把负数归零。
你会问为什么要负数归零?而不是正数归零?因为效果其实是一样的,把任何区间的数归零,都是差不多的,在上一层线性符号反一下,就行了,结果差不多的。
重要的是归零这个操作而不是什么情况下归零,这个操作相当于 if 某某条件,直接返回 None。而不进行下一步的运算。
更进一步可以理解为,遇到这种情况直接忽略,那么没有被忽略的数值就是被抽取出来的信息。也就等于说神经网络用归零这个简单的操作来判断哪些信息重要,哪些不重要。
这也是反直觉的学习理论,学习并不是记住所有内容,而是去辨别信息的价值,忽略掉不重要的信息,以此抽取出重要的信息才是智慧的体现。
这就是很多记忆力很好的人,很难悟到事物本质的原因,因为他们只是在复制信息,并没有对信息做进一步的加工处理。
也就是说激活函数使得神经网络具备了信息遗忘的功能,而且它会根据线性运算来决定要不要忘掉这个信息。
没错神经网络对于很多人来说就是黑箱,但这种黑箱其实是有内在规律可循的。
比如你可以问问自己一种任务是否可以通过频繁的test和需求变更,让程序员去书写大量的if条件来解决。如果可以,那么你就可以使用神经网络,在这种情况下,神经网络和你让一群程序员写if条件是没有本质区别的。反正屎山和黑箱都是一种东西,最后都没人能看懂。
但不是所有东西都可以用大量的test来解决,有很多时候你知道你要解决什么问题,这个问题对输入输出都非常明确,但没有很多的test case。这种时候你就不能用神经网络,你需要使用专家系统,必要的时候用formal method去证明你的程序绝逼是没有bug的。比如航空航天,核弹控制器,飞机控制系统,心脏起搏器等等。
果然很多人文章都没看完就开始bb了。
很多人还在争论激活语句是不是if 条件。
relu 的 y=max(0, x) 和 y = x if x>0 else 0
这不就是一样的么?这也能杠?其他的激活函数无非是软化版的或者平移,拉伸过的,本质其实是都是一样的。
不知道这些人是怎么从事计算机行业的,没学过编程么?
zyc: 啊这…早期的MP模型就是没有激活函数的,现代基于反向传播的训练为了求导才引入了激活函数。早期用sigmoid和tanh也是为了模拟神经元激发的状态,后来发现梯度饱和区问题才有现代的ReLU函数……这个应该是基础课教的? (55 赞)
星沉 -> zyc:
正解[捂脸]能用if else解决的问题谁用神经网络啊
神经网络他更像是高阶模式匹配 (12 赞)
十月钟声 -> 星沉: 我靠…你们都不睡觉的吗,1个小时前,那不是凌晨三四点[飙泪笑] (1 赞)
北门大官人 -> zyc: 如果饱和的问题,用了relu。那么梯度消失的问题依然不能解决,现在稍微复杂点的神经网络,都是用resnet去解决了,比如lstm,本质就是resnet,还有用relu主要就是方便求导,速度也快。
大灰 -> zyc: 凭啥要模拟神经元激发状态?就是因为激发与否相当于if else[飙泪笑] (3 赞)
AlexFei -> zyc: 没有激活函数的话只能解决线性问题,引入激活函数主要是为了引入非线性吧。(李沐大神在动手学深度学习课里这么说的)
炮震五子 -> zyc: 既然是mp模型怎么会没有激活函数?激活函数跟求导没关系,只是有些激活函数导数性质不方便用梯度下降来训练,没有被现在的神经网络模型采用罢了
炮震五子 -> zyc: 最早期的神经元模拟生物神经元,采用的是分段函数,比如非激活态为0激活态为1,这本质就是ifelse。然而这种函数可导的地方导数为0,而存在跃迁的点又不可导,很难优化,于是就有了sigmoid、relu这类比较“柔软的”、“妥协的”激活函数,在这个基础上才有了现代的dl体系。引入激活函数确实是为了引入非线性性,但寻本溯源还是来自于模拟神经元的激活现象,从“激活函数”这个名字本身就能说明这点。说ifelse简单的同学,一百个以内的ifelse是简单,但是百万级、千万级、乃至十亿级的多层嵌套的ifelse还简单吗? (15 赞)
zyc -> 星沉: MP网络从某种角度来说还确实挺if else的😂看怎么理解吧
zyc: 不过目前更多认为神经网络的工作是对一个函数的拟合(比如万能逼近定理表明一个足够宽的全连接层和一个带有挤压性质的激活函数可以以任意精度逼近任意borel可测函数)。而这样的一个拟合通常要求函数是带有连续性质。理解成一堆if的组合可能有些不太合适 (20 赞)
who knows -> zyc: 其实可以理解为一个连续的分段函数,就跟if else的组合比较相似了 (4 赞)
Tridu -> zyc:
可是函数就是if else就足够满足跳转了(比如Golog程序,DataLog,模式匹配,汇编goto),因为if else可以表示goto。
实际上结构化程序编程dijsktra证明它的计算能力不逼意大利面代码强一星半点。
Tridu -> zyc: 最直观的理解就是RNN从递归函数论看图灵完备性
zyc -> Tridu: 离散再多也比不上连续
Viola philippica -> zyc: 你有没有学过一个类似的数学定理,就是说有限间断点的函数和连续函数性质几乎是一样的?if else本质就是有限间断点,和连续函数没有本质区别
zyc -> Viola philippica: 那是对于存在第一类间断点的连续函数,但if else是存在间断区间(是这么叫么?)的阶跃函数
Tridu -> zyc: 本来激活函数反向求导,整个网络都是连续可微的,值得强调的不正是if跳转的决策能力吗?(设计正确的有限状态机够用了)
Tridu -> zyc: 二值化网络[思考]
丰干:
低情商:屎山
高情商:黑箱 (8 赞)
立勃:
激活函数在于非线性而不在他是否能用if表示,也不在于他能否归零。
“因为激活函数只为完成一个简单的需求,用四则运算,模拟出 if 条件语句的效果。”“重要的是归零这个操作而不是什么情况下归零” (1 赞)
Moenova -> 立勃: 你可以把激活函数换成cos,看看你网络能work不?[捂脸]
立勃 -> Moenova: tanh置零吗。。。
Moenova -> 立勃: 平移一下啊?你试试看用tan?
立勃 -> Moenova:
基于某激活函数实现的神经网络的可训练性受该激活函数避免梯度爆炸和消失的能力影响很大,直接的tan不太满足需求。如果可以一定程度放缩变形,tan,cos还是可以有操作空间的。
如果您非要说平移来维护自己说的重要的是归零,平移哈,那什么不可以为0。。。单凡有相对离散的状态都能叫置零了哈。 (1 赞)
立勃 -> Moenova:
我也搜到了用周期函数的一篇工作
https://arxiv.org/pdf/2006.09661.pdf
八爪红糖:
信息不可被无限压缩,但允许精度损失的情况下仍可以压缩到可以被人理解的程度,就像低速情况用牛顿力学也没问题
而且理论体系是可以一定程度解耦合的,研究某一领域可以不知道其他方面的知识
神经网络本来就很少在“解释”上有近展,你这么说有神经网络不可理解的倾向,搞得和不可知论似的 (3 赞)
雪的味道: [捂脸]if else能实现,是手段,而不是目的,目的是非线性 (2 赞)
旋转的盖伦:
讲的非常棒了,我们做智能决策的时候基本两条路,国际前沿的深度强化和自己搞的动态贝叶斯+学习+博弈混合算法。
前者基本就是顶刊水论文,稍微发现一点“正常人都知道”的东西就能写,那种智障决策用if else都能做得出来,狗屁不是。
贝叶斯主要是用来装机,学习和博弈主要也是寻找最优的概率分布,修正专家模型,马虎不得。 (2 赞)
Yehowah: 反正屎山和黑箱都是一种东西,最后都没人能看[飙泪笑][飙泪笑][飙泪笑] (2 赞)
扩散性百万辣面包: [赞同]高质量回答
小张大仙人 -> 扩散性百万辣面包: 没有吧。。 (1 赞)
扩散性百万辣面包 -> 小张大仙人: 何故?[好奇]
不懂语言学的NLP: 说的不错,从原理上说明了为什么现在的基于统计的机器学习方法很难大规模的用到ToB的业务上。最后一段延伸一下也能有这个意思了。 (1 赞)