ChatGPT出现后,已经有许多开源项目尝试复现其效果,包括LLaMa、DeepSpeed-Chat、ColossalChat、ChatGLM等。其中DeepSpeed-Chat是微软Deep Speed团队的开源项目,其完整的提供了Supervised Fine-tuning、Reward Model Training、RLHF PPO Traing三阶段的代码,逻辑简单,模块划分清晰,另外也由于Deep Speed在大模型训练中的使用非常普遍,所以笔者近期正在研究DeepSpeed-Chat的代码。本文以DeepSpeed-Chat的实现为例,详细介绍下RLHF——基于人类反馈的强化学习策略,并与经典Off-Policy Actor-Critic策略做对比。
ChatGPT出现后,已经有许多开源项目尝试复现其效果,包括LLaMa、DeepSpeed-Chat、ColossalChat、ChatGLM等。其中DeepSpeed-Chat是微软Deep Speed团队的开源项目,其完整的提供了Supervised Fine-tuning、Reward Model Training、RLHF PPO Traing三阶段的代码,逻辑简单,模块划分清晰,另外也由于Deep Speed在大模型训练中的使用非常普遍,所以笔者近期正在研究DeepSpeed-Chat的代码。本文介绍下在13b模型上运行SFT、RW、RLHF全部三阶段的实战情况。
召回建模中,正样本中热门item的占比往往非常大,为了降低整体训练loss,最终得到的用户向量和热门item的向量往往分数更高,这样就导致线上召回时top K也被热门item占领,和业务目标偏离。本文讨论热门item打压的几种办法。
ChatGPT出现后,惊人的效果完全颠覆了业界人员包括笔者的认知,抛开其模型细节层面的因素,已公开的训练方法,需要巨量的数据和计算资源,门槛非常高。本文基于公开资料,希望以量化方式分多篇介绍ChatGPT的分析结论,本文为计算量分析篇。ChatGPT模型结构为Transformer,下面对计算细节拆解分析。
ChatGPT出现后,惊人的效果完全颠覆了业界人员包括笔者的认知,抛开其模型细节层面的因素,已公开的训练方法,需要巨量的数据和计算资源,门槛非常高。本文基于公开资料,希望以量化方式分多篇介绍ChatGPT的分析结论,本文为存储占用分析篇。ChatGPT模型结构为Transformer,Transformer模型运行时存储可以分成两部分,其一是模型参数,这部分规模是固定的,其二是中间激活,这部分和batch size、sequence length有线性关系,下面对两者分别分析。
ChatGPT出现后,惊人的效果完全颠覆了业界人员包括笔者的认知,抛开其模型细节层面的因素,已公开的训练方法,需要巨量的数据和计算资源,门槛非常高。本文基于公开资料,希望以量化方式分多篇介绍ChatGPT的分析结论,本文为模型参数分析篇。
在文章[TensorFlow Candidate Sampling](https://www.tensorflow.org/extras/candidate_sampling.pdf)中,很多地方直接使用了$u(x;\,\theta)=\log \frac{p(x^c)}{q(x^c)}$,缺乏理论支持,笔者认为不太正确,所以在本文记录下个人理解。
超大规模多分类问题Softmax分母的Partition Function难以计算。比如,在推荐系统领域,预测用户下一次点击某个item的概率,需要累加全部item上的exp值,而item数量可能为千万甚至亿级。Sampled Softmax通过概率模型和优化目标的改变,巧妙的解决了这个问题,本文详细介绍Sampled Softmax的核心思想。
超大规模多分类问题Softmax分母的Partition Function难以计算。比如,在推荐系统领域,预测用户下一次点击某个item的概率,需要累加全部item上的exp值,而item数量可能为千万甚至亿级。NCE通过概率模型和优化目标的改变,巧妙的解决了这个问题,本文详细介绍NCE的核心思想。
同步机制在TensorFlow等分布式机器学习框架中非常重要,比如TensorFlow有以下场景需要做同步:1) 当chief worker训练完一轮后,保存模型前需要等所有worker都完成再保存模型。 2) BSP方式的SGD训练,需要每个batch做同步。 如果不做同步可能会出现如下问题: 1) TensorFlow大部分使用方案都是异步SGD,而且使用global_step做停止条件,不能保证所有worker负责的数据训练相同的轮数,速度快的worker所负责的数据将会获得更多step。 2) chief worker结束时会保存模型参数,但还存在其他worker没结束,所以模型没有完全训练完整。