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, queself
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 modificarself
.Em alguns casos, o vetor tangente zero de
self
é igual aTangentVector.zero
. Em outros casos, o vetor tangente zero depende de informações emself
, 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 customizadazeroTangentVectorInitializer
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 }
Um vetor tangente inicializado usando
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
não deve modificarself
.Declaração
var zeroTangentVector: TangentVector { get }
Declaração
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
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
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
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.
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
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.
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
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.
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
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.