跳转至

边缘生成对抗网络

难度:🟡 中级 | 领域:生成模型、边缘计算、数据增强 | 阅读时间:约 22 分钟

日常类比

造假高手(生成器)与鉴定专家(判别器)互相较劲:一方越造越像,一方越鉴越严。这就是生成对抗网络(Generative Adversarial Network, GAN)的直觉[1]。

物联网(Internet of Things, IoT)里故障样本极少——电机跑数年可能只坏几次。用 GAN 合成"像样的故障波形"补训练集,像让资深工程师凭经验描述"可能的坏法"。难点是:训练贵,边缘只能跑轻量生成器。

摘要

本文梳理 GAN / Wasserstein GAN(WGAN)原理、轻量化生成器、条件 GAN(Conditional GAN, CGAN)做少数类增强、AnoGAN 异常检测与差分隐私(Differential Privacy, DP)合成共享,并给出边缘部署与训练稳定化建议。文中参数量、FID 与准确率为教学量级或单篇报告,不可当作跨场景承诺[3][6][10]。

1. GAN 基本原理

1.1 对抗训练框架

随机噪声 z ~ N(0,1) → 生成器 G(z) → 假样本
真实数据 x_real ──┐
                   ├→ 判别器 D → 真/假概率
假样本 ────────────┘

目标(Min-Max):

\[\min_G \max_D \; \mathbb{E}_{x \sim p_{data}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))]\]

1.2 基本实现(教学骨架)

import torch
import torch.nn as nn

class Generator(nn.Module):
    def __init__(self, noise_dim=100, output_channels=6, seq_len=128):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(noise_dim, 256), nn.BatchNorm1d(256), nn.ReLU(),
            nn.Linear(256, 512), nn.BatchNorm1d(512), nn.ReLU(),
            nn.Linear(512, output_channels * seq_len), nn.Tanh(),
        )
        self.output_channels, self.seq_len = output_channels, seq_len

    def forward(self, z):
        return self.net(z).view(-1, self.output_channels, self.seq_len)

class Discriminator(nn.Module):
    def __init__(self, input_channels=6, seq_len=128):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv1d(input_channels, 32, 5, stride=2, padding=2), nn.LeakyReLU(0.2),
            nn.Conv1d(32, 64, 5, stride=2, padding=2), nn.BatchNorm1d(64), nn.LeakyReLU(0.2),
            nn.Conv1d(64, 128, 5, stride=2, padding=2), nn.BatchNorm1d(128), nn.LeakyReLU(0.2),
            nn.AdaptiveAvgPool1d(1), nn.Flatten(), nn.Linear(128, 1), nn.Sigmoid(),
        )

    def forward(self, x):
        return self.net(x)

时序传感器更常见的是循环/卷积条件 GAN 与 TimeGAN 一类结构[4][5]。

2. 轻量化 GAN 架构

2.1 深度可分离卷积生成器

class DepthwiseSeparableConv1d(nn.Module):
    def __init__(self, in_ch, out_ch, kernel_size=5, stride=1, padding=2):
        super().__init__()
        self.depthwise = nn.Conv1d(in_ch, in_ch, kernel_size, stride, padding, groups=in_ch)
        self.pointwise = nn.Conv1d(in_ch, out_ch, 1)

    def forward(self, x):
        return self.pointwise(self.depthwise(x))

class LightweightGenerator(nn.Module):
    def __init__(self, noise_dim=50, output_channels=6, seq_len=128):
        super().__init__()
        self.init_size = seq_len // 8
        self.fc = nn.Linear(noise_dim, 128 * self.init_size)
        self.net = nn.Sequential(
            nn.Upsample(scale_factor=2),
            DepthwiseSeparableConv1d(128, 64), nn.BatchNorm1d(64), nn.ReLU(),
            nn.Upsample(scale_factor=2),
            DepthwiseSeparableConv1d(64, 32), nn.BatchNorm1d(32), nn.ReLU(),
            nn.Upsample(scale_factor=2),
            DepthwiseSeparableConv1d(32, output_channels), nn.Tanh(),
        )

    def forward(self, z):
        x = self.fc(z).view(-1, 128, self.init_size)
        return self.net(x)

