预训练模型在预训练时操作是如何做的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Richard14
V2EX    Python

预训练模型在预训练时操作是如何做的?

  •  
  •   Richard14 2023-11-18 14:32:17 +08:00 2088 次点击
    这是一个创建于 692 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有脱敏数据需要单独训练,无法使用网上开源的预训练参数。

    查了半天,感觉网上讲设计的很多,讲 finetune 的也不少,唯独没有讲预训练的。毕竟 bert 是 18 年出的,现在过了这么多年了我感觉其实算力方面的限制是还好,只要自己有资料,也没有说非得大中科研机构才能搞预训练吧。

    比如我一直疑惑一个典型问题,如果我像 bert 原始论文那样用两个任务预训练一个模型,那所谓的预训练就是先训练 A 任务至收敛然后再训练 B 任务至收敛?还是交叉每个任务训练一个 batch 这样?

    如果预训练是这样,那训练任务的顺序感觉会对最终得点有影响,最起码会对收敛速度有影响吧,不过英文搜了半天也没搜到啥相关文章,可能还是想的不对?

    还有一个问题是参数,看到有 paper 是把 NLP 模型的参数直接拿过来给生物领域的模型做初始化。这个有啥相关研究么,没啥关系的东西怎么能万事万物皆准?

    14 条回复    2023-12-01 17:54:53 +08:00
    FlashEcho
        1
    FlashEcho  
       2023-11-18 14:37:22 +08:00   1
    前面不懂,关于最后一个问题,大模型+大数据集确实能大力出奇迹,clip 当年的卖点就是 zero-shot 效果堪比监督学习,所以只要你的数据够多,只要稍微擦到一点边,看上去没什么关系的两个任务也能用预训练提升性能
    Huelse
        2
    Huelse  
       2023-11-18 15:27:19 +08:00
    预训练就是魔法值,全凭经验
    NoOneNoBody
        3
    NoOneNoBody  
       2023-11-18 16:01:20 +08:00   1
    网上有些从零开始训练自己模型的文章,当然写得比较简单(包括例子和步骤),但基本就是这样
    就是数据、打 tag 、调参训练

    现在一些公开的预训练模型是非常复杂的,关键是调参,一来参数比上述的例子多得多,二步骤也是反反复复,不是一次训练就完成的,每一次调参都要重新训练并对比结果,然后逐步收敛参数的范围,直到连续多次的训练测试结果接近才能视为完成,如果遇到结果不理想(无法突破预想效率值),甚至要推倒重来

    为什么这些模型都是一些机构发布,而不是个人,就是因为个人搜集数据能力有限,算力有限,做这些复杂训练少点硬件投资都没什么用,例如 openai 早期的模型租用了多少算力?所花的钱哪怕给我一成,我都可以完全躺平过完剩下的日子了
    如果你想看一些预训练模型是怎么得出来的,要去技术杂志搜,前提是他们有公开,例如之前超导那事,别人可以用公开的数据进行实验或验证
    Richard14
        4
    Richard14  
    OP
       2023-11-18 18:22:48 +08:00
    @NoOneNoBody 不过超参这些,比如你上 huggingface 就都有实现参考吧,扒一套不就完事了,剩下的稍微改改大差不差。主要问题是我看了几个项目的开源码,网络结构还挺清晰,但是预训练逻辑只能说完全看不懂。如果只有一个预训练任务那直接练就是了,不过现在哪有一个任务预训练的,光汇总文献里就多少种方法了。
    NoOneNoBody
        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%,我可能就要硬着头皮换其他了,那样的话又是新一轮工作量了
    FlyingBackscratc
        6
    FlyingBackscratc  
       2023-11-18 22:42:52 +08:00   1
    @NoOneNoBody 回答了一长串但是不知道想表达啥,好像和原题无关?
    NoOneNoBody
        7
    NoOneNoBody  
       2023-11-18 23:54:03 +08:00
    @FlyingBackscratc #6
    说了半天原来是我理解错了,你说的“预训练”就是训练,我以为是说预训练模型,后者是说现在已经公布的一些模型,如 128 点人脸检测模型、5 点人脸检测模型、车辆辨别模型……诸如此类

    回答你最后一句吧,数学算法一样的话,训练参数是类似的
    我有做三个模型,都是用 KNN ,一个人脸、一个文字,一个销售,它们后面的步骤,从训练到测试代码是基本相同的,包括参数
    不同的是输入的样本数据,一个用人脸检测模块从图像提取人脸特征,一个用分词提取特征、一个用统计数据量化,都转为二维 numpy (这步是归一),扔进相同的训练代码和检测代码,就能分出结果,KNN 只是个数学算法,它并不理会数据的实际“意义”(人脸、NLP 、医学还是销售……),它只管哪个数据对应哪个标签,维度相同就行,其他数学算法也类似,只要是合理的数目就行

    只用数字算结果为数学模型,把其中的数字附上实际意义则为业务模型,业务模型千变万化,但基础数学模型并没有很多,感觉上很多只是衍生和组合,例如所有的距离算法思想是一样的,就是求两个点的空间距离,不同的只是求这个距离的公式,有欧氏距离、余弦距离……等等
    NoOneNoBody
        8
    NoOneNoBody  
       2023-11-18 23:54:53 +08:00
    @FlyingBackscratc #6
    呃,看错了,你不是 OP ?
    R4rvZ6agNVWr56V0
        9
    R4rvZ6agNVWr56V0  
       2023-11-19 13:26:11 +08:00
    你是想了解 自监督学习 过程的工程步骤?
    FlyingBackscratc
        10
    FlyingBackscratc  
       2023-11-20 00:09:08 +08:00
    @NoOneNoBody 草(一种植物),显然不是
    FlyingBackscratc
        11
    FlyingBackscratc  
       2023-11-24 22:22:03 +08:00   1
    我这两天大概查了一下,其他的一些开源实现似乎是同时在训练两个网络,然后把 mlm 和 nsp 任务的 loss 直接加和?这样来算最终 loss ,感觉确实是挺怪异的,仅供 OP 参考。虽然楼上老哥不知道在说啥,v2 逐渐变得不知所云也不是这两年的事了,可能没人回答也是因为确实现状是 gtp 吹得炸天响,实际上连 bertbase 都没上过的企业大有人在
    chy2v
        12
    chy2v  
       2023-11-28 16:50:42 +08:00
    bert 中的两个 loss 就是一起训练的。参数的话需要看你的数据来设。
    Richard14
        13
    Richard14  
    OP
       2023-11-30 09:32:26 +08:00
    @chy2v
    @FlyingBackscratc 看了看谷歌的开源实现好像确实是这么做的,不过这么搞的话,两个 loss 的权重也不一样,不会让任务受到 loss 较大的那个影响么。。。。
    chy2v
        14
    chy2v  
       2023-12-01 17:54:53 +08:00
    @Richard14
    这两个任务用的同一个 loss function, loss 一般来说大小差不多。差的比较大的话需要自己设定一下权重。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     272 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:00 PVG 23:00 LAX 08:00 JFK 11:00
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86