| 第57行: |
第57行: |
| | ** 拆分为:<math>x_k, x_v, x_r</math> | | ** 拆分为:<math>x_k, x_v, x_r</math> |
| | ** 加入时间加权参数(Python代码): | | ** 加入时间加权参数(Python代码): |
| − |
| |
| − | <syntaxhighlight lang="python">
| |
| − | decay = exp(-exp(time_decay))
| |
| − | k = x_k * time_mix_k + x_k_prev * (1 - time_mix_k)
| |
| − | </syntaxhighlight>
| |
| | ** xk:用于 Key; | | ** xk:用于 Key; |
| | ** xv:用于 Value; | | ** xv:用于 Value; |
| 第69行: |
第64行: |
| | ** <code>x_k_prev</code> 表示前一个 token 的特征; | | ** <code>x_k_prev</code> 表示前一个 token 的特征; |
| | ** <code>k</code> 是融合后的 Key 值,用于参与后续注意力(递推)计算。 | | ** <code>k</code> 是融合后的 Key 值,用于参与后续注意力(递推)计算。 |
| − | | + | <syntaxhighlight lang="python"> |
| | + | decay = exp(-exp(time_decay)) |
| | + | k = x_k * time_mix_k + x_k_prev * (1 - time_mix_k) |
| | + | </syntaxhighlight> |
| | '''作用:''' 融合当前时刻和上一个时刻的信息,引入时间动态权重。 | | '''作用:''' 融合当前时刻和上一个时刻的信息,引入时间动态权重。 |
| | | | |
| 第83行: |
第81行: |
| | ** 类似 Transformer 的 FFN 模块。 | | ** 类似 Transformer 的 FFN 模块。 |
| | ** 激活函数通常使用 ReLU,公式如下: | | ** 激活函数通常使用 ReLU,公式如下: |
| − | <math>\mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2</math>
| |
| | ** x:当前输入向量; | | ** x:当前输入向量; |
| | ** W1,W2:权重矩阵; | | ** W1,W2:权重矩阵; |
| | ** b1,b2:偏置项; | | ** b1,b2:偏置项; |
| | ** ReLU:常用的非线性激活函数。 | | ** ReLU:常用的非线性激活函数。 |
| | + | <math>\mathrm{output} = \mathrm{ReLU}(W_1 \times x + b_1) \times W_2 + b_2</math> |
| | | | |
| | ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。 | | ChannelMix 模块在 RWKV 中承担的是特征变换的职责,它不涉及时间递推,仅作用于当前 token 的维度方向。通过堆叠多个 RWKV Block(包含 TimeMix 和 ChannelMix),模型可以逐步构建复杂的时间和特征层级信息。该模块的设计让 RWKV 能够在保持推理效率的同时,具备强大的特征建模能力。 |
| 第95行: |
第93行: |
| | | | |
| | * '''注意力层简化表达''' | | * '''注意力层简化表达''' |
| − |
| |
| − | <math>x_{t+1} = \sigma(Rx_t) \cdot \frac{\exp(Kx_t) \cdot (Vx_t) + \exp(W) \cdot a_t}{\exp(Kx_t) + \exp(W) \cdot b_t} </math>
| |
| | **xt:当前时间步的输入向量; | | **xt:当前时间步的输入向量; |
| | **xt+1:下一时间步的输出; | | **xt+1:下一时间步的输出; |
| 第104行: |
第100行: |
| | **σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; | | **σ(Rxt):Receptance 门控函数,控制信息是否更新,相当于 LSTM 的门结构; |
| | **分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 | | **分数部分(分子/分母):模拟了注意力加权求和的效果,只不过是用递推形式累积,而非对整段序列做自注意力计算。 |
| | + | <math>x_{t+1} = \sigma(Rx_t) \cdot \frac{\exp(Kx_t) \cdot (Vx_t) + \exp(W) \cdot a_t}{\exp(Kx_t) + \exp(W) \cdot b_t} </math> |
| | | | |
| | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 | | 这个表达式体现的是 '''RWKV 用递推的方式模拟注意力机制'''。不同于 Transformer 的全局注意力(需要对所有 token 做乘积和归一化),RWKV 在每一个时间步只更新当前与历史的加权平均值,用指数衰减模拟注意力分布,极大地提高了推理效率。 |