深度学习笔记之Transformer(二)关于注意力分数的总结

news2024/11/27 20:31:09

深度学习笔记之Transformer——关于注意力分数的总结

引言

上一节介绍了注意力机制的基本逻辑。本节作为过渡文章,归纳注意力分数这个概念。

回顾: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归

作为一种懒惰学习 ( Lazy Learnging ) (\text{Lazy Learnging}) (Lazy Learnging)方法, Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归基于训练集 D = { ( x ( i ) , y ( i ) ) } i = 1 N \mathcal D = \{(x^{(i)},y^{(i)})\}_{i=1}^{N} D={(x(i),y(i))}i=1N,关于陌生样本 x x x的预测过程表示为:
f ( x ) = [ κ ( x , x ( 1 ) ) ∑ j = 1 N κ ( x , x ( j ) ) , κ ( x , x ( 2 ) ) ∑ j = 1 N κ ( x , x ( j ) ) , ⋯   , κ ( x , x ( N ) ) ∑ j = 1 N κ ( x , x ( j ) ) ] 1 × N ( y ( 1 ) y ( 2 ) ⋮ y ( N ) ) N × 1 = ∑ i = 1 N κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( i ) \begin{aligned} f(x) & = \left[\frac{\kappa(x,x^{(1)})}{\sum_{j=1}^N \kappa(x,x^{(j)})},\frac{\kappa(x,x^{(2)})}{\sum_{j=1}^N \kappa(x,x^{(j)})},\cdots,\frac{\kappa(x,x^{(N)})}{\sum_{j=1}^N \kappa(x,x^{(j)})}\right]_{1 \times N} \begin{pmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(N)} \end{pmatrix}_{N \times 1} \\ & = \sum_{i=1}^N \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(i)} \end{aligned} f(x)=[j=1Nκ(x,x(j))κ(x,x(1)),j=1Nκ(x,x(j))κ(x,x(2)),,j=1Nκ(x,x(j))κ(x,x(N))]1×N y(1)y(2)y(N) N×1=i=1Nj=1Nκ(x,x(j))κ(x,x(i))y(i)
训练集 D \mathcal D D给定的条件下,已知一个未知样本 x x x,那么 ∑ j = 1 N κ ( x , x ( j ) ) \sum_{j=1}^N \kappa(x,x^{(j)}) j=1Nκ(x,x(j))必然是一个确定的值。因而导致 y ( i ) y^{(i)} y(i)的系数 κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) \begin{aligned}\frac{\kappa(x,x^{(i)})}{\sum_{j=1}^{N} \kappa(x,x^{(j)})}\end{aligned} j=1Nκ(x,x(j))κ(x,x(i))必然仅与 x , x ( i ) x,x^{(i)} x,x(i)相关,而与其他训练样本无关。这里将其简写为如下形式:
f ( x ) = ∑ i = 1 N α ( x , x ( i ) ) ⋅ y ( i ) f(x) = \sum_{i=1}^N \alpha(x,x^{(i)}) \cdot y^{(i)} f(x)=i=1Nα(x,x(i))y(i)
α ( x , x ( i ) ) \alpha(x,x^{(i)}) α(x,x(i))这个函数结果可被称作 x x x关于训练样本 x ( i ) x^{(i)} x(i)注意力权重 ( Attention Weight ) (\text{Attention Weight}) (Attention Weight);假设 κ ( x , x ( i ) ) \kappa(x,x^{(i)}) κ(x,x(i))描述的是径向基核函数 ( Radial Basis Function,RBF ) (\text{Radial Basis Function,RBF}) (Radial Basis Function,RBF),可以将 f ( x ) f(x) f(x)表示成如下形式:
{ κ ( x , x ( i ) ) = exp ⁡ { − 1 2 σ 2 ∣ ∣ x − x ( j ) ∣ ∣ 2 } f ( x ) = ∑ i = 1 N κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( i ) = ∑ i = 1 N Softmax [ − 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 ] ⋅ y ( i ) \begin{cases} \begin{aligned} \kappa(x,x^{(i)}) & = \exp \left\{-\frac{1}{2\sigma^2} ||x - x^{(j)}||^2 \right\} \\ f(x) & = \sum_{i=1}^N \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(i)} \\ & = \sum_{i=1}^N \text{Softmax} \left[ - \frac{1}{2\sigma^2} ||x - x^{(i)}||^2\right] \cdot y^{(i)} \end{aligned} \end{cases} κ(x,x(i))f(x)=exp{2σ21∣∣xx(j)2}=i=1Nj=1Nκ(x,x(j))κ(x,x(i))y(i)=i=1NSoftmax[2σ21∣∣xx(i)2]y(i)
此时再去观察 α ( x , x ( i ) ) = Softmax [ 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 ] \begin{aligned} \alpha(x,x^{(i)}) = \text{Softmax} \left[\frac{1}{2\sigma^2} ||x - x^{(i)}||^2\right] \end{aligned} α(x,x(i))=Softmax[2σ21∣∣xx(i)2],可以发现: Softmax \text{Softmax} Softmax函数仅仅是一个归一化操作——该函数自身并不包含注意力信息。而真正包含注意力信息的只有 − 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 \begin{aligned}-\frac{1}{2\sigma^2}||x - x^{(i)}||^2\end{aligned} 2σ21∣∣xx(i)2。我们将这部分函数的结果称作注意力分数 ( Attention Score ) (\text{Attention Score}) (Attention Score)
很明显,注意力分数是指没有被‘标准化’ ( Normalization ) (\text{Normalization}) (Normalization)的;描述样本/向量间的‘纯粹的信息’。

