根据没有免费午餐这一原理,我们知道没有一个模型是万能的。设计不同的模型来解决不同的问题是算法工程师的核心竞争力。设计模型的指导思想是什么,怎么理解我们设计的模型是可能work的呢?我接下来谈一谈我的理解。
每一个模型就好比一筐苹果,模型中每固定一组参数,那么就相当于选择了这一筐苹果中的某一个苹果。好的模型有这样两个标准:
1 这筐苹果包含了一个“完美的苹果”
2 这筐苹果数目比较少。
所谓“完美苹果”是指这一个模型中,通过调整参数,能得到的一个可以完美解决问题的那一个模型;苹果筐小也就是说这个模型的参数比较少,这就使得找到那个“完美苹果”的过程更容易。
由于神经网络的万能近似理论,神经网络模型天生满足1条件,效果不好的原因就是这个苹果筐实在太大了。各种神经网络的设计过程几乎都是在实现缩小苹果筐同时不要漏掉那个“完美苹果”的工作。设计的方式就是:
深入理解需要解决的问题,通过拍脑袋撞大运或者根据仿生学等方式,想出一个比较靠谱的解决这类问题的通用性的流程,然后用神经网络把这个流程包含进去。这个流程不需要包含任何事先规定的参数,只是一个流程框架,就类似于写程序的时候只是写好while循环,顺序结构,if分支选择。但是while循环,if选择的条件并不指明。
比如CNN,就是通过仿生学研究生物的视觉皮层,将原本全连接的神经网络的一些连接去掉,并设计新的结构“卷积”,试图将生物的那个优秀的视觉感受流程包含进CNN这筐“苹果”中。了解一下LSTM,deepmind的神经推理,就更能理解上面所说的方式。
然后,通过各种优化算法(一般而言是梯度下降),在我们设计的这筐苹果中找到能够最佳解决问题的那个苹果,然后神经网络就work了。