强化学习术语与超参数整理(PPO)

news2024/11/14 15:24:28

最近在isaac lab中使用各个强化学习框架做对比训练,算法都是用的PPO,但是每个框架里超参数名字都不太一样,各种叫法弄得都混乱了,而且对齐不好很难对比出结论,在这里系统整理一下。

Isaac Lab支持的强化学习框架介绍-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Vulcan_S/article/details/139470347?spm=1001.2014.3001.5502

通用参数

rollout

想象一下你正在玩一个电子游戏,比如《超级马里奥兄弟》。在这个游戏中,你(作为智能体)的目标是尽可能多地收集金币并到达终点。每当你做出一个动作(比如跳跃、左右移动),游戏环境就会给你一个反馈,告诉你是否得到了金币、是否碰到了敌人(这会让你失去生命),以及你当前的位置。

Rollout就是你在这个游戏中连续玩的一段过程。 比如说,你从游戏的开始玩到第一个关卡结束,或者从某个检查点开始玩直到你死亡或者达到某个特定条件。在这个过程中,你不断地观察游戏的状态(比如马里奥的位置、敌人的位置、金币的数量等),做出决策(选择动作),然后得到游戏的反馈(奖励或惩罚)。

在PPO(Proximal Policy Optimization,近端策略优化)算法中,rollout的作用就像是你给算法提供了一段“游戏录像”。这段录像记录了你在玩游戏时的所有状态、动作和奖励。算法会看着这段录像,思考你哪些地方做得好(得到了金币),哪些地方做得不好(碰到了敌人),然后尝试学习如何玩得更好。

具体来说,PPO算法会利用这段录像中的数据来评估你当前的策略(即你是如何根据游戏状态选择动作的)是否足够好。如果不够好,算法会尝试调整你的策略,以便在下次玩游戏时能够做出更好的决策。这个调整的过程就是所谓的“策略更新”。

但是,PPO算法非常聪明,它不会让你的策略一下子变得完全不同(因为这可能会导致你完全不知道怎么玩游戏了)。相反,PPO会逐步地、谨慎地调整你的策略,确保每次调整都不会让你的表现变得太差。这就是PPO算法中“近端”这个词的含义——它只关注于当前策略附近的微小调整。

Episode

在强化学习框架中,episode代表了一个完整的智能体(agent)与环境(environment)之间的交互序列。具体而言,一个episode始于智能体处于某个初始状态(或初始状态分布中的一个状态),随后智能体根据当前策略选择并执行一个动作,环境则基于该动作给出新的状态和一个相应的即时奖励。这一过程不断重复,直到满足某个终止条件,如达到最大步数限制、游戏结束或任务完成等。至此,一个episode结束,智能体与环境之间的本次交互序列也宣告完成。

episode的长度(即包含的transitions数量)会影响智能体的学习效率和性能。过短的episode可能无法提供足够的信息供智能体学习,而过长的episode则可能导致学习过程变得复杂和不稳定。

在诸如围棋、象棋或电子游戏等场景中,一个episode可以对应一局完整的游戏。智能体通过不断与游戏环境进行交互来学习如何获胜。

在机器人控制任务中,一个episode可以代表机器人完成一个指定任务的过程,如从起点移动到终点、抓取物体等。

Epochs

在强化学习中,epochs的概念并不像在监督学习中那样直接。在监督学习中,一个epoch指的是整个训练集被网络完全遍历一次的过程。但在强化学习中,由于数据集(或称为经验)是不断通过与环境交互动态生成的,因此很难定义一个明确的“整个训练集”。

然而,在深度强化学习中,我们可能会将训练过程划分为多个“迭代”或“周期”,其中每个迭代包含了一定数量的训练步骤或交互轮次。这些迭代可以看作是强化学习中的“epochs”的类似物,尽管它们并不完全等同于监督学习中的epochs。