蒸馏式 TinyGAN 等表明:大生成器可压到边缘可承载规模,但质量与任务相关[3][10]。

2.2 参数量与平台(示意量级)

模型倾向 参数量级 算力量级 生成质量倾向 平台倾向
标准全连接/卷积 GAN 百万级 较高 相对好 GPU / 强边缘
DCGAN 类 百万级 较高 较好 GPU / Jetson
深度可分离轻量 GAN 十万级 中等 RPi 级
蒸馏 TinyGAN 更小 较低 中等偏下 强 MCU / 小 SoC

Fréchet Inception Distance(FID)越低通常越好,但图像 FID 不能直接套用到振动/电流时序;时序应看分布距离、频谱与下游任务[5][6]。

2.3 条件 GAN 定向生成

class ConditionalGenerator(nn.Module):
    def __init__(self, noise_dim=100, n_classes=5, output_channels=6, seq_len=128):
        super().__init__()
        self.label_embed = nn.Embedding(n_classes, 50)
        self.net = nn.Sequential(
            nn.Linear(noise_dim + 50, 256), nn.BatchNorm1d(256), nn.ReLU(),
            nn.Linear(256, 512), nn.BatchNorm1d(512), nn.ReLU(),
            nn.Linear(512, output_channels * seq_len), nn.Tanh(),
        )
        self.output_channels, self.seq_len = output_channels, seq_len

    def forward(self, z, labels):
        x = torch.cat([z, self.label_embed(labels)], dim=1)
        return self.net(x).view(-1, self.output_channels, self.seq_len)

3. IoT 数据增强

3.1 类别不平衡(示意分布)

类别 样本占比(示意)
正常运行 绝大多数
轻微异常 少数
严重故障 极少
临界失效 极稀有

工业日志常呈长尾;合成增强有时能抬升故障类召回,但也可能引入伪模式,必须以真实测试集验证[6]。

增强策略 常见观察(文献/实践倾向)
无增强 多数类准确高,少数类召回差
SMOTE 等插值 表格特征尚可,时序易失真
GAN / CGAN 有时提升故障召回,训练不稳
TimeGAN 等 更贴时序依赖,成本更高[5]

3.2 合成质量检查

from scipy.stats import wasserstein_distance
import numpy as np

def evaluate_synthetic_quality(real_data, fake_data):
    metrics = {}
    for ch in range(real_data.shape[1]):
        metrics[f"wasserstein_ch{ch}"] = wasserstein_distance(
            real_data[:, ch].flatten(), fake_data[:, ch].flatten()
        )

    def autocorr(x, lag=10):
        return np.corrcoef(x[:-lag], x[lag:])[0, 1]

    real_ac = np.mean([autocorr(real_data[i, 0]) for i in range(len(real_data))])
    fake_ac = np.mean([autocorr(fake_data[i, 0]) for i in range(len(fake_data))])
    metrics["autocorr_diff"] = abs(real_ac - fake_ac)
    return metrics

还应用合成数据训练分类器、在真实集上测——这是最硬的效用检验[6][9]。

4. GAN 用于异常检测(AnoGAN)

只在正常数据上训 GAN;推理时优化潜在向量 \(z\) 使 \(G(z)\) 逼近输入,重建差则判异常[8]。

class AnoGAN:
    def __init__(self, generator, discriminator, noise_dim=100, lambda_recon=0.9):
        self.G, self.D = generator, discriminator
        self.noise_dim, self.lambda_recon = noise_dim, lambda_recon

    def anomaly_score(self, x, n_iterations=500, lr=0.01):
        z = torch.randn(1, self.noise_dim, requires_grad=True)
        opt = torch.optim.Adam([z], lr=lr)
        for _ in range(n_iterations):
            fake = self.G(z)
            recon = torch.mean((fake - x) ** 2)
            feat = torch.mean(
                (self.D.extract_features(x) - self.D.extract_features(fake)) ** 2
            )
            loss = self.lambda_recon * recon + (1 - self.lambda_recon) * feat
            opt.zero_grad()
            loss.backward()
            opt.step()
        return loss.item()

边缘上逐样本迭代优化 \(z\) 很贵;更常见是训练后只部署编码器式快速变体,或改用 AE/IF[8]。

