王路在隐身

训练AI学习毗昙的一些体会

1、epoch基本上在5-10之间就妥妥的够了

epoch就是训练的轮数。epoch多少合适,主要看两方面:一是训练数据的大小,二是训练数据的纯度。这两方面本质上是一个方面,就是训练数据的纯度。因为一般来说,数据集越大,内容越驳杂不纯。假设你有一个数据集,里面全是0和1,而且相间排列:010101…… 哪怕有无穷位,我们还是可以用一个非常小的数据来表示它。但如果没有排列规律,数据越大,基本上就越杂。越杂的数据,也就越难压缩成为确定的“知识”,或者用简洁的规律来概括。那么,训练这样的数据,需要的轮数也就越多。


我训练的是毗昙文本,它非常纯粹,所以哪怕是训练1385万字,在epoch小于8的时候,也就训练充分了。如果继续训练下去,验证集上的LOSS反而会增加,就训练过度了。而且,这种训练是学习率调得很低的情况下,在e的-5次方到-6次方之间。如果你训练非常驳杂的文本,财经、娱乐、新闻、文学、聊天记录、古诗词、医学文献……那这个epoch是肯定不够的。


2、小数据和大数据差别不大


毗昙领域,最重要的文献,就三部:《俱舍论》《大毗婆沙论》《顺正理论》。这三部加起来也就350万字。是一个人一辈子可以读完并有望精通的。而《大正藏》毗昙部的所有文本,是1385万字——一个人一辈子想读完这么多,就不那么容易,而且恐怕只能读一遍,读两遍都非常困难。实际上也没必要。机器学习,也是这样子的。


我用GPT2-medium模型训练学习1385万字,设定了8个epoch,预计39个小时,实际上在5.54个epoch时自动停止(Tesla T4上训练了30小时,连续5次验证集上的LOSS小于0.02,训练集上最终LOSS是1.0755,学习率是1.54e-05,验证集上LOSS是1.1377)。这个效果不如用GPT2-large模型训练学习350万字的6个小时(RTX 3090上训练到7.57轮自动终止,连续五次验证集上的LOSS下降不足0.01,其中两次不降反增,动态学习率最终下降为4.718e-06,训练集的LOSS降至0.3727,验证集的LOSS最低是1.0970)。


我判断效果好坏不止是看数据,更重要的是看生成文本的效果。我发现确实,对机器学习毗昙来讲,同等算力下,让它学习1385万字的文本,并不比让它学习350万字甚至132万字的文本效果会更好。这一点也很容易理解。——要看内容的同质化是不是强。你研究《红楼梦》,可能要把《红楼梦》的各种版本都找出来,放到一起来比较,如果你手头上只有10种以内的版本,研究就很局限,很受约束。但如果你学习微积分,你需不需要找1000种微积分教材,每种都学一遍?当然不需要。你把最经典的微积分教材学透,效果比你泛泛地把1000种微积分教材都浏览一遍要强。


我们学习是要考虑算力约束的。一个人一辈子就这么点算力——你不可能什么都学。要看你如何规划你的算力,让它配置到尽可能优的事情上。算力无限的话,你可以把全宇宙的知识都学了——问题是算力有限。不仅有限,还吃紧。


人类学习毗昙——我自己学,也是这样。所以我主张吃透一手文献,《俱舍》《婆沙》《正理》——一个学习毗昙的人,应该把80%以上的精力,花在阅读这三部文献上,其他所有的毗昙文献,合在一起花20%的精力就够了。机器学习也是这样子。如果你只是针对它对毗昙的理解进行考核,其实不需要把数据集扩大,否则只是徒然浪费算力。扩大数据集是因为想要泛化能力,想要泛化能力的话,直接用GPT4就好了,根本不用拿专业文本去训练。而且对个人来讲,就像斗地主时的状态——你“要不起”。 你需要的是专家,不是通才。 通才AI是由大公司提供的。 当然,专家AI恐怕也得由大公司提供。 只有在大公司懒得提供的时候,你的尝试才可能有一点意义。

3、制约效果的,从根本上说还是模型大小


我试过的模型有LSTM、bert、GPT2、GPT2-medium、GPT2-large、GPT2-XL、GPT-neo,在一一尝试之前,我考虑过通过调整参数值来影响训练效果,尝试后发现,几乎没有必要,有也很小。根本上,起决定作用的是模型大小。就好比,我们想教一个对象小学一年级的数学,从根本上,制约效果的,是看你教的是猫,是狗,还是猴子、大猩猩,或者人类幼儿。而不是教学方法。你对着一只猫教,再好的教学方法,它也学不会。现在个人能用来训练学习的AI,只能比喻成猫——没有贬低猫的意思。


两周前,刚开始做这件事时,最大的制约,是我不懂计算机,看不懂代码;现在,最大的制约,是没钱,没算力,以及目前最先进的模型GPT4没开源。


以前,让我比较捉急的是,代码一次次扔进去,跑不通,我又看不懂,只好反复问AI,反复修改;现在,让我觉得再尝试价值有限的是,48G显存以下的GPU已经不够用了,花钱买了算力,光下载模型就要花不少时间,本地电脑还用不了,训练结果还要花钱保存,关键是,因为还达不到够使用的条件,花几十个小时训练之后,5分钟看完效果也就不再用了。


我当然比较期待看看GPT4跑这些数据的效果,但现在是没有条件的,只能等以后了。


下面放出来几个AI生成毗昙文本的效果(是用GPT2-XL模型训练学习《俱舍》《正理》后生成的):


prompt:此在欲界無聲無根八事俱生

AI:隨一不減云何八事謂四大種及四所造色餘色所依所緣應知亦爾又如毛孔通經言尊者法救作如是顯七者謂法如應斷一切無學法或彼或此所斷法諸無學者法一切所攝故品類足論名為說諸無


prompt:業在蘊處界中是何所攝

AI:理必應爾如前已辨若爾何緣不立為根境於處界中頌曰 論曰若所造業由重煩惱或淳淨心或常所作或於增上功德田起功德田者謂佛法僧或增上補特伽羅謂證世出世勝德於勝己勝於己田起


prompt:四靜慮各具幾禪支

AI:所謂欲界繫善心無覆無記初定具四種善惡業無威儀路等三謂除後三無覆無記及色界繫善心學無學心即此復從十無間起謂自界四色界二心於出定時從彼善起彼染污定所逼惱時從彼


prompt:十八界中色界繫者有幾

AI:種離染隨眠及彼相應頌曰 論曰欲界律儀謂別解脫此從一切根本業道及從加行後起而得從二得者謂從二類即情非情性罪遮罪從現得者謂從現世近遠別諸遮罪及能蔽伏發諸過失諸


局部有像样的,也有胡说。——我想到古代疑伪经的产生,就是这样子的,拿真经中的段落,拼拼凑凑,有些地方稍微改一点。由此推想GPT4,它 能不能读懂毗昙我不好说,但起码,造疑伪论,我觉得GPT4大概是够格的。 期待有一天能试试,要有更强的AI能试,就更好了。