PPO算法的工作过程分为两个阶段 

  1. 第一阶段:从零开始(Phase I: Let Policy Play to Gather Data)
    • 在这个阶段,策略(Policy)首先被用来“播放以收集数据”(play to gather data)。这意味着策略被放置在环境中,并执行动作以与环境交互,从而生成数据(即“轨迹”Trajectories)。
    • 接着,使用这些数据通过“监督学习”(Supervised Learning)和“复杂损失”(with complex loss)来“训练策略”。这里的监督学习可能指的是利用收集到的数据来优化策略,尽管在强化学习中,这通常不是传统意义上的监督学习,而是利用数据来估计梯度并更新策略的参数。
    • 这个阶段是一个迭代过程(Iterations),通过多次迭代来不断改进策略。
  2. 第二阶段:训练策略(Phase II: Train Policy on Gathered Data)
    • 在收集了足够的数据之后,进入第二阶段。在这一阶段,利用在第一阶段收集到的数据来“训练策略”。
    • 这里的“数据集”由多个“观测次数”(Episodes)或“时期”(Epochs)组成,每个观测次数或时期都包含了策略与环境交互的完整记录。
    • 在这个阶段,目标是进一步优化策略,使其能够更好地完成任务或最大化期望回报。

Batch Size

在强化学习中,batch size指的是在每次参数更新时所使用的经验(或称为样本)的数量。这些经验通常是以(状态,动作,奖励,下一个状态)四元组的形式存储的,并存储在经验回放(Experience Replay)缓冲区中。经验回放是一种技术,用于在训练过程中提高数据效率和稳定性。

在训练过程中,算法会从经验回放缓冲区中随机抽取一小批(即batch size指定数量的)经验样本,用于计算梯度并更新网络的参数。这样做可以减少样本之间的相关性,从而有助于稳定学习过程。

Mini Batch Size

它指的是在每次训练迭代(iteration)中,从训练数据集中随机选择并用于更新模型参数的数据样本数量。在深度学习和强化学习中,通常会将训练数据分成若干个大小相同的mini-batch,然后每次从一个mini-batch中随机采样一组样本进行梯度下降,以更新网络参数。这个过程中,mini-batch的大小就等于mini batch size。

这个参数的设置对于模型的训练效果和效率具有显著影响。

其影响包括:

  1. 加速训练:比全批量处理更快,因为每次处理的数据量更少。
  2. 提高泛化能力:通过随机选取不同批次的数据,帮助模型学习更多数据分布信息。
  3. 平衡训练:较大的batch size可能加速但降低稳定性,较小的则更稳定但训练时间较长。

选择mini batch size时,需考虑硬件资源、数据集大小,并观察模型在验证集上的表现来调整。不同模型和数据集可能需要不同的batch size以达到最佳效果。

设置技巧:

虽然较小的Mini Batch Size可以提高模型的稳定性和泛化能力,但过小的Mini Batch Size可能会导致梯度估计的噪声过大,从而影响模型的收敛速度和性能。因此,在实际应用中需要根据具体任务和数据集的特点来选择合适的Mini Batch Size。Mini Batch Size通常与其他超参数(如学习率、优化算法等)一起调整,以获得最佳的训练效果。因此,在调整Mini Batch Size时需要考虑这些超参数之间的相互作用和影响。

Batch Size 与 Mini-Batch Size 的区别主要体现在以下几个方面:

训练速度:Batch Size 越大,每次更新的参数就越多,因此训练速度越快。但是,如果 Batch Size 太大,可能会导致梯度更新方向不准确,从而降低模型性能。Mini-Batch Size 越大,计算梯度所需的计算资源就越多,因此训练速度越慢。但是,如果 Mini-Batch Size 太小,可能会导致梯度更新方向过于随机,从而降低训练效率。

模型性能:Batch Size 和 Mini-Batch Size 的选择会影响模型对训练数据的拟合程度。Batch Size 越大,模型对训练数据的拟合程度越高,但也有可能导致过拟合。Mini-Batch Size 越大,模型对训练数据的拟合程度越低,但可以避免过拟合。

内存占用:Batch Size 越大,所需的内存空间就越多。Mini-Batch Size 越大,所需的内存空间就越少。

较小的Mini Batch Size之所以可以让模型更加稳定,主要基于以下几个原因: 

