【深度学习】注意力机制与自注意力机制详解

news2024/9/25 18:31:17

深度学习中的注意力机制/自注意力机制详解

  • 1. 注意力机制的通俗理解
  • 2. 注意力和自注意力机制的区别
  • 3. 自注意力机制原理与计算流程
    • 3.1 引入自注意力机制的目的与思想
    • 3.2 从向量角度理解 [R1]
    • 3.3 从Self-Attention核心公式理解 [R3]
  • 4. 多头自注意力机制(Multi-head Self-attention)
  • 5. 总结
  • 6. 扩展内容
    • 6.1 为什么提出Transformer:Attention is all you need ?
    • 6.2 Self-Attention v.s. CNN / v.s. RNN [R1][R7][R8]
  • 参考链接

1. 注意力机制的通俗理解

当人类观察事物时,往往会选择性地关注较为重要的信息,这种现象称为注意力机制。通过持续聚焦于关键位置以获取更多有价值的信息,同时忽略无关的干扰,视觉注意力机制显著提升了我们处理信息的效率与准确性。类似地,深度学习中的注意力机制模仿了这种过程,帮助模型从大量数据中筛选出关键信息,减少对不重要内容的关注,从而提高模型的性能和决策能力。

在这里插入图片描述

比如这张图片,大多数人可能会更容易把目光集中在那只可爱的小猪身上,其次才会注意到钢琴或背景。

2. 注意力和自注意力机制的区别

注意力机制: 发生在目标元素(输出)与源元素(输入)之间。

自注意力机制: 不同于输入与输出之间的注意力机制,自注意力机制是在输入序列内部元素之间,或者输出序列内部元素之间的相互作用。

区别在于,注意力机制的查询和键来自不同的来源。例如,在中译英模型中,查询是中文单词的特征,而键是英文单词的特征。而自注意力机制的查询和键则来自同一组元素,即查询和键都是中文特征,彼此之间进行注意力计算。这可以理解为,同一句话中的词元或同一张图像中的不同patch之间的相互作用。因此,自注意力机制(Self-Attention)也被称为内部注意力机制(Intra-Attention)。

总结来说,注意力机制和自注意力机制的区别仅在于处理的对象不同,计算过程相同,暂且理解到这,其他可等理解全文后再思考。接下来,我们以自注意力机制为例进行详细分析。

3. 自注意力机制原理与计算流程

在深度学习中,注意力机制(Attention Mechanism)是一种能够自动聚焦于输入数据中最相关部分的技术,最早应用于自然语言处理(NLP)领域,但现在已广泛应用于各种任务,如计算机视觉、时间序列分析等。注意力机制的核心思想是,不再对输入序列中的每个元素赋予相同的权重,而是根据上下文信息为不同元素分配不同的权重,以实现信息的动态选择。

3.1 引入自注意力机制的目的与思想

神经网络在处理大小不一的向量输入时,不同向量之间往往存在一定的关系。然而,在实际训练过程中,这些关系难以充分体现,导致模型的效果不佳。例如,在机器翻译(序列到序列的问题,机器自动决定标签数量)、词性标注(一个向量对应一个标签)、语义分析(多个向量对应一个标签)等自然语言处理任务中,模型无法充分利用输入之间的依赖关系。

为了解决全连接神经网络无法有效捕捉多个相关输入之间关联性的问题,自注意力机制提供了一种有效的方法。自注意力机制的核心思想是让模型关注输入序列中不同元素之间的相关性,通过计算每个元素与其他所有元素之间的相关性(注意力权重),将输入序列进行加权求和,从而得到新的表示。这种表示不仅包含了序列中所有元素的信息,还能够突出与当前元素关联的重要部分。

比如我们在理解句子时,当遇到“eating”这个词时,自然会预期下文可能会提到与食物相关的词汇。而句中其他词汇,虽然可能也与食物有关,但它们与“eating”的直接关联性较低,注意力机制能有效捕捉这种重要的关联性。

在这里插入图片描述

所以,深度学习中的注意力机制可以理解为一组重要性权重的集合。为了预测或推断某个元素,例如图像中的一个像素或句子中的一个词,注意力机制通过估计该元素与其他元素的相关性来赋予不同的权重。相关性越强,权重越大,模型就越会依赖这些元素进行预测或推断。通过这种加权汇总的方式,注意力机制帮助模型更有效地理解和处理复杂的数据结构。

