详解大模型RLHF过程(配代码解读)

【LLM第三篇】名词解释:RLHF——chatgpt的功臣 RLHF (Reinforcement Learning from Human Feedback) ,直译为:“来自人类反馈的强化学习”。RLHF是一种结合了强化学习和人类反馈的机器学习方法,主要用于训练大模型以执行复杂的任务,尤其是当这些任务难以通过传统的奖励函数来精确定义时。 阅读详情

一直都特别好奇大模型的强化学习微调是怎么做的,网上虽然相关文章不少,但找到的文章都是浅尝辄止说到用PPO训练,再细致深入的就没有讲了。。。只能自己看一看代码,以前搞过一点用PPO做游戏,感觉和语言模型PPO的用法不太一样**。在游戏场景,每个step给环境一个action之后,agent拿到的state都是会变化的,通常也会设计奖励函数使得每个step都会有reward;但是在用强化学习微调语言模型这里,prompt是state,只输入一次,然后输出一串action(回答的单词),得到一个reward,模型并没有在每个action之后得到新的state**(感谢评论区大佬的点拨,对于answer的第二个词,可以把prompt+answer的一个词当作新的state,而不只是把prompt当作state,状态转移蕴含在transformer内部)

本篇文章并不会介绍太多PPO的原理,相关文章已经很多了,比如李宏毅介绍PPO的课程。大模型里边的PPO涉及到了critic model的概念,在李宏毅教程里只提了一下并没有细讲,如果想了解可以看一下这个文章(https://huggingface.co/blog/deep-rl-a2c),相当于利用一个critic model预测从t时刻到最后一个时刻的累加奖励值(强化学习里边的第t个时刻对标answer句子里边的第t个单词),而不是通过实际累加得到从t时刻到最后一个时刻的累加奖励值,这样可以降低奖励的方差。下文也结合代码介绍critic model输出的具体含义。同时RLHF是什么也会再详细介绍,相关文章(https://zhuanlan.zhihu.com/p/589533490)已经很多了。

本篇文章涉及的代码均来自微软的deepspeed对RLHF的实现(https://github.com/microsoft/DeepSpeedExamples/tree/master/applications/DeepSpeed-Chat/training),可配合huggingface官方的博客(https://huggingface.co/blog/rlhf)一起食用。本文只对算法的一些有特点的关键点进行阐述,并不对整体实现进行介绍。先上一张经典的论文图。本文重点结合代码讲解奖励模型训练和强化学习训练部分。

在这里插入图片描述

奖励(reward)模型训练

首先要声明的是,在强化学习阶段,用到的reward model和critic model都使用同一个模型初始化,因此在训练reward模型的过程中,也是在训练critic model。其次对符号进行说明,大模型中间隐藏层的参数维度为(B,L,D),B为batch size大小,L为句子长度,D为embedding维度。在接下来的代码讲解中,我也会标明代码中各个变量的维度,以更好的理解其意义。

在进行RLHF时,需要一个奖励模型来评估语言大模型(actor model)回答的是好是坏,这个奖励模型通常比被评估的语言大模型小一些(deepspeed的示例中,语言大模型66B,奖励模型只有350M)。奖励模型的输入是prompt+answer的形式,让模型学会对prompt+answer进行打分。奖励模型最后一层隐藏层的输出维度为(B,L,D),通过一个D✖️1的全连接层将维度变为(B, L),在L这个维度上,第i个位置的数据表示:从第i个位置到最后一个位置输出所能获得的奖励分值的累加和(和DQN里边的Q值一个意义),这种形式的输出满足了critic model的输出要求。对应代码如下:

#huggingface模型返回值是个list,第0位是模型最后输出的hideen state
hidden_states = transformer_outputs[0]
# v_head为Dx1的全连接网络对最后一维压缩

对于一个奖励模型来说,目标是给一个句子进行打分,按理说每个句子对应一个分值就行了,但是目前对于长度为L的句子,奖励模型输出了L个值。我们用L维度上的最后一个位置的值当作为本句话的奖励得分。奖励模型训练优化采用pair wiss loss,即同时输入模型关于同一个问题的两个回答,让模型学会这两个句子哪个分高哪个分低。之所以如此训练是因为,在给奖励模型进行数据标注的过程中,给同一个问题的不同回答量化的打具体分值比较难,但是对他们进行排序相对简单,代码如下:

# 同一个batch里边的句子需要等长,短句后边会被padding
# [divergence_ind:end_ind]索引了padding前一个位置的输出分值
# chosen_reward是同一个句子pair里分数高的句子,r_truncated_reward是句子pair里分数低的句子
c_truncated_reward = chosen_reward[divergence_ind:end_ind]
r_truncated_reward = rejected_reward[divergence_ind:end_ind]

pair wise loss代码如下,如果给pair里边好的句子打分高(c_truncated_reward),坏的句子(r_truncated_reward)打分低,loss就会小:

loss += -torch.log(torch.sigmoid(c_truncated_reward - r_truncated_reward)).mean()

在训练强化学习的过程中,会用到reward model(critic model,再次提醒,critic model和reward model是同一个模型的两个副本)的推理过程,通过调用forward_value实现,具体代码如下,返回的值中有两种值,values表示每个位置i,从第i个位置到最后一个位置的奖励累加值,供强化学习过程中critic model使用;“chosen_end_scores”指的是对每个prompt+answer的打分,供reward model使用。

def forward_value(...):
    ...
    if return_value_only:
        #(B,L)
        return values
    else:
        ...
        return {
            "values": values,
            # (B,)
            "chosen_end_scores": torch.stack(chosen_end_scores),
        }

强化学习微调

强化学习微调阶段,会用到4个模型,actor model, ref_model,reward model和critic model(好费显存啊!!!)。其中actor model和ref_model是RLHF第一个阶段有监督微调模型的两个副本,reward model和critic model是本文第一部分训练出来的模型的两个副本。整体流程见这篇文档(https://huggingface.co/blog/rlhf),整体流程图如下所示(没画出critic model):

在这里插入图片描述

首先说明actor model的训练模式和推理模式的区别( 后边会用到)。训练模式是用teacher force的方式(不明白的同学知乎搜一下),将整句话输入到模型中,并通过mask机制在保证不泄漏未来的单词情况下预测下一个单词。推理模式是真正的自回归,预测出下一个单词之后,当作下一步输入再预测下下个单词,原理如下图所示:

在这里插入图片描述

首先用actor model在推理模式下根据prompt生成一个answer(prompt对应强化学习里边的state,answer对应一些列的action),代码如下:

# 保证不触发反向传播
with torch.no_grad():
    seq = self.actor_model.module.generate(prompts,
    max_length=max_min_length,
    min_length=max_min_length)

然后利用reward model和ciric model对输出的prompt+answer进行打分(PPO训练时使用的奖励值并不单单是reward model的输出还要考虑kl散度,后文介绍):

# 奖励模型返回的是个字典,key为chosen_end_scores位置存储数据维度为(B,),表示对于prompt+answer的打分
reward_score = self.reward_model.forward_value(
                seq, attention_mask,
                prompt_length=self.prompt_length)['chosen_end_scores'].detach(
                )
#critic model返回的数据维度为(B,L),L维度上第i个位置代表从i位置到最后的累积奖励
#舍去最后一个位置是因为句子“终止符”无意义 
values = self.critic_model.forward_value(
                seq, attention_mask, return_value_only=True).detach()[:, :-1]

actor model是我们想通过强化学习微调的大模型,但是强化学习过程很容易把模型训练“坏”,因此需要另外一个不会参数更新的 ref_model来当作标的,别让actor mode跑偏太远。我们在训练模式下,将prompt+answer分别输入到actor mode和ref model,用KL散度来衡量 ref model和actor mode输出的差别。同时将KL散度(衡量数据分布差距大小)纳入损失函数(KL散度本质是纳入到奖励值里边的,奖励值被纳入到了损失函数),进而来约束 ref_model和actor mode的输出分布别差距太大。具体代码如下:

# 得到两个模型的输出
output = self.actor_model(seq, attention_mask=attention_mask)
output_ref = self.ref_model(seq, attention_mask=attention_mask)
logits = output.logits
logits_ref = output_ref.logits
...
return {
...
# 分别得到两个模型在真实单词上的预测概率
'logprobs': gather_log_probs(logits[:, :-1, :], seq[:, 1:]),
'ref_logprobs': gather_log_probs(logits_ref[:, :-1, :], seq[:,1:]),
...
}
...
# 计算kl散度,log_probs里边存的数字经过log变化了,因此减法就对应除法
kl_divergence_estimate = -self.kl_ctl * (log_probs - ref_log_probs)

PPO训练时候的奖励值综合考虑KL散度和reward模型的输出,只考虑answer部分的KL散度,将reward model的输出加到KL散度L维度的最后一个位置上,得到最终的奖励值,代码如下:

rewards = kl_divergence_estimate
# 只考虑answer部分的奖励,不考虑prompt
start = prompts.shape[1] - 1
# 不考虑padding部分
ends = start + action_mask[:, start:].sum(1)
reward_clip = torch.clamp(reward_score, -self.clip_reward_value,
                         self.clip_reward_value)
batch_size = log_probs.shape[0]
# 在L维度上,每个位置都有KL散度,但是只在最后一个位置加上奖励值
for j in range(batch_size):
    rewards[j, start:ends[j]][-1] += reward_clip[j]

接下来的内容就是PPO的训练过程的比较核心的内容了,目标是计算PPO更新公示里边的advantage,具体公式如下,V就是critic model的输出。如果原理不懂建议先到这个链接(https://huggingface.co/blog/deep-rl-a2c)看看。我直接在代码中给注释了。

在这里插入图片描述
图片出处:https://huggingface.co/blog/deep-rl-a2c

def get_advantages_and_returns(self, values, rewards, start):
    # values(B,L) critic model输出
    # rewards(B,)reward model输出
    # start answer开始的位置
    # Adopted from https://github.com/CarperAI/trlx/blob/main/trlx/models/modeling_ppo.py#L134
    lastgaelam = 0
    advantages_reversed = []
    length = rewards.size()[-1]
    # 计算每个时刻(序列位置)的critic model预测误差
    for t in reversed(range(start, length)):
        nextvalues = values[:, t + 1] if t < length - 1 else 0.0
        # critic model预测的是t到到最后一个时刻的奖励和,所以变化量delta可以用如下公式表示
        delta = (rewards[:, t] + self.gamma * nextvalues) - values[:, t]
        # self.gamma=1,self.lam=0.95是衰减因子,表示之前计算的delta对现在影响越来越小
        lastgaelam = delta + self.gamma * self.lam * lastgaelam
        advantages_reversed.append(lastgaelam)
    advantages = torch.stack(advantages_reversed[::-1], dim=1)
    # 后续用来更新critic model用
    returns = advantages + values[:, start:]
    return advantages.detach(), returns

以上过程,我们已经拿到了PPO训练所需要的advantage以及actor model的输出,我先现在可以对actor model进行训练啦。具体代码如下。logprobs和old_logprobs这两个参数分别是“老actor(n个epoch才会更新一次)”和新actor(每个batch都会更新它)”在正确单词上出处的概率,这块时PPO import sampling相关的知识,就不在这重复介绍了,不明白的同学补习一下哈。借用一下李宏毅老师的PPO公式:

img

def actor_loss_fn(self, logprobs, old_logprobs, advantages, mask):
    ## policy gradient loss
    #logprobs, old_logprobs都是经过log变化的单词概率,这里带着log做减法就相当于在做概率除法
    log_ratio = (logprobs - old_logprobs) * mask
    # 指数操作去掉log
    ratio = torch.exp(log_ratio)
    pg_loss1 = -advantages * ratio
    pg_loss2 = -advantages * torch.clamp(ratio, 1.0 - self.cliprange,
                                            1.0 + self.cliprange)
    pg_loss = torch.sum(torch.max(pg_loss1, pg_loss2) * mask) / mask.sum()
    return pg_loss

同样的,我们也要对critic model进行训练,更新,loss就是mse loss。

def critic_loss_fn(self, values, old_values, returns, mask):
    ## value loss
    # 用“老critic model”的输出约束“新critic model”不要步子太大,裁剪一下
    values_clipped = torch.clamp(
        values,
        old_values - self.cliprange_value,
        old_values + self.cliprange_value,
    )
    vf_loss1 = (values - returns)**2
    vf_loss2 = (values_clipped - returns)**2
    vf_loss = 0.5 * torch.sum(
        torch.max(vf_loss1, vf_loss2) * mask) / mask.sum()
    return vf_loss

至此,我们的RLHF训练流程就结束了。第二部分开头我们说过,共涉及actor model, ref_model,reward model和critic model这四个模型,其实更新参数的模型只有actor model和critic model。

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

下面这些都是我当初辛苦整理和花钱购买的资料,现在我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

RLHF(从人类反馈中进行强化学习)详解(一) RLHF,即Reinforcement Learning from Human Feedback(从人类反馈中进行强化学习),是一种结合了机器学习中的强化学习算法与人类主观判断的训练技术。这种方法旨在利用人类的直觉和判断力来指导人工智能系统学习更复杂、更贴近人类期望的行为模式,尤其是在自然语言处理(NLP)和决策制定等领域。 阅读详情

相关推荐

大语言模型-RLHF(二)——LoRA实现&代码逐行讲解

为方便学习,对ChatGlm的代码做了逐行解读,这里主要是lora方法使用,里面核心的部分如数据的解析,loss的定义,lable制作,lora调用的框架流程等。将输入转化为我们想要的input和lable格式,注意这里输入的特征是已经转化为id的特征,根据我们自己的数据和需要定义,重写 compute_loss 方法,计算模型的损失。(1)将promot和input,target转化为我们想要的input格式。整体代码如下,文件获取可以参考git。1,数据处理,两个功能。3,loss计算定义。

qjzcy的博客 7257

什么是RLHF

*字面翻译:**RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型。强化学习从人类反馈(RLHF)是一种先进的AI系统训练方法,它将强化学习与人类反馈相结合。它是一种通过将人类训练师的智慧和经验纳入模型训练过程中,创建更健壮的学习过程的方法。该技术涉及使用人类反馈创建奖励信号,然后通过强化学习来改善模型的行为。

盖瑞理的智汇说 1万+

大模型入门(六)—— RLHF微调大模型

奖励模型是输入一个文本序列,模型给出符合人类偏好的奖励数值,这个奖励数值对于后面的强化学习训练非常重要。构建奖励模型的训练数据一般是同一个数据用不同的语言模型生成结果,然后人工打分。如果是训练自己领域的RLHF模型,也可以尝试用chatgpt打分,效果也不错。

DAMOXINGHAITAI的博客 2588

大模型 | 通俗理解RLHF基础知识以及完整流程

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

老皮的博客 5814

【大模型】SFT和RLHF

方法优点缺点SFT1. 启动简单,仅需要问答对数据就可以进行训练;2. 训练简单,直接对LLM进行调参,大部分情况下,训练几个epoch就可达到预期;3. 显存资源相比于RLHF来说耗费低。1. 模型的效果非常依赖于SFT数据的质量,天花板取决于SFT数据标注的质量;2. 对标注要求高,对一条指令来说,要标注很高质的回答其实是一件非常困难的事情,既耗时又耗力。RLHF1. 直接利用人类偏好来进行指导大模型的训练,使大模型的输出更能满足人们的要求;

Dong_ZH的博客 2884

DeepSpeed-Chat RLHF 阶段代码解读(2) —— PPO 阶段

Critic model、Reward model: 开始的时候这两个模型是一样的,但是用途是不一样的,一个是用来产生 critic value,一个是用来产生 reward 的,虽然结构是一样的。整个流程下来,我的感觉,很繁琐,难训练,所以目前主流大模型很少使用原始的这套 RLHF 流程,更多使用 dpo 算法,而且 RLHF 的数据有限,很难对所有的 response 有一个公平的 rewar,所以下一个系列文章会介绍利用 dpo 的 RLAIF 算法,如 SPIN、self-reward etc。

以后要认真写文章 2178

大模型RLHF:PPO原理与源码解读

智能体(Agent)与环境(Environment)强化学习中两个实体的交互:状态空间S:S即为State,指环境中所有可能状态的集合动作空间A:A即为Action,指智能体所有可能动作的集合奖励R**:** R即为Reward,指智能体在环境的某一状态下所获得的奖励。以上图为例,智能体与环境的交互过程如下:在t时刻,环境的状态为StS_{t}St​,达到这一状态所获得的奖励为RtR_{t}Rt​智能体观测到StS_{t}St​与RtR_{t}Rt​,采取相应动作。

AI前沿技术的分享! 2110

图解大模型RLHF系列之:人人都能看懂的PPO原理与源码解读

智能体(Agent)与环境(Environment)状态空间S:S即为State,指环境中所有可能状态的集合动作空间A:A即为Action,指智能体所有可能动作的集合奖励R:R即为Reward,指智能体在环境的某一状态下所获得的奖励。以上图为例,智能体与环境的交互过程如下:在时刻,环境的状态为,达到这一状态所获得的奖励为智能体观测到与,采取相应动作智能体采取后,环境状态变为,得到相应的奖励找到一个策略,这个策略根据当前观测到的环境状态和奖励反馈,来选择最佳的动作。

具身机器人和通用AI 4567

RLHF代码解读

将人类打好标签的数据输入到一个预训练的模型,进行language modeling。其目的是使经过SFT后的模型能生成合适的输出空行操作模型架构模型训练的目的是能对chosen的回答打高分,即最大化value_chosen,最小化value_rejected。空行操作该阶段一共有四个主要的模型,分别是:actor_model(需要训练)critic_model(需要训练)其中:actor_model和reference_model使用的是SFT阶段训练出来的模型。

weixin_53737574的博客 2219

全本地AI代理实战:零数据外泄的本地化Agent工作流搭建

全本地AI代理是一种将大语言模型推理、长期记忆与工具调用完全运行于用户本地设备的智能体架构,其核心原理在于通过进程隔离与标准化协议实现模型层、记忆层和工具层的解耦协同。相比依赖云端API的传统方案,它在数据主权、响应确定性与环境复现性上具备不可替代的技术价值。典型应用场景包括法务合规文档处理、离线工业现场辅助决策、以及高敏感度企业知识管理。本文聚焦Qwen2+Ollama+SurrealDB+Agno技术栈,详解如何构建可落地的全本地AI代理系统,覆盖从硬件适配、向量记忆建模到多模态插件协同的完整链路。

weixin_34194964的博客 650

SFR算法实现详解:从边缘检测到MTF计算的完整流程

本文详细解析了SFR算法从边缘检测到MTF计算的完整流程,包括边缘检测、ESF超采样、LSF差分等关键步骤。通过代码示例和实战经验,帮助开发者高效实现成像系统解析力评估,优化MTF测量精度。适用于摄像头模组调试、工业检测等场景。

Black的专栏 1009

大模型RLHF 实践详解:从概念到RLHF过程,以及实践中的坑,建议收藏!

从ColossalAI到TRLX以及DeepSpeed-Chat,最后基于DeepSpeed-Chat成功训练上了自己的模型,最后效果也是肉眼可见的提升。对这一部分进行下总结,包括原理,代码以及踩坑与解决方案。

2401_85375186的博客 1913

智能座舱测试工程师必看:从零搭建自动化测试框架的5个实战技巧

本文为智能座舱测试工程师提供从零搭建自动化测试框架的5个实战技巧,涵盖环境搭建、ADB高级应用、Python脚本工程化、Monkey测试优化及性能调优。通过ADB深度操作和Python脚本封装,帮助测试人员构建高可复用的智能座舱测试解决方案,显著提升测试效率与问题发现率。

python9snake的博客 634

NLP 经典面试题:RLHF 训练过程是怎么样的?DPO 如何解决RLHF存在问题?

本人是某双一流大学硕士生,也最近刚好准备参加 2024年秋招,在找大模型算法岗实习中,遇到了很多有意思的面试,所以将这些面试题记录下来,并分享给那些和我一样在为一份满意的offer努力着的小伙伴们!!!

z551646的博客 1480

从零到一:在Ubuntu 20.04上搭建ROS1与PX4无人机开发环境

本文详细指导如何在Ubuntu 20.04系统上搭建完整的ROS1与PX4无人机开发环境。内容涵盖ROS Noetic安装、PX4固件源码编译、MAVROS通信桥接以及QGroundControl地面站的配置,并通过Gazebo仿真完成全链路联调测试,为无人机算法开发与验证提供稳定可靠的基础平台。

weixin_29292431的博客 167

【已解决,极简单!!】求助,R语言读取csv文件各种报错

【已解决】本来之前没问题,今天更新了Rstudioh以及R,就各种报错了。也看了目前能读取到的文件,从第一个中文字符直接就没有了。也就是说 还是读取中文字符的问题?新人初学,求大佬轻喷!

youyouluming945的博客 3878

大模型微调SFT VS RLHF

随着deepseek等开源大模型模型的爆火,中小型互联网公司又燃起了微调大模型的热潮。在开源模型的基础上,加入自己个性化的数据进行微调,能够在各自的大模型场景下,获得更佳的大模型效果。以下主要对比下大模型微调中的SFT和RLHF。SFT(Supervised Fine-Tuning,监督微调),它是在预训练模型基础上,通过人工标注的高质量指令-响应(Instruction-Response)对进行有监督学习,让模型更好地理解任务指令并产生符合预期的输出。Prompt : 解释什么是黑洞?

sinat_28694519的博客 1101

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

大模型之RLHF

loss含义是 对上文St而言,如果token At产生的预估收益越高,那就增大它出现的概率,否则降低它的概率。这一步设计的目的是 要让 Rt 可计算,其中一种设计是 除了最后的T时刻, 其余时刻的即时奖励,我们就用“Actor是否遵循了Ref的约束”来进行评价。3、在t时刻,At对应的即时收益为Rt,总收益是Vt(Vt=即时收益+未来收益),也可以理解成“对人类喜好的衡量”,此时模型的状态有St变为St+1。v4版本:对Adv_t进行改造,使其不仅考虑了当前时刻的优势,还考虑了未来的优势。

谁怕平生太急 2017

YOLOv8 改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南YOLOv8在目标检测领域的地位与优势模型改进的意义与价值本专栏的特色与创新点读者学习路径建议关键改进点回顾不同场景的模型选型建议开源社区资源汇总持续学习路径指南。

weixin_39818775的博客 1073

【实践】LLM RLHF——PPO 实践、代码细致解读

LLM PPO 训练代码部分的讲解,基本上网上几乎没有类似的讲解一般都是直接调包,而不是细致的流程讲解,所以本文的目的就在于此,希望有所帮助

m0_65708726的博客 1712

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 附下载 | 《2024年中国智能算力行业白皮书》重磅发布!
下一篇: 大模型技术专栏—5分钟搭建SpringAI大模型
冻感糕人~
博客等级 码龄3年 8926粉丝 2384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值