RL— 深度强化学习简介

news2024/11/15 23:48:17

一、说明

        深度强化学习是关于从我们看到和听到的东西中采取最好的行动。不幸的是,强化学习强化学习在学习概念和术语方面存在很高的障碍。在本文中,我们将介绍深度强化学习,并概述一般情况。然而,我们不会回避方程式和术语。它们提供了更深入地理解概念的基础知识。我们不会呼吁您只需要 20 行代码即可解决 RL 问题。官方答案应该是一个!但我们将努力使它平易近人。

        在大多数人工智能主题中,我们创建数学框架来解决问题。对于RL,答案是马尔可夫决策过程(MDP)。这听起来很复杂,但它产生了一个简单的框架来模拟复杂的问题。代理(例如人类)观察环境并采取行动奖励会发放,但可能不经常且延迟。很多时候,长期延迟的奖励使得解开信息和追溯哪些行为序列对奖励做出了贡献变得非常困难。

        马尔可夫决策过程(MDP)包括:

来源:左、右

MDP 中的状态可以表示为原始图像。

AlphaGO & Atari Seaquest

或者对于机器人控制,我们使用传感器来测量关节角度、速度和末端执行器姿势:

  • 动作可以是国际象棋游戏中的移动,也可以是移动机械臂或操纵杆。
  • 对于围棋游戏,奖励非常稀少:如果我们赢了,奖励为 1,如果我们输了,则奖励为 -1。有时,我们会更频繁地获得奖励。在雅达利Seaquest游戏中,每当我们击中鲨鱼时,我们都会得分。
  • 如果折扣系数小于 1,则折扣系数会折扣未来的奖励。未来赚到的钱通常具有较小的当前价值,我们可能需要它纯粹是出于技术原因,以便更好地收敛解决方案。

  • 我们可以永久推出操作,也可以将体验限制在 N 个时间步长内。这称为地平线。

转换功能是系统动态。它预测采取行动后的下一个状态。它被称为模型,当我们稍后讨论基于模型的 RL 时,它起着重要作用。

公约

RL中的概念来自许多研究领域,包括控制理论。在不同的上下文中使用不同的表示法。不幸的是,在阅读 RL 材料时,这是不可避免的。因此,让我们在混淆之前先解决这个问题。状态可以写成 s 或 x,动作可以写成 a 或 u操作控制相同。我们可以最大化回报或最小化成本,这些成本只是彼此的负数。符号可以是大写或小写。

二、策略

        在RL,我们的重点是找到最佳策略。 策略告诉我们如何从特定状态采取行动。

        与深度学习方法中的权重一样,此策略可以通过 θ 进行参数化

我们希望找到一项能够做出最有价值的决策的政策:

在现实生活中,没有什么是绝对的。因此,我们的政策可以是确定性的,也可以是随机的。对于随机指标,策略输出概率分布。

最后,让我们把我们的目标放在一起。在强化学习中,我们希望找到一系列最大化预期回报或最小化成本的操作。

但是有很多方法可以解决这个问题。例如,我们可以

  • 分析达到某种状态或采取特定行动(即价值学习)有多好,
  • 使用模型查找具有最大奖励的操作(基于模型的学习),或
  • 直接派生策略以最大化奖励(策略梯度)。

我们很快将介绍所有这些方法。

三、表示法

        但是,如果您想先进一步阐述 RL 中的术语和符号,此表应该会有所帮助。

从源代码修改

四、基于模型的强化学习

        直观地说,如果我们知道游戏规则以及每一步的成本,我们可以找到最小化成本的行动。模型 p(系统动力学)预测执行操作后的下一个状态。在数学上,它被表述为概率分布。在本文中,模型可以写为 p 或 f

        让我们用推车杆的例子来演示模型的想法。p 对采取行动后极点的角度进行建模。

这是上面示例的下一个时间步中 θ 的概率分布输出。

该模型描述了物理定律。但模型可能只是国际象棋游戏的规则。基于模型的强化学习的核心思想是 使用模型和成本函数来定位动作的最佳路径(确切地说,是状态和动作的轨迹)。

让我们进入另一个例子。在围棋游戏中,模型是游戏规则。根据此规则,我们搜索可能的动作并找到赢得游戏的行动。当然,搜索空间太大,我们需要更智能地搜索。

阿尔法戈

在基于模型的强化学习中,我们使用模型和成本函数来找到状态和动作的最佳轨迹最优控制)。

