有没在 GPT 大模型的神经元用二次函数的?
这几天有机缘结识了一位 AI 领域的大牛师弟,普及了一些 GPT 大模型的知识,趁着风头正热,做了些简单研究。
现在的神经元函数通常都是一个多元线性函数再加一个非线性的激活函数,之所以要加后者,是因为线性函数迭代后还是线性的,无论网络有多大规模,如果只有线性函数,那结果也就是个简单的线性分类器,没什么意思。而增加了非线性函数参与迭代后,就有可能拟合出非常复杂的效果了。
想到用二次函数作为神经元函数,会有几个好处:
1. 天然非线性的,不需要激活函数了,一把搞定。
2. 计算非常简单,只有加法和乘法。而传统的激活函数 sigmoid 或 tanh 等都是超越函数,计算量大。
3. 多项式是无穷阶处处可导的连续函数。另一个常用的激活函数 relu,计算是简单了,但它一方面不是处处可导的,梯度计算会有些问题;另一方面它长得太“线性”了,迭代多次很可能还是有强烈的线性特征,感觉效果不会太好。
4. 相应的损失函数的导数是线性函数,再来算梯度也非常简单,比 sigmoid 还简单(选择 sigmoid 的一大理由就是导数简单)。
5. 二次函数没有 sigmoid 函数在接近 0,1 时过于平缓而导致梯度迭代时收敛过慢的问题。
6. 甚至,因为损失函数的导数是线性函数,直接用最小二乘法拟合系数(也就是权重,即所谓的千亿个参数)就行了,梯度迭代都省了。而 sigmoid 这种超越函数是不行的。
7. 迭代多次后变成高次多项式,理论上可以在任意精度上拟合任意连续可导函数。
8. 多元二次函数的系数比线性函数多一个数量级,是平方级的。用线性函数(+ 激活函数)时,两层各 1 万个神经元之间有 1 亿的参数,用二次函数则可能有 5000 亿个,做到同样参数个数的网络会小得多。
9. (此项待定)初步看起来,多项式还可能有累积效果,就是训练集有可能逐步加上来,而不必每次训练都要针对全训练集。至少对于一层神经元是可以的,多层还没想细致(数学计算有点太复杂了,还没算清)。同样的,sigmoid 这种超越函数没有这种性质。
不知道有没人做过这种尝试,初步搜索了一下,能找到有人做过多项式神经网络的研究,但只作为某种数据挖掘方法之一,没找到在大模型上的实践材料。暂时也没想出二次函数的缺点,对比于其它的激活函数,它不是单调函数了(其它见到的激活函数基本都是单调函数)。不清楚这是不是一个关键的障碍,也可能有更浅显的原因导致它不能用,所以也没啥人搞,有待于请教领域内的专家了。
也没办法自己做个实验来感受。神经网络这种“不讲理”的大模型,似乎不能事先从理论上论证某个函数是不是可行,只能训练出来试试看才知道是不是管用,而训练的成本太高了,于是也只能随便想想。
有个感受,对于优化大模型的训练性能和效果,数学意识强的同学会有巨大的优势。具体来讲,就是了解各种函数的性质甚至知道数学家发明这些函数的初衷,进而熟知其适应场景,在需要某种特性的函数时马上可以编造一个出来,也能够设计出合适的数学量来量化表征人类的主观感受。这个能力,我们之前在成功实施一些工业智能算法时就发挥了巨大的作用。有点遗憾的是,大多数 IT 专业的人在这方面普遍偏弱,大学期间学的都是工科类的高等数学,对更深层次的数学原理掌握不够,还需要恶补这些数学知识,或者由专业的数学家来帮忙。
在高中阶段经历过强化奥数训练的优胜者,这方面会明显会好很多,这算是给大模型团队的招聘提个建议吧。
还有个题外话。GPT 火了之后,有很多朋友来问,SPL 既然用于高性能计算,是不是可以协助大模型的计算。
之前我理解的 AI 类计算都是固定死板的几种,再麻烦也就是费一次性做好,而且常常是迭代式的矩阵计算,同一批数据反复计算。而 SPL 擅长的是大数据量上的结构化数据计算,重点要解决计算需求的灵活多样,也很少有迭代和矩阵计算。这和 AI 计算相差很大,所以我通常会认为 SPL 并不适合 AI 类计算,只能做 AI 前的数据准备(这个作用其实也很有意义)。
但这几天研究了大模型的工作过程后,发现这个看法也不尽然。
1. 神经网络并不是只有固定的几种,多种层次多种函数可以灵活组合出非常丰富的形态,也会出现千变万化的计算需求,每种情况都要对应的编程来实现,要提高开发效率,方便的编程手段是很必要的。而这恰恰是 SPL 非常擅长的,如果补上一些 GPU 类库后,用 SPL 去开发神经网络肯定比 Python 方便很多,比其它程序语言就更不知会强多少倍了。
2. 大模型的训练集也非常巨大,再配合大网络的属性,其实也是一套巨大的结构化数据集。计算出的中间结果也再次使用,这会涉及到大数据集的查找和关联技术,而这也是 SPL 擅长的。 不过,现在大模型的数据集也大太了(万亿级别),超过大部分数据库任务(金融业务一般也就几亿到几十亿级别,百亿都少见)。SPL 要适应这种规模的数据,也还需要有不少发展。
看起来,在 SPL 上发展一些大模型的类库也挺有意义的。不过还有万一,费了半年劲把这些东西都完善后,GPT 的热度却过去了。