大语言模型(LLMs)中的强化学习(Reinforcement Learning, RL)
第一部分:强化学习基础回顾
在深入探讨LLMs中的强化学习之前,我们先快速回顾一下强化学习的核心概念,确保基础扎实。
1. 强化学习是什么?
强化学习是一种机器学习范式,目标是让智能体(Agent)通过与环境(Environment)交互来学习最优策略,以最大化长期累积的奖励(Reward)。与监督学习(有明确的输入-输出对)不同,强化学习中没有直接的标签,智能体需要通过**试错(Trial-and-Error)**来发现哪些行为是好的。
强化学习的核心要素:
- 状态(State, S S S):描述环境或智能体所处的状况。
- 动作(Action, A A A):智能体可以采取的行为。
- 奖励(Reward, R R R):环境对智能体动作的反馈,通常是一个标量。
- 策略(Policy, π \pi π):智能体根据状态选择动作的规则,形式可以是确定性的( π ( s ) = a \pi(s) = a π(s)=a)或随机的( π ( a ∣ s ) \pi(a|s) π(a∣s))。
- 价值函数(Value Function):衡量某个状态或状态-动作对的长期期望回报,例如状态价值函数 V ( s ) V(s) V(s) 或动作价值函数 Q ( s , a ) Q(s, a) Q(s,a)。
- 折扣因子(Discount Factor, γ \gamma γ):用于平衡短期和长期奖励, 0 ≤ γ ≤ 1 0 \leq \gamma \leq 1 0≤γ≤1。
强化学习的数学目标是找到一个最优策略 π ∗ \pi^* π∗,使得期望累积奖励最大化:
J ( π ) = E [ ∑ t = 0 ∞ γ t R t ∣ π ] J(\pi) = \mathbb{E} \left[ \sum_{t=0}^\infty \gamma^t R_t \mid \pi \right] J(π)=E[∑t=0∞γtRt∣π]
2. 强化学习的典型算法
强化学习算法可以分为以下几类:
- 基于价值(Value-Based):如Q-Learning、SARSA,目标是学习动作价值函数 Q ( s , a ) Q(s, a) Q(s,a),然后选择最大化 Q Q Q 的动作。
- 基于策略(Policy-Based):如REINFORCE,直接优化策略 π ( a ∣ s ) \pi(a|s) π(a∣s),通常通过策略梯度方法。
- 演员-评论家(Actor-Critic):结合价值和策略方法,演员(Actor)负责选择动作,评论家(Critic)评估动作的好坏。
- 基于模型(Model-Based):学习环境的动态模型(状态转移概率),然后规划最优策略。
在LLMs中,基于策略和演员-评论家方法更为常见,因为语言生成任务通常涉及高维、离散的动作空间(如生成单词或句子)。
第二部分:LLMs中的强化学习背景
1. 为什么LLMs需要强化学习?
大语言模型(如GPT系列、LLaMA、BERT等)通常通过**预训练(Pre-training)和微调(Fine-tuning)**来学习。预训练阶段使用大规模语料进行自监督学习(如预测下一个单词),而微调阶段通常基于监督学习来适应特定任务。然而,监督学习有以下局限:
- 数据限制:高质量的监督数据(如人工标注的对话)往往稀缺且昂贵。
- 目标不一致:LLMs的预训练目标(如最大化似然)与实际应用目标(如生成有用、符合人类偏好的回答)可能不完全对齐。
- 复杂奖励:许多任务的评估指标(如回答的流畅性、相关性、道德性)难以通过简单的损失函数建模。
强化学习可以弥补这些不足,因为:
- RL允许模型通过与环境(例如用户或评估函数)交互来优化复杂、非可微的目标。
- RL可以直接优化基于人类反馈的奖励信号,而无需大量标注数据。
- RL适合处理语言生成中的序列决策问题(生成一个单词会影响后续单词)。
2. LLMs中强化学习的典型应用
在LLMs中,强化学习主要用于以下场景:
- 基于人类反馈的强化学习(RLHF):通过人类偏好数据微调模型,使其生成更符合人类期望的回答(如ChatGPT、Grok)。
- 对话系统优化:提高对话的连贯性、上下文相关性和用户满意度。
- 文本生成质量提升:优化生成文本的流畅性、创造性或特定风格。
- 任务特定优化:例如,优化机器翻译的BLEU分数、总结的ROUGE分数等。
第三部分:LLMs中强化学习的详细机制
现在我们深入探讨LLMs中强化学习的核心技术,以**基于人类反馈的强化学习(RLHF)**为例,因为这是目前LLMs中最广泛使用的RL方法。
1. RLHF的整体流程
RLHF(Reinforcement Learning from Human Feedback)是将人类偏好融入LLMs微调的一种方法。其核心思想是:通过人类对模型输出的评分或比较,构建一个奖励模型(Reward Model),然后用强化学习优化LLMs以最大化该奖励。
RLHF的流程分为以下三个阶段:
阶段1:收集人类反馈数据
- 任务:让模型生成多个输出(如对话回答、文本摘要等),然后请人类评估者对这些输出进行评分或排序。
- 形式:
- 评分:人类给每个输出打分(如1到5分)。
- 成对比较:人类比较两个输出,指出哪个更好(更常见,因为排序比绝对评分更一致)。
- 输出:生成一个人类偏好数据集,例如:{(输入 x x x, 输出 y 1 y_1 y1, 输出 y 2 y_2 y2, 人类选择 y 1 > y 2 y_1 > y_2 y1>y2)}。
阶段2:训练奖励模型
- 目标:用人类反馈数据训练一个奖励模型 r ϕ ( x , y ) r_\phi(x, y) rϕ(x,y),它能为任意输入 x x x 和输出 y y y 预测一个奖励分数,反映人类偏好。
- 方法:
- 奖励模型通常是一个神经网络(可以是独立的模型,也可以基于LLM微调)。
- 对于成对比较数据,常用的损失函数是Bradley-Terry模型,假设人类选择 y 1 > y 2 y_1 > y_2 y1>y2 的概率为:
P ( y 1 > y 2 ∣ x ) = exp ( r ϕ ( x , y 1 ) ) exp ( r ϕ ( x , y 1 ) ) + exp ( r ϕ ( x , y 2 ) ) P(y_1 > y_2 | x) = \frac{\exp(r_\phi(x, y_1))}{\exp(r_\phi(x, y_1)) + \exp(r_\phi(x, y_2))} P(y1>y2∣x)=exp(rϕ(x,y1))+exp(rϕ(x,y2))exp(rϕ(x,y1)) - 优化目标是最小化负对数似然:
L ( ϕ ) = − E ( x , y 1 , y 2 , y 1 > y 2 ) [ log σ ( r ϕ ( x , y 1 ) − r ϕ ( x , y 2 ) ) ] \mathcal{L}(\phi) = -\mathbb{E}_{(x, y_1, y_2, y_1 > y_2)} \left[ \log \sigma (r_\phi(x, y_1) - r_\phi(x, y_2)) \right] L(ϕ)=−E(x,y1,y2,y1>y2)[logσ(rϕ(x,y1)−rϕ(x,y2))]
其中 σ \sigma σ 是sigmoid函数。
- 输出:一个训练好的奖励模型 r ϕ ( x , y ) r_\phi(x, y) rϕ(x,y),可以为任何生成输出提供奖励信号。
阶段3:用强化学习优化LLM
- 目标:利用奖励模型 r ϕ ( x , y ) r_\phi(x, y) rϕ(x,y),通过强化学习优化LLM的策略 π θ ( y ∣ x ) \pi_\theta(y|x) πθ(y∣x),使其生成更高质量的输出。
- 环境设定:
- 状态:当前输入 x x x 和已生成的文本片段。
- 动作:生成下一个单词或token。
- 奖励:由奖励模型 r ϕ ( x , y ) r_\phi(x, y) rϕ(x,y) 提供,通常在生成完整序列后计算。
- 算法:最常用的方法是近端策略优化(PPO, Proximal Policy Optimization),因为它在高维动作空间(如语言生成)中表现稳定。
- 优化目标:
- 最大化期望奖励:
J ( θ ) = E x ∼ D , y ∼ π θ [ r ϕ ( x , y ) ] J(\theta) = \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\theta} \left[ r_\phi(x, y) \right] J(θ)=Ex∼D,y∼πθ[rϕ(x,y)] - 为了防止模型偏离原始行为(例如生成不自然的文本),通常加入一个KL散度惩罚项,限制新策略 π θ \pi_\theta πθ 与初始策略 π ref \pi_{\text{ref}} πref(通常是监督微调后的模型)的差异:
J ( θ ) = E [ r ϕ ( x , y ) − β ⋅ KL ( π θ ( y ∣ x ) ∣ ∣ π ref ( y ∣ x ) ) ] J(\theta) = \mathbb{E} \left[ r_\phi(x, y) - \beta \cdot \text{KL}(\pi_\theta(y|x) || \pi_{\text{ref}}(y|x)) \right] J(θ)=E[rϕ(x,y)−β⋅KL(πθ(y∣x)∣∣πref(y∣x))]
其中 β \beta β 是惩罚系数。
- 最大化期望奖励:
- PPO的具体步骤:
- 采样:用当前策略 π θ \pi_\theta πθ 生成输出序列。
- 估计优势:用奖励模型计算奖励,并结合价值函数估计动作的优势(Advantage)。
- 更新策略:通过裁剪的损失函数(Clipped Objective)更新策略参数 θ \theta θ,避免更新幅度过大。
- 输出:一个优化后的LLM,生成结果更符合人类偏好。
2. PPO算法的细节
PPO是RLHF中最常用的强化学习算法,因为它简单、稳定且适合高维动作空间。以下是PPO的核心思想和技术细节:
- 策略梯度:PPO基于策略梯度方法,更新策略的参数 θ \theta θ 以最大化期望奖励。基本形式是:
∇ θ J ( θ ) = E [ ∇ θ log π θ ( a ∣ s ) ⋅ A ( s , a ) ] \nabla_\theta J(\theta) = \mathbb{E} \left[ \nabla_\theta \log \pi_\theta(a|s) \cdot A(s, a) \right] ∇θJ(θ)=E[∇θlogπθ(a∣s)⋅A(s,a)]
其中 A ( s , a ) A(s, a) A(s,a) 是优势函数,衡量动作 a a a 相对于平均水平的优劣。 - 裁剪目标:为了防止策略更新过于激进,PPO引入了裁剪的损失函数:
L CLIP ( θ ) = E [ min ( r t ( θ ) ⋅ A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) ⋅ A t ) ] L^{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min \left( r_t(\theta) \cdot A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \cdot A_t \right) \right] LCLIP(θ)=E[min(rt(θ)⋅At,clip(rt(θ),1−ϵ,1+ϵ)⋅At)]
其中:- r t ( θ ) = π θ ( a t ∣ s t ) π old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\text{old}}(a_t|s_t)} rt(θ)=πold(at∣st)πθ(at∣st) 是新旧策略的概率比。
- ϵ \epsilon ϵ 是裁剪范围(通常为0.1~0.2)。
- 价值函数:PPO同时训练一个价值函数 V ψ ( s ) V_\psi(s) Vψ(s),用于估计状态的期望回报,损失函数为:
L VF ( ψ ) = E [ ( V ψ ( s t ) − R t ) 2 ] L^{\text{VF}}(\psi) = \mathbb{E} \left[ (V_\psi(s_t) - R_t)^2 \right] LVF(ψ)=E[(Vψ(st)−Rt)2]
其中 R t R_t Rt 是实际的折扣回报。
3. RLHF的挑战与解决方案
尽管RLHF非常强大,但也面临一些挑战:
- 奖励模型的不准确性:
- 问题:奖励模型可能过拟合人类反馈数据,或者无法泛化到未见过的输出。
- 解决方案:增加反馈数据的多样性;使用正则化技术;定期更新奖励模型。
- 策略退化:
- 问题:过度优化奖励可能导致模型生成不自然的文本(如过于冗长或重复)。
- 解决方案:引入KL散度惩罚;结合监督微调(SFT)作为初始化。
- 计算成本:
- 问题:RLHF需要大量计算资源,尤其是在PPO的采样和优化阶段。
- 解决方案:使用高效的实现(如DeepSpeed);探索更轻量级的RL算法(如DPO)。
- 奖励黑客(Reward Hacking):
- 问题:模型可能学会“欺骗”奖励模型,生成看似高分但实际上无意义的输出。
- 解决方案:设计更鲁棒的奖励函数;引入多样性约束。
第四部分:其他相关方法与前沿进展
除了RLHF,LLMs中还有一些与强化学习相关的方法和前沿进展,值得关注:
1. 直接偏好优化(DPO)
- 简介:DPO(Direct Preference Optimization)是一种替代RLHF的轻量级方法,直接利用人类偏好数据优化LLM,而无需显式训练奖励模型或运行强化学习。
- 原理:
- 将人类偏好建模为一个隐式奖励函数。
- 通过一个封闭形式的损失函数直接优化策略:
L DPO ( θ ) = − E ( x , y w , y l ) [ log σ ( β log π θ ( y w ∣ x ) π ref ( y w ∣ x ) − β log π θ ( y l ∣ x ) π ref ( y l ∣ x ) ) ] \mathcal{L}_{\text{DPO}}(\theta) = -\mathbb{E}_{(x, y_w, y_l)} \left[ \log \sigma \left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right] LDPO(θ)=−E(x,yw,yl)[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))]
其中 y w y_w yw 是偏好的输出, y l y_l yl 是不偏好的输出。
- 优势:计算效率高;实现简单;效果接近RLHF。
- 局限:可能对复杂任务的优化能力不如RLHF。
2. 在线强化学习
- 简介:在线强化学习直接让LLM与真实用户交互,根据用户的实时反馈(如点赞、评论)更新模型。
- 挑战:需要高效的在线学习算法;用户反馈可能噪声较大。
- 应用:对话系统的动态优化;个性化推荐。
3. 多目标强化学习
- 简介:在LLMs中,优化目标往往是多维的(如流畅性、准确性、安全性)。多目标强化学习尝试平衡这些目标。
- 方法:
- 加权奖励:将多个奖励函数加权组合。
- Pareto优化:寻找满足多目标的折衷解。
- 应用:生成安全且有用的回答;优化多模态模型。
4. 自博弈与探索
- 简介:借鉴AlphaGo的思路,LLMs可以通过自博弈(Self-Play)或主动探索来提高性能。
- 方法:让模型与自身或其他模型交互,生成对抗样本或多样化输出,然后优化。
- 应用:提高模型的鲁棒性和创造性。
第五部分:学习建议与实践路径
1. 理论学习
- 书籍:
- 《Reinforcement Learning: An Introduction》(Sutton & Barto):强化学习经典教材,适合系统学习。
- 《Deep Reinforcement Learning Hands-On》(Maxim Lapan):结合代码讲解,适合实践导向。
- 论文:
- RLHF相关:
- “Learning to Summarize with Human Feedback”(Stiennon et al., 2020)
- “Fine-Tuning Language Models from Human Preferences”(Ziegler et al., 2019)
- “InstructGPT”(Ouyang et al., 2022)
- PPO:
- “Proximal Policy Optimization Algorithms”(Schulman et al., 2017)
- DPO:
- “Direct Preference Optimization: Your Language Model is Secretly a Reward Model”(Rafailov et al., 2023)
- RLHF相关:
- 课程:
- Coursera:DeepLearning.AI的“Reinforcement Learning Specialization”。
- Stanford CS234:Reinforcement Learning(YouTube上有公开课)。
- UC Berkeley CS285:Deep Reinforcement Learning。
2. 编程实践
- 工具与框架:
- PyTorch/TensorFlow:用于实现LLM和RL算法。
- Hugging Face Transformers:提供预训练LLM和微调工具。
- TRL(Transformer Reinforcement Learning):Hugging Face的一个库,专门用于RLHF和DPO。
- Gymnasium:强化学习环境库,适合练习基础RL算法。
- 项目建议:
- 基础项目:用PPO实现一个简单的对话优化任务(如优化生成文本的正面情感)。
- 进阶项目:实现一个小型RLHF流水线,包括:
- 用Hugging Face的模型生成输出。
- 模拟人类反馈(例如用规则生成偏好数据)。
- 训练奖励模型。
- 用TRL库实现PPO优化。
- 挑战项目:尝试复现DPO算法,比较其与RLHF的效果。
相关文章:
大语言模型(LLMs)中的强化学习(Reinforcement Learning, RL)
第一部分:强化学习基础回顾 在深入探讨LLMs中的强化学习之前,我们先快速回顾一下强化学习的核心概念,确保基础扎实。 1. 强化学习是什么? 强化学习是一种机器学习范式,目标是让智能体(Agent)…...
数字后端实现Innovus DRC Violation之如何利用脚本批量解决G4:M7i DRC Violation
大家在跑完物理验证calibre DRC之后,会发现DRC里面存在一种G4:M7i的DRC违例,这种违例一般都是出现在memory的边界。今天教大家如何利用脚本来批量处理这一类DRC问题的解决。 首先,我们需要把calibre的DRC结果读取到innovus里面来,…...
Java版企业电子招标采购系统源业码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…...
CTF web入门之文件上传
知识点 产生文件上传漏洞的原因 原因: 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查 权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件) 对于web server对于上传…...
ArmSoM Sige5 CM5:RK3576 上 Ultralytics YOLOv11 边缘计算新标杆
在计算机视觉技术加速落地的今天,ArmSoM 正式宣布其基于 Rockchip RK3576 的旗舰产品 Sige5 开发板 和 CM5 核心板 全面支持 Ultralytics YOLOv11 模型的 RKNN 部署。这一突破标志着边缘计算领域迎来新一代高性能、低功耗的 AI 解决方案&am…...
游戏引擎学习第224天
回顾游戏运行并指出一个明显的图像问题。 回顾一下之前那个算法 我们今天要做一点预加载的处理。上周刚完成了游戏序章部分的所有剪辑内容。在运行这一部分时,如果观察得足够仔细,就会注意到一个问题。虽然因为视频流压缩质量较低,很难清楚…...
PN1-S25系列ProfiNet网关模组产品方案
PN1-S25系列ProfiNet网关模组是一款专为工业通信环境设计的先进设备,旨在实现ProfiNet与Modbus RTU协议之间的无缝转换,从而优化工业自动化系统中的数据传输效率。以下是对该系列ProfiNet网关模组产品的详细介绍: 一、ProfiNet网关模组功能特…...
提示工程指南学习记录(三)
提示词示例 文本概括 Explain the above in one sentence(用一句话解释上面的信息): 提示词工程是一种用于自然语言处理的任务,目的是通过给定的文本或语音输入来生成相应的输出。它基于预训练的大型语言模型,例如通…...
04 GE - 钳制属性,等级
1.PostGameplayEffectExecute 1.作用:在这里对生命值进行最后的钳制防止越界。 2.参数中有什么: FGameplayEffectModCallbackData //传进来的值 {EffectSpec; //GESpecTargetASC //目标ASCFGameplayModifierEvaluatedData& EvaluatedData{Magni…...
【机器学习】机器学习笔记
1 机器学习定义 计算机程序从经验E中学习,解决某一任务T,进行某一性能P,通过P测定在T上的表现因经验E而提高。 eg:跳棋程序 E: 程序自身下的上万盘棋局 T: 下跳棋 P: 与新对手下跳棋时赢的概率…...
使用SSE实现实时消息推送并语音播报:从后端到前端的完整指南
前言 在现代Web应用中,实时消息推送已成为提升用户体验的关键功能。无论是即时聊天、通知提醒还是实时数据更新,都需要一种高效的服务器到客户端的通信机制。本文将详细介绍如何使用Server-Sent Events (SSE)技术实现后端向前端的实时消息推送ÿ…...
交通运输部4项网络与数据安全标准发布
近日,交通运输部审查通过并发布《交通运输数据安全风险评估指南》《交通运输行业网络安全实战演练工作规程》《交通运输电子证照数据交换与应用要求》《冷藏集装箱智能终端技术规范》等 4 项交通运输行业标准(2025 年第 3 批)。 其中&#…...
HarmonyOS-ArkUI V2装饰器: @Monitor装饰器:状态变量修改监听
Monitor作用 Monitor的作用就是来监听状态变量的值变化的。被Monitor修饰的函数,会在其对应监听的变量发生值的变化时,回调此函数,从而可以让您知道是什么值发生变化了,变化前是什么值,变化后是什么值。 V1版本的装饰器,有个叫@Watch的装饰器,其实也有监听变化的能力,…...
在Ubuntu系统中运行Windows程序
在Ubuntu系统中运行Windows程序可通过以下方法实现,根据使用场景和需求选择最适合的方案: 一、使用Wine兼容层(推荐轻量级场景) 原理:通过模拟Windows API环境直接运行.exe文件,无需安装完整系统。 步骤&a…...
七大数据库全面对比:ClickHouse、ES、MySQL等特性、优缺点及使用场景
七大数据库全面对比:ClickHouse、ES、MySQL等特性、优缺点及使用场景 引言 在数字化时代,数据库的选择对于业务的成功至关重要。本文将通过表格形式,对ClickHouse、Elasticsearch(ES)、MySQL、SQL Server、MongoDB、HBase、Cassandra这七大数据库进行特性、优缺点及使用…...
循环神经网络 - 门控循环单元网络之参数学习
GRU(门控循环单元)的参数学习与其他循环神经网络类似,主要依赖于梯度下降和反向传播通过时间(BPTT)算法。下面我们通过一个简单例子来说明 GRU 参数是如何在训练过程中“自适应”调整的。 一、GRU参数学习 假设我们的…...
Java并发编程面试题:内存模型(6题)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
SpringBoot Starter自定义:创建可复用的自动配置模块
文章目录 引言一、自定义Starter基础知识二、创建自动配置模块2.1 项目结构搭建2.2 配置属性类2.3 服务接口及实现2.4 自动配置类2.5 spring.factories文件2.6 Maven依赖配置 三、创建Starter模块3.1 项目结构3.2 Maven依赖配置 四、使用自定义Starter4.1 添加依赖4.2 配置属性…...
服务器风扇故障导致过热问题的解决方案
# 服务器风扇故障导致过热问题的解决方案 ## 一、故障诊断与确认 ### 1. 确认风扇故障现象 bash # 检查系统日志中的硬件错误 dmesg | grep -i fan journalctl -b | grep -i thermal # 查看传感器数据(需要安装lm-sensors) sudo sensors-detect sudo …...
[OS] vDSO + vvar(频繁调用的处理) | 存储:寄存器(高效)和栈(空间大)| ELF标准包装规范(加速程序加载)
vDSO vvar 一、社区公告板系统(类比 vDSO vvar) 想象你住在一个大型社区,管理员(内核)需要向居民(用户程序)提供实时信息(如天气预报、社区活动时间等)。直接让每个居…...
SQL刷题日志(day1)
1、substring_index(截取字符串) 参数说明: profile:要处理的字符串字段。,:分隔符。-1:表示从字符串的右侧开始截取,第一个出现的分隔符后面的所有内容。 SELECT SUBSTRING_INDEX(profile, ,…...
爬虫:一文掌握 curl-cffi 的详细使用(支持 TLS/JA3 指纹仿真的 cURL 库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、curl-cffi 概述1.1 curl-cffi介绍1.2 主要特性1.3 适用场景1.4 使用 curl-cffi 的注意事项1.5 与 requests 和 pycurl 对比1.6 curl-cffi 的安装二、基本使用2.1 同步请求2.2 异步请求三、高级功能3.1 模拟浏览器指…...
前端开发基础:HTML 与 CSS 入门详解
目录 一、HTML 基础 (一)HTML 概述 (二)HTML 标签 标签分类 常用标签详解 (三)HTML 注释 二、CSS 样式 (一)CSS 概述 (二)CSS 引入方式 ࿰…...
实时语音交互数字人VideoChat,可自定义形象与音色,支持音色克隆,首包延迟低至3s
简介 实时语音交互数字人,支持端到端语音方案(GLM-4-Voice - THG)和级联方案(ASR-LLM-TTS-THG)。用户可通过麦克风或文本输入,与数字人进行语音或视频交互。 目前支持的功能 支持自定义形象TTS模块添加音…...
25.OpenCV中的霍夫圆变换
OpenCV中的霍夫圆变换 在图像处理与计算机视觉中,圆形检测是一项常见的任务,应用场景包括车牌识别、瞳孔检测、交通标志识别等。霍夫圆变换(Hough Circle Transform)是一种高效且鲁棒的算法,通过在参数空间中寻找局部…...
OpenTiny使用指南
最近项目里用到了一个新的组件库——OpenTiny,但是官方文档的使用指南的描述很复杂,花了一些时间尝试才正常使用。下面是一个使用步骤的描述,可放心食用: 一、安装 TinyVue 组件库同时支持 Vue 2.0 和 Vue 3.0 框架,…...
Uniapp: 大纲
目录 一、基础巩固1.1、Uniapp:下拉选择框ba-tree-picker 二、项目配置2.1、Uniapp:修改端口号2.2、Uniapp:本地存储 一、基础巩固 1.1、Uniapp:下拉选择框ba-tree-picker 二、项目配置 2.1、Uniapp:修改端口号 2.2、Uniapp:本…...
A2A协议实现详解及示例
A2A协议概述 A2A (Agent2Agent) 是Google推出的一个开放协议,旨在使AI智能体能够安全地相互通信和协作。该协议打破了孤立智能体系统之间的壁垒,实现了复杂的跨应用自动化。[1] A2A协议的核心目标是让不同的AI代理能够相互通信、安全地交换信息以及在各…...
HTTP协议入门
文章目录 1. 概述2. 请求协议2.1 Get 方式请求协议2.2 POST 方式的请求2.3 获取请求数据 3. 响应协议3.1 响应数据格式3.2 设置响应数据 1. 概述 概念 :Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则…...
远程控制Android手机(web-scrcpy)
最近有web远程查看和控制Android手机的需求,研究了一下scrcpy,发现还是比较容易实现远程控制,所以自己就用flask写了一个web远程控制的scrcpy,算是推荐一下自己的作品,作品地址:https://github.com/baixin1…...
在AWS EC2上部署网站的完整步骤指南
本文详细介绍如何从零开始在AWS EC2实例上部署静态/动态网站,涵盖实例创建、安全组配置、环境搭建及域名绑定等关键步骤。 一、准备工作 AWS账号:访问 AWS官网 注册账号并完成信用卡绑定 本地工具: SSH客户端(Mac/Linux自带终端&…...
CentOS下,Xftp中文文件名乱码的处理方式
乱码原因 中文版Windows默认使用GBK编码,现代Linux发行版(如CentOS、Ubuntu等)默认使用UTF-8编码。Windows下正常的编码,可能在linux下无法识别,例如:Windows的GBK字节0xD6D0被Linux用UTF-8解码时…...
Linux vagrant 导入ubuntu到virtualbox
前言 vagrant 导入ubuntu虚拟机 前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式) 创建一键部署ubuntu虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/ubuntu22/Vagrantfile (可配置网络IP,内存…...
2025高频面试算法总结篇【动态规划】
文章目录 直接刷题链接直达编辑距离最长回文子串完全平方数最长递增子序列正则表达式匹配零钱兑换鸡蛋掉落单词拆分 直接刷题链接直达 动态规划(Dynamic Programming, DP)是一种通过拆解子问题并利用子问题的最优解来构建整体问题的最优解的方法&#x…...
FPGA_UART
1.UART 概述 (通用异步收发传输器) 1. 基本定义 UART(Universal Asynchronous Receiver/Transmitter)是一种常见的串行通信协议,用于在设备间通过异步串行通信传输数据。它不依赖独立的时钟信号,而是通过预…...
绿算轻舟系列FPGA加速卡:驱动数字化转型的核心动力
在数字化浪潮席卷全球的今天,算力已成为推动企业创新和行业升级的核心引擎。绿算轻舟系列FPGA加速卡凭借其高性能、低延迟、高能效比的独特优势,正成为各领域智能化转型的“隐形加速器”。它以灵活的硬件架构和强大的并行计算能力,为复杂场景…...
gitee基本使用
git实用手册 git全局设置 git config --global user.name "yourname" git config --global user.email "youremail"推代码时的账号(email) 版本回退 git loggit reset –hard <码>git push -f HTTPS步骤(上传) 拉取项目 1、新建一个…...
最短路径介绍
最短路径是图论中的算法,下面将列举几个常见的算法: 🚗 一、单源最短路径(一个起点到所有点) 1. Dijkstra 算法 适用图:非负权图(不能有负权边) 思路:贪心 最小堆&am…...
VRRP 基础全解析:从结构到配置
目录 VRRP基本概述 VRRP基本结构 状态机 编辑 负载分担 (多个VRRP) VRRP基本概述 VRRP能够在不改变组网的情况下,将多台路由器虚拟成一个虚拟路由器,通过配置虚拟路由器的IP地址为默认网关,实现网关的备份。协…...
【NIO番外篇】之组件 Buffer
目录 一、Buffer:数据界的“快递小哥”/“临时仓库管理员” 😉什么是 Buffer?它的作用是什么? 二、Buffer 的“三围”和“书签”📌:核心属性1. Capacity (容量):2. Position (位置):…...
Python基础知识(一、基础语法)
Python基础知识(一、基础语法) 字面量注释单行注释多行注释 变量数据类型数据类型查看数据类型转换 标识符命名规范不可使用关键字 运算符算数运算符赋值运算符 字符串字符串的定义方式字符串拼接占位拼接数字精度控制快速格式化 数据输入逻辑运算比较运…...
C语言题目自增在前与在后
一、题目引入 谨记真言: i的值最终都会改变 只是表达式的值不同 二、分析题目 if判断语句里面要条件为真执行时 printf语句 i 变量在前 使用i的当前值是1 i的值就是1与1相等 所以&&左边的为真 但是&&存在 必须前后都为真才为真 所以还要看&&后面…...
【口腔粘膜鳞状细胞癌】文献阅读
写在前面 看看文章,看看有没有思路 文献 The regulatory role of cancer stem cell marker gene CXCR4 in the growth and metastasis of gastric cancer IF:6.8 中科院分区:1区 医学WOS分区: Q1 目的:通过 scRNA-seq 结合大量 RNA-seq 揭示癌症干细胞…...
如何撤回刚提交的 commit
如何撤回刚提交的 commit 如果刚刚执行了 git commit 但想撤销这个提交,有几种方法可以实现,具体取决于你想达到的效果: 1. 撤销 commit 但保留更改(修改回到暂存区) git reset --soft HEAD~1这会撤销最后一次提交提…...
deepin使用autokey添加微信快捷键一键显隐ctrl+alt+w
打开deepin商店,搜索快捷键,找到autokey 快捷键管理,点击安装 点击右键新建文件夹 点击右键新建脚本 打开脚本并添加以下内容 import subprocess import time# ------------------ 配置项 ------------------ WM_CLASS "wechat…...
开源微调混合推理模型:cogito-v1-preview-qwen-32B
一、模型概述 1.1 模型特点 Cogito v1-preview-qwen-32B 是一款基于指令微调的生成式语言模型(LLM),具有以下特点: 支持直接回答(标准模式)和自我反思后再回答(推理模式)。使用 I…...
【uniapp-兼容性处理】swiper在iOS上偶发出现后几张图片白屏情况
【日期】2025-04-14 【问题】 swiper在iOS上偶发出现后几张图片白屏情况 swiper内部的几个swiper-item垂直排列,各自进行滚动,样式方面兼容性出现问题 【原因】: 原代码:(不应在swiper-item添加style属性…...
go中new和make有什么异同?
相同点:都是给变量分配内存 不同点: 作用类型不同。new通常给int、string、数组类型的变量分配内存,而make通常给slice、map、channel分配内存。返回值类型不同。new返回指向变量的指针,make返回的是变量本身new分配内存空间后&…...
RabbitMQ 深度解析:从基础到高级应用的全面指南
🐰 RabbitMQ 深度解析:从基础到高级应用的全面指南 前言📘 一、RabbitMQ 简介⚙️ 二、核心特性可靠性 🔒灵活路由 🔄高可用性 🌐多协议支持 🌍多语言客户端 💻插件机制 ὐ…...
动手强化学习之马尔可夫决策(机器人篇)
1 马尔可夫决策过程 马尔可夫决策过程(Markov Decision Process, MDP)是一种数学框架,用于建模智能体(agent)在随机环境中做决策的问题。它假设环境的状态转换具有马尔可夫性质,即未来的状态只依赖于当前状…...