主要内容

dlode45

非刚性常微分方程的深度学习解

    描述

    神经常微分方程(ODE)运算返回指定ODE的解。

    dlode45函数应用神经ODE操作dlarray数据。使用dlarray对象允许您标记维度,从而更容易地处理高维数据。例如,可以使用。标记空间维度、时间维度、通道维度和批处理维度“S”“T”“C”,“B”标签,分别。对于未指定的和其他尺寸,请使用“U”标签。为dlarray对象函数在特定维度上操作时,可以通过格式化dlarray对象,或使用DataFormat选择。

    请注意

    dlode45函数最适合神经ODE和自定义训练循环工作流。要解决其他工作流程的ode,请使用数值

    例子

    海底= dlode45 (odefuntspandlY0θ集成了所给出的ode系统odefun的第一个和最后一个元素定义的时间间隔tspan的初始条件dlY0和参数θ

    海底= dlode45 (odefuntspandlY0θ, DataFormat = FMT)指定未格式化初始条件的数据格式dlY0.格式必须包含“S”(空间),“C”(频道),“B”(批)尺寸标签。

    海底= dlode45 (odefuntspandlY0θ名称=值使用一个或多个名称-值参数指定其他选项。例如,海底= dlode45 (odefun tspan dlY0,θ,GradientsMode =“伴随”)集成了所给出的ode系统odefun并通过求解相关的伴随ODE系统来计算梯度。

    例子

    全部折叠

    对于初始条件,创建格式化的dlarray对象包含一批128 28 × 28图像64通道。指定的格式“SSCB”(spatial, spatial, channel, batch)。

    miniBatchSize = 128;inputSize = [28 28];numChannels = 64;Y0 =兰德(inputSize (1) inputSize (2), numChannels, miniBatchSize);dlY0 = dlarray (Y0,“SSCB”);

    查看初始条件的大小和格式。

    大小(dlY0)
    ans =1×428 28 64 128
    dim (dlY0)
    ans = ' SSCB '

    指定ODE函数。定义的函数odeModel,列于ODE函数本节将对输入数据应用卷积运算和双曲切线运算。

    odefun = @odeModel;

    在ODE函数中初始化卷积操作的参数。ODE函数的输出大小必须与初始条件的大小匹配,因此指定与输入通道数量相同的滤波器数量。

    filterSize = [3 3];numFilters = numChannels;参数=结构;参数。重量= dlarray(兰特(filterSize (1) filterSize (2), numChannels, numFilters));参数。偏见= dlarray (0 (1, numFilters));

    指定积分间隔为[0 0.1]。

    Tspan = [0 0.1];

    应用神经ODE操作。

    海底= dlode45 (odefun tspan dlY0,参数);

    查看输出的大小和格式。

    大小(海底)
    ans =1×428 28 64 128
    dim(海底)
    ans = ' SSCB '

    ODE函数

    ODE函数odeModel接受函数输入作为输入t(未使用),y,以及ODE函数参数p包含卷积权值和偏差,并返回卷积-tanh块运算的输出。卷积操作应用填充,使输出大小与输入大小匹配。

    函数z = odeModel(t,y,p) weights = p;偏见= p.Bias;z = dlconv (y,权重、偏见、填充=“相同”);z =双曲正切(z);结束

    输入参数

    全部折叠

    要求解的函数,指定为定义要集成的函数的函数句柄。

    指定odefun作为语法的函数句柄z = fcn (t y p),在那里t是一个标量,y是一个dlarray,p是一组参数。函数返回dlarray大小和格式与y.该函数必须接受所有三个输入参数ty,p,即使不是所有的参数都在函数中使用。ODE函数输出的大小z必须匹配初始条件的大小。

    例如,指定一个ODE函数,该函数应用一个卷积运算,然后是一个tanh运算。

    函数z = dlconvtanh(t,y,p) weights = p;偏见= p.Bias;z = dlconv (y,权重、偏见、填充=“相同”);z =双曲正切(z);结束
    注意这里t参数是未使用的。

    数据类型:function_handle

    积分区间,指定为数字向量或未格式化的dlarray有两个或两个以上元素的向量。中的元素tspan要么都在增加,要么都在减少。

    求解器将给出的初始条件强加于dlY0在最初的时候tspan (1),然后集成来自的ODE函数tspan (1)tspan(结束)

    • 如果tspan有两个元素,(t0 tf),则求解器返回在点处求值的解特遣部队

    • 如果tspan有两个以上的元素,[t0 t1 t2…]tf),则求解器返回在给定点处求值的解(t1 t2……tf).中指定的每个点不是求解器的精确步进tspan.相反,求解器使用它自己的内部步骤来计算解,然后在指定的点上计算解tspan.在指定的万博 尤文图斯点上产生的解与在每个内部步骤上计算的解具有相同的精度顺序。

      指定几个中间点对计算效率几乎没有影响,但对于大型系统来说,它会影响内存管理。

    请注意

    的行为dlode45函数不同于数值函数。

    如果InitialStepMaxStep[],则该软件使用的值tspan初始化值。

    • 如果InitialStep[],然后软件使用的元素tspan作为任务规模的指示。当你指定tspan由于元素的数量不同,求解器的解也会发生变化。

    • 如果MaxStep[],然后软件使用的第一个和最后一个元素计算最大步长tspan.当你改变的初始值或最终值tspan,解算器的解可以改变,因为解算器使用不同的步骤序列。

    初始条件,指定为格式化或未格式化dlarray对象。

    如果dlY0是一个非格式化dlarray,则必须使用DataFormat选择。

    对于神经ODE操作,数据格式必须包含“S”“C”,“B”尺寸标签。初始条件必须没有“T”“U”维度。

    ODE函数的参数,指定为:

    • dlarray对象

    • 单元阵列的dlarray对象

    • 的结构dlarray的对象或嵌套结构dlarray对象

    • 变量表参数,价值,在那里参数包含层名和参数名价值包含参数值。将变量指定为dlarray对象。

    名称-值参数

    指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名和价值为对应值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

    例子:海底= dlode45 (odefun tspan dlY0,θ,GradientsMode =“伴随”)集成了所给出的ode系统odefun并通过求解相关的伴随ODE系统来计算梯度。

    未格式化输入数据的维顺序,指定为字符向量或字符串标量FMT为数据的每个维度提供一个标签。

    当您指定的格式dlarray对象中,每个字符为数据的每个维度提供一个标签,并且必须是以下内容之一:

    • “S”——空间

    • “C”——频道

    • “B”-批次(例如,样品和观察)

    • “T”-时间(例如,序列的时间步长)

    • “U”——未指明的

    对于神经ODE操作,数据格式必须包含“S”“C”,“B”尺寸标签。初始条件必须没有“T”“U”维度。

    您必须指定DataFormatdlY0不是格式化的dlarray

    例子:DataFormat = " SSCB "

    数据类型:字符|字符串

    方法来计算相对于初始条件和参数的梯度dlgradient函数,指定为下列之一:

    • “直接”-通过反向传播通过数值求解器进行的操作来计算梯度。这个选项最适合大的小批量或当tspan包含了许多价值。

    • “伴随”-通过求解相关的伴随ODE系统来计算梯度。这种选择最适合小批量或当tspan包含少量的值。

    警告

    dlaccelerate函数不支持加速万博1manbetxdlode45函数时,GradientMode选择是“直接”.得到的加速函数可能会返回意外的结果。加速调用的代码dlode45函数,设置GradientMode选项“伴随”或者加速代码中没有调用的部分dlode45GradientMode选项设置为“直接”

    初始步长,指定为正标量或[]

    如果InitialStepSize[],然后根据积分区间和初始条件对应的ODE函数的输出,自动确定初始步长。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    最大步长,指定为正标量或[]

    如果MaxStepSize[],则函数使用积分大小区间的十分之一。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    相对误差公差,指定为正标量。相对公差适用于溶液的所有组成部分。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    绝对容许误差,指定为正标量。相对公差适用于溶液的所有组成部分。

    数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

    输出参数

    全部折叠

    给定时刻神经ODE的解tspan(2:结束),返回为dlarray具有相同基础数据类型的dlY0

    如果dlY0是一个格式化的dlarraytspan包含两个元素,那么海底有相同的格式dlY0.如果dlY0不是格式化的dlarraytspan包含两个元素,那么海底是一个非格式化dlarray尺寸顺序和dlY0

    如果dlY0是一个格式化的dlarraytspan包含两个以上的元素海底有相同的格式dlY0附加一个“T”维度(时间)。如果dlY0不是格式化的dlarraytspan包含两个以上的元素海底是一个非格式化dlarray尺寸顺序和dlY0附加一个与时间相对应的额外维度。

    算法

    神经常微分方程(ODE)运算返回指定ODE的解。特别地,给定一个输入,神经ODE操作输出ODE的数值解 y f t y θ 时间范围(t0t1),并具有初始条件y (t0) = y0,在那里ty表示ODE函数的输入和θ是一组可学习的参数。通常是初始条件y0是另一个深度学习操作的网络输入或输出。

    dlode45函数使用数值函数,它是基于一个明确的龙格-库塔(4,5)公式,休眠-王子对。它是计算中的单步求解器y (tn,它只需要前一个时间点的解,y (tn - 1[2][3]

    参考文献

    [1] Chen, Ricky T. Q., Yulia Rubanova, Jesse Bettencourt, David Duvenaud。"神经常微分方程"预印本,2018年6月19日提交。https://arxiv.org/abs/1806.07366。

    Dormand, J. R.和P. J. Prince。嵌入龙格-库塔公式家族计算与应用数学学报6,不。1(1980年3月):19-26。https://doi.org/10.1016/0771 - 050 x(80) 90013 - 3。

    Lawrence F.和Mark W. Reichelt。" MATLAB ODE套件"SIAM Journal of science Computing,第18期。1(1997年1月):1 - 22。https://doi.org/10.1137/S1064827594276424。

    介绍了R2021b