| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 17 天前 | ||
| 1 天前 | ||
| 17 天前 | ||
| 2 天前 | ||
| 17 天前 | ||
| 7 天前 | ||
| 24 天前 | ||
| 24 天前 |
SparseApplyFtrlV2
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:对指定索引的稀疏梯度执行Ftrl-proximal V2优化算法更新,含
l2_shrinkage正则项,用于大规模稀疏特征训练场景。 -
计算公式:
对indices中每个索引i:
grad_shrink={grad[i]l2_shrinkage=0grad[i]+2×l2_shrinkage×var[i]otherwiseaccumnew[i]=accum[i]+grad[i]2accum_pow[i]=accum[i]−lr_poweraccum_new_pow[i]=accumnew[i]−lr_powerdelta=(accum_pow[i]−accum_new_pow[i])/lrlinearnew[i]=linear[i]+grad_shrink+delta×var[i]l1_adjust=clamp(linearnew[i],−l1,l1)x=l1_adjust−linearnew[i]y=accum_new_pow[i]/lr+2×l2varnew[i]=x/y\begin{aligned} \text{grad\_shrink} &= \begin{cases} \text{grad}[i] & l2\_shrinkage = 0 \\ \text{grad}[i] + 2 \times l2\_shrinkage \times \text{var}[i] & \text{otherwise} \end{cases} \\ \text{accum}_{\text{new}}[i] &= \text{accum}[i] + \text{grad}[i]^2 \\ \text{accum\_pow}[i] &= \text{accum}[i]^{-lr\_power} \\ \text{accum\_new\_pow}[i] &= \text{accum}_{\text{new}}[i]^{-lr\_power} \\ \text{delta} &= (\text{accum\_pow}[i] - \text{accum\_new\_pow}[i]) / lr \\ \text{linear}_{\text{new}}[i] &= \text{linear}[i] + \text{grad\_shrink} + \text{delta} \times \text{var}[i] \\ \text{l1\_adjust} &= \text{clamp}(\text{linear}_{\text{new}}[i], -l1, l1) \\ x &= \text{l1\_adjust} - \text{linear}_{\text{new}}[i] \\ y &= \text{accum\_new\_pow}[i] / lr + 2 \times l2 \\ \text{var}_{\text{new}}[i] &= x / y \end{aligned}
通常
lr_power = -0.5。仅indices中指定的行被更新,其余行保持不变。indices[i]越界(<0 或 >=N)则跳过该行。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| var | 输入 / 输出 | 待优化参数,shape [N, D1, D2, ...] | float32, float16, bfloat16 | ND |
| accum | 输入 / 输出 | 梯度平方累计,shape同var | 同var | ND |
| linear | 输入 / 输出 | 线性项累计,shape同var | 同var | ND |
| grad | 输入 | 稀疏梯度,shape [M, D1, D2, ...] | 同var | ND |
| indices | 输入 | 稀疏索引,1-D向量,shape [M] | int32, int64 | ND |
| lr | 输入 | 学习率,标量 | 同var | ND |
| l1 | 输入 | L1正则系数,标量 | 同var | ND |
| l2 | 输入 | L2正则系数,标量 | 同var | ND |
| l2_shrinkage | 输入 | L2收缩系数,标量 | 同var | ND |
| lr_power | 输入 | 学习率幂次,标量 | 同var | ND |
| use_locking | 属性 | 是否使用锁机制(多线程安全),默认false | bool | - |
约束说明
- var、accum、linear的shape必须完全一致。
- var至少为1维(N >= 1)。
- indices必须为1维向量。
- grad.dim(0) 必须等于indices.dim(0)(即M = len(indices))。
- var.shape[1:] 必须等于grad.shape[1:],即尾维度匹配。
- lr、l1、l2、l2_shrinkage、lr_power必须为标量(shape为[] 或 [1])。
- indices中的值应在[0, var.shape[0]) 范围内且应唯一。若indices含重复值,结果不可预测(与TensorFlow行为一致)。
- 所有数据输入(var/accum/linear/grad/lr/l1/l2/l2_shrinkage/lr_power)的dtype必须一致。
- 空indices(len(indices) == 0)时跳过计算,var/accum/linear保持不变。
- lr应大于0,否则分母为0产生Inf。
- fp16/bf16内部以fp32计算后cast回原类型。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式 | test_geir_sparse_apply_ftrl_v2 | 通过算子IR构图方式调用SparseApplyFtrlV2算子。 |