我目前正在完成 Julia 语言的 SciML 教程研讨会练习 ( https://tutorials.sciml.ai/html/exercises/01-workshop_exercises.html )。具体来说,我坚持练习 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,但我似乎无法做得更好。
如何确保我的网络始终可训练,有没有办法更好地收敛?