有时,我们可能不知道模型。但这并不排除我们学习它们。事实上,我们可以使用深度学习来模拟来自样本轨迹的复杂运动,或者局部近似它们。

下面的视频很好地演示了机器人使用基于模型的RL执行任务。机器人不是直接对机器人手臂进行编程,而是训练20分钟来学习每项任务,主要是自己。完成后,机器人应该处理以前没有训练过的情况。我们可以在物体周围移动或改变锤子的抓握,机器人应该设法成功完成任务。

任务听起来很简单。但它们并不容易解决。我们经常进行近似以使其更容易。例如,我们将系统动力学近似为线性,成本函数近似为二次方程。

然后,我们找到在遵守模型的同时最小化成本的操作。

有已知的优化方法,如LQR来解决这种目标。为了转向非线性系统动力学,我们可以应用迭代使用 LQR 的 iLQR 来找到类似于牛顿优化的最佳解。所有这些方法都很复杂,计算量很大。您可以在此处找到详细信息。但对于我们的上下文,我们只需要知道给定成本函数和模型,我们可以找到相应的最优操作。

与其他RL方法相比,基于模型的RL具有很强的竞争优势,因为它具有样品效率。许多模型可以用较少的样本在本地近似,轨迹规划不需要进一步的样本。如果物理仿真需要时间,则节省的成本是巨大的。因此,它在机器人控制中很受欢迎。使用其他 RL 方法,相同的训练可能需要数周时间。

让我们更详细地介绍这个过程。以下是MPC(模型预测控制),它运行随机或受过教育的策略来探索空间以适合模型。然后,在步骤 3 中,我们使用 iLQR 来规划最佳控件。但我们只执行计划中的第一个操作。我们再次观察状态并重新规划轨迹。这使我们能够在需要时采取纠正措施。

下图总结了该流。我们观察环境并提取状态。我们拟合模型并使用轨迹优化方法来规划我们的路径,该路径由每个时间步所需的动作组成。

五、价值学习

        接下来,我们进入另一种主要的强化学习方法,称为价值学习。在玩围棋游戏时,即使游戏规则很好理解,也很难计划下一个获胜步骤。可能性的指数级增长使得它太难解决。当围棋冠军玩围棋游戏时,他们会评估一个动作有多好,以及达到某个棋盘位置有多好。假设我们有一个备忘单,对每个州进行评分:

        我们可以简单地查看备忘单,找到下一个最有价值的状态并采取相应的行动。

        价值函数 V(s) 衡量保单下某个州的预期折扣奖励。直观地说,它衡量您根据特定政策从特定州获得的总奖励。

        在我们的推车杆示例中,我们可以使用推杆熬夜时间来衡量奖励。在下面,与 s1 相比,在状态 s2 中保持杆直立的机会更大(最好在下方左侧的位置而不是右侧)。对于大多数策略,左侧的状态可能具有更高的值函数。

        那么如何找出V呢?一种方法是蒙特卡洛方法。我们运行政策并播放整集直到最后,以观察总奖励。例如,我们计算杆子保持多长时间。然后我们有多个蒙特卡罗部署,我们平均 V 的结果。

        有几种方法可以找到相应的最佳策略。在政策评估中,我们可以从一个随机的政策开始,评估每个州的好坏。经过多次迭代,我们使用 V(s) 来决定下一个最佳状态。然后,我们使用模型来确定引导我们到达那里的行动。对于围棋游戏来说,这很简单,因为游戏规则是已知的。

        或者,在每次策略评估之后,我们都会根据价值函数改进策略。我们将继续进行评估和完善。最终,我们将达到最佳策略。这称为策略迭代

从源代码修改

        但是如果我们没有模型,就会有问题。我们不知道什么行动可以把我们带到目标状态。

        值函数不是无模型方法。我们需要一个模型来做决定。但作为一个重要的脚注,即使模型未知,值函数仍然有助于补充其他不需要模型的RL方法。

使用动态规划进行价值迭代

除了蒙特卡罗方法之外,我们还可以使用动态规划来计算 V。我们采取行动,观察奖励,并用下一个状态的 V 值计算它:

确切的公式应该是:

如果模型未知,我们通过抽样计算 V。我们执行操作并观察奖励和下一个状态。

