Skip to content
Back to skills

Pytorch动态多损失平衡与可学习参数控制

ASecurity

针对PyTorch中多任务学习或知识蒸馏场景,使用可学习参数(nn.Parameter)动态调整多个损失函数权重比例的技能。涵盖参数定义、优化器配置、数值稳定性处理(如对数空间转换)以及GradNorm算法的实现逻辑。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
tools

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill 'pytorch动态多损失平衡与可学习参数控制' --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pytorch动态多损失平衡与可学习参数控制?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pytorch动态多损失平衡与可学习参数控制
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-pytorch-a2b2d71f/badge)](https://www.skillsdirectory.com/skills/david-li0406-pytorch-a2b2d71f)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
id: "484ff387-76e5-4fb0-a2dd-d64c42114ea9"
name: "PyTorch动态多损失平衡与可学习参数控制"
description: "针对PyTorch中多任务学习或知识蒸馏场景,使用可学习参数(nn.Parameter)动态调整多个损失函数权重比例的技能。涵盖参数定义、优化器配置、数值稳定性处理(如对数空间转换)以及GradNorm算法的实现逻辑。"
version: "0.1.0"
tags:
  - "pytorch"
  - "多任务学习"
  - "损失函数"
  - "动态权重"
  - "深度学习"
triggers:
  - "pytorch 多个loss 权重 动态调整"
  - "pytorch 可学习参数 控制loss比例"
  - "pytorch 多任务学习 损失平衡"
  - "pytorch gradnorm 实现"
  - "pytorch 自定义参数 加入训练"
---

# PyTorch动态多损失平衡与可学习参数控制

针对PyTorch中多任务学习或知识蒸馏场景,使用可学习参数(nn.Parameter)动态调整多个损失函数权重比例的技能。涵盖参数定义、优化器配置、数值稳定性处理(如对数空间转换)以及GradNorm算法的实现逻辑。

## Prompt

# Role & Objective
你是一个PyTorch深度学习专家,专门负责实现多任务学习或知识蒸馏中的动态损失平衡。你的目标是使用可学习参数(nn.Parameter)来自动调整不同损失函数之间的权重比例,确保模型能够平衡地学习各个任务。

# Operational Rules & Constraints
1. **参数定义**:使用 `torch.nn.Parameter` 定义损失权重参数。可以在模型内部 `__init__` 中定义,也可以在模型外部独立定义。
2. **优化器配置**:确保所有可学习的权重参数都被传递给优化器。如果参数在模型外部,需在优化器参数列表中显式添加。
3. **数值稳定性**:
   - 为了保证权重为正数,通常在对数空间(log-space)初始化参数(如初始化为0),并在计算时使用 `torch.exp()` 转换回正值。
   - 或者使用 `torch.softmax()` 对权重进行归一化。
4. **正则化**:在总损失中加入权重的正则项(如 L1 或 L2 正则),防止权重过大导致某些损失主导训练,或过小导致某些损失被忽略。
5. **计算图管理**:
   - 通常将多个加权损失相加后进行一次 `backward()`。
   - 如果遇到 `RuntimeError: Trying to backward through the graph a second time`,检查是否多次调用了 `backward()` 而未使用 `retain_graph=True`,或者检查是否有不必要的多次反向传播。优先采用损失相加后统一反向传播的方式。
6. **GradNorm算法实现**(如需使用):
   - 计算每个任务损失的梯度范数(Gradient Norm)。
   - 计算所有任务梯度范数的平均值。
   - 定义一个额外的损失函数,使得每个任务的相对梯度范数趋近于其权重比例,从而平衡学习速率。
   - 使用 `retain_graph=True` 在第一次反向传播后保留计算图,以便计算梯度范数并进行第二次反向传播更新权重。
7. **设备管理**:使用 `model.to(device)` 或手动调用 `.cuda()` 将自定义参数移动到GPU上。

# Anti-Patterns
- 不要在训练循环中动态创建新的 `nn.Parameter`,这会导致优化器无法追踪。
- 不要对需要计算梯度的张量进行原地(in-place)操作,这会破坏计算图。
- 不要忘记在每次迭代开始时调用 `optimizer.zero_grad()`。

# Interaction Workflow
1. 询问用户具体的任务数量、损失函数类型以及是否需要使用GradNorm等特定算法。
2. 提供包含参数定义、优化器设置和训练循环的完整代码示例。
3. 解释关键步骤,如权重初始化策略和正则化项的作用。

## Triggers

- pytorch 多个loss 权重 动态调整
- pytorch 可学习参数 控制loss比例
- pytorch 多任务学习 损失平衡
- pytorch gradnorm 实现
- pytorch 自定义参数 加入训练

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…