Hadiri Simposium Women in ML pada 7 Desember Daftar sekarang

Dapat dibedakan

public protocol Differentiable

Suatu tipe yang secara matematis mewakili manifold terdiferensiasi yang ruang singgungnya berdimensi-hingga.

  • Jenis yang mewakili turunan nilai yang dapat didiferensiasikan.

    Secara matematis, ini setara dengan bundel tangen dari manifold terdiferensiasi yang diwakili oleh tipe terdiferensiasi.

    Pernyataan

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Bergerak self sepanjang arah yang diberikan. Dalam geometri Riemann, ini setara dengan peta eksponensial, yang bergerak self di permukaan geodesik sepanjang vektor tangen diberikan.

    Pernyataan

    mutating mutating func move(along direction: TangentVector)
  • Sebuah penutupan yang menghasilkan vektor nol singgung, menangkap informasi yang diperlukan minimal dari self .

    move(along: zeroTangentVectorInitializer()) tidak harus memodifikasi self .

    Dalam beberapa kasus, vektor nol tangen dari self sama dengan TangentVector.zero . Dalam kasus lain, vektor nol singgung tergantung pada informasi dalam self , seperti bentuk untuk tipe array n-dimensi. Untuk pemrograman terdiferensiasi, itu lebih hemat memori untuk mendefinisikan kebiasaan zeroTangentVectorInitializer properti yang mengembalikan penutupan yang menangkap dan menggunakan hanya informasi yang diperlukan untuk membuat vektor nol singgung. Sebagai contoh:

    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 }
  • nolTangentVektor

    Metode ekstensi

    Sebuah vektor singgung diinisialisasi menggunakan zeroTangentVectorInitializer . move(along: zeroTangentVector) tidak harus memodifikasi self .

    Pernyataan

    var zeroTangentVector: TangentVector { get }
  • Pernyataan

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

    Metode ekstensi

    Berlaku penutupan diberikan kepada turunan dari self .

    Pengembalian self seperti fungsi identitas. Ketika nilai kembalian digunakan dalam konteks di mana ia dibedakan sehubungan dengan, berlaku penutupan yang diberikan ke turunan dari nilai kembalian.

    Pernyataan

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • berurutan (melalui:_ :)

    Metode ekstensi

    Pengembalian output yang dihitung dengan menggunakan urutan lapisan untuk output lapisan sebelumnya, kecuali bahwa 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 Kembali

    Output lapisan terakhir setelah aplikasi berurutan.

  • berurutan (melalui:_:_:)

    Metode ekstensi

    Pengembalian output yang dihitung dengan menggunakan urutan lapisan untuk output lapisan sebelumnya, kecuali bahwa 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 Kembali

    Output lapisan terakhir setelah aplikasi berurutan.

  • diurutkan (melalui:_:_:_:)

    Metode ekstensi

    Pengembalian output yang dihitung dengan menggunakan urutan lapisan untuk output lapisan sebelumnya, kecuali bahwa 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 Kembali

    Output lapisan terakhir setelah aplikasi berurutan.

  • Pengembalian output yang dihitung dengan menggunakan urutan lapisan untuk output lapisan sebelumnya, kecuali bahwa 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 Kembali

    Output lapisan terakhir setelah aplikasi berurutan.

  • Pengembalian output yang dihitung dengan menggunakan urutan lapisan untuk output lapisan sebelumnya, kecuali bahwa 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 Kembali

    Output lapisan terakhir setelah aplikasi berurutan.