Różniczkowalne

public protocol Differentiable

Typ, który matematycznie reprezentuje rozmaitość różniczkowa, której przestrzenie styczne są skończone.

  • Typ reprezentujący pochodne wartości różniczkowej.

    Matematycznie jest to równoważne wiązce stycznej rozmaitości różniczkowej reprezentowanej przez typ różniczkowalny.

    Deklaracja

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Porusza self w zadanym kierunku. W geometrii Riemanna jest to odpowiednik mapy wykładniczej, która przesuwa self po powierzchni geodezyjnej wzdłuż zadanego wektora stycznego.

    Deklaracja

    mutating mutating func move(along direction: TangentVector)
  • Zamknięcie, które tworzy wektor styczny zerowy, przechwytując minimalne niezbędne informacje z self .

    move(along: zeroTangentVectorInitializer()) nie powinien modyfikować self .

    W niektórych przypadkach zerowy wektor styczny self jest równy TangentVector.zero . W innych przypadkach zerowy wektor styczny zależy od informacji zawartych w self , takich jak kształt dla n-wymiarowego typu tablicy. W przypadku programowania różniczkowego bardziej wydajne jest zdefiniowanie niestandardowej właściwości zeroTangentVectorInitializer , która zwraca zamknięcie przechwytujące i wykorzystujące tylko niezbędne informacje do utworzenia wektora stycznego zerowego. Na przykład:

    struct Vector {
        var scalars: [Float]
        var count: Int { scalars.count }
        init(scalars: [Float]) { ... }
        init(repeating repeatedElement: Float, count: Int) { ... }
    }
    
    extension Vector: AdditiveArithmetic { ... }
    
    extension Vector: Differentiable {
        typealias TangentVector = Vector
    
        @noDerivative
        var zeroTangentVectorInitializer: () -> TangentVector {
            let count = self.count
            return { TangentVector(repeating: 0, count: count) }
        }
    }
    

    Deklaracja

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • zeroTangentVector Metoda przedłużania

    Wektor styczny zainicjowany przy użyciu zeroTangentVectorInitializer . move(along: zeroTangentVector) nie powinien modyfikować self .

    Deklaracja

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:) Metoda przedłużania

    Deklaracja

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • z pochodną(_:) Metoda przedłużania

    Stosuje podane domknięcie do pochodnej self .

    Zwraca self jak funkcję tożsamości. Gdy wartość zwracana jest używana w kontekście, w którym jest zróżnicowana, stosuje dane domknięcie do pochodnej wartości zwracanej.

    Deklaracja

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • sekwencjonowane (przez:_:) Metoda przedłużania

    Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest self .

    Deklaracja

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    Parametry

    l1

    Pierwsza warstwa.

    l2

    Druga warstwa.

    Wartość zwracana

    Wynik ostatniej warstwy po nałożeniu sekwencyjnym.

  • sekwencjonowane (do:_:_:) Metoda przedłużania

    Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest self .

    Deklaracja

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    Parametry

    l1

    Pierwsza warstwa.

    l2

    Druga warstwa.

    l3

    Trzecia warstwa.

    Wartość zwracana

    Wynik ostatniej warstwy po nałożeniu sekwencyjnym.

  • sekwencjonowane (do:_:_:_:) Metoda przedłużania

    Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest self .

    Deklaracja

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    Parametry

    l1

    Pierwsza warstwa.

    l2

    Druga warstwa.

    l3

    Trzecia warstwa.

    l4

    Czwarta warstwa.

    Wartość zwracana

    Wynik ostatniej warstwy po nałożeniu sekwencyjnym.

  • sekwencjonowane (do:_:_:_:_:) Metoda przedłużania

    Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest self .

    Deklaracja

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    Parametry

    l1

    Pierwsza warstwa.

    l2

    Druga warstwa.

    l3

    Trzecia warstwa.

    l4

    Trzecia warstwa.

    l5

    Piąta warstwa.

    Wartość zwracana

    Wynik ostatniej warstwy po nałożeniu sekwencyjnym.

  • sekwencjonowane (do:_:_:_:_:_:) Metoda przedłużania

    Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest self .

    Deklaracja

    @differentiable
    public func sequenced<L1: Layer, L2: Layer, L3: Layer, L4: Layer, L5: Layer, L6: Layer>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5, _ l6: L6
    ) -> L6.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input, L5.Output == L6.Input

    Parametry

    l1

    Pierwsza warstwa.

    l2

    Druga warstwa.

    l3

    Trzecia warstwa.

    l4

    Trzecia warstwa.

    l5

    Piąta warstwa.

    l6

    Szósta warstwa.

    Wartość zwracana

    Wynik ostatniej warstwy po nałożeniu sekwencyjnym.