1. 减少梯度估计的方差
  • 随机性增加:较小的Mini Batch Size意味着每次迭代时模型仅基于一小部分数据进行更新,这增加了梯度估计的随机性。虽然这看似增加了噪声,但实际上这种随机性有助于模型避免陷入局部最优解,因为不同的Mini Batch可能会提供不同的梯度方向。
  • 平滑的收敛过程:随着迭代的进行,虽然每个Mini Batch的梯度估计可能有所波动,但整体上这些波动会相互抵消,使得模型的收敛过程更加平滑。这种平滑的收敛有助于减少模型在训练过程中的过拟合风险,并提高模型的泛化能力。
2. 提高模型的泛化能力
  • 隐式正则化效果:较小的Mini Batch Size实际上提供了一种隐式的正则化效果。由于每次迭代仅基于一小部分数据进行更新,模型无法完全拟合这部分数据,从而迫使模型学习更加通用的特征,而不是过度拟合训练数据中的噪声。
  • 避免局部最优:如前所述,较小的Mini Batch Size增加了梯度估计的随机性,这有助于模型跳出局部最优解,并探索更广阔的解空间。这有助于模型找到全局最优解或接近全局最优的解。
3. 平衡计算效率和稳定性
  • 计算效率:虽然较小的Mini Batch Size可能需要更多的迭代次数来完成一个epoch的训练,但它通常能够更快地收敛到较好的解,因为每次迭代都提供了更新的机会。此外,较小的Mini Batch Size还可以减少内存占用和计算资源的消耗。
  • 稳定性:通过平衡计算效率和稳定性,较小的Mini Batch Size可以在保证模型性能的同时,减少训练过程中的不稳定性。这种稳定性有助于模型在更广泛的场景下保持良好的表现。

rl_games中参数

minibatch_size

指 Mini Batch Size 大小

horizon_length

同 skrl 中的 rollouts 参数

horizon_length参数指的是每个actor(或称为agent)在每个episode中与环境交互的最大步数(或时间步)。在强化学习中,一个episode指的是从初始状态开始,直到达到终止状态(如游戏结束、达到某个目标或达到最大步数限制)为止的完整交互过程。

num_minibatches 即 minibatches的个数计算:

num_minibatches = horizon_length * num_actors // minibatch_size

官方解释:

Horizon length per each actor. Total number of steps will be num_actors*horizon_length * num_agents

num_actors

Number of running actors/environments.

num_actors通常指的是同时运行的演员(actors)或环境(environments)的数量。在强化学习的上下文中,演员(actor)是一个术语,用于指代执行动作(actions)并接收环境反馈(通常是奖励和新的状态)的实体。在分布式或多进程强化学习设置中,使用多个演员可以显著提高学习效率,因为它们能够并行地探索环境并收集数据。

具体来说,num_actors的值决定了框架将同时启动多少个独立的环境实例,每个实例都由一个单独的演员控制。每个演员在自己的环境中执行动作,收集数据,并可能将这些数据发送到中央的学习算法(如神经网络)进行训练。通过这种方式,框架能够更快地收集训练所需的样本,从而加速学习过程。

例如,如果你将num_actors设置为4,那么你的框架将同时运行4个环境实例,每个实例都由一个演员控制。这四个演员将并行地与环境交互,收集数据,并将这些数据用于训练中央的模型。这种并行化的方法尤其适用于那些需要大量数据来训练的学习任务,因为它能够显著减少收集足够数据所需的时间。


看意思跟isaac lab里num_envs是一样的,如果配置了num_envs,那么 num_actors 可以配置为 -1

num_actors: -1  # configured from the script (based on num_envs)

mini_epochs

同stable_baseline3 中的 n_epochs 参数

Number of miniepochs. Good value is in [1,10]

max_epochs

Maximum number of epochs to run.

在rl_games里,总的 timesteps = horizon_length * max_epochs

max_epochs参数指的是算法运行时的最大轮次(epochs)数。这里的“轮次”或“迭代”是指算法在整个训练数据集或环境状态上重复执行学习步骤的次数。

