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
의 접선 0 벡터가TangentVector.zero
와 동일합니다. 다른 경우에는 제로 탄젠트 벡터가 n차원 배열 유형의 모양과 같은self
의 정보에 따라 달라집니다. 미분 가능한 프로그래밍의 경우, 접선이 0인 벡터를 생성하는 데 필요한 정보만 캡처하고 사용하는 클로저를 반환하는 사용자 지정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
두 번째 레이어.
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
여섯 번째 레이어.
반환 값
순차적 적용 후 최종 레이어의 출력입니다.