5. 隐私保护合成共享

5.1 差分隐私 GAN

多设备可共享合成轨迹而非原始读数;判别器侧梯度裁剪 + 噪声可逼近 DP,但效用随噪声上升而下降[7]。

5.2 联邦 GAN(示意)

各设备本地训 GAN → 上传生成器权重(不传原始数据)
                 → 服务器聚合 → 全局生成器 → 合成集中训练

仍需防模型反演与成员推断;合成数据不等于自动合规[7][9]。

6. 训练挑战与稳定化

挑战 原因 常见对策
模式坍塌 生成器塌到少数模式 WGAN-GP / 谱归一化[2]
G/D 失衡 一方过强 TTUR、更新频率比
内存不足 双边模型大 渐进训练、低精度、只部署 G
边缘训不动 CPU 弱 云端训、端侧只推理/蒸馏[3][10]
def wasserstein_loss_D(D, real_data, fake_data, lambda_gp=10):
    """WGAN-GP 判别器损失(示意)"""
    d_real, d_fake = D(real_data).mean(), D(fake_data).mean()
    alpha = torch.rand(real_data.size(0), 1, 1, device=real_data.device)
    interp = (alpha * real_data + (1 - alpha) * fake_data).requires_grad_(True)
    d_interp = D(interp)
    grads = torch.autograd.grad(
        d_interp, interp, torch.ones_like(d_interp), create_graph=True
    )[0]
    gp = ((grads.norm(2, dim=(1, 2)) - 1) ** 2).mean()
    return d_fake - d_real + lambda_gp * gp

7. 实践建议

  1. 先生成 1D 正弦波,验证训练回路。
  2. 换真实加速度计窗,对比 DCGAN / WGAN-GP。
  3. 加类别条件,做少数类增强并测真实集召回。
  4. 用 Wasserstein / 频谱 / 下游任务评估,勿只看损失曲线。
  5. 只量化部署生成器;批量预生成缓存,避免实时采样。

经验倾向:WGAN-GP、谱归一化、合理 batch;时序优先 DTW/频谱/下游指标而非图像 FID[2][5]。

8. 局限、挑战与可改进方向

1. 合成≠真实故障物理

局限:GAN 可能生成统计像但物理不可行的波形,污染分类器[6]。 改进:加物理约束后处理;领域专家抽检;始终保留真实少数类做最终测试。

2. 训练不稳与复现差

局限:同一超参不同种子质量波动大,边缘算力下更难调[2][10]。 改进:固定种子与评估协议;优先云端训稳再蒸馏;记录 FID/下游双指标。

3. AnoGAN 边缘延迟

局限:推理期优化 \(z\) 达数百步,难满足实时告警[8]。 改进:f-AnoGAN 等编码器近似;或改 AE/IF 做一线检测。

4. 隐私噪声与效用

局限:强 DP 下合成质量骤降,弱噪声又难称隐私保证[7]。 改进:按法规选 \(\varepsilon\);组合安全聚合;明确威胁模型后再宣传"隐私共享"。

参考文献

[1] I. Goodfellow et al., "Generative Adversarial Nets," NeurIPS, 2014. [2] M. Arjovsky et al., "Wasserstein GAN," ICML, 2017. [3] T. Chang and Y. Lu, "TinyGAN: Distilling BigGAN for Conditional Image Generation" 及相关轻量生成工作, 2020s. [4] C. Esteban et al., "Real-valued (Medical) Time Series Generation with Recurrent Conditional GANs," NeurIPS Workshop, 2017. [5] J. Yoon et al., "Time-series Generative Adversarial Networks (TimeGAN)," NeurIPS, 2019. [6] 传感器/IoT 数据 GAN 增强相关综述与案例, IEEE IoT Journal 等, 2021 前后. [7] L. Xie et al., "Differentially Private Generative Adversarial Network," arXiv:1802.06739. [8] T. Schlegl et al., "Unsupervised Anomaly Detection with Generative Adversarial Networks (AnoGAN)," IPMI, 2017. [9] Z. Lin et al., "Using GANs for Sharing Networked Time Series Data," IMC, 2020. [10] 边缘智能轻量 GAN 综述相关工作, IEEE Communications Surveys & Tutorials 等, 2024.