3.2 从向量角度理解 [R1]

目标: 针对 a 1 - a 4 a_1\text{-}a_4 a1-a4(可能是输入也可以作为中间层的输入)进行变换,使得变换得到的 b 1 - b 4 b_1\text{-}b_4 b1-b4 都会考虑整个输入序列。

在这里插入图片描述

所以 b 1 b_1 b1 相当于包含 a 1 a_1 a1 对其他所有输入相关程度的 a 1 a_1 a1 b 2 b_2 b2 b 3 b_3 b3 b 4 b_4 b4 同理,那么如何求解 b 1 - b 4 b_1\text{-}b_4 b1-b4 呢?

在这里插入图片描述

计算流程

首先,计算相关程度,较为常用的就是左边的点乘(内积),内积物理意义上是投影的含义,可代表相关性 [R2]。

为方便理解,这里我们做一个假设:对 a 1 - a 4 a_1\text{-}a_4 a1-a4 均采取一种线性变换,将每个输入变成3个输入去代表它们进行运算,即

在这里插入图片描述
q 1 = W q a 1        k 1 = W k a 1        v 1 = W v a 1 q 2 = W q a 2        k 2 = W k a 2        v 2 = W v a 2 q 3 = W q a 3        k 3 = W k a 3        v 3 = W v a 3 q^{1}=W^{q}a^{1} \ \ \ \ \ \ k^{1}=W^{k}a^{1} \ \ \ \ \ \ v^{1}=W^{v}a^{1}\\q^{2}=W^{q}a^{2} \ \ \ \ \ \ k^{2}=W^{k}a^{2} \ \ \ \ \ \ v^{2}=W^{v}a^{2}\\q^{3}=W^{q}a^{3} \ \ \ \ \ \ k^{3}=W^{k}a^{3} \ \ \ \ \ \ v^{3}=W^{v}a^{3} q1=Wqa1      k1=Wka1      v1=Wva1q2=Wqa2      k2=Wka2      v2=Wva2q3=Wqa3      k3=Wka3      v3=Wva3
可暂且认为 W q W^{q} Wq W k W^{k} Wk W v W^{v} Wv 是单位矩阵,即目前 q i q^{i} qi k i k^{i} ki v i v^{i} vi 均等于 a i a^{i} ai,只是我们求解 a i a^{i} ai 与其他相关性时是用 q i q^{i} qi 与其他的 k i k^{i} ki 点乘,便于区分目标/任务。

在这里插入图片描述

计算 a 1 a^{1} a1 a 1 a^{1} a1 自身以及 a 2 a^{2} a2 a 3 a^{3} a3 a 4 a^{4} a4的关联性,得到 a 1 , 1 a_{1,1} a1,1 , a 1 , 2 a_{1,2} a1,2 a 1 , 3 a_{1,3} a1,3 a 1 , 4 a_{1,4} a1,4

在这里插入图片描述

得到关联性向量之后,再经过softmax处理,得到attention scores。一方面,可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面,通过softmax的内在机制更加突出重要元素的权重;某个值的权重越大,表示相似度越高。

在这里插入图片描述

基于attention scores抽取信息,将关联性向量 a 1 , 1 ′ a_{1,1}^{\prime} a1,1 , a 1 , 2 ′ a_{1,2}^{\prime} a1,2 a 1 , 3 ′ a_{1,3}^{\prime} a1,3 a 1 , 4 ′ a_{1,4}^{\prime} a1,4 乘上对应的value: v 1 - v 4 v_1\text{-}v_4 v1-v4,然后结果相加得到 b 1 b^1 b1

在这里插入图片描述

b 2 b^{2} b2 b 3 b^{3} b3 b 4 b^{4} b4 同理。

在这里插入图片描述

依次计算 b 2 b^{2} b2 b 3 b^{3} b3 b 4 b^{4} b4。所以哪个关联性更大,得到的结果也就越接近那个关联性数据(比如 a 1 , 1 ′ a_{1,1}^{\prime} a1,1 最大,得到的 b 1 b^1 b1 也就最接近 v 1 v^1 v1,或者说 b 1 b^1 b1 的主要构成是由 v 1 v^1 v1 构成)。

