如何解决训练神经微分方程时如何保证收敛?
我目前正在完成 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 举报,一经查实,本站将立刻删除。