Sliding Window Approach for Online Energy Disaggregation Using Artificial Neural Networks

本文介绍了基于神经网络的负荷分解算法,对比了Zhang等人的seq2point架构与Kelly等人的工作。探讨了LSTM、GRU和Short Sequence - to - Point Network三种网络架构,分析其优缺点。实验表明不同网络在不同设备上表现不同,还指出滑动窗口长度需优化,应广泛测试不同设备以找到适配模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论文代码地址:https://github.com/OdysseasKr/neural-disaggregator

文献:

Zhang等人网络使用聚合数据窗口来预测同一设备消耗窗口的中点值。 输入窗口的大小为600个样本,转换为1小时的数据(6秒采样周期)。 他们将这种技术命名为Sequence-to-Point,因为它使用一系列电源功耗来推断仪表消耗点。

Zhang等人将他们的seq2point架构产生的结果与Kelly等人的工作进行了比较,发现它在两个常用的误差指标上的表现要好80%以上。 最后,他们可视化卷积层学到的特征,并发现它们描述了观察到的设备在消耗水平和操作时间方面的行为。

  1. NEURAL NETWORK ARCHITECTURES

Kelly等人提出的为NILM提出的两种RNN。 和Mauch等人,使用聚合时间序列的单个点来预测设备在同一点的功耗。 换句话说,为了预测器具在时间上的功率消耗,将总抽取值作为输入给出。

我们的长度窗口意味着神经网络将接收时间片(a,t)以预测时间t处的设备消耗。

1.1 LSTM

使用LSTM神经元的网络遭受高计算成本。 首先,每个LSTM单元在产生输出之前执行几个数学运算。 这使得它们对训练和推理都有计算要求。 此外,它们具有内部存储器单元,其提高了模型的存储器需求。 因此,这种网络可能不适合,因为NILM系统可能必须在低成本的嵌入式设备或消费者系统上运行

1.2 GRU

LSTM网络的局限性激发了一种新的设计,即在要求较低的同时也能实现同样的目标。第一步是用GRU替换LSTM神经元。门控循环单元具有更简单的架构,没有内部存储器。这使得它们在训练时具有更高的计算效率,并且对分解的内存要求更低。受益于之前关于两种架构比较的工作[18],我们测试了两个网络以评估预测准确性的差异。

第二步是减少每层神经元的数量。正如凯利等人。提到,他们的网络没有优化。通过实验我们发现,对于一半大小的复发层,网络的准确性保持不变。这使可训练参数的数量减少了约60%。

最后,我们在层之间添加了dropout以防止过度拟合。在使用来自多个房屋的数据训练设备模型时,这尤其有用。此外,如果缺少某些输入值,则丢失是有帮助的。完整的架构细节可以在图中看到

1.3 Short Sequence-to-Point Network 

由于Sequence-to-Point [11]正在使用消费数据窗口,我们发现将其与建议的循环网络进行比较是有用的。 但是,原始的“序列到点”尝试使用1小时的输入窗口来推断单个点。

此外,窗口的一半由目标消耗时间点之后的时间点组成。 这意味着该网络不适用于在线分解的情况,其中用户期望具有最小延迟的结果。 为了解决这个问题,我们将输入窗口缩小到10-20分钟的数据。

最后,我们在卷积层之间添加了dropout并测试了性能。 完整的架构细节可以在图4中看到。

尽管这个网络具有更多具有更多神经元的层,但卷积网络的计算密集程度低于rnn

这主要是因为rnn层中的神经元接收其层的每个先前神经元的输出作为输入。这不是CNN的情况,因为他们只使用输入向量来计算结果。

在我们的实验中,很明显,与LSTM和GRU网络相比,Sequence-toPoint的训练和测试时间相同或更短。(也就是采用cnn在做)

  1. 实验结果

神经NILM RNN在检测冰箱和水壶等两态设备的事件时表现非常出色。 然而,它无法预测功耗,这从水壶总能量的相对误差变得明显。 相反,使用滑动窗口的网络在诸如洗碗机和洗衣机的多状态设备上实现了更好的结果。 这表明在先前和/或后续时间点使用有关消耗的信息有助于网络识别设备的行为。

GRU网络的结果表明它们至少可以在所有五个设备上与LSTM神经元相提并论。 即使他们在洗衣机上得分几乎相同,其余设备的结果也有利于GRU网络。 考虑到LSTM神经元在训练时更难训练并且更多内存消耗,我们得出结论GRU网络更适合于能量分解任务