在这里插入图片描述

总流程(矩阵角度理解):

在这里插入图片描述

因此,最终相当于将输入 I \text{I} I 变成了 O \text{O} O O \text{O} O包含了不同输入向量之前的相关性信息,也就是赋予了注意力功能。

在这里插入图片描述

在这里我们可以发现,整个过程中并没有涉及到神经网络学习的部分。其实,这和我们一开始提到的 W q W^{q} Wq W k W^{k} Wk W v W^{v} Wv 有关。起初,我们为了便于理解,假设它们是单位矩阵,而实际上这些权重矩阵是需要通过训练学习的,以增强自注意力机制的拟合能力,从而帮助网络朝着最优目标函数的方向优化。

3.3 从Self-Attention核心公式理解 [R3]

这里是第二种推导过程,实际上与上面的推导完全相同,只是换了一种基于矩阵的理解方式,供参考。

Transformer中的自注意力机制(Self-Attention)是模型的核心组件之一,主要用于捕捉序列数据中的依赖关系,使模型在处理长距离依赖问题时更加高效。Self-Attention机制的核心公式为:
A t t e n t i o n ( Q , K , V ) = S o f t m a x ( Q K ⊤ d k ) V Attention(Q,K,V)=Softmax(\frac{QK^\top}{\sqrt{d_k}})V Attention(Q,K,V)=Softmax(dk QK)V

公式中的 Q Q Q K K K V V V 分别代表 Query、Key 和 Value。仅从公式来看,难以直观理解 Attention 的具体作用。下面将通过 Transformer 中的 Self-Attention 机制,进一步介绍 Attention 背后的原理。

1 向量点乘

我们先从 S o f t m a x ( X X ⊤ ) X Softmax(\mathbf{X}\mathbf{X}^\top)\mathbf{X} Softmax(XX)X这样一个公式开始。

首先需要复习一下向量点乘(Dot Product)的概念。对于两个行向量 x = [ x 0 , x 1 , ⋯   , x n ] \mathbf{x}=[x_0,x_1,\cdots,x_n] x=[x0,x1,,xn] y = [ y 0 , y 1 , ⋯   , y n ] \mathbf{y}=[y_0,y_1,\cdots,y_n] y=[y0,y1,,yn]
x ⋅ y = x 0 y 0 + x 1 y 1 + ⋯ + x n y n \mathbf{x}\cdot\mathbf{y}=x_0y_0+x_1y_1+\cdots+x_ny_n xy=x0y0+x1y1++xnyn

向量点乘的几何意义是向量 x \mathbf{x} x 在向量 y \mathbf{y} y 方向上的投影。通过再与向量 y \mathbf{y} y 相乘,可以衡量两个向量的相似度。点乘结果越大,表示两个向量越相似。设一个矩阵 X \mathbf{X} X n n n 个行向量组成,例如,可以将某个行向量 x i \mathbf{x}_i xi 理解为某个词的词向量,这样由 n n n 个行向量构成一个 n × n n \times n n×n 的方阵:
X = [ x 0 x 1 ⋮ x n ] ∈ R n × n \mathbf{X}=\begin{bmatrix}\mathbf{x}_0\\\mathbf{x}_1\\\vdots\\\mathbf{x}_n\end{bmatrix}\in \mathbb{R}^{n\times n} X= x0x1xn Rn×n

则:
X ⊤ = [ x 0 ⊤ x 1 ⊤ ⋯ x n ⊤ ] \mathbf{X}^\top=\begin{bmatrix}\mathbf{x}_0^\top&\mathbf{x}_1^\top&\cdots&\mathbf{x}_n^\top\end{bmatrix} X=[x0x1xn]

