public class Adam<Model: Differentiable>: Optimizer
where
Model.TangentVector: VectorProtocol & PointwiseMultiplicative
& ElementaryFunctions & KeyPathIterable,
Model.TangentVector.VectorSpaceScalar == Float
অ্যাডাম অপ্টিমাইজার।
অ্যাডাম অপ্টিমাইজেশান অ্যালগরিদম প্রয়োগ করে। অ্যাডাম হল একটি স্টোকাস্টিক গ্রেডিয়েন্ট ডিসেন্ট পদ্ধতি যা গ্রেডিয়েন্টের প্রথম এবং দ্বিতীয়-ক্রম মুহূর্তগুলির অনুমান থেকে বিভিন্ন পরামিতির জন্য পৃথক অভিযোজিত শিক্ষার হার গণনা করে।
রেফারেন্স: "আদম: স্টোকাস্টিক অপ্টিমাইজেশনের জন্য একটি পদ্ধতি" (কিংমা এবং বা, 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 typealias Model = Model
শেখার হার।
ঘোষণা
public var learningRate: Float
গ্রেডিয়েন্টের প্রথম মুহূর্ত গণনা করতে ব্যবহৃত একটি সহগ।
ঘোষণা
public var beta1: Float
গ্রেডিয়েন্টের দ্বিতীয় মুহূর্ত গণনা করতে ব্যবহৃত একটি সহগ।
ঘোষণা
public var beta2: Float
সাংখ্যিক স্থিতিশীলতা উন্নত করতে হরটিতে একটি ছোট স্কেলার যোগ করা হয়েছে।
ঘোষণা
public var epsilon: Float
শেখার হার ক্ষয়।
ঘোষণা
public var decay: Float
বর্তমান পদক্ষেপ।
ঘোষণা
public var step: Int
ওজন প্রথম মুহূর্ত.
ঘোষণা
public var firstMoments: Model.TangentVector
ওজন দ্বিতীয় মুহূর্ত.
ঘোষণা
public var secondMoments: Model.TangentVector
ঘোষণা
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 )
পরামিতি
learningRate
শেখার হার। ডিফল্ট মান হল
1e-3
।beta1
১ম মুহূর্ত অনুমানের জন্য সূচকীয় ক্ষয় হার। ডিফল্ট মান হল
0.9
।beta2
২য় মুহূর্ত অনুমানের জন্য সূচকীয় ক্ষয় হার। ডিফল্ট মান হল
0.999
।epsilon
সাংখ্যিক স্থিতিশীলতা উন্নত করতে হরটিতে একটি ছোট স্কেলার যোগ করা হয়েছে। ডিফল্ট মান হল
1e-8
।decay
শেখার হার ক্ষয়। ডিফল্ট মান হল
0
।ঘোষণা
public required init(copying other: Adam, to device: Device)