社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习是怎么巧妙揭开大脑工作原理的

混沌巡洋舰 • 6 年前 • 777 次点击  

机器学习和复杂系统正在诸多领域改变产业界和学术界的传统方法, 其中一个极好的例子正是给机器学习以巨大启发的神经科学本身。 我在此用一个鲜活的例子展示这个方法在该领域的神展开。


文章的开头我想问大家一个问题, 如果你给一只猫建立一个模型, 那么最好的方法是什么? 这个问题很深刻,大家可以边读下文边寻找答案。


神经科学,是一个高度依赖数据的生物学分支, 因为你要理解大脑本来就是用来计算的装置,你要研究它就首先研究它的输入和输出, 然后把它和动物的相应行为联系起来。


这个故事的第一部分有关复杂系统, 因为神经系统本质上属于复杂网络的一种。我们希望通过在电脑上建立一个和大脑神经网络类似的复杂网络,来理解神经细胞数据到行为间的联系。 这种努力在8,90年代十分盛行。 比如最早出现的hopefield 网络解释记忆现象等。

我们给出一个典型的例子:



此处科学家发现猴子可以经过训练对不同频率的两个声音进行比较(出错应有惩罚), 这是一个典型的测量短期记忆能力的实验,如果猴子需要比较两个声音, 就要把第一个声音的信号放在脑子里,然后和第二个声音进行比对。能够综合不同时间的信息进行决策可以说对生物生存至关重要, 而此实验即为其基础。


以往神经科学的研究方法可能只是描述这个行为,然后在猴子的脑子里想法放入电极,测量相应的神经信号是什么。



例如我们可以看到上图中测量的神经元放电信号,这个神经元放电的频率随着声音的频率上升而上升(红色代表高频的声音,蓝色代表低频),因此我们就可以根据这个臆想一个模型出来。   下图测量的细胞则相反。  你能不能根据这两个图设计个模型解释猴子的行为呢?


还真的行! 我们看到最简单的物理模型都可以解释这个现象。 左图中我们用山谷里的小球来描述这个模型(算法),这是把整个问题放在极低的维度上方便理解, 整个外界输入(声音)可以看成在猴子神经系统上的一个外力, 外力可以看做某种推动力让猴子的神经元状态发生定向改变,犹如小球(猴子神经系统的状态)在一个被外力塑造的山谷里趋向谷底(出现概率最大的状态,对应物理里能量最低的点),这个谷底的位置就是对第一次信号的记录(记忆),当外力(f1)消失,山谷的地形发生了变化,但外力并不马上改变。


  当第二信号(f2)来到的时候,地形再次发生改变,此次的信号引起山谷的隆起,导致小球滚向新的谷底(左右各一个), 而小球最终达到的位置这次就不仅与这次的外力有关, 还与之前外力引起的位置高度相关(综合历史信息进行决策),这无形中就实现了对两个信号进行比较(此处即最简单的图灵机),而且是用一个简单的物理系统哦。 那么如何利用我们刚说到的两种神经元(和外界信号正比或反比)来实现这个功能回路呢?  请见右图,我们甚至可以画出一个电路图来解释这个原理。 正号代表正比神经元, 负号代表反比神经元,E代表一个随时间变化的控制信号,S2根据E改变电路连接,那么你可以设计一个带有记忆功能的减法器来实现它。


然而这个方法说到头是一种类比, 很多真实的神经科学家把这个方法戏称为toy model, 而对其不屑一顾。 因为你无论说你电脑里的程序行为多么像大脑, 其实与真实都差距万里, 而且能够实现某种功能的算法也有很多, 你凭什么说大脑就是按你的臆想工作? 用这种方法的计算神经科学家经常纠结于自己的模型需要多大程度仿真的问题上,你真的设计的惟妙惟肖就好吗?就好像有些人说的, 你要给一只猫建立模型, 最好就是找一只猫来。


当然有模型还是比没有模型好很多, 毕竟它给我们点亮了生物世界和数学世界的联系。使得一个我们可能理解的数学体系得以建立在繁琐摸不到体系的生物体系之上, 让我们能够通过改变参数空间的方法与之玩耍。


然而模型开始发挥威力的真正时刻是机器学习的介入,传统的复杂系统方法从此得到革新。为什么呢?

因为通过机器学习, 我们有了一个强大精确的从数据反推模型的方法 ,而非之前模糊的类比。 机器学习的思路和之前的根本不同在于我不在一开始醉心于设计与真实系统相同的模型, 而是先用与真实模型原理大致相似的标准化模型,去学习真实的输入和输出。此处的思维即你不在追求画出一个活灵活现的猫,而是先做一个四不像的东西, 让他去学习和猫一模一样的行为, 当这种行为真实到不可区分, 那你就认为它就是那只猫。


