public protocol Differentiable
Typ, który matematycznie reprezentuje rozmaitość różniczkowa, której przestrzenie styczne są skończone.
Typ reprezentujący pochodne wartości różniczkowej.
Matematycznie jest to równoważne wiązce stycznej rozmaitości różniczkowej reprezentowanej przez typ różniczkowalny.
Deklaracja
associatedtype TangentVector: Differentiable & AdditiveArithmetic where TangentVector.TangentVector == TangentVector
Porusza
self
w zadanym kierunku. W geometrii Riemanna jest to odpowiednik mapy wykładniczej, która przesuwaself
po powierzchni geodezyjnej wzdłuż zadanego wektora stycznego.Deklaracja
mutating mutating func move(along direction: TangentVector)
Zamknięcie, które tworzy wektor styczny zerowy, przechwytując minimalne niezbędne informacje z
self
.move(along: zeroTangentVectorInitializer())
nie powinien modyfikowaćself
.W niektórych przypadkach zerowy wektor styczny
self
jest równyTangentVector.zero
. W innych przypadkach zerowy wektor styczny zależy od informacji zawartych wself
, takich jak kształt dla n-wymiarowego typu tablicy. W przypadku programowania różniczkowego bardziej wydajne jest zdefiniowanie niestandardowej właściwościzeroTangentVectorInitializer
, która zwraca zamknięcie przechwytujące i wykorzystujące tylko niezbędne informacje do utworzenia wektora stycznego zerowego. Na przykład: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) } } }
Deklaracja
var zeroTangentVectorInitializer: () -> TangentVector { get }
Wektor styczny zainicjowany przy użyciu
zeroTangentVectorInitializer
.move(along: zeroTangentVector)
nie powinien modyfikowaćself
.Deklaracja
var zeroTangentVector: TangentVector { get }
Deklaracja
@differentiable(wrt: self) func withRecomputationInPullbacks<Result : Differentiable>( _ body: @escaping @differentiable (Self) -> Result ) -> Result
Stosuje podane domknięcie do pochodnej
self
.Zwraca
self
jak funkcję tożsamości. Gdy wartość zwracana jest używana w kontekście, w którym jest zróżnicowana, stosuje dane domknięcie do pochodnej wartości zwracanej.Deklaracja
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
Wartość zwracana
Wynik ostatniej warstwy po nałożeniu sekwencyjnym.
Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
Wartość zwracana
Wynik ostatniej warstwy po nałożeniu sekwencyjnym.
Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Czwarta warstwa.
Wartość zwracana
Wynik ostatniej warstwy po nałożeniu sekwencyjnym.
Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest
self
.Deklaracja
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Trzecia warstwa.
l5
Piąta warstwa.
Wartość zwracana
Wynik ostatniej warstwy po nałożeniu sekwencyjnym.
Zwraca wynik obliczony poprzez zastosowanie sekwencji warstw do wyniku poprzedniej warstwy, z tą różnicą, że danymi wejściowymi pierwszej warstwy jest
self
.Deklaracja
@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
Parametry
l1
Pierwsza warstwa.
l2
Druga warstwa.
l3
Trzecia warstwa.
l4
Trzecia warstwa.
l5
Piąta warstwa.
l6
Szósta warstwa.
Wartość zwracana
Wynik ostatniej warstwy po nałożeniu sekwencyjnym.