想象你是一位海底摄影师,正在拍摄一群敏捷的旗鱼。你的水下无人机需要平滑地调整推进器功率和舵角,才能稳稳跟上旗鱼的每一个急转弯。手动遥控?太慢了。预设路线?海底地形千变万化。这时,你需要的是一位能自主学习连续动作的AI驾驶员——这正是DDPG的用武之地。 DDPG(Deep Deterministic Policy Gradient,深度确定性策略梯度)是强化学习家族中专门解决连续控制问题的明星算法。你可以把它想象成一位经验丰富的冲浪教练:教练(Actor网络)决定每个瞬间该怎么做,而一位站在岸上的战术分析师(Critic网络)评估这个决定有多好。两人配合,在无数次“尝试-反馈-调整”中,学会在连续动作空间里做出精准决策。 本文将从零开始,用生活化的比喻带你理解DDPG的核心原理、网络结构、训练技巧和实际应用,让你真正掌握这个在机器人控制、自动驾驶领域大放异彩的算法。
学习DDPG能让你掌握解决连续动作控制问题的核心技能,这是机器人控制、自动驾驶等AI落地场景的刚需,也是强化学习工程师的进阶必修课。
可视化演示
展示DDPG强化学习架构:环境(Env)输出状态s→Actor网络(Act)输出连续动作a→Critic(Cri)评估Q值,含经验回放(Buf)和目标网络(Tgt)软更新。
本节配有交互动效(进入视口后自动加载,约 3KB)。
DDPG连续控制原理 环境(Env)输出状态s→Actor(Act)输出连续动作a(tanh),Critic(Cri)评估Q(s,a),经验回放(Buf)打破时序相关性 目标网络(Tgt)软更新τ稳定训练,应用于机器人(Robot)、自动驾驶(Drive)和仿真(Sim)连续控制场景 a = μ(s|θ^μ) + ε, Q(s,a) = r + γ·Q′(s′, μ′(s′|θ^μ′))
连续控制问题
想象你在玩一个赛车游戏,键盘只有上下左右四个按键,这叫离散动作空间——你只能从有限几个选项里选一个。但如果换成方向盘呢?你可以向左打5度、向右打3.7度、回正0.1度……角度是连续的,有无限多种可能。这就是连续控制问题的核心挑战:动作空间不再是“左/右”的选择题,而是一个滑杆,你需要精确调节力度和方向。
在真实世界里,机器人控制、自动驾驶、无人机飞行都是连续控制问题。电机需要输出具体的扭矩值,方向盘需要转到精确的角度,而不是简单地说“向左”或“向右”。如果用离散动作的方法,比如把方向盘角度强行分成“左转30度、左转15度、回正……”这么多档位,不仅效率低下,而且控制动作会变得生硬,就像你开车时只敢把方向盘打固定角度一样,根本无法走好一条平滑的曲线。
DDPG正是为这类问题而生的。它就像一个熟练的冲浪教练,不是教你“向左或向右”的简单指令,而是根据每个瞬间的浪况,精确地告诉你“身体重心向前倾3厘米,板头转向微调5度”。这种连续的、精确的控制能力,正是DDPG最核心的擅长领域。
Actor-Critic架构
DDPG的核心思想借鉴了演员-评论家(Actor-Critic)范式。想象一家舞蹈工作室:Actor(演员)是台上的舞者,负责根据音乐(状态)做出动作;Critic(评论家)是台下的评委,负责评判这个动作有多好。舞者根据评委的评分不断改进自己的舞步。
在DDPG中,Actor是一个深度神经网络,输入当前状态,输出一个确定性动作(比如电机的扭矩值)。它不做概率抽样,而是直接给出“此刻最优”的动作——这就像舞者不纠结于“要不要转圈”,而是直接“转半圈”。Critic是另一个深度神经网络,输入“状态+动作”,输出一个Q值(动作质量评分),表示这个动作在当前状态下有多好。
两个网络协同训练的方式很有意思。Critic像一位不断学习进步的评委,通过对比“实际回报”和“预估回报”来修正自己的打分标准。Actor则根据Critic的评分来调整自己的舞步——如果评委说“转半圈”得分高,Actor就倾向于多转半圈。这不像是标准的美式橄榄球,教练叫战术,球员执行;更像一对双人滑冰选手——一个引导,一个跟随,彼此成就——任何一方的进步都会带动另一方,最终共同提升表现。
这种双网络结构有个关键好处:当动作空间连续时,我们没法像Q-learning那样遍历所有动作找最大值,但Critic的梯度可以直接告诉Actor“往哪个方向调整动作会让Q值更高”,相当于评委直接告诉演员“你往左移动一点会更好”,Actor便朝着这个方向更新网络参数。这就是DDPG能处理连续动作的秘密武器。
经验回放机制
DDPG训练过程中有一个非常重要的组件叫经验回放(Experience Replay)。你可以把它想象成一位冲浪教练在训练后反复观看自己的录像带。每次冲浪(与环境交互)时,教练会把“当时的浪况、自己的动作、收到的奖励、之后的浪况”记录成一组数据,存入一个大硬盘。训练时,不是按顺序播放这些录像,而是随机抽取几段来复盘。
这个机制解决了强化学习中一个很棘手的问题:样本相关性。如果按时间顺序连续使用经验,相邻样本高度相似,网络会“过度适应”最近的经验,像学生考前突击只背最近学的知识,碰到稍旧的内容就懵了。而随机采样打破了这种时间相关性,让网络能在各种不同的经验上学习,更稳定、更高效。
另外,经验回放还有个实在的好处:样本复用,提升效率。在真实机器人上收集经验成本极高,一次实验动辄几万块钱还要消耗时间。随机抽取过去经验来反复训练,相当于把宝贵的经验让网络多学几遍,极大提高了数据利用率。在实际训练中,这个“硬盘”(经验池)一般存储几十万条经验数据,训练时每次取一小批(如64条、128条)进行网络更新。
探索与利用
强化学习永远面临一个经典矛盾:该探索新领域,还是利用已知的好策略? 就像开一家新餐厅,你是继续卖现有招牌菜吸引回头客(利用),还是尝试研发新菜品吸引更多食客(探索)?如果只探索,可能一直在创新却没有稳定客源;如果只利用,可能错失爆款新菜的机会。
DDPG的策略是确定性的——给定相同状态,Actor总会输出相同的动作,这天然偏向“利用”。为了平衡探索,DDPG在训练时给动作加噪声。你可以想象舞者偶尔故意跳“错”一步——不是为了表演效果,而是为了探索身体新的可能性。常用的噪声有两种:简单的高斯噪声和更平滑的Ornstein-Uhlenbeck(OU)噪声。
OU噪声有一个迷人的特性:它是有时间相关性的,就像海浪一样有“惯性”——今天的噪声幅度倾向于延续昨天的大小。这让探索过程更平滑,不会忽大忽小地抖动,特别适合惯性较大的物理系统(如机器人、汽车)。训练初期,噪声较大,智能体大幅探索环境;随着训练推进,噪声逐渐减小,智能体越来越依赖学到的确定性策略,逐步收敛。这个从“大胆探索”到“精细利用”的过程,就像DJ从开场的大幅度混音,慢慢精细到精准的节拍控制。
超参数调优
训练DDPG就像调试一道复杂的菜品,每一个调料的用量都可能影响最终味道。在DDPG中有几个关键超参数需要反复斟酌。
学习率(Learning Rate)是最关键的一个。Actor和Critic一般分别设置学习率,Critic通常用较大的学习率快速修正评分标准,Actor用较小的学习率稳步改进舞步。常见配置中,Critic的学习率约为Actor的10倍。如果学习率太大,网络参数会剧烈震荡,像厨师手抖放多了盐;太小则训练极其缓慢,像用蜡烛的热量煮沸一锅水。
软更新系数(τ)控制目标网络参数的更新速度。这个系数一般非常小(如0.001~0.005),让目标网络缓慢跟随当前网络,像温度计的水银柱一样,平滑地随温度变化而变化。τ太大,目标网络变化太快,训练容易不稳定;τ太小,训练可能非常缓慢。
批量大小(Batch Size)是每次采样训练的经验条数。64到256是比较常用的范围。批量太小,梯度估计噪声大;批量太大,计算开销增加但收益递减。此外,经验池大小、噪声衰减速率、网络层数等也都有影响。实际操作中,这些参数需要像厨师试菜一样反复调整——先粗调到大致的合理范围,再微调,找到一个训练稳定、收敛良好的组合。
超参数调优有个小诀窍:如果训练不稳,优先调小学习率和τ;如果训练太慢,适当调大批量大小。这个经验法则源于DDPG的“双网络追尾”特性——Actor跟着Critic的脚步走,Critic的评分一乱,Actor的舞步也会乱,所以优先保证Critic的稳定。
稳定训练技巧
深度强化学习训练不稳定是出了名的,DDPG也不例外。好在工程实践中积累了一些有效的稳定技巧,就像赛车手在赛道上学会如何平稳过弯。
最核心的技巧是目标网络(Target Networks)。DDPG实际上有四个网络:Actor、Critic、目标Actor、目标Critic。目标网络是当前网络的“慢速副本”,用于计算目标值。为什么这么麻烦?想象你在打网球,教练(Critic)总是用最新的标准来评估你是谁,结果每球标准都在变,你会不知道怎么调整。目标网络提供了一个相对稳定的评价基准,让训练过程不会因为评价标准的频繁变动而崩溃。目标网络的更新使用软更新方式:
这里的目标是让目标网络的参数θ'平滑地追向当前网络的参数θ,τ一般取0.001到0.005,每次更新只向当前网络迈一小步,保证训练的稳定性。
其他稳定技巧还包括梯度裁剪:如果Critic的梯度突然变得巨大(像赛道上突然出现石头),就把它限制在合理范围内,防止参数爆炸;奖励归一化:将奖励缩放到类似区间,避免某些状态的低奖励或高奖励过度影响网络更新;多环境并行:同时开多个环境收集数据,让经验更多样化,训练更稳。这些技巧组合起来,就像赛车手的全方位护具——单个看似乎简单,组合起来才能保证安全完赛。
- θ'(目标网络参数)这是目标是“慢速副本”,我们希望它平缓地靠近当前网络,而不是一步跟上。
- τ(软更新系数)一个极小的正数(如0.001),它决定了“迈一小步”的步子有多大,防止激进更新导致训练震荡。
- θ(当前网络参数)当前正在训练优化的网络,它是“老师傅”,会不断吸取最新经验而改进。
- (1-τ)θ'目标网络自身保留了绝大部分原有参数,保持“优雅的稳定性”,负责提供延续性。
- 整体更新的效果目标网络的参数每次只向当前网络挪动一点点,像钟摆的微小摆动,最终逐步逼近当前网络,避免崩溃性震荡。
实战应用场景
DDPG从实验室走向工业界的步伐非常快。在机器人控制领域,DDPG已经广泛应用于机械臂的抓取、搬运任务。一个机械臂需要精确控制多个关节的扭矩,在三维空间中完成平滑运动,这是典型的连续控制问题。DDPG让机械臂可以通过自主学习,从完全随机乱动到学会稳定的抓取策略,而且不需要人工设计复杂的运动轨迹。
在自动驾驶领域,DDPG的连续控制能力同样大放异彩。车辆的方向盘转角、油门踏板深度都是连续动作,DDPG被用于训练车辆在高速公路上进行平滑的变道和跟车操作。模拟环境中,车辆通过不断试错学会“何时转向、转向多少度”,最终在虚拟道路上稳定行驶。
游戏AI也是一个重要应用领域。像《星际争霸》这样的即时战略游戏,AI需要流畅控制多个单位的移动和攻击,动作空间也是连续的。DDPG可以帮助游戏AI学会灵活的单位微操。在动画制作、虚拟角色运动生成等领域,DDPG能让虚拟角色学会自然流畅的行走、奔跑动作,这些应用的共同点是:动作空间连续,需要平滑控制,并且可以通过反复试错来学习优化。
AI 应用场景
机械臂精密装配
阶段:策略训练与部署
解决的问题:传统机械臂装配依赖工程师编写精确的运动轨迹,面对零件微小偏差时束手无策,因为手动编程无法覆盖所有可能情况。DDPG通过连续控制每个关节的扭矩,让机械臂能自主学习精细的装配动作,并根据视觉反馈实时调整,大大提升了装配的成功率和适配性。
具体案例:某手机工厂使用DDPG训练机械臂完成耳机孔的精密插拔测试。机械臂通过与仿真环境交互学习,逐步掌握“插入力度”和“角度微调”策略,将插拔成功率从80%提升至99.7%,减少了人工干预的需求。
自动驾驶弯道控制
阶段:环境交互与策略优化
解决的问题:传统PID控制在高速弯道场景下反应不够灵活,难以适应复杂的道路曲率变化。DDPG可以通过连续的方向盘转角和油门控制,学习不同弯道的车速与转向配合策略,像一位“赛道老司机”一样在弯道中精准走线。
具体案例:在仿真环境中,DDPG训练的自动驾驶模型在连续S形弯道中,通过800回合的学习,将过弯速度从30km/h提升至60km/h,同时保持车辆的稳定性指标在安全范围内。
游戏AI自然运动控制
阶段:奖励设计与策略学习
解决的问题:传统游戏AI的移动过于机械,状态切换突兀。因为游戏角色需要在连续的空间中平滑移动、转身、跳跃,DDPG通过连续控制角色的速度方向和大小,让游戏角色的运动更自然流畅,提升玩家体验。
具体案例:在某开放世界游戏开发中,开发团队使用DDPG训练NPC角色的巡逻和追击行为。NPC学会了绕过障碍、保持安全距离,运动轨迹平滑自然,游戏玩家评价“不像是预设脚本,更像真人玩家”。
Python 演示
import numpy as npimport matplotlib.pyplot as plt class OrnsteinUhlenbeckNoise: """OU噪声:为探索动作添加平滑的时域相关噪声""" def __init__(self, mu=0.0, theta=0.15, sigma=0.2): self.mu = mu self.theta = theta self.sigma = sigma self.reset() def reset(self): self.x = np.zeros_like(self.mu if np.isscalar(self.mu) else 0.0) # 为避免类型问题,这里强制转换为标量 self.x = 0.0 def sample(self): self.x = self.x + self.theta * (self.mu - self.x) + self.sigma * np.random.randn() return self.x class DDPGTrainer: """DDPG连续控制的核心训练流程(简化版)""" def __init__(self, state_dim=1, action_dim=1, lr_actor=1e-4, lr_critic=1e-3, tau=0.001, gamma=0.99): # 这里用简化线性网络代替深度网络的核心权重 self.actor_w = np.random.randn(state_dim, action_dim) * 0.1 self.critic_w = np.random.randn(state_dim + action_dim, 1) * 0.1 self.lr_actor = lr_actor self.lr_critic = lr_critic self.tau = tau self.gamma = gamma # 目标网络权重(与当前网络结构一致) self.target_actor_w = self.actor_w.copy() self.target_critic_w = self.critic_w.copy() self.noise = OrnsteinUhlenbeckNoise() def select_action(self, state, add_noise=True): """根据当前状态选择动作(确定性策略加噪声)""" action = float(np.dot(state, self.actor_w)[0]) if add_noise: action += self.noise.sample() return float(np.clip(action, -1.0, 1.0)) def soft_update(self): """软更新目标网络参数,使目标网络缓慢跟踪当前网络""" self.target_actor_w = self.tau * self.actor_w + (1 - self.tau) * self.target_actor_w self.target_critic_w = self.tau * self.critic_w + (1 - self.tau) * self.target_critic_w def train_step(self, state, action, reward, next_state, done): """单步更新: 1) 更新Critic:用目标网络计算TD目标值 2) 更新Actor:用Critic的导数指引动作方向调整 3) 软更新目标网络""" state = np.atleast_2d(state) action = np.atleast_2d(action) next_state = np.atleast_2d(next_state) # ---- 更新Critic ---- target_q = reward + (1 - done) * self.gamma * float(np.dot(np.hstack([next_state, np.dot(next_state, self.target_actor_w)]), self.target_critic_w)[0]) q_pred = float(np.dot(np.hstack([state, action]), self.critic_w)[0]) critic_loss = (q_pred - target_q) ** 2 # 梯度下降:更新critic_w grad_critic = 2 * (q_pred - target_q) * np.hstack([state, action]).T self.critic_w -= self.lr_critic * grad_critic.reshape(-1) # ---- 更新Actor ---- # Actor的梯度通过Critic对动作的偏导回传 grad_q_act = self.critic_w[state.shape[1]:].reshape(-1) self.actor_w += self.lr_actor * np.dot(state.T, grad_q_act.reshape(1, -1)) * (-1) # ---- 软更新目标网络 ---- self.soft_update() return critic_loss def run_training(): env_target = 0.5 trainer = DDPGTrainer() episode_rewards = [] for episode in range(50): state = np.array([0.0]) total_reward = 0.0 for _ in range(100): action = trainer.select_action(state, add_noise=True) next_state = np.array([state[0] + action * 0.1]) reward = -abs(next_state[0] - env_target) trainer.train_step(state, action, reward, next_state, False) state = next_state total_reward += reward episode_rewards.append(total_reward) plt.plot(episode_rewards) plt.xlabel("Episode") plt.ylabel("Total Reward") plt.title("DDPG Training Progress") plt.show() if __name__ == "__main__": run_training()
class OrnsteinUhlenbeckNoise实现OU噪声,为确定性策略添加平滑的探索扰动self.theta * (self.mu - self.x)OU噪声的核心:让噪声状态缓慢回归均值,保持时间相关性self.target_actor_w = self.actor_w.copy()初始化目标网络为当前网络的副本,提供稳定的评价基准action += self.noise.sample()在确定性动作上增加噪声,实现探索target_q = reward + (1 - done) * self.gamma * ...计算TD目标值,用目标网络评估下一步的价值critic_loss = (q_pred - target_q) ** 2计算Critic的均方误差,衡量当前Q值与目标Q值的差距self.critic_w -= self.lr_critic * grad_critic梯度下降更新Critic网络,逐步降低Q值预测误差grad_q_act = self.critic_w[state.shape[1]:]提取Critic对动作的梯度,这是Actor更新方向的“向导”self.soft_update()软更新目标网络,让目标网络以微小步伐追向当前网络
常见误区
误区初学者以为DDPG在处理高维动作空间时效果很差,认为它只能在1-2维的小任务上工作。
正解实际上,DDPG在高维连续控制任务中同样有出色表现,比如机械臂的6-7自由度关节控制。它相对Q-learning等离散方法更擅长处理连续动作,但确实在高维动作空间中训练难度会增加,需要更精细的超参数调优。难度提升不等于不能工作,它依然是连续控制的主流选择。
为何常见:因为入门教程通常用简单一维任务(如倒立摆)演示,大家容易以为DDPG只适合小任务。
误区既然经验回放能提升样本效率,那经验池越大,存的经验越多,效果一定越好。
正解经验池过大反而可能导致训练不稳定,因为包含了太多过时的策略交互数据,与当前策略的分布不一致,让网络学会“过时经验”。经验池大小是一个需要权衡的超参数,通常控制在几万到几十万条经验,而不是无限增大。
为何常见:从直觉来说,数据越多越好是普遍印象,但强化学习对数据分布敏感,过时数据会影响策略学习的准确性。
误区为了让智能体充分探索,刚开始就将噪声调得很大,而且始终保持大噪声。
正解噪声确实控制了探索强度,但过大的噪声会让智能体的行为完全随机化,学习不到有效的策略。先进的方法会自适应地调节噪声强度,根据训练进度和状态差异来调整探索程度,而不是走极端。
为何常见:初学时容易把“探索”理解为“随机乱动”,忽略了噪声规模与策略学习之间的平衡关系。
误区训练时去掉目标网络,直接在当前网络上计算TD目标,也能完成训练,目标网络只会拖慢训练速度。
正解目标网络是保证DDPG训练稳定性的关键机制,不是可选项。没有目标网络的稳定基准,TD目标的“靶子”会随着网络更新不断漂移,导致训练发散。实践中几乎所有的DDPG实现都标配目标网络。
为何常见:因为目标网络增加了一倍的参数量,初学者会觉得“多此一举”,直到训练发散才意识到它的重要性。
面试题
Q1. DDPG是专门用来解决哪类强化学习问题的?
- A.离散动作空间的棋类游戏
- B.连续动作空间的机器人控制← 正确答案
- C.序列预测问题
- D.图像分类问题
答案:B。DDPG的核心特色就是处理连续动作空间问题,如机械臂控制、自动驾驶等。它不像DQN那样输出离散的动作选择,而是直接输出连续数值(如扭矩、角度),因此B正确。A是DQN的典型应用场景,C、D属于其他机器学习领域。
Q2. DDPG中的Actor网络的作用是什么?
- A.计算状态的价值V(s)
- B.输出当前最优的确定性动作← 正确答案
- C.判断动作的离散类别
- D.计算环境的奖励函数
答案:B。Actor网络就像冲浪教练,输入当前状态,输出一个具体的动作数值(如扭矩0.15Nm、角度-3.2°)。它输出的是连续也是确定性的动作,这正是DDPG能以高精度执行连续控制的基础。A是Critic网络的功能,C是分类器的功能,D是环境的评分机制。
Q3. Critic网络的输入是什么?
- A.只接收状态
- B.只接收动作
- C.接收“状态+动作”的组合← 正确答案
- D.接收“状态+奖励”的组合
答案:C。Critic网络像一位评委,需要同时看到“舞者的站位(状态)”和“舞者的舞步(动作)”,才能给出合理的评分。Q(s,a)的定义就是给定状态s和动作a时,期望获得的累积回报。因此C正确。只输入状态或动作都会丢失关键信息,无法准确评估当前决策的质量。
Q4. 经验回放机制对DDPG训练的关键帮助是?
- A.减少需要收集的经验数据量
- B.消除样本之间的时间相关性← 正确答案
- C.加速网络在单条经验上的收敛
- D.减少Actor网络的参数量
答案:B。经验回放从大池中随机抽取经验,打破了相邻经验间的时间相关性。如果按顺序使用经验,网络会被最近样本主导,像学生考前突击只能记住最近的知识,容易导致训练震荡甚至发散。A是间接好处但非核心,C和D与回放机制无关。
Q5. DDPG使用目标网络的主要原因是?
- A.增加网络复杂度来拟合更多数据
- B.为TD计算提供稳定的评价基准← 正确答案
- C.减少网络的泛化误差
- D.降低计算复杂度
答案:B。目标网络提供相对稳定的Q值估算基准,避免因为网络参数持续更新导致TD目标值不断移动,像打靶时靶子也在动,射手永远无法瞄准。目标网络像“固定的靶子”一样让训练过程稳定收敛。A和C是其他手段的作用,D与目标网络的实际效果相反。
Q6. DDPG中软更新系数τ的作用描述正确的是?
- A.τ越大,目标网络更新越快← 正确答案
- B.τ越小,训练稳定性越高← 正确答案
- C.τ通常取0.001~0.005之间的小值← 正确答案
- D.τ越大,目标网络的权重占比越大
答案:ABC。软更新公式为θ'=τθ+(1-τ)θ'。当τ较大时,目标网络更多采纳当前网络的参数,更新幅度大;当τ较小时,目标网络保持更多的旧参数,变化平缓,稳定性更高。τ取值过大可能导致目标值频繁变动,训练不稳定。D选项中τ越大,目标网络保留自己旧参数的比例(1-τ)越小,对旧参数的保留越少。
Q7. 为什么DDPG输出的动作是确定性的?
- A.确定性动作更利于计算梯度
- B.概率性策略在高维连续空间采样效率低← 正确答案
- C.确定性策略能消除环境中的随机性
- D.确定性策略在所有任务上都优于随机策略
答案:B。在连续高维空间中对随机策略做概率采样十分困难,梯度方差大导致学习效率低下。DDPG巧妙地让Actor直接输出确定性动作,结合Critic的Q值梯度调整策略,避免了在动作空间中的高方差采样。A有一定道理,但核心动机是B的策略学习效率问题。C和D都不是确定性策略的根本原因。
Q8. 以下哪些技巧能帮助提升DDPG训练的稳定性?
- A.使用目标网络软更新← 正确答案
- B.对Critic的梯度进行裁剪← 正确答案
- C.使用经验回放打破样本相关性← 正确答案
- D.增加噪声来增大动作的随机性
答案:ABC。目标网络提供了稳定的评价基准(A),梯度裁剪防止参数爆炸(B),经验回放打破样本间相关性(C),三者都能提升训练稳定性。D是探索策略,与训练稳定性无直接关系,过度增加噪声反而会降低训练稳定性。
Q9. Runner使用OU噪声的主要优点是什么?
- A.收敛速度比高斯噪声快3倍
- B.噪声具有时间相关性,探索更平滑← 正确答案
- C.不需要设置噪声幅度
- D.能保证动作始终在有效范围内
答案:B。OU噪声具有时域相关性,当前噪声幅度受前一时刻影响,不会频繁剧烈跳变。这对有惯性的物理系统(如机器人、汽车)尤为友好,探索动作更自然平滑。A中快3倍的说法没有任何依据;C和D中噪声幅度仍需手动设定,噪声本身不保证动作范围有效。
Q10. DDPG相比Q-learning等离散算法的主要优势是?
- A.能直接输出连续的动作数值← 正确答案
- B.不需要贪心策略来探索
- C.支持高维连续控制任务的端到端学习← 正确答案
- D.完全不需要经验回放机制
答案:AC。DDPG通过Actor网络直接输出连续数值,无需将动作空间离散化,因此A正确;同时支持端到端的连续控制学习,C也正确。B是错误的,DDPG依然需要噪声实现探索;D错误,经验回放机制是DDPG的重要组成部分,用来稳定训练和提升样本效率。