使用流程图来描述上述过程:
注意力机制——流程图

再回首: Seq2seq \text{Seq2seq} Seq2seq中的注意力机制

回过头观察 Seq2seq \text{Seq2seq} Seq2seq Seq2seq \text{Seq2seq} Seq2seq中的注意力机制是否也满足上述流程 ? ? ?

场景构建

  • Seq2seq \text{Seq2seq} Seq2seq中,编码器中各时刻的序列信息 [ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯   , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1j)](j=1,2,,T)视作 Keys \text{Keys} Keys,而对应的 Values \text{Values} Values就是它们自身

  • 解码器中某一时刻 t ( t ∈ { 1 , 2 , ⋯   , T ′ } ) t(t \in \{1,2,\cdots,\mathcal T'\}) t(t{1,2,,T})的序列信息 h D ( t ) h_{\mathcal D}^{(t)} hD(t)(也可以是上一时刻的 h D ( t − 1 ) h_{\mathcal D}^{(t-1)} hD(t1),这里用 h D ( t ) h_{\mathcal D}^{(t)} hD(t)示例)视作 Query \text{Query} Query
    h D ( t ) h_{\mathcal D}^{(t)} hD(t)作为 Query \text{Query} Query的动机在于:我们主观想要了解 h D ( t ) h_{\mathcal D}^{(t)} hD(t)与各 [ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯   , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1j)](j=1,2,,T)之间的相关性信息。因而 h D ( t ) h_{\mathcal D}^{(t)} hD(t)是‘刻意信息’,而 [ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯   , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1j)](j=1,2,,T)是句子自身性质产生的‘无意信息’。

    关于‘刻意信息’与‘无意信息’详见上一节注意力机制基本介绍

