[Insight-users] Another question about the optimizer.

Raghavendra Chandrashekara rc3 at doc . ic . ac . uk
Mon, 23 Jun 2003 12:17:11 +0100


Hi Luis,

I am trying to control the itk::RegularStepGradientDescentOptimizer so 
that it doesn't move in the gradient direction if there is no 
improvement. What I am doing is storing the metric measure value in the 
previous iteration and the current iteration. After the optimizer has 
moved in the gradient direction, I check to see if there is any 
improvement. If not then I would like to reduce the step length by 2 and 
try again.

But I've come across two problems and I'm not sure what's the best way 
to solve them:

(1) There is no function to set the current step length. So I am 
reducing the maximum step length by a factor of 2.

(2) Because the optimizer has already moved in the gradient direction I 
would like to move back one step, but there is no function which allows 
me to do this.

Please can you tell me if what I am trying to do is sensible or if there 
is another way of achieving the same thing?

Thanks,

Raghavendra

Luis Ibanez wrote:
> 
> Hi Raghavendra,
> 
> Your intuition is correct. A gradient descent optimizer shouldn't in
> principle have two contiguous increments in the cost function. That is,
> if it finds one increment, it has to change direction or stop.
> 
> This is very clear in a one-dimensional parametric space. (e.g. if you
> are optimizing a single parameter). But, if you thing about
> multidimensional optimization, we can imagine many cases in which the
> optimizer is caught in multiple increments.
> 
> For example: Imagine the optimizer in a 2D setting with the simple cost
> function
> 
>                   f(x,y) = x^2 + y^2
> 
> If the step lengths are not small enough, it is possible for the
> optimizer to star jumping from one wall to the oposite one passing
> over the minimun value. Even though the optimizer is trying to do
> the right thing: moving in the direction where the gradient indicates
> that the function decreases. It may still end up in a location where
> the value of the cost function increases, just because the jump was
> too long.
> 
> Possibilities of such behavior increases when you add more dimensions
> to the parametric space.
> 
> You may want to reduce the step length of your optimization in order
> to make sure that the succesive steps behave monotonically.
> 
> Note that the criteria for stopping the optimizer are:
> 
> 1) when the step length reaches a minimum value (user-selected)
>    The time step is divided by 2 each time an increase in the cost
>    function is found. (the direction of advance is also reversed)
> 
> 2) when the magnitude of the gradient goes under a minumum value
>    (also user-selected)
> 
> 3) when the maximum number of iterations is reached.
>    (the user selects the maximum number of iterations).
> 
> 
> Regards,
> 
> 
>    Luis
> 
> 
> 
> -------------------------------
> Raghavendra Chandrashekara wrote:
> 
>> Dear All,
>>
>> I've written a simple program which registers a sphere to a cube using 
>> the itk::MeanSquaresImageToImageMetric, 
>> itk::RegularGradientDescentOptimizer, and the 
>> itk::BSplineDeformableTransform classes. At the end of each iteration 
>> I've printed out the value of the metric and these are the values I get:
>>
>> Iteration 0 = 12499.2
>> Iteration 1 = 10638.3
>> Iteration 2 = 9153.67
>> Iteration 3 = 7949.65
>> Iteration 4 = 7119.97
>> Iteration 5 = 6549.05
>> Iteration 6 = 6009.38
>> Iteration 7 = 5607.8
>> Iteration 8 = 5330.65
>> Iteration 9 = 4985.47
>> Iteration 10 = 4669.74
>> Iteration 11 = 4395.71
>> Iteration 12 = 4067.56
>> Iteration 13 = 3753.94
>> Iteration 14 = 3608.51
>> Iteration 15 = 3327.5
>> Iteration 16 = 3067.84
>> Iteration 17 = 2744.56
>> Iteration 18 = 2453.56
>> Iteration 19 = 2269.56
>> Iteration 20 = 2045.05
>> Iteration 21 = 1795.79
>> Iteration 22 = 1685.94
>> Iteration 23 = 1544.54
>> Iteration 24 = 1510.56
>> Iteration 25 = 1377.79
>> Iteration 26 = 1465.86
>> Iteration 27 = 1566.17
>> Iteration 28 = 1198.16
>> Iteration 29 = 1420.57
>> Iteration 30 = 1043.68
>> Iteration 31 = 1392.55
>> Iteration 32 = 1011.74
>> Iteration 33 = 1285.96
>> Iteration 34 = 897.961
>> Iteration 35 = 1304.93
>> Iteration 36 = 1022.35
>> Iteration 37 = 946.78
>> Iteration 38 = 918.44
>> Iteration 39 = 950.961
>> Iteration 40 = 915.875
>> Iteration 41 = 964.306
>> Iteration 42 = 807.392
>> Iteration 43 = 951.763
>> Iteration 44 = 731.597
>> Iteration 45 = 824.336
>> Iteration 46 = 828.187
>> Iteration 47 = 792.121
>> Iteration 48 = 781.585
>> Iteration 49 = 808.127
>>
>> Everything seems okay until iteration 26, when the metric value 
>> increases. Shouldn't the optimizer stop the registration at this point 
>> since it can't improve the metric anymore?
>>
>> Thanks,
>>
>> Raghavendra
>>
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at public . kitware . com
>> http://public . kitware . com/mailman/listinfo/insight-users
>>
> 
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at public . kitware . com
> http://public . kitware . com/mailman/listinfo/insight-users