一旦机器学习开始介入,模型就被赋予了预测性,而被赋予预测性的模型,可以看做在输入输出层面与真实系统不可区分, 从而解决了模型复杂度不好设定, 模型难以通过奥卡姆剃刀的缺陷。 机器学习的模型比之前的模型更好的点在于多了cross validation的部分, 你用真实数据得到的模型,不仅要在已知输入输出的情况下做到像真猫一样, 还要在已知输入未知输入的情况下像一只猫, 也就是说它真的要有学习能力, 能够像真猫一样不仅可以捉到屋里墙角的老鼠,还可以捉到田间地头的老鼠。


用这个方法, 我们的研究框架发生了变化。 我们先要寻找一组具体的输入输出作为研究起点。比如要研究视觉区域,你就找到一组猫和狗的照片, 然后输出需要是正确的分类。然后再进行测试。


与复杂系统模型方法不同的是, 机器学习的方法是一个黑箱操作的思路, 我们首先做一个标准化设备, 然后把大量输入送到这个标准化设备里, 然后让标准化系统改变参数得到一组我们想要的输出。标准化黑箱的好处是训练得到参数的方法已知因为这往往是一个巨难无比的任务,而与传统复杂系统模型只追求定性描述的需求不同。


如果上面的问题用机器学习的方法来解决,就变成:

此处的主角是一种标准化的神经网络RNN(循环神经网络), 我们给定在各种情况下的输入到输出的映射关系,然后在有监督学习的框架下对网络进行训练-即调整网络连接权重达到模拟这个输入和输出的过程。 而此时我们不需要设计,两种与实验相符的神经元(正比,反比如图左)就会自发浮现出来。也就是说, 机器学习出来的猫完全具备了猫的所有功能,甚至不用我们过度描摹,就长得也有些像猫了(功能和形态的对应?)。


我们现在有了一只会在各种场合抓老鼠的猫, 但我们毕竟不需要一只机器猫,而是要通过机器猫研究猫的行为,懂得猫是如何通过底层的元件实现功能的,毕竟电子猫比真猫要听话的多, 也可以任意让我们解剖,改变参数。 如何做呢? 再次回到复杂系统里的动力学分析:


此处新增添的箭头是从高维神经网络到位低维动力学系统的。 还记得我们之前说的那个山坡小球的玩具模型吗? 它的机理很完美然而可惜的是人家并不信服, 不过我们可以拿到我们训练好的能够与真实系统不可区分的RNN,然后用它进行“逆向工程(reverse engineering)” ,从中取出一个低维度系统, 看它的工作机理是不是符合我们的猜想。此处应有掌声,因为这里我们用到了一个多么抽象的方法,用真实数据回答了一个几乎不可能验证的假设。


这里其实还有一个隐含的信仰,被训练过的黑箱被认为学习了生物系统的本质。你的RNN做任务做的再好毕竟和真实还是有区别的, 但此处我们已经达到了目前可以做到的极限。这里涉及到一个相当根本的问题, 就是机器学习的核心即在于通过数据学习得到真实系统的数学表征,而这种表征有多大程度接近真实,依然是难以量化和说清的。


通过这种高维RNN到低维动力学系统的映射,我们就得到了一个解释整个系统运作的更加简单的示意图。通过学习, 一个高维混沌系统开始出现定点(fix point),定点含有系统输入输出的重要信息。此处是一个简单的二元分类器,这个分类器工作的原理正是一个动力学里的鞍点。 对于f1>f2 和 f1

此种我们看到了机器学习和复杂系统你中有我我中有你的缠绵关系。 首先机器学习是一种算法,而算法总要有一个物理实现(复杂系统)。 我们先有数据组成的表象世界, 再有算法组成的符号世界, 最后是抽象的真正解释世界机理的物理世界。这三种之间表象世界通过机器学习进入符号世界, 而符号世界又才能与物理世界巧妙的相通。 机器学习是桥梁, 复杂系统是灵魂, 而没有桥梁, 灵魂就是空洞的。


我们可以进一步追问机器学习方法为什么work,人脑为什么work,此处真正相通的地方到底是什么?注意我们反复在说的低维到高维,与高维到低维的问题, 现实生活中的问题往往是高维到低维的映射,比如信号(高维)-决策(往往二维)过程, 能够在高维空间里找到低维嵌入, 往往就代表神经网络建立了真实世界的模型, 正是因为这些模型,我们具有“举一反三” 和“泛化”的能力


此文改编自Omri Barak教授的论文


更多阅读 (深度长文)

模拟人类大脑 :人工智能的救赎之路 ?








今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/08EQhGA0JT
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27571
 
777 次点击