作用

  1. 训练停止条件max_epochs为训练过程设定了一个明确的停止条件。当算法达到指定的轮次后,无论当前性能如何,训练都会停止。这有助于避免无限期的训练,节省计算资源。

  2. 性能平衡:通过设定合适的max_epochs值,可以在模型的性能(如找到更优策略的能力)和训练成本(如时间、计算资源)之间找到平衡。过小的max_epochs可能导致模型学习不足,而过大的值则可能增加过拟合的风险或不必要的计算开销。

  3. 实验可重复性:在科研或工业应用中,设定固定的max_epochs有助于确保实验的可重复性。这意味着不同的研究人员或团队在相同的条件下应该能够得到相似的结果。

  • 需要注意的是,max_epochs并不总是决定训练过程的唯一停止条件。在某些情况下,算法可能会因为达到其他条件(如性能收敛、梯度消失/爆炸等)而提前停止。

mini_epochs

Number of miniepochs. Good value is in [1,10]

同 skrl 中的 learning_epochs 参数

rsl_rl中参数

目前用下来个人感觉rsl_rl的训练速度、可拓展性、配置、可视化是几个框架中做的比较好的,缺点是master分支还只支持PPO算法;从训练输出的日志里可以看到每秒步数,数据收集和学习分别花了多长时间,各个reward在当前iteration数值等等;

 rsl_rl的任务参数配置与训练输出日志

num_mini_batches

这个参数的说明和使用尤其要注意,官方文档里没有介绍,实际是用来计算 mini batch size 的,而不是代表 mini batch size 的大小,计算公式如下:

mini batch size = num_envs * num_steps / num_mini_batches

所以num_mini_batches这个值越大,mini batch size 值反而越小;

num_learning_epochs

同stable_baseline3 中的 n_epochs 参数

num_steps_per_env

同stable_baseline3 中的 n_steps 参数

number of steps per environment per iteration

num_steps_per_env参数通常指的是在每个迭代(iteration)中,每个环境(environment)将执行的动作步数(steps)。这个参数在配置强化学习训练过程时非常重要,因为它直接影响到训练的效率、稳定性和最终模型的性能。

具体来说,num_steps_per_env的作用和意义包括以下几个方面:

  1. 控制训练数据量:通过设置每个环境在每个迭代中执行的动作步数,可以控制每次迭代收集到的数据量。更多的数据通常意味着模型可以学习到更多的信息,但也可能导致训练时间增加和过拟合的风险。

  2. 平衡训练速度和稳定性:在强化学习中,训练速度和稳定性往往是相互制约的。较小的num_steps_per_env值可以加快迭代速度,但可能导致模型学习不够充分;而较大的值则可能增加训练的稳定性,但也会延长训练时间。

  3. 适应不同的环境和任务:不同的强化学习任务和环境可能需要不同的num_steps_per_env值。例如,对于需要长时间交互和复杂决策的任务,可能需要设置较大的值以确保模型能够充分学习;而对于简单的任务,较小的值可能就足够了。

  4. 与其他参数协同作用num_steps_per_env通常需要与其他训练参数(如学习率、批量大小、迭代次数等)协同作用,以达到最佳的训练效果。

max_iterations

同 rl_games 中的 max_epochs

max_iterations参数指的是设置训练过程中的最大迭代次数。这里的“迭代”通常指的是算法在训练过程中重复执行的基本学习步骤,每次迭代都会根据当前的数据和策略来更新模型或策略的参数,以期望找到更优的解决方案。

stable_baseline3中参数

n_steps

参数n_steps指的是在每个更新周期(即每次模型参数更新之前)中,每个环境需要运行(或模拟)的步数。这个参数在多种强化学习框架和算法中都有应用,特别是在那些使用经验回放(experience replay)或类似机制的算法中,如深度Q网络(DQN)、深度确定性策略梯度(DDPG)等。

当你看到这样的参数说明时:

  • param n_steps: The number of steps to run for each environment per update

这意味着,在模型对参数进行一次更新之前,每个环境实例将连续运行n_steps步。这些步骤中产生的经验(通常是状态、动作、奖励和下一个状态的元组)会被存储起来,用于后续的训练过程。

  • (i.e. rollout buffer size is n_steps * n_envs where n_envs is number of environment copies running in parallel)

这里进一步解释了n_steps的作用。如果n_envs是并行运行的环境副本数量,那么rollout buffer(即经验回放缓冲区)的大小将是n_steps * n_envs。这意味着,在每次更新之前,你将从所有环境副本中收集到这么多步骤的经验。