执行过程
详细执行过程见深度学习笔记之 Seq2seq \text{Seq2seq} Seq2seq——注意力机制的执行过程

  • 通过构建神经网络的方式对 Query \text{Query} Query Keys \text{Keys} Keys进行计算,得到注意力分数 E t \mathcal E_t Et
    { H B i = { [ h L ; j , h R ; ( T + 1 − j ) ] j = 1 T } T × 1 T O ~ t = W Attn ⋅ [ Concat ( h D ( t ) , H B i ) ] + b Attn O t = Tanh ( O ~ t ) E t = V T O t \begin{cases} \mathcal H_{Bi} = \left\{ [h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 - j)}]_{j=1}^\mathcal T \right\}^T_{\mathcal T \times 1} \\ \quad \\ \widetilde{\mathcal O}_t = \mathcal W_{\text{Attn}} \cdot \left[\text{Concat} \left(h_{\mathcal D}^{(t)},\mathcal H_{Bi}\right)\right] + b_{\text{Attn}} \\ \mathcal O_t = \text{Tanh}(\widetilde{\mathcal O}_t) \\ \mathcal E_t = \mathcal V^T \mathcal O_t \end{cases} HBi={[hL;j,hR;(T+1j)]j=1T}T×1TO t=WAttn[Concat(hD(t),HBi)]+bAttnOt=Tanh(O t)Et=VTOt
  • 使用 Softmax \text{Softmax} Softmax函数对注意力分数 E t \mathcal E_t Et进行标准化,得到各时刻的注意力权重 ( Attention Weights ) (\text{Attention Weights}) (Attention Weights)
    S t = Softmax ( E t ) ⇒ S t = ( s t 1 , s s 2 , ⋯   , s t T ) T × 1 T \mathcal S_t = \text{Softmax}(\mathcal E_t) \Rightarrow \mathcal S_t = (s_{t1},s_{s2},\cdots,s_{t\mathcal T})_{\mathcal T \times 1}^T St=Softmax(Et)St=(st1,ss2,,stT)T×1T
  • 注意力权重与编码器各时刻序列信息(此时将其视作 Values \text{Values} Values)执行内积操作,得到该时刻的 Context \text{Context} Context向量 C t \mathcal C_t Ct
    C t = [ S t ] T H B i = ∑ j = 1 T s t j ⋅ [ h L ; j , h R ; ( T + 1 − j ) ] \begin{aligned} \mathcal C_t & = [\mathcal S_t]^T \mathcal H_{Bi} \\ & = \sum_{j=1}^{\mathcal T} s_{tj} \cdot [h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 - j)}] \end{aligned} Ct=[St]THBi=j=1Tstj[hL;j,hR;(T+1j)]

流程角度观察完全相同。只不过这里的 Keys,Values \text{Keys,Values} Keys,Values是相同信息。

注意力机制的泛化表示

