Introdução

O gradiente descendente(Gradient Descent) é um dos principais algoritmos de otimização da função custo em algoritmos de otimização de Machine Learning. A ideia é minimizar uma função(Custo/erro) usando o gradiente(derivadas parciais). Para quem conhece um pouco mais de matemática sabe que encontrar mínimo de funções é uma das tarefas do cálculo diferencial. A titulo de exemplo, na figura abaixo do lado direito temos os dados históricos em azul, a f(hipótese de solução) que no caso de uma regressão linear é uma reta(em vermelho) e do lado esquerdo a função custo(erro). Perceba que quanto mais se aproximamos do mínimo erro mais ajustamos os parametros m e b de forma que a reta se aproxima dos dados tornando-se um provável modelo para previsões futuras.

Gradient Descent

Gradient Descent

Gradient Descent

Vamos fazer o algoritmo do gradiente descendente aqui usando uma dimensão para facilitar a intuição.

Desafio:

Encontre os mínimos locais da função y = (x + 5)² começando do ponto x = 3.

Passos do algoritmo:

Esse processo irá terminar quando a diferença entre duas iterações chegar até certo número ou quando se alcançar algum limite de iterações pré estabelecido.


Exemplo didático de função custo

Exemplo didático de função custo

Solução:

Sabemos a resposta apenas olhando para o gráfico. y = (x + 5)² atinge seu valor mínimo quando x = -5(ou seja, quando x = -5,y = 0). Portanto, x = -5 é o mínimo local e global da função.

Outra forma é resolver analiticamente, derivando a função e igualando a zero e assim achando o valor de x e avaliando o sinal da segunda derivada. Na prática, porém, não conseguimos encontrar uma solução analitica e justamente por isso o algoritmo se faz necessário. Dito isto, a ideia é usar o algoritmo do gradiente descendente. O script abaixo aplica o algoritmo para essa função.

Agora vamos aplicar o algoritmo:

Valores iniciais critérios de parada:

# O algoritmo inicia com o parâmetro x=3
cur_x = 3 

# Learning rate
rate = 0.01 

# Define quando parar o algoritmo
# Parar o loop quando a diferença entre os valores de x em 2 iterações consecutivas for menor que 0,000001 
# ou quando o número de iterações exceder 10 mil
precision = 0.000001 

# Inicializa o contador do passo anterior
previous_step_size = 1 

# Número máximo de iterações
max_iters = 10000 

# Contador de iterações
iters = 0 

# Gradiente da função
df = function(x){2*(x+5)}

Iterações( treinamento):

