public class Adam<Model: Differentiable>: Optimizer
where
Model.TangentVector: VectorProtocol & PointwiseMultiplicative
& ElementaryFunctions & KeyPathIterable,
Model.TangentVector.VectorSpaceScalar == Float
Adam optimize edici.
Adam optimizasyon algoritmasını uygular. Adam, gradyanların birinci ve ikinci dereceden momentlerinin tahminlerinden farklı parametreler için bireysel uyarlanabilir öğrenme oranlarını hesaplayan stokastik bir gradyan iniş yöntemidir.
Referans: “Adam: Stokastik Optimizasyon İçin Bir Yöntem” (Kingma ve Ba, 2014).
Örnekler:
- Basit bir takviyeli öğrenme aracısını eğitin:
...
// 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)
...
}
}
- Üretken bir rakip ağı (GAN) eğitin:
...
// 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)
}
}
beyan
public typealias Model = Model
Öğrenme oranı.
beyan
public var learningRate: Float
Gradyanların ilk anlarını hesaplamak için kullanılan bir katsayı.
beyan
public var beta1: Float
Gradyanların ikinci momentlerini hesaplamak için kullanılan bir katsayı.
beyan
public var beta2: Float
Sayısal kararlılığı artırmak için paydaya küçük bir skaler eklenir.
beyan
public var epsilon: Float
Öğrenme hızının azalması.
beyan
public var decay: Float
Geçerli adım.
beyan
public var step: Int
Ağırlıkların ilk anları.
beyan
public var firstMoments: Model.TangentVector
Ağırlıkların ikinci anları.
beyan
public var secondMoments: Model.TangentVector
beyan
public init( for model: __shared Model, learningRate: Float = 1e-3, beta1: Float = 0.9, beta2: Float = 0.999, epsilon: Float = 1e-8, decay: Float = 0 )
Parametreler
learningRate
Öğrenme oranı. Varsayılan değer
1e-3
.beta1
1. an tahminleri için üstel bozunma oranı. Varsayılan değer
0.9
.beta2
2. moment tahminleri için üstel bozunma oranı. Varsayılan değer
0.999
.epsilon
Sayısal kararlılığı artırmak için paydaya küçük bir skaler eklenir. Varsayılan değer
1e-8
.decay
Öğrenme hızının azalması. Varsayılan değer
0
.beyan
public required init(copying other: Adam, to device: Device)