精易论坛

标题: 【ChatGPT研究】自回归语言模型-RNN神经网络模型v2 [打印本页]

作者: 叮小当    时间: 2023-4-12 16:55
标题: 【ChatGPT研究】自回归语言模型-RNN神经网络模型v2
本帖最后由 叮小当 于 2023-4-12 17:27 编辑



接上一篇【ChatGPT研究】自回归语言模型的易语言实现方法_精易论坛 (125.la)

这次更新的模型是传统RNN自回归语言模型,使用了向量矩阵算法,以及正向扩散和反向传播神经网络,随机梯度下降算法。


由于本次引入了向量矩阵复杂算法,在没有cuda加持下,cpu训练耗时较久


我本身也是刚研究这方面的新手,代码都是手工翻译自c#,对里面的复杂算法和向量传递,一知半解。


至于出来的效果,我也不好评价,可能也跟我只训练了两步有关,或者训练素材太少,又或者本身算法有问题,具体的还得高手们自行分析了。

最终的目的是抛砖引玉,希望有大佬可以搞一个 易语言chatgpt模型出来供大家学习,以及理解神经网络模型!
当然我知道,易语言想做大模型,不支持64位和cuda肯定是办不到的,但不妨碍只会易语言的同学对神经网络模型的学习和理解。

这一版的代码比较复杂,但仍然有丰富的注释可供学习!
代码中调用了两个模块,一个是 分词模块,有能力的可以删了模块自己写。
同时调用了我自己的模块,主要用了哈希表和取随机数,也可以自行删掉,用自己的。


有一些问题:
1.训练词典越大,训练时间越久
2.学习率越低,学习效果越好
3.训练次数也跟最终效果有很大影响,但不是越多越好,容易过拟合
4.由于易语言双精度小数位数只有6位,会极大影响模型最终效果

有能力的朋友可以自行修改,如果你做出了更好的,记得给我帖子留个言,好让我跟着学习观摩


源码下载【包含分词库】https://rtb4.lanzouw.com/iVkF10ssvr2h


不含分词库的源码附件下载:
自回归语言模型eCode_V2.rar (745.01 KB, 下载次数: 125)
可能有同学需要C#代码: Transformer3.rar (5 KB, 下载次数: 35)





补充内容 (2023-4-12 19:55):
9楼 对模型参数设置 进行了详细说明

补充内容 (2023-4-17 10:55):
27楼修正了一个BUG
作者: jhwydcf    时间: 2023-4-12 16:57
感谢分享
作者: 胖虎O    时间: 2023-4-12 17:00
感谢分享了
作者: 吴滨    时间: 2023-4-12 17:06
感谢分享
作者: wuqingg    时间: 2023-4-12 17:12
支持开源,感谢分享~~~~谢谢!
作者: jysoft2022    时间: 2023-4-12 18:13
感谢分享,很给力!
作者: 忧伤小猫咪    时间: 2023-4-12 18:28
感谢分享~~~~谢谢!
作者: 枕风宿雪多年    时间: 2023-4-12 18:55
牛逼呀兄弟
作者: 叮小当    时间: 2023-4-12 19:55
隐藏层大小的选择通常是根据模型的性能和训练效率进行权衡。通常来说,隐藏层大小越大,模型的学习能力就越强,但训练时间也会变得更长,并且会增加过拟合的风险。反之,如果隐藏层大小太小,模型可能无法捕捉到数据中的关键特征,导致欠拟合。

在实践中,可以尝试不同的隐藏层大小,并使用交叉验证等技术来评估不同参数设置的性能。一般而言,隐藏层大小的经验规则是,对于较小的数据集,使用较小的隐藏层大小,例如 16、32 或 64;对于较大的数据集,则可以尝试使用更大的隐藏层大小,例如 128、256 或更大。

词嵌入维度大小的选择通常是根据你的数据集大小和任务复杂度来决定的。

