趋近智
虽然直接在智能体选择的行动(行动空间噪声)中加入随机扰动是一种常用的行为多样性方法,尤其是在连续控制领域,但有时这可能导致行为不稳定且试探效率不高。这是因为在每个时间步施加的噪声通常是独立的,使得智能体的行为快速波动而缺乏连贯性。考虑另一种方案:如果我们不是对最终行动引入噪声,而是对决策过程本身,具体来说是对策略网络的参数 (parameter)引入噪声,会怎么样?这就是参数空间噪声的中心思想。
参数空间噪声不是从策略输出分布的含噪声版本中采样行动,也不是向确定性行动中添加噪声,而是直接扰动策略网络的权重 (weight)。设策略由函数 表示,其参数为权重 。在使用参数空间噪声时,我们采样一个噪声向量 (vector) (通常来自高斯分布 ),并在一定时间内(通常是整个回合)修改策略参数。然后,智能体根据这个受扰动的策略 行动。
主要区别在于行为多样性的时间一致性。由于参数 在一个回合(或多个时间步)的持续时间内保持不变,因此由此产生的行为,尽管是试探性的,但与在每一步添加独立噪声相比,更具一致性和结构性。可以将其理解为在每个回合中,以一种略有不同但暂时固定的“个性”来寻找新方法。
行动空间噪声与参数空间噪声的噪声注入点对比。参数噪声直接修改策略网络的权重(),导致时间上相关的行为调整。
实现参数 (parameter)空间噪声需要仔细考量:
# 参数噪声在回合循环中的Python代码片段
def train_agent_with_param_noise(agent, env, num_episodes, noise_scale):
policy_params = agent.policy.get_weights() # 获取原始权重
for episode in range(num_episodes):
# 为当前回合采样参数噪声
param_noise_vector = np.random.normal(0, noise_scale, size=policy_params.shape)
# 创建用于试探的扰动策略
perturbed_policy_params = policy_params + param_noise_vector
agent.exploration_policy.set_weights(perturbed_policy_params) # 使用独立的策略实例进行试探
state = env.reset()
done = False
episode_reward = 0
while not done:
# 使用扰动后的策略行动
action = agent.exploration_policy.predict(state)
next_state, reward, done, _ = env.step(action)
# 使用实际采取的行动存储经验
agent.memory.store(state, action, reward, next_state, done)
# 使用原始(未扰动)的策略参数进行学习
if agent.memory.is_ready():
agent.learn() # 使用原始策略参数进行更新
state = next_state
episode_reward += reward
# 根据学习步骤更新原始策略参数
policy_params = agent.policy.get_weights()
# 可选:根据行动距离度量自适应调整 noise_scale
# noise_scale = adapt_noise_scale(...)
print(f"Episode: {episode}, Reward: {episode_reward}")
虽然有效,但参数 (parameter)空间噪声也带来了自己的一系列挑战:
参数空间噪声提供了一种精密的促进行为多样性的方法,特别适合于时间上一致的试探行为有帮助的情况,例如通过确定性策略梯度方法解决的连续控制任务。它代表了在构建高效试探智能体的工具集中,对行动空间噪声和内在激励手段的一种有价值的替代或补充。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造