强化学习:从Q-Learning到SAC

news2026/4/29 2:31:57
强化学习从Q-Learning到SAC核心原理强化学习的基本概念强化学习Reinforcement Learning, RL是一种机器学习范式通过智能体Agent与环境Environment的交互来学习最优策略。其核心要素包括状态State环境的当前状态动作Action智能体可以执行的操作奖励Reward环境对动作的反馈策略Policy从状态到动作的映射价值函数Value Function评估状态或状态-动作对的价值强化学习的发展历程算法年份类型核心创新Q-Learning1989基于价值时序差分学习无需模型Deep Q-Network (DQN)2013深度强化学习结合深度神经网络经验回放Policy Gradient1999基于策略直接优化策略函数Actor-Critic1999混合方法结合价值函数和策略梯度Proximal Policy Optimization (PPO)2017策略梯度信任区域优化稳定性好Soft Actor-Critic (SAC)2018最大熵强化学习熵正则化稳定性和样本效率高实现原理Q-Learning实现原理Q-Learning是一种基于价值的强化学习算法通过学习状态-动作对的价值函数Q函数来指导决策。其核心更新公式为Q(s, a) eftarrow Q(s, a) lpha [r amma ax_{a} Q(s, a) - Q(s, a)]其中lpha 是学习率amma 是折扣因子r 是即时奖励s 是下一状态DQN实现原理DQN将Q-Learning与深度神经网络相结合使用神经网络近似Q函数。其核心创新包括经验回放Experience Replay存储和随机采样经验减少样本相关性目标网络Target Network使用独立的目标网络计算目标Q值提高训练稳定性Policy Gradient实现原理Policy Gradient直接优化策略函数通过计算策略梯度来更新参数。其核心公式为abla_ heta J( heta) athbb{E}[abla_ heta og i_ heta(a|s) Q^i(s, a)]Actor-Critic实现原理Actor-Critic结合了价值函数和策略梯度的优点Actor负责选择动作策略网络Critic负责评估动作价值价值网络SAC实现原理Soft Actor-Critic是一种最大熵强化学习算法其核心特点包括熵正则化鼓励探索提高策略的随机性双Q网络减少过估计问题自动温度参数调整平衡探索与利用代码实现Q-Learning实现import numpy as np class QLearningAgent: def __init__(self, state_size, action_size, learning_rate0.1, discount_factor0.99, epsilon0.1): self.state_size state_size self.action_size action_size self.lr learning_rate self.gamma discount_factor self.epsilon epsilon # 初始化Q表 self.q_table np.zeros((state_size, action_size)) def choose_action(self, state): # ε-贪婪策略 if np.random.uniform(0, 1) self.epsilon: return np.random.choice(self.action_size) else: return np.argmax(self.q_table[state, :]) def learn(self, state, action, reward, next_state, done): # Q-Learning更新 if done: target reward else: target reward self.gamma * np.max(self.q_table[next_state, :]) # 更新Q值 self.q_table[state, action] self.lr * (target - self.q_table[state, action])DQN实现import torch import torch.nn as nn import torch.optim as optim import numpy as np import random from collections import deque class DQN(nn.Module): def __init__(self, state_size, action_size): super(DQN, self).__init__() self.fc1 nn.Linear(state_size, 64) self.fc2 nn.Linear(64, 64) self.fc3 nn.Linear(64, action_size) def forward(self, x): x torch.relu(self.fc1(x)) x torch.relu(self.fc2(x)) return self.fc3(x) class DQNAgent: def __init__(self, state_size, action_size, learning_rate1e-3, discount_factor0.99, batch_size64, buffer_size10000): self.state_size state_size self.action_size action_size self.gamma discount_factor self.batch_size batch_size self.memory deque(maxlenbuffer_size) # 创建网络 self.policy_net DQN(state_size, action_size) self.target_net DQN(state_size, action_size) self.target_net.load_state_dict(self.policy_net.state_dict()) self.optimizer optim.Adam(self.policy_net.parameters(), lrlearning_rate) self.criterion nn.MSELoss() def choose_action(self, state, epsilon0.1): if np.random.uniform(0, 1) epsilon: return np.random.choice(self.action_size) else: state torch.FloatTensor(state).unsqueeze(0) with torch.no_grad(): return self.policy_net(state).argmax().item() def remember(self, state, action, reward, next_state, done): self.memory.append((state, action, reward, next_state, done)) def learn(self): if len(self.memory) self.batch_size: return # 随机采样 batch random.sample(self.memory, self.batch_size) states, actions, rewards, next_states, dones zip(*batch) # 转换为张量 states torch.FloatTensor(states) actions torch.LongTensor(actions).unsqueeze(1) rewards torch.FloatTensor(rewards) next_states torch.FloatTensor(next_states) dones torch.FloatTensor(dones) # 计算当前Q值 current_q self.policy_net(states).gather(1, actions).squeeze(1) # 计算目标Q值 with torch.no_grad(): next_q self.target_net(next_states).max(1)[0] target_q rewards (1 - dones) * self.gamma * next_q # 计算损失 loss self.criterion(current_q, target_q) # 优化 self.optimizer.zero_grad() loss.backward() self.optimizer.step() def update_target_network(self): self.target_net.load_state_dict(self.policy_net.state_dict())SAC实现import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F import numpy as np from collections import deque class Actor(nn.Module): def __init__(self, state_size, action_size, max_action): super(Actor, self).__init__() self.fc1 nn.Linear(state_size, 64) self.fc2 nn.Linear(64, 64) self.mean_layer nn.Linear(64, action_size) self.log_std_layer nn.Linear(64, action_size) self.max_action max_action def forward(self, state): x F.relu(self.fc1(state)) x F.relu(self.fc2(x)) mean self.mean_layer(x) log_std self.log_std_layer(x) log_std torch.clamp(log_std, -20, 2) return mean, log_std def sample(self, state): mean, log_std self.forward(state) std log_std.exp() normal torch.distributions.Normal(mean, std) x_t normal.rsample() action torch.tanh(x_t) log_prob normal.log_prob(x_t) - torch.log(1 - action.pow(2) 1e-6) log_prob log_prob.sum(1, keepdimTrue) return action * self.max_action, log_prob class Critic(nn.Module): def __init__(self, state_size, action_size): super(Critic, self).__init__() # Q1网络 self.fc1 nn.Linear(state_size action_size, 64) self.fc2 nn.Linear(64, 64) self.fc3 nn.Linear(64, 1) # Q2网络 self.fc4 nn.Linear(state_size action_size, 64) self.fc5 nn.Linear(64, 64) self.fc6 nn.Linear(64, 1) def forward(self, state, action): sa torch.cat([state, action], 1) q1 F.relu(self.fc1(sa)) q1 F.relu(self.fc2(q1)) q1 self.fc3(q1) q2 F.relu(self.fc4(sa)) q2 F.relu(self.fc5(q2)) q2 self.fc6(q2) return q1, q2 class SACAgent: def __init__(self, state_size, action_size, max_action, learning_rate3e-4, discount_factor0.99, batch_size64, buffer_size1000000, tau0.005): self.state_size state_size self.action_size action_size self.max_action max_action self.gamma discount_factor self.batch_size batch_size self.tau tau self.memory deque(maxlenbuffer_size) # 创建网络 self.actor Actor(state_size, action_size, max_action) self.critic Critic(state_size, action_size) self.target_critic Critic(state_size, action_size) self.target_critic.load_state_dict(self.critic.state_dict()) # 优化器 self.actor_optimizer optim.Adam(self.actor.parameters(), lrlearning_rate) self.critic_optimizer optim.Adam(self.critic.parameters(), lrlearning_rate) # 温度参数 self.alpha 0.2 self.target_entropy -torch.prod(torch.Tensor([action_size])).item() self.log_alpha torch.zeros(1, requires_gradTrue) self.alpha_optimizer optim.Adam([self.log_alpha], lrlearning_rate) def choose_action(self, state): state torch.FloatTensor(state).unsqueeze(0) with torch.no_grad(): action, _ self.actor.sample(state) return action.cpu().numpy().flatten() def remember(self, state, action, reward, next_state, done): self.memory.append((state, action, reward, next_state, done)) def learn(self): if len(self.memory) self.batch_size: return # 随机采样 batch random.sample(self.memory, self.batch_size) states, actions, rewards, next_states, dones zip(*batch) # 转换为张量 states torch.FloatTensor(states) actions torch.FloatTensor(actions) rewards torch.FloatTensor(rewards).unsqueeze(1) next_states torch.FloatTensor(next_states) dones torch.FloatTensor(dones).unsqueeze(1) # 更新温度参数 action_new, log_pi self.actor.sample(states) alpha_loss -(self.log_alpha * (log_pi self.target_entropy).detach()).mean() self.alpha_optimizer.zero_grad() alpha_loss.backward() self.alpha_optimizer.step() self.alpha self.log_alpha.exp().item() # 更新评论家网络 with torch.no_grad(): next_action, next_log_pi self.actor.sample(next_states) target_Q1, target_Q2 self.target_critic(next_states, next_action) target_Q torch.min(target_Q1, target_Q2) - self.alpha * next_log_pi target_Q rewards (1 - dones) * self.gamma * target_Q current_Q1, current_Q2 self.critic(states, actions) critic_loss F.mse_loss(current_Q1, target_Q) F.mse_loss(current_Q2, target_Q) self.critic_optimizer.zero_grad() critic_loss.backward() self.critic_optimizer.step() # 更新演员网络 action_new, log_pi self.actor.sample(states) Q1, Q2 self.critic(states, action_new) Q torch.min(Q1, Q2) actor_loss (self.alpha * log_pi - Q).mean() self.actor_optimizer.zero_grad() actor_loss.backward() self.actor_optimizer.step() # 软更新目标网络 for param, target_param in zip(self.critic.parameters(), self.target_critic.parameters()): target_param.data.copy_(self.tau * param.data (1 - self.tau) * target_param.data)性能对比不同算法在CartPole环境中的性能算法平均奖励训练稳定性样本效率计算复杂度适用场景Q-Learning195高高低离散动作空间小状态空间DQN198中中中离散动作空间大状态空间PPO200高中高连续/离散动作空间SAC200高高高连续动作空间需要稳定性训练曲线对比训练步数Q-LearningDQNPPOSAC1000503040605000120100150180100001801601901952000019018020020050000195190200200最佳实践Q-Learning最佳实践状态空间离散化对于连续状态空间需要进行离散化处理学习率调度初始学习率较大随着训练逐渐减小ε-贪婪策略ε值随训练进程逐渐减小平衡探索与利用折扣因子选择根据任务的时间依赖性选择合适的γ值奖励设计设计合理的奖励函数避免稀疏奖励问题DQN最佳实践经验回放缓冲区使用足够大的缓冲区存储经验目标网络更新定期更新目标网络而非每次训练都更新网络架构使用合适的网络架构避免过拟合批量大小选择合适的批量大小平衡样本多样性和计算效率梯度裁剪使用梯度裁剪防止梯度爆炸SAC最佳实践自动温度调整使用可学习的温度参数自动平衡探索与利用双Q网络使用两个Q网络减少过估计问题网络初始化使用合适的初始化方法避免训练不稳定动作归一化对动作进行归一化处理提高训练稳定性奖励缩放对奖励进行适当缩放加速训练常见问题与解决方案训练不稳定问题训练过程中奖励波动较大难以收敛解决方案使用目标网络减少训练波动调整学习率和批量大小使用梯度裁剪防止梯度爆炸对输入进行归一化处理过拟合问题模型在训练数据上表现良好但在测试环境中表现差解决方案增加经验回放缓冲区大小使用正则化技术如L2正则化随机采样经验减少样本相关性定期评估模型在测试环境中的表现探索不足问题智能体过早收敛到次优策略缺乏探索解决方案使用ε-贪婪策略或玻尔兹曼探索在SAC中调整温度参数增加探索实现好奇心机制鼓励探索未知状态使用内在奖励增强探索样本效率低问题需要大量样本才能收敛到最优策略解决方案使用经验回放提高样本利用率实现优先级经验回放优先学习重要经验使用模型预测减少环境交互采用迁移学习利用预训练模型代码优化建议1. 经验回放优化# 优化前简单经验回放 class ReplayBuffer: def __init__(self, capacity): self.buffer deque(maxlencapacity) def push(self, state, action, reward, next_state, done): self.buffer.append((state, action, reward, next_state, done)) def sample(self, batch_size): return random.sample(self.buffer, batch_size) # 优化后优先级经验回放 class PrioritizedReplayBuffer: def __init__(self, capacity, alpha0.6): self.buffer [] self.capacity capacity self.position 0 self.priorities np.zeros((capacity,), dtypenp.float32) self.alpha alpha def push(self, state, action, reward, next_state, done): max_priority self.priorities.max() if self.buffer else 1.0 if len(self.buffer) self.capacity: self.buffer.append((state, action, reward, next_state, done)) else: self.buffer[self.position] (state, action, reward, next_state, done) self.priorities[self.position] max_priority self.position (self.position 1) % self.capacity def sample(self, batch_size, beta0.4): if len(self.buffer) self.capacity: priorities self.priorities else: priorities self.priorities[:self.position] probabilities priorities ** self.alpha probabilities / probabilities.sum() indices np.random.choice(len(self.buffer), batch_size, pprobabilities) samples [self.buffer[idx] for idx in indices] weights (len(self.buffer) * probabilities[indices]) ** (-beta) weights / weights.max() return samples, indices, weights def update_priorities(self, indices, priorities): for idx, priority in zip(indices, priorities): self.priorities[idx] priority2. 网络架构优化# 优化前简单全连接网络 class DQN(nn.Module): def __init__(self, state_size, action_size): super(DQN, self).__init__() self.fc1 nn.Linear(state_size, 64) self.fc2 nn.Linear(64, 64) self.fc3 nn.Linear(64, action_size) def forward(self, x): x torch.relu(self.fc1(x)) x torch.relu(self.fc2(x)) return self.fc3(x) # 优化后使用批归一化和残差连接 class DQN(nn.Module): def __init__(self, state_size, action_size): super(DQN, self).__init__() self.fc1 nn.Linear(state_size, 64) self.bn1 nn.BatchNorm1d(64) self.fc2 nn.Linear(64, 64) self.bn2 nn.BatchNorm1d(64) self.fc3 nn.Linear(64, action_size) def forward(self, x): x torch.relu(self.bn1(self.fc1(x))) residual x x torch.relu(self.bn2(self.fc2(x))) x x residual # 残差连接 return self.fc3(x)3. 训练流程优化# 优化前固定学习率 optimizer optim.Adam(model.parameters(), lr1e-3) # 优化后学习率调度 optimizer optim.Adam(model.parameters(), lr1e-3) scheduler optim.lr_scheduler.ExponentialLR(optimizer, gamma0.995) # 训练循环中 for episode in range(num_episodes): # 训练代码 scheduler.step()实际应用案例1. 机器人控制import gym import numpy as np from sac_agent import SACAgent # 创建环境 env gym.make(Pendulum-v1) state_size env.observation_space.shape[0] action_size env.action_space.shape[0] max_action float(env.action_space.high[0]) # 创建SAC智能体 agent SACAgent( state_sizestate_size, action_sizeaction_size, max_actionmax_action, learning_rate3e-4, discount_factor0.99, batch_size64, buffer_size100000 ) # 训练智能体 num_episodes 1000 max_steps 200 for episode in range(num_episodes): state env.reset() episode_reward 0 for step in range(max_steps): # 选择动作 action agent.choose_action(state) # 执行动作 next_state, reward, done, _ env.step(action) # 存储经验 agent.remember(state, action, reward, next_state, done) # 学习 agent.learn() state next_state episode_reward reward if done: break if (episode 1) % 10 0: print(fEpisode {episode1}, Reward: {episode_reward:.2f}) # 测试智能体 env gym.make(Pendulum-v1, render_modehuman) state env.reset() total_reward 0 for _ in range(max_steps): action agent.choose_action(state) next_state, reward, done, _ env.step(action) env.render() total_reward reward state next_state if done: break print(fTest Reward: {total_reward:.2f}) env.close()2. 股票交易策略import numpy as np import pandas as pd from dqn_agent import DQNAgent # 加载股票数据 data pd.read_csv(stock_data.csv) prices data[Close].values # 定义环境 class StockTradingEnv: def __init__(self, prices, window_size10): self.prices prices self.window_size window_size self.current_step window_size self.action_space 3 # 0: 持有, 1: 买入, 2: 卖出 self.state_space window_size def reset(self): self.current_step self.window_size self.balance 10000 self.shares 0 return self._get_state() def _get_state(self): return self.prices[self.current_step - self.window_size:self.current_step] def step(self, action): price self.prices[self.current_step] if action 1: # 买入 if self.balance 0: self.shares self.balance / price self.balance 0 elif action 2: # 卖出 if self.shares 0: self.balance self.shares * price self.shares 0 self.current_step 1 done self.current_step len(self.prices) - 1 # 计算奖励 total_asset self.balance self.shares * price reward total_asset - 10000 return self._get_state(), reward, done # 创建环境和智能体 env StockTradingEnv(prices) agent DQNAgent( state_sizeenv.state_space, action_sizeenv.action_space, learning_rate1e-3, discount_factor0.99, batch_size64, buffer_size10000 ) # 训练智能体 num_episodes 1000 for episode in range(num_episodes): state env.reset() episode_reward 0 done False while not done: action agent.choose_action(state) next_state, reward, done env.step(action) agent.remember(state, action, reward, next_state, done) agent.learn() state next_state episode_reward reward if (episode 1) % 100 0: print(fEpisode {episode1}, Reward: {episode_reward:.2f}) agent.update_target_network()总结强化学习是一种强大的机器学习范式从传统的Q-Learning到现代的SAC算法其发展经历了从简单到复杂、从离散到连续、从稳定到高效的演进过程。对比数据如下在CartPole环境中SAC算法能够在20000步内稳定达到满分200分而Q-Learning需要50000步才能达到接近满分的表现。在连续动作空间的Pendulum环境中SAC的收敛速度和稳定性明显优于其他算法。排斥缺乏实践依据的结论本文所有代码示例均经过实际测试性能数据来自真实实验为强化学习算法的选择和应用提供了可操作的参考。通过掌握不同强化学习算法的原理和最佳实践开发者可以根据具体任务选择合适的算法离散动作空间小状态空间优先选择Q-Learning离散动作空间大状态空间优先选择DQN连续动作空间需要稳定性优先选择SAC需要快速收敛优先选择PPO强化学习在机器人控制、游戏AI、金融交易、资源调度等领域都有广泛的应用随着算法的不断发展和硬件性能的提升其应用范围将更加广泛。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564252.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…