我们有必要先重新认知下“学习”这个概念:
赫伯特·西蒙教授(Herbert Simon,1975年图灵奖获得者、1978年诺贝尔经济学奖获得者)曾对“学习”给了一个定义:“如果一个系统,能够通过执行某个过程,就此改进了它的性能,那么这个过程就是学习”。
而机器学习的概念则是:
对于某类任务(Task,简称T)和某项性能评价准则(Performance,简称P),如果一个计算机程序在T上,以P作为性能的度量,随着很多经验(Experience,简称E)不断自我完善,那么我们称这个计算机程序在从经验E中学习了。
那么,根据上述的概念,我们知道,对于一个机器学习的问题,我们要明确这三个概念:
任务的类型(T)
衡量任务性能提升的标准(P)
获取经验的来源(E)
机器学习的方法论e(数据来源作为起始端) => e(end,结束端)
中间的过程?
机器学习的方法论就是始端直接到末端,中间过程是不可知的,并且因此难以知 ===> 这就是机器学习。
所以也有很多人批判深度学习是一个黑盒系统,它的性能很好,但却不知道为何而好,也就是说,缺乏解释性。
传统的机器学习方式,通常是用人类的先验知识,把原始数据预处理成各种特征(feature),然后对特征进行分类。
然而,这种分类的效果,高度取决于特征选取的好坏。传统的机器学习专家们,把大部分时间都花在如何寻找更加合适的特征上。
机器学习的专家们发现,可以让神经网络自己学习如何抓取数据的特征,这种学习的方式,效果更佳。于是兴起了特征表示学习(feature representation learning)的风潮。
这种学习方式,对数据的拟合也更加的灵活好用。于是,人们终于从自寻“特征”的中解脱出来。
但这种解脱也付出了代价,那就是机器自己学习出来的特征,它们存在于机器空间,完全超越了人类理解的范畴,对人而言,这就是一个黑盒世界。为了让神经网络的学习性能,表现得更好一些,人们只能依据经验,不断地尝试性地进行大量重复的网络参数调整。
再后来,网络进一步加深,出现了多层次的“表示学习”,它把学习的性能提升到另一个高度。这种学习的层次多了,就给它取了个特别的名称——Deep Learning(深度学习)。
我们不训练模型,我们只做模型的搬运工上面的概念知识如果你没有看懂(这是大概率的事情),那么无妨,因为我们的目的并不是训练出针对某种任务类型的模型,而是在应用内集成某种任务的AI能力,因此我们并不需要训练,只需“搬运”即可。
即: 我们引入别人训练好的模型,通过框架的api给它导入参数,并让它返回res。我们并不需要关心它的实现。
所以本次分享主题的由来:
由于客户端的限制(主要是性能考虑),所以这些由机器学习(框架+模型)构建的功能,大多情况是我们把入参数据发送到服务端,让服务端来处理数据,把res返回到客户端。
这样做无疑会带来以下几点问题:
用户的隐私不能得到保证(入参会经过网络传输到服务端);
返回数据的用时依赖网速;
服务端压力大(入参数据大,计算res的过程依赖CPU,高并发情况下会对服务器性能要求较高);
由于html5新增的功能(webGL)和越来越强大的性能(环境日益改善),一些可以运行在客户端的小型但又强大的机器学习框架衍生出来(比如tensorflow.js),可以在客户端完成这些功能。好处也是显而易见的:
用户的隐私得到了保证;
不依赖网速,依赖客户端的性能;
所以不会对服务端造成任何压力;
综上所述机器学习很牛逼,属于大前端领域的一个支线技能。
举个例子:
小明想一夜暴富,于是他想预测下次的彩票开奖结果。
那么他确定了任务类型: 预测下次彩票开奖的结果。
于是小明向好基友AI大佬小华求助。
于是小华把训练好的模型给了小明,告诉他,只要对模型入参(E)开奖的日期"yyyy-mm-dd",就会得出一个开奖结果(E)"x x x x x x x x" ;
于是小明就上车了。
小明第一次入参 2019-11-07, 得出结果: 1 2 3 4 5 6 7
小明坚信不疑,当场花了两元巨款,结果第二天就发现打了水漂——因为开奖结果是: 2 9 8 6 6 4 4
小明就问小华怎么回事,经过小华的解释,小明明白了: