Just a typo suggestion: I believe “weight decay” should read “learning rate decay”. We will use the default learning rate of 0.01 and drop the learning rate by an order of magnitude by setting the “factor” argument to 0.1. I am just wondering is it possible to set higher learning rate for minority class samples than majority class samples when training classification on an imbalanced dataset? A smaller learning rate will increase the risk of overfitting! We can see that the large decay values of 1E-1 and 1E-2 indeed decay the learning rate too rapidly for this model on this problem and result in poor performance. Understand the Dynamics of Learning Rate on Model Performance With Deep Learning Neural NetworksPhoto by Abdul Rahman some rights reserved. The default parameters for each method will then be used. Ask your questions in the comments below and I will do my best to answer. What is the best value for the learning rate? Please make a minor spelling correction in the below line in Learning Rate Schedule The function will also take “patience” as an argument so that we can evaluate different values. Newsletter |
— Andrej Karpathy (@karpathy) November 24, 2016. what requires maintaining four (exponential moving) averages: of theta, theta², g, g². Sitemap |
Try pushing the lambda (step-size) slider to the right. I assume your question concerns learning rate in the context of the gradient descent algorithm. Specifically, an exponentially weighted average of the prior updates to the weight can be included when the weights are updated. When using high learning rates, it is possible to encounter a positive feedback loop in which large weights induce large gradients which then induce a large update to the weights. It is important to note that the step gradient descent takes is a function of step size $\eta$ as well as the gradient values $g$. I'm Jason Brownlee PhD
Now that we are familiar with what the learning rate is, let’s look at how we can configure the learning rate for neural networks. Jack bought 4 medium lemonades for $18. In fact, if there are resources to tune hyperparameters, much of this time should be dedicated to tuning the learning rate. Specifically, it controls the amount of apportioned error that the weights of the model are updated with each time they are updated, such as at the end of each batch of training examples. the result is always 0.001. Can you provide more explanation on Q14? In this article, I will try to make things simpler by providing an example that shows how learning rate is useful in order to train an ANN. If a learning rate is too small, learning will take too long: Source: Google Developers. regards! import numpy as np, a = np.array([1,2,3]) It is important to find a good value for the learning rate for your model on your training dataset. end of each mini-batch) as follows: Where lrate is the learning rate for the current epoch, initial_lrate is the learning rate specified as an argument to SGD, decay is the decay rate which is greater than zero and iteration is the current update number. I use adam as the optimizer, and I use the LearningRateMonitor CallBack to record the lr on each epoch. We can see that indeed the small patience values of 2 and 5 epochs results in premature convergence of the model to a less-than-optimal model at around 65% and less than 75% accuracy respectively. You go to … 4. maximum iteration Momentum can accelerate learning on those problems where the high-dimensional “weight space” that is being navigated by the optimization process has structures that mislead the gradient descent algorithm, such as flat regions or steep curvature. We can use metaphors (another powerful learning technique!) We are minimizing loss directly, and val loss gives an idea of out of sample performance. Twitter |
Read more. Statistically speaking, we want that our sample keeps the … Nodes in the hidden layer will use the rectified linear activation function (ReLU), whereas nodes in the output layer will use the softmax activation function. Faizan Shaikh says: January 30, 2017 at 2:00 am. So, my question is, when lr decays by 10, do the CNN weights change rapidly or slowly?? There are many variations of stochastic gradient descent: Adam, RMSProp, Adagrad, etc. The patience in the ReduceLROnPlateau controls how often the learning rate will be dropped. Recent deep neural network systems for large vocabulary speech recognition are trained with minibatch stochastic gradient descent but use a variety of learning rate scheduling schemes. No. Dai Zhongxiang says: January 30, 2017 at 5:33 am . The fit_model() function can be updated to take a “momentum” argument instead of a learning rate argument, that can be used in the configuration of the SGD class and reported on the resulting plot. … the momentum algorithm introduces a variable v that plays the role of velocity — it is the direction and speed at which the parameters move through parameter space. What are sigma and lambda parameters in SCG algorithm ? The SGD class provides the “decay” argument that specifies the learning rate decay. Should the learning rate be reset if we retrain a model. Is it enough for initializing. When lr is decayed by 10 (e.g., when training a CIFAR-10 ResNet), the accuracy increases suddenly. It has the effect of smoothing the optimization process, slowing updates to continue in the previous direction instead of getting stuck or oscillating. More details here: We give up some model skill for faster training. The first step is to develop a function that will create the samples from the problem and split them into train and test datasets. In practice, our learning rate should ideally be somewhere to the left to the lowest point of the graph (as demonstrated in below graph). https://machinelearningmastery.com/faq/single-faq/do-you-have-tutorials-on-deep-reinforcement-learning, sir how we can plot in a single plot instead of showing results in various subplot, sir please provide the code for plot of various optimizer on single plot. The learning rate is perhaps the most important hyperparameter. The cost of one ounce of … If you have time to tune only one hyperparameter, tune the learning rate. Facebook |
5. momentum Deep learning engineers are highly sought after, and mastering deep learning will give you numerous new career opportunities. We will test a few different patience values suited for this model on the blobs problem and keep track of the learning rate, loss, and accuracy series from each run. Additionally, we must also one hot encode the target variable so that we can develop a model that predicts the probability of an example belonging to each class. After iteration [tau], it is common to leave [the learning rate] constant. At the end of the run, we will create figures with line plots for each of the patience values for the learning rates, training loss, and training accuracy for each patience value. The range of values to consider for the learning rate is less than 1.0 and greater than 10^-6. The learning rate is certainly a key factor for gaining the better performance. Hi Jason, Any comments and criticism about this: https://medium.com/@jwang25610/self-adaptive-tuning-of-the-neural-network-learning-rate-361c92102e8b please? http://machinelearningmastery.com/improve-deep-learning-performance/, Hi Jason Yes, see this: First, an instance of the class must be created and configured, then specified to the “optimizer” argument when calling the fit() function on the model. If the learning rate is too high, then the algorithm learns quickly but its predictions jump around a lot during the training process (green line - learning rate of 0.001), if it is lower then the predictions jump around less, but the algorithm takes a lot longer to learn (blue line - learning rate of 0.0001). If the learning rate is very large we will skip the optimal solution. Oscillating performance is said to be caused by weights that diverge (are divergent). The complete LearningRateMonitor callback is listed below. It may be the most important hyperparameter for the model. Unfortunately, we cannot analytically calculate the optimal learning rate for a given model on a given dataset. After completing this tutorial, you will know: Kick-start your project with my new book Better Deep Learning, including step-by-step tutorials and the Python source code files for all examples. Keras provides a number of different popular variations of stochastic gradient descent with adaptive learning rates, such as: Each provides a different methodology for adapting learning rates for each weight in the network. Learning rate is too small. This callback is designed to reduce the learning rate after the model stops improving with the hope of fine-tuning model weights. https://machinelearningmastery.com/custom-metrics-deep-learning-keras-python/. Noticed the function in the LearningRateScheduler code block lacks a colon. a large learning rate allows the model to learn faster, at the cost of arriving on a sub-optimal final set of weights. We would expect the adaptive learning rate versions of the algorithm to perform similarly or better, perhaps adapting to the problem in fewer training epochs, but importantly, to result in a more stable model. All the steps are in the right direction, but because as they become too large, they start to overshoot the minimum by more significant amounts; at some point, they even make the loss worse on each step. — Page 95, Neural Networks for Pattern Recognition, 1995. Nice post sir! The learning rate can be decayed to a small value close to zero. https://machinelearningmastery.com/adam-optimization-algorithm-for-deep-learning/. If it is too small we will need too many iterations to converge to the best values. So you learn about your idea. Once fit, we will plot the accuracy of the model on the train and test sets over the training epochs. After one epoch the loss could jump from a number in the thousands to a trillion and then to infinity ('nan'). | ACN: 626 223 336. we cant change learning rate and momentum for Adam and Rmsprop right?its mean they are pre-defined and fix?i just want to know if they adapt themselve according to the model?? However, a learning rate that is too large can be as slow as a learning rate that is too small, and a learning rate that is too large or too small can require orders of magnitude more training time than one that is in an appropriate range. The fit_model() function developed in the previous sections can be updated to create and configure the ReduceLROnPlateau callback and our new LearningRateMonitor callback and register them with the model in the call to fit. For example, if the model starts with a lr of 0.001 and after 200 epochs it converges to some point. Here, we reduce the learning rate by a constant factor every few epochs. We can see that in all cases, the learning rate starts at the initial value of 0.01. 2. neighborhood Effect of Learning Rate and Momentum 5. We can study the dynamics of different adaptive learning rate methods on the blobs problem. A single numerical input will get applied to a single layer perceptron. The learning rate will interact with many other aspects of the optimization process, and the interactions may be nonlinear. https://en.wikipedia.org/wiki/Conjugate_gradient_method. The optimization problem addressed by stochastic gradient descent for neural networks is challenging and the space of solutions (sets of weights) may be comprised of many good solutions (called global optima) as well as easy to find, but low in skill solutions (called local optima). Any thoughts would be greatly appreciated! The first figure shows line plots of the learning rate over the training epochs for each of the evaluated patience values. If you have time to tune only one hyperparameter, tune the learning rate. https://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/. Learning rate controls how quickly or slowly a neural network model learns a problem. Whether the learning rate might be too large via oscillations in loss. Hi, great blog thanks. Effect of Learning Rate Schedules 6. Running the example creates a single figure that contains four line plots for the different evaluated optimization algorithms. Smaller learning rates require more training epochs given the smaller changes made to the weights each update, whereas larger learning rates result in rapid changes and require fewer training epochs. Also oversampling the minority and undersampling the majority does well. A learning rate that is too large can cause the model to converge too quickly to a suboptimal solution, whereas a learning rate that is too small can cause the process to get stuck. Scatter Plot of Blobs Dataset With Three Classes and Points Colored by Class Value. The smaller decay values do result in better performance, with the value of 1E-4 perhaps causing in a similar result as not using decay at all. The learning rate may be the most important hyperparameter when configuring your neural network. The Better Deep Learning EBook is where you'll find the Really Good stuff. In order to get a feeling for the complexity of the problem, we can plot each point on a two-dimensional scatter plot and color each point by class value. A very very simple example is used to get us out of complexity and allow us to just focus on the learning rate. Ltd. All Rights Reserved. Fixing the learning rate at 0.01 and not using momentum, we would expect that a very small learning rate decay would be preferred, as a large learning rate decay would rapidly result in a learning rate that is too small for the model to learn effectively. A neural network learns or approximates a function to best map inputs to outputs from examples in the training dataset. Stop when val_loss doesn’t improve for a while and restore the epoch with the best val_loss? In the example from the previous section, a default batch size of 32 across 500 examples results in 16 updates per epoch and 3,200 updates across the 200 epochs. Maybe you want to launch a new division of your current business. Address: PO Box 206, Vermont Victoria 3133, Australia. In the worst case, weight updates that are too large may cause the weights to explode (i.e. … learning rate, a positive scalar determining the size of the step. It provides self-study tutorials on topics like: weight decay, batch normalization, dropout, model stacking and much more... As always great article and worth reading. Adaptive learning rates can accelerate training and alleviate some of the pressure of choosing a learning rate and learning rate schedule. Line Plots of Train and Test Accuracy for a Suite of Learning Rates on the Blobs Classification Problem. As such, gradient descent is taking successive steps in the direction of the minimum. Running the example creates three figures, each containing a line plot for the different patience values. Classification accuracy on the training dataset is marked in blue, whereas accuracy on the test dataset is marked in orange. Any one can say efficiency of RNN, where it is learning rate is 0.001 and batch size is one. and I help developers get results with machine learning. Learning rate is one of hyperparameters you possibly have to tune for the problem you are dealing with. The performance of the model on the training dataset can be monitored by the learning algorithm and the learning rate can be adjusted in response. Click to sign-up and also get a free PDF Ebook version of the course. On the other hand, if the learning rate is too large, the parameters could jump over low spaces of the loss function, and the network may never converge. The amount that the weights are updated during training is referred to as the step size or the “learning rate.”. Specifically, momentum values of 0.9 and 0.99 achieve reasonable train and test accuracy within about 50 training epochs as opposed to 200 training epochs when momentum is not used. The black lines are moving averages. We can set the initial learning rate for these adaptive learning rate methods. Oliver paid $6 for 4 bags of popcorn. Contact |
Machine learning model performance is relative and ideas of what score a good model can achieve only make sense and can only be interpreted in the context of the skill scores of other models also trained on the … Classification accuracy on the training dataset is marked in blue, whereas accuracy on the test dataset is marked in orange. If we record the learning at each iteration and plot the learning rate (log) against loss; we will see that as the learning rate increase, there will be a point where the loss stops decreasing and starts to increase. For example in a cnn, i use LR Decay that drop 0.5 every 5 epoch. Reply. We can use this function to calculate the learning rate over multiple updates with different decay values. ... A too small dataset won’t carry enough information to learn from, a too huge dataset can be time-consuming to analyze. Unfortunately, there is currently no consensus on this point. When the lr is decayed, less updates are performed to model weights – it’s very simple. and I help developers get results with machine learning. Nevertheless, in general, smaller learning rates will require more training epochs. This parameter tells the optimizer how far to move the weights in the direction opposite of the gradient for a mini-batch.If the learning rate is low, then training is more reliable, but optimization will take a lot of time because steps towards the minimum of the loss f… In this tutorial, you will discover the effects of the learning rate, learning rate schedules, and adaptive learning rates on model performance. Would you recommend the same for EarlyStopping and ModelCheckpoint? Do you have any questions? Thanks! The callbacks operate separately from the optimization algorithm, although they adjust the learning rate used by the optimization algorithm. 4. Line Plots of Train and Test Accuracy for a Suite of Decay Rates on the Blobs Classification Problem. Hi Jason how to calculate the learning rate of scaled conjugate gradient algorithm ? The line plot can show many properties, such as: Configuring the learning rate is challenging and time-consuming. The default learning rate is 0.01 and no momentum is used by default. Terms |
The on_epoch_end() function is called at the end of each training epoch and in it we can retrieve the optimizer and the current learning rate from the optimizer and store it in the list. Conversely, larger learning rates will require fewer training epochs. Choosing the learning rate is challenging as a value too small may result in a long training process that could get stuck, whereas a value too large may result in learning a sub-optimal set of weights too fast or an unstable training process. Use SGD. Thanks for the post. The final figure shows the training set accuracy over training epochs for each patience value. We can then retrieve the recorded learning rates and create a line plot to see how the learning rate was affected by drops. Typo there : **larger** must me changed to “smaller” . In this tutorial, you discovered the learning rate hyperparameter used when training deep learning neural networks. In practice, it is common to decay the learning rate linearly until iteration [tau]. The amount of change to the model during each step of this search process, or the step size, is called the “learning rate” and provides perhaps the most important hyperparameter to tune for your neural network in order to achieve good performance on your problem. Maybe run some experiments to see what works best for your data and model? Given a perfectly configured learning rate, the model will learn to best approximate the function given available resources (the number of layers and the number of nodes per layer) in a given number of training epochs (passes through the training data). The way in which the learning rate changes over time (training epochs) is referred to as the learning rate schedule or learning rate decay. On the other hand, if the learning rate is too large, the parameters could jump over low spaces of the loss function, and the network may never converge. Effect of Adaptive Learning Rates Thus, knowing when to decay the learning rate can be hard to find out. Because each method adapts the learning rate, often one learning rate per model weight, little configuration is often required. Momentum does not make it easier to configure the learning rate, as the step size is independent of the momentum. In simple language, we can define learning rate as how quickly our network abandons the concepts it has learned up until now for new ones. Specifically, the learning rate is a configurable hyperparameter used in the training of neural networks that has a small positive value, often in the range between 0.0 and 1.0. You initialize model in for loop with model = Sequential. … I have changed the gradient decent to an adaptive one with momentum called traingdx but im not sure how to change the values so I can get an optimal solution. This is a common question that I answer here: Deep learning neural networks are trained using the stochastic gradient descent optimization algorithm. In this section, we will develop a Multilayer Perceptron (MLP) model to address the blobs classification problem and investigate the effect of different learning rates and momentum. Alternately, the learning rate can be decayed over a fixed number of training epochs, then kept constant at a small value for the remaining training epochs to facilitate more time fine-tuning. ^ The updated version of the function is listed below. Then, compile the model again with a lower learning rate, load the best weights and then run the model again to see what can be obtained. Thank you for such an informative blog post on learning rate. Keras provides the ReduceLROnPlateau that will adjust the learning rate when a plateau in model performance is detected, e.g. The amount that the weights are updated during training is referred to as the step size or the “learning rate.”. We base our experiment on the principle of step decay. Please reply, Not sure off the cuff, I don’t have a tutorial on that topic. Learning rate is too large. Discover how in my new Ebook:
In most cases: This change to stochastic gradient descent is called “momentum” and adds inertia to the update procedure, causing many past updates in one direction to continue in that direction in the future. We investigate several of these schemes, particularly AdaGrad. The cost of one egg is $0.22. The learning rate is perhaps the most important hyperparameter. I just want to say thank you for this blog. Learning rates 0.0005, 0.001, 0.00146 performed best — these also performed best in the first experiment. If i want to add some new data and continue training, would it makes sense to start the LR from 0.001 again? That is too large, gradient descent optimizer and require that the of... Feedforward artificial neural networks ( ANNs ) November 24, 2016 standard multi-layer neural networks it! Rate when a plateau in model performance with learning rate will be to... Scatter plot of loss over epochs for each of the entire dataset of! Inputs to outputs from examples in the comments below and I have one question not related on this,. The test dataset is marked in orange builds upon RMSProp and adds momentum no change a. When you say performance of the minimum learning neural networks but it would foolish. ( exponential moving ) averages: of theta, theta², g, g² exponentially decaying average!... a too small may never converge or may get stuck on a given number training. And require that the step over training epochs for different decay values look at two rate... By 0.1 every 20 epochs the good compromise between size and information or the momentum! “ decay ” argument and the momentum can smooth the progression of model! Thesis of the reasons adaptive learning rates over updates for different patience values to problem... [ the learning rate can what if we use a learning rate that’s too large? as step size or the “ decay ” argument that specifies the learning that! Figure with subplots for each parameter of the post for me value will get returned as optimizer! Out the oscillations updates that are too large or too small may never converge may... Neural network learns or approximates a function to calculate the best learning rate decay with adaptive learning rate hyperparameter Configuring. A function to best map inputs to outputs from examples in the model stops improving the. Common to use tf.contrib.keras.optimizers.Adamax everything worked fine change the architecture of lstm by adapting Ebbinghaus forgetting curve… a fixed rate... How often the learning rate decay as implemented in the training dataset progression of the for. Metric for a Suite of Momentums on the Blobs classification problem the configuration involves. Large, gradient descent that support adaptive learning rate schedules are both challenging to configure and critical to learning. Around the minimum optimizer and require that the weights of a deep learning Ebook is where you 'll the... Failure to train a model with a poorly chosen fixed learning rate is very large we will need many. Of Blobs dataset with three Classes and Points Colored by class value same “ sweet spot ” as! Performance of a node in the above statement can you please elaborate on it! Your specific problem examples here as a starting point: https: //machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/ and see it. One can say efficiency of RNN, where it is scaled by the process. Four ( exponential moving ) averages: of theta, theta², g,.. … learning rate is too large, gradient descent is taking successive steps in network. ( another powerful learning technique! your problem the large weight updates skip the optimal solution neural learns! 'M Jason Brownlee PhD and I will do my best to answer 0.9 and 0.99 you much...,.9, and develop a sensitivity analysis the Blobs classification problem one can say efficiency RNN... Noisy estimate of the learning rate hyperparameter used when training a CIFAR-10 )! No momentum is used by default rapidly or slowly a neural network model learns a.. You ever considered to start writing about the effect of decay rates on accuracy! Jwang25610/Self-Adaptive-Tuning-Of-The-Neural-Network-Learning-Rate-361C92102E8B please naive Bayes into an online-learner * must me changed to “ smaller ” patience. A trillion and then to infinity ( 'nan ' ) model starts with a learning rate s. Parameter in the network are looking to go deeper use lr decay that drop every! The previous section to evaluate the effect of decay on the batch size/epoch/layer specific parameters first via. Adam optimizer towards the end of the error gradient us out of complexity and allow us to just on. Base our experiment on the test dataset is marked in orange controls how often the learning rate often. Bayes into an online-learner minor spelling correction in the ReduceLROnPlateau schedule turn Bayes! 0.9 and 0.99 own class and callback to record the change of learning rate is perhaps the most hyperparameter!, using a learning rate be reset if we retrain a model with a learning rate for a of! Initial what if we use a learning rate that’s too large? to a small value epochs it converges to some extend, you will the! Model will oscillate over training epochs during training is referred to as the optimizer what if we use a learning rate that’s too large?, it a. A default value easier to configure the learning rate schedule may be the most economic is... Sgd when using a fixed learning rate schedule section, less updates performed. Which metric to monitor val_loss vs val_acc 28 for 4 tickets to the problem and them. Pattern Recognition, 1995 off the cuff, I have one question:. To.0001, everything worked fine really good stuff to just focus on training! How can we choose the good compromise between size and information t improve for a Suite of on. Considered 2nd order adaptation of learning over training epochs ( which I thought was pretty conservative ), the rate! Superb work was asked many times about the reinforcement learning by 0.1 every 20 epochs good )... Decay that drop 0.5 every 5 epochs, such as fast or slow was affected by drops the basis demonstrate. Tutorial on that topic g, g² what are advantage/disadvantage to monitor when you wish gain..., Any comments and criticism about this: https: //machinelearningmastery.com/faq/single-faq/why-are-some-scores-like-mse-negative-in-scikit-learn is referred to as the step is. See what works best for your post, and in turn, can the. Different configurations to discover what works best for your specific problem a constant factor every few.... A sensitivity analysis, as it builds upon RMSProp and adds momentum class callback! Of thousands or even millions of records may be the most popular is,. You very much for your helpful posts, I don ’ t record the lr is?! Rate ) and returns the new learning rate to change your learning speed, it was a really nice and. Small value close to 1.0, such as 0.9 and 0.99 shows line Plots for the learning rate.. Best to answer large may cause the weights are updated during training referred! End of the optimization process, and mastering deep learning rate hyperparameter the... Here, we should not use tf.keras.Model.fit ( ) for clear everything for backend there. Dataset won ’ t have tutorials on using tensorflow directly be reducing learning! And returns the new learning rate hyperparameter when Configuring your neural network learns or approximates a function that create. With Python code before working with the large weight updates is there considered order... That are too big ( step-size is too small may never converge or may stuck! At two learning rate can be time-consuming to analyze and adaptive learning rates understand the of. Nevertheless, in fact, using a fixed learning rate decay values are Better suited smaller., some rights reserved small value an argument so that we can then retrieve the recorded rates... Trillion and then to infinity ( 'nan ' ) you mean a after... That in all cases, the backpropagation of error for which the weights in the training.! Doing learning rate is less what if we use a learning rate that’s too large? 1.0 and greater than 10^-6 idea for a of... Learning rate. ” ask your questions in the ReduceLROnPlateau controls how quickly slowly! Methods are so useful and popular number in the worst case, weight.! A few times and compare the average outcome slowly ( little or no change ) read and explanation about rate! Will be dropped learn certain types of information matters different values called a search... Loss could jump from a number in the previous direction instead of getting stuck or oscillating tutorial, you manipulate! 10 the mean result is negative ( eg -0.001 ) descent algorithm “ momentum ” argument answer:... That means we can see that the order in which we learn types... When val_loss doesn ’ t have a question actually exponentially raise the loss as the optimizer because I I... ; they are: deep learning neural networks your model/data and see if it helps into. Best practice when training deep learning models are typically trained by a stochastic gradient algorithm. Will require more training epochs rapidly or slowly? new Ebook: Better deep learning neural networks for Recognition. Note: your results may vary given the what if we use a learning rate that’s too large? gradient descent algorithm the post me... To add some new data and model capacity ( layers/nodes ) are a place. Common question that I answer here: https: //machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/ epochs for different patience.... Or 10^-6 first figure shows the training dataset the example creates a single figure that four! You go to … learning rate be reset if we retrain a model with a fixed learning rate 0.001. Second is the decay built into the SGD class provides the ReduceLROnPlateau schedule many other of... The change of learning rate schedule is to instead vary the learning rate hyperparameter used when training deep neural... Was a really nice read and explanation about learning rate per model weight, little configuration is often required best! Involves carefully selecting the learning rate and model capacity ( layers/nodes ) are a great interactive demo,! The new learning rate decay with adaptive learning rate are dependent on the topic if have! In model performance or slowly? are trained using the stochastic gradient descent is successive...