矩阵 X \mathbf{X} X 与矩阵的转置 X ⊤ \mathbf{X}^\top X 相乘, X \mathbf{X} X 中的每一行与 X ⊤ \mathbf{X}^\top X 的每一列相乘得到目标矩阵的一个元素, X X ⊤ \mathbf{X}\mathbf{X}^\top XX 可表示为:
X X ⊤ = [ x 0 ⋅ x 0 x 0 ⋅ x 1 ⋯ x 0 ⋅ x n x 1 ⋅ x 0 x 1 ⋅ x 1 ⋯ x 1 ⋅ x n ⋮ x n ⋅ x 0 x n ⋅ x 1 ⋯ x n ⋅ x n ] \mathbf{X}\mathbf{X}^\top=\begin{bmatrix}\mathbf{x}_0\cdot\mathbf{x}_0&\mathbf{x}_0\cdot\mathbf{x}_1&\cdots&\mathbf{x}_0\cdot\mathbf{x}_n\\\mathbf{x}_1\cdot\mathbf{x}_0&\mathbf{x}_1\cdot\mathbf{x}_1&\cdots&\mathbf{x}_1\cdot\mathbf{x}_n\\\vdots\\\mathbf{x}_n\cdot\mathbf{x}_0&\mathbf{x}_n\cdot\mathbf{x}_1&\cdots&\mathbf{x}_n\cdot\mathbf{x}_n\end{bmatrix} XX= x0x0x1x0xnx0x0x1x1x1xnx1x0xnx1xnxnxn

X X ⊤ \mathbf{X}\mathbf{X}^\top XX 中的第一行第一列元素为例,它实际上是向量 x 0 \mathbf{x}_0 x0 与自身的点乘,表示 x 0 \mathbf{x}_0 x0 与自身的相似度。同理,第一行第二列的元素则表示 x 0 \mathbf{x}_0 x0 x 1 \mathbf{x}_1 x1 之间的相似度。

以词向量矩阵为例,该矩阵的每一行为一个词的词向量。将该矩阵与其转置相乘后,生成的目标矩阵实际上表示每个词的词向量与所有其他词的词向量之间的相似度。

在这里插入图片描述

如果在此基础上引入 Softmax 操作,即计算 S o f t m a x ( X X ⊤ ) Softmax(\mathbf{X}\mathbf{X}^\top) Softmax(XX),Softmax 的作用是对向量进行归一化。因此,这一步相当于对相似度进行归一化,得到一个归一化后的权重矩阵。矩阵中的某个值越大,意味着对应的词与其他词之间的相似度越高。

在这里插入图片描述

在此基础上,进一步计算 S o f t m a x ( X X ⊤ ) X Softmax(\mathbf{X}\mathbf{X}^\top)\mathbf{X} Softmax(XX)X,将得到的归一化权重矩阵与词向量矩阵相乘。在这个过程中,权重矩阵中的每一行与词向量矩阵的一列相乘,而词向量矩阵的一列实际上表示了不同词的某一维度。通过这样的矩阵相乘,相当于执行一个加权求和的过程,从而得到的新表示是经过加权求和后的结果词向量,而权重矩阵则是通过相似度和归一化计算得到的。

在这里插入图片描述

2 Self-Attention中的 Q Q Q K K K V V V

注意力Attention机制的最核心的公式为: S o f t m a x ( Q K ⊤ d k ) V Softmax(\frac{QK^\top}{\sqrt{d_k}})V Softmax(dk QK)V,与我们刚才分析的 S o f t m a x ( X X ⊤ ) X Softmax(\mathbf{X}\mathbf{X}^\top)\mathbf{X} Softmax(XX)X 有几分相似。Transformer [R4] 论文中将这个Attention公式描述为:Scaled Dot-Product Attention。其中, Q Q Q 为 Query、 K K K 为 Key、 V V V 为 Value。 Q Q Q K K K V V V是从哪儿来的呢? Q Q Q K K K V V V 其实都是从同样的输入矩阵 X X X 线性变换而来的。我们可以简单理解成:
Q = X W Q K = X W K V = X W V Q=XW^Q\\K=XW^K\\V=XW^V Q=XWQK=XWKV=XWV

在这里插入图片描述

其中, W Q W^Q WQ W K W^K WK W V W^V WV 是三个可训练的参数矩阵。输入矩阵 X X X 分别与 W Q W^Q WQ W K W^K WK W V W^V WV 相乘,生成 Q Q Q K K K V V V,相当于经历了一次线性变换。Attention不直接使用 X X X,而是使用经过矩阵乘法生成的这三个矩阵,因为使用三个可训练的参数矩阵,可增强模型的拟合能力。

3 Self-Attention计算流程

下面这张图是Transformer论文中描述Attention计算过程的示意图。

在这里插入图片描述

