다음 클래스는 전역적으로 사용할 수 있습니다.
텐서에 대한 변경 가능하고 공유 가능하며 소유한 참조입니다.
선언
public final class Parameter<Scalar> where Scalar : TensorFlowScalar
extension Parameter: CopyableToDevice
C 포인터를 TensorHandle로 래핑하는 클래스입니다. 이 클래스는 TensorHandle을 소유하고 이를 파기하는 일을 담당합니다.
선언
public class TFETensorHandle : _AnyTensorHandle
extension TFETensorHandle: Equatable
RMSProp 최적화 프로그램.
RMSProp 최적화 알고리즘을 구현합니다. RMSProp은 경사를 최근 크기의 실행 평균으로 나누는 확률적 경사하강법의 한 형태입니다. RMSProp은 각 가중치에 대한 제곱 기울기의 이동 평균을 유지합니다.
참고자료:
- "강의 6.5 - rmsprop: 기울기를 최근 크기의 이동 평균으로 나눕니다" (Tieleman 및 Hinton, 2012)
- "반복 신경망을 사용하여 시퀀스 생성" (Graves, 2013)
선언
public class RMSProp<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
AdaGrad 최적화 프로그램.
AdaGrad(적응형 그라데이션) 최적화 알고리즘을 구현합니다. AdaGrad에는 훈련 중에 매개변수가 업데이트되는 빈도에 따라 조정되는 매개변수별 학습 속도가 있습니다. 더 많은 업데이트를 받는 매개변수는 학습률이 더 낮습니다.
AdaGrad는 모든 모델 매개변수의 학습률을 그라디언트 노름의 누계 제곱합의 제곱근에 반비례하여 조정함으로써 개별적으로 조정합니다.
참고 자료: "온라인 학습 및 확률론적 최적화를 위한 적응형 하위 그라데이션 방법" (Duchi et al, 2011)
선언
public class AdaGrad<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
AdaDelta 최적화 프로그램.
AdaDelta 최적화 알고리즘을 구현합니다. AdaDelta는 1차 정보를 기반으로 하는 확률적 경사하강법입니다. 과거의 모든 그라디언트를 누적하는 대신 그라디언트 업데이트의 이동 창을 기반으로 학습 속도를 조정합니다. 따라서 AdaDelta는 많은 업데이트가 수행된 경우에도 계속 학습합니다. 최적화 문제 공간의 변화하는 역학에 더 빠르게 적응합니다.
참고: "ADADELTA: 적응형 학습률 방법" (Zeiler, 2012)
선언
public class AdaDelta<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
아담 옵티마이저.
Adam 최적화 알고리즘을 구현합니다. Adam은 경사의 1차 및 2차 적률 추정치로부터 다양한 매개변수에 대한 개별 적응형 학습률을 계산하는 확률적 경사하강법 방법입니다.
참조: "Adam: 확률론적 최적화를 위한 방법" (Kingma 및 Ba, 2014).
예:
- 간단한 강화 학습 에이전트를 훈련시킵니다.
... // Instantiate an agent's policy - approximated by the neural network (`net`) after defining it in advance. var net = Net(observationSize: Int(observationSize), hiddenSize: hiddenSize, actionCount: actionCount) // Define the Adam optimizer for the network with a learning rate set to 0.01. let optimizer = Adam(for: net, learningRate: 0.01) ... // Begin training the agent (over a certain number of episodes). while true { ... // Implementing the gradient descent with the Adam optimizer: // Define the gradients (use withLearningPhase to call a closure under a learning phase). let gradients = withLearningPhase(.training) { TensorFlow.gradient(at: net) { net -> Tensor<Float> in // Return a softmax (loss) function return loss = softmaxCrossEntropy(logits: net(input), probabilities: target) } } // Update the differentiable variables of the network (`net`) along the gradients with the Adam optimizer. optimizer.update(&net, along: gradients) ... } }
- 생성적 적대 신경망(GAN) 훈련:
... // Instantiate the generator and the discriminator networks after defining them. var generator = Generator() var discriminator = Discriminator() // Define the Adam optimizers for each network with a learning rate set to 2e-4 and beta1 - to 0.5. let adamOptimizerG = Adam(for: generator, learningRate: 2e-4, beta1: 0.5) let adamOptimizerD = Adam(for: discriminator, learningRate: 2e-4, beta1: 0.5) ... Start the training loop over a certain number of epochs (`epochCount`). for epoch in 1...epochCount { // Start the training phase. ... for batch in trainingShuffled.batched(batchSize) { // Implementing the gradient descent with the Adam optimizer: // 1) Update the generator. ... let 𝛁generator = TensorFlow.gradient(at: generator) { generator -> Tensor<Float> in ... return loss } // Update the differentiable variables of the generator along the gradients (`𝛁generator`) // with the Adam optimizer. adamOptimizerG.update(&generator, along: 𝛁generator) // 2) Update the discriminator. ... let 𝛁discriminator = TensorFlow.gradient(at: discriminator) { discriminator -> Tensor<Float> in ... return loss } // Update the differentiable variables of the discriminator along the gradients (`𝛁discriminator`) // with the Adam optimizer. adamOptimizerD.update(&discriminator, along: 𝛁discriminator) } }
선언
public class Adam<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
선언
public class AdaMax<Model: Differentiable & KeyPathIterable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
선언
public class AMSGrad<Model: Differentiable & KeyPathIterable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
RAdam 최적화 프로그램.
적응형 학습률 차이를 수정하기 위한 용어를 도입한 Adam의 변형인 Rectified Adam입니다.
선언
public class RAdam<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & PointwiseMultiplicative & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
샘플 크기가 일정하지 않을 때 DNN을 교육하는 데 적합한 샘플 배치 컬렉션의 무한 시퀀스입니다.
각 시대의 배치:
- 모두 정확히 동일한 수의 샘플을 가지고 있습니다.
- 비슷한 크기의 표본으로 구성됩니다.
- 최대 샘플 크기가 해당 에포크에 사용된 모든 샘플에 대한 최대 크기인 배치로 시작합니다.
선언
public final class NonuniformTrainingEpochs< Samples: Collection, Entropy: RandomNumberGenerator >: Sequence, IteratorProtocol
여러 가지 가능한 최적화를 표현할 수 있어야 하는 일반 최적화 프로그램입니다. 최적화 프로그램은 ParameterGroup에서 ParameterGroupOptimizer로의 매핑으로 구성됩니다. 이 최적화 프로그램에는 교차 복제본 합계에서 작동하는 요소 수도 포함됩니다. 이는 그라디언트에 대한 여러 번의 비효율적인 반복을 방지하기 위한 효율성입니다.
선언
public class GeneralOptimizer<Model: EuclideanDifferentiable>: Optimizer where Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
확률적 경사하강법(SGD) 최적화 프로그램입니다.
운동량, 학습률 감소 및 Nesterov 운동량을 지원하는 확률적 경사하강법 알고리즘을 구현합니다. 모멘텀 및 네스테로프 모멘텀(일명 네스테로프 가속 경사 방법)은 경사하강법의 훈련 속도와 수렴 속도를 향상시킬 수 있는 1차 최적화 방법입니다.
참고자료:
- “확률적 근사 방법” (Robbins and Monro, 1951)
- “로빈스와 먼로의 확률적 근사 방법에 대하여” (Wolfowitz, 1952)
- “회귀 함수의 최대값에 대한 확률론적 추정” (Kiefer and Wolfowitz, 1952)
- “반복법의 수렴 속도를 높이는 몇 가지 방법” (Polyak, 1964)
- "수렴 속도에 따른 제약 없는 볼록 최소화 문제에 대한 방법" (Nesterov, 1983)
선언
public class SGD<Model: Differentiable>: Optimizer where Model.TangentVector: VectorProtocol & ElementaryFunctions & KeyPathIterable, Model.TangentVector.VectorSpaceScalar == Float
샘플이 균일할 때 DNN을 교육하는 데 적합한 배치 샘플 컬렉션의 무한 시퀀스입니다.
각 시대의 배치는 모두 정확히 동일한 크기를 갖습니다.
선언
public final class TrainingEpochs< Samples: Collection, Entropy: RandomNumberGenerator >: Sequence, IteratorProtocol
선언
public class EpochPipelineQueue