आसान 0 हल किए गए 0% स्वीकृति

Gradient Descent with Momentum

Apply momentum updates, which keep part of the previous step so training speeds up along consistent directions.

आप क्या सीखेंगे

  • Keep a velocity for each weight
  • Speed up training along steady directions
  • Compare momentum with plain gradient descent

समस्या

अनुवाद दिखाएँ

Momentum makes gradient descent behave like a ball rolling downhill: each step keeps part of the previous one.

Start with a velocity of 0 for every weight. For each step t, with gradient vector g (one value per weight):

  1. v ← beta × v + g
  2. w ← w - learning_rate × v

Implement momentum_steps(gradients, weights, learning_rate, beta), applying one update per row of gradients, in order.

Input

gradients: One row per step; each row has one gradient per weight.

weights: The starting weights.

learning_rate: The step size.

beta: The momentum coefficient (0 means plain gradient descent).

Output

Return the weights after all steps.

सीमाएँ

0 ≤ steps ≤ 1,000, 1 ≤ weights ≤ 100

0 < learning_rate ≤ 1, 0 ≤ beta < 1

-100 ≤ each value ≤ 100

उदाहरण

उदाहरण 1
इनपुट:
beta = 0.9
weights = [0.0]
gradients = [
    [1.0],
    [1.0],
    [1.0]
]
learning_rate = 0.1

अपेक्षित आउटपुट:
expected = [-0.561]
इनपुट:
double beta = 0.9;
std::vector<double> weights = {0.0};
std::vector<std::vector<double>> gradients = {
    {1.0},
    {1.0},
    {1.0}
};
double learning_rate = 0.1;

अपेक्षित आउटपुट:
std::vector<double> expected = {-0.561};
इनपुट:
double beta = 0.9;
double[] weights = new double[] {0.0};
double[][] gradients = new double[][] {
    new double[] {1.0},
    new double[] {1.0},
    new double[] {1.0}
};
double learning_rate = 0.1;

अपेक्षित आउटपुट:
double[] expected = new double[] {-0.561};

व्याख्या

The velocity grows 1 → 1.9 → 2.71 because the gradient keeps pointing the same way, so the steps are 0.1, 0.19 and 0.271: w = -0.561.

उदाहरण 2
इनपुट:
beta = 0.0
weights = [1.0, 1.0]
gradients = [
    [2.0, -4.0]
]
learning_rate = 0.5

अपेक्षित आउटपुट:
expected = [0.0, 3.0]
इनपुट:
double beta = 0.0;
std::vector<double> weights = {1.0, 1.0};
std::vector<std::vector<double>> gradients = {
    {2.0, -4.0}
};
double learning_rate = 0.5;

अपेक्षित आउटपुट:
std::vector<double> expected = {0.0, 3.0};
इनपुट:
double beta = 0.0;
double[] weights = new double[] {1.0, 1.0};
double[][] gradients = new double[][] {
    new double[] {2.0, -4.0}
};
double learning_rate = 0.5;

अपेक्षित आउटपुट:
double[] expected = new double[] {0.0, 3.0};

व्याख्या

With beta = 0 this is plain gradient descent: w = [1 - 0.5 × 2, 1 - 0.5 × (-4)] = [0, 3].

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

Keep a velocity vector that accumulates part of the previous step and the current gradient.

संकेत 2

Update the velocity before adjusting the weights, and reuse the same velocity across all steps.

संकेत 3

If beta is zero, the method should reduce to ordinary gradient descent, so check that behavior carefully.

अपेक्षित जटिलता

O(s × w) time, O(w) extra space

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।