课程秉承了“实战”风,老师简单理了一下NLP模型发展脉络,每个时期代表模型的优缺点,就一猛子扎进了BERT的关键技术——Transformer和Attention工作机制,于是编码解码、Query、Key、Values、Embedding、Softmax、矩阵运算带着满满的优越感向我碾压过来。算了,既然这是实战课,理论的问题就不要深究了吧,只要知道BERT是两步训练,知道如何使用ModelArts得到分类结果和评估,就达到今天学习的目的了。
作业过程
这次课后作业比第一课难度低了很多。这主要得益于ModelArts提供了线上训练环境,免除了在本地搭建环境的痛苦。另外教辅材料准备都十分到位——预训练模型、微调模型、训练数据集、微调和评估代码,还有详细的作业指南一应俱全。
BERT工作流程及本次课程作业
-
体验作业:要求对调优模型的分类结果进行评估,只需要上传数据集、模型、脚本,指定输出文件的位置,提交任务,就可以让ModelArts干活了。评估结果会记录在日志文件里,日志文件可以在线浏览,也可以下载到本地。运行时间也只需要短短1~2分钟。
-
进阶作业:复杂一点,第一步先调优,要把预训练的模型参数应用到TNEWS数据集做训练,再按照体验作业的过程对调优的结果进行评估。第一步调优运行14分钟,第二步评估仍然只需要1-2分钟。
-
老师提供的作业指南在附件里。作业过程当中文件上传遇到点状况。由于bert_base.ckpt文件超过1GB,我琢磨在上传这个文件的当口不如去设置参数。于是我把上传任务启动后就返回(是在同一个标签下返回)MobelArts配置算法来源、数据来源、运行参数等等,用不了5分钟就都配置好了。我再去obs检查数据集目录,没有这个文件,而且在控制台中也找不到查看文件传输进度的功能。后来在“任务管理”帮助文件里了解到,上传过程中不能关闭网页,否则记录会丢失。虽然文档没有说任务本身会丢失,但是后来再传输文件的时候,我会单独打开一个标签专门用于文件传输。
-
费用也是我担心的一个问题。课前看过华为云应用的报价,动辄几千几万,好有冲击力。不过我只是想了解一下MindSpore,又不是上线企业应用,花费太高可承受不 了。老师讲ModelArts在公测阶段可以免费使用,只是赶上业务量大的时候需要排队。模型、数据集和代码需要用obs存储,用量少的话也是免费的。听老师这样说我就放心了。完成作业的第二天,我成功收到了华为云费用账单:
想想占用了人家差不多2GB的存储容量,才花5毛7分钱人民币,学习成本并不高,完全能接受。
写在最后
老师讲的NLP算法演进历史虽然不是重点,但是我觉得深入了解一个领域的发展过程是很必要的。只有知道以前人们是怎么应对挑战的,以及如何改进的,才有可能理解最新的成果为什么是这个样,以及如何更好加以运用。我理解实战课时间有限,能讲到已经非常好了。加深了解是课后做的事情。
老师讲的NLP发展简史。尽量记录,但是还不能理解
第一次亲手“全程”操作一个训练任务,我对算法过程产生了一些联想。
首先是关于“学习”这件事。老师讲当前TNEWS分类最高的准确率57%。我觉得这样的成绩没有实用价值。问题会不会出在数据上呢?看统计学习方法有一个假设叫独立同分布。我不知道深度学习还需不需要这个假设。因为BERT学习包括预训练和调优两个阶段,而预训练使用的是一个超级大的通用语料库(华为使用的是中文维基。据说谷歌最早使用了英文维基),调优是把从预训练中得到的参数,应用到另外一个数据集(实验中用的是TNEWS数据集)上,再生成一组新的参数。我猜这两个数据集的差异很大。怎么测量这种差异我还没有概念,不过可以类比一下,让老中医去按西医的方法给病人开刀一定不会有好结果。我觉得在预训练的时候把领域知识带进去,实际应用的效果会有提高,比如用各类媒体发表过的标题作为预训练的数据集,再对今日头条的新闻标题做分类,准确率应该会有很大的提高。这个问题以后有机会要实际验证一下。
其次是关于“算法设计”这件事。BERT一出山就刷新了很多NLP任务的成绩很了不起,但是在创新性方面,感觉Transformer的贡献似乎更大。而相对于Word2Vec来说,从Seq2Seq到Transformer开创的东西似乎并不多,每一代新模型都是对前辈的修补。这是不是说模型开发基本是经验驱动的,尝试的作用很大(模型改进是不是就是传说中的“炼丹”)?就好比积木块都一样,只是用不同的方法把它们连接成不同的样子,然后看看力量是不是加强了,加强的就留下变成新擂主。至于为什么加强的,可能还是没搞清楚。感觉这又有点像老中医,说不清药物为什么起了效,如果非要说,他会扯一堆天地人,精气神,七经八脉之类的无法实证的东西。如果是这样的话,那么算力的作用就非常大了,因为只有算力够强,迭代的速度才够快,练丹师傅才能更快发现哪个模型力气大。
最后是关于“算法实现”这件事。感觉实现是很难的。一个算子后面涉及多少数据转换,多少矩阵运算,多少微分,加乘。假如是自己去实现一个算法,又要学习多少数学,又要知道多少驱动硬件的知识。实在太难。而且,最最要命的是,知识量往往是天花板。我亲身经过过一次。大约半年前自学CS231,做multiclass SVM Loss作业,我只想到用数值计算的方法实现求导,一个循环要6分多钟。能做出来感觉挺好,但是觉得这么慢不对劲。后来看Github上一位MahanFathi的作业,人家用解析法,代码量是我的1/20,只用几秒钟就能跑一个循环。我信心碎一地,至今不碰CS231,除非有高人带。所以我觉得有MindSpore真好,计算这种工作让它做好了,我就想想网络搭几层,怎么连接就行了吧。
机器学习一小白,胡思乱想净瞎猜。欢迎大佬指导。
前课笔记:
MindSpore21天实战营手记(一):基于MindSpore Lite开发端侧AI图像分类应用
有大神打比赛,求带。哪里写得不对,请大牛指教。欢迎加微信
转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=84847
感谢作者的努力与分享,侵权立删!