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
と等しくなります。他の場合では、ゼロ接線ベクトルは、 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番目の層。
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
第六層。
戻り値
順次適用後の最終層の出力。