在这张图中, Q Q Q K ⊤ K^\top K 通过矩阵乘法(MatMul)计算得到了相似度矩阵。接着,对相似度矩阵的每个元素除以 d k \sqrt{d_k} dk ,其中 d k d_k dk K K K 的维度大小,这样得到了注意力得分(Attention Score)。这个除法操作被称为“缩放”(Scale)。当 d k d_k dk 很大时, Q K ⊤ QK^\top QK 的乘法结果的方差会增大,通过缩放可以减小方差,从而使训练过程中的梯度更新更加稳定。

因此,Self-Attention的计算过程如下:

第一步: X X X W W W 进行矩阵乘法,生成 Q Q Q K K K V V V
第二步: 进行 Q K T QK^T QKT 计算,得到相似度,如下图所示。

在这里插入图片描述

第三步: 将刚得到的相似度矩阵除以 d k \sqrt{d_k} dk 后,再进行 Softmax 操作。经过 Softmax 的归一化处理后,每个值变成一个大于 0 且小于 1 的权重系数(注意力得分,Attention Score),且每行的总和为 1,从而形成一个权重矩阵。

在这里插入图片描述

第四步: 使用刚得到的权重矩阵,与 V V V 相乘,计算加权求和。

在这里插入图片描述

上图中权重矩阵的第 1 行表示单词 1 与其他所有单词的权重系数。最终,单词 1 的输出 Z 1 Z_1 Z1​ 等于所有单词 i i i 的值 V i V_i Vi​ 根据权重系数加权求和,如下图所示:

在这里插入图片描述

4. 多头自注意力机制(Multi-head Self-attention)

个人理解是,在自注意力机制的基础上,增加可训练的线性变换(即矩阵相乘),以提高模型的拟合能力,从而更细致、完美、平滑地实现所需的功能。这类似于机器学习和深度学习的基本原理,通过增加神经元或隐藏层来提升拟合能力。更多信息请参考文末链接 [R2][R3]。

在这里插入图片描述

5. 总结

注意力机制的计算流程:

计算相关性: 在第一阶段,计算 Query 与不同 Key 之间的相关性,从而生成不同 Value 的权重系数。
归一化处理: 第二阶段对第一阶段的输出进行归一化,将数值范围映射到 0 和 1 之间。
加权求和: 根据权重系数对 Value 进行加权求和,最终得到注意力数值。

在计算相似性或相关性时,常用的方法包括点积、余弦相似性和多层感知机(MLP)网络。由于产生方法的不同,第一阶段得分的取值范围也有所区别。第二阶段引入类似 SoftMax 的计算方式对第一阶段得分进行转换:一方面,进行归一化,将原始计算值整理为所有元素权重之和为 1 的概率分布;另一方面,Softmax 的机制进一步突出重要元素的权重。

注意力机制的主要优势:

a. 提升模型的表达能力: 通过动态分配权重,注意力机制可以捕捉输入数据中长距离依赖关系以及重要的特征。
b. 并行化计算: 尤其在Transformer中,自注意力机制相比传统的RNN模型具备良好的并行化特性,可以加速训练过程。
c. 适用范围广泛: 从自然语言处理扩展到图像处理、语音识别等众多领域,表现出了很强的通用性。

缺点:

注意力机制未能反映词汇在句子中的位置关系(或向量在序列中的位置关系)。为了克服这一问题,可以引入位置编码(positional encoding)。

还有一篇博文 [R4] 从主观和客观的角度进行了分析,我个人认为这篇博文也有助于理解相关内容,非常值得参考和学习。

6. 扩展内容

6.1 为什么提出Transformer:Attention is all you need ?

传统的循环神经网络(RNN)和编码器-解码器架构存在一些缺陷:

无法实现并行计算: RNN的计算过程是顺序的,这导致了计算效率低下。
长文本输入导致信息丢失: 在处理长序列时,RNN容易忘记早期的信息,造成上下文的丢失。
因此,作者摒弃了RNN,提出了一种新的Transformer架构,该架构完全依赖于注意力机制,从而避免了上述问题 [R5][R6]。

