Dapat dibedakan

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 menggerakkan self 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 mengubah self .

    Dalam beberapa kasus, vektor tangen nol dari self sama dengan TangentVector.zero . Dalam kasus lain, vektor tangen nol bergantung pada informasi di self , seperti bentuk untuk tipe array berdimensi n. Untuk pemrograman yang dapat dibedakan, akan lebih hemat memori jika mendefinisikan properti zeroTangentVectorInitializer 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 }
  • nolTangentVector Metode penyuluhan

    Vektor tangen diinisialisasi menggunakan zeroTangentVectorInitializer . move(along: zeroTangentVector) tidak boleh mengubah self .

    Pernyataan

    var zeroTangentVector: TangentVector { get }
  • Pernyataan

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • denganDerivatif(_:) Metode penyuluhan

    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
  • diurutkan (melalui: _ :) Metode penyuluhan

    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>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    Parameter

    l1

    Lapisan pertama.

    l2

    Lapisan kedua.

    Nilai Pengembalian

    Output lapisan terakhir setelah penerapan berurutan.

  • diurutkan (melalui:_:_:) Metode penyuluhan

    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>(through l1: L1, _ l2: L2, _ l3: L3)
      -> L3.Output
    where L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input

    Parameter

    l1

    Lapisan pertama.

    l2

    Lapisan kedua.

    l3

    Lapisan ketiga.

    Nilai Pengembalian

    Output lapisan terakhir setelah penerapan berurutan.

  • diurutkan (melalui:_:_:_:) Metode penyuluhan

    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>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4
    ) -> L4.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input,
      L3.Output == L4.Input

    Parameter

    l1

    Lapisan pertama.

    l2

    Lapisan kedua.

    l3

    Lapisan ketiga.

    l4

    Lapisan keempat.

    Nilai Pengembalian

    Output lapisan terakhir setelah penerapan berurutan.

  • diurutkan (melalui:_:_:_:_:) Metode penyuluhan

    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>(
      through l1: L1, _ l2: L2, _ l3: L3, _ l4: L4, _ l5: L5
    ) -> L5.Output
    where
      L1.Input == Self, L1.Output == L2.Input, L2.Output == L3.Input, L3.Output == L4.Input,
      L4.Output == L5.Input

    Parameter

    l1

    Lapisan pertama.

    l2

    Lapisan kedua.

    l3

    Lapisan ketiga.

    l4

    Lapisan ketiga.

    l5

    Lapisan kelima.

    Nilai Pengembalian

    Output lapisan terakhir setelah penerapan berurutan.

  • diurutkan (melalui:_:_:_:_:_:) Metode penyuluhan

    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.