六、功能拟合

        但是,对于许多问题,为每个状态维护 V 是不可行的。为了解决这个问题,我们使用监督学习来训练一个近似V的深度网络。

        上面的y是目标值,我们可以使用蒙特卡罗方法来计算它。

        否则,我们可以应用动态规划概念并使用一步式前瞻。这称为时间差TD。

        我们采取单个操作,并使用观察到的奖励和下一个状态的 V 值来计算 V(s)。

        蒙特卡洛方法是准确的。但对于随机策略或随机模型,每次运行可能会有不同的结果。所以方差很大。TD考虑的更新其价值的行动要少得多。所以方差很低。但至少在早期训练中,偏见非常高。高偏差给出错误的结果,但高方差使模型很难收敛。在实践中,我们可以将蒙特卡洛和TD与不同的k步展望结合起来,形成目标。这平衡了偏差和方差,可以稳定训练。

七、操作值函数

        那么,我们可以在没有模型的情况下使用价值学习概念吗?是的,我们可以通过对操作而不是状态进行评分来避免模型。行动-价值函数 Q(s, a) 衡量采取行动的预期折扣奖励。权衡是我们有更多的数据需要跟踪。对于每个状态,如果我们可以采取 k 个操作,就会有 k 个 Q 值。

        为了获得最佳结果,我们采取具有最高Q值的操作。

        如图所示,我们不需要模型来找到最佳操作。 因此,行动价值学习是无模型的。下面哪个动作子的Q值更高?直观地说,在下面的状态下向左移动应该比向右移动具有更高的值。

        在深度学习中,当特征以零为中心时,梯度下降效果更好。直观地说,在强化学习中,绝对奖励可能不如行动与平均行动相比有多好那么重要。这就是优势函数A的概念。在许多RL方法中,我们使用A而不是Q

        其中 A 是平均操作的预期奖励。回顾一下,以下是所有定义:

八、Q 学习

        那么我们如何学习Q值呢?最流行的方法之一是通过以下步骤进行 Q 学习:

  1. 我们对一个动作进行采样。
  2. 我们观察了奖励和下一个状态。
  3. 我们采取最高 Q 的行动。

然后我们再次应用动态规划来迭代计算 Q 值函数:

这是使用函数拟合进行 Q 学习的算法。下面的步骤 2 通过使用时间差值来减少方差。与蒙特卡洛方法相比,这也提高了采样效率,后者在发作结束前采集样品。

从源代码修改

探索在RL中非常重要。没有探索,你永远不会知道未来有什么更好。但如果做得过头,我们就是在浪费时间。在Q-learning中,我们有一个探索策略,如epsilon-greedy,用于选择在步骤1中采取的行动。我们选择具有最高Q值的动作,但我们允许选择其他随机动作的机会很小。Q 初始化为零。因此,在早期训练中没有突出的具体行动。随着训练的进行,选择更有希望的行动,训练从探索转向开发。

九、深度 Q 网络 DQN

        不幸的是,Q-learning在深度学习中不是很稳定。在本节中,我们最终将所有内容放在一起,并介绍DQN,该DQN仅通过访问图像帧即可在玩某些Atari游戏时击败人类。

        DQN是Q学习的典型代表,使用深度网络来近似Q.我们使用监督学习来拟合Q值函数。我们想复制监督学习的成功,但RL是不同的。在深度学习中,我们对输入样本进行随机化,因此输入类在训练批次中非常平衡且非常稳定。在 RL 中,随着我们的探索,我们的搜索效果越好。因此,我们搜索的输入空间和操作在不断变化。此外,正如我们所知道的,我们更新了Q的目标值。这是个坏消息。输入和输出都经常更改。

        这使得学习Q值近似器变得非常困难。DQN引入了体验回放和目标网络来减缓变化,这样我们就可以逐渐学习Q。体验回放将最后一百万的状态操作奖励存储在重播缓冲区中。我们用来自这个缓冲区的批次随机样本训练 Q。因此,训练样本是随机的,其行为更接近深度学习中的监督学习。

        此外,我们有两个网络来存储 Q 的值。一个不断更新,而第二个,目标网络,每隔一段时间从第一个网络同步一次。我们使用目标网络来检索 Q 值,以便目标值的更改波动性较小。这是感兴趣的人的目标。D 是重放缓冲区,θ- 是目标网络。

        DQN允许我们使用价值学习在更稳定的训练环境中解决RL方法。

