public protocol Differentiable
接空間が有限次元である可微分多様体を数学的に表す型。
微分可能な値のデリバティブを表すタイプ。
数学的には、これは微分可能型で表される可微分多様体の接束に相当します。
宣言
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
指定された方向に沿って
self
移動します。リーマン幾何学では、これは指数マップと同等であり、指定された接線ベクトルに沿って測地線表面上をself
移動します。宣言
mutating mutating func move(along direction: TangentVector)
ゼロ接線ベクトルを生成し、
self
から必要最小限の情報を取得するクロージャ。move(along: zeroTangentVectorInitializer())
はself
変更しないでください。場合によっては、
self
ゼロ接線ベクトルはTangentVector.zero
等しくなりTangentVector.zero
。その他の場合、ゼロ接線ベクトルは、n次元配列型の形状など、self
情報に依存します。微分可能プログラミングの場合、必要な情報のみをキャプチャして使用してゼロ接線ベクトルを作成するクロージャを返すカスタムzeroTangentVectorInitializer
プロパティを定義する方がメモリ効率が高くなります。例えば: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) } } }
宣言
var zeroTangentVectorInitializer: () -> TangentVector { get }
zeroTangentVectorInitializer
を使用して初期化された接線ベクトル。move(along: zeroTangentVector)
はself
変更しないでください。宣言
var zeroTangentVector: TangentVector { get }
宣言
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
与えられたクロージャを
self
の導関数に適用します。恒等関数のように
self
返します。で区別されるコンテキストで戻り値が使用される場合、は、指定されたクロージャを戻り値の導関数に適用します。宣言
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
最初のレイヤーの入力が
self
ことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。宣言
パラメーター
l1
最初のレイヤー。
l2
2番目のレイヤー。
l3
3番目のレイヤー。
戻り値
順次適用後の最終層の出力。
最初のレイヤーの入力が
self
ことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用して計算された出力を返します。宣言
パラメーター
l1
最初のレイヤー。
l2
2番目のレイヤー。
l3
第3層。
l4
第4層。
戻り値
順次適用後の最終層の出力。
最初のレイヤーの入力が
self
ことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。宣言
パラメーター
l1
最初のレイヤー。
l2
2番目のレイヤー。
l3
3番目のレイヤー。
l4
3番目のレイヤー。
l5
5番目のレイヤー。
戻り値
順次適用後の最終層の出力。
最初のレイヤーの入力が
self
ことを除いて、レイヤーのシーケンスを前のレイヤーの出力に適用することによって計算された出力を返します。宣言
@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
パラメーター
l1
最初のレイヤー。
l2
2番目のレイヤー。
l3
3番目のレイヤー。
l4
3番目のレイヤー。
l5
5番目のレイヤー。
l6
6番目のレイヤー。
戻り値
順次適用後の最終層の出力。