我一般称人工智能为 pseudo-science 伪科学(中医式经验科学) +pseudo-math 伪数学(最多不超过SDE的数学难度) +pseudo-engineering 伪工程(我们写代码都不写unit test) 三位一体。 这里提AI里几个(我听说过的)数学最难的方向,其实都很简单。 第一是大模型本身,这里谁都解释不通,大部分人用的技巧就是最基础的动力学PDE,比如neural tangent kernel/tensor program,不会超过19世纪的技巧。 第二是扩散模型,勉强用到了Stochastic Differential Equation,但其实有了score matching这些东西可以绕过去。也有人在非欧空间上做扩散的,要用到基础的黎曼几何 第三是强化学习,用到一些简单的统计上降低variance的方法 第四是优化,但优化主要研究convex凸优化,可neural network都是非凸分析不出来。另一个方向是随机优化,听说不少用martingale来分析的,这我就不懂了。 然后还有信息论和最优传输理论时不时出现。 总之,人工智能用到的数学都不难,且越难的东西越没用。最深也就是1930年的数学,离前沿还很远。 竟然不一会儿30多条评论,各路大佬出没,真的吓到我了。 我来随便瞎说一些为什么非凸分析不出来,各位就随便一听,有问题就给我上个课,提前谢了。 (我肯定是不懂的,但我也没见过有谁能宏观上都懂的。大家都在盲人摸象。以下我是听别的摸过几个不同部位的人讲的,道听途说转述一下。肯定有人摸一个部位摸的很透彻的,但这个象整体长什么样还是想象不出来。) 传统(非线性连续优化)方法研究的问题往往是传统的统计模型。 对于正常14年以前的模型,基本99%都是凸的。如果不凸也得给它弄成凸的(比如L0 regularization改成lasso式的L1)。 同时,模型的参数量不大,所以可以上二阶方法,LBFGS这种(我也不懂瞎说的)。 这种方法最大的好处是scale invariant,也就是说,如果两个维度倍数差的太大,参数不会直接飞出去。 坏处就是要存一个hessian matrix的二阶向,平方储存量实在存不下。 然而神经网络有三点让分析变得贼复杂: 参数量过大,只能用一阶方法。照优化的理论,因为scale的问题很容易不converge。再加上gradient explosion 和vanishing,应该得不到最优解才对。而VGGNet当年确实遇到了这个问题 解决这个问题是何恺明当年的主要贡献,具体做法是在模型设计的时候就保证它的gradient大小维持一致,最好每个维度之间只差几倍。具体包括 normalization Kaiming initialization residual connection 三板斧下去,基本上scale都一致了。
- mini-batch training。模型不是每次拿整个数据库训练,而是一个一个batch。那么一方面它会有更多的variance,但另一方面更多的迭代次数带来了更快的效率。这个意味着必须用随机优化的方法去分析,具体我也不懂。
- 非凸 高中上吴恩达的课的时候,他是这么解释为什么非凸不会卡到局部极小值里面: 假如模型有N个参数,那么损失景观(loss landscape)的维度就是N。 局部极小值意味着在该点的海森矩阵(hessian)是半正定(positive semidefinite),意味着每个维度它都是“上翘”的,才会形成一个坑。假如每个维度是独立的,那么它们都上翘的概率就是p的N次方,非常低。 所以现实中只用担心鞍点(saddle point)和平坦区域(plateau,即局部梯度很平)。 而因为SGD的随机性,所以模型参数会四处游走,能从鞍点里蹦出来。 我把这段话转述给优化课上的匈牙利老爷子。老爷子说,这假设就不对,凭什么认为loss landscape每个维度互相独立? 当然,这些我也就随便说说。我想表达的是,照优化的观点,神经网络就不该converge,应该飞出来,因此也很难给理论保证。 要想给理论保证,得非常理解神经网络本身的包括over-parameterization在内的各种特性,因此可以在写证明前给更强的假设,来得到一个足够紧的bound。 这大概是纯懂优化的大神为什么做不出神经网络收敛性的分析。
