public protocol Differentiable
Suatu tipe yang secara matematis mewakili manifold terdiferensiasi yang ruang singgungnya berdimensi terbatas.
Tipe yang mewakili turunan nilai terdiferensiasi.
Secara matematis, ini setara dengan kumpulan tangen dari manifold terdiferensiasi yang diwakili oleh tipe terdiferensiasi.
Pernyataan
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Menggerakan
self
sepanjang arah yang diberikan. Dalam geometri Riemannian, ini setara dengan peta eksponensial, yang menggerakkanself
pada permukaan geodesik sepanjang vektor tangen tertentu.Pernyataan
mutating mutating func move(along direction: TangentVector)
Penutupan yang menghasilkan vektor singgung nol, menangkap informasi minimal yang diperlukan dari
self
.move(along: zeroTangentVectorInitializer())
tidak boleh mengubahself
.Dalam beberapa kasus, vektor tangen nol dari
self
sama denganTangentVector.zero
. Dalam kasus lain, vektor tangen nol bergantung pada informasi diself
, seperti bentuk untuk tipe array berdimensi n. Untuk pemrograman yang dapat dibedakan, akan lebih hemat memori jika mendefinisikan propertizeroTangentVectorInitializer
khusus yang mengembalikan penutupan yang menangkap dan hanya menggunakan informasi yang diperlukan untuk membuat vektor tangen nol. Misalnya: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) } } }
Pernyataan
var zeroTangentVectorInitializer: () -> TangentVector { get }
Vektor tangen diinisialisasi menggunakan
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
tidak boleh mengubahself
.Pernyataan
var zeroTangentVector: TangentVector { get }
Pernyataan
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Menerapkan penutupan yang diberikan pada turunan
self
.Mengembalikan
self
seperti fungsi identitas. Ketika nilai kembalian digunakan dalam konteks yang membedakannya, terapkan penutupan yang diberikan ke turunan dari nilai kembalian.Pernyataan
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Mengembalikan keluaran yang dihitung dengan menerapkan urutan lapisan ke keluaran lapisan sebelumnya, kecuali masukan lapisan pertama adalah
self
.Pernyataan
Parameter
l1
Lapisan pertama.
l2
Lapisan kedua.
Nilai Pengembalian
Output lapisan terakhir setelah penerapan berurutan.
Mengembalikan keluaran yang dihitung dengan menerapkan urutan lapisan ke keluaran lapisan sebelumnya, kecuali masukan lapisan pertama adalah
self
.Pernyataan
Parameter
l1
Lapisan pertama.
l2
Lapisan kedua.
l3
Lapisan ketiga.
Nilai Pengembalian
Output lapisan terakhir setelah penerapan berurutan.
Mengembalikan keluaran yang dihitung dengan menerapkan urutan lapisan ke keluaran lapisan sebelumnya, kecuali masukan lapisan pertama adalah
self
.Pernyataan
Parameter
l1
Lapisan pertama.
l2
Lapisan kedua.
l3
Lapisan ketiga.
l4
Lapisan keempat.
Nilai Pengembalian
Output lapisan terakhir setelah penerapan berurutan.
Mengembalikan keluaran yang dihitung dengan menerapkan urutan lapisan ke keluaran lapisan sebelumnya, kecuali masukan lapisan pertama adalah
self
.Pernyataan
Parameter
l1
Lapisan pertama.
l2
Lapisan kedua.
l3
Lapisan ketiga.
l4
Lapisan ketiga.
l5
Lapisan kelima.
Nilai Pengembalian
Output lapisan terakhir setelah penerapan berurutan.
Mengembalikan keluaran yang dihitung dengan menerapkan urutan lapisan ke keluaran lapisan sebelumnya, kecuali masukan lapisan pertama adalah
self
.Pernyataan
@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
Parameter
l1
Lapisan pertama.
l2
Lapisan kedua.
l3
Lapisan ketiga.
l4
Lapisan ketiga.
l5
Lapisan kelima.
l6
Lapisan keenam.
Nilai Pengembalian
Output lapisan terakhir setelah penerapan berurutan.