Diferenciável, Diferenciável

public protocol Differentiable

Um tipo que representa matematicamente uma variedade diferenciável cujos espaços tangentes são de dimensão finita.

  • Um tipo que representa as derivadas de um valor diferenciável.

    Matematicamente, isso é equivalente ao fibrado tangente da variedade diferenciável representada pelo tipo diferenciável.

    Declaração

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Move self ao longo da direção determinada. Na geometria Riemanniana, isso é equivalente ao mapa exponencial, que self move na superfície geodésica ao longo de um determinado vetor tangente.

    Declaração

    mutating mutating func move(along direction: TangentVector)
  • Um fechamento que produz um vetor tangente zero, capturando o mínimo de informações necessárias de self .

    move(along: zeroTangentVectorInitializer()) não deve modificar self .

    Em alguns casos, o vetor tangente zero de self é igual a TangentVector.zero . Em outros casos, o vetor tangente zero depende de informações em self , como a forma de um tipo de matriz n-dimensional. Para programação diferenciável, é mais eficiente em termos de memória definir uma propriedade customizada zeroTangentVectorInitializer que retorna um fechamento que captura e usa apenas as informações necessárias para criar um vetor tangente zero. Por exemplo:

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

    Declaração

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • vetor tangente zero Método de extensão

    Um vetor tangente inicializado usando zeroTangentVectorInitializer . move(along: zeroTangentVector) não deve modificar self .

    Declaração

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:) Método de extensão

    Declaração

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • comDerivativo(_:) Método de extensão

    Aplica o fechamento fornecido à derivada de self .

    Retorna self como uma função de identidade. Quando o valor de retorno é usado em um contexto onde é diferenciado em relação a, aplica-se o fechamento dado à derivada do valor de retorno.

    Declaração

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • sequenciado (através de:_:) Método de extensão

    Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto que a entrada da primeira camada é self .

    Declaração

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

    Parâmetros

    l1

    A primeira camada.

    l2

    A segunda camada.

    Valor de retorno

    A saída da camada final após a aplicação sequencial.

  • sequenciado (através de:_:_:) Método de extensão

    Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto que a entrada da primeira camada é self .

    Declaração

    @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

    Parâmetros

    l1

    A primeira camada.

    l2

    A segunda camada.

    l3

    A terceira camada.

    Valor de retorno

    A saída da camada final após a aplicação sequencial.

  • sequenciado (através de:_:_:_:) Método de extensão

    Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto que a entrada da primeira camada é self .

    Declaração

    @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

    Parâmetros

    l1

    A primeira camada.

    l2

    A segunda camada.

    l3

    A terceira camada.

    l4

    A quarta camada.

    Valor de retorno

    A saída da camada final após a aplicação sequencial.

  • sequenciado (através de:_:_:_:_:) Método de extensão

    Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto que a entrada da primeira camada é self .

    Declaração

    @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

    Parâmetros

    l1

    A primeira camada.

    l2

    A segunda camada.

    l3

    A terceira camada.

    l4

    A terceira camada.

    l5

    A quinta camada.

    Valor de retorno

    A saída da camada final após a aplicação sequencial.

  • Retorna a saída calculada aplicando uma sequência de camadas à saída da camada anterior, exceto que a entrada da primeira camada é self .

    Declaração

    @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

    Parâmetros

    l1

    A primeira camada.

    l2

    A segunda camada.

    l3

    A terceira camada.

    l4

    A terceira camada.

    l5

    A quinta camada.

    l6

    A sexta camada.

    Valor de retorno

    A saída da camada final após a aplicação sequencial.