Différenciable

public protocol Differentiable

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ées 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
  • self déplace dans la direction donnée. En géométrie riemannienne, cela équivaut à une carte exponentielle, qui self déplace sur la surface géodésique le long du vecteur tangent donné.

    Déclaration

    mutating mutating func move(along direction: TangentVector)
  • Une fermeture qui produit un vecteur tangent nul, capturant le minimum d'informations nécessaires de self .

    move(along: zeroTangentVectorInitializer()) ne devrait pas se modifier self .

    Dans certains cas, le vecteur tangent zéro de self est égal à TangentVector.zero . Dans d'autres cas, le vecteur tangent zéro dépend des informations contenues dans self , telles que la forme d'un type de tableau à n dimensions. Pour la programmation différenciable, il est plus efficace en termes de mémoire de définir une propriété personnalisée zeroTangentVectorInitializer qui renvoie une fermeture qui capture et utilise uniquement les informations nécessaires pour créer un vecteur tangent nul. 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 }
  • zéroTangenteVecteur Méthode d'extension

    Un vecteur tangent initialisé à l'aide zeroTangentVectorInitializer . move(along: zeroTangentVector) ne doit pas se modifier self .

    Déclaration

    var zeroTangentVector: TangentVector { get }
  • avecRecomputationInPullbacks(_:) Méthode d'extension

    Déclaration

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • avecDérivé(_:) Méthode d'extension

    Applique la fermeture donnée à la dérivée de self .

    Renvoie 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
  • séquencé(à travers:_:) Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est self .

    Déclaration

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

    Paramètres

    l1

    La première couche.

    l2

    La deuxième couche.

    Valeur de retour

    Sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:) Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est self .

    Déclaration

    @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

    Paramètres

    l1

    La première couche.

    l2

    La deuxième couche.

    l3

    La troisième couche.

    Valeur de retour

    Sortie de la couche finale après application séquentielle.

  • séquencé(à travers:_:_:_:) Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est self .

    Déclaration

    @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

    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

    Sortie de la couche finale après application séquentielle.

  • séquencé (à travers :_:_:_:_:) Méthode d'extension

    Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque est self .

    Déclaration

    @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

    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

    Sortie de la couche finale après application séquentielle.

  • Renvoie la sortie calculée en appliquant une séquence de calques à la sortie du calque précédent, sauf que l'entrée du premier calque 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

    Sortie de la couche finale après application séquentielle.