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 Tangentenvektorsself
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())
sollteself
nicht ändern.In einigen Fällen ist der Null-Tangentenvektor von
self
gleichTangentVector.zero
. In anderen Fällen hängt der Nulltangensvektor von Informationen in sichself
, wie z. B. der Form für einen n-dimensionalen Array-Typ. Für eine differenzierbare Programmierung ist es speichereffizienter, eine benutzerdefinierte EigenschaftzeroTangentVectorInitializer
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 }
Ein Tangentenvektor, der mit
zeroTangentVectorInitializer
initialisiert wurde.move(along: zeroTangentVector)
sollteself
nicht ändern.Erklärung
var zeroTangentVector: TangentVector { get }
Erklärung
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
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
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
Parameter
l1
Die erste Schicht.
l2
Die zweite 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
Parameter
l1
Die erste Schicht.
l2
Die zweite Schicht.
l3
Die dritte 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
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.
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
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.