织梦做音乐网站wordpress 论坛功能

张小明 2026/1/9 15:19:37
织梦做音乐网站,wordpress 论坛功能,滦南网站建设推广,国外炫网站摘要#xff1a; 纸上得来终觉浅#xff0c;绝知此事要躬行。看懂了论文公式#xff0c;不代表能写对代码。在 Offline RL 中#xff0c;数据处理的细节、网络初始化的技巧以及Loss 的计算顺序#xff0c;往往比算法原理本身更能决定成败。本文将带你从零构建一个完整的 I…摘要纸上得来终觉浅绝知此事要躬行。看懂了论文公式不代表能写对代码。在 Offline RL 中数据处理的细节、网络初始化的技巧以及Loss 的计算顺序往往比算法原理本身更能决定成败。本文将带你从零构建一个完整的 IQL 训练流程涵盖 D4RL 数据加载、归一化处理、核心 Loss 实现以及工业级的训练 Trick。目录准备工作数据加载与归一化网络架构V, Q 与 Policy核心逻辑IQL 的三个 Loss完整的 Update Step 代码稳定训练的工程技巧 (Tricks)常见 Bug 与排查方法1. 准备工作数据加载与归一化这是 Offline RL 中最重要的一步90% 的失败案例都是因为没有对 State 进行归一化。1.1 加载 D4RL首先你需要安装d4rl。D4RL 的数据集通常包含observations,actions,rewards,terminals等字段。1.2 标准化 (Normalization)由于 State 的不同维度可能有巨大的数值差异例如位置坐标是 100而速度是 0.01直接训练会导致梯度爆炸或收敛极慢。我们必须把 State 归一化到均值为 0方差为 1。importtorchimportnumpyasnpimportd4rlimportgymdefget_dataset(env):datasetd4rl.qlearning_dataset(env)# 转换为 Tensorstatestorch.from_numpy(dataset[observations]).float()actionstorch.from_numpy(dataset[actions]).float()rewardstorch.from_numpy(dataset[rewards]).float()next_statestorch.from_numpy(dataset[next_observations]).float()donestorch.from_numpy(dataset[terminals]).float()returnstates,actions,rewards,next_states,donesdefnormalize_states(states,next_states):# 计算统计量meanstates.mean(dim0,keepdimTrue)stdstates.std(dim0,keepdimTrue)1e-3# 防止除零# 归一化states(states-mean)/std next_states(next_states-mean)/stdreturnstates,next_states,mean,std2. 网络架构V, Q 与 PolicyIQL 需要三个网络Q Network (Twin)评估( s , a ) (s, a)(s,a)的价值。为了稳定通常用两个 Q 网络 (Q 1 , Q 2 Q_1, Q_2Q1​,Q2​)。V Network评估状态s ss的价值作为 Expectile。Policy Network输出动作分布通常是 Gaussian。importtorch.nnasnnimporttorch.nn.functionalasFclassMLP(nn.Module):def__init__(self,input_dim,output_dim,hidden_dim256):super().__init__()self.netnn.Sequential(nn.Linear(input_dim,hidden_dim),nn.ReLU(),nn.Linear(hidden_dim,hidden_dim),nn.ReLU(),nn.Linear(hidden_dim,output_dim))defforward(self,x):returnself.net(x)# 策略网络通常输出均值和方差classGaussianPolicy(nn.Module):def__init__(self,state_dim,action_dim):super().__init__()self.netnn.Sequential(nn.Linear(state_dim,256),nn.ReLU(),nn.Linear(256,256),nn.ReLU())self.munn.Linear(256,action_dim)self.log_stdnn.Parameter(torch.zeros(action_dim))# 可学习的 log_stddefforward(self,state):xself.net(state)muself.mu(x)# 限制 log_std 范围防止方差过大或过小关键 Tricklog_stdtorch.clamp(self.log_std,-20,2)stdtorch.exp(log_std)returntorch.distributions.Normal(mu,std)defget_action(self,state,deterministicFalse):distself.forward(state)ifdeterministic:returntorch.tanh(dist.mean)# 测试时用均值returntorch.tanh(dist.sample())# 训练时采样3. 核心逻辑IQL 的三个 LossIQL 的核心是非对称的 Expectile Loss。defexpectile_loss(diff,expectile0.7):# diff Q - V# 当 Q V 时 (diff 0)权重为 expectile (比如 0.7)# 当 Q V 时 (diff 0)权重为 1-expectile (比如 0.3)# 这会使 V 倾向于靠近 Q 分布的上边缘weighttorch.where(diff0,expectile,(1-expectile))returntorch.mean(weight*(diff**2))4. 完整的 Update Step 代码将所有组件拼装起来。注意 Target Network 的使用和梯度的阻断。classIQL_Agent:def__init__(self,state_dim,action_dim,device):self.q1MLP(state_dimaction_dim,1).to(device)self.q2MLP(state_dimaction_dim,1).to(device)self.target_q1copy.deepcopy(self.q1)# Target Q用于稳定训练self.target_q2copy.deepcopy(self.q2)self.vMLP(state_dim,1).to(device)self.actorGaussianPolicy(state_dim,action_dim).to(device)# 优化器self.q_optimizertorch.optim.Adam(list(self.q1.parameters())list(self.q2.parameters()),lr3e-4)self.v_optimizertorch.optim.Adam(self.v.parameters(),lr3e-4)self.actor_optimizertorch.optim.Adam(self.actor.parameters(),lr3e-4)self.expectile0.7# IQL 核心超参self.temperature3.0# AWR 核心超参self.gamma0.99self.tau0.005# 软更新系数defupdate(self,batch):states,actions,rewards,next_states,donesbatch# ---------------------------------------# 1. Update V (Expectile Regression)# ---------------------------------------withtorch.no_grad():# 使用 Target Q 来计算 V 的目标更稳定q1_tself.target_q1(torch.cat([states,actions],dim1))q2_tself.target_q2(torch.cat([states,actions],dim1))min_qtorch.min(q1_t,q2_t)v_predself.v(states)v_lossexpectile_loss(min_q-v_pred,self.expectile)self.v_optimizer.zero_grad()v_loss.backward()self.v_optimizer.step()# ---------------------------------------# 2. Update Q (MSE Loss)# ---------------------------------------withtorch.no_grad():next_vself.v(next_states)# 关键IQL 的 Q target 使用 V(s)不使用 max Q(s, a)q_targetrewardsself.gamma*(1-dones)*next_v q1_predself.q1(torch.cat([states,actions],dim1))q2_predself.q2(torch.cat([states,actions],dim1))q_lossF.mse_loss(q1_pred,q_target)F.mse_loss(q2_pred,q_target)self.q_optimizer.zero_grad()q_loss.backward()self.q_optimizer.step()# ---------------------------------------# 3. Update Policy (Advantage Weighted Regression)# ---------------------------------------withtorch.no_grad():# 计算优势函数 A(s, a) Q(s, a) - V(s)q1self.target_q1(torch.cat([states,actions],dim1))q2self.target_q2(torch.cat([states,actions],dim1))min_qtorch.min(q1,q2)vself.v(states)advantagemin_q-v# 计算权重 exp(A / T)exp_advtorch.exp(advantage/self.temperature)# 限制权重上限防止数值不稳定exp_advtorch.clamp(exp_adv,max100.0)# 计算 Policy 的 log_prob(a|s)distself.actor(states)log_probdist.log_prob(actions).sum(dim-1,keepdimTrue)# Loss - weights * log_prob (加权最大似然)actor_loss-(exp_adv*log_prob).mean()self.actor_optimizer.zero_grad()actor_loss.backward()self.actor_optimizer.step()# ---------------------------------------# 4. Soft Update Target Networks# ---------------------------------------self.soft_update(self.q1,self.target_q1)self.soft_update(self.q2,self.target_q2)defsoft_update(self,local_model,target_model):fortarget_param,local_paraminzip(target_model.parameters(),local_model.parameters()):target_param.data.copy_(self.tau*local_param.data(1.0-self.tau)*target_param.data)5. 稳定训练的工程技巧 (Tricks)如果只写上面的代码你可能只能在简单任务上跑通。想在 AntMaze 上拿分还需要以下 TrickCosine Learning Rate DecayOffline RL 容易过拟合。在训练最后阶段将学习率衰减到 0能显著提升测试性能。schedulertorch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_maxmax_steps)LayerNorm在 MLP 的 ReLU 之前加入nn.LayerNorm()对于防止 Q 值发散非常有用。Orthogonal Initialization使用正交初始化网络参数比默认的 Xavier 初始化收敛更快。Target Update 频率IQL 中 V 的更新很快Q 的 Target Network 更新可以适当慢一点或者不使用 Target Network 直接用当前的 Q 也可以IQL 论文中有些变体是这样做的但保留 Target Q 通常更稳。6. 常见 Bug 与排查方法 ️6.1 Q Loss 不下降 / 震荡原因State 没有归一化。排查打印 State 的 mean 和 std如果 mean 不是 0 附近必挂。6.2 Policy Loss 变成 NaN原因exp(advantage / temperature)溢出。排查检查 Advantage 的数值范围。如果 A 很大比如 100exp(30) 就会很大。一定要加torch.clamp。6.3 训练出来的 Agent 一动不动原因Temperature 太小或者 Expectile 太大。排查如果temperature太小如 0.1Policy 只会模仿那些极少数 Advantage 极大的样本导致过拟合。如果expectile太大如 0.99V 值会估计得非常高导致 Advantage 几乎全是负的Policy 学不到东西。推荐默认值Expectile0.7, Temperature3.0。6.4 测试分数极低但 Q 值很高原因Overestimation尽管 IQL 已经很克制了但依然可能发生。排查IQL 的 Q 值不应该特别大。如果发现 Q 值远超 Max Episode Return说明 Target 计算有问题或者 Reward Scale 太大建议把 Reward 归一化到 [0, 1] 或做简单的 Scaling。结语从零实现 Offline RL 是一个痛苦但收益巨大的过程。你会发现它不再是黑盒而是由一个个精巧的积木Expectile, AWR, Normalization搭建的城堡。现在的你已经具备了手写 SOTA 算法的能力去 D4RL 榜单上试试身手吧
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

