如何在tf-agents中获取所有动作对应的概率向量
多臂老虎机智能体全动作概率获取方案
LinearUCBAgent 处理逻辑
LinearUCB 属于确定性策略,原生逻辑只返回UCB得分最高的单个动作,要获取全动作概率可以按以下步骤处理:
- 遍历所有候选动作,逐个计算对应UCB得分:
公式为UCB(a) = θ^T · x_a + α * sqrt(x_a^T · A_a^{-1} · x_a)
其中θ是模型学习到的线性权重,α是预设的探索系数,x_a是动作a的特征向量,A_a是动作a的协方差矩阵 - 对所有动作的UCB得分做softmax归一化得到选择概率:
公式为P(a) = exp(UCB(a)/τ) / sum(exp(UCB(k)/τ) for k in 所有动作)
τ为温度系数,值越大概率分布越平缓,越小越接近原生贪心策略的选择偏好 - 排序场景下可以直接跳过概率计算,用原始UCB得分作为排序依据,排序结果和按概率排序完全一致。
LinearThompsonSamplingAgent 处理逻辑
LinearTS 属于随机策略,获取全动作概率有两种常用方案:
- 蒙特卡洛采样法(精度高):
对当前后验分布θ ~ N(μ, Σ)进行至少1000次采样,每次采样后计算所有动作的期望回报,统计每个动作成为当前最优动作的次数占比,即为该动作的选择概率 - 闭式近似法(速度快):
两两计算动作间的胜出概率,通过Plackett-Luce模型聚合得到所有动作的选择概率,适合对延迟要求高的在线排序场景,精度略低于采样法 - 排序场景下也可以直接用每个动作的后验期望回报作为排序依据,和概率排序的TopK结果差异极小。
如果你使用的是RLlib、MABWiser这类第三方库的内置智能体,仅需要修改
predict方法的输出逻辑,不用调整核心参数更新逻辑:把原逻辑中返回最大得分对应动作的部分,改为返回所有动作的得分/概率数组即可。
内容的提问来源于stack exchange,提问作者Kushal Jain
相关产品推荐
相关产品推荐

