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
Применяет данное замыкание к производной
self
.Возвращает
self
как функцию идентификации. Когда возвращаемое значение используется в контексте, где оно дифференцируется по отношению к, применяет данное замыкание к производной возвращаемого значения.Декларация
@differentiable(wrt: self) func withDerivative(_ body: @escaping (inout TangentVector) -> Void) -> Self
Возвращает выходные данные, вычисленные путем применения последовательности слоев к выходным данным предыдущего слоя, за исключением того, что входные данные первого слоя —
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
Возвращаемое значение
Результат финального слоя после последовательного нанесения.
Возвращает выходные данные, вычисленные путем применения последовательности слоев к выходным данным предыдущего слоя, за исключением того, что входные данные первого слоя —
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
Возвращаемое значение
Результат финального слоя после последовательного нанесения.
Возвращает выходные данные, вычисленные путем применения последовательности слоев к выходным данным предыдущего слоя, за исключением того, что входные данные первого слоя —
self
.Декларация
Параметры
l1
Первый слой.
l2
Второй слой.
l3
Третий слой.
l4
Четвертый слой.
Возвращаемое значение
Результат финального слоя после последовательного нанесения.
Возвращает выходные данные, вычисленные путем применения последовательности слоев к выходным данным предыдущего слоя, за исключением того, что входные данные первого слоя —
self
.Декларация
Параметры
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
Шестой слой.
Возвращаемое значение
Результат финального слоя после последовательного нанесения.