torch 用于优化

Torch 不仅仅适用于深度学习。其 L-BFGS 优化器配备 Strong-Wolfe 线搜索,是无约束和约束优化的强大工具。

来源:RStudio AI博客

到目前为止,我们在此讨论的所有 torch 用例都与深度学习有关。但是,它的自动微分功能在其他领域也很有用。一个突出的例子是数值优化:我们可以使用 torch 来找到函数的最小值。

torch torch

事实上,函数最小化正是在训练神经网络时发生的事情。但是,在那里,所讨论的函数通常过于复杂,甚至无法想象通过分析找到其最小值。数值优化旨在构建处理这种复杂性的工具。然而,为此,它从组成远不那么深入的函数开始。相反,它们是手工制作的,以提出特定的挑战。

正是

这篇文章首次介绍了使用 torch 进行数值优化。主要内容是其 L-BFGS 优化器的存在和实用性,以及使用线搜索运行 L-BFGS 的影响。作为一个有趣的附加组件,我们展示了一个约束优化的示例,其中通过二次惩罚函数强制执行约束。

torch

为了热身,我们绕道而行,只使用张量“自己”最小化函数。 不过,这在以后会变得有意义,因为整体过程仍然相同。 所有更改都与优化器及其功能的集成有关。

优化器

函数最小化,DYI 方法

要了解如何“手动”最小化函数,让我们尝试标志性的 Rosenbrock 函数。这是一个具有两个变量的函数:

Rosenbrock 函数

\[f(x_1, x_2) = (a - x_1)^2 + b * (x_2 - x_1^2)^2\]

\[f(x_1, x_2) = (a - x_1)^2 + b * (x_2 - x_1^2)^2\]

,其中 \(a\) 和 \(b\) 可配置参数通常分别设置为 1 和 5。

\(a\) \(b\)

在 R 中:

library(torch)a <- 1b <- 5rosenbrock <- function(x) { x1 <- x[1] x2 <- x[2] (a - x1)^2 + b * (x2 - x1^2)^2}
library(torch)a <- 1b <- 5rosenbrock <- function(x) { x1 <- x[1] x2 <- x[2] (a - x1)^2 + b * (x2 - x1^2)^2} library(torch) ( torch 火炬 ) a <- 1 a <- 1 b <- 5 b <- 5 Rosenbrock <- function(x) { <- (分区>