public protocol Differentiable
Một kiểu biểu diễn về mặt toán học một đa tạp khả vi có các không gian tiếp tuyến là hữu hạn chiều.
Một loại đại diện cho đạo hàm của một giá trị khả vi.
Về mặt toán học, điều này tương đương với bó tiếp tuyến của đa tạp khả vi được biểu thị bằng loại khả vi.
Tuyên ngôn
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
self
di chuyển theo hướng đã cho. Trong hình học Riemannian, điều này tương đương với bản đồ hàm mũ, bản đồ nàyself
di chuyển trên bề mặt trắc địa dọc theo vectơ tiếp tuyến đã cho.Tuyên ngôn
mutating mutating func move(along direction: TangentVector)
Một bao đóng tạo ra một vectơ tiếp tuyến bằng 0, thu thập thông tin cần thiết tối thiểu từ
self
.move(along: zeroTangentVectorInitializer())
không nên sửa đổiself
.Trong một số trường hợp, vectơ tiếp tuyến bằng 0 của
self
bằngTangentVector.zero
. Trong các trường hợp khác, vectơ tiếp tuyến bằng 0 phụ thuộc vào thông tin trongself
, chẳng hạn như hình dạng của kiểu mảng n chiều. Đối với lập trình vi phân, sẽ hiệu quả hơn về mặt bộ nhớ khi xác định thuộc tínhzeroTangentVectorInitializer
tùy chỉnh trả về một bao đóng nắm bắt và chỉ sử dụng thông tin cần thiết để tạo vectơ tiếp tuyến bằng 0. Ví dụ: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) } } }
Tuyên ngôn
var zeroTangentVectorInitializer: () -> TangentVector { get }
Một vectơ tiếp tuyến được khởi tạo bằng
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
không nên sửa đổiself
.Tuyên ngôn
var zeroTangentVector: TangentVector { get }
Tuyên ngôn
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Áp dụng bao đóng đã cho cho đạo hàm của
self
.Trả về
self
giống như một hàm nhận dạng. Khi giá trị trả về được sử dụng trong ngữ cảnh mà nó được phân biệt theo, hãy áp dụng bao đóng đã cho cho đạo hàm của giá trị trả về.Tuyên ngôn
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Trả về kết quả được tính toán bằng cách áp dụng một chuỗi các lớp cho đầu ra của lớp trước đó, ngoại trừ đầu vào của lớp đầu tiên là
self
.Tuyên ngôn
Thông số
l1
Lớp đầu tiên.
l2
Lớp thứ hai.
Giá trị trả về
Đầu ra của lớp cuối cùng sau khi áp dụng tuần tự.
Trả về kết quả được tính toán bằng cách áp dụng một chuỗi các lớp cho đầu ra của lớp trước đó, ngoại trừ đầu vào của lớp đầu tiên là
self
.Tuyên ngôn
Thông số
l1
Lớp đầu tiên.
l2
Lớp thứ hai.
l3
Lớp thứ ba.
Giá trị trả về
Đầu ra của lớp cuối cùng sau khi áp dụng tuần tự.
Trả về kết quả được tính toán bằng cách áp dụng một chuỗi các lớp cho đầu ra của lớp trước đó, ngoại trừ đầu vào của lớp đầu tiên là
self
.Tuyên ngôn
Thông số
l1
Lớp đầu tiên.
l2
Lớp thứ hai.
l3
Lớp thứ ba.
l4
Lớp thứ tư.
Giá trị trả về
Đầu ra của lớp cuối cùng sau khi áp dụng tuần tự.
Trả về kết quả được tính toán bằng cách áp dụng một chuỗi các lớp cho đầu ra của lớp trước đó, ngoại trừ đầu vào của lớp đầu tiên là
self
.Tuyên ngôn
Thông số
l1
Lớp đầu tiên.
l2
Lớp thứ hai.
l3
Lớp thứ ba.
l4
Lớp thứ ba.
l5
Lớp thứ năm.
Giá trị trả về
Đầu ra của lớp cuối cùng sau khi áp dụng tuần tự.
Trả về kết quả được tính toán bằng cách áp dụng một chuỗi các lớp cho đầu ra của lớp trước đó, ngoại trừ đầu vào của lớp đầu tiên là
self
.Tuyên ngôn
@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
Thông số
l1
Lớp đầu tiên.
l2
Lớp thứ hai.
l3
Lớp thứ ba.
l4
Lớp thứ ba.
l5
Lớp thứ năm.
l6
Lớp thứ sáu.
Giá trị trả về
Đầu ra của lớp cuối cùng sau khi áp dụng tuần tự.