多臂老虎机 “Multi-armed Bandits”

2024-01-16 09:36

本文主要是介绍多臂老虎机 “Multi-armed Bandits”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

将强化学习与机器学习、深度学习区分开的最重要的特征为:它通过训练中信息来评估所采取的动作,而不是给出正确的动作进行指导,这极大地促进了寻找更优动作的需求。

1、多臂老虎机(Multi-armed Bandits)问题

在这里插入图片描述
赌场的老虎机有一个绰号叫单臂强盗(single-armed bandit),因为它即使只有一只胳膊,也会把你的钱拿走。而一排老虎机就引申出多臂强盗(多臂老虎机)。

多臂老虎机(Multi-armed Bandits)问题可以描述如下:一个玩家走进一个赌场,赌场里有 k k k 个老虎机,每个老虎机的期望收益不一样。假设玩家总共可以玩 t t t 轮, 在每一轮中,玩家可以选择这 k k k 个老虎机中的任一个,投入一枚游戏币,拉动摇杆,观察是否中奖以及奖励的大小。
问题,玩家采取怎么样的策略才能最大化这 t t t 轮的总收益?

k k k 个老虎机(对应 k k k 个动作选择),每一个动作都有其预期的奖励,称其为该动作的价值。记第 t t t 轮选择的动作为 A t A_t At,相应的奖励为 R t R_t Rt,那么任意动作 a a a 的价值记为 q ∗ ( a ) q_\ast(a) q(a),即动作 a a a 的期望奖励:
q ∗ ( a ) ≐ E [ R t ∣ A t = a ] q_\ast(a)\doteq\Bbb{E}[R_t|A_t=a] q(a)E[RtAt=a]

如果知道每个动作的价值,那么问题就简单了:总是选择价值最高的动作。如果不知道的话,我们需要对其进行估计,令动作 a a a 在时间步长为 t t t 的价值估计为 Q t ( a ) Q_t(a) Qt(a),我们希望 Q t ( a ) Q_t(a) Qt(a) 尽可能地接近 q ∗ ( a ) q_\ast(a) q(a)

2、动作价值方法

通过估计动作价值,然后依据动作价值作出动作选择的方法,统称为动作价值方法。某个动作的真实价值应当是该动作被选择时的期望奖励,即
Q t ( a ) ≐ t 时刻之前, a 被选中的总奖励 t 时刻之前, a 被选中的次数 = ∑ i = 1 t − 1 R i ⋅ I A i = a ∑ i = 1 t − 1 I A i = a Q_t(a)\doteq\dfrac{t\ 时刻之前,a\ 被选中的总奖励}{t\ 时刻之前,a\ 被选中的次数}=\dfrac{\sum_{i=1}^{t-1}R_i\cdot\Bbb{I}_{A_i=a}}{\sum_{i=1}^{t-1}\Bbb{I}_{A_i=a}} Qt(a)t 时刻之前,a 被选中的次数t 时刻之前,a 被选中的总奖励=i=1t1IAi=ai=1t1RiIAi=a

其中,若 A i = a A_i=a Ai=a,则 I A i = a = 1 \Bbb{I}_{A_i=a}=1 IAi=a=1,否则 I A i = a = 0 \Bbb{I}_{A_i=a}=0 IAi=a=0,若分母为 0,则定义 Q t ( a ) Q_t(a) Qt(a) 为一默认值(例如 0),根据大数定律,当分母趋于无穷时, Q t ( a ) Q_t(a) Qt(a) 收敛于 q ∗ ( a ) q_\ast(a) q(a),称这种方法为样本平均法(sample-average method),这是估计动作价值的一种方法,当然并不一定是最好的方法,下面我们使用该方法来解决问题。

最简单的动作选择就是选择价值估计值最大的动作,称为贪心方法,其数学表示为:
A t ≐ arg max ⁡ a Q t ( a ) A_t\doteq\argmax_a Q_t(a) AtaargmaxQt(a)

另一种替代的方法是,大多数情况是贪心的,偶尔从动作空间中随机选择,称为 ϵ \epsilon ϵ -贪心方法。这种方法的优点是,随着步数增加,每个动作会被无限采样,则 Q t ( a ) Q_t(a) Qt(a) 会逐渐收敛到 q ∗ ( a ) q_\ast(a) q(a),也意味着选择最优动作的概率收敛到 1 − ϵ 1-\epsilon 1ϵ

3、贪心动作价值方法有效性

在 2000 个随机生成的 10 臂老虎机问题中,其动作价值 q ∗ ( a ) , a = 1 , ⋯ , 10 q_\ast(a),a=1,\cdots,10 q(a),a=1,,10,服从期望为 0,方差为 1的正态分布;另外每次动作 A t A_t At 的实际奖励 R t R_t Rt 服从期望为 q ∗ ( A t ) q_\ast(A_t) q(At) ,方差为 1 的正态分布。
在这里插入图片描述

部分代码

