public protocol Differentiable
Un tipo que representa matemáticamente una variedad diferenciable cuyos espacios tangentes son de dimensión finita.
Un tipo que representa las derivadas de un valor diferenciable.
Matemáticamente, esto es equivalente al paquete tangente de la variedad diferenciable representada por el tipo diferenciable.
Declaración
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Mueve
self
lo largo de la dirección dada. En la geometría de Riemann, esto es equivalente a un mapa exponencial, que se mueve aself
en la superficie geodésica a lo largo del vector tangente dado.Declaración
mutating mutating func move(along direction: TangentVector)
Un cierre que produce un vector tangente cero, capturando la mínima información necesaria de
self
.move(along: zeroTangentVectorInitializer())
no debería modificarse aself
.En algunos casos, el vector tangente cero de
self
es igual aTangentVector.zero
. En otros casos, el vector de tangente cero depende de la información enself
, como la forma de un tipo de matriz n-dimensional. Para la programación diferenciable, es más eficiente en memoria definir una propiedadzeroTangentVectorInitializer
personalizada que devuelve un cierre que captura y usa solo la información necesaria para crear un vector tangente cero. Por ejemplo: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) } } }
Declaración
var zeroTangentVectorInitializer: () -> TangentVector { get }
Un vector tangente inicializado usando
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
no debería modificarse aself
.Declaración
var zeroTangentVector: TangentVector { get }
Declaración
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Aplica el cierre dado a la derivada del
self
.Se devuelve a
self
como una función de identidad. Cuando el valor de retorno se usa en un contexto en el que se diferencia con respecto a, se aplica el cierre dado a la derivada del valor de retorno.Declaración
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es
self
.Declaración
Parámetros
l1
La primera capa.
l2
La segunda capa.
Valor devuelto
Salida de la capa final después de la aplicación secuencial.
Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es
self
.Declaración
Parámetros
l1
La primera capa.
l2
La segunda capa.
l3
La tercera capa.
Valor devuelto
Salida de la capa final después de la aplicación secuencial.
Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es
self
.Declaración
Parámetros
l1
La primera capa.
l2
La segunda capa.
l3
La tercera capa.
l4
La cuarta capa.
Valor devuelto
Salida de la capa final después de la aplicación secuencial.
Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es
self
.Declaración
Parámetros
l1
La primera capa.
l2
La segunda capa.
l3
La tercera capa.
l4
La tercera capa.
l5
La quinta capa.
Valor devuelto
Salida de la capa final después de la aplicación secuencial.
Devuelve la salida calculada aplicando una secuencia de capas a la salida de la capa anterior, excepto que la entrada de la primera capa es
self
.Declaración
@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
La primera capa.
l2
La segunda capa.
l3
La tercera capa.
l4
La tercera capa.
l5
La quinta capa.
l6
La sexta capa.
Valor devuelto
Salida de la capa final después de la aplicación secuencial.