| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 17 天前 | ||
| 1 天前 | ||
| 28 天前 | ||
| 17 天前 | ||
| 9 天前 | ||
| 17 天前 | ||
| 28 天前 | ||
| 9 天前 |
SparseApplyAdadelta
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:SparseApplyAdadelta是AdaDelta优化算法的稀疏版本,用于在训练过程中对Embedding等稀疏参数进行自适应学习率更新。仅更新
indices指定的行,适用于Embedding层等大规模稀疏参数的梯度更新场景。 -
计算公式:
accum[i]=ρ×accum[i]+(1−ρ)×grad[i]2\text{accum}[i] = \rho \times \text{accum}[i] + (1 - \rho) \times \text{grad}[i]^2
update=accum_update[i]+ϵaccum[i]+ϵ×grad[i]\text{update} = \sqrt{\frac{\text{accum\_update}[i] + \epsilon}{\text{accum}[i] + \epsilon}} \times \text{grad}[i]
var[i]=var[i]−update×lr\text{var}[i] = \text{var}[i] - \text{update} \times \text{lr}
accum_update[i]=ρ×accum_update[i]+(1−ρ)×update2\text{accum\_update}[i] = \rho \times \text{accum\_update}[i] + (1 - \rho) \times \text{update}^2
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| var | 输入 | 待更新的参数张量,第一维为稀疏维度。 | FLOAT | ND |
| accum | 输入 | 梯度平方的指数移动平均,与var同shape同dtype。 | FLOAT | ND |
| accum_update | 输入 | 更新量平方的指数移动平均,与var同shape同dtype。 | FLOAT | ND |
| lr | 输入 | 学习率,标量。 | FLOAT | ND |
| rho | 输入 | 衰减率,标量,取值范围[0, 1]。 | FLOAT | ND |
| epsilon | 输入 | 数值稳定性参数,标量,通常很小(如1e-6)。 | FLOAT | ND |
| grad | 输入 | 梯度张量,第一维N为indices的长度。 | FLOAT | ND |
| indices | 输入 | 索引向量,指定需要更新的行。取值范围[0, var的第一维大小),值必须唯一,不支持越界索引。 | INT32、INT64 | ND |
| var | 输出 | 更新后的参数张量,与输入var同shape同dtype。 | FLOAT | ND |
| accum | 输出 | 更新后的梯度累积器。 | FLOAT | ND |
| accum_update | 输出 | 更新后的更新量累积器。 | FLOAT | ND |
| use_locking | 属性 | 是否使用锁保护变量更新(NPU上未实现锁机制),默认false。 | Bool | - |
约束说明
- var、accum、accum_update三者shape必须一致。
- grad的第一维(N)等于indices的长度,其余维度与var的后续维度一致。
- indices值必须唯一,不支持越界索引。
- 仅支持float32数值类型,indices支持int32和int64。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_sparse_apply_adadelta | 在host侧通过GE IR构图方式调用sparse_apply_adadelta算子。 |