ML:Q 学习的基本原理与实现

news2026/5/13 7:22:53
在强化学习中模型面对的不是一批固定样本而是一个可以不断交互的环境。智能体Agent在某个状态下采取动作环境给出奖励并进入新的状态。智能体的目标不是只看当前一步是否得分而是学习一种策略使长期累计奖励尽可能大。Q 学习Q-Learning是强化学习中最经典、最基础的算法之一。它的核心思想是学习一个动作价值函数 Q(s, a)用来表示“在状态 s 下采取动作 a长期来看大约有多好”。从直观上看Q 学习做的是这样一件事• 输入状态、动作、奖励和下一个状态• 过程不断更新“状态—动作”价值表• 输出在不同状态下更值得选择的动作• 目标学会让长期累计奖励更大的决策方式Q 学习属于无模型强化学习Model-Free Reinforcement Learning方法。所谓“无模型”是指它不需要事先知道环境的完整转移规则只要能够通过尝试获得经验就可以逐步学习。一、Q 学习的基本思想Q 学习的核心思想是通过不断试错估计每个“状态—动作”组合的长期价值并据此选择更优动作。在一个强化学习任务中智能体会不断经历这样的过程• 观察当前状态• 选择一个动作• 执行动作后获得奖励• 进入下一个状态• 根据这次经验修正自己的判断例如在一个简单迷宫中• 状态可以是智能体当前所在的位置• 动作可以是向上、向下、向左、向右移动• 奖励可以是到达终点得到 1撞墙得到 -1普通移动得到 0 或较小负值• 目标是学会一条尽快到达终点的路径Q 学习不会一开始就知道哪条路径最好。它通过反复探索逐渐发现• 哪些动作会接近目标• 哪些动作会带来惩罚• 哪些状态更有价值• 哪些动作长期来看更值得选择图 1Q 学习的基本交互过程Q 学习的学习对象不是一个直接的分类边界也不是一个回归函数而是一张“价值表”。这张表记录了在状态 s 下采取动作 a长期来看可能获得多少回报。这就是 Q 值。二、强化学习中的基本元素1、智能体与环境强化学习通常由智能体和环境组成。智能体Agent是做决策的一方。它根据当前状态选择动作并希望通过行动获得更高回报。环境Environment是智能体所处的外部系统。它接收智能体的动作返回奖励并给出新的状态。可以把二者关系理解为• 智能体负责选择动作• 环境负责反馈结果• 奖励告诉智能体动作好不好• 状态告诉智能体当前处境图 2智能体与环境的交互关系2、状态、动作与奖励强化学习中的三个基本概念是状态、动作和奖励。状态State表示智能体当前所处的情况。例如• 迷宫中的当前位置• 游戏中的画面• 机器人当前姿态• 推荐系统中的用户上下文动作Action表示智能体可以选择的行为。例如• 向左移动• 向右移动• 点击某个按钮• 推荐某个商品奖励Reward表示环境对动作结果的即时反馈。例如• 到达终点得到正奖励• 撞墙得到负奖励• 完成任务得到高奖励• 浪费时间得到小惩罚强化学习的关键是智能体不能只看当前奖励而要考虑长期收益。3、策略策略Policy表示智能体在不同状态下如何选择动作。策略通常记为其中• s 表示当前状态• a 表示可选动作• π(a|s) 表示在状态 s 下选择动作 a 的概率如果某个策略在每个状态下都固定选择一个动作它就是确定性策略如果它在多个动作之间按概率选择就是随机策略。Q 学习的目标是通过学习 Q 值间接得到一个更好的策略。三、回报、折扣因子与长期价值图 3即时奖励、长期回报与折扣因子1、即时奖励与长期回报在强化学习中一个动作的好坏不能只看当前一步的奖励。例如在迷宫中某一步可能没有立刻得到奖励但它让智能体更接近终点另一步可能暂时看起来不错却会让智能体走进死路。因此强化学习关心的是长期回报Return而不是单步奖励。从某一时刻 t 开始累计回报可以写为其中•Gₜ表示从时刻 t 开始获得的累计回报•rₜ₊₁表示执行当前动作后获得的下一步奖励•rₜ₊₂rₜ₊₃ … 表示后续奖励但在实际任务中未来奖励通常需要打折。2、折扣因子折扣因子Discount Factor通常记为 γ用来控制未来奖励的重要程度。带折扣的累计回报可以写为其中• γ 表示折扣因子通常满足 0 ≤ γ ≤ 1在无限时域任务中常取 γ 1• γ 越接近 0智能体越关注眼前奖励• γ 越接近 1智能体越重视长期回报例如• γ 0只关心当前一步奖励• γ 0.9比较重视未来奖励• γ 0.99非常重视长期结果折扣因子的作用是平衡短期收益与长期收益。3、为什么需要折扣引入折扣因子有几个作用• 让越远的未来奖励影响逐渐减弱• 避免无限长任务中的累计回报无限增大• 体现现实中“近期结果通常更确定”的特点• 控制智能体偏向短期还是长期决策在 Q 学习中γ 是非常重要的超参数。它会影响智能体学习到的策略风格。四、Q 值与动作价值函数图 4Q 值与动作价值函数1、什么是 Q 值Q 值表示在某个状态下采取某个动作的长期价值。通常写为其中• s 表示当前状态• a 表示当前动作• Q(s, a) 表示在状态 s 下采取动作 a 后长期来看能够获得的期望回报例如在迷宫问题中当前位置向右表示如果智能体在当前位置选择向右走从长期来看大约能得到多少回报。Q 值越大说明这个动作越值得选择。2、状态价值与动作价值强化学习中常见两类价值函数状态价值函数和动作价值函数。状态价值函数表示处于状态 s 的长期价值。动作价值函数表示在状态 s 下采取动作 a 的长期价值。二者区别在于• V(s) 只评价状态本身• Q(s, a) 同时评价状态和动作如果知道 Q(s, a)就可以直接选择当前最好的动作。因此Q 学习选择学习动作价值函数而不是只学习状态价值函数。3、根据 Q 值选择动作如果已经学到了较准确的 Q 值那么在状态 s 下可以选择 Q 值最大的动作其中•a* 表示当前认为最优的动作• argmax 表示使 Q(s, a) 最大的动作• Q(s, a) 表示状态 s 下动作 a 的价值这就是从 Q 值得到策略的基本方式。不过在学习早期如果总是选择当前 Q 值最大的动作智能体可能过早陷入局部经验。因此还需要探索机制。五、贝尔曼方程与 Q 学习更新公式图 5贝尔曼方程与 Q 学习更新公式1、贝尔曼思想Q 学习的核心更新公式来自贝尔曼思想。一个状态—动作的价值可以由两部分组成• 当前动作带来的即时奖励• 下一状态中能够获得的最佳未来价值也就是说当前动作的价值 当前奖励 折扣后的未来最佳价值。这可以写为其中• s 表示当前状态• a 表示当前动作• r 表示执行动作后获得的奖励• s 表示下一个状态• a 表示下一个状态中的可选动作• γ 表示折扣因子• max Q(s′, a′) 表示下一个状态下能取得的最大动作价值这个式子说明Q 值不是只看当前奖励而是会向未来传播。2、时间差分目标在一次交互中智能体获得经验Q 学习会构造一个目标值其中• Target 表示这次经验给出的学习目标• r 表示即时奖励• γmax Q(s′, a′) 表示折扣后的未来最佳价值如果当前估计 Q(s, a) 与 Target 不一致就需要修正 Q(s, a)。3、Q 学习更新公式Q 学习的更新公式为其中• α 表示学习率• r 表示即时奖励• γ 表示折扣因子• s 表示下一个状态• max Q(s′, a′) 表示下一状态的最大 Q 值• 方括号中的内容表示时间差分误差时间差分误差可以写为其中• δ 表示当前估计与目标之间的差距• δ 0 表示当前 Q 值低估了该动作• δ 0 表示当前 Q 值高估了该动作因此Q 学习的更新可以理解为不直接把旧 Q 值改成目标值而是朝目标值移动一小步。学习率 α 控制这一步移动多大。4、终止状态的处理如果 s 是终止状态后续不再有未来动作那么未来价值应视为 0。此时目标值变为更新公式可写为这表示在终止状态前的最后一步Q 值只由最后得到的奖励来修正。六、探索与利用ε-greedy 策略图 6ε-greedy 策略1、为什么需要探索在强化学习中智能体面临一个经典矛盾探索与利用。利用Exploitation是指选择当前看起来最好的动作也就是 Q 值最大的动作。探索Exploration是指尝试一些当前看起来不一定最好的动作以便发现新的可能性。如果只利用• 智能体可能过早相信错误经验• 可能永远不尝试更好的动作• 容易陷入局部最优如果只探索• 学习效率低• 不能稳定执行已知较好的动作• 长期表现可能很差因此需要在探索和利用之间取得平衡。2、ε-greedy 策略Q 学习中常用 ε-greedy 策略。其基本规则是• 以 ε 的概率随机选择动作• 以 1−ε 的概率选择当前 Q 值最大的动作可以写为随机动作概率为概率为其中• ε 表示探索概率• ε 越大探索越多• ε 越小越倾向于利用已有知识例如如果 ε0.1表示智能体有 10% 的概率随机探索有 90% 的概率选择当前最优动作。3、ε 衰减在学习早期智能体对环境了解较少需要多探索在学习后期智能体已经积累了较多经验可以更多利用。因此常见做法是让 ε 随训练过程逐渐减小。例如其中•εₜ表示第 t 轮训练时的探索率•ε₀表示初始探索率•εₘᵢₙ表示最小探索率• decay 表示衰减系数• t 表示训练轮数这样可以让智能体从“多探索”逐渐过渡到“多利用”。七、Q 学习算法流程图 7Q 学习的训练流程1、基本步骤Q 学习的基本流程如下1初始化 Q 表通常所有 Q 值设为 0。2智能体从初始状态开始。3根据 ε-greedy 策略选择动作。4执行动作获得奖励和下一个状态。5使用 Q 学习公式更新 Q(s, a)。6如果到达终止状态结束当前回合。7重复多个回合直到 Q 值逐渐稳定。2、Q 学习的伪代码Q 学习可以用如下伪代码表示初始化 Q(s, a) 对于每个回合 初始化状态 s 当 s 不是终止状态 根据 ε-greedy 策略选择动作 a 执行动作 a得到奖励 r 和新状态 s 更新 Q(s, a) Q(s, a) ← Q(s, a) α [r γ max Q(s,a) - Q(s, a)] s ← s这个过程会不断把后续奖励向前传播。经过足够多的探索后Q 表会逐渐反映不同状态—动作组合的长期价值。3、离策略学习Q 学习属于离策略Off-Policy算法。所谓离策略是指智能体实际执行动作时可以使用带探索的行为策略但更新目标中使用的是下一状态的最优动作价值。也就是说智能体可以用 ε-greedy 去探索但更新时仍然学习“如果以后都选择最优动作会得到多少回报”。这也是 Q 学习与 SARSA 的一个重要区别。Q 学习的更新目标是SARSA 的更新目标通常是SARSA 是同策略学习On-policy Learning智能体在状态 s 下选择动作 a获得奖励 r进入下一个状态 s′然后按照当前策略在 s′ 下继续选择动作 a′再用这五个量更新 Q(s, a)。SARSA 使用的是下一步实际选择的动作 a因此更偏向在当前行为策略下学习。八、Python 实现网格世界中的 Q 学习下面用一个简单网格世界实现 Q 学习。任务设定如下• 网格大小为 4×4• 起点在左上角• 终点在右下角• 每移动一步得到 -1 奖励• 到达终点奖励为 10并结束回合• 动作包括上、下、左、右这个例子主要用于理解 Q 学习流程不依赖复杂环境库。import numpy as np # 数值计算库 # 1. 定义环境参数grid_size 4 # 网格边长4x4网格n_states grid_size * grid_size # 状态总数16个格子n_actions 4 # 动作数上下左右 # 动作0上1下2左3右行、列偏移量actions { 0: (-1, 0), 1: (1, 0), 2: (0, -1), 3: (0, 1)} start_state 0 # 起始状态左上角goal_state n_states - 1 # 目标状态右下角编号15 # 2. 状态编号与坐标转换def state_to_pos(state): 将状态编号转为(row, col)坐标 return divmod(state, grid_size) def pos_to_state(row, col): 将(row, col)坐标转为状态编号 return row * grid_size col # 3. 环境转移函数def step(state, action): 执行动作返回(next_state, reward, done) if state goal_state: return state, 0, True # 已在目标无法再移动 row, col state_to_pos(state) dr, dc actions[action] # 动作带来的行列变化 # 边界裁剪不能走出网格 new_row min(max(row dr, 0), grid_size - 1) new_col min(max(col dc, 0), grid_size - 1) next_state pos_to_state(new_row, new_col) if next_state goal_state: reward 10 # 到达目标奖励10 done True else: reward -1 # 每步-1鼓励尽快到达 done False return next_state, reward, done # 4. Q 学习参数alpha 0.1 # 学习率gamma 0.9 # 折扣因子epsilon 0.2 # 探索率ε-greedy策略episodes 1000 # 训练回合数 # 5. 初始化 Q 表状态数 × 动作数Q np.zeros((n_states, n_actions)) # 6. ε-greedy 动作选择def choose_action(state): 根据ε-greedy策略选择动作 if np.random.rand() epsilon: return np.random.randint(n_actions) # 探索随机动作 return np.argmax(Q[state]) # 利用当前最优动作 # 7. 训练 Q 学习for episode in range(episodes): state start_state done False while not done: action choose_action(state) next_state, reward, done step(state, action) # Q-learning 更新公式 best_next_action_value np.max(Q[next_state]) # 下一状态最优值 td_target reward gamma * best_next_action_value # 时序差分目标 td_error td_target - Q[state, action] # TD误差 Q[state, action] alpha * td_error # 更新Q值 state next_state # 8. 输出每个状态下的最优策略用箭头表示action_symbols { 0: ↑, 1: ↓, 2: ←, 3: →} print(学习到的策略)for state in range(n_states): if state goal_state: print(G, end ) # 目标格子显示G else: best_action np.argmax(Q[state]) print(action_symbols[best_action], end ) # 每行结束换行 if (state 1) % grid_size 0: print()输出示意学习到的策略→ ↓ ↓ ↓ → → → ↓ → → → ↓ → → → G这段代码体现了 Q 学习的基本工作流• 定义状态空间和动作空间• 定义环境转移函数 step()• 初始化 Q 表• 使用 ε-greedy 策略选择动作• 执行动作并获得奖励• 根据 Q 学习公式更新 Q 值• 训练结束后从 Q 表中提取策略训练后输出的箭头表示每个位置下智能体认为最值得选择的动作。由于存在随机探索不同运行结果可能略有差异。九、Python 实现加入 ε 衰减在实际训练中常常希望智能体前期多探索后期多利用。因此可以加入 ε 衰减机制。下面是在前面代码基础上修改后的训练部分。import numpy as np # 数值计算库 grid_size 4 # 网格边长4x4n_states grid_size * grid_size # 状态数16n_actions 4 # 动作数上下左右 # 动作映射0上1下2左3右actions { 0: (-1, 0), 1: (1, 0), 2: (0, -1), 3: (0, 1)} start_state 0 # 起点左上角goal_state n_states - 1 # 目标右下角编号15 def state_to_pos(state): 状态编号 → (row, col) return divmod(state, grid_size) def pos_to_state(row, col): (row, col) → 状态编号 return row * grid_size col def step(state, action): 执行动作返回(next_state, reward, done) if state goal_state: return state, 0, True # 已在目标 row, col state_to_pos(state) dr, dc actions[action] # 边界裁剪不能走出网格 new_row min(max(row dr, 0), grid_size - 1) new_col min(max(col dc, 0), grid_size - 1) next_state pos_to_state(new_row, new_col) if next_state goal_state: return next_state, 10, True # 到达目标奖励10回合结束 return next_state, -1, False # 非目标奖励-1继续 alpha 0.1 # 学习率gamma 0.9 # 折扣因子episodes 1000 # 训练回合数 # ε-greedy 探索参数初始ε1.0逐步衰减到0.05epsilon 1.0epsilon_min 0.05epsilon_decay 0.995 Q np.zeros((n_states, n_actions)) # Q表初始化 def choose_action(state, epsilon): ε-greedy动作选择 if np.random.rand() epsilon: return np.random.randint(n_actions) # 探索 return np.argmax(Q[state]) # 利用 rewards_per_episode [] # 记录每回合总奖励 for episode in range(episodes): state start_state done False total_reward 0 while not done: action choose_action(state, epsilon) next_state, reward, done step(state, action) # Q-learning 更新公式 td_target reward gamma * np.max(Q[next_state]) td_error td_target - Q[state, action] Q[state, action] alpha * td_error state next_state total_reward reward # 衰减探索率 epsilon max(epsilon_min, epsilon * epsilon_decay) rewards_per_episode.append(total_reward) print(最终 epsilon, epsilon)print(最后 10 个回合奖励, rewards_per_episode[-10:]) print(学习到的策略)action_symbols { 0: ↑, 1: ↓, 2: ←, 3: →} # 输出策略网格G表示目标for state in range(n_states): if state goal_state: print(G, end ) else: print(action_symbols[np.argmax(Q[state])], end ) if (state 1) % grid_size 0: print()输出示意最终 epsilon 0.05最后 10 个回合奖励 [5, 5, 5, 5, 5, 4, 3, 5, 5, 3]学习到的策略↓ ↓ → ↓ → → → ↓ → → → ↓ → → → G这段代码增加了三个参数• epsilon初始探索率• epsilon_min最小探索率• epsilon_decay探索率衰减系数在训练早期epsilon 较大智能体会频繁随机探索随着训练进行epsilon 逐渐减小智能体更多利用已经学到的 Q 表。这种方式通常比固定 ε 更符合强化学习训练过程。十、Q 学习的适用场景与主要局限1、适用场景Q 学习适合以下情况• 问题可以表示为状态、动作和奖励• 状态空间和动作空间相对较小• 可以通过反复尝试获得经验• 不知道环境完整转移规则• 希望学习长期收益较高的决策策略• 任务可以被分解为一系列离散决策典型例子包括• 网格世界路径规划• 简单游戏智能体• 小规模控制问题• 离散动作决策任务• 强化学习入门实验Q 学习非常适合用来理解强化学习的基本思想因为它把价值函数直接存储在 Q 表中逻辑清晰更新公式直观。2、主要优势Q 学习的主要优势包括• 原理清晰易于理解• 不需要已知环境模型• 可以通过试错逐步学习• 适合离散状态和离散动作任务• 能学习长期回报而不是只看即时奖励• 是理解深度 Q 网络DQN的基础Q 学习的重要意义不只在于它本身能解决简单任务更在于它提供了强化学习中“价值估计—策略改进”的核心框架。3、主要局限Q 学习也有明显局限• 依赖离散状态和离散动作• 状态空间过大时Q 表会变得非常庞大• 连续状态问题难以直接使用表格 Q 学习• 探索不足时可能学不到好策略• 奖励设计不合理时学习结果可能偏离预期• 收敛速度可能较慢• 对学习率、折扣因子和探索率比较敏感例如如果状态数量为 10000动作数量为 10那么 Q 表就需要存储 100000 个值。如果状态是图像、语音或复杂传感器输入表格 Q 学习就很难直接使用。4、与 DQN 的关系深度 Q 网络Deep Q-NetworkDQN可以看作 Q 学习的深度学习扩展。图 8表格 Q 学习与 DQN 的关系表格 Q 学习直接存储而 DQN 使用神经网络近似 Q 函数其中• θ 表示神经网络参数• 输入可以是复杂状态如图像或高维向量• 输出可以是各个动作的 Q 值可以简单理解为• Q 学习适合小规模离散状态空间• DQN 适合更复杂、高维的状态空间• DQN 的核心思想仍然来自 Q 学习的贝尔曼更新因此掌握 Q 学习是理解深度强化学习的重要基础。 小结Q 学习通过学习状态—动作价值函数 Q(s, a)让智能体在与环境互动中逐步掌握更优决策。它基于贝尔曼更新用 ε-greedy 平衡探索与利用适合离散状态和动作任务是理解强化学习和 DQN 的基础。“点赞有美意赞赏是鼓励”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2605656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…