微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

训练神经微分方程时如何保证收敛?

如何解决训练神经微分方程时如何保证收敛?

我目前正在完成 Julia 语言 (https://tutorials.sciml.ai/html/exercises/01-workshop_exercises.html) 的 SciML 教程研讨会练习。具体来说,我被困在练习 6 第 3 部分,其中涉及训练神经网络来逼近方程组

function lotka_volterra(du,u,p,t)
  x,y = u
  α,β,δ,γ = p
  du[1] = dx = α*x - β*x*y
  du[2] = dy = -δ*y + γ*x*y
end

目标是用神经网络替换 du[2] 的方程:du[2] = NN(u,p) 其中 NN 是一个具有参数 p 和输入 u 的神经网络。

我有一组网络应该尝试匹配的示例数据。损失函数是网络模型输出与样本数据之间的平方差。

我定义了我的网络 NN = Chain(Dense(2,30),Dense(30,1))。我可以让 Flux.train! 运行,但问题是有时神经网络的初始参数会导致 10^20 数量级的损失,因此训练永远不会收敛。我最好的尝试使用 Adam 优化器在大约 1000 次迭代中将损失从最初的大约 2000 降低到大约 20,但我似乎无法做得更好。

如何确保我的网络始终可训练,以及有没有办法获得更好的收敛性?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。