首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >避免在少量数据上使用大型LSTM网

避免在少量数据上使用大型LSTM网
EN

Data Science用户
提问于 2020-08-19 07:14:06
回答 2查看 361关注 0票数 2

我在这里重新发布这个问题来自AI.SE,因为我认为这可能是AI.SE的话题.

1.上下文

我正在学习健康监测技术,我在数据集上练习.目标是预测发动机的剩余使用寿命(RUL)给定传感器系列。关于C数据集,有广泛的文献,包括经典的(非DL) ML技术和基于DL的方法.几年前,基于LSTM的网络展示了有希望的结果(参见长期短期记忆网络,剩余寿命估算,郑等人,2017年),我正在尝试复制这些结果。

contains数据集包含的数据量很小.例如,FD001子集只有100个运行到失败系列。当我对它进行预处理以得到固定长度的时间序列时,我可以得到大约20000帧序列。在本文中,他们使用了两个隐藏的LSTM层,每个64个单元,两个完全连接的层,每个层有8个神经元(~55000个参数)。

2.问题

LSTMs会产生大量的参数,因此在训练这样的网络时可能会遇到过拟合。我可以使用L1或L2正则化,退出,对于数据集来说,网络仍然会很大程度上过大。保持相同的架构,我无法达到论文中的分数和RMSE在验证集,而且过度拟合总是在这里。

然而,有一件事情是可行的,就是减少LSTM层的单位数量。预期,只要24单位,而不是每层64单位,网络的参数(~9000)要少得多,而且没有过拟合。分数和RMSE比报纸上的要差一些,但这是我目前所能得到的最好成绩。虽然这些结果对我来说很好,但我很好奇这篇文章的作者如何能够避免在他们的LSTM(64,64)网络上过度拟合。

3.问题

LSTM是很棒的,但是它们产生了许多参数,阻碍了对小数据集的正确学习:我想知道是否有任何方法来解决这个特定的问题。对于如何避免在小型数据集上使用基于LSTM的网络,您有什么建议吗?

4.信息系统

我在这里提供更多关于我的网络和结果的信息:

网络体系结构

代码语言:javascript
运行
复制
model = keras.models.Sequential([
    keras.layers.LSTM(24, return_sequences=True, kernel_regularizer=keras.regularizers.l1(0.01),
                      input_shape=input_shape),
    keras.layers.Dropout(0.2),
    keras.layers.LSTM(24, return_sequences=False, kernel_regularizer=keras.regularizers.l1(0.01)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(8, activation='relu', kernel_regularizer=keras.regularizers.l2()),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(8, activation='relu', kernel_regularizer=keras.regularizers.l2(), bias_regularizer=keras.regularizers.l2()),
    keras.layers.Dense(1, activation='relu')
])

分数(验证集)

  • 论文:分数= 16.14;RMSE = 338
  • 我的LSTM(64,64):得分= 26.47;RMSE = 3585 (套装)
  • 我的LSTM(24,24):分数= 16.82;RMSE = 515

编辑:@h-H1-sG0n3提出的解决方案的结果

  • recurrent_dropout=0.3:LSTM(64,64):得分为16.36;RMSE = 545
EN

回答 2

Data Science用户

回答已采纳

发布于 2020-08-19 12:39:26

您可能需要检查以下代码中似乎没有测试的几个超参数:

  • 梯度裁剪:在训练过程中,对重量的大规模更新会导致数值溢出或下流,通常被称为“爆炸梯度”。
代码语言:javascript
运行
复制
# configure your optimizer with gradient norm clipping
opt = SGD(lr=0.01, momentum=0.9, clipnorm=1.0)
  • 恢复辍学:适用于LSTM层各单元的递归输入信号的辍学。
代码语言:javascript
运行
复制
keras.layers.LSTM(24, kernel_regularizer=keras.regularizers.l1(0.01), ..., recurrent_dropout=0.3)
  • 有状态:从论文中可以清楚地看出,模型是否在每次训练迭代中保持其状态。你也可以用这个做实验。
代码语言:javascript
运行
复制
keras.layers.LSTM(24, kernel_regularizer=keras.regularizers.l1(0.01), ..., stateful=True)
票数 2
EN

Data Science用户

发布于 2020-08-19 10:51:01

因此,问题是如何防止过度拟合,特别是一个小的数据集。

显然,我的第一直觉说要减少层数(例如移除第二层LSTM层),但这显然会改变模型的总体架构,使得它的层数比本文描述的模型少。

其他特别明显的建议是进行某种形式的数据增强,使用当前的数据集人为地增加样本的数量。

您是否也对数据(例如,缩放的数值等)应用了任何预处理?如果没有,这也会有所帮助。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/80495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档