查询向量 Q \mathcal Q Q M \mathcal M M键值对 { ( K j , V j ) } j = 1 M \{(\mathcal K_j,\mathcal V_j)\}_{j=1}^{\mathcal M} {(Kj,Vj)}j=1M映射到高维空间中:
{ Q ∈ R q K j ∈ R k V j ∈ R v \begin{cases} \mathcal Q \in \mathbb R^q \\ \mathcal K_j \in \mathbb R^k \\ \mathcal V_j \in \mathbb R^v \end{cases} QRqKjRkVjRv
对应的注意力输出可表示为:
f [ Q , ( K 1 , V 1 ) , ( K 2 , V 2 ) , ⋯   , ( K M , V M ) ⏟ M 个 ] = ∑ j = 1 M α ( Q , K j ) V j f \left[\mathcal Q,\underbrace{(\mathcal K_1,\mathcal V_1),(\mathcal K_2,\mathcal V_2),\cdots,(\mathcal K_{\mathcal M},\mathcal V_{\mathcal M})}_{\mathcal M个}\right] = \sum_{j=1}^{\mathcal M} \alpha(\mathcal Q,\mathcal K_j) \mathcal V_j f Q,M (K1,V1),(K2,V2),,(KM,VM) =j=1Mα(Q,Kj)Vj
其中 α ( Q , K j ) \alpha(\mathcal Q,\mathcal K_j) α(Q,Kj)表示注意力权重
这仅是 Q \mathcal Q Q与编号为 j j j Keys \text{Keys} Keys的注意力权重,它的结果是一个标量;基于 Softmax \text{Softmax} Softmax函数范围内的标量 ⇒ α ( Q , K j ) ∈ R \Rightarrow \alpha(\mathcal Q,\mathcal K_j) \in \mathbb R α(Q,Kj)R
α ( Q , K j ) = Softmax [ a ( Q , K j ) ] = exp ⁡ [ a ( Q , K j ) ] ∑ i = 1 M exp ⁡ [ a ( Q , K j ) ] \begin{aligned} \alpha(\mathcal Q,\mathcal K_j) & = \text{Softmax} \left[a(\mathcal Q,\mathcal K_j)\right] \\ & = \frac{\exp \left[a(\mathcal Q,\mathcal K_j)\right]}{\sum_{i=1}^{\mathcal M} \exp \left[a(\mathcal Q,\mathcal K_j)\right]} \end{aligned} α(Q,Kj)=Softmax[a(Q,Kj)]=i=1Mexp[a(Q,Kj)]exp[a(Q,Kj)]
同上,对应的 a ( Q , K j ) a(\mathcal Q,\mathcal K_j) a(Q,Kj)仅表示 Q \mathcal Q Q与编号为 j j j Keys \text{Keys} Keys注意力分数。与注意力权重相同,它的结果同样是一个标量。 Softmax \text{Softmax} Softmax函数仅作为归一化作用,不改变数据格式
a ( Q , K j ) ∈ R a(\mathcal Q,\mathcal K_j) \in \mathbb R a(Q,Kj)R

加性注意力机制

注意力分数展开,可以得到如下形式:
a ( Q , K j ) = V j T ⋅ Tanh ( W K ; j ⋅ K j + W Q ⋅ Q ) a(\mathcal Q,\mathcal K_j) = \mathcal V_j^T \cdot \text{Tanh}(\mathcal W_{\mathcal K;j} \cdot \mathcal K_j + \mathcal W_\mathcal Q \cdot \mathcal Q) a(Q,Kj)=VjTTanh(WK;jKj+WQQ)
对应神经网络结构表示如下:
注意力分数——神经网络结构
当然,这仅仅是一项—— K j \mathcal K_j Kj Q \mathcal Q Q的注意力分数。那么 M \mathcal M M个注意力分数并行计算,它的注意力分数表示为:

  • 这里的 W K , W Q \mathcal W_{\mathcal K},\mathcal W_{\mathcal Q} WK,WQ做了分开表示:使用不同权重矩阵单独对 K , Q \mathcal K,\mathcal Q K,Q进行训练,并将各自神经元的输出分布对应元素相加;
  • 更常见的像 Seq2seq \text{Seq2seq} Seq2seq中的表示方式:将 K , Q \mathcal K,\mathcal Q K,Q拼接起来(上图),使用一个权重矩阵 W \mathcal W W进行表示。这两种操作是等价的。
    a ( Q , K ) = V T ⋅ Tanh ( W K ⋅ K + W Q ⋅ Q ) a(\mathcal Q,\mathcal K) = \mathcal V^T \cdot \text{Tanh}(\mathcal W_{\mathcal K} \cdot \mathcal K + \mathcal W_{\mathcal Q} \cdot \mathcal Q) a(Q,K)=VTTanh(WKK+WQQ)

这种注意力机制的优势在于:即便 K j \mathcal K_j Kj Q \mathcal Q Q大小(维数)不相同,并不影响注意力分数的计算。

缩放点积注意力机制

如果查询向量 Q \mathcal Q Q K j ( j = 1 , 2 , ⋯   , M ) \mathcal K_j(j=1,2,\cdots,\mathcal M) Kj(j=1,2,,M)大小(维数)相同
这里的 d d d表示 Q , K j \mathcal Q,\mathcal K_j Q,Kj的向量维数。
Q , K j ∈ R d \mathcal Q,\mathcal K_j \in \mathbb R^{d} Q,KjRd
那么可以使用缩放点积注意力机制 ( Scaled Dot-Product Attention ) (\text{Scaled Dot-Product Attention}) (Scaled Dot-Product Attention)注意力分数进行如下计算:
a ( Q , K j ) = ⟨ Q , K j ⟩ d a(\mathcal Q,\mathcal K_j) = \frac{\left\langle\mathcal Q,\mathcal K_j \right\rangle}{\sqrt{d}} a(Q,Kj)=d Q,Kj
其中 ⟨ Q , K j ⟩ \left\langle\mathcal Q,\mathcal K_j \right\rangle Q,Kj表示向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj内积。而除以 d \sqrt{d} d 的操作的解释是:注意力分数结果对参数不是非常敏感

关于这个解释, d d d Q , K j \mathcal Q,\mathcal K_j Q,Kj向量的维数,而向量内的信息除以 d \sqrt{d} d ,只能想到它将注意力分数解空间进行了一定程度的压缩/约束(正常情况下, d ≥ 1 \sqrt{d} \geq 1 d 1,是不小的。谁闲着没事将一个很小的特征向量做这种注意力的复杂操作,不怕模型过拟合吗~)
\quad
如果有更好的解释方式,欢迎小伙伴评论区讨论。

基于 Seq2seq \text{Seq2seq} Seq2seq注意力机制的动机中,我们介绍过内积求解注意力分数,它存在自身的优势相比于加性注意力机制中神经网络产生的抽象特征,内积操作本身就有物理意义:描述向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj之间的相似度
即便 Q , K j \mathcal Q,\mathcal K_j Q,Kj大小不同,实际上依然不影响其执行内积操作。仅需要对其中一个向量乘以一个权重矩阵,使其拉成相同长度并执行内积,后续对该权重矩阵中的参数进行学习即可。这里并没有深挖关于该方向的信息,欢迎小伙伴交流讨论。

上述依然仅是单个向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj注意力分数,那么多个 Query,Keys \text{Query,Keys} Query,Keys可以得到一个矩阵

场景构建

  • 查询向量 Q \mathcal Q Q内包含 N N N d d d维向量: Q ∈ R N × d \mathcal Q \in \mathbb R^{N \times d} QRN×d
    查询向量也可以是多个。
  • 键值对中的 Keys \text{Keys} Keys内依然包含 M \mathcal M M个向量信息: K ∈ R M × d \mathcal K \in \mathbb R^{\mathcal M \times d} KRM×d
  • 键值对中的 Values \text{Values} Values内包含与 Keys \text{Keys} Keys相同数量的向量信息: V ∈ R M × v \mathcal V \in \mathbb R^{\mathcal M \times v } VRM×v
    上面提到: K , V \mathcal K,\mathcal V K,V有可能相同,也有可能不同。这里描述的是‘不同’的情况。

对应的注意力分数表示如下:
a ( Q , K ) = [ Q K T d ] N × M a(\mathcal Q,\mathcal K) = \left[\frac{\mathcal Q\mathcal K^T}{\sqrt{d}} \right]_{N \times \mathcal M} a(Q,K)=[d QKT]N×M
对应的注意力池化过程表示如下:
f = { Softmax [ a ( Q , K ) ] } N × M ⋅ V M × v f ∈ R N × v f = \left\{\text{Softmax}[a(\mathcal Q,\mathcal K)]\right\}_{N \times \mathcal M} \cdot \mathcal V_{\mathcal M \times v} \quad f \in \mathbb R^{N \times v} f={Softmax[a(Q,K)]}N×MVM×vfRN×v

下一节将介绍自注意力机制 ( Self-Attention ) (\text{Self-Attention}) (Self-Attention)

相关参考:
注意力分数【动手学深度学习v2】

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

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

相关文章

Pytest教程__配置文件-pytest.ini(4)

pytest配置文件可以改变pytest的默认运行方式,它是一个固定的文件名称pytest.ini。 存放路径为项目的根目录 解决中文报错 在讲解配置文件的可用参数前,我们先解决一个高概率会遇到的问题, 那就是在pytest.ini文件 中不能使用任何中文符号&…

【Webpack】Webpack

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 WebpackWebpack是干嘛的代码分割摇树优化模块热替换 Webpack Webpack是干嘛的 Webpack是用来打…

<Python全景系列-2> Python数据类型大盘点

欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个…

一种自适应异常数据点消除方法

1.问题 在现实生活中,采集到的信号,会有一些噪点需要去除,否则这部分数据在比如时域空间直接进行分析时就会遇到非常难以厘清的逻辑要处理,各种异常。 肉眼看去,那些噪点是清清楚楚的。如何去除呢? 这里给…

快速搭建自己的跑腿服务平台:开源跑腿系统源码分享

在现代社会,人们生活节奏加快,很多时候需要在短时间内完成各种任务,如购物、送货等。这就催生了跑腿服务的兴起。跑腿服务平台为用户提供一站式服务,让用户可以轻松地找到可靠的跑腿服务,并实现便捷快速的服务体验。 …

基于Java线上旅行信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

12. 100ASK-V853-PRO开发板 MIPI屏测试指南

100ASK-V853-PRO开发板 MIPI屏测试指南 硬件要求: 100ASK-V853-PRO开发板四寸MIPI屏 软件要求: 固件下载地址:链接:百度网盘 提取码:sp6a 固件位于资料光盘中的10_测试镜像/2.测试4寸MIPI屏/v853_linux_100ask_uar…

分布式文件存储相关概念

分布式文件存储 1 常见专业术语 1.1 备份技术 出于数据恢复的目的而创建的一份额外的数据副本 分类:直接连接备份,网络连接备份, 脱局域网备份,脱服务器备份 在线备份,离线备份,近线备份 ①冷备份 冷备份…

ORC与Parquet压缩分析

ORC与Parquet压缩分析 date:2023年6月14日 文章目录 ORC与Parquet压缩分析压测环境数据schema 数据实验压缩结果文件使用建议附录编译hadoop-lzo编译前提编译程中出现的错误结果文件 file-compress.jar源码ReadWriterOrc类NativeParquet类FileUtil类 压测环境 OS&a…

管理类联考——逻辑——真题篇——第四章 完型填空

第四章 完型填空 第一节 真题 2020-完型填空- Section I Use of English Directions: Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Being a good parent is, of cour…

如何成为一名专业云渗透测试工程师

前言 很多人不知道网络安全发展前景好吗?学习网络安全能做什么?现在行业有哪些热门岗位?今天为大家解答下。 从宏观层面来看,新基建成为中国经济热词,政府和企业业务上云全面提速,随着云计算技术的快速发…

联想创新开放日:计算引领+AI赋能,联想超十项绿色技术重磅亮相

6月14日,联想2023年创新开放日精彩继续,六大主题的展览、多场圆桌论坛等活动吸引了络绎不绝的观众。聚焦ESG领域,本次联想创新开放日专门设立ESG零碳领航站和相关主题的圆桌论坛。期间,ESG展区还专门展示了联想温水水冷技术、智慧…

MM32F3273G8P火龙果开发板MindSDK开发教程20 - letter shell 的移植

MM32F3273G8P火龙果开发板MindSDK开发教程20 - letter shell 的移植 1、Letter Shell 犹如linux下的命令行,或者更像是uboot下的命令行,可以输入命令,执行相对应的函数。 2、Letter Shell移植(GCC 环境) 解压后&am…

虹科干货 | BI软件如何实时连接本地Excel?—以HK-Domo商业智能工具为例

由于资源和人才的限制,很多中小微企业目前在数据收集和数据应用上还处于比较落后的阶段,没有合适的方法处理数据。最典型的情况就是通过Excel收集数据,然后频繁的手动生成报告。这样会导致数据质量差,流程重复,还可能增…

读财报丨长期主义指引下,蔚来“下半年月均交付2万+”能否实现?

新能源汽车的互联网属性正在加速消解,工业产品的特质开始贯穿行业始终。 首先是过去几年风头无两的造车新势力,与传统车企在产品层面的边界越来越模糊。与此同时,新能源汽车的利润水平也在大幅下降,趋近燃油车。 行业整体的风格…

计算机组成原理(第三版)唐塑飞 答案 第三章

3.1什么是总线?总线传输有何特点?为了减轻总线的负载,总线上的部件都应具备什么特点? 答: ① 总线是连接多个部件的信息传输线,是个部件共享的传输介质。 ② 总线传输特点:在某一时刻,只允许有一个部件向总线发送信息,而多个部件可以同时从总线上接受相…

20年不变的初心,亚马逊云科技为初创企业的独角兽梦想加速赋能!

廿年初心不改, 为初创企业打造增长飞轮 【全球云观察 | 热点关注】20年前,亚马逊现任CEO Andy Jassy观察到,在亚马逊内部新业务的孵化过程中工程师需要花大量的时间,投入在一些重复性高却不产生附加价值的基础设施建设…

【UE 从零开始制作坦克】1-控制坦克视角

UE版本:4.26 效果 步骤 1. 在虚幻商城中下载如下资产导入到工程中 导入成功后可以在工程中看到如下文件夹 2. 接下来开始制作一下控制坦克视角的逻辑 首先在项目设置中添加轴映射 新建一个蓝图,父类为“WheelVehicle(轮式载具)” 这里就命名为“TankZ…

科一容易忘、容易混的点(二)

注意落石 高速应急车道用途:主要用于发生事故或故障时停车,以及专为救险所用的车道,被誉为高速公路的“生命通道” 注意 注意 扣9份场景: 城市快速路上 违法停车; 注意 交通事故逃逸, 不一定吊销驾驶证&a…

Python的type内置类详解

目录导览 欢迎来到本文Type简介Type的常见用法用法1-获取对象的类型用法2-创建新的类 Type做为元类(metaclass)元类的作用如何自定义元类 欢迎来到本文 Type简介 在Python中,type是一个内建的类,它是用于表示对象的类型的类。ty…