在 [R5] 引言部分,作者提到传统RNN计算难以并行。然而,在常见的AI算法中,卷积神经网络(CNN)是一种经典的并行计算算法。人们使用CNN的目的是减少顺序计算带来的开销,将计算转化为并行计算。然而,卷积也存在一个缺点:卷积核一次只能处理局部范围内的数据,这使得在处理长文本时,卷积无法捕捉到卷积核之外的数据之间的关系。因此,尽管卷积能够有效地进行并行计算,但在处理序列数据(如文本)时,其效果并不理想。卷积之所以能够良好地完成并行计算,是因为每个卷积核在输入特征图上独立运算,每个卷积核输出一个通道,代表输入数据的某种特征。

那么,是否可以模仿卷积的这种特性,设计一种机制来实现多个卷积核独立计算的效果呢?

当然可以。为此,作者提出了多头注意力机制(Multi-Head Attention),其作用与多个卷积核类似。每个“头”实际上是一个独立的注意力小网络,它们可以独立学习输入数据的某种特征。这样一来,多个“头”之间就能够并行计算,从而提高了模型的效率和表达能力。

6.2 Self-Attention v.s. CNN / v.s. RNN [R1][R7][R8]

CNN是Self-Attention的特例,Self-Attention是复杂化的CNN。数据集少时CNN效果更好,数据集多时Self-Attention更好。

RNN长文本输入导致信息丢失;RNN不能并行处理,Self-Attention可以,更有效率。


参考链接

[R1] 台大李宏毅自注意力机制和Transformer详解!

[R2] 匹配追踪MP和正交匹配追踪OMP

[R3] Transformer-鲁老师

[R4] 关于Attention的超详细讲解

[R5] Attention Is All You Need

[R6]《Attention is all you need》通俗解读,彻底理解版:part1

[R7] On the Relationship between Self-Attention and Convolutional Layers

[R8] Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention

[R9] 注意力机制到底在做什么,Q/K/V怎么来的?一文读懂Attention注意力机制

[R10] 注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解


END
2024年9月24日

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

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

相关文章

网络威慑战略带来的影响

文章目录 前言一、网络威慑的出现1、人工智能带来的机遇二、网络空间的威慑困境1、威慑概念的提出2、网络威慑的限度3、人类对网络威胁的认知变化4、网络空间的脆弱性总结前言 网络威慑是国家为应对网络空间风险和威胁而采取的战略。冷战时期核威慑路径难以有效复制至网络空间…

HT6881 4.7W防削顶单声道音频功率放大器

特点 防削顶失真功能(Anti-Clipping Function,ACF) AB类/D类切换 优异的全带宽EMI抑制性能 免滤波器数字调制,直接驱动扬声器 输出功率 1.4W (VDD3.6V, RL4Ω, THDN10%, Class D) 2.8W (VDD5.0V, RL4Ω, THDN10%, ClassD) 4.7W(VDD6.5V,RL40,THDN10%, ClassD) 2.5W …

【环境踩坑系列】centos7安装python3.10.X

前言 虽然centOS8已经发布了相当一段时间了,但是基于稳定性、成熟的社区等原因,大家在选择centOS作为服务器操作系统的时候仍然会选择centOS7作为首选。但是centOS7自带的是python2.7.5,当前大量的python程序要用到的又是python3&#xff0c…

网络原理之IP协议(网络层)

目录 前言 什么是IP协议? IP协议的协议头格式 16位总长度(字节数) 16位标识、3位标志位和13位片偏移 8位生存时间 IP地址管理 1.动态分配IP 2.NAT机制(网络地址转换) NAT机制是如何工作的 NAT机制的优缺点…

监控易监测对象及指标之:全面监控Oracle ODBC数据库

在数字化时代,数据库作为存储和管理企业核心数据的基石,其稳定性和性能直接关系到业务的连续性和效率。Oracle数据库以其强大的功能和稳定性,广泛应用于各行各业。为了确保Oracle数据库的稳定运行和高效性能,对其进行全面监控显得…

阴影的基本原理

1、现实中阴影的产生规则 如图所示,现实中的阴影产生规则是,在不考虑光线反射的前提下,当一个光源发射的一条光线遇到一个不透明物体A时,这条光线就不能够再继续照亮其他物体了(物体B的一部分)&#xff0c…

ChatGPT 向更多用户推出高级语音模式:支持 50 种语言;字节发布两款新视频生成大模型丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

AutosarMCAL开发——基于EB MCU驱动

