Diferansiyellenebilir, Diferansiyellenebilir

public protocol Differentiable

Teğet uzayları sonlu boyutlu olan türevlenebilir bir manifoldu matematiksel olarak temsil eden bir tür.

  • Türevlenebilir bir değerin türevlerini temsil eden bir tür.

    Matematiksel olarak bu, türevlenebilir tip tarafından temsil edilen türevlenebilir manifoldun teğet demetine eşdeğerdir.

    beyan

    associatedtype TangentVector: Differentiable & AdditiveArithmetic
      where TangentVector.TangentVector == TangentVector
  • Verilen yön boyunca self hareket ettirir. Riemann geometrisinde bu, jeodezik yüzey üzerinde verilen teğet vektör boyunca self hareket ettiren üstel haritaya eşdeğerdir.

    beyan

    mutating mutating func move(along direction: TangentVector)
  • self minimum gerekli bilgiyi yakalayan, sıfır teğet vektör üreten bir kapatma.

    move(along: zeroTangentVectorInitializer()) self değiştirmemelidir.

    Bazı durumlarda self sıfır teğet vektörü TangentVector.zero eşittir. Diğer durumlarda, sıfır teğet vektörü, n boyutlu bir dizi türünün şekli gibi self içindeki bilgilere bağlıdır. Türevlenebilir programlama için, sıfır teğet bir vektör oluşturmak için yalnızca gerekli bilgileri yakalayan ve kullanan bir kapatma döndüren özel bir zeroTangentVectorInitializer özelliği tanımlamak bellek açısından daha verimlidir. Örneğin:

    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) }
        }
    }
    

    beyan

    var zeroTangentVectorInitializer: () -> TangentVector { get }
  • sıfırTanjantVektör Uzatma yöntemi

    zeroTangentVectorInitializer kullanılarak başlatılan bir teğet vektör. move(along: zeroTangentVector) self değiştirmemelidir.

    beyan

    var zeroTangentVector: TangentVector { get }
  • beyan

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • Türevli(_:) Uzatma yöntemi

    Verilen kapanışı self türevine uygular.

    Bir kimlik işlevi gibi self döndürür. Dönüş değeri, kendisine göre farklılaştırıldığı bir bağlamda kullanıldığında, verilen kapanışı dönüş değerinin türevine uygular.

    beyan

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • İlk katmanın girişinin self olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.

    beyan

    @differentiable
    public func sequenced<L1: Layer, L2: Layer>(through l1: L1, _ l2: L2) -> L2.Output
    where L1.Input == Self, L1.Output == L2.Input

    Parametreler

    l1

    İlk katman.

    l2

    İkinci katman.

    Dönüş Değeri

    Sıralı uygulama sonrasında son katmanın çıktısı.

  • İlk katmanın girişinin self olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.

    beyan

    @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

    Parametreler

    l1

    İlk katman.

    l2

    İkinci katman.

    l3

    Üçüncü katman.

    Dönüş Değeri

    Sıralı uygulama sonrasında son katmanın çıktısı.

  • İlk katmanın girişinin self olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.

    beyan

    @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

    Parametreler

    l1

    İlk katman.

    l2

    İkinci katman.

    l3

    Üçüncü katman.

    l4

    Dördüncü katman.

    Dönüş Değeri

    Sıralı uygulama sonrasında son katmanın çıktısı.

  • İlk katmanın girişinin self olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.

    beyan

    @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

    Parametreler

    l1

    İlk katman.

    l2

    İkinci katman.

    l3

    Üçüncü katman.

    l4

    Üçüncü katman.

    l5

    Beşinci katman.

    Dönüş Değeri

    Sıralı uygulama sonrasında son katmanın çıktısı.

  • İlk katmanın girişinin self olması dışında, önceki katmanın çıktısına bir dizi katman uygulanarak hesaplanan çıktıyı döndürür.

    beyan

    @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

    Parametreler

    l1

    İlk katman.

    l2

    İkinci katman.

    l3

    Üçüncü katman.

    l4

    Üçüncü katman.

    l5

    Beşinci katman.

    l6

    Altıncı katman.

    Dönüş Değeri

    Sıralı uygulama sonrasında son katmanın çıktısı.