自动差异化施工选择建议
|
该页面正在翻译中。 |
带有快速描述的自动广告填充的选择是:
* 自动转发():小优化的最快选择
* AutoReverseDiff(编译=false):大型标量优化的快速选择
* 自动跟踪器():像ReverseDiff但GPU兼容
* 自合子():非变异基于数组(BLAS)函数的最快选择
* 自动编辑():有限差异,不是最佳的,但总是适用的
* AutoSymbolics():大型标量优化的最快选择
* 自酶():类型稳定和优化代码的高性能广告选择
* 自动机():像Zygote和ReverseDiff,但支持GPU和变异代码
自动差异化选择API
以下各节详细介绍自动广告选择。
# *`ADTypes。[医]自动进货`*-类型
AutoForwardDiff{chunksize} <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoForwardDiff(); kwargs...)
这使用https://github.com/JuliaDiff/ForwardDiff.jl[ForwardDiff.jl]包。 对于小型系统来说,它是最快的选择,特别是在大量标量交互的情况下。 它易于使用,并与大多数具有松散类型限制的Julia函数兼容。 但是,由于它是前进模式,与其他广告选择相比,它的扩展性很差。 Hessian构造是次优的,因为它使用前向-前向方法。
*与Gpu兼容 *兼容基于Hessian的优化 *兼容基于Hv的优化 *兼容约束条件
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,则Hessian不通过ForwardDiff定义。
# *`ADTypes。[医]自动`*-类型
AutoFiniteDiff{T1,T2,T3} <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoFiniteDiff(); kwargs...)
这使用https://github.com/JuliaDiff/FiniteDiff.jl[FiniteDiff.jl].虽然不一定是最有效的,但这是唯一不需要 f 函数是自动可微分的,这意味着它适用于任何选择。 但是,由于它使用有限差分,因此需要小心,因为此过程将数值误差引入导数估计。
*与Gpu兼容 *兼容基于Hessian的优化 *兼容基于Hv的优化 *兼容约束函数
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,则Hessian不通过FiniteDiff定义。
*构造函数*
AutoFiniteDiff(; fdtype = Val(:forward)fdjtype = fdtype, fdhtype = Val(:hcentral))
* fd类型:用于定义梯度的方法
* fdj类型:用于定义约束的雅可比的方法。
* fdh类型:用于定义Hessian的方法
有关导数类型说明符的更多信息,请参阅https://github.com/JuliaDiff/FiniteDiff.jl[FiniteDiff.jl文档]。
# *`ADTypes。自动复制`*-类型
AutoReverseDiff <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoReverseDiff(); kwargs...)
这使用https://github.com/JuliaDiff/ReverseDiff.jl[ReverseDiff.jl]包。 自动复制 有默认参数, 编译,表示是否应该编译反向传递。 *`编译` 应只设置为 真的 如果 f 不包含分支(if语句,while循环),否则它可能会产生不正确的导数!*
自动复制 一般适用于许多纯Julia代码,并与 编译=真 它是具有大量标量交互的代码中最快的选项之一。 Hessian通过将ForwardDiff与ReverseDiff混合用于forward-over-reverse来快速计算。 然而,它的性能可以动摇时 编译=错误.
*与GPUs不兼容 *通过与ForwardDiff混合,与基于Hessian的优化兼容 *通过与ForwardDiff混合,与基于Hv的优化兼容 *与约束函数不兼容
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,则Hessian不通过ReverseDiff定义。
*构造函数*
AutoReverseDiff(; compile = false)
*注意:目前,编译未定义/使用!*
# *`ADTypes。自合子`*-类型
AutoZygote <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoZygote(); kwargs...)
这使用https://github.com/FluxML/Zygote.jl[Zygote.jl]包。 这是主要的反向模式广告,以良好的效率处理大量的朱莉娅. Hessian构造是通过正向-过反向混合ForwardDiff快速。Jl与合子。jl
*与Gpu兼容 *通过ForwardDiff与基于Hessian的优化兼容 *通过ForwardDiff与基于Hv的优化兼容 *与约束函数不兼容
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,那么Hessian不是通过Zygote定义的。
# *`ADTypes。自动跟踪器`*-类型
AutoTracker <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoTracker(); kwargs...)
这使用https://github.com/FluxML/Tracker.jl[Tracker.jl]包。 一般比ReverseDiff慢,一般适用于很多纯Julia代码。
*与Gpu兼容 *与基于Hessian的优化不兼容 *与基于Hv的优化不兼容 *与约束函数不兼容
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,则Hessian不通过Tracker定义。
# *`ADTypes。自动机械`*-类型
AutoSymbolics
用于选择https://github.com/JuliaSymbolics/Symbolics.jl[Symbolics.jl]后端用于自动区分。
定义由https://github.com/SciML/ADTypes.jl[ADTypes.jl]。
*构造函数*
AutoSymbolics()
# *`ADTypes。自酶,自酶`*-类型
AutoEnzyme <: AbstractADType
在OptimizationFunction中使用的AbstractADType选项,用于自动生成未指定的导数函数。 使用方法:
OptimizationFunction(f, AutoEnzyme(); kwargs...)
这使用https://github.com/EnzymeAD/Enzyme.jl[酶.jl]包。 酶对从julia产生的LLVM IR代码执行自动分化。 它是高效的,它的能力执行广告的优化代码允许酶满足或超过最先进的广告工具的性能。
*与Gpu兼容 *兼容基于Hessian的优化 *兼容基于Hv的优化 *兼容约束条件
请注意,只定义了未指定的导数函数。 例如,如果一个 赫斯 功能提供给 优化功能,那么Hessian不是通过酶定义的。
# *`ADTypes。自动机,自动机`*-类型
AutoMooncake
用于选择https://github.com/compintell/Mooncake.jl[Mooncake.jl]后端用于反向模式下的自动区分。
定义由https://github.com/SciML/ADTypes.jl[ADTypes.jl]。
*构造函数*
AutoMooncake(; config=nothing)
*字段*
* 配置;配置:要么 什么都没有 或一个实例 月饼。配置;配置 --请参阅 月饼。配置;配置 有关更多信息。 AutoMooncake(;config=nothing) 相当于 AutoMooncake(;config=月饼。配置()),即默认配置。