十、策略梯度

        到目前为止,我们已经介绍了两种主要的强化学习方法:基于模型和价值学习。基于模型的强化学习使用模型和成本函数来查找最佳路径。价值学习使用 V 或 Q 值来推导出最佳策略。接下来,我们将介绍第三种主要的 RL 方法,也是 RL 中流行的方法之一。策略梯度方法侧重于策略。

        我们的许多动作,特别是人类运动控制,都非常直观。我们观察并采取行动,而不是彻底计划或取样以获得最大回报。

        在推车杆的例子中,我们可能不知道物理原理,但是当杆子向左下降时,我们的经验告诉我们向左移动。根据观察值确定操作比理解模型要容易得多。

        这种类型的RL方法是基于策略的,我们直接对由θ参数化的策略进行建模。

        策略梯度的概念非常简单。对于奖励更好的行动,我们使其更有可能发生(反之亦然)。策略梯度的计算公式为:

        我们使用此梯度通过梯度上升来更新策略。即,我们向奖励增加幅度最大的方向改变政策。

        让我们仔细看看政策梯度。上面红色下划线是最大可能性。它衡量在特定策略下采取行动的可能性。当我们将其与优势函数相乘时,我们会更改策略以支持奖励大于平均操作的操作。反之亦然,如果情况没有好转,我们会减少机会。

        但是,在做出这样的政策改变时,我们需要非常小心。梯度法是一阶导数法。如果奖励函数具有陡峭的曲率,则不太准确。如果我们的政策变化过于激进,估计的政策改善可能太远,以至于该决定可能是一场灾难。

图片来源

        为了解决这个问题,我们强加了一个信任区域。我们只选择此区域内的最佳控制。通过建立潜在误差的上限,我们知道在我们过于乐观之前我们可以走多远,潜在的错误会杀死我们。在信任区域内,我们有合理的保证,新政策会更好。在信任区域之外,赌注就落空了。如果我们强迫它,我们可能会降落在更糟糕的状态并破坏训练进度。TRPO和PPO是使用信任区域概念来改善策略模型收敛的方法。

十一、演员-评论家法

        策略梯度方法使用大量样本来达到最佳解决方案。每次更新策略时,我们都需要重新采样。与其他深度学习方法类似,计算模型需要多次迭代。它的趋同往往是一个主要问题。我们可以使用更少的样本来计算策略梯度吗?我们能否进一步减小 的方差以使梯度的波动性更小?

        RL 方法很少相互排斥。我们混合不同的方法以相互补充。演员-批评家将策略梯度与函数拟合相结合。在参与者-批评者方法中,我们使用参与者对策略进行建模,使用批评者对 V 进行建模。通过引入批评者,我们减少了每次策略更新要收集的样本数量。我们不会在剧集结束之前收集所有样本。这种时间差分技术还可以减少方差。

        参与者-批评家的算法与策略梯度法非常相似。在下面的步骤 2 中,我们将拟合 V 值函数,即注释器。在第 3 步中,我们使用 TD 计算 A。在第 5 步中,我们将更新我们的策略,即参与者。

十二、指南策略搜索

演员兼评论家将价值学习与政策梯度相结合。同样,我们可以将基于模型和基于策略的方法混合在一起。我们使用基于模型的RL来改进控制器,并在机器人上运行控制器以进行移动。控制器根据轨迹优化的结果确定最佳操作。

我们观察轨迹,同时,我们使用生成的轨迹使用监督学习来训练策略(下图右图)。

从源代码修改

        当我们有一个控制器时,为什么要训练策略?无论如何,它们在预测状态的行为方面是否有相同的目的?这就涉及到模型还是政策更简单的问题。

        基于模型的学习可以产生相当准确的轨迹,但对于模型复杂且训练不足的区域,可能会产生不一致的结果。它累积的错误也会造成伤害。如果策略更简单,则应该更容易学习和概括。我们可以使用监督学习来消除基于模型的轨迹中的噪声,并发现它们背后的基本规则。

        但是,策略梯度类似于具有更智能和有根据的搜索的试错法。在看到任何有意义的动作之前,训练通常有一个很长的热身期。

        因此,我们在引导式政策搜索中结合了它们的优势。我们使用基于模型的强化学习来更好地指导搜索。然后,我们使用轨迹来训练一个可以更好地泛化的策略(如果策略对于任务来说更简单)。

        我们在交替的步骤中培训控制器和策略。为了避免激进的更改,我们再次在控制器和策略之间应用信任区域。因此,策略和控制器是紧密学习的。这有助于训练更好地收敛。

十三、深度学习

        深度学习在强化学习中的作用是什么?如前所述,深度学习是眼睛和耳朵。我们应用CNN从图像中提取特征,并应用RNN来提取语音。

        深度网络也是一个很好的函数逼近器。我们可以使用它来近似我们在 RL 中需要的任何函数。这包括 V 值、Q 值、策略和模型。

        部分可观察的 MDP

        对于许多问题,物体可能会被其他人暂时阻碍。要构建环境的状态,我们需要的不仅仅是当前图像。对于部分可观察的MDP,我们从图像的最近历史中构建状态。这可以通过将RNN应用于图像序列来完成。