while (previous_step_size > precision & iters < max_iters){
    
    # Armazena o valor corrente de x em prev_x
    prev_x = cur_x 
    
    # Aplica o Gradient descent
    cur_x = cur_x - rate * df(prev_x) 
    
    # Altera o valor de x
    previous_step_size = abs(cur_x - prev_x) 
    
    # Incrementa o número de iterações
    iters = iters + 1 
    
    # Imprime as iterações
    #print(paste0("Iteraçao ", iters,"Valor de x igual a ", cur_x))
    cat("\nIteraçao ", iters,':', "\nValor de x igual a ", cur_x)
 
}
## 
## Iteraçao  1 : 
## Valor de x igual a  2.84
## Iteraçao  2 : 
## Valor de x igual a  2.6832
## Iteraçao  3 : 
## Valor de x igual a  2.529536
## Iteraçao  4 : 
## Valor de x igual a  2.378945
## Iteraçao  5 : 
## Valor de x igual a  2.231366
## Iteraçao  6 : 
## Valor de x igual a  2.086739
## Iteraçao  7 : 
## Valor de x igual a  1.945004
## Iteraçao  8 : 
## Valor de x igual a  1.806104
## Iteraçao  9 : 
## Valor de x igual a  1.669982
## Iteraçao  10 : 
## Valor de x igual a  1.536582
## Iteraçao  11 : 
## Valor de x igual a  1.405851
## Iteraçao  12 : 
## Valor de x igual a  1.277734
## Iteraçao  13 : 
## Valor de x igual a  1.152179
## Iteraçao  14 : 
## Valor de x igual a  1.029136
## Iteraçao  15 : 
## Valor de x igual a  0.9085528
## Iteraçao  16 : 
## Valor de x igual a  0.7903818
## Iteraçao  17 : 
## Valor de x igual a  0.6745741
## Iteraçao  18 : 
## Valor de x igual a  0.5610826
## Iteraçao  19 : 
## Valor de x igual a  0.449861
## Iteraçao  20 : 
## Valor de x igual a  0.3408638
## Iteraçao  21 : 
## Valor de x igual a  0.2340465
## Iteraçao  22 : 
## Valor de x igual a  0.1293656
## Iteraçao  23 : 
## Valor de x igual a  0.02677826
## Iteraçao  24 : 
## Valor de x igual a  -0.07375731
## Iteraçao  25 : 
## Valor de x igual a  -0.1722822
## Iteraçao  26 : 
## Valor de x igual a  -0.2688365
## Iteraçao  27 : 
## Valor de x igual a  -0.3634598
## Iteraçao  28 : 
## Valor de x igual a  -0.4561906
## Iteraçao  29 : 
## Valor de x igual a  -0.5470668
## Iteraçao  30 : 
## Valor de x igual a  -0.6361254
## Iteraçao  31 : 
## Valor de x igual a  -0.7234029
## Iteraçao  32 : 
## Valor de x igual a  -0.8089349
## Iteraçao  33 : 
## Valor de x igual a  -0.8927562
## Iteraçao  34 : 
## Valor de x igual a  -0.9749011
## Iteraçao  35 : 
## Valor de x igual a  -1.055403
## Iteraçao  36 : 
## Valor de x igual a  -1.134295
## Iteraçao  37 : 
## Valor de x igual a  -1.211609
## Iteraçao  38 : 
## Valor de x igual a  -1.287377
## Iteraçao  39 : 
## Valor de x igual a  -1.361629
## Iteraçao  40 : 
## Valor de x igual a  -1.434397
## Iteraçao  41 : 
## Valor de x igual a  -1.505709
## Iteraçao  42 : 
## Valor de x igual a  -1.575595
## Iteraçao  43 : 
## Valor de x igual a  -1.644083
## Iteraçao  44 : 
## Valor de x igual a  -1.711201
## Iteraçao  45 : 
## Valor de x igual a  -1.776977
## Iteraçao  46 : 
## Valor de x igual a  -1.841438
## Iteraçao  47 : 
## Valor de x igual a  -1.904609
## Iteraçao  48 : 
## Valor de x igual a  -1.966517
## Iteraçao  49 : 
## Valor de x igual a  -2.027186
## Iteraçao  50 : 
## Valor de x igual a  -2.086643
## Iteraçao  51 : 
## Valor de x igual a  -2.14491
## Iteraçao  52 : 
## Valor de x igual a  -2.202012
## Iteraçao  53 : 
## Valor de x igual a  -2.257971
## Iteraçao  54 : 
## Valor de x igual a  -2.312812
## Iteraçao  55 : 
## Valor de x igual a  -2.366556
## Iteraçao  56 : 
## Valor de x igual a  -2.419225
## Iteraçao  57 : 
## Valor de x igual a  -2.47084
## Iteraçao  58 : 
## Valor de x igual a  -2.521423
## Iteraçao  59 : 
## Valor de x igual a  -2.570995
## Iteraçao  60 : 
## Valor de x igual a  -2.619575
## Iteraçao  61 : 
## Valor de x igual a  -2.667183
## Iteraçao  62 : 
## Valor de x igual a  -2.71384
## Iteraçao  63 : 
## Valor de x igual a  -2.759563
## Iteraçao  64 : 
## Valor de x igual a  -2.804372
## Iteraçao  65 : 
## Valor de x igual a  -2.848284
## Iteraçao  66 : 
## Valor de x igual a  -2.891319
## Iteraçao  67 : 
## Valor de x igual a  -2.933492
## Iteraçao  68 : 
## Valor de x igual a  -2.974822
## Iteraçao  69 : 
## Valor de x igual a  -3.015326
## Iteraçao  70 : 
## Valor de x igual a  -3.055019
## Iteraçao  71 : 
## Valor de x igual a  -3.093919
## Iteraçao  72 : 
## Valor de x igual a  -3.132041
## Iteraçao  73 : 
## Valor de x igual a  -3.1694
## Iteraçao  74 : 
## Valor de x igual a  -3.206012
## Iteraçao  75 : 
## Valor de x igual a  -3.241892
## Iteraçao  76 : 
## Valor de x igual a  -3.277054
## Iteraçao  77 : 
## Valor de x igual a  -3.311513
## Iteraçao  78 : 
## Valor de x igual a  -3.345282
## Iteraçao  79 : 
## Valor de x igual a  -3.378377
## Iteraçao  80 : 
## Valor de x igual a  -3.410809
## Iteraçao  81 : 
## Valor de x igual a  -3.442593
## Iteraçao  82 : 
## Valor de x igual a  -3.473741
## Iteraçao  83 : 
## Valor de x igual a  -3.504266
## Iteraçao  84 : 
## Valor de x igual a  -3.534181
## Iteraçao  85 : 
## Valor de x igual a  -3.563497
## Iteraçao  86 : 
## Valor de x igual a  -3.592227
## Iteraçao  87 : 
## Valor de x igual a  -3.620383
## Iteraçao  88 : 
## Valor de x igual a  -3.647975
## Iteraçao  89 : 
## Valor de x igual a  -3.675016
## Iteraçao  90 : 
## Valor de x igual a  -3.701515
## Iteraçao  91 : 
## Valor de x igual a  -3.727485
## Iteraçao  92 : 
## Valor de x igual a  -3.752935
## Iteraçao  93 : 
## Valor de x igual a  -3.777877
## Iteraçao  94 : 
## Valor de x igual a  -3.802319
## Iteraçao  95 : 
## Valor de x igual a  -3.826273
## Iteraçao  96 : 
## Valor de x igual a  -3.849747
## Iteraçao  97 : 
## Valor de x igual a  -3.872752
## Iteraçao  98 : 
## Valor de x igual a  -3.895297
## Iteraçao  99 : 
## Valor de x igual a  -3.917391
## Iteraçao  100 : 
## Valor de x igual a  -3.939044
## Iteraçao  101 : 
## Valor de x igual a  -3.960263
## Iteraçao  102 : 
## Valor de x igual a  -3.981057
## Iteraçao  103 : 
## Valor de x igual a  -4.001436
## Iteraçao  104 : 
## Valor de x igual a  -4.021408
## Iteraçao  105 : 
## Valor de x igual a  -4.040979
## Iteraçao  106 : 
## Valor de x igual a  -4.06016
## Iteraçao  107 : 
## Valor de x igual a  -4.078957
## Iteraçao  108 : 
## Valor de x igual a  -4.097377
## Iteraçao  109 : 
## Valor de x igual a  -4.11543
## Iteraçao  110 : 
## Valor de x igual a  -4.133121
## Iteraçao  111 : 
## Valor de x igual a  -4.150459
## Iteraçao  112 : 
## Valor de x igual a  -4.16745
## Iteraçao  113 : 
## Valor de x igual a  -4.184101
## Iteraçao  114 : 
## Valor de x igual a  -4.200419
## Iteraçao  115 : 
## Valor de x igual a  -4.21641
## Iteraçao  116 : 
## Valor de x igual a  -4.232082
## Iteraçao  117 : 
## Valor de x igual a  -4.24744
## Iteraçao  118 : 
## Valor de x igual a  -4.262492
## Iteraçao  119 : 
## Valor de x igual a  -4.277242
## Iteraçao  120 : 
## Valor de x igual a  -4.291697
## Iteraçao  121 : 
## Valor de x igual a  -4.305863
## Iteraçao  122 : 
## Valor de x igual a  -4.319746
## Iteraçao  123 : 
## Valor de x igual a  -4.333351
## Iteraçao  124 : 
## Valor de x igual a  -4.346684
## Iteraçao  125 : 
## Valor de x igual a  -4.35975
## Iteraçao  126 : 
## Valor de x igual a  -4.372555
## Iteraçao  127 : 
## Valor de x igual a  -4.385104
## Iteraçao  128 : 
## Valor de x igual a  -4.397402
## Iteraçao  129 : 
## Valor de x igual a  -4.409454
## Iteraçao  130 : 
## Valor de x igual a  -4.421265
## Iteraçao  131 : 
## Valor de x igual a  -4.43284
## Iteraçao  132 : 
## Valor de x igual a  -4.444183
## Iteraçao  133 : 
## Valor de x igual a  -4.455299
## Iteraçao  134 : 
## Valor de x igual a  -4.466193
## Iteraçao  135 : 
## Valor de x igual a  -4.476869
## Iteraçao  136 : 
## Valor de x igual a  -4.487332
## Iteraçao  137 : 
## Valor de x igual a  -4.497585
## Iteraçao  138 : 
## Valor de x igual a  -4.507634
## Iteraçao  139 : 
## Valor de x igual a  -4.517481
## Iteraçao  140 : 
## Valor de x igual a  -4.527131
## Iteraçao  141 : 
## Valor de x igual a  -4.536589
## Iteraçao  142 : 
## Valor de x igual a  -4.545857
## Iteraçao  143 : 
## Valor de x igual a  -4.55494
## Iteraçao  144 : 
## Valor de x igual a  -4.563841
## Iteraçao  145 : 
## Valor de x igual a  -4.572564
## Iteraçao  146 : 
## Valor de x igual a  -4.581113
## Iteraçao  147 : 
## Valor de x igual a  -4.589491
## Iteraçao  148 : 
## Valor de x igual a  -4.597701
## Iteraçao  149 : 
## Valor de x igual a  -4.605747
## Iteraçao  150 : 
## Valor de x igual a  -4.613632
## Iteraçao  151 : 
## Valor de x igual a  -4.621359
## Iteraçao  152 : 
## Valor de x igual a  -4.628932
## Iteraçao  153 : 
## Valor de x igual a  -4.636353
## Iteraçao  154 : 
## Valor de x igual a  -4.643626
## Iteraçao  155 : 
## Valor de x igual a  -4.650754
## Iteraçao  156 : 
## Valor de x igual a  -4.657739
## Iteraçao  157 : 
## Valor de x igual a  -4.664584
## Iteraçao  158 : 
## Valor de x igual a  -4.671292
## Iteraçao  159 : 
## Valor de x igual a  -4.677866
## Iteraçao  160 : 
## Valor de x igual a  -4.684309
## Iteraçao  161 : 
## Valor de x igual a  -4.690623
## Iteraçao  162 : 
## Valor de x igual a  -4.69681
## Iteraçao  163 : 
## Valor de x igual a  -4.702874
## Iteraçao  164 : 
## Valor de x igual a  -4.708817
## Iteraçao  165 : 
## Valor de x igual a  -4.71464
## Iteraçao  166 : 
## Valor de x igual a  -4.720348
## Iteraçao  167 : 
## Valor de x igual a  -4.725941
## Iteraçao  168 : 
## Valor de x igual a  -4.731422
## Iteraçao  169 : 
## Valor de x igual a  -4.736793
## Iteraçao  170 : 
## Valor de x igual a  -4.742058
## Iteraçao  171 : 
## Valor de x igual a  -4.747216
## Iteraçao  172 : 
## Valor de x igual a  -4.752272
## Iteraçao  173 : 
## Valor de x igual a  -4.757227
## Iteraçao  174 : 
## Valor de x igual a  -4.762082
## Iteraçao  175 : 
## Valor de x igual a  -4.76684
## Iteraçao  176 : 
## Valor de x igual a  -4.771504
## Iteraçao  177 : 
## Valor de x igual a  -4.776074
## Iteraçao  178 : 
## Valor de x igual a  -4.780552
## Iteraçao  179 : 
## Valor de x igual a  -4.784941
## Iteraçao  180 : 
## Valor de x igual a  -4.789242
## Iteraçao  181 : 
## Valor de x igual a  -4.793457
## Iteraçao  182 : 
## Valor de x igual a  -4.797588
## Iteraçao  183 : 
## Valor de x igual a  -4.801636
## Iteraçao  184 : 
## Valor de x igual a  -4.805604
## Iteraçao  185 : 
## Valor de x igual a  -4.809492
## Iteraçao  186 : 
## Valor de x igual a  -4.813302
## Iteraçao  187 : 
## Valor de x igual a  -4.817036
## Iteraçao  188 : 
## Valor de x igual a  -4.820695
## Iteraçao  189 : 
## Valor de x igual a  -4.824281
## Iteraçao  190 : 
## Valor de x igual a  -4.827796
## Iteraçao  191 : 
## Valor de x igual a  -4.83124
## Iteraçao  192 : 
## Valor de x igual a  -4.834615
## Iteraçao  193 : 
## Valor de x igual a  -4.837923
## Iteraçao  194 : 
## Valor de x igual a  -4.841164
## Iteraçao  195 : 
## Valor de x igual a  -4.844341
## Iteraçao  196 : 
## Valor de x igual a  -4.847454
## Iteraçao  197 : 
## Valor de x igual a  -4.850505
## Iteraçao  198 : 
## Valor de x igual a  -4.853495
## Iteraçao  199 : 
## Valor de x igual a  -4.856425
## Iteraçao  200 : 
## Valor de x igual a  -4.859296
## Iteraçao  201 : 
## Valor de x igual a  -4.86211
## Iteraçao  202 : 
## Valor de x igual a  -4.864868
## Iteraçao  203 : 
## Valor de x igual a  -4.867571
## Iteraçao  204 : 
## Valor de x igual a  -4.87022
## Iteraçao  205 : 
## Valor de x igual a  -4.872815
## Iteraçao  206 : 
## Valor de x igual a  -4.875359
## Iteraçao  207 : 
## Valor de x igual a  -4.877852
## Iteraçao  208 : 
## Valor de x igual a  -4.880295
## Iteraçao  209 : 
## Valor de x igual a  -4.882689
## Iteraçao  210 : 
## Valor de x igual a  -4.885035
## Iteraçao  211 : 
## Valor de x igual a  -4.887334
## Iteraçao  212 : 
## Valor de x igual a  -4.889588
## Iteraçao  213 : 
## Valor de x igual a  -4.891796
## Iteraçao  214 : 
## Valor de x igual a  -4.89396
## Iteraçao  215 : 
## Valor de x igual a  -4.896081
## Iteraçao  216 : 
## Valor de x igual a  -4.898159
## Iteraçao  217 : 
## Valor de x igual a  -4.900196
## Iteraçao  218 : 
## Valor de x igual a  -4.902192
## Iteraçao  219 : 
## Valor de x igual a  -4.904148
## Iteraçao  220 : 
## Valor de x igual a  -4.906065
## Iteraçao  221 : 
## Valor de x igual a  -4.907944
## Iteraçao  222 : 
## Valor de x igual a  -4.909785
## Iteraçao  223 : 
## Valor de x igual a  -4.911589
## Iteraçao  224 : 
## Valor de x igual a  -4.913358
## Iteraçao  225 : 
## Valor de x igual a  -4.91509
## Iteraçao  226 : 
## Valor de x igual a  -4.916789
## Iteraçao  227 : 
## Valor de x igual a  -4.918453
## Iteraçao  228 : 
## Valor de x igual a  -4.920084
## Iteraçao  229 : 
## Valor de x igual a  -4.921682
## Iteraçao  230 : 
## Valor de x igual a  -4.923248
## Iteraçao  231 : 
## Valor de x igual a  -4.924783
## Iteraçao  232 : 
## Valor de x igual a  -4.926288
## Iteraçao  233 : 
## Valor de x igual a  -4.927762
## Iteraçao  234 : 
## Valor de x igual a  -4.929207
## Iteraçao  235 : 
## Valor de x igual a  -4.930623
## Iteraçao  236 : 
## Valor de x igual a  -4.93201
## Iteraçao  237 : 
## Valor de x igual a  -4.93337
## Iteraçao  238 : 
## Valor de x igual a  -4.934703
## Iteraçao  239 : 
## Valor de x igual a  -4.936009
## Iteraçao  240 : 
## Valor de x igual a  -4.937288
## Iteraçao  241 : 
## Valor de x igual a  -4.938543
## Iteraçao  242 : 
## Valor de x igual a  -4.939772
## Iteraçao  243 : 
## Valor de x igual a  -4.940976
## Iteraçao  244 : 
## Valor de x igual a  -4.942157
## Iteraçao  245 : 
## Valor de x igual a  -4.943314
## Iteraçao  246 : 
## Valor de x igual a  -4.944447
## Iteraçao  247 : 
## Valor de x igual a  -4.945558
## Iteraçao  248 : 
## Valor de x igual a  -4.946647
## Iteraçao  249 : 
## Valor de x igual a  -4.947714
## Iteraçao  250 : 
## Valor de x igual a  -4.94876
## Iteraçao  251 : 
## Valor de x igual a  -4.949785
## Iteraçao  252 : 
## Valor de x igual a  -4.950789
## Iteraçao  253 : 
## Valor de x igual a  -4.951773
## Iteraçao  254 : 
## Valor de x igual a  -4.952738
## Iteraçao  255 : 
## Valor de x igual a  -4.953683
## Iteraçao  256 : 
## Valor de x igual a  -4.954609
## Iteraçao  257 : 
## Valor de x igual a  -4.955517
## Iteraçao  258 : 
## Valor de x igual a  -4.956407
## Iteraçao  259 : 
## Valor de x igual a  -4.957279
## Iteraçao  260 : 
## Valor de x igual a  -4.958133
## Iteraçao  261 : 
## Valor de x igual a  -4.958971
## Iteraçao  262 : 
## Valor de x igual a  -4.959791
## Iteraçao  263 : 
## Valor de x igual a  -4.960595
## Iteraçao  264 : 
## Valor de x igual a  -4.961383
## Iteraçao  265 : 
## Valor de x igual a  -4.962156
## Iteraçao  266 : 
## Valor de x igual a  -4.962913
## Iteraçao  267 : 
## Valor de x igual a  -4.963654
## Iteraçao  268 : 
## Valor de x igual a  -4.964381
## Iteraçao  269 : 
## Valor de x igual a  -4.965094
## Iteraçao  270 : 
## Valor de x igual a  -4.965792
## Iteraçao  271 : 
## Valor de x igual a  -4.966476
## Iteraçao  272 : 
## Valor de x igual a  -4.967146
## Iteraçao  273 : 
## Valor de x igual a  -4.967804
## Iteraçao  274 : 
## Valor de x igual a  -4.968447
## Iteraçao  275 : 
## Valor de x igual a  -4.969078
## Iteraçao  276 : 
## Valor de x igual a  -4.969697
## Iteraçao  277 : 
## Valor de x igual a  -4.970303
## Iteraçao  278 : 
## Valor de x igual a  -4.970897
## Iteraçao  279 : 
## Valor de x igual a  -4.971479
## Iteraçao  280 : 
## Valor de x igual a  -4.972049
## Iteraçao  281 : 
## Valor de x igual a  -4.972608
## Iteraçao  282 : 
## Valor de x igual a  -4.973156
## Iteraçao  283 : 
## Valor de x igual a  -4.973693
## Iteraçao  284 : 
## Valor de x igual a  -4.974219
## Iteraçao  285 : 
## Valor de x igual a  -4.974735
## Iteraçao  286 : 
## Valor de x igual a  -4.97524
## Iteraçao  287 : 
## Valor de x igual a  -4.975735
## Iteraçao  288 : 
## Valor de x igual a  -4.976221
## Iteraçao  289 : 
## Valor de x igual a  -4.976696
## Iteraçao  290 : 
## Valor de x igual a  -4.977162
## Iteraçao  291 : 
## Valor de x igual a  -4.977619
## Iteraçao  292 : 
## Valor de x igual a  -4.978067
## Iteraçao  293 : 
## Valor de x igual a  -4.978505
## Iteraçao  294 : 
## Valor de x igual a  -4.978935
## Iteraçao  295 : 
## Valor de x igual a  -4.979357
## Iteraçao  296 : 
## Valor de x igual a  -4.979769
## Iteraçao  297 : 
## Valor de x igual a  -4.980174
## Iteraçao  298 : 
## Valor de x igual a  -4.980571
## Iteraçao  299 : 
## Valor de x igual a  -4.980959
## Iteraçao  300 : 
## Valor de x igual a  -4.98134
## Iteraçao  301 : 
## Valor de x igual a  -4.981713
## Iteraçao  302 : 
## Valor de x igual a  -4.982079
## Iteraçao  303 : 
## Valor de x igual a  -4.982437
## Iteraçao  304 : 
## Valor de x igual a  -4.982789
## Iteraçao  305 : 
## Valor de x igual a  -4.983133
## Iteraçao  306 : 
## Valor de x igual a  -4.98347
## Iteraçao  307 : 
## Valor de x igual a  -4.983801
## Iteraçao  308 : 
## Valor de x igual a  -4.984125
## Iteraçao  309 : 
## Valor de x igual a  -4.984442
## Iteraçao  310 : 
## Valor de x igual a  -4.984753
## Iteraçao  311 : 
## Valor de x igual a  -4.985058
## Iteraçao  312 : 
## Valor de x igual a  -4.985357
## Iteraçao  313 : 
## Valor de x igual a  -4.98565
## Iteraçao  314 : 
## Valor de x igual a  -4.985937
## Iteraçao  315 : 
## Valor de x igual a  -4.986218
## Iteraçao  316 : 
## Valor de x igual a  -4.986494
## Iteraçao  317 : 
## Valor de x igual a  -4.986764
## Iteraçao  318 : 
## Valor de x igual a  -4.987029
## Iteraçao  319 : 
## Valor de x igual a  -4.987288
## Iteraçao  320 : 
## Valor de x igual a  -4.987542
## Iteraçao  321 : 
## Valor de x igual a  -4.987792
## Iteraçao  322 : 
## Valor de x igual a  -4.988036
## Iteraçao  323 : 
## Valor de x igual a  -4.988275
## Iteraçao  324 : 
## Valor de x igual a  -4.98851
## Iteraçao  325 : 
## Valor de x igual a  -4.988739
## Iteraçao  326 : 
## Valor de x igual a  -4.988965
## Iteraçao  327 : 
## Valor de x igual a  -4.989185
## Iteraçao  328 : 
## Valor de x igual a  -4.989402
## Iteraçao  329 : 
## Valor de x igual a  -4.989614
## Iteraçao  330 : 
## Valor de x igual a  -4.989821
## Iteraçao  331 : 
## Valor de x igual a  -4.990025
## Iteraçao  332 : 
## Valor de x igual a  -4.990224
## Iteraçao  333 : 
## Valor de x igual a  -4.99042
## Iteraçao  334 : 
## Valor de x igual a  -4.990611
## Iteraçao  335 : 
## Valor de x igual a  -4.990799
## Iteraçao  336 : 
## Valor de x igual a  -4.990983
## Iteraçao  337 : 
## Valor de x igual a  -4.991164
## Iteraçao  338 : 
## Valor de x igual a  -4.99134
## Iteraçao  339 : 
## Valor de x igual a  -4.991513
## Iteraçao  340 : 
## Valor de x igual a  -4.991683
## Iteraçao  341 : 
## Valor de x igual a  -4.99185
## Iteraçao  342 : 
## Valor de x igual a  -4.992013
## Iteraçao  343 : 
## Valor de x igual a  -4.992172
## Iteraçao  344 : 
## Valor de x igual a  -4.992329
## Iteraçao  345 : 
## Valor de x igual a  -4.992482
## Iteraçao  346 : 
## Valor de x igual a  -4.992633
## Iteraçao  347 : 
## Valor de x igual a  -4.99278
## Iteraçao  348 : 
## Valor de x igual a  -4.992924
## Iteraçao  349 : 
## Valor de x igual a  -4.993066
## Iteraçao  350 : 
## Valor de x igual a  -4.993205
## Iteraçao  351 : 
## Valor de x igual a  -4.99334
## Iteraçao  352 : 
## Valor de x igual a  -4.993474
## Iteraçao  353 : 
## Valor de x igual a  -4.993604
## Iteraçao  354 : 
## Valor de x igual a  -4.993732
## Iteraçao  355 : 
## Valor de x igual a  -4.993857
## Iteraçao  356 : 
## Valor de x igual a  -4.99398
## Iteraçao  357 : 
## Valor de x igual a  -4.994101
## Iteraçao  358 : 
## Valor de x igual a  -4.994219
## Iteraçao  359 : 
## Valor de x igual a  -4.994334
## Iteraçao  360 : 
## Valor de x igual a  -4.994448
## Iteraçao  361 : 
## Valor de x igual a  -4.994559
## Iteraçao  362 : 
## Valor de x igual a  -4.994668
## Iteraçao  363 : 
## Valor de x igual a  -4.994774
## Iteraçao  364 : 
## Valor de x igual a  -4.994879
## Iteraçao  365 : 
## Valor de x igual a  -4.994981
## Iteraçao  366 : 
## Valor de x igual a  -4.995081
## Iteraçao  367 : 
## Valor de x igual a  -4.99518
## Iteraçao  368 : 
## Valor de x igual a  -4.995276
## Iteraçao  369 : 
## Valor de x igual a  -4.995371
## Iteraçao  370 : 
## Valor de x igual a  -4.995463
## Iteraçao  371 : 
## Valor de x igual a  -4.995554
## Iteraçao  372 : 
## Valor de x igual a  -4.995643
## Iteraçao  373 : 
## Valor de x igual a  -4.99573
## Iteraçao  374 : 
## Valor de x igual a  -4.995816
## Iteraçao  375 : 
## Valor de x igual a  -4.995899
## Iteraçao  376 : 
## Valor de x igual a  -4.995981
## Iteraçao  377 : 
## Valor de x igual a  -4.996062
## Iteraçao  378 : 
## Valor de x igual a  -4.99614
## Iteraçao  379 : 
## Valor de x igual a  -4.996218
## Iteraçao  380 : 
## Valor de x igual a  -4.996293
## Iteraçao  381 : 
## Valor de x igual a  -4.996367
## Iteraçao  382 : 
## Valor de x igual a  -4.99644
## Iteraçao  383 : 
## Valor de x igual a  -4.996511
## Iteraçao  384 : 
## Valor de x igual a  -4.996581
## Iteraçao  385 : 
## Valor de x igual a  -4.996649
## Iteraçao  386 : 
## Valor de x igual a  -4.996716
## Iteraçao  387 : 
## Valor de x igual a  -4.996782
## Iteraçao  388 : 
## Valor de x igual a  -4.996846
## Iteraçao  389 : 
## Valor de x igual a  -4.996909
## Iteraçao  390 : 
## Valor de x igual a  -4.996971
## Iteraçao  391 : 
## Valor de x igual a  -4.997032
## Iteraçao  392 : 
## Valor de x igual a  -4.997091
## Iteraçao  393 : 
## Valor de x igual a  -4.997149
## Iteraçao  394 : 
## Valor de x igual a  -4.997206
## Iteraçao  395 : 
## Valor de x igual a  -4.997262
## Iteraçao  396 : 
## Valor de x igual a  -4.997317
## Iteraçao  397 : 
## Valor de x igual a  -4.997371
## Iteraçao  398 : 
## Valor de x igual a  -4.997423
## Iteraçao  399 : 
## Valor de x igual a  -4.997475
## Iteraçao  400 : 
## Valor de x igual a  -4.997525
## Iteraçao  401 : 
## Valor de x igual a  -4.997575
## Iteraçao  402 : 
## Valor de x igual a  -4.997623
## Iteraçao  403 : 
## Valor de x igual a  -4.997671
## Iteraçao  404 : 
## Valor de x igual a  -4.997717
## Iteraçao  405 : 
## Valor de x igual a  -4.997763
## Iteraçao  406 : 
## Valor de x igual a  -4.997808
## Iteraçao  407 : 
## Valor de x igual a  -4.997852
## Iteraçao  408 : 
## Valor de x igual a  -4.997895
## Iteraçao  409 : 
## Valor de x igual a  -4.997937
## Iteraçao  410 : 
## Valor de x igual a  -4.997978
## Iteraçao  411 : 
## Valor de x igual a  -4.998018
## Iteraçao  412 : 
## Valor de x igual a  -4.998058
## Iteraçao  413 : 
## Valor de x igual a  -4.998097
## Iteraçao  414 : 
## Valor de x igual a  -4.998135
## Iteraçao  415 : 
## Valor de x igual a  -4.998172
## Iteraçao  416 : 
## Valor de x igual a  -4.998209
## Iteraçao  417 : 
## Valor de x igual a  -4.998245
## Iteraçao  418 : 
## Valor de x igual a  -4.99828
## Iteraçao  419 : 
## Valor de x igual a  -4.998314
## Iteraçao  420 : 
## Valor de x igual a  -4.998348
## Iteraçao  421 : 
## Valor de x igual a  -4.998381
## Iteraçao  422 : 
## Valor de x igual a  -4.998413
## Iteraçao  423 : 
## Valor de x igual a  -4.998445
## Iteraçao  424 : 
## Valor de x igual a  -4.998476
## Iteraçao  425 : 
## Valor de x igual a  -4.998507
## Iteraçao  426 : 
## Valor de x igual a  -4.998536
## Iteraçao  427 : 
## Valor de x igual a  -4.998566
## Iteraçao  428 : 
## Valor de x igual a  -4.998594
## Iteraçao  429 : 
## Valor de x igual a  -4.998623
## Iteraçao  430 : 
## Valor de x igual a  -4.99865
## Iteraçao  431 : 
## Valor de x igual a  -4.998677
## Iteraçao  432 : 
## Valor de x igual a  -4.998704
## Iteraçao  433 : 
## Valor de x igual a  -4.998729
## Iteraçao  434 : 
## Valor de x igual a  -4.998755
## Iteraçao  435 : 
## Valor de x igual a  -4.99878
## Iteraçao  436 : 
## Valor de x igual a  -4.998804
## Iteraçao  437 : 
## Valor de x igual a  -4.998828
## Iteraçao  438 : 
## Valor de x igual a  -4.998852
## Iteraçao  439 : 
## Valor de x igual a  -4.998875
## Iteraçao  440 : 
## Valor de x igual a  -4.998897
## Iteraçao  441 : 
## Valor de x igual a  -4.998919
## Iteraçao  442 : 
## Valor de x igual a  -4.998941
## Iteraçao  443 : 
## Valor de x igual a  -4.998962
## Iteraçao  444 : 
## Valor de x igual a  -4.998983
## Iteraçao  445 : 
## Valor de x igual a  -4.999003
## Iteraçao  446 : 
## Valor de x igual a  -4.999023
## Iteraçao  447 : 
## Valor de x igual a  -4.999042
## Iteraçao  448 : 
## Valor de x igual a  -4.999062
## Iteraçao  449 : 
## Valor de x igual a  -4.99908
## Iteraçao  450 : 
## Valor de x igual a  -4.999099
## Iteraçao  451 : 
## Valor de x igual a  -4.999117
## Iteraçao  452 : 
## Valor de x igual a  -4.999134
## Iteraçao  453 : 
## Valor de x igual a  -4.999152
## Iteraçao  454 : 
## Valor de x igual a  -4.999169
## Iteraçao  455 : 
## Valor de x igual a  -4.999185
## Iteraçao  456 : 
## Valor de x igual a  -4.999202
## Iteraçao  457 : 
## Valor de x igual a  -4.999218
## Iteraçao  458 : 
## Valor de x igual a  -4.999233
## Iteraçao  459 : 
## Valor de x igual a  -4.999249
## Iteraçao  460 : 
## Valor de x igual a  -4.999264
## Iteraçao  461 : 
## Valor de x igual a  -4.999278
## Iteraçao  462 : 
## Valor de x igual a  -4.999293
## Iteraçao  463 : 
## Valor de x igual a  -4.999307
## Iteraçao  464 : 
## Valor de x igual a  -4.999321
## Iteraçao  465 : 
## Valor de x igual a  -4.999334
## Iteraçao  466 : 
## Valor de x igual a  -4.999348
## Iteraçao  467 : 
## Valor de x igual a  -4.999361
## Iteraçao  468 : 
## Valor de x igual a  -4.999374
## Iteraçao  469 : 
## Valor de x igual a  -4.999386
## Iteraçao  470 : 
## Valor de x igual a  -4.999398
## Iteraçao  471 : 
## Valor de x igual a  -4.99941
## Iteraçao  472 : 
## Valor de x igual a  -4.999422
## Iteraçao  473 : 
## Valor de x igual a  -4.999434
## Iteraçao  474 : 
## Valor de x igual a  -4.999445
## Iteraçao  475 : 
## Valor de x igual a  -4.999456
## Iteraçao  476 : 
## Valor de x igual a  -4.999467
## Iteraçao  477 : 
## Valor de x igual a  -4.999478
## Iteraçao  478 : 
## Valor de x igual a  -4.999488
## Iteraçao  479 : 
## Valor de x igual a  -4.999498
## Iteraçao  480 : 
## Valor de x igual a  -4.999508
## Iteraçao  481 : 
## Valor de x igual a  -4.999518
## Iteraçao  482 : 
## Valor de x igual a  -4.999528
## Iteraçao  483 : 
## Valor de x igual a  -4.999537
## Iteraçao  484 : 
## Valor de x igual a  -4.999547
## Iteraçao  485 : 
## Valor de x igual a  -4.999556
## Iteraçao  486 : 
## Valor de x igual a  -4.999565
## Iteraçao  487 : 
## Valor de x igual a  -4.999573
## Iteraçao  488 : 
## Valor de x igual a  -4.999582
## Iteraçao  489 : 
## Valor de x igual a  -4.99959
## Iteraçao  490 : 
## Valor de x igual a  -4.999598
## Iteraçao  491 : 
## Valor de x igual a  -4.999606
## Iteraçao  492 : 
## Valor de x igual a  -4.999614
## Iteraçao  493 : 
## Valor de x igual a  -4.999622
## Iteraçao  494 : 
## Valor de x igual a  -4.99963
## Iteraçao  495 : 
## Valor de x igual a  -4.999637
## Iteraçao  496 : 
## Valor de x igual a  -4.999644
## Iteraçao  497 : 
## Valor de x igual a  -4.999651
## Iteraçao  498 : 
## Valor de x igual a  -4.999658
## Iteraçao  499 : 
## Valor de x igual a  -4.999665
## Iteraçao  500 : 
## Valor de x igual a  -4.999672
## Iteraçao  501 : 
## Valor de x igual a  -4.999678
## Iteraçao  502 : 
## Valor de x igual a  -4.999685
## Iteraçao  503 : 
## Valor de x igual a  -4.999691
## Iteraçao  504 : 
## Valor de x igual a  -4.999697
## Iteraçao  505 : 
## Valor de x igual a  -4.999703
## Iteraçao  506 : 
## Valor de x igual a  -4.999709
## Iteraçao  507 : 
## Valor de x igual a  -4.999715
## Iteraçao  508 : 
## Valor de x igual a  -4.999721
## Iteraçao  509 : 
## Valor de x igual a  -4.999726
## Iteraçao  510 : 
## Valor de x igual a  -4.999732
## Iteraçao  511 : 
## Valor de x igual a  -4.999737
## Iteraçao  512 : 
## Valor de x igual a  -4.999742
## Iteraçao  513 : 
## Valor de x igual a  -4.999748
## Iteraçao  514 : 
## Valor de x igual a  -4.999753
## Iteraçao  515 : 
## Valor de x igual a  -4.999758
## Iteraçao  516 : 
## Valor de x igual a  -4.999762
## Iteraçao  517 : 
## Valor de x igual a  -4.999767
## Iteraçao  518 : 
## Valor de x igual a  -4.999772
## Iteraçao  519 : 
## Valor de x igual a  -4.999776
## Iteraçao  520 : 
## Valor de x igual a  -4.999781
## Iteraçao  521 : 
## Valor de x igual a  -4.999785
## Iteraçao  522 : 
## Valor de x igual a  -4.99979
## Iteraçao  523 : 
## Valor de x igual a  -4.999794
## Iteraçao  524 : 
## Valor de x igual a  -4.999798
## Iteraçao  525 : 
## Valor de x igual a  -4.999802
## Iteraçao  526 : 
## Valor de x igual a  -4.999806
## Iteraçao  527 : 
## Valor de x igual a  -4.99981
## Iteraçao  528 : 
## Valor de x igual a  -4.999814
## Iteraçao  529 : 
## Valor de x igual a  -4.999817
## Iteraçao  530 : 
## Valor de x igual a  -4.999821
## Iteraçao  531 : 
## Valor de x igual a  -4.999825
## Iteraçao  532 : 
## Valor de x igual a  -4.999828
## Iteraçao  533 : 
## Valor de x igual a  -4.999832
## Iteraçao  534 : 
## Valor de x igual a  -4.999835
## Iteraçao  535 : 
## Valor de x igual a  -4.999838
## Iteraçao  536 : 
## Valor de x igual a  -4.999841
## Iteraçao  537 : 
## Valor de x igual a  -4.999845
## Iteraçao  538 : 
## Valor de x igual a  -4.999848
## Iteraçao  539 : 
## Valor de x igual a  -4.999851
## Iteraçao  540 : 
## Valor de x igual a  -4.999854
## Iteraçao  541 : 
## Valor de x igual a  -4.999857
## Iteraçao  542 : 
## Valor de x igual a  -4.99986
## Iteraçao  543 : 
## Valor de x igual a  -4.999862
## Iteraçao  544 : 
## Valor de x igual a  -4.999865
## Iteraçao  545 : 
## Valor de x igual a  -4.999868
## Iteraçao  546 : 
## Valor de x igual a  -4.99987
## Iteraçao  547 : 
## Valor de x igual a  -4.999873
## Iteraçao  548 : 
## Valor de x igual a  -4.999876
## Iteraçao  549 : 
## Valor de x igual a  -4.999878
## Iteraçao  550 : 
## Valor de x igual a  -4.99988
## Iteraçao  551 : 
## Valor de x igual a  -4.999883
## Iteraçao  552 : 
## Valor de x igual a  -4.999885
## Iteraçao  553 : 
## Valor de x igual a  -4.999888
## Iteraçao  554 : 
## Valor de x igual a  -4.99989
## Iteraçao  555 : 
## Valor de x igual a  -4.999892
## Iteraçao  556 : 
## Valor de x igual a  -4.999894
## Iteraçao  557 : 
## Valor de x igual a  -4.999896
## Iteraçao  558 : 
## Valor de x igual a  -4.999898
## Iteraçao  559 : 
## Valor de x igual a  -4.9999
## Iteraçao  560 : 
## Valor de x igual a  -4.999902
## Iteraçao  561 : 
## Valor de x igual a  -4.999904
## Iteraçao  562 : 
## Valor de x igual a  -4.999906
## Iteraçao  563 : 
## Valor de x igual a  -4.999908
## Iteraçao  564 : 
## Valor de x igual a  -4.99991
## Iteraçao  565 : 
## Valor de x igual a  -4.999912
## Iteraçao  566 : 
## Valor de x igual a  -4.999913
## Iteraçao  567 : 
## Valor de x igual a  -4.999915
## Iteraçao  568 : 
## Valor de x igual a  -4.999917
## Iteraçao  569 : 
## Valor de x igual a  -4.999919
## Iteraçao  570 : 
## Valor de x igual a  -4.99992
## Iteraçao  571 : 
## Valor de x igual a  -4.999922
## Iteraçao  572 : 
## Valor de x igual a  -4.999923
## Iteraçao  573 : 
## Valor de x igual a  -4.999925
## Iteraçao  574 : 
## Valor de x igual a  -4.999926
## Iteraçao  575 : 
## Valor de x igual a  -4.999928
## Iteraçao  576 : 
## Valor de x igual a  -4.999929
## Iteraçao  577 : 
## Valor de x igual a  -4.999931
## Iteraçao  578 : 
## Valor de x igual a  -4.999932
## Iteraçao  579 : 
## Valor de x igual a  -4.999933
## Iteraçao  580 : 
## Valor de x igual a  -4.999935
## Iteraçao  581 : 
## Valor de x igual a  -4.999936
## Iteraçao  582 : 
## Valor de x igual a  -4.999937
## Iteraçao  583 : 
## Valor de x igual a  -4.999939
## Iteraçao  584 : 
## Valor de x igual a  -4.99994
## Iteraçao  585 : 
## Valor de x igual a  -4.999941
## Iteraçao  586 : 
## Valor de x igual a  -4.999942
## Iteraçao  587 : 
## Valor de x igual a  -4.999943
## Iteraçao  588 : 
## Valor de x igual a  -4.999945
## Iteraçao  589 : 
## Valor de x igual a  -4.999946
## Iteraçao  590 : 
## Valor de x igual a  -4.999947
## Iteraçao  591 : 
## Valor de x igual a  -4.999948
## Iteraçao  592 : 
## Valor de x igual a  -4.999949
## Iteraçao  593 : 
## Valor de x igual a  -4.99995
## Iteraçao  594 : 
## Valor de x igual a  -4.999951
## Iteraçao  595 : 
## Valor de x igual a  -4.999952
 print(paste0("O mínimo local da função ocorre em: ", cur_x))
## [1] "O mínimo local da função ocorre em: -4.99995184903182"

Observe que o algoritmo convergiu bem, chegou em -4.9999, que é praticamente igual a solução analítica -5! Observe também que esse exemplo é só para fins didaticos, em casos reais a função de custo é bem mais complicada e não conseguimos uma solução analitica. Era isso, espero que tenha compreendido a intuição de um dos principais algoritmos de otimização de ML. Não foi usado nenhuma mágica, apenas matemática e computação.

Keep calm and analysing data!