주요 콘텐츠

neuralODELayer

신경망 ODE 계층

R2023b 이후

    설명

    신경망 ODE 계층은 ODE의 해를 출력합니다.

    생성

    설명

    layer = neuralODELayer(net,tspan)은 신경망 ODE 계층을 만들고 NetworkTimeInterval 속성을 설정합니다.

    예제

    layer = neuralODELayer(net,tspan,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 추가 속성을 지정합니다.

    예제

    속성

    모두 확장

    신경망 ODE 함수를 나타내는 신경망으로, dlnetwork 객체로 지정됩니다.

    Network에 입력값이 한 개 있으면 predict(net,Y)는 연립 ODE를 정의합니다. 여기서 net은 신경망입니다. Network에 입력값이 2개 있으면 predict(net,T,Y)는 연립 ODE를 정의합니다. 여기서 T는 배치 차원에 대해 반복되는 시간 스텝입니다.

    신경망의 입력값과 출력값은 그 신경망 크기와 형식이 일치해야 합니다.

    GradientMode"adjoint"이면, 신경망 State 속성은 비어 있어야 합니다. State 속성이 비어 있지 않은 상태로 신경망을 사용하려면 GradientMode"direct"로 설정하십시오.

    적분 구간으로, 요소를 두 개 이상 갖는 숫자형 벡터로 지정됩니다. TimeInterval의 요소는 모두 증가하거나 모두 감소해야 합니다.

    솔버는 Y0으로 주어지는 초기 조건을 초기 시간 TimeInterval(1)에 적용한 다음, ODE 함수를 TimeInterval(1)에서 TimeInterval(end)까지 적분합니다.

    • TimeInterval이 2개의 요소([t0 tf])를 가지면 솔버는 지점 tf에서 계산된 해를 반환합니다.

    • TimeInterval이 3개 이상의 요소([t0 t1 ... tf])를 가지면 솔버는 지정된 지점 [t1 ... tf]에서 계산된 해를 반환합니다. 솔버는 TimeInterval에 지정된 각 지점을 정확히 스텝으로 사용하지 않습니다. 대신 솔버는 자체 내부 스텝을 사용하여 해를 계산한 다음, TimeInterval에 지정된 지점에서 해를 평가합니다. 지정된 지점에서 구해진 해는 각 내부 스텝에서 계산된 해와 동일한 정도의 정확성을 가집니다.

      중간 지점을 여러 개 지정해도 계산의 효율성에는 거의 영향을 미치지 않지만 대규모 시스템의 경우에는 메모리 관리에 부정적인 영향을 미칠 수 있습니다.

    R2025a 이후

    신경망 ODE 연산에 사용할 솔버로, 다음 값 중 하나로 지정됩니다.

    • "ode45" — 명시적 룽게-쿠타(Explicit Runge-Kutta) (4,5) 공식인 도르만드-프린스(Dormand-Prince) 쌍을 사용하는 비경직성 미분 방정식에 사용할 솔버. "ode45" 솔버는 대부분의 작업에 적합하며, 다른 솔버보다 속도와 정확도가 높을 수 있습니다.

    • "ode1" — 오일러 방법을 사용하는 비경직성 미분 방정식에 사용할 솔버. "ode1" 솔버는 고정 스텝 크기를 사용하며, 코드 생성과 Simulink 작업에 더 적합할 수 있습니다.

    Solver"ode1"이면 RelativeTolerance 속성과 AbsoluteTolerance 속성은 아무런 영향을 미치지 않습니다.

    SolverOptions 속성을 지정할 경우, 디폴트 값은 속성에서 지정한 솔버와 일치하게 됩니다. 그 외의 경우 디폴트 값은 "ode45"입니다.

    R2025a 이후

    솔버의 options 객체로, deep.ode.options.ODE45 또는 deep.ode.options.ODE1 객체로 지정됩니다.

    계층의 솔버 옵션을 설정하려면 점 표기법을 사용하십시오. 예를 들어 상대 허용오차를 1e-4로 설정하려면, layer.SolverOptions.RelativeTolerance = 1e-4를 사용합니다. 여기서 layer는 신경망 ODE 계층의 인스턴스입니다.

    대부분의 경우 options 객체를 직접 만들 필요가 없습니다. SolverOptions 속성을 지정하는 경우 RelativeTolerance 속성, AbsoluteTolerance 속성 및 GradientMode 속성을 지정해서는 안 됩니다.

    "ode45" 솔버와 "ode1" 솔버에서 지원하는 옵션을 보려면 deep.ode.options.ODE45 항목과 deep.ode.options.ODE1 항목을 각각 참조하십시오.

    dlgradient 함수를 사용할 경우 초기 조건과 파라미터에 대한 기울기를 계산하는 방법으로, 다음 값 중 하나로 지정됩니다.

    • "direct" — 수치 솔버로 수행하는 연산을 역전파(backpropagate)해 나가는 방식으로 기울기를 구합니다. 이 옵션은 미니 배치 크기가 크거나 TimeInterval에 값이 많이 포함된 경우에 가장 적합합니다.

    • "adjoint" — 연결된 수반 연립 ODE를 풀어 기울기를 계산합니다. 이 옵션은 미니 배치 크기가 작거나 TimeInterval에 값이 적게 포함된 경우에 가장 적합합니다.

    신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.

    GradientMode"adjoint"이면, 신경망 State 속성은 비어 있어야 합니다. State 속성이 비어 있지 않은 상태로 신경망을 사용하려면 GradientMode"direct"로 설정하십시오.

    dlaccelerate 함수는 GradientMode 속성이 "direct"로 설정된 신경망 ODE 계층이 있는 신경망에 대해 순방향 통과 가속을 지원하지 않습니다. 신경망 ODE 계층이 있는 신경망의 순방향 통과를 가속하려면, GradientMode 속성을 "adjoint" 또는 "adjoint-seminorm"으로 설정하거나 코드에서 신경망의 순방향 통과를 수행하지 않는 코드 부분을 가속화하십시오.

    경고

    GradientMode"adjoint"이면 Network의 모든 계층이 가속을 지원해야 합니다. 그렇지 않으면 예기치 않은 결과가 반환될 수 있습니다.

    GradientMode"adjoint"인 경우 ODE 함수 입력값을 추적하여 자동 미분에 사용할 계산 그래프를 결정합니다. 이 추적 과정은 얼마간의 시간이 걸릴 수 있으며 동일한 추적을 다시 계산하게 될 수도 있습니다. 추적을 최적화하고 캐시하고 재사용하여 기울기 계산 속도를 높일 수 있습니다.

    딥러닝 함수 가속화에 대한 자세한 내용은 Deep Learning Function Acceleration for Custom Training Loops 항목을 참조하십시오.

    NeuralODELayer 객체는 이 속성을 문자형 벡터로 저장합니다.

    상대 허용오차로, 양의 스칼라로 지정됩니다. 이 허용오차는 각 해 성분 크기에 상대적인 오차를 측정합니다. 간단히 말하면 상대 허용오차는 절대 허용오차 AbsoluteTolerance보다 작은 성분을 제외한 모든 해 성분에서 정확한 자릿수를 제어합니다.

    각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.

    |e(i)| <= max(RelativeTolerance*abs(y(i)),AbsoluteTolerance(i))

    Solver"ode1"이면 RelativeTolerance 속성은 아무런 영향을 미치지 않습니다.

    신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.

    데이터형: single | double

    절대 허용오차로, 양의 스칼라 또는 벡터로 지정됩니다. 이 허용오차보다 작은 해의 값은 중요하지 않은 것으로 간주됩니다. 해 |y|AbsoluteTolerance보다 작으면 솔버는 |y|의 정확한 자릿수를 구할 필요가 없습니다. 이러한 이유로, AbsoluteTolerance의 값은 해 성분의 크기를 고려해야 합니다.

    AbsoluteTolerance가 벡터이면 해와 길이가 동일해야 합니다. AbsoluteTolerance가 스칼라이면 값이 모든 해 성분에 적용됩니다.

    각 스텝에서, ODE 솔버는 해의 i번째 성분에서 국소 오차 e를 추정합니다. 성공하려면, 상대 허용오차와 절대 허용오차에서 결정된 오차 범위를 둘 다 충족해야 합니다.

    |e(i)| <= max(RelativeTolerance*abs(y(i)),AbsoluteTolerance(i))

    Solver"ode1"이면 AbsoluteTolerance 속성은 아무런 영향을 미치지 않습니다.

    신경망 ODE 솔버 옵션을 사용자 지정하려면 Solver 속성과 SolverOptions 속성을 사용하십시오. 이러한 속성은 신경망 ODE 솔버에 대한 추가 제어가 가능하므로 권장됩니다.

    데이터형: single | double

    예제

    모두 축소

    신경망 ODE 계층을 만듭니다. 컨벌루션 계층과 tanh 계층을 차례로 포함하는 ODE 신경망을 지정합니다. 시간 구간을 [0, 1]로 지정합니다.

    inputSize = [14 14 8];
    
    layersODE = [
        imageInputLayer(inputSize)
        convolution2dLayer(3,8,Padding="same")
        tanhLayer];
    
    netODE = dlnetwork(layersODE);
    
    tspan = [0 1];
    layer = neuralODELayer(netODE,tspan)
    layer = 
      NeuralODELayer with properties:
    
                     Name: ''
             TimeInterval: [0 1]
    
       Learnable Parameters
                  Network: [1×1 dlnetwork]
    
       Solver properties
             GradientMode: 'direct'
        RelativeTolerance: 1.0000e-03
        AbsoluteTolerance: 1.0000e-06
                   Solver: ode45
    
      Show all properties
    
    

    신경망 ODE 계층을 포함하는 신경망을 만듭니다.

    layers = [
        imageInputLayer([28 28 1])
        convolution2dLayer([3 3],8,Padding="same",Stride=2)
        reluLayer
        neuralODELayer(netODE,tspan)
        fullyConnectedLayer(10)
        softmaxLayer];
    
    net = dlnetwork(layers)
    net = 
      dlnetwork with properties:
    
             Layers: [6×1 nnet.cnn.layer.Layer]
        Connections: [5×2 table]
         Learnables: [6×3 table]
              State: [0×3 table]
         InputNames: {'imageinput'}
        OutputNames: {'softmax'}
        Initialized: 1
    
      View summary with summary.
    
    

    R2025a 이후

    신경망 ODE 계층을 만듭니다. 컨벌루션 계층과 tanh 계층을 차례로 포함하는 ODE 신경망을 지정합니다. 시간 구간을 [0, 1]로 지정합니다.

    inputSize = [14 14 8];
    
    layersODE = [
        imageInputLayer(inputSize)
        convolution2dLayer(3,8,Padding="same")
        tanhLayer];
    
    netODE = dlnetwork(layersODE);
    
    tspan = [0 1];
    layer = neuralODELayer(netODE,tspan)
    layer = 
      NeuralODELayer with properties:
    
                     Name: ''
             TimeInterval: [0 1]
    
       Learnable Parameters
                  Network: [1×1 dlnetwork]
    
       Solver properties
             GradientMode: 'direct'
        RelativeTolerance: 1.0000e-03
        AbsoluteTolerance: 1.0000e-06
                   Solver: ode45
    
      Show all properties
    
    

    초기 스텝 크기를 1e-3으로, 최대 스텝 크기를 1e-2로 지정합니다.

    layer.SolverOptions.InitialStep = 1e-3;
    layer.SolverOptions.MaxStep = 1e-2;

    솔버 옵션을 표시합니다.

    layer.SolverOptions
    ans = 
      ODE45 with properties:
    
              InitialStep: 1.0000e-03
                  MaxStep: 0.0100
        RelativeTolerance: 1.0000e-03
        AbsoluteTolerance: 1.0000e-06
             GradientMode: 'direct'
    
    

    • 함수로 정의된 딥러닝 모델 또는 사용자 지정 계층 함수에서 신경망 ODE 연산을 적용하려면 dlode45를 사용하십시오.

    알고리즘

    모두 확장

    버전 내역

    R2023b에 개발됨

    모두 확장