import numpy as npstep = 1000
q_true = np.random.normal(0, 1, 10)  # 真实的动作价值
q_estimate = np.zeros(10)  # 估计的动作价值
epsilon = 0.9  # 贪心概率
action_space = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
action_count = np.zeros(10)
reward_sum = 0
for i in range(step):if (np.random.uniform() > epsilon1) or (q_estimate1.all() == 0):machine_name = np.random.choice(action_space)reward_sum += np.random.normal(q_true[machine_name], 1, 1)action_count[machine_name] += 1q_estimate[machine_name] = reward_sum / action_count[machine_name]else:machine_name = np.argmax(q_estimate)reward_sum += np.random.normal(q_true[machine_name], 1, 1)action_count[machine_name] += 1q_estimate[machine_name] = reward_sum / action_count[machine_name]

在这里插入图片描述

这篇关于多臂老虎机 “Multi-armed Bandits”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/612121

相关文章

多头注意力机制(Multi-Head Attention)

文章目录 多头注意力机制的作用多头注意力机制的工作原理为什么使用多头注意力机制?代码示例 多头注意力机制(Multi-Head Attention)是Transformer架构中的一个核心组件。它在机器翻译、自然语言处理(NLP)等领域取得了显著的成功。多头注意力机制的引入是为了增强模型的能力,使其能够从不同的角度关注输入序列的不同部分,从而捕捉更多层次的信息。 多头注意力机

【C++11 之新增容器 array、foward_list、tuple、unordered_(multi)map/set】应知应会

C++11 标准中新增了多个容器,这些容器为 C++ 程序员提供了更多的选择,以满足不同的编程需求。以下是对这些新容器的介绍和使用案例: std::array 介绍: std::array 是一个固定大小的数组容器,它在栈上分配内存,并提供了类似于标准库容器的接口。它提供了更好的类型安全性和范围检查,同时保持了与原生数组相似的性能。std::array 的大小必须在编译时确定,并且不能更改。

Elasticsearch java API (10)Multi Get API

Multi Get API编辑 多让API允许基于他们得到的文档列表 index, type和 id: MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add("twitter", "tweet", "1") // <1> .add("twitter", "tweet

越复杂的CoT越有效吗?Complexity-Based Prompting for Multi-step Reasoning

Complexity-Based Prompting for Multi-step Reasoning 论文:https://openreview.net/pdf?id=yf1icZHC-l9 Github:https://github.com/FranxYao/chain-of-thought-hub 发表位置:ICLR 2023 Complexity-Based Prompting for

论文学习 Learning Robust Representations via Multi-View Information Bottleneck

Code available at https://github.com/mfederici/Multi-View-Information-Bottleneck 摘要:信息瓶颈原理为表示学习提供了一种信息论方法,通过训练编码器保留与预测标签相关的所有信息,同时最小化表示中其他多余信息的数量。然而,最初的公式需要标记数据来识别多余的信息。在这项工作中,我们将这种能力扩展到多视图无监督设置,其中提供

Multi-Head RAG:多头注意力的激活层作为嵌入进行文档检索

现有的RAG解决方案可能因为最相关的文档的嵌入可能在嵌入空间中相距很远,这样会导致检索过程变得复杂并且无效。为了解决这个问题,论文引入了多头RAG (MRAG),这是一种利用Transformer的多头注意层的激活而不是解码器层作为获取多方面文档的新方案。 MRAG 不是利用最后一个前馈解码器层为最后一个令牌生成的单个激活向量,而是利用最后一个注意力层为最后一个令牌生成的H个单独的激活向量,然

BEV 中 multi-frame fusion 多侦融合(一)

文章目录 参数设置align_dynamic_thing:为了将动态物体的点云数据从上一帧对齐到当前帧流程 旋转函数平移公式filter_points_in_ego:筛选出属于特定实例的点get_intermediate_frame_info: 函数用于获取中间帧的信息,包括点云数据、传感器校准信息、自车姿态、边界框及其对应的实例标识等intermediate_keyframe_align

Transformer中的Self-Attention和Multi-Head Attention

2017 Google 在Computation and Language发表 当时主要针对于自然语言处理(之前的RNN模型记忆长度有限且无法并行化,只有计算完ti时刻后的数据才能计算ti+1时刻的数据,但Transformer都可以做到) 文章提出Self-Attention概念,在此基础上提出Multi-Head Atterntion 下面借鉴霹雳吧啦博主的视频进行学习: Se

大模型应用开发技术:Multi-Agent框架流程、源码及案例实战(一)

LlaMA 3 系列博客 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (三) 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (四) 基于 LlaMA 3

用paxos实现多副本日志系统--multi paxos部分

接下来,我们来讲解multi-paxos。大家应该还记得我们开始时提到的multi-paxos的目标是实现多副本log系统。要实现多副本log系统的一种方法就是,使用一组彼此独立的basic paxos实例,每个独立的basic paxos实例用来决定一系列log当中的一条。为了做到这一点,我们需要给Prepare和Accept两个rpc增加一个参数,index,用来表示这个basic