赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注运维)
k
1
\boldsymbol{k_1}
k1 的点积,第二个分数是
q
1
\boldsymbol{q_1}
q1 和
k
2
\boldsymbol{k_2}
k2 的点积。
图 1.13
第 3 步:将每个分数除以
d
k
\sqrt{d_{k}}
dk
(
d
k
d_{k}
dk 是 Key 向量的维度)。目的是在反向传播时,求梯度更加稳定。实际上,你也可以除以其他数。
第 4 步:将这些分数进行 Softmax 操作。Softmax 将分数进行归一化处理,使得它们都为正数并且和为 1。
图 1.14
这些 Softmax 分数决定了在编码当前位置的词时,对所有位置的词分别有多少的注意力。很明显,当前位置的词汇有最高的分数,但有时注意一下与当前位置的词相关的词是很有用的。
第 5 步:将每个 Softmax 分数分别与每个 Value 向量相乘。这种做法背后的直觉理解是:对于分数高的位置,相乘后的值就越大,我们把更多的注意力放在它们身上;对于分数低的位置,相乘后的值就越小,这些位置的词可能是相关性不大,我们就可以忽略这些位置的词。
第 6 步:将加权 Value 向量(即上一步求得的向量)求和。这样就得到了自注意力层在这个位置的输出。
图 1.15
这样就完成了自注意力的计算。生成的向量会输入到前馈网络中。但是在实际实现中,此计算是以矩阵形式进行,以便实现更快的处理速度。下面我们来看看如何使用矩阵计算。
第 1 步:计算 Query,Key 和 Value 矩阵。首先,将所有词向量放到一个矩阵
X
\boldsymbol{X}
X 中,然后分别和 3 个我们训练过的权重矩阵(
W
Q
\boldsymbol{W^Q}
WQ,
W
k
\boldsymbol{W^k}
Wk 和
W
V
\boldsymbol{W^V}
WV) 相乘,得到
Q
\mathbf{Q}
Q,
K
\boldsymbol{K}
K 和
V
\boldsymbol{V}
V 矩阵。
图 1.16 矩阵 X 中的每一行,表示输入句子中的每一个词的词向量(长度为 512,在图中为 4 个方框)。矩阵 Q,K 和 V 中的每一行,分别表示 Query 向量,Key 向量和 Value 向量(它们的长度都为 64,在图中为 3 个方框)。
第 2 步:计算自注意力。由于这里使用了矩阵进行计算,可以将前面的第 2 步到第 6 步压缩为一步。
图 1.17 矩阵形式的自注意力计算
在 Transformer 论文中,通过添加一种多头注意力机制,进一步完善了自注意力层。具体做法:首先,通过
h
h
h 个不同的线性变换对 Query、Key 和 Value 进行映射;然后,将不同的 Attention 拼接起来;最后,再进行一次线性变换。基本结构如图 1.18 所示:
图 1.18
每一组注意力用于将输入映射到不同的子表示空间,这使得模型可以在不同子表示空间中关注不同的位置。整个计算过程可表示为:
M
u
l
t
i
H
e
a
d
(
Q
,
K
,
V
)
=
C
o
n
c
a
t
(
h
e
a
d
1
,
⋯
,
h
e
a
d
h
)
W
O
h
e
a
d
i
=
A
t
t
e
n
t
i
o
n
(
Q
W
i
Q
,
K
W
i
K
,
V
W
i
V
)
MultiHead(Q,K,V) = Concat(head_1,\cdots,head_h)\boldsymbol{W}^O \ head_i = Attention(Q\boldsymbol{W}_iQ,K\boldsymbol{W}_iK,V\boldsymbol{W}_i^V)
MultiHead(Q,K,V)=Concat(head1,⋯,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)
其中,
W
i
Q
∈
R
d
m
o
d
e
l
×
d
k
\boldsymbol{W}_i^Q \in \mathbb{R}^{d_{model} \times d_k}
WiQ∈Rdmodel×dk,
W
i
K
∈
R
d
m
o
d
e
l
×
d
k
\boldsymbol{W}_i^K \in \mathbb{R}^{d_{model} \times d_k}
WiK∈Rdmodel×dk,
W
i
V
∈
R
d
m
o
d
e
l
×
d
v
\boldsymbol{W}_i^V \in \mathbb{R}^{d_{model} \times d_v}
WiV∈Rdmodel×dv 和
W
O
∈
R
h
d
v
×
d
m
o
d
e
l
\boldsymbol{W}^O \in \mathbb{R}^{hd_v \times d_{model}}
WO∈Rhdv×dmodel。在论文中,指定
h
=
8
h=8
h=8(即使用 8 个注意力头)和
d
k
=
d
v
=
d
m
o
d
e
l
/
h
=
64
d_k = d_v = d_{model}/h = 64
dk=dv=dmodel/h=64。
在多头注意力下,我们为每组注意力单独维护不同的 Query、Key 和 Value 权重矩阵,从而得到不同的 Query、Key 和 Value 矩阵。如前所述,我们将
X
\boldsymbol{X}
X 乘以
W
Q
\boldsymbol{W}^Q
WQ、
W
K
\boldsymbol{W}^K
WK 和
W
V
\boldsymbol{W}^V
WV 矩阵,得到 Query、Key 和 Value 矩阵。
图 1.19
按照上面的方法,使用不同的权重矩阵进行 8 次自注意力计算,就可以得到 8 个不同的
Z
\boldsymbol{Z}
Z 矩阵。
图 1.20
接下来就有点麻烦了。因为前馈神经网络层接收的是 1 个矩阵(每个词的词向量),而不是上面的 8 个矩阵。因此,我们需要一种方法将这 8 个矩阵整合为一个矩阵。具体方法如下:
{
Z
0
,
Z
1
,
⋯
,
Z
7
}
{\boldsymbol{Z_0},\boldsymbol{Z_1},\cdots,\boldsymbol{Z_7}}
{Z0,Z1,⋯,Z7} 拼接起来。
2. 把拼接后的矩阵和一个权重矩阵
W
O
\boldsymbol{W^O}
WO 相乘。
3. 得到最终的矩阵
Z
\boldsymbol{Z}
Z,这个矩阵包含了所有注意力头的信息。这个矩阵会输入到 FFN 层。
图 1.21
这差不多就是多头注意力的全部内容了。下面将所有内容放到一张图中,以便我们可以统一查看。
图 1.22
现在让我们重新回顾一下前面的例子,看看在对示例句中的“it”进行编码时,不同的注意力头关注的位置分别在哪:
图 1.23
当我们对“it”进行编码时,一个注意力头关注“The animal”,另一个注意力头关注“tired”。从某种意义上来说,模型对“it”的表示,融入了“animal”和“tired”的部分表达。
Multi-head Attention 的本质是,在参数总量保持不变的情况下,将同样的 Query,Key,Value 映射到原来的高维空间的不同子空间中进行 Attention 的计算,在最后一步再合并不同子空间中的 Attention 信息。这样降低了计算每个 head 的 Attention 时每个向量的维度,在某种意义上防止了过拟合;由于 Attention 在不同子空间中有不同的分布,Multi-head Attention 实际上是寻找了序列之间不同角度的关联关系,并在最后拼接这一步骤中,将不同子空间中捕获到的关联关系再综合起来。
位置前馈网络就是一个全连接前馈网络,每个位置的词都单独经过这个完全相同的前馈神经网络。其由两个线性变换组成,即两个全连接层组成,第一个全连接层的激活函数为 ReLU 激活函数。可以表示为:
F
F
N
(
x
)
=
max
(
0
,
x
W
1
b
1
)
W
2
b
2
FFN(x) = \max(0, xW_1 + b_1)W_2 + b_2
FFN(x)=max(0,xW1+b1)W2+b2
在每个编码器和解码器中,虽然这个全连接前馈网络结构相同,但是不共享参数。整个前馈网络的输入和输出维度都是
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512,第一个全连接层的输出和第二个全连接层的输入维度为
d
f
f
=
2048
d_{ff}=2048
dff=2048。
编码器结构中有一个需要注意的细节:每个编码器的每个子层(Self-Attention 层和 FFN 层)都有一个残差连接,再执行一个层标准化操作,整个计算过程可以表示为:
s
u
b
_
l
a
y
e
r
_
o
u
t
p
u
t
=
L
a
y
e
r
N
o
r
m
(
x
S
u
b
L
a
y
e
r
(
x
)
)
sub\_layer\_output = LayerNorm(x + SubLayer(x))
sub_layer_output=LayerNorm(x+SubLayer(x))
图 1.24
将向量和自注意力层的层标准化操作可视化,如下图所示:
图 1.25
上面的操作也适用于解码器的子层。假设一个 Transformer 是由 2 层编码器和 2 层解码器组成,其如下图所示:
图 1.26
为了方便进行残差连接,编码器和解码器中的所有子层和嵌入层的输出维度需要保持一致,在 Transformer 论文中
d
m
o
d
e
l
=
512
d_{model} = 512
dmodel=512。
到目前为止,我们所描述的模型中缺少一个东西:表示序列中词顺序的方法。为了解决这个问题,Transformer 模型为每个输入的词嵌入向量添加一个向量。这些向量遵循模型学习的特定模式,有助于模型确定每个词的位置,或序列中不同词之间的距离。
图 1.27
如果我们假设词嵌入向量的维度是 4,那么实际的位置编码如下:
图 1.28
那么位置编码向量到底遵循什么模式?其具体的数学公式如下:
P
E
(
p
o
s
,
2
i
)
=
sin
(
p
o
s
/
1000
0
2
i
/
d
m
o
d
e
l
)
PE_{(pos, 2i)} = \sin (pos / 10000^{2i/d_{model}})
PE(pos,2i)=sin(pos/100002i/dmodel)
P
E
(
p
o
s
,
2
i
1
)
=
cos
(
p
o
s
/
1000
0
2
i
/
最全的Linux教程,Linux从入门到精通
======================
linux从入门到精通(第2版)
Linux系统移植
Linux驱动开发入门与实战
LINUX 系统移植 第2版
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
/
d
m
o
d
e
l
)
PE_{(pos, 2i)} = \sin (pos / 10000^{2i/d_{model}})
PE(pos,2i)=sin(pos/100002i/dmodel)
P
E
(
p
o
s
,
2
i
1
)
=
cos
(
p
o
s
/
1000
0
2
i
/
最全的Linux教程,Linux从入门到精通
======================
linux从入门到精通(第2版)
Linux系统移植
Linux驱动开发入门与实战
LINUX 系统移植 第2版
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注运维)
[外链图片转存中…(img-sq7geCKL-1713179494246)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。