文件最后提交记录最后更新时间
17 天前
1 天前
17 天前
2 天前
17 天前
7 天前
24 天前
24 天前
README

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算子。