十四、使用哪些方法?

        我们介绍了三大类RL方法。我们可以混合和匹配方法以相互补充,并且每种方法都进行了许多改进。哪些方法是最好的?

        这不可能在单个部分中解释。每种方法都有其优点和缺点。到目前为止,基于模型的RL具有最佳的采样效率,但在当前技术状态下,无模型RL可能具有更好的最佳解决方案。有时,我们可以更像时尚来看待它。什么是最好的将取决于你问的年份?研究取得进展,失宠的方法经过一些改进后可能会有新的生命线。实际上,我们混合搭配RL问题。所需的方法受到约束、任务上下文和研究进度的强烈限制。例如,机器人控制强烈支持具有高样品效率的方法。物理模拟不能轻易被计算机模拟所取代。但是,在某些问题领域,我们现在可以弥合差距或更好地引入自学。简而言之,我们仍然处于一个高度发展的领域,因此还没有黄金指南。我们只能说在当前状态下,在任务的约束和上下文下,什么方法可能更好。请继续关注,我们将对此进行更详细的讨论。

十五、思潮

        深度强化学习是关于我们如何做出决定。在本文中,我们介绍了三个基本算法组,即基于模型的RL,价值学习和策略梯度。这仅仅是一个开始。如何像人类一样有效地学习仍然具有挑战性。坏消息是,商业应用还有很大的改进空间。好消息是这个问题太难了,但很重要,不要指望这个主题很无聊。在本文中,我们将探讨其挑战的基本但几乎没有涉及以及已提出的许多创新解决方案。它是人工智能中最困难的领域之一,但也可能是日常生活中最困难的部分之一。对于那些想要探索更多内容的人,以下是详细介绍不同 RL 领域的文章。

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

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

相关文章

Linux虚拟机中安装MySQL5.6.34

目录 第一章、xshell工具和xftp的使用1.1)xshell下载与安装1.2)xshell连接1.3)xftp下载安装和连接 第二章、安装MySQL5.6.34(不同版本安装方式不同)2.1)关闭防火墙,传输MySQL压缩包到Linux虚拟机2.2&#x…

canvas实现图片平移,缩放的例子

最近有个水印预览的功能&#xff0c;需要用到canvas 绘制&#xff0c;canvas用的不是很熟&#xff0c;配合chatAI 完成功能。 效果如下 代码如下 原先配置是响应式的&#xff0c;提出来了就不显示操作了&#xff0c;模拟值都写死的 界面给大家参考阅读。 <!DOCTYPE html…

springboot基础--springboot配置说明

一、springboot中的配置文件 1、springboot为什么还需要用配置文件 方便我们修改springboot默认的配置;我们有其他的信息需要保存在配置文件中; 2、springboot中的配置文件有哪些 properties配置文件;yml配置文件; 3、springboot中的配置文件使用中注意事项 文件放入在sr…

黑客技术(网络安全)学习笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…

Java版本spring cloud + spring boot企业电子招投标系统源代码+ 支持二次开+定制化服务

&#xfeff; 电子招标采购软件 解决方案 招标面向的对象为供应商库中所有符合招标要求的供应商&#xff0c;当库中的供应商有一定积累的时候&#xff0c;会节省大量引入新供应商的时间。系统自动从供应商库中筛选符合招标要求的供应商&#xff0c;改变以往邀标的业务模式。招…

在当下Android 市场下行时,能拿到offer实属不易~

作者&#xff1a;六哥 如今 Android 已不是前几年那么风光&#xff0c;但它的市场还在&#xff0c;“它”还是那个Android&#xff0c;还是那个我赖以生存、夜以继日陪伴着我的朋友。所以&#xff0c;我永远不会抛弃它。 好了&#xff0c;情感已经抒发的差不多了&#xff0c;我…

SecureCRT配置id_rsa和id_rsa格式问题

选项->会话选项 在弹出的窗口中继续&#xff1a; 连接->SSH2->公钥->属性 在属性会话框中证书文件里输入id_rsa路径&#xff1a; 一般情况下确定就可以了&#xff0c;但可能提示&#xff1a; Could not load the public key from the private key file使用ssh…

学习笔记23 stack和queue