总的来说,n_steps是一个关键的超参数,它影响了模型的训练效率和效果。通过调整n_steps,你可以控制每次更新前收集到的经验数量,进而影响模型的学习速度和稳定性。在实际应用中,你可能需要根据具体任务和环境来实验不同的n_steps值,以找到最优的设置。

n_epochs

n_epochs 参数指的是在每次更新策略网络时,对收集到的数据(即,在一个批次(batch)内收集的轨迹或经验)进行优化的轮次(epochs)数量。

在PPO算法中,为了更新策略网络(通常是神经网络),算法会首先通过与环境交互来收集一定数量的数据(例如,通过多个回合(episodes)的模拟)。这些数据随后被用来更新策略网络,以改善其性能。然而,直接使用这些数据来更新网络可能会导致训练过程不稳定,因为每次迭代中收集的数据分布可能会因为策略的改变而发生显著变化(即,数据分布漂移问题)。

为了缓解这个问题,PPO采用了一种称为“surrogate loss”(替代损失)的技术,它试图在保持新策略和旧策略足够接近的同时,最大化策略的性能。在PPO中,这通常通过限制新旧策略之间的比率(称为KL散度或类似的度量)来实现。

n_epochs 参数就是在使用这些数据来优化策略网络时,对同一批数据进行多少次遍历(epoch)的参数。每次遍历都会使用整个批次的数据来更新网络,但由于网络权重的更新,每次遍历的数据对于网络的“难度”可能会逐渐降低(因为网络正在学习并适应这些数据)。因此,增加n_epochs可以增加网络对这批数据的拟合程度,但也可能导致过拟合于当前批次的数据,从而减少对未来数据的泛化能力。

在实践中,n_epochs 的选择是一个超参数,需要根据具体任务进行调整。较小的n_epochs值可能使训练过程更加稳定,但可能导致学习速度较慢;而较大的n_epochs值可能加速学习过程,但也可能增加过拟合的风险。

skrl中参数

rollouts

number of rollouts before updating

rollouts 指在更新智能体的策略或价值函数之前,需要执行的rollout数量。这里的rollout是一个关键概念,它指的是智能体在环境中进行的一系列模拟交互步骤,用于收集数据并评估或改进当前策略。

这个参数在强化学习的算法设计和实现中起着至关重要的作用,因为它直接关联到数据收集的效率、策略的稳定性和算法的总体性能。

  1. 数据收集:通过执行多个rollout,智能体可以收集到更丰富的数据样本(包括状态、动作、奖励等)。这些数据是后续进行策略评估和改进的基础。增加rollouts的数量可以提高数据的多样性和代表性,从而有助于更准确地评估策略的性能。

  2. 策略稳定性:在执行多个rollout后,智能体可以基于更全面的数据来更新其策略。这有助于减少因单次或少量数据波动导致的策略不稳定现象,提高策略的鲁棒性和可靠性。

  3. 计算效率:虽然增加rollouts的数量可以提高数据的丰富性和准确性,但过多的rollout也会增加计算成本和时间消耗。因此,合理设置rollouts的值可以在保证数据质量的同时,提高计算效率。

  4. 算法性能rollouts的值对算法的性能有显著影响。较少的rollout可能导致数据不足,从而无法充分评估策略的性能;而过多的rollout则可能增加不必要的计算负担。因此,需要根据具体的任务需求和计算资源来合理设置这个参数。

learning_epochs

同stable_baseline3 中的 n_epochs 参数

number of learning epochs during each update

mini_batches

同 rsl_rl 中的 num_mini_batches

Number of mini-batches to sample (default: 1)

learning_epochs

number of learning epochs during each update 

在训练过程中,你会收集智能体与环境交互的数据(即状态、动作、奖励的序列),并使用这些数据来更新智能体的策略。这里,learning_epochs指的就是在每次使用这些数据来更新策略时,算法会重复进行的学习迭代次数。

  1. 更新策略

    • 使用收集到的数据来更新智能体的策略。
    • 在这个过程中,算法会重复执行learning_epochs次迭代。每次迭代都会根据当前的数据集(可能包含多个回合的数据)来优化策略参数,以最大化累积奖励的期望。
    • 每次迭代可能包括计算梯度、更新权重、评估性能等步骤。
  • learning_epochs的值会影响训练的稳定性和效率。过小的值可能导致策略学习不足,而过大的值则可能增加计算成本并导致过拟合。它通常需要与其他超参数(如学习率、批量大小、折扣因子等)一起调整,以获得最佳的学习效果。