通常来说,当你的数据集比较小,例如只有几千个词汇,你可以选择较小的词嵌入维度(如50或100),以避免过拟合。但是如果你的数据集比较大,例如几十万或几百万个词汇,你可以尝试使用更大的词嵌入维度(如200或300)以获得更好的性能。

此外,任务的复杂度也是一个需要考虑的因素。如果你的任务非常简单,例如情感分析或文本分类,你可以选择较小的词嵌入维度。但是如果你的任务比较复杂,例如机器翻译或语音识别,你可能需要使用更大的词嵌入维度。

总的来说,选择词嵌入维度大小是一个需要根据具体情况而定的问题,需要考虑数据集大小和任务复杂度等因素。在实践中,通常需要进行一些试验和调整来找到最优的词嵌入维度大小。


学习率的设置是一个非常重要的超参数,会直接影响模型的收敛速度和性能。一般来说,如果学习率设置得太大,模型可能会发生梯度爆炸或梯度消失等问题,导致训练失败;如果学习率设置得太小,模型收敛速度会变得非常缓慢,需要更多的时间来训练。

在实际应用中,学习率的设置往往需要通过实验来确定。

通常来说,学习率的初值可以设置为一个较小的值,比如0.01或0.001,然后根据模型在训练集上的表现调整学习率。如果模型的损失函数在训练过程中一直下降,则说明学习率较合适;如果损失函数下降速度很慢,则可以适当提高学习率;如果损失函数在训练过程中震荡或不断上下波动,则说明学习率过大或过小,需要相应地调整。

总的来说,学习率的设置需要根据实际情况进行调整,建议尝试不同的学习率,找到一个最优值。

作者: 深圳梦    时间: 2023-4-12 19:58
感谢分享,很给力!~
作者: huang14    时间: 2023-4-12 20:16
什么时候才有大佬开发出gtp支持易语言的啊,我愿把我所有的代码送给他训
作者: xjshuaishuai    时间: 2023-4-12 20:25
谢谢分享!
作者: renjianhong48we    时间: 2023-4-12 21:09
感谢分享
作者: 亿万    时间: 2023-4-12 22:20
感谢分享 支持开源
作者: 396384183    时间: 2023-4-13 00:22

感谢分享,很给力!~
作者: 瘦瘦的小四    时间: 2023-4-13 00:28
大佬 这个怎么用啊

作者: 阿丘    时间: 2023-4-13 09:53

谢谢分享
作者: yuan71058    时间: 2023-4-13 12:14

大佬 这个怎么用啊
作者: sanclyj    时间: 2023-4-13 21:45
向量矩阵复杂算法
作者: aadada    时间: 2023-4-13 23:03
可以多多益善,但是这个还是PY的东西多,C 或是 C++ 其他的语言的模型结构代码很少
作者: kantal    时间: 2023-4-14 07:59
支持开源~!感谢分享
作者: 无极    时间: 2023-4-14 14:35
多谢楼主分享哟
作者: 忧郁之子    时间: 2023-4-15 11:12
牛,可以自己做自己的chatGPTl了
作者: airaz    时间: 2023-4-15 16:10
大哥建个qq群吧
作者: alanwoo    时间: 2023-4-15 23:55
学习一下
作者: 光影魔术    时间: 2023-4-16 23:05
感谢分享源码
作者: 琪诺兔    时间: 2023-4-17 01:35
本帖最后由 琪诺兔 于 2023-4-17 01:46 编辑

大佬,我尝试用三十万字对话文本作为训练素材,跑跑就会出现数组成员错误,后来减少到十万还是不行。实验发现,大部分情况是数组越界,32位只能使用3.99内存,可能是爆内存?

作者: 叮小当    时间: 2023-4-17 10:54
本帖最后由 叮小当 于 2023-4-17 11:23 编辑
琪诺兔 发表于 2023-4-17 01:35
大佬,我尝试用三十万字对话文本作为训练素材,跑跑就会出现数组成员错误,后来减少到十万还是不行。实验发 ...

我也发现了这个错误,并已经修正了代码,详见下方图片