一、stack概念 stack是一种按先进后出方法存放和取出数据的数据结构 java提供了一个stack类&#xff0c;其中有以下几种方法&#xff1a; 看个例子&#xff1a; import java.util.*;/*** This program demonstrates the java.util.Stack class.*/public class StackDemo1 {p…

Android 创建 Gradle Task 自动打包并上传至蒲公英

前言 Android 项目日常开发过程中&#xff0c;经常需要打包给到非开发人员验收或调试&#xff0c;例如测试阶段&#xff0c;就要经常基于测试服务器地址&#xff0c;打包安装包&#xff0c;给到组内测试人员进行测试&#xff0c;并且 BUG 修复完成之后也需要再次打包给到测试人…

极验4代滑块验证码破解(补环境直接强暴式拿下)

目录 前言一、分析二、验证总结借鉴 前言 极验第四代好像简单了特别多&#xff0c;没有什么技巧&#xff0c;环境党直接5分钟拿下。 网址: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNoYS1kZW1v 一、分析 直接去它官网&#xff0c;滑动滑块打开控制台瞅瞅 可以看…

Flask学习笔记_异步论坛(四)

Flask学习笔记_异步论坛&#xff08;四&#xff09; 1.配置和数据库链接1.exts.py里面实例化sqlalchemy数据库2.config.py配置app和数据库信息3.app.py导入exts和config并初始化到app上 2.创建用户模型并映射到数据库1.models/auth.py创建用户模型2.app.py导入模型并用flask-mi…

解决Debian10乱码以及远程连接ssh的问题

文章目录 解决Debian10乱码Debian10配置ssh 解决Debian10乱码 下载locales apt-get install locales配置语言 dpkg-reconfigure locales输入上述命令后会进入到以下页面【空格为选中&#xff0c;回车下一个页面】 在这个页面里我们按空格选中如图的选项&#xff0c;然后回…

安科瑞智慧空开微型断路器在银行的应用-安科瑞黄安南

应用场景 智能微型断路器与智能网关组合应用于末端回路 功能 1.计量功能&#xff1a;实时上报电压、电流、功率、电能、漏电、温度、频率等电参量&#xff1b; 2.报警功能&#xff1a;过压报警、欠压报警、过流报警、过载报警、漏电报警、超温报警、三相电缺相报警&#xff…

Jetson Docker 编译 FFmpeg 支持硬解nvmpi和cuvid

0 设备和docker信息 设备为NVIDIA Jetson Xavier NX&#xff0c;jetpack版本为 5.1.1 [L4T 35.3.1] 使用的docker镜像为nvcr.io/nvidia/l4t-ml:r35.2.1-py3,详见https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 使用下列命令拉取镜像: sudo docker pull nvcr…

windows查看 jar包进程号指令

1 打开cmd 2 : 9898 jar包对应的端口号 netstat -aon|findstr 9898 3 &#xff1a;打开任务管理器 根据搜索出的23700 找到对应进程

【C++】STL——vector的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

文章目录 1.模拟实现vector1.1构造函数1.2迭代器1.3运算符重载1.4扩容函数1.5增删查改 1.模拟实现vector vector使用文章 1.1构造函数 析构函数 在C中&#xff0c;vector是一个动态数组容器&#xff0c;可以根据需要自动调整大小。vector类提供了几个不同的构造函数来创建和初…

gradle项目上传项目依赖到远程仓库

gradle项目上传项目依赖到远程仓库 第一步&#xff1a;在需要上传的项目的bulid.gradle下添加maven插件&#xff0c;并配置连接远程仓库的信息以及项目的三要素信息&#xff0c;如下所示 dependencies {implementation org.mapstruct:mapstruct:1.4.2.Final } apply plugin: …

Linux - make/Makefifile

0.背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需…

【Spring】Spring之循环依赖底层源码解析

什么是循环依赖 A依赖了B&#xff0c;B依赖了A。 示例&#xff1a; // A依赖了B class A{public B b; }// B依赖了A class B{public A a; }其实&#xff0c;循环依赖并不是问题&#xff0c;因为对象之间相互依赖是很正常的事情。示例&#xff1a; A a new A(); B b new B…

5分钟快手入门laravel邮件通知

第一步&#xff1a; 生成一个邮件发送对象 php artisan make:mail TestMail 第二步&#xff1a; 编辑.env 添加/修改&#xff08;没有的key则添加&#xff09; MAIL_DRIVERsmtp MAIL_HOSTsmtp.163.com &#xff08;这里用163邮箱&#xff09; MAIL_PORT25 &#xff08;163邮箱…