自由与限制,相辅相成

背景

在做PA行为模型的建模,为了拟合PA的长期记忆,需要使用长达10K的数据点shape = [10K, 2]来建模。这么长的数据,直接输入模型肯定无法计算,需要对原始数据做压缩/过滤。关于怎么做“压缩/过滤”,我和队友有一些分歧。

我建议使用AutoEncoder技术自己学习“压缩/过滤”模型,而队友建议自己根据业务手动设计“压缩/过滤”规则。最后我们得出了这样的结论:

  • 如果数据无限,自己学是上选
  • 如果数据和运算都有限制,很难控制它去学什么

由此延申出一些想法

NN的演化趋势

  • NN演化从全连接FC,到CNN的卷积,到RNN的序列,演化趋势一方面希望网络自己学习feature,一方面引入各种限制(人工知识)辅助(加速)学习过程。
  • 语音识别task的演化则是另一个方向,一开始人为定义phonix等中间步骤,通过人类知识帮助NN学习,到后来的一步到位,学习过程全权交给NN。

Ng也有过类似的说法,机器学习可以由人为知识帮助它学习,也可以直接从数据自由学习。并没有哪种一定是最好,由实际情况而定。
基于人为知识的学习,学习依赖于人的知识,难以超过人的水平。
基于数据自由学习,需要而更多的数据和计算资源,而且无法控制它能学到什么,有可能会学到奇怪的东西。

Coding Dojo

自由学习与人为限制,并非对立的存在,它在Coding Dojo中得到了相辅相成的发挥。

Coding Dojo的思想来源莱特兄弟造飞机。当时有许多专业的经费充足的团队没有造出飞机,而草根团队莱特兄弟却造出了飞机。原因是莱特兄弟有一套低成本的测试方法,而专业团队的测试方法成本高昂,以至于他们不敢随意尝试。

Coding Dojo则认为,我们要提升软件技能,同样需要大量的尝试和探索,但是在真实产品中做些事情的试错成本太高,导致无法真正的放手去做。我们需要一个人为设置的playground,在这里试错成本要低得多,有了playgound的限制,我们才可以放心的尝试和探索(自由学习)。

机器学习的自由学习就是不断尝试、测试再调整的过程。但它的学习不能是任意的学习,而是在人为设置的条件下自由学习。因此,在机器学习中,自由学习与人为限制也可以是相辅相成的存在。

儿童教育

这个话题就有点大了,我们是应该把自己的经验直接告诉孩子,让他少走弯路?还是应该鼓励他尝试,看着他犯错,等着他自己领悟?