แตกต่างได้

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

    วิธีการขยาย

    เวกเตอร์สัมผัสเริ่มต้นใช้ zeroTangentVectorInitializer move(along: zeroTangentVector) ไม่ควรปรับเปลี่ยน self

    ประกาศ

    var zeroTangentVector: TangentVector { get }
  • ด้วยRecomputationInPullbacks(_:)

    วิธีการขยาย

    ประกาศ

    @differentiable(wrt: self)
    func withRecomputationInPullbacks<Result : Differentiable>(
      _ body: @escaping @differentiable (Self) -> Result
    ) -> Result
  • กับอนุพันธ์(_:)

    วิธีการขยาย

    นำไปใช้ปิดรับการมาของ 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

    ชั้นที่หก

    คืนมูลค่า

    ผลลัพธ์ของเลเยอร์สุดท้ายหลังจากแอปพลิเคชันตามลำดับ