这个模型只是一个简单的演示,想要达到理解问答的程度,还需要对文本进行标注,保证每行数据都是一个完整的问答,才可能达到想要的效果
以下是修正后的代码,并增加了可继续训练的功能,不会清空大脑
自回归语言模型.e (216.48 KB, 下载次数: 62)




作者: 琪诺兔    时间: 2023-4-17 13:31
本帖最后由 琪诺兔 于 2023-4-17 13:57 编辑
叮小当 发表于 2023-4-17 10:54
我也发现了这个错误,并已经修正了代码,详见下方图片

这个模型只是一个简单的演示,想要达到理解问答的 ...

根据昨天的试验,我使用标注过的数据进行训练,几千行的情况下感觉在10几轮左右不管如何调整都会严重过拟合,看来还得增加行数,另我其实并不清楚我的标注形式是否正确。请问有标注规范一类可以参考的东西嘛?对于换行符和符号一类应该如何标注。
作者: 叮小当    时间: 2023-4-17 13:57
本帖最后由 叮小当 于 2023-4-17 14:04 编辑
琪诺兔 发表于 2023-4-17 13:31
根据昨天的试验,我使用标注过的数据进行训练,几千行的情况下感觉在10几轮左右不管如何调整都会严重过拟 ...

这个RNN模型是循环模型,目前没有标注的标准,从代码中看,他是以行进行训练的。你也可以问问chatgpt,如何改善
通过关注loss值的下降来判断是否过拟合,正确的loss值应该是均匀下降的,loss值如果开始上升就代表开始过拟合,可以通过学习率来调整

作者: 壮志豪情    时间: 2023-4-17 13:59
这么牛逼的吗
作者: 维斯忒    时间: 2023-4-18 10:04
这个不能保存训练的模型,还有易语言可以调用很多程序,可以用其他的来编写成为一个dll或者其他的给易语言调用,比如py可以打包使用CMD给易语言来调用之类,这样子就可以更好在易语言应用,只把他作为一个界面设计
作者: 叮小当    时间: 2023-4-18 10:45
维斯忒 发表于 2023-4-18 10:04
这个不能保存训练的模型,还有易语言可以调用很多程序,可以用其他的来编写成为一个dll或者其他的给易语言 ...

可以加上保存功能,就是将那几个层中的矩阵数据保存到本地,以及词典
作者: 8554036    时间: 2023-4-18 12:05
啊呀~~这难到是E版的聊天AI要开始了吗~
作者: hefuqiangqiang    时间: 2023-4-19 00:26
感谢分享,学习学习新知识。
作者: 星辰ovo    时间: 2023-4-22 14:44
666666666666666666666666666
作者: fxhhxf1996    时间: 2023-4-23 14:20
有人试过 训练写易语言吗
作者: fxhhxf1996    时间: 2023-4-23 14:35
黑月的模块求分享,网上找不到模块
作者: 叮小当    时间: 2023-4-24 01:29
fxhhxf1996 发表于 2023-4-23 14:35
黑月的模块求分享,网上找不到模块

压缩包里有
作者: sn123zyc    时间: 2023-5-15 14:21
        感谢发布原创作品,精易因你更精彩!
作者: Likrain    时间: 2023-5-22 23:59
膜拜大佬,学习了
作者: 王小鑫xxx    时间: 2023-6-6 21:13
thank you very much!
作者: 51ok    时间: 2023-6-16 14:41
这个训练文档,文件格式是什么样的,是随便写?
作者: xudaweia    时间: 2024-2-22 21:22
看看...........
作者: abiao    时间: 2024-3-14 15:43
就你这份想法就值得点赞
作者: wanerhejj    时间: 2024-6-1 17:49
下载来学习
作者: DMS千    时间: 2024-6-15 22:29
666666666666666
作者: zxf834580866    时间: 2024-6-28 14:53
有没有gpu训练的版本

作者: 回馈你们的歌    时间: 7 天前
赞赞赞赞赞赞赞赞zzzzzzzzzz




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4