You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过深度学习将正弦信号去噪的损失值降至1以内

正弦信号同频噪声去噪优化方案

问题背景

我有一系列含同频噪声的正弦信号,目标是通过深度学习实现去噪,将MSE Loss降至1以内(输入与目标信号数值范围为-100至100)。目前已尝试U-Net++、RIDNet、CBDNet、DnCNN等模型,输入为尺寸32*1*900、数值范围-100至100的正弦信号序列,输出尺寸及数值范围与输入一致,损失函数采用Huber Loss。但训练时损失值降至1.3后便不再下降,网络已出现饱和现象,同时期望预测与目标的差值尽可能接近高斯分布,求进一步降低损失值的方法。

当前使用的DnCNN模型代码

class DnCNN(nn.Module):
def __init__(self, channels, num_of_layers=6):
    super(DnCNN, self).__init__()
    kernel_size = 3
    padding = 1
    features = 128
    layers = []
    layers.append(nn.Conv1d(in_channels=channels, out_channels=features, kernel_size=kernel_size, padding=padding))
    layers.append(nn.GELU())
    for _ in range(num_of_layers-2):
        layers.append(nn.Conv1d(in_channels=features, out_channels=features, kernel_size=kernel_size, padding=padding))
        layers.append(nn.BatchNorm1d(features))
        layers.append(nn.GELU())
    layers.append(nn.Conv1d(in_channels=features, out_channels=channels, kernel_size=kernel_size, padding=padding))
    layers.append(nn.Conv1d(in_channels=channels, out_channels=channels, kernel_size=kernel_size, padding=padding))
    self.dncnn = nn.Sequential(*layers)


def forward(self, x):
    f1 = self.dncnn(x)

    return f1

一、针对同频噪声的模型结构优化

  • 引入频域分支或先验:同频噪声在频域有明显峰值,可把输入信号转成FFT频域特征,和时域特征拼接后喂给网络;或者单独做个频域子网络学噪声频谱模式,逆变换回时域后和时域分支输出融合,精准压制同频噪声。
  • 调整DnCNN结构:
    • 改成残差连接:把forward里的返回改成return x + self.dncnn(x),残差能缓解梯度消失,提升学习能力,当前最后两层输出通道和输入一致,直接改就行;
    • 扩容网络:把层数加到10-12层,特征数提到256,当前6层128特征可能容量不够;
    • 换归一化层:去掉BatchNorm1d,换成LayerNorm/InstanceNorm,或者直接删掉——BatchNorm可能破坏时序信号的局部相关性。

二、损失函数与训练策略调整

  • 组合损失函数:
    • 保留Huber Loss的同时加频域损失:计算预测和目标信号FFT后的L2损失,强制网络在频域对齐,针对性压制同频噪声;
    • 加KL散度损失:假设预测误差服从高斯分布,计算实际误差分布和预设高斯分布的KL散度,引导误差分布向高斯靠拢。
  • 优化训练流程:
    • 学习率衰减:用ReduceLROnPlateau调度器,监测验证集损失,停滞5-10轮就把学习率砍到1/10;
    • 加正则化:在Conv1d后加nn.Dropout(p=0.1),或者设置weight_decay=1e-4,防止过拟合导致损失卡住;
    • 数据增强:给输入信号做微小时域平移、±5%以内的幅度缩放,增加数据多样性,提升泛化能力。

三、数据预处理与后处理

  • 预处理优化:
    • 归一化:把信号缩到[-1,1]范围,训练完再反归一化,提升收敛稳定性;
    • 残差学习:把训练目标改成噪声=输入-干净信号,让网络直接学噪声模式,比直接预测干净信号效率更高。
  • 后处理优化:
    • 平滑输出:用3-5窗口的滑动均值滤波,压掉残留的高频同频噪声,降低MSE;
    • 修正误差偏置:统计预测和目标的差值分布,如果有整体偏置,给网络输出加个可学习的偏置项修正。

四、其他尝试方向

  • 换时序专用模型:试试TCN(时序卷积网络)、Transformer类模型(比如TST、TimeNet),这类模型对时序长程相关性捕捉更强,适合处理周期性同频噪声;
  • 调小batch size:降到16或8,配合梯度累积,让梯度更新更精准;
  • 换激活函数:把GELU换成ReLU或LeakyReLU,部分场景下LeakyReLU的梯度流动更稳定,避免激活饱和。

内容的提问来源于stack exchange,提问作者Roy Mills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:15:37