当前位置: 首页 > news >正文

想找人做网站/百度登录注册

想找人做网站,百度登录注册,哪个网站学做凉皮,网站后台内容更换怎么做大型语言模型(LLM)的现代进步主要是缩放定律的产物[6]。 假设模型是在足够大的数据集上训练出来的,那么随着底层模型规模的增加,我们会看到性能的平滑提升。 这种扩展规律最终促使我们创建了 GPT-3 以及随后的其他(更强…

大型语言模型(LLM)的现代进步主要是缩放定律的产物[6]。 假设模型是在足够大的数据集上训练出来的,那么随着底层模型规模的增加,我们会看到性能的平滑提升。 这种扩展规律最终促使我们创建了 GPT-3 以及随后的其他(更强大的)LLM。 在扩展这些高密度 LLM 时,由于内存成本的增加以及模型的计算占用空间与参数总数的关系,我们最终会达到硬件规定的极限。 因此,计算和数据已成为训练更好的 LLM 的主要瓶颈–如果能获得更多的计算和数据,创建一个更好的模型就相对简单了。 在本综述中,我们将研究如何通过训练稀疏激活的语言模型来避免这一限制。

“由于巨型密集模型的训练受到了当今硬件资源可用性和能力的限制,专家混合物(MoE)模型与质量相当的密集模型相比,训练成本大幅降低,因此已成为最有前途的模型架构之一”。–来自[12]

专家混合层(MoE)非常简单,它允许我们在不相应增加计算量的情况下增加语言模型的规模或容量。 我们只需将模型的某些层替换为多个拥有各自参数的 "专家 "层副本。 然后,我们可以使用门控机制来(稀疏地)选择用于处理每个输入的专家。 这一想法源于 20 世纪 90 年代[15,30]早期的条件计算研究,它允许我们以可控的方式训练庞大的模型,这对语言建模等受益于额外容量模型的领域很有帮助。 在这里,我们将研究 MoE 及其起源,以及它在过去二十年中是如何发展的。

什么是专家混合体(MoE)?

在这里插入图片描述

Decoder-only transformer 架构

上图所示为大多数生成式 LLM 使用的标准纯解码器变换器架构;有关该架构的深入概述,请参见此处。 在 LLM 中,MoE 对这一架构进行了简单的修改–用 MoE 层取代前馈子层! 这个 MoE 层由多个专家组成(即从几个专家 [13] 到数千个专家 [5]),其中每个专家都是自己的前馈子层,具有独立的参数集;具体描述见下文。

在这里插入图片描述
同样,我们也可以将编码器-解码器转换器(如 T5 [8])转换为 MoE 模型,方法是将编码器和解码器中的前馈子层都替换为 MoE 层。 然而,我们通常只将这些子层中的一部分(如每隔一层)转换为 MoE 层。 在本概述中,我们将主要概述基于编码器-解码器转换器的 MoE 模型的工作,而基于 MoE 的自回归 LLMS 的工作将在以后的文章中介绍。

“ST-MoE模型有32个专家,专家层频率为1/4(每4个FFN层被一个MoE层取代)”。–来自[24]

稀疏专家。 这种方法看似有问题,因为它给模型增加了大量参数。 MoE 模型在变压器的每个前馈子层中都有多个独立的神经网络(即,而不是单个前馈神经网络)。 不过,我们在前向传递中只使用了每个 MoE 层的一小部分专家! 给定一个令牌列表作为输入,我们使用路由机制稀疏地选择一组专家,将每个令牌发送给他们。 因此,与参数数量相同的密集模型相比,MoE 模型前向传递的计算成本要低得多。

MoE 层的组成部分。 当应用于变压器模型时,MoE 层有两个主要组成部分:

  • 稀疏 MoE 层:用一个由多个结构类似的 "专家 "组成的稀疏层取代变压器中的密集前馈层。
  • 路由器:决定 MoE 层中哪些标记被发送给哪些专家。

稀疏 MoE 层中的每个专家都是一个前馈神经网络,有自己独立的参数集。 每个专家的结构都模仿了标准转换器结构中使用的前馈子层。 路由器将每个标记作为输入,并产生一个专家概率分布,决定将每个标记发送给哪个专家;见下文。

在这里插入图片描述
路由器有自己的参数集,并与网络的其他部分共同训练。 每个令牌可以发送给许多专家,但我们只将令牌发送给前 K 位专家,从而实现了稀疏性。 例如,许多模型设置 k=1 或 k=2,这意味着每个标记分别由一个或两个专家处理。

更大的容量,固定的计算量。 如果我们能获得足够大的训练数据集,那么增加语言模型的规模和容量是提高性能的主要途径之一。 然而,训练成本会随着基础模型的大小而增加,这使得大型模型在实践中负担沉重。 MoE 模型在推理过程中只使用模型参数的一个子集,从而避免了这种花费。

“假设每个标记只使用两个专家,推理速度就像使用 12B 模型(而不是 14B 模型),因为它计算的是 2x7B 矩阵乘法,只是共享了一些层”。

例如,假设我们有一个 7B 参数的 LLM,并将其每个前馈子层替换为由八个专家组成的 MoE 层,其中每个标记激活两个专家。 这正是 Mixtral-8x7B [13] 所使用的架构,它是 Mistral-7B [14] 的 MoE 变种。 完整模型有大约 47B 个参数2 ,所有参数都必须加载到内存中。 但是,该模型的推理成本与 14B 参数的模型相当。 处理每个标记只需要两个专家,这就产生了 ~2 x 7B 矩阵乘法3。 这样,我们就能实现 ~50B 参数模型的容量,而不会产生成本!

优点和缺点。 MoE 模型由于能够以固定的计算预算训练更大的模型而被广泛使用,但使用 MoE 式 LLM 有利有弊! 与密集模型相比,MoE 模型的预训练速度更快;与参数数量相同的密集模型相比,MoE 模型的推理速度也快得多。 MoE 使我们能够提高模型容量,同时保持较低的计算量。 不过,MoE 式 LLM 也会消耗更多的 VRAM,因为所有专家都必须加载到内存中。 此外,MoE 模型容易过度拟合,而且众所周知难以微调,这使得它们在实际应用中比密集模型更加复杂。

专家混合制 Mixture-of-Experts 的起源

虽然 MoEs 在最近的人工智能研究中非常流行,但这种想法由来已久。 事实上,条件计算的概念–或者说动态开启/关闭神经网络的部分功能–起源于 20 世纪 90 年代早期的工作! 在本节中,我们将探讨条件计算的早期工作,并研究它是如何演变成 "MoE "这一概念的。 最终,这些想法被应用于训练早期基于 LSTM [4] 的语言模型(取得了一定的成功)。

条件计算的早期工作

“有条件的计算,即网络的某些部分在每个实例的基础上都处于活动状态,在理论上被认为是在不相应增加计算量的情况下显著提高模型容量的一种方法”。–来自 [1]

MoE 的概念源于 Geoffrey Hinton 在 20 世纪 90 年代初[15]的研究成果,该成果提出了一个由多个网络组成的监督学习框架。 这些网络中的每一个都要处理训练数据的不同子集,而选择使用哪个网络则由一个门控机制来处理;见下文。 换句话说,该系统中的每个网络都是专家,专门处理输入数据的某个领域(或区域)。

在这里插入图片描述

自[15]提出以来,已有多部作品探索并扩展了这一条件计算思想。 例如,[30] 中的作者(也写于 20 世纪 90 年代初!)提出了一种分层(树状结构)的 MoE,可以使用期望最大化算法以监督的方式进行训练;见下文。 深入研究这一主题的此类著作还有很多。

在这里插入图片描述
通过随机神经元估计或传播梯度,实现条件计算 [16]。 这项工作探索了四种可能的技术,用于估计随机神经元和硬阈值激活函数的梯度;例如,通过使用 REINFORCE、直通估计器或加法/乘法噪声。 虽然这些术语可能看起来很陌生,但条件计算就是硬阈值激活函数的一个例子–某些神经元的激活在计算中被完全消除(或设置为零)。 要训练使用条件计算的网络,就必须使用 [16] 中提出的估计器。 文献[16]中探讨的神经网络结构由许多计算单元组成,这些单元通过分布式门网络连接起来,可以用来消除计算块。 通过关闭该网络的部分功能,我们可以大大降低大型神经网络的计算成本。

在这里插入图片描述
深度神经网络中条件前馈计算的低秩近似[17]。 这项工作探索了一种神经网络设置,在这种设置中,网络节点辅以门控单元,门控单元决定节点是否应被计算;见上文。 由于 ReLU 会将神经网络中所有负激活值设为零,因此任何具有负预激活值的节点都可以完全从计算中移除。 作者在 [17] 中扩展了这一想法,指出可以通过计算权重矩阵的低秩近似值来估计 ReLU 之前隐藏激活的符号,从而在网络稀疏时显著提高效率。

在这里插入图片描述

在深度混合专家中学习因子表征 [18]。 这项研究考虑了由多个专家网络组成的 MoE 层,这些专家网络专门处理输入空间的不同区域。 通过学习门控机制将输入映射到这些专家网络,从而可以稀疏地计算更大的网络。 更进一步,[18] 中的作者考虑了具有多个连续 MoE 层(即 "堆叠 "MoE)的更深层网络,如上图所示。 在 MNIST 数据集上测试这些网络时,我们发现深度 MoE 在每一层都能学习独特的特征;例如,第一层学习与位置相关的特征,而第二层则学习特定类别的特征。

“有人提出,条件计算是一种在不增加所需计算量的情况下提高深度神经网络容量的方法,其方法是按需激活某些参数,以每个实例为基础”。 - 摘自[19]

指数级提高深度学习中条件计算的容量计算比[19]。 众所周知,更大的模型性能更好4。 如果计算量不是问题,我们可以使用更大的数据集和模型来提高泛化效果,但深度网络的计算量会随着参数数量的增加而增加。 为了避免这一问题并更好地利用条件计算,作者在 [19] 中提出了一种新颖的权重矩阵参数化方法,当观察到特定的隐藏激活模式时,就会关闭参数组5。 这种方法可以成倍增加参数与计算的比率。

神经网络中的条件计算以提高模型速度[20]。 这项研究探索了基于强化学习的训练策略(即 REINFORCE),用于使用条件计算的神经网络。 我们发现,这种使用策略梯度算法的方法可用于训练网络,既能保持准确性,又能最大限度地提高计算速度。 此外,我们还可以利用正则化使网络中的条件计算模式多样化。 实验表明,这种学习策略可以生成在计算成本和性能之间达到良好平衡的网络。

在这里插入图片描述
动态容量网络 (DCN) [21] 通过定义低容量和高容量子网络,自适应地为输入数据的不同部分分配容量。 对于大部分数据来说,应用的是低容量子网络。 不过,可以使用基于梯度的关注机制,根据网络对数据中这一区域的敏感度来选择输入的一部分,并将其应用到高容量子网络中;见上文。 我们在实验中看到,DCN 可以减少计算量,同时获得与传统卷积神经网络(CNN)相当(或更好)的性能。

深度序列神经网络[22]摒弃了神经网络架构中使用的 "层 "这一传统概念,而是选择构建一整套候选变换,并有选择地应用于每一层。 在处理输入时,每一层都会从候选集中选择一个元素,从而形成一个基于变换序列的类似 DAG 的架构。 根据输入数据的属性,所选的变换序列可能会有所不同,这与传统的多层网络相比,提高了模型的表达能力。 与之前的工作类似,这种序列架构也是采用策略梯度法进行训练的。

超大型神经网络: 稀疏门控的专家混合层 [1]

“我们的模型容量提高了 1000 倍以上,而计算效率只略有下降,大大推进了公共语言建模和翻译数据集的最新成果”。 - 摘自 [1]

条件计算的理念前景广阔。 特别是在语言建模领域,训练数据集往往是海量的6,在不相应增加计算量的情况下提高模型的底层能力至少可以说是非常诱人的。 尽管 MoEs 已被研究了二十多年,但由于各种技术难题,MoEs 的前景并不乐观。 在[1]中,作者提出了 “稀疏门控专家混杂层”(Spararsely-Gated Mixture-Of-Experts layer),试图克服其中的一些挑战,表明 MoEs 可应用于语言建模和翻译领域。

关于 "模态建模 "的先前问题。 尽管[1]中的工作是最早将 MoE 应用于语言建模的工作之一,但 MoE 的概念可以追溯到 20 世纪 90 年代初。 有鉴于此,我们不禁要问:是什么阻碍了建模引擎被更广泛地采用? 是什么阻碍了移动电子设备被更广泛地采用? 有几个技术障碍导致了缺乏采用:

  • GPU 擅长高效地执行算术运算,但在分支(即条件计算的主要组成部分)方面却不尽如人意。
  • 要高效地训练神经网络,需要较大的批次规模,但 MoE 可减少批次规模(即每个专家只接收输入批次的一部分)。
  • 在研究具有较大训练数据集的领域时,提高模型容量的影响最大,而 MoE 主要是在计算机视觉领域研究训练数据集不够大的问题。

在这里插入图片描述
什么是稀疏 MoE? 大多数现代 LLM 所使用的 MoE 层都类似于 [1] 中提出的稀疏门控专家混合层(如上图所示),它是一个通用的神经网络模块,由两个部分组成:

  • 专家:每一层都有几个 “专家”,它们是独立的神经网络模块或层,具有独立的参数集。
  • 路由器:一种参数化(可学习)的门控机制,用于选择一组(稀疏的)专家来处理每个输入。

在 [1] 中,MoE 中的每个专家都是一个具有相同架构的前馈神经网络。 不过,我们也可以使用更复杂的架构;例如,我们甚至可以将每个专家作为另一个 MoE 来实现,从而创建 "分层 "的 MoE 模块! 通过梯度下降法,专家和门控机制与其他网络参数一起接受联合训练。

在这里插入图片描述
要计算 MoE 模块的输出,我们采用专家输出的加权组合,其中权重由路由器提供;见上文。 路由器输出一个 N 维的权重向量(即 N 为专家人数)。 虽然这种方法最初看起来似乎没什么用,但当路由器的输出稀疏时,神奇的事情就发生了–在计算 MoE 的输出时,权重为零的专家将不再被考虑。 因此,MoE 可以让我们创建、训练和使用超大型神经网络,而无需大量计算,因为在任何时候都只需使用部分模型参数。

在这里插入图片描述
门控机制。 对于 MoE 内部的路由选择,人们提出了许多不同的策略。 最简单的方法是将我们的输入乘以权重矩阵,然后应用 softmax(见上文)。 然而,这种方法并不能保证专家的选择是稀疏的。 为了解决这个问题,[1] 中的作者提出了一种改进的门控机制,在这种简单的 softmax 门控机制的基础上增加了稀疏性和噪声;见下文。


上述门控机制与软最大门控机制执行路由的方式类似,但我们增加了两个步骤:

  1. 在应用 softmax 之前,会在路由器的输出中加入一定量的高斯噪声。
  2. 除了前 K 位专家的输出外,其他专家的输出都会被屏蔽(即设置为 -∞),以确保专家的选择是稀疏的。

平衡专家。 MoEs 的一个问题是,网络在训练过程中倾向于反复使用相同的几个专家。 门控机制不会学会统一使用所有专家,而是会趋同于每次输入时都选择同一组专家的状态。 这是一个自我实现的循环–如果一个专家被选择的频率最高,那么它的训练速度就会更快,因此会继续被选择,而不是其他专家! 之前的研究提出了几种解决这个问题的方法 [2,3],但我们在 [1] 中看到,可以通过在训练损失中添加一个简单的 "软 "约束来平衡专家;见下文。

在这里插入图片描述
我们首先定义了每位专家在一批输入数据中的 "重要性 "得分,计算方法是将每位专家在整批数据中的门限值相加。 简单地说,在批次中被频繁选中的专家将具有较高的重要性得分。 然后,我们可以利用专家重要性得分的平方变异系数(CV)来计算辅助损失函数;见上文。 如果专家的重要性得分都非常相似,那么 CV 就会很小,反之亦然。 这一损失项可以添加到模型的训练目标中,以鼓励专家在每一批中获得相同的重要性。

经验评估。 为了测试稀疏 MoE 层的性能,作者在 [1] 中训练了一个语言模型,在 LSTM8 的堆叠层之间插入了一个 MoE 模块。 MoE 模块以卷积方式应用,即一次(批量)处理多个 LSTM 时间步。 此外,我们还提出了一种新的分布式训练策略,将模型和数据并行训练结合起来,以消除 MoE 中批处理规模缩小的问题。 这种策略加上其他一些系统优化措施,可以在合理的计算要求下训练多达 137B 个参数的语言模型!

在这里插入图片描述
这些模型在不同规模的语言建模数据集(即 10、100 和 1000 亿个单词)上进行了评估。 我们使用不同数量的专家对扁平式和分层式 MoE 进行了测试,并对所有模型进行了训练,使其总计算成本大致相同(即活跃专家的数量 k 相同)9。 即使在研究最小的数据集时,我们也发现最大的 MoE 模型也能明显改善复杂性(越低越好);见上文。

在这里插入图片描述
如上图所示,如果训练数据集的规模足够小,那么通过增加专家来增加容量的收益就会递减。 然而,我们发现在更大的数据集上,性能会继续提高,直至达到 68B 个参数的规模(即 65,536 个专家)! 这一发现强调了 MoE 层与语言建模领域之间的协同作用–在足够大的训练语料库中,增加的模型容量是有帮助的。 文献[1]中的研究首次表明,在不明显增加计算成本的情况下,这些优势在实践中是可以实现的,这为 MoE 成为 LLM 的流行工具奠定了基础。

“两条线之间的差距越来越大,这表明(毫不奇怪),模型能力的提高对更大的训练集更有帮助”。 - 摘自[1]

[1] Shazeer, Noam, et al. “Outrageously large neural networks: The sparsely-gated mixture-of-experts layer.” arXiv preprint arXiv:1701.06538 (2017).

[2] Eigen, David, Marc’Aurelio Ranzato, and Ilya Sutskever. “Learning factored representations in a deep mixture of experts.” arXiv preprint arXiv:1312.4314 (2013).

[3] Bengio, Emmanuel, et al. “Conditional computation in neural networks for faster models.” arXiv preprint arXiv:1511.06297 (2015).

[4] Hochreiter, Sepp, and Jürgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.

[5] Fedus, William, Barret Zoph, and Noam Shazeer. “Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity.” Journal of Machine Learning Research 23.120 (2022): 1-39.

[6] Kaplan, Jared, et al. “Scaling laws for neural language models.” arXiv preprint arXiv:2001.08361 (2020).

[7] Hoffmann, Jordan, et al. “Training compute-optimal large language models.” arXiv preprint arXiv:2203.15556 (2022).

[8] Raffel, Colin, et al. “Exploring the limits of transfer learning with a unified text-to-text transformer.” The Journal of Machine Learning Research 21.1 (2020): 5485-5551.

[9] Lepikhin, Dmitry, et al. “Gshard: Scaling giant models with conditional computation and automatic sharding.” arXiv preprint arXiv:2006.16668 (2020).

[10] Lin, Junyang, et al. “M6: A chinese multimodal pretrainer.” arXiv preprint arXiv:2103.00823 (2021).

[11] Riquelme, Carlos, et al. “Scaling vision with sparse mixture of experts.” Advances in Neural Information Processing Systems 34 (2021): 8583-8595.

[12] Rajbhandari, Samyam, et al. “Deepspeed-moe: Advancing mixture-of-experts inference and training to power next-generation ai scale.” International conference on machine learning. PMLR, 2022.

[13] Jiang, Albert Q., et al. “Mixtral of experts.” arXiv preprint arXiv:2401.04088 (2024).

[14] Jiang, Albert Q., et al. “Mistral 7B.” arXiv preprint arXiv:2310.06825 (2023).

[15] Jacobs, Robert A., et al. “Adaptive mixtures of local experts.” Neural computation 3.1 (1991): 79-87.

[16] Bengio, Yoshua, Nicholas Léonard, and Aaron Courville. “Estimating or propagating gradients through stochastic neurons for conditional computation.” arXiv preprint arXiv:1308.3432 (2013).

[17] Davis, Andrew, and Itamar Arel. “Low-rank approximations for conditional feedforward computation in deep neural networks.” arXiv preprint arXiv:1312.4461 (2013).

[18] Eigen, David, Marc’Aurelio Ranzato, and Ilya Sutskever. “Learning factored representations in a deep mixture of experts.” arXiv preprint arXiv:1312.4314 (2013).

[19] Cho, Kyunghyun, and Yoshua Bengio. “Exponentially increasing the capacity-to-computation ratio for conditional computation in deep learning.” arXiv preprint arXiv:1406.7362 (2014).

[20] Bengio, Emmanuel, et al. “Conditional computation in neural networks for faster models.” arXiv preprint arXiv:1511.06297 (2015).

[21] Almahairi, Amjad, et al. “Dynamic capacity networks.” International Conference on Machine Learning. PMLR, 2016.

[22] Denoyer, Ludovic, and Patrick Gallinari. “Deep sequential neural network.” arXiv preprint arXiv:1410.0510 (2014).

[23] Fan, Angela, et al. “Beyond english-centric multilingual machine translation.” Journal of Machine Learning Research 22.107 (2021): 1-48.

[24] Zoph, Barret, et al. “St-moe: Designing stable and transferable sparse expert models.” arXiv preprint arXiv:2202.08906 (2022).

[25] Du, Nan, et al. “Glam: Efficient scaling of language models with mixture-of-experts.” International Conference on Machine Learning. PMLR, 2022.

[26] Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems 30 (2017).

[27] Shazeer, Noam. “Glu variants improve transformer.” arXiv preprint arXiv:2002.05202 (2020).

[28] Zhang, Biao, and Rico Sennrich. “Root mean square layer normalization.” Advances in Neural Information Processing Systems 32 (2019).

[29] Clark, Aidan, et al. “Unified scaling laws for routed language models.” International conference on machine learning. PMLR, 2022.

[30] Jordan, Michael I., and Robert A. Jacobs. “Hierarchical mixtures of experts and the EM algorithm.” Neural computation 6.2 (1994): 181-214.

[31] Shazeer, Noam, et al. “Mesh-tensorflow: Deep learning for supercomputers.” Advances in neural information processing systems 31 (2018).

相关文章:

Mixture-of-Experts (MoE): 条件计算的诞生与崛起【上篇】

大型语言模型(LLM)的现代进步主要是缩放定律的产物[6]。 假设模型是在足够大的数据集上训练出来的,那么随着底层模型规模的增加,我们会看到性能的平滑提升。 这种扩展规律最终促使我们创建了 GPT-3 以及随后的其他(更强…...

【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)

系列专栏 双指针 模拟算法 分治思想 目录 1、题目链接 2、题目介绍 3、解法 4、代码 1、题目链接 LCR 159. 库存管理 III - 力扣(LeetCode) 2、题目介绍 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一…...

2024.9.28 作业+思维导图

widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setFixedSize(320,448);this->setWindowFlag(Qt::FramelessWindowHint);//QPushButtonQPushButton *PushButton1 new QPushButton("登录",this);PushButto…...

树莓派外挂Camera(基操)(TODO)

(TODO) 手上有OV5647,OV2640,看这次能不能驱动吧。。。 树莓派3B CSI摄像头配置-阿里云开发者社区 你可以使用树莓派3B的CSI接口连接相机模块。首先,确保相机模块正确连接到CSI接口。然后,使用raspi-config…...

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习(一)最简单的智能体构建-CSDN博客,我介绍了编排创作智能体,这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…...

YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…...

力扣 简单 112.路径总和

文章目录 题目介绍题解 题目介绍 题解 class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {// 只在最开始的时候判断树是否为空if (root null) {return false;}targetSum - root.val;if (root.left null && root.right null) { // root 是…...

OpenMV与STM32通信全面指南

目录 引言 一、OpenMV和STM32简介 1.1 OpenMV简介 1.2 STM32简介 二、通信协议概述 三、硬件连接 3.1 硬件准备 3.2 引脚连接 四、软件环境搭建 4.1 OpenMV IDE安装 4.2 STM32开发环境 五、UART通信实现 5.1 OpenMV端编程 5.2 STM32端编程 六、SPI通信实现 6.1 …...

Python库matplotlib之二

Python库matplotlib之二 figureAxessubplot figure matplotlib.pyplot.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue, FigureClass<class ‘matplotlib.figure.Figure’>, clearFalse, **kwargs) num&#xff0c;int 或 str 或 fi…...

DAY17||654.最大二叉树 |617.合并二叉树 |700.二叉搜索树中的搜索 |

654.最大二叉树 题目&#xff1a;654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树…...

读构建可扩展分布式系统:方法与实践16读后总结与感想兼导读

1. 基本信息 构建可扩展分布式系统&#xff1a;方法与实践 [美]伊恩戈顿(Ian Gorton)著 机械工业出版社,2024年5月出版 1.1. 读薄率 书籍总字数188千字&#xff0c;笔记总字数49688字。 读薄率49688188000≈26.4% 1.2. 读厚方向 设计模式&#xff1a;可复用面向对象软件的…...

Anaconda 安装

目录 - [简介](#简介) - [安装Anaconda](#安装anaconda) - [启动Anaconda Navigator](#启动anaconda-navigator) - [创建环境](#创建环境) - [管理包](#管理包) - [常用命令行操作](#常用命令行操作) - [Jupyter Notebook 快速入门](#jupyter-notebook-快速入门) - [结…...

优雅使用 MapStruct 进行类复制

前言 在项目中&#xff0c;常常会遇到从数据库读取数据后不能直接返回给前端展示的情况&#xff0c;因为还需要对字段进行加工&#xff0c;比如去除时间戳记录、隐藏敏感数据等。传统的处理方式是创建一个新类&#xff0c;然后编写大量的 get/set 方法进行赋值&#xff0c;若字…...

第19周JavaWeb编程实战-MyBatis实现OA系统 1-OA系统

办公OA系统项目开发 课程简介 本课程将通过慕课办公OA平台的开发&#xff0c;讲解实际项目开发中必须掌握的技能和设计技巧。课程分为三个主要阶段&#xff1a; 需求说明及环境准备&#xff1a; 基于RBAC的访问控制模块开发&#xff1a; 多级请假审批流程开发&#xff1a; …...

仿黑神话悟空跑动-脚下波纹特效(键盘wasd控制走动)

vue使用three.js实现仿黑神话悟空跑动-脚下波纹特效 玩家角色的正面始终朝向鼠标方向&#xff0c;且在按下 W 键时&#xff0c;玩家角色会朝着鼠标方向前进 空格建跳跃 <template><div ref"container" class"container" click"onClick"…...

`torch.utils.data`模块

在PyTorch中&#xff0c;torch.utils.data模块提供了许多有用的工具来处理和加载数据。以下是对您提到的DataLoader, Subset, BatchSampler, SubsetRandomSampler, 和 SequentialSampler的详细解释以及使用示例。 1. DataLoader DataLoader是PyTorch中用于加载数据的一个非常…...

深入理解 `strncat()` 函数:安全拼接字符串

目录&#xff1a; 前言一、 strncat() 函数的基本用法二、 示例代码三、 strncat() 与 strcat() 的区别四、 注意事项五、 实际应用场景总结 前言 在C语言中&#xff0c;字符串操作是编程中非常常见的需求。strncat() 函数是标准库中用于字符串拼接的一个重要函数&#xff0c;…...

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积&#xff0c;将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时&#xff0c;该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组&#xff0c;数组中的某个元素被作为锚点&#xff08;一般…...

设计模式之装饰模式(Decorator)

前言 这个模式带给我们有关组合跟继承非常多的思考 定义 “单一职责” 模式。动态&#xff08;组合&#xff09;的给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码 & 减少…...

大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

React入门准备

React是什么 React是一个用于构建用户界面的JavaScript框架&#xff0c;用于构建“可预期的”和“声明式的”Web用户界面&#xff0c;特别适合于构建那些数据会随时间改变的大型应用的用户界面。 它起源于Facebook的内部项目&#xff0c;因为对市场上所有JavaScript MVC框架都…...

robomimic基础教程(四)——开源数据集

robomimic开源了大量数据集及仿真环境&#xff0c;数据集标准格式为HDF5 目录 一、基础要求 二、使用步骤 1. 下载数据集 2. 后处理 3. 训练 4. 查看训练结果 三、HDF5数据集结构与可视化 1. 数据集结构 &#xff08;1&#xff09;根级别&#xff08;data 组 group&a…...

胤娲科技:AI界的超级充电宝——忆阻器如何让LLM告别电量焦虑

当AI遇上“记忆橡皮擦”&#xff0c;电量不再是问题&#xff01; 嘿&#xff0c;朋友们&#xff0c;你们是否曾经因为手机电量不足而焦虑得像个无头苍蝇&#xff1f;想象一下&#xff0c;如果这种“电量焦虑”也蔓延到了AI界&#xff0c; 特别是那些聪明绝顶但“耗电如喝水”的…...

前端大模型入门:使用Transformers.js手搓纯网页版RAG(二)- qwen1.5-0.5B - 纯前端不调接口

书接上文&#xff0c;本文完了RAG的后半部分&#xff0c;在浏览器运行qwen1.5-0.5B实现了增强搜索全流程。但受限于浏览器和模型性能&#xff0c;仅适合于研究、离线和高隐私场景&#xff0c;但对前端小伙伴来说大模型也不是那么遥不可及了&#xff0c;附带全部代码&#xff0c…...

K-means聚类分析对比

K-means聚类分析&#xff0c;不同K值聚类对比&#xff0c;该内容是关于K-means聚类分析的&#xff0c;主要探讨了不同K值对聚类结果的影响。K-means聚类是一种常见的数据分析方法&#xff0c;用于将数据集划分为K个不同的类别。在这个过程中&#xff0c;选择合适的K值是非常关键…...

tar命令:压缩、解压的好工具

一、命令简介 用途&#xff1a; tar​ 命令用于创建归档文件&#xff08;tarball&#xff09;&#xff0c;以及从归档文件中提取文件。 标签&#xff1a; 文件管理&#xff0c;归档。 特点&#xff1a; 归档文件可以保留原始文件和目录的层次结构&#xff0c;通常使用 .tar ​…...

Mac电脑上最简单安装Python的方式

背景 最近换了一台新的 MacBook Air 电脑&#xff0c;所有的开发软件都没有了&#xff0c;需要重新配环境&#xff0c;而我现在最常用的开发程序就是Python。这篇文章记录一下我新Mac电脑安装Python的全过程&#xff0c;也给大家一些思路上的提醒。 以下是我新电脑的配置&…...

Linux基础命令cd详解

cd&#xff08;change directory&#xff09;命令是 Linux 中用于更改当前工作目录的基础命令。它没有很多复杂的参数&#xff0c;但它的使用非常频繁。以下是 cd 命令的详细说明及示例。 基本语法 cd [选项] [路径] 常用选项 -L : 使用逻辑路径&#xff08;默认选项&…...

【大模型对话 的界面搭建-Open WebUI】

Open WebUI 前身就是 Ollama WebUI&#xff0c;为 Ollama 提供一个可视化界面&#xff0c;可以完全离线运行&#xff0c;支持 Ollama 和兼容 OpenAI 的 API。 github网址 https://github.com/open-webui/open-webui安装 第一种 docker安装 如果ollama 安装在同一台服务器上&…...

如何在算家云搭建text-generation-webui(文本生成)

一、text-generation-webui 简介 text-generation-webui 是一个流行的用于文本生成的 Gradio Web UI。支持 transformers、GPTQ、AWQ、EXL2、llama.cpp (GGUF)、Llama 模型。 它的特点如下&#xff0c; 3 种界面模式&#xff1a;default (two columns), notebook, chat支持多…...