有脱敏数据需要单独训练,无法使用网上开源的预训练参数。
查了半天,感觉网上讲设计的很多,讲 finetune 的也不少,唯独没有讲预训练的。毕竟 bert 是 18 年出的,现在过了这么多年了我感觉其实算力方面的限制是还好,只要自己有资料,也没有说非得大中科研机构才能搞预训练吧。
比如我一直疑惑一个典型问题,如果我像 bert 原始论文那样用两个任务预训练一个模型,那所谓的预训练就是先训练 A 任务至收敛然后再训练 B 任务至收敛?还是交叉每个任务训练一个 batch 这样?
如果预训练是这样,那训练任务的顺序感觉会对最终得点有影响,最起码会对收敛速度有影响吧,不过英文搜了半天也没搜到啥相关文章,可能还是想的不对?
还有一个问题是参数,看到有 paper 是把 NLP 模型的参数直接拿过来给生物领域的模型做初始化。这个有啥相关研究么,没啥关系的东西怎么能万事万物皆准?
1
chesha1 2023-11-18 14:37:22 +08:00 1
前面不懂,关于最后一个问题,大模型+大数据集确实能大力出奇迹,clip 当年的卖点就是 zero-shot 效果堪比监督学习,所以只要你的数据够多,只要稍微擦到一点边,看上去没什么关系的两个任务也能用预训练提升性能
|
2
Huelse 2023-11-18 15:27:19 +08:00
预训练就是魔法值,全凭经验
|
3
NoOneNoBody 2023-11-18 16:01:20 +08:00 1
网上有些从零开始训练自己模型的文章,当然写得比较简单(包括例子和步骤),但基本就是这样
就是数据、打 tag 、调参训练 现在一些公开的预训练模型是非常复杂的,关键是调参,一来参数比上述的例子多得多,二来步骤也是反反复复,不是一次训练就完成的,每一次调参都要重新训练并对比结果,然后逐步收敛参数的范围,直到连续多次的训练测试结果接近才能视为完成,如果遇到结果不理想(无法突破预想效率值),甚至要推倒重来 为什么这些模型都是一些机构发布,而不是个人,就是因为个人搜集数据能力有限,算力有限,做这些复杂训练少点硬件投资都没什么用,例如 openai 早期的模型租用了多少算力?所花的钱哪怕给我一成,我都可以完全躺平过完剩下的日子了 如果你想看一些预训练模型是怎么得出来的,要去技术杂志搜,前提是他们有公开,例如之前超导那事,别人可以用公开的数据进行实验或验证 |
4
Richard14 OP @NoOneNoBody 不过超参这些,比如你上 huggingface 就都有实现参考吧,扒一套不就完事了,剩下的稍微改改大差不差。主要问题是我看了几个项目的开源码,网络结构还挺清晰,但是预训练逻辑只能说完全看不懂。如果只有一个预训练任务那直接练就是了,不过现在哪有一个任务预训练的,光汇总文献里就多少种方法了。
|
5
NoOneNoBody 2023-11-18 21:35:03 +08:00
@Richard14 #4
我举个自己的例子吧,虽然跟人家没法比,但过程是可以说一说的 我用 KNN 做一个小小小小模型,数据少于 1w ,tag 只有两个:True/False ,可以说极其简单了 这个模型基本各种参数都选定了,不用调,唯一要调整的近邻 n 的个数,可选为 4~15 ,共 12 个 然后将数据随机方式分 20 组,每组有训练样本和测试样本 将每组和 12 个可选参数,用训练样本各训练一次,然后用测试样本测试,这样共 240 次测试 最终选定 n=8 ,因为 n=8 时所有测试结果都落在 96.5~98%之间,是最稳定的 其实 96~98%并非最好的,当 n=12 时,有三组得出了 99%以上的,但是 n=12 的其他 17 组,最低还出现 88%,分布很乱;所以 n=12 是不能用的,因为用到真正产出时,结果的准确性无法预计 我想说的是,光一个仅 12 可选项的参数的调参工作,工作量就达到 240 组,多个参数可想而知,这里 KNN 的训练只是纯粹打包,几分钟而已,而有些模型的一次训练就要几小时甚至几天(视乎算力) 当然,可以只用一组作为调参测试就选定参数(只跑 12 次),但实用时的结果嘛……可能要骂娘了 然后,上述还忽略了一个重要问题:采样数据是否合理,如果不合理,前面说的所有的工作都是白搭 因为我个人能力有限,只能获得这小一万的数据,更多我就要花钱雇人帮我收集了,还不是雇一个人就能搞定的 所以我手头的这一万数据,是否有代表性,分布是否合理,这里还有采样学的分析(上面只是默认为合理) 例如我要做一个买菜意愿的模型,然后我从程序员采集了一万数据,但程序员买菜的极少,这样的数据做出的模型用在评估家庭主妇,那就是错漏百出、惨不忍睹,大概就是这个意思 例如现在的公开人脸提取模型,用于欧洲人比亚洲人更精准,就是因为采集做模型的数据欧洲人占多这个原因 你如果看过我写的其他帖子(回复帖),我说过,AI 是一个长久的工作,需要几代人努力,包括机器学习和深度学习,目前还没有一个算法能通吃不同领域的,所以做模型时还有选数学算法(或者组合算法)的步骤 目前文献还是说基础算法的实现,至于用到实处,因为不同的数学算法在不同领域表现不同,就需要做业务模型的人自己来选择并测试了,文献换个角度看就是说某个算法能把模型做出来,但结果不能打包票 例如我上面这个例子,用 CNN 或者其他也能做,只是我嫌麻烦(部分是不熟悉),所以没有用其他算法测试,说到底就是懒,96%的结果我可以接受,如果只有 70%,我可能就要硬着头皮换其他了,那样的话又是新一轮工作量了 |
6
FlyingBackscratc 2023-11-18 22:42:52 +08:00 1
@NoOneNoBody 回答了一长串但是不知道想表达啥,好像和原题无关?
|
7
NoOneNoBody 2023-11-18 23:54:03 +08:00
@FlyingBackscratc #6
说了半天原来是我理解错了,你说的“预训练”就是训练,我以为是说预训练模型,后者是说现在已经公布的一些模型,如 128 点人脸检测模型、5 点人脸检测模型、车辆辨别模型……诸如此类 回答你最后一句吧,数学算法一样的话,训练参数是类似的 我有做三个模型,都是用 KNN ,一个人脸、一个文字,一个销售,它们后面的步骤,从训练到测试代码是基本相同的,包括参数 不同的是输入的样本数据,一个用人脸检测模块从图像提取人脸特征,一个用分词提取特征、一个用统计数据量化,都转为二维 numpy (这步是归一),扔进相同的训练代码和检测代码,就能分出结果,KNN 只是个数学算法,它并不理会数据的实际“意义”(人脸、NLP 、医学还是销售……),它只管哪个数据对应哪个标签,维度相同就行,其他数学算法也类似,只要是合理的数目就行 只用数字算结果为数学模型,把其中的数字附上实际意义则为业务模型,业务模型千变万化,但基础数学模型并没有很多,感觉上很多只是衍生和组合,例如所有的距离算法思想是一样的,就是求两个点的空间距离,不同的只是求这个距离的公式,有欧氏距离、余弦距离……等等 |
8
NoOneNoBody 2023-11-18 23:54:53 +08:00
@FlyingBackscratc #6
呃,看错了,你不是 OP ? |
9
GeekGao 2023-11-19 13:26:11 +08:00
你是想了解 自监督学习 过程的工程步骤?
|
10
FlyingBackscratc 2023-11-20 00:09:08 +08:00
@NoOneNoBody 草(一种植物),显然不是
|
11
FlyingBackscratc 2023-11-24 22:22:03 +08:00 1
我这两天大概查了一下,其他的一些开源实现似乎是同时在训练两个网络,然后把 mlm 和 nsp 任务的 loss 直接加和?这样来算最终 loss ,感觉确实是挺怪异的,仅供 OP 参考。虽然楼上老哥不知道在说啥,v2 逐渐变得不知所云也不是这两年的事了,可能没人回答也是因为确实现状是 gtp 吹得炸天响,实际上连 bertbase 都没上过的企业大有人在
|
12
chy2v 2023-11-28 16:50:42 +08:00
bert 中的两个 loss 就是一起训练的。参数的话需要看你的数据来设。
|
13
Richard14 OP |