timesteps

Total number of timesteps

在Isaac Lab里可以设置 --max_iterations,那么:

timesteps = max_iterations * rollouts

learning_starts

learning_starts参数指的是在算法开始正式学习之前,需要收集多少步的转换样本(即智能体与环境交互的样本)。这些步骤通常用于初始化智能体的经验回放缓冲区(如果算法使用了经验回放机制)或积累足够的初始数据以供算法在后续的学习过程中使用。 

作用

  1. 避免过早学习:在强化学习的早期阶段,智能体可能还没有收集到足够的有代表性的数据来指导其学习。因此,通过learning_starts参数,算法可以延迟学习的开始,直到它积累了足够多的初始数据。这有助于避免智能体在数据不足的情况下进行过早的、可能不准确的学习。

  2. 提高学习稳定性:在收集到足够的初始数据后,智能体的学习过程可能会更加稳定。这是因为初始数据可以帮助算法更好地理解环境的动态特性,并为其后续的学习提供一个更坚实的基础。

  3. 适应不同任务:不同的强化学习任务可能需要不同数量的初始数据来支持学习。通过调整learning_starts参数,算法可以更灵活地适应不同任务的需求,从而优化其性能。

在复杂的游戏或物理控制任务中,智能体可能需要更多的初始数据来理解环境的动态特性,因此learning_starts的值可能会设置得相对较高。而在相对简单的任务中,智能体可能能够更快地开始学习,因此learning_starts的值可以相对较低。

此外,值得注意的是,learning_starts参数并不是所有强化学习算法都会使用的。它更多地出现在那些使用了经验回放机制的算法中,如深度Q网络(DQN)等。在这些算法中,经验回放缓冲区用于存储智能体与环境交互的样本,并在后续的学习过程中随机选择这些样本来更新模型的参数。因此,learning_starts参数在这些算法中尤为重要,因为它决定了算法何时开始使用这些样本来进行学习。


以上只是一小部分,注意还是PPO的超参数,后续有时间继续整理.... 

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

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

相关文章

UE4-光照重建

当我们拉入新的光源和模型到我们的场景中后,会产生这样的情况: Preview:预览 表示此时由于光照物体所产生的阴影都是预览级别的并不是真正的效果。 方法一: 或者也可以在世界大纲中选中我们的光源,然后将我们的光源改变为可以…

免费【2024】springboot 毕业生就业管理微信小程序

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

MPI框架以及PIPE数据流向细节

一、海思MPP内部处理流程图 各模块功能介绍: (1)VI:捕获视频图像,可对其做剪切、缩放、镜像等处理,并输出多路不同分辨率的图像数据. (2)AI:捕获⾳频数据,然后AENC 模块⽀持按多种⾳…

2024:Qt--编译配置Protobuf(windows10) 配图详解

这里写自定义目录标题 一、准备1、Window10系统2、Qt Creator 5.0.2 Based on Qt 5.15.2 (MSVC 2019, 64 bit)3、protobuf-3.15.0(本示例使用版本)4、cmake-3.21.3-windows-x86_64(本示例使用,下载的zip直接解压使用) …

代码随想录——零钱兑换Ⅱ(Leetcode518)

题目链接 完全背包 class Solution {public int change(int amount, int[] coins) {int[] dp new int[amount 1];dp[0] 1;for(int i 0; i < coins.length; i){for(int j coins[i]; j < amount; j){dp[j] dp[j - coins[i]];}}return dp[amount];} }本题为组合问题…

MySQL 约束 (constraint)

文章目录 约束&#xff08;constraint)列级约束和表级约束给约束起名字&#xff08;constraint)非空约束&#xff08;no null)检查约束&#xff08;check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 &#xff08;auto_increment) 外键约束外什…

【IEEE出版 | 广东省高校联合主办】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)

