当前位置: 首页> 教育> 大学 > 微信营销成功案例分享_公司局域网_企业官网首页设计_自媒体营销代理

微信营销成功案例分享_公司局域网_企业官网首页设计_自媒体营销代理

时间:2025/7/13 21:12:09来源:https://blog.csdn.net/qq_44348970/article/details/147003457 浏览次数:0次
微信营销成功案例分享_公司局域网_企业官网首页设计_自媒体营销代理

transform

在这里插入图片描述

token

  1. Token是文本被分割后得到的基本单位,可以是:

    1. 一个单词(如applecomputer
    2. 一个子词(如computer
    3. 一个字符(如ab
    4. 特殊符号(如[CLS][SEP]

    Transformer模型中,输入文本通常被转换成一个Token序列进行处理

  2. tokenization

    1. 将输入文本切分为Token
      1. 空格分割:将句子按空格分成单词
      2. 子词分割(Subword Tokenization):通过算法(如BPE、WordPiece)分解单词为常见的子词片段
    2. 每个Token被映射为一个唯一的整数ID,这样可以供模型处理。这个过程需要一个词汇表(Vocabulary),其中定义了所有Token和其对应的ID
  3. Transformer中的特殊Token

    1. [CLS]:用于表示句子的整体信息(分类任务中常用)
    2. [SEP]:用于分隔不同的句子
    3. [PAD]:用于填充短序列,使其长度一致
    4. [MASK]:用于遮蔽某些Token(如在BERT中进行掩码语言模型训练时)
  4. 分割后的Token需要转为数值才能输入模型

    1. Embedding:每个Token ID被映射到一个高维向量(如128维或768维)
    2. 加上位置信息:通过位置编码(Positional Encoding)添加序列位置信息,使模型感知Token之间的顺序关系

eg:

以句子"I am learning Transformer"为例,Tokenization过程:

  1. 分词:["I", "am", "learning", "Transformer"]
  2. 转为ID:[101, 1045, 2572, 7865, 12190, 102]
    1. 101是[CLS]
    2. 102是[SEP]
  3. Embedding:将这些ID映射到向量空间

Embedding

  1. Embedding是一种将离散的Token(如单词或子词)映射到连续的高维向量空间的方式。这些向量捕捉了Token之间的语义关系

  2. Embedding的输入和输出

    1. Token的ID序列。例如:[101, 1045, 2572, 7865, 102]

      这里101是[CLS],102是[SEP]

    2. 每个Token的高维向量表示(通常是固定维度,例如512或768)

  3. 词嵌入矩阵

    1. 定义:一个可训练的矩阵,大小为(词汇表大小 × 向量维度)

      例如,如果词汇表有30,000个Token,向量维度为512,则Embedding矩阵大小为30,000 × 512

    2. 根据Token的ID,从矩阵中查找对应的行,得到该Token的嵌入向量

  4. Transformer不具有内置的顺序感知能力,因此需要在Token的Embedding中加入位置信息

    1. 绝对位置编码(常见于标准Transformer):直接加上固定的位置向量
    2. 相对位置编码(一些改进版模型):通过相对距离计算位置关系
    3. 为了引入序列的顺序信息,每个位置 i会被加上一个位置编码向量 pi,pi是根据固定公式生成的,比如正弦和余弦函数
  5. 每个Token的嵌入向量相加后,生成一个序列嵌入

  6. 假设Token的Embedding为E,位置信息为P,最终的输出为H:

    H = E + P

eg:

Token ID: [101, 1045, 2572, 7865, 102]

  1. 通过词嵌入矩阵查找对应向量:
    1. [101] → [0.1, 0.2, …, 0.5]
    2. [1045] → [0.3, 0.8, …, 0.7]
  2. 加上位置信息:
    1. [0, 1, 2, 3, 4] → [0.01, 0.02, …, 0.05]
  3. 输出最终嵌入序列(形状为(序列长度 × 嵌入维度)

Self-Attention机制

输入:一个序列的嵌入向量,形状为 (序列长度,嵌入维度),即上述 词嵌入矩阵查找对应向量 与 位置信息对应嵌入维度相加

输出:同样形状的序列表示,每个Token的表示整合了与序列中其他Token的关系

  1. 生成Query、Key、Value;通过三组权重矩阵,将每个嵌入向量映射为:

    1. Query(查询向量):表示当前Token在寻找其他Token时的"问题"

    2. Key(键向量):表示其他Token对当前查询的"响应程度"

    3. Value(值向量):提供具体的信息内容

    4. Q = X W Q , K = X W K , V = X W V Q=XW^Q , K=XW^K , V=XW^V Q=XWQ,K=XWK,V=XWV

  2. 计算注意力得分

    1. 对每个Token的Query与所有Key进行点积,得到注意力得分:
      S c o r e ( Q , K ) = Q ⋅ K T Score(Q,K)=Q⋅K^T Score(Q,K)=QKT

    2. 得分越高,表示两个Token的关系越紧密

  3. 归一化得分(Softmax)

    1. 将分数通过Softmax转化为概率分布,确保所有关系的权重和为1:
      A t t e n t i o n ( Q , K ) = S o f t m a x ( Q ⋅ K T d k ) Attention(Q,K)=Softmax(\frac{Q⋅K^T} {\sqrt{d_k}}) Attention(Q,K)=Softmax(dk QKT)

    2. d k d_k dk是Key的维度,用来避免分值过大导致梯度消失问题

  4. 用注意力权重对Value向量进行加权求和,得到每个Token的最终表示:
    O u t p u t = A t t e n t i o n ( Q , K ) ⋅ V Output=Attention(Q,K)⋅V Output=Attention(Q,K)V


单头注意力

eg:

  1. 输入序列为["I", "am", "learning"],其嵌入表示为:
    X = ( 1 0 0 1 1 1 ) X= \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 1 \\ \end{pmatrix} X= 101011
    其中每行代表一个Token的嵌入向量

  2. 生成Query、Key、Value 用权重矩阵 WQ,WK,WV 线性变换输入嵌入:
    Q = X ⋅ W Q ​ , K = X ⋅ W K ​ , V = X ⋅ W V ​ Q=X⋅W_Q ​ ,K=X⋅W_K ​ ,V=X⋅W_V ​ Q=XWQ,K=XWK,V=XWV

    W Q = ( 1 0 0 1 ) W_Q= \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix} WQ=(1001)

    W K = ( 0 1 1 0 ) W_K= \begin{pmatrix} 0 & 1 \\ 1 & 0 \\ \end{pmatrix} WK=(0110)

    W Q = ( 1 2 2 3 ) W_Q= \begin{pmatrix} 1 & 2 \\ 2 & 3 \\ \end{pmatrix} WQ=(1223)

    计算出Q、K、V
    Q = X ⋅ W Q = ( 1 0 0 1 1 1 ) Q=X⋅W_Q= \begin{pmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 1 \\ \end{pmatrix} Q=XWQ= 101011

    K = X ⋅ W K = ( 0 1 1 0 1 1 ) K=X⋅W_K= \begin{pmatrix} 0 & 1 \\ 1 & 0 \\ 1 & 1 \\ \end{pmatrix} K=XWK= 011101

    V = X ⋅ W V = ( 1 2 2 3 3 5 ) V=X⋅W_V= \begin{pmatrix} 1 & 2 \\ 2 & 3 \\ 3 & 5 \\ \end{pmatrix} V=XWV= 123235

  3. 计算注意力得分

    对每个Token的 Query 和所有 Token 的 Key 计算点积:
    S c o r e ( Q , K ) = Q ⋅ K T = ( 0 1 1 1 0 1 1 1 2 ) Score(Q,K)=Q⋅K_T= \begin{pmatrix} 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 2 \\ \end{pmatrix} Score(Q,K)=QKT= 011101112
    行表示Query(当前Token),列表示Key(其他Token)

  4. 将每行通过Softmax归一化,得到每个Query对应的注意力权重:
    A t t e n t i o n ( Q , K ) = S o f t m a x ( Q ⋅ K T d k ) Attention(Q,K)=Softmax(\frac{Q⋅K^T} {\sqrt{d_k}}) Attention(Q,K)=Softmax(dk QKT)

    Q ⋅ K T d k = ( 0 0.707 0.707 0.707 0 0.707 0.707 0.707 1.414 ) \frac{Q⋅K^T} {\sqrt{d_k}}= \begin{pmatrix} 0 & 0.707 & 0.707 \\ 0.707 & 0 & 0.707 \\ 0.707 & 0.707 & 1.414 \\ \end{pmatrix} dk QKT= 00.7070.7070.70700.7070.7070.7071.414

  5. 计算Softmax(对每行单独归一化):

    第一行:
    S o f t m a x ( 0 , 0.707 , 0.707 ) = [ 0.226 , 0.387 , 0.387 ] Softmax(0,0.707,0.707)=[0.226,0.387,0.387] Softmax(0,0.707,0.707)=[0.226,0.387,0.387]

    A t t e n t i o n = ( 0.226 0.387 0.387 0.387 0.226 0.387 0.274 0.274 0.452 ) Attention= \begin{pmatrix} 0.226&0.387&0.387 \\ 0.387&0.226&0.387 \\ 0.274&0.274&0.452 \\ \end{pmatrix} Attention= 0.2260.3870.2740.3870.2260.2740.3870.3870.452

  6. 用注意力权重对Value矩阵加权求和:
    O u t p u t = A t t e n t i o n ( Q , K ) ⋅ V Output=Attention(Q,K)⋅V Output=Attention(Q,K)V

    $$
    \begin{pmatrix}
    0.226&0.387&0.387 \
    0.387&0.226&0.387 \
    0.274&0.274&0.452 \
    \end{pmatrix} *
    \begin{pmatrix}
    1 & 2 \
    2 & 3 \
    3 & 5 \
    \end{pmatrix}

    \begin{pmatrix}
    2.161 & 3.387 \
    2.387 & 3.548 \
    2.774 & 4.161 \
    \end{pmatrix}
    $$

每行对应序列中一个Token的新表示,这个表示综合了序列中其他Token的关系


多头注意力

多头注意力(Multi-Head Attention, MHA)是单头注意力的扩展,其核心思想是通过并行计算多个注意力机制,捕获不同子空间的语义特征

  1. 输入序列:["I", "am", "learning"],嵌入维度
    d m o d e l = 4 使用 2 个头,每个头的维度为 d h = d m o d e l / h = 2 d_model = 4 \\ 使用2个头,每个头的维度为 \\ d_h=d_model/h=2 dmodel=4使用2个头,每个头的维度为dh=dmodel/h=2

  2. 与上面的单头注意力同理,不过此时使用2个头,使用2个Q、K、V
    Q 1 = X ⋅ W Q , 1 , K 1 = X ⋅ W K , 1 , V 1 = X ⋅ W V , 1 Q 2 = X ⋅ W Q , 2 , K 2 = X ⋅ W K , 2 , V 2 = X ⋅ W V , 2 Q_1=X⋅W_Q,_1, \\ K_1=X⋅W_K,_1, \\ V_1=X⋅W_V,_1 \\ \\ Q_2=X⋅W_Q,_2, \\ K_2=X⋅W_K,_2, \\ V_2=X⋅W_V,_2 Q1=XWQ,1,K1=XWK,1,V1=XWV,1Q2=XWQ,2,K2=XWK,2,V2=XWV,2

  3. 同理,计算出Output1、Output2

  4. 将两个头的输出拼接:
    C o n c a t ( O u t p u t 1 , O u t p u t 2 ) = ( 2.161 3.387... 2.387 3.548... 2.774 4.161... ) Concat(Output1,Output2)= \begin{pmatrix} 2.161 & 3.387 ...\\ 2.387 & 3.548 ...\\ 2.774 & 4.161 ...\\ \end{pmatrix} Concat(Output1,Output2)= 2.1612.3872.7743.387...3.548...4.161...

  5. 通过全局权重矩阵W_o投影会原始嵌入维度
    F i n a l O u t p u t = C o n c a t ( O u t p u t 1 , O u t p u t 2 ) ∗ W o Final Output=Concat(Output1,Output2)*W_o FinalOutput=Concat(Output1,Output2)Wo

每个头独立捕获序列中不同的特征;

多个头的输出拼接后,通过线性层融合,得到综合后的序列表示

输出的形状与输入一致(序列长度 × 嵌入维度)


Masked self_attention

Masked Self-Attention 是 Self-Attention 的一种变体,主要用于 Transformer Decoder 中。其目的是在序列生成时,确保第 𝑡 个位置的输出只能依赖当前及之前的输入,而不能看到未来的输入(因果性)

目的:

  1. 在生成任务中(如机器翻译或文本生成),模型生成第 𝑡 个词时,不能看到第 𝑡+1、第 t+2 等未来位置的词
  2. 屏蔽未来词可以保证模型的预测是基于当前信息,不会泄露未来信息

注意力屏蔽原理:

  1. 在计算注意力权重时,对不允许访问的位置设置为 负无穷值,通过 Softmax 函数将这些位置的权重强制归一化为 0
    A t t e n t i o n ( Q , K ) = S o f t m a x ( Q ⋅ K T d k + M ) ∗ V Attention(Q,K)=Softmax(\frac{Q⋅K^T} {\sqrt{d_k}} + M)*V Attention(Q,K)=Softmax(dk QKT+M)V
    M:掩码矩阵,用于屏蔽未来的 Token

    1. 如果位置i可以访问j,则 M i , j = 0 M_i,_j = 0 Mi,j=0
    2. 如果位置i不可以访问j,则 M i , j = − ∞ M_i,_j = -∞ Mi,j=

    设 M = ( 1 − ∞ − ∞ 0 0 − ∞ 0 0 0 ) 设M= \begin{pmatrix} 1&-∞&-∞\\ 0&0&-∞\\ 0&0&0\\ \end{pmatrix} M= 100000

  2. Softmax:遇到负无穷时,该位置的权重为 0


Feed-Forward Network FFN

在 Transformer 的每个编码器(Encoder)和解码器(Decoder)层中,除了注意力机制,还包含一个 前馈神经网络 (FFN)

FFN 的作用是对注意力层的输出进行逐位置的非线性变换,从而提升特征表达能力

  1. FFN 是一个位置独立的两层全连接神经网络,通常的公式为:
    F F N ( x ) = R e L U ( x W 1 ​ + b 1 ​ ) W 2 ​ + b 2 ​ FFN(x)=ReLU(xW 1 ​ +b 1 ​ )W 2 ​ +b 2 ​ FFN(x)=ReLU(xW1​+b1​)W2​+b2​

  2. 输入与输出维度:

    1. 输入向量维度:𝑑_model比如 512 或 768)
    2. 输出向量维度:保持为 d_modeld
    3. 隐藏层的维度:𝑑_ffn(通常比 d_model 大,比如 2048)
  3. FFN 位于每一层注意力机制的后面。具体来说:

    1. 输入:来自注意力模块的输出

    2. 输出:作为当前层的最终输出,传递给下一层

    3. FFN 的计算与 Layer Normalization 和残差连接结合在一起:
      O u t p u t = L a y e r N o r m ( x + F F N ( x ) ) Output=LayerNorm(x+FFN(x)) Output=LayerNorm(x+FFN(x))

  4. FFN 的作用:通过逐位置处理,提升特征表达能力

  5. 与注意力的结合:FFN 提供局部非线性特征提取,与注意力机制的全局特征提取互补


输入与输出维度:

  1. 输入向量维度:𝑑_model比如 512 或 768)

  2. 输出向量维度:保持为 d_modeld

  3. 隐藏层的维度:𝑑_ffn(通常比 d_model 大,比如 2048)

  4. FFN 位于每一层注意力机制的后面。具体来说:

    1. 输入:来自注意力模块的输出

    2. 输出:作为当前层的最终输出,传递给下一层

    3. FFN 的计算与 Layer Normalization 和残差连接结合在一起:
      O u t p u t = L a y e r N o r m ( x + F F N ( x ) ) Output=LayerNorm(x+FFN(x)) Output=LayerNorm(x+FFN(x))

  5. FFN 的作用:通过逐位置处理,提升特征表达能力

  6. 与注意力的结合:FFN 提供局部非线性特征提取,与注意力机制的全局特征提取互补


关键字:微信营销成功案例分享_公司局域网_企业官网首页设计_自媒体营销代理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: