Дифференцируемый

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 }
  • нольTangentVector Метод расширения

    Касательный вектор, инициализированный с помощью zeroTangentVectorInitializer . move(along: zeroTangentVector) не должен изменять self .

    Декларация

    var zeroTangentVector: TangentVector { get }
  • withRecomputationInPullbacks(_:) Метод расширения

    Декларация

    @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

    Шестой слой.

    Возвращаемое значение

    Результат финального слоя после последовательного нанесения.