第六届物联网、自动化和人工智能国际会议&#xff08;IoTAAI 2024&#xff09;将于2024年07月26-28日在中国广州召开。 会议旨在拓展国际科技学术交流渠道&#xff0c;搭建学术资源共享平台&#xff0c;促进全球范围内的科技创新&#xff0c;提升中外学术合作。会议还鼓励不同领…

BGP选路之Preferred value

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由&#xff0c;然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优…

FliFlik KleanOut for Photo 的妙用

FliFlik KleanOut for Photo 是一款专业的图像水印去除软件&#xff0c;旨在帮助用户快速高效地去除照片中的水印标识。无论是文本水印还是图像水印&#xff0c;该软件都能有效识别并删除&#xff0c;保持图像原始清晰度和质量。它采用 AI 算法引擎&#xff0c;可以精准识别和删…

MongoDB教程(十六):MongoDB高级索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、全文索…

最简单的typora+gitee+picgo配置图床

typoragiteepicgo图床 你是否因为管理图片而感到头大&#xff1f;是时候了解一下 Typora、Gitee 和 PicGo 这个超级三剑客了&#xff0c;它们可以帮你轻松打造自己的图床&#xff0c;让你的博客图片管理变得简单又有趣。让我们开始这场神奇的图床之旅吧&#xff01; Typora …

大型语言模型的生物医学知识图优化提示生成

大型语言模型的生物医学知识图优化提示生成 https://arxiv.org/abs/2311.17330 https://github.com/BaranziniLab/KG_RAG 大型语言模型的生物医学知识图优化提示生成 摘要 KG-RAG框架&#xff0c;较好的结合了生物医学知识图谱SPOKE和LLM的优势。SPOKE是一个开放知识图谱&…

聚焦保险行业客户经营现状,概述神策数据 CJO 解决方案

触点红利时代&#xff0c;企业的经营需求从「深度的用户行为分析」转变为「个性化、全渠道一致的客户体验」。客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;从体验出发&#xff0c;关注客户需求、感受和满意度&#xff0c;能够帮助…

04 HTML CSS JavaScript

文章目录 HTML1、HTML介绍2、快速入门3、基础标签4、图片、音频、视频标签5、超链接标签6、列表标签7、表格标签8、布局标签9、 表单标签 CSS1、 概述2、 css 导入方式3、 css 选择器4、 css 属性 JavaScript1、JavaScript简介2、JavaScript引入方式3、JavaScript基础语法4、Ja…

Adobe Audition(AU)安装包软件下载

目录 一、下载 二、AU软件介绍 三、使用技巧 四、快捷键操作 常用快捷键&#xff1a; 一、下载 链接https://pan.baidu.com/s/1Ax9pro_Q75YgLYaKDzZg8w?pwd3mi1 二、AU软件介绍 Adobe Audition是一个专业级的音频工作站&#xff0c;适用于音乐制作、广播、播客、视频后…

C#数组复习

一、一维数组 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShuZu : MonoBehaviour {#region 知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况 一维数组 就简称为数组#en…

Onenet模拟Mqtt调试物联网设备

本章节目录 一.调试器模拟设备登录 二.调试器模拟上传数据 三.调试器接受下发控制消息 一.调试器模拟设备登录(让设备处于在线状态) 1.打开文档中心(open.iot.10086.cn) 2,Onenet物联网开放平台 3.产品开发,设备接入->设备开发 4.mqtt协议接入->最佳实践 5.物模型数据交…

样式迁移及代码

一、定义 1、使用卷积神经网络&#xff0c;自动将一个图像中的风格应用在另一图像之上&#xff0c;即风格迁移&#xff1b;两张输入图像&#xff1a;一张是内容图像&#xff0c;另一张是风格图像。 2、训练一些样本使得样本在一些cnn的特征上跟样式图片很相近&#xff0c;在一…

PHP教程002:PHP变量介绍

文章目录 一、PHP程序1、PHP标记2、PHP代码3、语句结束符;4、注释 二、PHP变量2.1 声明变量2.2 赋值运算符3、变量命名规则 一、PHP程序 PHP文件的默认扩展名是".php"PHP文件可以包含html、css、js 序号组成描述1<?php ... ?>PHP标记2PHP代码函数、数组、流…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…