短的序列到点网络似乎与GRU网络执行相同的操作。唯一的例外是水壶,其中Sequence-to-Point在所有指标上都获得了更好的分数。从我们的实验结果来看,当用户需要尽可能短的延迟接收结果时,两个网络都非常适合在线分解。

所有四种算法都无法分解的设备是微波炉。这主要取决于这样一个事实:它是一种多状态设备,其通态行为在功耗(范围从1300到2800瓦)以及设备持续时间(持续20秒到 10分钟)之间变化很大)

  1. 展望

应该提到的是,这三个网络是相对较深的架构,有很多可以优化的点。

 

需要更多关注的一点是用作输入的滑动窗口的长度。对于我们的实验,我们使用默认长度为50个样本(5分钟)。通过实验,我们发现当使用100个样品的窗口时,网络在洗衣机上的表现要好得多。然而,对于其他设备而言,情况并非如此。这表明滑动窗口大小取决于设备的行为,因此应进行优化。

不同类型的网络在不同的设备类型上成功。虽然滑动窗口变体在多状态设备上表现更好,但原始RNN在双状态下得分更高。应该对不同的设备以及同一设备的不同模型进行广泛的测试,因为它应该有助于找到将特定网络体系结构链接到设备类型的模式。大多数基于神经网络的NILM尝试都是为了训练一个能够推广到任何看不见的房子的网络。理论上,这对于显示类似行为的设备是可能的。我们发现所有英国DALE房屋的设备在其州内消费方面的表现非常相似。这暗示在数据集内进行分解比实际情况更容易。了解所提出的架构如何使用更大的训练集和不同的测试集进行扩展

### Sliding Window Attention 的启用与未实现原因分析 滑动窗口注意力机制(Sliding Window Attention)是一种优化技术,用于减少 Transformer 模型中的计算复杂度和内存消耗。它通过仅关注局部上下文来替代全局自注意力机制,从而显著降低资源需求[^1]。 当遇到 **"Sliding Window Attention enabled but not implemented"** 这种情况时,可能涉及以下几个方面的原因: #### 1. 软件版本不兼容 某些深度学习框架或库可能存在版本差异问题。如果使用的 DeepSpeed 或其他加速工具的版本较旧,则即使启用了滑动窗口注意力功能,也可能因缺少必要的支持而导致无法实际运行该特性。 #### 2. 配置参数错误 在配置文件或者命令行选项中设置不当也会引发此类警告消息。例如,指定最大序列长度超出了当前硬件能够处理的能力范围时,系统可能会自动禁用高级别的优化措施包括滑窗注意力建模方式。 ```yaml # Example of configuration file snippet where sliding window attention is configured incorrectly. model: max_position_embeddings: 4096 # Exceeds hardware capability limits leading to fallback behavior. attention_config: type: "sliding_window" block_size: 128 ``` #### 3. 硬件限制因素 尽管理论上可以应用滑动窗口算法来提高效率并节省GPU显存空间,但在特定情况下由于目标设备缺乏足够的计算能力或其他约束条件(比如带宽瓶颈),最终仍需回退到标准全矩阵乘法操作形式完成推理任务而不是采用更高效的近似方案。 --- 为了有效解决问题, 可考虑采取如下策略: - 更新至最新稳定版的相关依赖包以获得更好的跨平台一致性表现; - 审查项目初始化阶段传递给训练脚本的各项参数定义是否合理合法; - 如果确认是因为物理资源配置不足引起的现象则尝试升级基础设施建设水平或是调整输入数据规模使之适应现有环境状况. --- ### 实现改进后的代码片段展示 下面给出一段经过修正后能正常工作的 Python 示例程序,展示了如何正确加载预训练模型以及开启滑动窗口注意力模式: ```python from transformers import AutoTokenizer, AutoModelForCausalLM import deepspeed tokenizer = AutoTokenizer.from_pretrained("path/to/your/model") model = AutoModelForCausalLM.from_pretrained("path/to/your/model") deepspeed.init_distributed() engine, _, _, _ = deepspeed.initialize( model=model, config={ 'train_batch_size': 1, 'fp16': {'enabled': True}, 'zero_optimization': { 'stage': 3, }, 'gradient_accumulation_steps': 1, 'steps_per_print': 20, 'wall_clock_breakdown': False, 'attention_config':{ 'type':'sliding_window', 'block_size':64 } }) text = "Your prompt here." input_ids = tokenizer.encode(text, return_tensors="pt").cuda() output_sequence = engine.generate(input_ids=input_ids, max_length=50) print(tokenizer.decode(output_sequence[0], skip_special_tokens=True)) ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值