这里写目录标题 1.MCU模块的作用2.EB配置以及接口应用3.总结 1.MCU模块的作用 MCU模块主要分为三部分: McuGeneralConfiguration MCU通用配置(一般保持默认)McuHardwareResourceAllocationConf 硬件资源分配管理器(用于连接不同…

TEDxDUTH 使用 NocoBase 实现革新

作者:TEDxDUTH TEDxDUTH 是由德莫克里特大学的志愿者们组成的一个充满活力的团队。作为 TEDx 全球社区的一员,我们的使命简单而有力:传播能够激励和引发改变的思想。我们通过精心策划一系列活动,成功汇聚了众多思想家、创新家以及…

Module did not self-register: ‘drivelist.node‘报错解决

报错如下: node_modules/bindings/bindings.js:121throw e;^Error: Module did not self-register: xxxx/node_modules/drivelist/build/Release/drivelist.node.at process.func [as dlopen] (electron/js2c/asar.js:140:31)at Object.Module._extensions..node (…

探索 Python 中的 AI 魔法:markdownify 库的奥秘

文章目录 探索 Python 中的 AI 魔法:markdownify 库的奥秘背景:为何选择 markdownify?库简介:markdownify 是什么?安装指南:如何安装 markdownify?函数用法:markdownify 的五个简单函…

【Qwen2-VL】通义多模态新作速读

Qwen2-VL https://github.com/QwenLM/Qwen2-VL 结构: 整体:6.75 亿个参数的 Vision Transformer (ViT) (Dosovitskiy et al., 2021) Qwen2 预处理阶段: 朴素动态分辨率支持&…

工程车辆目标检测、工程车检测算法、工程车辆类型检测算法

工程车检测算法主要用于智能交通系统、建筑工地管理、矿山开采、物流运输等领域,通过图像识别技术来检测和识别工程车,以提高安全管理、交通流量管理和资源调度的效率。以下是关于工程车检测算法的技术实现、应用场景及优势的详细介绍。 一、技术实现 工…

VRP-SAM

不建议复现

uni-app - - - - - 小程序获取宿主语言

const systemInfo uni.getSystemInfoSync(); console.log(systemInfo);uni.showModal({title: 宿主语言,content: systemInfo.hostLanguage })官网地址:【uni-app getSystemInfoSync】

西圣Mike Pro无线麦克风强势上线!百元级实力口碑与销量双冠王!

随着音频技术的不断革新与飞跃,西圣XISEM再次以卓越的创新驱动力推出全新力作,近日,西圣品牌震撼发布全新专业无线麦克风——西圣Mike Pro。用行业领先的硬件配置,百元价格打造千元专业级麦克风专业体验,音质远超同价位…

1分钟学会BCT环境搭建和网络配置 (24年9月25日更新)

又开始弄AirPlay了,在之前基础上更新下如何配置BCT环境和网络 如何配置apple 路由器在之前的文章有教,在这里就不陈述了 传送门:【BCT认证】Bonjour Conformance Test教程 1、apple路由器怎么接? 2、命令怎么输入? IPv4 sudo ./BonjourConformanceTest -I en4 -L -DD -…

拆解一个有问题的索爱GK6蓝牙耳机,蓝牙连接中的一些软硬件问题

由来 经常带入耳式蓝牙,倒是耳朵有时候难受,无意间看见网上的夹耳式耳机,想要尝试一下。但毕竟好点儿的太贵,主要想了解内部结构,所以淘到两个电子垃圾 拆解充电仓 这个只能暴力一点儿,需要拆坏一个卡扣…

记某地级市护网的攻防演练行动

0x1 前言 哈喽,师傅们! 这次给师傅们分享的是上上个星期的地级市护网的攻防演练的两个案例,涉及到的知识点可能比较偏,下面我也会提前给师傅们拓展下改漏洞相关的知识点内容。护网攻防演练中,涉及到的很多敏感内容这…

古代经典名方目录数据库-支持经典名方检索!

"古代经典名方目录"是指一系列历史上流传下来的,被认为具有一定疗效的中药方剂的汇总。这些方剂多来源于历代医学典籍,经过长期临床实践的检验,部分已被收录于官方的目录之中,以便于现代医疗实践中的参考和应用。 目前…