level 9
如题。之前有过一个帖子,不过为了减少翻找的时间,直接开新贴了。
刚才搞定了一个最简单的深层神经网络的例子,算是勉强确认了下自己确实知道这东西怎么搞。之后会写些程序来定量地验证可靠性。这里的东西对了解的id来说,应该只是看完教科书后做练习题的层次,不过如果接触比较少的id对其中的细节有兴趣,在下可以介绍一下。和以前背书相比,现在这个应该算有第一手经验。
此外,这周末有个办到第三届的关于这个话题的活动。顺利的话,在下可能把听到的东西介绍下。
=====
按最近的新闻里看到的,似乎也有很多人认为十年以后,现在这些理论/技术有可能改变生产方式。所以让这方面的知识普及也许比较重要。
=====
如果回复不多的话,在下可能稍微介绍一下上面说的程序的细节,然后结束这个帖子。
2017年07月19日 00点07分
2
level 9
先来个粗糙的介绍。
=====
神经网络,顾名思义,是模拟神经元的行为方式,然后把模拟出来的小部分,组成网络,来把“输入”到这个网络里的东西,变成这个网络“输出”的东西。如果模拟的足够到位,这个“输入”和“输出”之间的关系会类似生物——甚至人脑——的神经系统的处理结果。
比如,把踢馆id的发言当作输入,输出的可以是发言的id;这就相当于一个人看到一段发言后,猜测发言的是谁。
就在下看到的,“神经网络”好像可以粗糙的分成两类:在网络结构上做文章,在神经元的行为方式上做文章‘;不过很多例子里,两方面是混起来的。——两类方案,在下各写过一个不太实用的例子程序来验证过。
一个是最近刚搞定的“有监督的深层神经网络”,另一个是“无监督的自组织神经网络”。这以外还有其他类型。比如所谓的“混沌神经网络”,似乎是在结构上,让(一部分?)神经元的输出作为它自己的输入;这个做法用在用真的电线和电子元件搭的电路里,有可能产生电信号的混沌现象,用在神经网络里目的也是要利用这个现象。不过没验证过...
之后会简单减少下在下做过的两个例子,希望感兴趣的id可以从中了解到有用的细节。
2017年07月20日 00点07分
3
简单减少=〉简单介绍
2017年07月20日 00点07分
level 9
继续。
先说下单向的深层神经网络。这个大概是现在最热的... 之一?而且好像有按这个东西的原理做硬件的,好像是某种监视摄像头的镜头部份。
=====
“单向的深层神经网络”,先解释下名词。
这里的“神经网络”,也许应该叫“神经元的网络”,并且每个神经元/神经细胞,当作是全同的;同一网络的任意两个神经元拿出来,相同的输入会有相同的输出。——如果诸位去别处看示意图,应该会看到这样的:一个圈或者其他几何图形表示神经元,一头有输入的线,另一头有输出的线,然后在输入输出之间要做一个函数运算来吧输入值变成输出值。
所谓“深层”,是说这个神经元网络的神经元分三组或更多组——比如AlphoGo的好想有几十组。在这楼说的例子里,“分组”越多,这个神经网络能对输入数据做的运算就越复杂;比如,只有输入组合输出组的双层网络做不了“异或”运算,三组的就可以。
“单向”,这里“向”是说信号传递方向是否沿着“神经网络的输入”到“神经网络的输出”的方向。如果把“神经元的组”,按神经网络的输入到输出的方向编号排列一下,那么在图上画出这个排列后再画信号的传递方向就可以看到,单个神经元的信号传递方向,可以是:
“把来自前一组的输出当自己的输入,用输入代入自己的函数来计算输出,把自己的输出当后一组的输入”,
但是也可以是:
“把自己或同组的输出,重新输入到自己的输入位置上”,或者“把输出向前一组的输入位置传递过去”——反馈。好像所谓递归神经网络(RNN)是这么搞的,不过在下还没试过,这里不说。
=====
小结一下。现在比较热的“深层神经网络”(正规的说,叫深层卷积神经网络)大致是这个意思:
神经元分组排列起来,输入组——最靠”前“的一组——接受数据,输出组——最靠”后“的一组——输出数据,中间的”隐藏组“传递数据。
传递过程里,每组的神经元只从”前“一组获取输入数据,只向”后“一组传出输出数据,不从自己所在的组获取数据或传递数据。
每个神经元获取数据的时候,得到的数值是提供这个数据的上一组的神经元的输出数据,再打个折或者加倍——也就是乘以一个数,这个数可以叫”权重“,相当于额外的加强或减弱一个神经元的输出数的大小。
然后,单个神经元的输入和输出满足一个函数关系,这个函数——所谓的“激发函数”——通常得由这样的性质:在输入值等于零处,一阶导数有明显的变化——或者说输入输出关系有明显变化。——这个大概和生物体内的”神经元“的性质比较接近,可能是”神经网络“里最”仿生“的部分了。
=====
然后深层神经网络的有效性好想是基于这样一个假定:整个网络里的所有的“权重”——也就是神经元之间传递数据的所有“折扣”——可以达到一种特殊的数值分布,使得整个网络的输出和输入的数满足特定的函数关系。
这里有几点需要注意:
1)现实生活里计算一个“函数”,可以小到是笔算出一个随机数序列,可以大到“看一幅图然后说出图里有什么物体”,这里面做的计算可以很复杂,甚至很难用数学函数描述出来;用深层神经网络做同样的事情,相当于是只用两种运算做到同样的事情,1)神经元内的激发函数,2)神经元之间的“折扣”——即与“权重”做个乘法。
2)神经网络最重要的参数是上面说的、所有神经元之间的“权重”的分布。或者说,如果只给在下“权重分布的文件”,隐瞒了“神经元内激发函数的类型”,在下好像可以很快重建一个同样功能的神经网络。
三)深层神经网络相当于假定:存在一个或一些“权重”分布,使得输入可以得到想要的输出。但是一开始建立神经网络时,权重分布只能随机给定,或者直接人来选,不一定合适;所以要先做训练来让它变得”合适“。
4)训练深层神经网络的方法,名字叫”反向传播算法“,提出的好想比较早,实用化好想是一个叫lecun的研究者三十年前做到的,做的东西是给邮局识别手写阿拉伯数字。
所以要实际做个深层神经网络,最关键的地方就是怎么使用反向传播算法来训练权重分布。
=====
所谓”反向传播算法‘,粗糙的说是这样的:
把神经网络从输入到输出的过程看作是算了个函数,并且这个函数只包括上面说的两种运算,1)神经元内的激活函数,2)神经元的输出与权重做个乘法的积作为下一层某个神经元的输入;
然后进行很多轮”训练“;
在每一轮训练里,都要对每个权重考虑下这个事情:如果这个权重的值增加一个比较小的数,是会让神经网络的输出更接近需要的值呢,还是相反;显然,有些权重需要增加,有些权重的数值需要减小,把这些增大、减小值算出来然后加到各自的权重上,一轮计算就完成了。
——当然,上面的最后一步实际上很繁琐,因为修改每个权重都要把整个”神经网络“计算一遍;这里其实有很多重复计算的东西,而”反向传播“则是利用高数阶段入门的概念,”连锁法则(chain rule)“,来简化这些重复计算的东西。
粗糙地说,如果计算一个比较复杂的函数要用到很多种类的运算——比如可以找一个用年月日计算星期几的函数看看,那么使用”连锁法则(chain rule)“后,可以把这个函数的输出值,变成输入值和一连串“导数(偏导数?)”的积的形式。
这里的每个“导数(偏导数?)”可以只包含少量的变量:比如神经元的输入数值,或者一个”折扣/权重“的数值之类,并且可以在计算不同权重的时候重复使用。
=====
也就是说,有了”反向传播算法“,原本很复杂的一个函数——比如看图认东西或者听声音然后认出里面说的话,可以拆分成一连串的求简单函数的导数的数值,还有计算乘法。这些正是当代的计算机最擅长做的事情。
2017年07月21日 00点07分
5
level 9
应该接着介绍最简单版本的深层神经网络的。不过刚听完CCAI,可能最近会趁热转手普及一下听到的东西。
这方面诸位有兴趣的话可以先看一下最近政府发的《新一代人工智能发展规划》,在摆渡百科里稍微浏览了下,没提到劳动者再教育。
然后,关于“人工智能时代新出现的工作”,有一个叫“Crowd Sourcing”。在人工智能方面,这个词通常是说把数据的标注工作,分派给没有专业技能和训练的人去做,然后按工作量算钱。
不过也有一些大家/劳动者大概也能直接有好处的技术。比如据说某公司的“慢性疾病监测软件”可以把发病比例减少二成。这算个新公司,所以在以后改变经营方式以前,说不定会有免费/廉价试用阶段。
详细的可能得等在下抽时间整理下录音和笔记,再结合主办方给的ppt来说。有兴趣的话,可以提问,如果内容里有,在下可以先整理。
=====
总的印象... 有点《十八世纪产业革命》里描述的情景。旧产业的所有“新”因素普及完毕,开始靠资本运作榨取劳动者收益,但是又有新技术在逐渐改造生产方式。这个新技术可以把人不当人的用,也确实有机会造福人类,而且也有群体在做这个事情。问题在于两点:
当技术的可用性明确以后,资本所有者最终会怎么做;
一线劳动者会怎么保护自己的权利或者在新生产方式下谋生。
2017年07月23日 17点07分
7
level 9
又想了下,可能会先把之前说的“深层神经网络”的源程序整理下,写个流程图和注释,然后先在这里发一份。有兴趣的id即便手头暂时没有编程条件,也可以对照着文字说明了解下神经网络是什么——或者至少是了解下在下试过的这部分。算是给上一楼说的东西做准备。
2017年07月24日 00点07分
8