قابل تمایز

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 است. در موارد دیگر، بردار مماس صفر به اطلاعاتی در self بستگی دارد، مانند شکل برای یک نوع آرایه n بعدی. برای برنامه نویسی قابل تمایز، تعریف یک ویژگی سفارشی 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
  • withDerivative(_:) روش گسترش

    بستن داده شده را بر مشتق self اعمال می کند.

    self مانند یک تابع هویت برمی گرداند. هنگامی که مقدار بازگشتی در زمینه ای استفاده می شود که با توجه به آن متمایز است، بسته شدن داده شده را به مشتق مقدار بازگشتی اعمال می کند.

    اعلام

    @differentiable(wrt: self)
    func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
  • توالی (از طریق:_:) روش گسترش

    خروجی محاسبه شده با اعمال دنباله ای از لایه ها به خروجی لایه قبلی را برمی گرداند، با این تفاوت که ورودی لایه اول self است.

    اعلام

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

    مولفه های

    l1

    لایه اول.

    l2

    لایه دوم.

    ارزش بازگشتی

    خروجی لایه نهایی پس از اعمال متوالی.

  • خروجی محاسبه شده با اعمال دنباله ای از لایه ها به خروجی لایه قبلی را برمی گرداند، با این تفاوت که ورودی لایه اول self است.

    اعلام

    @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

    مولفه های

    l1

    لایه اول.

    l2

    لایه دوم.

    l3

    لایه سوم.

    ارزش بازگشتی

    خروجی لایه نهایی پس از اعمال متوالی.

  • خروجی محاسبه شده با اعمال دنباله ای از لایه ها به خروجی لایه قبلی را برمی گرداند، با این تفاوت که ورودی لایه اول self است.

    اعلام

    @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

    مولفه های

    l1

    لایه اول.

    l2

    لایه دوم.

    l3

    لایه سوم.

    l4

    لایه چهارم.

    ارزش بازگشتی

    خروجی لایه نهایی پس از اعمال متوالی.

  • خروجی محاسبه شده با اعمال دنباله ای از لایه ها به خروجی لایه قبلی را برمی گرداند، با این تفاوت که ورودی لایه اول self است.

    اعلام

    @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

    مولفه های

    l1

    لایه اول.

    l2

    لایه دوم.

    l3

    لایه سوم.

    l4

    لایه سوم.

    l5

    لایه پنجم.

    ارزش بازگشتی

    خروجی لایه نهایی پس از اعمال متوالی.

  • خروجی محاسبه شده با اعمال دنباله ای از لایه ها به خروجی لایه قبلی را برمی گرداند، با این تفاوت که ورودی لایه اول 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

    لایه دوم.

    l3

    لایه سوم.

    l4

    لایه سوم.

    l5

    لایه پنجم.

    l6

    لایه ششم.

    ارزش بازگشتی

    خروجی لایه نهایی پس از اعمال متوالی.