Differenzierbar

public protocol Differentiable

Ein Typ, der mathematisch eine differenzierbare Mannigfaltigkeit darstellt, deren Tangentenräume endlichdimensional sind.

  • Ein Typ, der die Derivate eines differenzierbaren Werts darstellt.

    Mathematisch entspricht dies dem Tangentenbündel der differenzierbaren Mannigfaltigkeit, die durch den differenzierbaren Typ dargestellt wird.

    Erklärung

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Bewegt self in die vorgegebene Richtung. In der Riemannschen Geometrie entspricht dies einer Exponentialkarte, die sich auf der geodätischen Oberfläche entlang des gegebenen Tangentenvektors self bewegt.

    Erklärung

    mutating mutating func move(along direction: TangentVector)
  • Ein Abschluss, der einen Tangentenvektor von Null erzeugt und nur minimal notwendige Informationen von sich self erfasst.

    move(along: zeroTangentVectorInitializer()) sollte self nicht ändern.

    In einigen Fällen ist der Null-Tangentenvektor von self gleich TangentVector.zero . In anderen Fällen hängt der Nulltangensvektor von Informationen in sich self , wie z. B. der Form für einen n-dimensionalen Array-Typ. Für eine differenzierbare Programmierung ist es speichereffizienter, eine benutzerdefinierte Eigenschaft zeroTangentVectorInitializer zu definieren, die einen Abschluss zurückgibt, der nur die erforderlichen Informationen erfasst und zum Erstellen eines Tangentenvektors von Null verwendet. Beispielsweise:

    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) }
        }
    }
    

    Erklärung

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • zeroTangentVector

    Erweiterungsmethode

    Ein Tangentenvektor, der mit zeroTangentVectorInitializer initialisiert wurde. move(along: zeroTangentVector) sollte self nicht ändern.

    Erklärung

    var zeroTangentVector: TangentVector { get }
  • Erklärung

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • withDerivative (_ :)

    Erweiterungsmethode

    Wendet den gegebenen Abschluss auf die Ableitung des self .

    Gibt sich self wie eine Identitätsfunktion zurück. Wenn der Rückgabewert in einem Kontext verwendet wird, in dem er in Bezug auf differenziert ist, wird der angegebene Abschluss auf die Ableitung des Rückgabewerts angewendet.

    Erklärung

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • sequenziert (durch: _ :)

    Erweiterungsmethode

    Gibt die Ausgabe zurück, die durch Anwenden einer Folge von Ebenen auf die Ausgabe der vorherigen Ebene berechnet wurde, mit der Ausnahme, dass die Eingabe der ersten Ebene self .

    Erklärung

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

    Parameter

    l1

    Die erste Schicht.

    l2

    Die zweite Schicht.

    Rückgabewert

    Die Ausgabe der letzten Ebene nach sequentieller Anwendung.

  • sequenziert (durch: _: _ :)

    Erweiterungsmethode

    Gibt die Ausgabe zurück, die durch Anwenden einer Folge von Ebenen auf die Ausgabe der vorherigen Ebene berechnet wurde, mit der Ausnahme, dass die Eingabe der ersten Ebene self .

    Erklärung

    @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

    Parameter

    l1

    Die erste Schicht.

    l2

    Die zweite Schicht.

    l3

    Die dritte Schicht.

    Rückgabewert

    Die Ausgabe der letzten Ebene nach sequentieller Anwendung.

  • sequenziert (durch: _: _: _ :)

    Erweiterungsmethode

    Gibt die Ausgabe zurück, die durch Anwenden einer Folge von Ebenen auf die Ausgabe der vorherigen Ebene berechnet wurde, mit der Ausnahme, dass die Eingabe der ersten Ebene self .

    Erklärung

    @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

    Parameter

    l1

    Die erste Schicht.

    l2

    Die zweite Schicht.

    l3

    Die dritte Schicht.

    l4

    Die vierte Schicht.

    Rückgabewert

    Die Ausgabe der letzten Ebene nach sequentieller Anwendung.

  • sequenziert (durch: _: _: _: _ :)

    Erweiterungsmethode

    Gibt die Ausgabe zurück, die durch Anwenden einer Folge von Ebenen auf die Ausgabe der vorherigen Ebene berechnet wurde, mit der Ausnahme, dass die Eingabe der ersten Ebene self .

    Erklärung

    @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

    Parameter

    l1

    Die erste Schicht.

    l2

    Die zweite Schicht.

    l3

    Die dritte Schicht.

    l4

    Die dritte Schicht.

    l5

    Die fünfte Schicht.

    Rückgabewert

    Die Ausgabe der letzten Ebene nach sequentieller Anwendung.

  • Gibt die Ausgabe zurück, die durch Anwenden einer Folge von Ebenen auf die Ausgabe der vorherigen Ebene berechnet wurde, mit der Ausnahme, dass die Eingabe der ersten Ebene self .

    Erklärung

    @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

    Parameter

    l1

    Die erste Schicht.

    l2

    Die zweite Schicht.

    l3

    Die dritte Schicht.

    l4

    Die dritte Schicht.

    l5

    Die fünfte Schicht.

    l6

    Die sechste Schicht.

    Rückgabewert

    Die Ausgabe der letzten Ebene nach sequentieller Anwendung.