编辑
SAC 算法的基础认识
SAC = Soft Actor-Critic(柔性演员 - 评论家算法)
SAC 是目前最稳、最强、最常用的连续动作强化学习算法 ,机器人、控制、决策任务几乎都用
它。它是一种经典的连续动作强化学习算法,其核心思想是在提高长期奖励的同时,增强策略的随
机探索能力。
编辑
SAC的网络结构
5 个神经网络
Actor —— 策略网络,输出动作分布
Critic 1 —— 第一个 Q 评估网络
Critic 2 —— 第二个 Q 评估网络
Target Critic 1 —— 稳定用的 Q 目标网络
Target Critic 2 —— 另一个稳定用的 Q 目标网络
再加 1 个可学习参数:α (alpha) —— 控制探索强度
① Actor
输入:状态 s
输出:动作 a、动作的对数概率 log π(a|s)
( 输入 next_state 对应输出 next_action 和 next_log_prob, 输入 state 对应输出 new_action 和
log_prob)
② Critic 1 / Critic 2
输入:状态 s + 动作 a
输出:一个 Q 值(评估这个动作好不好)
③ Target Critic 1 / Target Critic 2
输入:下一状态 s' + 下一动作 a'
输出:目标 Q 值(用来训练 Critic)
编辑
SAC = 1 个策略网络 + 2 个 Q 网络 + 1 个目标 Q 网络
最大特点:双 Critic 防止过估计,随机策略保证探索
网络更新
更新两个 Q 网络(Critic)
编辑
动作概率加权: 代表下一状态的动作选择概率,以此为权重对各类动作价值加权平均。下一状态
价值无法由单一动作决定,加权计算才能贴合策略分布的真实期望。
双 Q 网络取最小值:双目标 Q 网络输出取最小值,用以抑制价值高估问题。单个网络易夸大动作
收益,造成训练波动;采用悲观取值思路,能让估值结果更平稳可靠。
熵正则约束:将策略熵纳入价值计算,落地最大熵学习思想。动作随机性越强,该项数值越大,在
目标值中扣除该项后,探索型策略会获得更高评分。以此督促模型兼顾收益最大化与探索能力,防
止算法陷入局部最优。
SAC 以累积奖励与策略熵联合最大化为优化目标,兼顾决策最优性与环境探索性。借助熵正则
项引导价值网络偏好随机策略,平衡利用与探索,构成最大熵强化学习的核心思路。
编辑
编辑
编辑
更新策略网络(Actor)
编辑
其实和上面的公式一样两者目标都是为了最大化下面这个公式:
编辑
动作的价值,越高越好,熵正则项,动作越随机,这一项越大,鼓励探索
编辑
编辑
编辑
更新温度系数 α(自动调节探索)
编辑
编辑
编辑
编辑
软更新目标 Q 网络(Target Q)
编辑
手动计算
已知条件
状态维度:8 动作数:4 gamma = 0.99 rho(tau) = 0.005 target_entropy = -2.0 alpha = 0.2
state = [0.1,0.2,-0.3,0.05,0.02,-0.01,0,0] action = 1 reward = 5.0 next_state = [0.1,0.18,0.04,-0.28,0.02,-0.01,0,0] done = False (0)
Actor 输出概率:
next_action_prob = [0.1, 0.6, 0.2, 0.1] log_next_prob = [-2.30, -0.51, -1.61, -2.30]
目标 Q 网络输出:
target_q1 = [10, 20, 5, 8] target_q2 = [11, 19, 4, 9]
当前 Q 网络输出:
q1 = [12, 15, 8, 10] q2 = [13, 14, 7, 11]
更新 Q 网络
计算 target_q_min(双 Q 取最小)
target_q1 = [10, 20, 5, 8] target_q2 = [11, 19, 4, 9] target_q_min = [10, 19, 4, 8]
计算熵项:alpha * log_next_prob
alpha * log_next_prob = 0.2 * [-2.30, -0.51, -1.61, -2.30] = [-0.46, -0.102, -0.322, -0.46]
计算核心项:target_q_min - alpha * log_next_prob
target_q_min - alpha*log_next_prob = [10,19,4,8] - [-0.46, -0.102, -0.322, -0.46] = [10.46, 19.102, 4.322, 8.46]
动作概率加权求和(求期望)
next_action_prob = [0.1, 0.6, 0.2, 0.1] min_q_next_target = 0.1*10.46 + 0.6*19.102 + 0.2*4.322 + 0.1*8.46 = 1.046 + 11.4612 + 0.8644 + 0.846 = 14.2176
计算 TD Target(最终 Q 目标)
td_target = reward + (1-done) * gamma * min_q_next_target = 5.0 + 1 * 0.99 * 14.2176 = 5.0 + 14.0754 = 19.0754
计算 Q1、Q2 损失
q1(a=1) = 15 q2(a=1) = 14 td_target = 19.0754 q1_loss = (15 - 19.0754)² = (-4.0754)² = 16.609 q2_loss = (14 - 19.0754)² = (-5.0754)² = 25.760 总Q损失 = 16.609 + 25.760 = 42.369
更新 Actor 策略网络
取当前状态的动作概率
action_prob = [0.1, 0.6, 0.2, 0.1] log_prob = [-2.3, -0.51, -1.6, -2.3]
双 Q 取最小
q1 = [12,20,5,9] q2 = [11,19,4,10] min_q = [11, 19, 4, 9]
计算 inside_term alpha*log_prob - min_q
alpha*log_prob = [-0.46, -0.102, -0.32, -0.46] inside_term = [-0.46, -0.102, -0.32, -0.46] - [11,19,4,9] = [-11.46, -19.102, -4.32, -9.46]
加权求和 → actor_loss
actor_loss = 0.1*(-11.46) + 0.6*(-19.102) + 0.2*(-4.32) + 0.1*(-9.46) = -1.146 - 11.461 - 0.864 - 0.946 = -14.417
自动更新温度系数 α
计算当前策略熵 H (π)
entropy = -sum( action_prob * log_prob ) action_prob * log_prob = -0.23 -0.306 -0.32 -0.23 = -1.086 entropy = 1.086
计算 inside_term
inside_term = entropy - target_entropy = 1.086 - (-2.0) = 3.086
计算 α 损失
alpha_loss = alpha * inside_term = 0.2 * 3.086 = 0.6172
软更新 Target Q 网络
target_param = tau * current_param + (1-tau) * target_param tau = 0.005
current_q1_weight = 2.0 target_q1_weight = 1.9 new_target = 0.005*2.0 + 0.995*1.9 = 0.01 + 1.8905 = 1.9005
TD目标值 = 19.0754 Q1 损失 = 16.609 Q2 损失 = 25.760 Actor 损失 = -14.417 α 损失 = 0.6172
编辑