public protocol Differentiable
Un type qui représente mathématiquement une variété différentiable dont les espaces tangents sont de dimension finie.
Un type représentant les dérivés d'une valeur différentiable.
Mathématiquement, cela équivaut au fibré tangent de la variété différentiable représenté par le type différentiable.
Déclaration
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Se déplace
self
le long de la direction donnée. Dans la géométrie de Riemann, cela équivaut à la carte exponentielle, qui se déplaceself
sur la surface géodésique le long du vecteur de tangente donnée.Déclaration
mutating mutating func move(along direction: TangentVector)
Dispositif de fermeture qui produit un vecteur tangent à zéro, capturant les informations nécessaires minimal de
self
.move(along: zeroTangentVectorInitializer())
leself
move(along: zeroTangentVectorInitializer())
ne devrait pas modifierself
-self
.Dans certains cas, le vecteur tangent zéro
self
est égal àTangentVector.zero
. Dans d' autres cas, le vecteur de tangente zéro dépend des informations enself
, telles que la forme d'un type de réseau à n dimensions. Pour la programmation différentiables, il est plus efficace mémoire pour définir une coutumezeroTangentVectorInitializer
propriété qui renvoie une fermeture qui capture et utilise uniquement les informations nécessaires pour créer un vecteur tangent zéro. Par exemple: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) } } }
Déclaration
var zeroTangentVectorInitializer: () -> TangentVector { get }
Un vecteur tangent initialisé à l' aide
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
leself
move(along: zeroTangentVector)
ne devrait pas modifierself
-self
.Déclaration
var zeroTangentVector: TangentVector { get }
Déclaration
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Applique la fermeture donnée à la dérivée de
self
.Retours
self
comme une fonction d'identité. Lorsque la valeur de retour est utilisée dans un contexte où elle est différenciée par rapport à, applique la fermeture donnée à la dérivée de la valeur de retour.Déclaration
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
Valeur de retour
La sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
Valeur de retour
La sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La quatrième couche.
Valeur de retour
La sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est
self
.Déclaration
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La troisième couche.
l5
La cinquième couche.
Valeur de retour
La sortie de la couche finale après application séquentielle.
Renvoie la sortie calculée en appliquant une séquence de couches à la sortie de la couche précédente, sauf que l'entrée de la première couche est
self
.Déclaration
@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
Paramètres
l1
La première couche.
l2
La deuxième couche.
l3
La troisième couche.
l4
La troisième couche.
l5
La cinquième couche.
l6
La sixième couche.
Valeur de retour
La sortie de la couche finale après application séquentielle.