品牌网站制作流程网站开发语言分析

还在为无法下载喜爱的网络视频而烦恼吗?VideoDownloadHelper这款专业的Chrome视频下载扩展将彻底改变你的观影体验。作为一款功能强大的网页视频下载工具,它能自动识别并提取各类视频网站的资源,让你随心保存精彩内容。🎬 【免费下…

张小明 2026/1/8 17:45:06 网站建设

科技感网站模板品牌创意网站建设

还在为网盘下载速度慢而烦恼吗?今天为您介绍一款能够彻底解决网盘限速问题的实用工具——网盘直链下载助手。这款基于用户脚本的开源项目,让您无需安装任何客户端,即可享受全速下载体验。 【免费下载链接】Online-disk-direct-link-download-…

张小明 2026/1/8 21:00:06 网站建设

网站的信息管理建设的必要性品牌建设内涵

Hap编解码器终极指南:跨平台安装配置与性能优化完整教程 【免费下载链接】hap-qt-codec A QuickTime codec for Hap video 项目地址: https://gitcode.com/gh_mirrors/ha/hap-qt-codec Hap编解码器作为现代图形硬件快速解压的视频编码方案,为多媒…

张小明 2026/1/8 21:00:04 网站建设

网站建设的风险分析门户网站建设基础术语

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化热力图整体特征分布**查看2011-2012间的单车租借情况**天气对于租借数量的影响湿度与温度对于租借数量的影响注册用户与未注册用户 4 总结: 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升…

张小明 2026/1/8 21:00:02 网站建设

免备案网站空间购买网站建设教程培训

【摘要生成于 ,由 Deeourcecknow_pc_ai_abstract)】 1. 改进YOLO11添加BIFPN和SDI注意力机制进行竹子节点检测 1.1. 研究背景与动机 在现代农业和林业自动化管理中,竹子作为一种重要的经济作物,其生长监测和管理具有重要意义。竹子节点的准…

张小明 2026/1/8 21:00:01 网站建设