Professional Documents
Culture Documents
Otimizacao Nao Linear
Otimizacao Nao Linear
net/publication/358891652
CITATIONS READS
0 3,991
1 author:
Alexandre L M Levada
Universidade Federal de São Carlos
130 PUBLICATIONS 387 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Alexandre L M Levada on 27 February 2022.
Esta apostila é uma tentativa de organizar as minhas notas de aula utilizadas durante a oferta da
disciplina Otimização Matemática, para os alunos da Engenharia de Computação da Universidade
Federal de São Carlos no ano de 2019. O conteúdo do texto engloba apenas aspectos relacionados a
Programação Não Linear. A apostila de Programação Linear, a qual pode ser considerada um
material introdutório a esta apostila, pode ser encontrada em:
https://www.researchgate.net/publication/358582117_Introducao_a_Programacao_Linear
Iniciamos a disciplina com uma breve introdução à expansão de Taylor, que é um ferramental
matemático muito importante na otimização matemática. Ela tem como objetivo aproximar funções
não lineares arbitrárias por polinômios. Mas porque aproximar por polinômios? Facilita a
tratabilidade matemática no cálculo diferencial e integral (derivar e integrar polinômios é bem mais
fácil!). De modo geral, a intuição é que a derivada da função em um ponto x0 é o coeficiente angular
da reta tangente no ponto (inclinação), que define uma aproximação linear para a função em x0.
Podemos generalizar e obter aproximações de segunda, terceira e ordens superiores.
Na segunda aula, discutimos aspectos básicos da otimização irrestrita 1D. O objetivo da otimização
irrestrita unidimensional é otimizar uma função arbitrária f(x) de R em R. A condição necessária
para um ponto x* ser extremo é f'(x) = 0 (derivada no ponto é nula). Se a segunda derivada f''(x) é
negativa, então temos um ponto de máximo. Se a segunda derivada f''(x) é positiva, então temos um
ponto de mínimo. Se a segunda derivada f''(x) é nula, então temos um ponto de inflexão (mudança
na concavidade). Apresentamos uma breve introdução aos métodos da Bissecção e de Newton.
Na quarta aula, estudaremos o método numérico mais conhecido para otimização não linear: o
gradiente descendente. Trata-se de um método iterativo para otimizar funções que são duas vezes
diferenciáveis continuamente. A ideia básica consiste em gerar pontos sucessivos na direção do
gradiente da função (direção de maior crescimento) em problemas de maximização ou na direção do
negativo do gradiente em problemas de minimização. A condição de parada para o método ocorre
quando o gradiente torna-se o vetor nulo (ponto extremo). A otimalidade global não pode ser
garantida a menos que se prove com antecedência que a função em questão é côncava ou convexa.
Em casos de convergência a máximos/mínimos locais, a solução depende fortemente da
inicialização do método (chute inicial). O método do gradiente descendente tornou-se muito
conhecido pois é a base para o treinamento das redes neurais profundas, sendo utilizado na
minimização da função de erro, que contém milhares de variáveis (pesos sinápticos da rede).
Na oitava aula generalizaremos o método do gradiente conjugado para que seja possível otimizar
funções não lineares arbitrárias. Um problema do método do gradiente conjugado é que a função
objetivo deve ser sempre quadrática. Em muitos problemas isso não ocorre. Veremos o método do
gradiente conjugado generalizado, também conhecido como não linear, que pode ser utilizado na
otimização de funções arbitrárias, não apenas quadráticas. A principal diferença aqui é que a a
matriz A não é explícita nessas funções objetivo, de modo que o método do gradiente conjugado
tradicional requer alguns ajustes. Deve se ter em mente que para funções não lineares arbitrárias,
isto é, que não são quadráticas, o número máximo de iterações do método generalizado não é
limitado a n (número de variáveis do problema de otimização). Em outras palavras, a convergência
pode não ser tão rápida quanto no problema de otimização quadrática.
Por fim, na última aula, estudaremos os problemas de otimização não lineares com restrições de
desigualdade. Apresentaremos as condições de KKT (Karush-Kuhn-Tucker) para a obtenção da
solução ótima neste tipo de problema. A ideia consiste em generalizar os multiplicadores de
Lagrange, de modo a limitar a solução desejada à região viável, através da ativação ou não das
restrições.
De modo geral, trata-se de um curso introdutório e com foco no funcionamento dos método
computacionais, porém ainda sim mantendo um nível razoável de formalismo matemático. Desejo a
todos bons estudos!
Aula 1: O Polinômio de Taylor
Seja f(x) uma função não linear. A reta tangente no ponto (x0, y0) é dada por:
y− y 0 =m(x−x 0)
y− y 0 =f '( x0 )( x−x 0 )
f (x 0)=f (4)=2
1 −1 /2 1
f ' (x)= x =
2 2 √x
1
e então temos f ' (4)= .
4
1
f ( x)≈2+ ( x−4)
4
0.3
f (4.3)=2+ =2.075 (valor da aproximação linear)
4
de modo que temos uma boa aproximação. Mas seria possível melhorar ainda mais? Sim, se
utilizarmos o polinômio de Taylor de 2a ordem, dado por:
1 2
P2 (x)=f ( x 0 )+ f ' ( x0 )(x−x 0 )+ f ' '( x 0 )(x−x 0)
2
1 −3 / 2 1
f ' ' ( x)=− x =−
4 4√x
3
1
de modo que f ' ' (4)=−
32
1 1
P2 (x)=2+ ( x−4)− (x−4)2
4 64
o que nos leva ao seguinte valor no ponto x = 4.3: P2 (4.3)=2.073537 (muito mais próximo)
1 1 1
Pk (x)=f ( x0 )+f ' (x 0)(x−x 0 )+ f ' '( x0 )( x−x 0 )2+ f (3 ) ( x 0)( x−x 0 )3+ ...+ f (k) (x 0 )(x−x 0)k
2! 3! k!
onde f (k) denota a k-ésima derivada da função.
P2 (0.3)=1.345
o que é muito próximo do valor real de e 0.3=1.34985 . Note que no limite, quando k →∞ , a
aproximação torna-se exata e chegamos na identidade:
x
∞
xk
e =∑
k =0 k!
Ex: Calcule o polinômio de Taylor de ordem k das funções f(x) = sen(x) e g(x) = cos(x) em x0 = 0.
Considere uma função de uma única variável f: R → R. Sabemos que a aproximação de Taylor de
ordem 2 de f(x) em torno de um ponto x0 é dada por:
1 2
f (x)=f (x 0 )+ f '( x 0 )(x−x 0)+ f ' ' (x 0 )( x−x 0)
2
T 1 T
f ( ⃗x )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 ) ( ⃗x −⃗x 0 )+ ( ⃗x −⃗x 0 ) H ( ⃗x 0)( ⃗x −⃗x 0)
2
De forma alternativa podemos expressar a equação anterior de outra maneira. Defina o vetor
⃗
h=⃗x −⃗x 0 . Então, note que ⃗x =⃗x 0 + ⃗
h e a expressão fica:
T 1 T
f ( ⃗x 0+ ⃗
h )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 ) ⃗h + ⃗h H ( ⃗x 0 ) ⃗h
2
que é a forma utilizada nos teoremas que serão vistos nas aulas de otimização no R n. Portanto, as
duas formas são totalmente equivalentes.
Aula 2: Otimização irrestrita 1D
Método da Bissecção
Um dos métodos mais antigos e simples para maximizar o valor de uma função num intervalo.
Seja f(x) uma função côncava, ou seja, f’’(x) < 0 para todo x e seja x* o máximo de f(x). Então,
note que:
Inicialização
Iterações
1. Calcule f’(x) em x = x’
2. Se f ' (x)≥0 , faça x=x '
3. Se f ' (x)≤0 , faça x=x '
x+ x
4. Calcule x ' =
2
5. Repita os passos de 1 a 4 até que x−x≤2 ϵ
* Pontos positivos e negativos do método da bissecção
Note que no ponto x = 0, f’(x) > 0 e que no ponto x = 1, f’(x) < 0. Sendo assim, temos x=0 e
x=1 .
Como a segunda derivada é negativa para todo x, temos que a função em questão é côncava e,
portanto, podemos aplicar o método da bissecção.
1a iteração: x’ = (0 + 1) / 2 = 0.5
f’(x’) = 10.125 > 0
x=0.5
Iremos omitir os cálculos restantes devido ao elevado número de passos necessários para a
convergência, mas a solução ótima é x* = 0.83762.
Análise da convergência
1
lim =0
k→∞ 2k
lim |I k|=0
k→∞
lim ϵk =0
k→∞
A pergunta que resta é: quão rápido xk converge para a solução ótima x*?
ou seja,
|ϵ k+1|≤c|ϵk|
Isso significa que o erro no próximo passo depende linearmente do erro no passo atual.
ou seja,
2
|ϵ k+1|≤c ϵk
Isso significa que o erro no próximo passo depende do quadrado do erro no passo atual.
Note que quando estamos nos aproximando da solução ótima, o erro é pequeno. Então para valores
pequenos (tipicamente menores que 1), a função quadrática define um menor limite superior.
ϵ k ≤|I k|
Então, no pior caso temos:
x 0−x 0 1 x 0− x0 1
ϵ k =|I k|= k
= = ϵ k−1
2 2 2k−1 2
o que indica uma convergência linear, o que é uma taxa de convergência lenta.
O Método de Newton
Método matemático para encontrar raízes de uma função f(x), ou seja, encontrar x tal que f(x) = 0
Ideia: a partir de x0 aproximar a função de maneira linear (reta tangente) e computar x k+1 como o
ponto que intercepta o eixo x, repetindo o processo até atingir o zero da função.
y− y 0 =m(x−x 0)
Se a reta é tangente a curva ela tem coeficiente angular m=f ' ( x 0) (derivada no ponto):
Desejamos encontrar o valor de x em que a reta tangente intercepta a abscissa (eixo horizontal):
f (x 0 )
+ x−x 0=0
f '( x 0 )
f ( x0 )
x=x 0−
f ' (x0 )
Como o processo é iterativo (repete-se várias vezes), temos a seguinte relação de recorrência:
f ( xk)
x k+1=x k −
f ' ( xk )
onde o valor inicial x0 é escolhido arbitrariamente (não pode ser ponto em que derivada é nula).
A pergunta que surge é: mas como podemos utilizar o método de Newton para maximizar uma
função?
maximizar f(x)
f ' ( xk )
x k+1=x k −
f ' ' (x k )
Seja f(x) uma função contínua com primeira e segunda derivadas definidas e com raiz α .
Podemos utilizar o polinômio de Taylor de 2 a ordem para aproximar f(x) em uma vizinhança de
α como:
1 2
f ( α )=f ( x k )+ f ' (x k )( α −x k )+ f ' ' ( x k )( α −x k ) =0
2
f ( xk)
x k+1=x k −
f ' ( xk )
o que nos leva a:
f ' ' (x k ) 2
α −x k+1=− ( α −x k )
2 f ' (x k )
|f ' ' (x k )| 2
|ϵ k+1|=− ϵ
2|f ' (x k )| k
Algoritmo
Inicialização
a) Defina ϵ <10−3
b) Escolha x0
Iterações
f ' ( xk )
x k+1=x k −
f ' ' (x k )
1−x 3−x 5
x k+1=x k +
3 x 2 +5 x 4
Aula 3: Otimização multivariada
Até o presente momento, estamos estudando como maximizar/minimizar funções de uma única
variável. Porém, para lidar com funções de múltiplas variáveis, é necessário estender o ferramental
matemático empregado até aqui, principalmente o conceito de primeira e segunda derivadas.
Def: Considere uma função f : Rn → R , ou seja, f (⃗x ) retorna um valor real e ⃗x =[x 1 ,... , x n]
é um vetor n-dimensional. O vetor gradiente dessa função no ponto ⃗x é dado pelas derivadas
parciais em relação a cada uma das variáveis x i , i = 1, 2,…, n.
∂f ∂f ∂f
∇ f ( ⃗x )=
[ ,
∂ x1 ∂ x2
, ... ,
∂ xn ]
O vetor gradiente é uma generalização da primeira derivada, sendo o vetor que aponta para a
direção de maior crescimento da função no ponto ⃗x (maior taxa de variação). Note que se a
magnitude do vetor gradiente, ‖∇ f‖ , é elevada, estamos em uma região de grande variação da
função.
Def: Considere uma função f : Rn → R , ou seja, f (⃗x ) retorna um valor real e ⃗x =[x 1 ,... , x n]
é um vetor n-dimensional. A matriz Hessiana dessa função no ponto ⃗x é dada pelas derivadas
parciais de segunda ordem em relação a cada uma das variáveis x i , i = 1, 2,…, n.
2 2 2
∂ f ∂ f ∂ f
[ ]
2
...
∂ x1 ∂ x1 ∂ x2 ∂ x1 ∂ xn
2 2 2
∂ f ∂ f ∂ f
H (⃗x )= ∂ x 2 ∂ x1 2
...
∂ x2 ∂ x2 ∂ xn
⋮ ⋮ ⋱ ⋮
2 2 2
∂ f ∂ f ∂ f
...
∂ xn ∂ x1 ∂ xn ∂ x2 ∂ x 2n
A matriz Hessiana é simétrica, uma vez que a ordem da diferenciação não importa.
Uma definição importante é a de ponto extremo. Podemos definir formalmente um ponto extremo
conforme a seguir.
Def: Um ponto extremo de f (⃗x ) define um máximo ou mínimo da função. Um ponto ⃗x é um
máximo se:
para todo ⃗ h=[h 1 , ... ,h n ] em que |hi| para todo i é suficientemente pequeno. Em outras
palavras, ⃗x é máximo se todo ponto na vizinhança não excede f (⃗x ) . De modo análogo, ⃗x
é mínimo se f (⃗x + ⃗h)≥f (⃗x ) , para todo ⃗
h=[h 1 , ... ,h n ] .
Lembrando que funções não côncavas/convexas admitem máximos/mínimos locais, sendo que a
obtenção do máximo/mínimo global não é sempre garantida.
Considere uma função de uma única variável f: R → R. Sabemos que a aproximação de Taylor de
ordem 2 de f(x) em torno de um ponto x0 é dada por:
1 2
f ( x)=f ( x 0 )+ f ' (x 0 )( x−x 0)+ f ' '( x 0 )(x−x 0)
2
1
f ( ⃗x )=f ( ⃗x 0 )+ ∇ f (⃗x 0 )T ( ⃗x −⃗x 0 )+ ( ⃗x −⃗x 0 )T H ( ⃗x 0)( ⃗x −⃗x 0)
2
De forma alternativa podemos expressar a equação anterior de outra maneira. Defina o vetor
⃗
h=⃗x −⃗x 0 . Então, note que ⃗x =⃗x 0 + ⃗
h e a expressão fica:
1
h )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 )T ⃗h + ⃗hT H ( ⃗x 0 )⃗h
f ( ⃗x 0+ ⃗
2
que é a forma utilizada nos teoremas que serão vistos nas aulas de otimização no R n. Portanto, as
duas formas são totalmente equivalentes.
Teorema: Uma condição necessária para ⃗x 0=[ x 1 ,... , x n] ser um ponto extremo de f (⃗x ) é que:
∇ f (⃗x 0 )=0
ou seja, o gradiente no ponto deve ser nulo. Em outras palavras, se o gradiente da função em um
determinado ponto ⃗x 0 é nulo, então esse ponto é um extremo da função (máximo/mínimo/sela) .
Prova:
T 1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )=∇ f ( x⃗0 ) ⃗h + ⃗h H ( x⃗0 ) ⃗h
2
Mostraremos, por contradição, que ∇ f ( x⃗0 ) deve desaparecer em um ponto de mínimo x⃗0 ,
pois supondo que não desapareça, então para uma variável x j específica, a seguinte condição
será válida:
∂f ( x⃗0) ∂f ( x⃗0)
<0 ou >0
∂xj ∂xj
Em outras palavras, se o gradiente não é nulo, significa que ao menos uma de suas componentes é
positiva ou negativa (aqui consideramos a componente referente à variável x j ). Selecionando
h j com o sinal adequado (basta tomar o sinal oposto da derivada anterior), é sempre possível ter:
∂ f ( x⃗0)
hj <0
∂ xj
Este resultado contradiz a premissa de que x⃗0 é um ponto de mínimo. Assim, ∇ f ( x⃗0 ) deve
ser nulo. Uma demonstração similar pode ser realizada para o caso de maximização.
A seguir iremos definir o que é uma matriz positiva semi-definida (negativa semi-definida).
Def: Uma matriz H é positiva semi-definida (negativa semi-definida) se uma das seguintes
condições é satisfeita:
1. ∀ x ,⃗x T H ⃗x ≥0 ( ∀ x ,⃗x T H ⃗x ≤0 )
2. Todo autovalor λ de H é maior ou igual (menor ou igual) a zero.
3. Todas as submatrizes principais possuem determinante maior ou igual (menor ou igual) a zero.
O seguinte resultado fornece condições suficientes para um ponto ser considerado extremo.
Teorema: A condição suficiente para um ponto estacionário x⃗0 ser um extremo (máximo ou
mínimo) é que a matriz Hessiana H ( x⃗0) (derivadas parciais de segunda ordem) satisfaça as
seguintes condições:
Em outras palavras, temos que se a matriz Hessiana é positiva (negativa) semi-definida, então
tempos um ponto extremo é mínimo (máximo).
Prova:
T 1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )=∇ f ( x⃗0 ) ⃗h + ⃗h H ( x⃗0 ) ⃗h
2
Dado que x⃗0 é um ponto estacionário, então o gradiente é nulo, ou seja, ∇ f ( x⃗0 )=0 . Assim,
temos:
1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )= ⃗h H ( x⃗0) ⃗
h (*)
2
fazendo com que a diferença no lado esquerdo de (*) seja obrigatoriamente positiva. Portanto, para
x⃗0 ser um ponto de mínimo, deve ser verdade que:
1 ⃗T
h H ( x⃗0 ) ⃗
h ≥0
2
ou seja, a matriz Hessiana H ( x⃗0) deve ser positiva semi-definida. Uma prova semelhante para o
caso de maximização mostra que a matriz Hessiana deve ser negativa semi-definida. Em geral, se a
matriz Hessiana H ( x⃗0) for indefinida, x⃗0 deve ser um ponto de inflexão (sela).
Sabemos que a condição necessária para termos um ponto extremo é dada por:
∂f ∂f ∂f
∇ f ( ⃗x )=
[ , ,
∂ x1 ∂ x2 ∂ x3 ]
=[ 0 , 0 , 0]
1
Da equação (I) temos que x 1=
2
x 3=2 x 2
2 4
Substituindo em (III), chegamos em x 2= , o que nos leva a x 3= .
3 3
1 2 4
Portanto, o ponto extremo é
*
x=
[ , ,
2 3 3 ] . É ponto de máximo, mínimo, ou inflexão?
2 2 2
∂ f ∂ f ∂ f
=0 =0 =1
∂ x1 ∂ x2 ∂ x1 ∂ x3 ∂ x2∂ x3
−2 0 0
*
[
H (⃗x )= 0 −2 1
0 1 −2 ]
Precisamos checar se a matriz Hessiana no ponto extremo é positiva semi-definida ou negativa
semi-definida. Há várias formas de verificar isso, mas aqui iremos optar por encontrar os
autovalores de H. Lembrando que os autovalores de um operador H são dados pela solução da
seguinte equação:
det ( H− λ I)=0
−2−λ 0 0
H− λ I = 0
0 [
−2− λ
1
1
−2− λ ]
Aplicando a regra de Sarrus, podemos calcular o determinante como:
−2− λ 0 0 −2−λ 0
det ( H− λ I )=
| 0
0
−2−λ
1
1
−2−λ
0
0 | 3
−2−λ =(−2− λ ) −(−2− λ )=0
1 |
Portanto, os autovalores são as raízes do polinômio característico:
Portanto, como todos os autovalores são negativos, H é negativa semi-definida e o ponto extremo é
um máximo.
Exercícios
[0, 3, 1]
[0, 1, -1]
[1, 2, 0]
[2, 1, 1]
[2, 3, -1]
Em caso positivo, classifique cada um dos extremos como mínimo, máximo ou inflexão utilizando a
matriz Hessiana.
O método analítico visto nesta aula é uma ferramenta matemática muito importante em otimização
matemática. Porém, há um grave problema: a solução analítica nem sempre existe!
e−x + cos(x 1 )
[ =0
][]
2
−x1 e + sen(x 2) 0
−x 2
O método analítico visto nas aulas passadas é uma ferramenta matemática muito importante em
otimização matemática. Porém, há um grave problema: a solução analítica nem sempre existe!
e−x + cos( x 1 ) = 0
[ ][]
2
−x1 e + sen( x 2) 0
−x 2
Ex: Resolver o problema de maximização a seguir com o método analítico e comparar com o
1
resultado obtido pelo gradiente ascendente com α = e solução inicial x⃗0=[1 , 1] .
4
∂f ∂f
∇ f ( ⃗x )= ,
[
∂ x1 ∂ x2 ]
=[ 0 , 0 ]
1 4 1 14 16 4 2 8 32 28 42 42
f ( ⃗x* )=f (1/3 , 4 /3)=4 +6 −2 −2 −2 = +8− − − = − = =4.666666
3 3 9 33 9 3 9 9 9 3 9 9
H (⃗x )=[−4
−2 −4 ]
−2
|−4−
−2
λ −2 =0
−4− λ |
o que nos leva a (−4− λ )2−4=0 . Desenvolvendo o quadrado, chega-se na equação quadrática:
λ 2+ 8 λ +12=0
∂f
∇ f (⃗x )=
[ ][
∂ x1
∂f
∂ x2
=
4−4 x1−2 x 2
6−2 x 1−4 x 2 ]
1
Iremos considerar α = e x⃗0=[1 , 1] .
4
k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1 1
x⃗1=[1 ,1]+ [−2, 0]= , 1
4 2 [ ]
k = 2: ∇ f ( x⃗1 )=[0 , 1]
1 1 1 5
[ ]
x⃗2= , 1 + [0 , 1]= ,
2 4 2 4 [ ]
1
k = 3: [ ]
∇ f ( x⃗2 )= − , 0
2
1 5 1 1 3 5
[ ] [
x⃗3= , + − ,0 = ,
2 4 4 2 8 4 ][ ]
1
k = 4: [ ]
∇ f ( x⃗3 )= 0 ,
4
1 5 1 1 3 21
[ ] [
x⃗4= , + 0 , = ,
2 4 4 4 8 16 ][ ]
1
k = 5: [ ]
∇ f ( x⃗4 )= − , 0
8
3 21 1 1 11 21
[ ] [
x⃗5= , + − ,0 =
8 16 4 8
,
][
32 16 ]
1
k = 6: [ ]
∇ f ( x⃗5 )= 0 ,
16
11 21 1 1 11 85
x⃗6=
[ ] [
, + 0,
32 16 4 16
= ,
32 64 ][ ]
…
1 4
x *= [ ]
, =[0.333 , 1.333]
3 3
11 85
x⃗6=
[ ] ,
32 64
=[0.343 ,1.328]
Uma das limitações é justamente a lenta convergência quando nos aproximamos da solução ótima.
Mas e se aumentarmos o tamanho do passo? Vamos refazer os cálculos do início considerando um
1
passo de tamanho α = .
2
k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1
x⃗1=[ 1, 1 ] + [−2 , 0 ]=[0 , 1]
2
k = 2: ∇ f ( x⃗1 )=[2 , 2]
1
x⃗2=[ 0 ,1 ] + [ 2 ,2 ]=[2 ,1]
2
k = 3: ∇ f ( x⃗2 )=[−6 ,−2]
1
x⃗3=[ 2 ,1 ] + [ −6 ,−2 ]=[−1 ,0 ]
2
k = 4: ∇ f ( x⃗3 )=[8 , 8]
1
x⃗4= [−1 , 0 ] + [ 8 ,8 ] =[3 , 4 ]
2
Note que a magnitude do vetor gradiente cresce de maneira descontrolada! Isso significa que o
método está divergindo ao invés de convergir! Em outras palavras, temos de escolher o tamanho do
passo de maneira muito cautelosa, uma vez que valores acima de um determinado limiar podem
fazer o método divergir.
A regra básica nos diz que se o tamanho do passo for fixo ao longo de todas as iterações, devemos
escolher um α suficientemente pequeno.
a) Ajuste adaptativo de α
1 2
Enquanto f ( ⃗x −∇ f ( ⃗x ))> f ( ⃗x )− α‖∇ f ( ⃗x )‖
2
Faça α =α β
b) Line search
Algoritmo:
Primeiramente, lembre que a expansão de Taylor de segunda ordem no caso 1D ao redor do zero é
dada por:
1 2
f (x)=f (0)+ f ' (0) x+ f ' ' (0) x
2
d d
f ( x⃗k − η ∇ f ( x⃗k ))=f ' ( x⃗k − η ∇ f ( x⃗k )) ( x⃗ −η ∇ f ( x⃗k ))
dη dη k
d T
f ( x⃗k − η ∇ f ( x⃗k ))=−∇ f ( x⃗k − η ∇ f ( x⃗k )) ∇ f ( x⃗k )
dη
d
[ dη ] T
f ( x⃗k −η ∇ f ( x⃗k )) =−∇ f ( x⃗k ) ∇ f ( x⃗k )
η=0
(- produto escalar do gradiente consigo mesmo)
2
d
[ dη
2
f ( x⃗k − η ∇ f ( x⃗k ))
] η=0
T 2
=∇ f ( x⃗k ) ∇ f ( x⃗k )∇ f ( x⃗k )
onde ∇ 2 f ( x⃗k )=H ( x⃗k ) é, por definição, a matriz Hessiana. Assim, temos nossa expansão de
Taylor de segunda ordem, dada por:
η2
f ( x⃗k −η ∇ f ( x⃗k ))≈f ( x⃗k )−η ∇ f ( x⃗k ) ∇ f ( x⃗k )+ ∇ f ( x⃗k )T H ( x⃗k ) ∇ f ( x⃗k )
T
2
Portanto, o valor ótimo η*k que minimiza a função pode ser obtido derivando a aproximação da
função e igualando o resultado a zero:
d
f ( x⃗k − η ∇ f ( x⃗k ))≈−∇ f ( x⃗k )T ∇ f ( x⃗k )+ η ∇ f ( x⃗k )T H ( x⃗k ) ∇ f ( x⃗k )=0
dη
T
* −∇ f ( x⃗k ) ∇ f ( x⃗k )
η= T
(gradiente ascendente)
∇ f ( x⃗k ) H ( x⃗k )∇ f ( x⃗k )
Em resumo, o método do gradiente descendente com Line search é dado pelo algoritmo a seguir.
Algoritmo
O resultado a seguir mostra um padrão interessante no método gradiente descendente com Line
Search: os vetores gradientes em duas iterações sucessivas do método são sempre ortogonais.
Teorema: No método iterativo gradiente descendente com Line Search, a direção de dois sucessivos
gradientes é ortogonal.
Prova:
Seja f : Rn → R uma função arbitrária, com mínimo em ⃗x * . Pelo gradiente descendente, temos:
*
⃗x k+1= x⃗k −ηk ∇ f ( x⃗k )
*
De acordo com a estratégia Line Search, nk =arg min f (⃗x k +1) . A condição necessária para a
minimização é:
d
f ( ⃗x k+1 )=0
dη
o que implica em:
d
f ' ( ⃗x k+1 ) ⃗x =0
d η k +1
d
∇ f ( ⃗x k +1)T ( x⃗ − η ∇ f ( x⃗k ))=0
d ηk k k
indicando que os dois gradientes sucessivos são ortogonais (produto escalar é zero)
2 2
Ex: Encontre o ponto extremo da função f (x1 , x2 )=2 x 1 x 2+ 2 x 2−x 1−2 x 2 . É um ponto de
máximo ou de mínimo?
Condição necessária
∇ f (x 1 , x 2 )=0
2 x 2−2 x1 0
[ 2 x 1+ 2−4 x2 ] []
=
0
H ( x⃗k )=
[−22 −42 ]
Os autovalores são as soluções da equação característica:
det ( H− λ I)=0
Calculando o determinante:
2
|−2−2 λ −4− λ | 2
=(−2−λ )(−4− λ )−4=0→ λ +6 λ + 4=0
Os autovalores são:
−6+ √ 20
λ 1= =−0,764
2
−6− √20
λ 2= =−5,236
2
Como ambos são negativos, H é negativa semi-definida e portanto o ponto extremo é um máximo.
2 x 2−2 x1
∇ f ( x⃗k )=
[ 2 x 1+ 2−4 x2 ]
Como a matriz Hessiana é constante, temos H ( x⃗k )=
[−22 −42 ] para todo k
k = 0: x⃗0=[0 , 0]
∇ f ( x⃗0 )T =[0 , 2]
T
−∇ f ( x⃗0 ) ∇ f ( x⃗0)
η 0= T
∇ f ( x⃗0) H ( x⃗0 )∇ f ( x⃗0)
0
η0=
− [0 , 2]
2 [] =−
4
=
−4 1
=
−2 2 0 4 −16 4
[0 , 2] [
2 −4 2 ][ ] [ ]
[ 0 , 2]
−8
1 1 1
4 [ ][ ]
x⃗1= x⃗0+ η0 ∇ f ( x⃗0 )=[ 0 , 0 ] + [ 0 ,2 ] =[ 0 ,0 ] + 0 , = 0 ,
2 2
1
k = 1: x⃗1= 0 ,
[ ]
2
∇ f ( x⃗1 )T =[1 , 0]
T
−∇ f ( x⃗1) ∇ f ( x⃗1 )
η1 = T
∇ f ( x⃗1) H ( x⃗1) ∇ f ( x⃗1 )
1
η1 =
−[ 1 , 0 ]
0 [] =
−1
=
−1 1
=
2 1 −2 2
[ 1 , 0] [
−2
2 −4 0 ][ ] [ ]
[1 , 0] −2
2
1 1 1 1
[ ] [ ]
x⃗2= x⃗1+ η1 ∇ f ( x⃗1)= 0 , + [ 1, 0 ] = ,
2 2 2 2
1 1
k = 2: x⃗2= ,
2 2[ ]
∇ f ( x⃗2 )T =[0 ,1]
T
−∇ f ( x⃗2) ∇ f ( x⃗2 )
η2 = T
∇ f ( x⃗2) H ( x⃗2) ∇ f ( x⃗2 )
0
η2 =
−[ 0 , 1 ]
1 []=
−1
=
−1 1
=
2 0 2 −4 4
[ 0 , 1] −2
[
2 −4 1 ][ ] [ ]
[ 0 ,1 ]
−4
1 1 1 1 3
x⃗3= x⃗2+ η2 ∇ f ( x⃗2)=
[ ] [ ]
, + [ 0 ,1 ] = ,
2 2 4 2 4
1 3
k = 3: x⃗3=
[ ],
2 4
1
∇ f ( x⃗3 )T =
2 [ ]
,0
T
−∇ f ( x⃗3) ∇ f ( x⃗3)
η3 = T
∇ f ( x⃗3) H ( x⃗3 ) ∇ f ( x⃗3 )
1/2
η3 =
[ ]
− [ 1/2 , 0 ]
0
=
−1 /4
=
−1 /4 1
=
2 1 −1/2 2
[ 1/2 , 0 ] −2
[ ][ ]
2 −4 0 [ ]
/2 [ 1/2 ,0 ] −1
1
1 3 1 1 3 3
[ ] [ ][ ]
x⃗4= x⃗3 + η3 ∇ f ( x⃗3 )= , +
2 4 2 2
,0 = ,
4 4
3 3
k = 4: x⃗4=
[ ]
,
4 4
1
[ ]
∇ f ( x⃗4 )T = 0 ,
2
T
−∇ f ( x⃗4 ) ∇ f ( x⃗4 )
η 4= T
∇ f ( x⃗4 ) H ( x⃗4 )∇ f ( x⃗4 )
0
η 4=
[ ]
−[ 0 ,1 /2 ]
1/2
=
−1/4
=
−1/4 1
=
−2 2 0 1 −1 4
[ 0 ,1 /2 ] [ ][ ]
2 −4 1/2 [ ] [ 0 ,1/2 ]
−2
3 3 1 1 3 7
[ ] [ ][ ]
x⃗5= x⃗4 + η4 ∇ f ( x⃗4 )= , + 0 , = ,
4 4 4 2 4 8
3 7
k = 5: x⃗5=
[ ],
4 8
1
∇ f ( x⃗5 ) =
T
4 [ ]
,0
T
−∇ f ( x⃗5) ∇ f ( x⃗5)
η5 = T
∇ f ( x⃗5) H ( x⃗5 ) ∇ f ( x⃗5 )
− [ 1/4 , 0 ] 1 /4
η5 =
[ ] = −1/16 = −1/16 = 1
0
−1/8 2
[ 1/4 , 0 ] [−2 2 ][1 /4 ] [ 1/ 4 ,0 ] [−1 /2 ]
2 −4 0 1 /2
5 5 [ 34 78 ] 12 [ 14 , 0]=[ 78 , 78 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , +
6 5
7 7
k = 6: x⃗6=
[ ]
,
8 8
1
∇ f ( x⃗6 )T = 0 ,
[ ] 4
−∇ f ( x⃗6 )T ∇ f ( x⃗6)
η6 =
∇ f ( x⃗6)T H ( x⃗6 )∇ f ( x⃗6)
0
η6 =
[ ] = −1/16 =−1/16 = 1
− [ 0 , 1/4 ]
1/4
−1/4 4
[ 0 , 1/4 ] [−2 2 ][ 0 ] [ 0 , 1/ 4 ] [1 /2 ]
2 −4 1 /4 −1
6 6 [ 78 78 ] 14 [ 14 ] [ 78 1516 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , + 0 , = ,
7 6
7 15
k = 7: x⃗7=
[ ,
8 16 ]
1
∇ f ( x⃗7 ) =
T
8
,0
[ ]T
−∇ f ( x⃗7 ) ∇ f ( x⃗7)
η7 = T
∇ f ( x⃗7) H ( x⃗7 )∇ f ( x⃗7)
1/8
η7 =
− [ 1/8 , 0 ]
[ ]
0
=
−1/64
=
−1 /64 1
=
2 1/8 −1/32 2
[ 1/8 , 0 ] −2
[ ][ ]
2 −4 0 [ ] [ 1/8 ,0 ] −1 /4
1 /4
7 15 1 1 15 15
[ ] [ ][ ]
x⃗8= x⃗7 + η7 ∇ f ( x⃗7 )= ,
8 16 2 8
+ ,0 = ,
16 16
Note que nessa iteração a solução já está bem próxima da solução ótima ⃗x *=[1 ,1] .
É natural nos perguntarmos em que condições o método do gradiente descendente converge para a
solução ótima. Além disso, qual é a taxa de convergência do método? Quando o método é mais
rápido? Essas perguntas serão respondidas na próxima aula, onde iremos estudar garantias teóricas
para a convergência do método do gradiente descendente.
Aula 5: Convergência do gradiente descendente/ascendente
Em outras palavras, são funções bem comportadas, no sentido de que a diferença entre os gradientes
é sempre limitada superiormente (não tem variação abrupta dos gradientes). Uma implicação é que
pontos próximos (vizinhos no espaço) sempre terão gradientes similares.
L
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ‖⃗y −⃗x‖2
2
L
f ( ⃗x+ )≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗x+ −⃗x )+ ‖⃗x +−⃗x‖2
2
L
f ( ⃗x+ )≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗x −η ∇ f ( ⃗x )−⃗x )+ ‖⃗x − η ∇ f ( ⃗x )−⃗x‖2
2
+ η2 L
2 2
f (⃗x )≤f (⃗x )− η‖∇ f (⃗x )‖ + ‖∇ f (⃗x )‖
2
Colocando η em evidência:
ηL
f (⃗x+ )≤f (⃗x )− η 1− ( 2 )
‖∇ f (⃗x )‖2
1
‖∇ f ( ⃗x )‖2 ≤ ( f (⃗x )−f (⃗x + ))
ηL
(
η 1−
2 )
Somando ambos os lados da equação anterior para todas iterações k = 0,…, n:
1
‖∇ f ( x⃗0 )‖2 +...+‖∇ f ( x⃗n)‖2≤ [ f ( x⃗0)−f ( x⃗1 )+ f ( x⃗1 )−f ( x⃗2)+...+f ( x ⃗n−1 )−f ( x⃗n) ]
ηL
(
η 1−
2 )
Note que o somatório do lado direito define uma soma telescópica e portanto os termos
intermediários são todos simplificados:
n
1 1
∑‖∇ f ( x⃗k )‖2≤ ηL
[ f ( x⃗0 )−f ( x⃗n)]≤
ηL
[ f ( x⃗0 )−f * ]
k=0
η 1−( 2 ) (
η 1−
2 )
Isso significa que o somatório dos gradientes converge para um valor finito! Para que isso aconteça,
a norma do gradiente deve diminuir a cada iteração k, ou seja:
que é a condição necessária para o ponto extremo. Portanto, o método do gradiente descendente
converge. A pergunta que surge é: quão rápido se dá essa convergência? Precisamos responder
como (f ( x⃗k )−f * )→0 e ‖x⃗k −⃗x *‖→0 . Para isso, precisamos de mais alguns resultados
teóricos.
Teorema: Se f (⃗x ) é uma função tal que H (⃗x )=∇ 2 f (⃗x )≽m I para todo ⃗x , ou seja, a
forma quadrática ⃗x T H ⃗x ≥m (o menor autovalor de H está limitado em m), então:
T m 2 n
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖ ∀ ⃗x , ⃗y∈R
2
Prova:
É possível aproximar f (⃗y) ao redor de f (⃗x ) por uma expansão de Taylor de segunda ordem.
1
f ( ⃗y)=f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ( ⃗y−⃗x )T ∇ 2 f ( ⃗x )( ⃗y −⃗x )
2
Como H (⃗x )=∇ 2 f (⃗x )≽m I , segue que:
m
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ‖⃗y −⃗x‖2 (*)
2
Note que o lado direito de (*) é uma função quadrática de ⃗y para ⃗x fixo. Desejamos
encontrar quem é o y⃗m que minimiza o lado direito de (*). Derivando e igualando a zero, isto é,
calculando o gradiente em relação a ⃗y , temos:
1
y⃗m=⃗x − ∇ f ( ⃗x ) (maior limite inferior)
m
T m 2
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x ) ( y⃗m −⃗x )+ ‖ y⃗m −⃗x‖
2
1 1
f ( ⃗y)≥f ( ⃗x )− ‖∇ f ( ⃗x )‖2+ ‖∇ f ( ⃗x )‖2
m 2m
1 2
f ( ⃗y)≥f ( ⃗x )− ‖∇ f ( ⃗x )‖ (**)
2m
n
Como a equação (**) vale para todo ⃗x , ⃗y ∈R , vale também para o valor que minimiza a função
f, ou seja f (⃗x* ) :
* 1 2
f ( ⃗x )≥f ( ⃗x )− ‖∇ f ( ⃗x )‖
2m
* 1 2
f ( x⃗k )−f ( ⃗x )≤ ‖∇ f ( x⃗k )‖ (A)
2m
Isso significa que se o gradiente é pequeno num ponto, então o valor da função naquele ponto é
próximo do mínimo/máximo da função.
Iremos estudar agora como ‖x⃗k −⃗x *‖→0 . Podemos derivar um limite para ‖x⃗k −⃗x *‖ , isto é a
distância entre ⃗x e um ponto ótimo ⃗x * . Aplicando a equação (*) com ⃗y=⃗x * , temos:
m
f ( ⃗x* )≥f ( ⃗x )+ ∇ f (⃗x )T ( ⃗x *−⃗x )+ ‖⃗x*− ⃗x‖2
2
* * m * 2
f ( ⃗x )≥f ( ⃗x )−‖∇ f ( ⃗x )‖‖⃗x −⃗x‖+ ‖⃗x −⃗x‖
2
m
−‖∇ f ( ⃗x )‖‖⃗x* −⃗x‖+ ‖⃗x *−⃗x‖2 ≤0
2
m *
−‖∇ f ( ⃗x )‖+ ‖⃗x −⃗x‖≤0
2
2
‖⃗x *−⃗x‖≤ ‖∇ f ( ⃗x )‖
m
Essa desigualdade nos diz que na k-ésima iteração a solução ótima encontra-se numa circunferência
centrada em x⃗k com raio proporcional à norma do gradiente! Quanto menor a norma do
gradiente, mais próximos estamos da solução ótima.
Teorema: Se f (⃗x ) é uma função tal que H (⃗x )=∇ 2 f (⃗x )≼MI para todo ⃗x , ou seja, a
forma quadrática ⃗x T H ⃗x ≤M (o maior autovalor de H está limitado em M), então:
T M 2
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖
2
Prova:
É possível aproximar f (⃗y) ao redor de f (⃗x ) por uma expansão de Taylor de segunda ordem.
T 1 T 2
f ( ⃗y)=f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ( ⃗y−⃗x ) ∇ f ( ⃗x )( ⃗y −⃗x )
2
2
Como H (⃗x )=∇ f (⃗x )≼M I , segue que:
T M 2
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖ (*)
2
Note que o lado direito de (*) é uma função quadrática de ⃗y para ⃗x fixo. Desejamos
encontrar quem é o y⃗M que minimiza o lado direito de (*). Derivando e igualando a zero, isto é,
calculando o gradiente em relação a ⃗y , temos:
1
y⃗M =⃗x − ∇ f ( ⃗x ) (menor limite superior )
M
M
Def: A definição K= é um limite superior para o número de condição da matriz Hessiana
m
H (⃗x ) , ou seja, para a razão entre o maior e o menor autovalores de H (⃗x ) .
Se K≈1 , o problema é bem condicionado.
Se K ≫1 , o problema é mal condicionado (pequenas perturbações nos dados nos levam a
soluções completamente diferentes)
Mesmo que na prática não saibamos os valores de m e M, podemos calcular a matriz Hessiana e
obter o maior e menor autovalores. Veremos a seguir que esses autovalores são fundamentais na
convergência do gradiente descendente.
ou ainda:
ϵ k+1≤c ϵ k
Prova:
1
(
f (⃗x+ )=f (⃗x − η ∇ f (⃗x ))≤f ⃗x −
M )
∇ f (⃗x ) (menor limite superior)
Note que utilizarmos a estratégia Line Search é possível escolher η de modo a minimizar o valor
de f na direção em questão.
1
Fazendo ⃗y=⃗x − ∇ f ( ⃗x ) e aplicando (*), temos:
M
2
1 1 M 1
+
(M ) M (
f (⃗x )≤f ⃗x − ∇ f (⃗x ) ≤f (⃗x )+ ∇ f (⃗x )T ⃗x − ∇ f (⃗x )−⃗x +
2 ) ‖ ‖
⃗x − ∇ f (⃗x )−⃗x
M
o que é equivalente a:
2
1 M 1
f (⃗x+ )≤f (⃗x )+ ∇ f (⃗x )T − ( M
∇ f (⃗x ) +) ‖
2
− ∇ f (⃗x )
M ‖
Simplificando os termos:
+ 1 2 1 2
f ( ⃗x )≤f ( ⃗x )− ‖∇ f ( ⃗x )‖ + ‖∇ f ( ⃗x )‖
M 2M
+ 1 2
f ( ⃗x )≤f ( ⃗x )− ‖∇ f ( ⃗x )‖
2M
1
f ( ⃗x+ )−f ( ⃗x *)≤f ( ⃗x )−f ( ⃗x *)− ‖∇ f ( ⃗x )‖2 (#)
2M
1
f ( ⃗x )−f ( ⃗x * )≤ ‖∇ f ( ⃗x )‖2
2m
1
f ( ⃗x+ )−f ( ⃗x *)≤f ( ⃗x )−f ( ⃗x *)− 2 m(f ( ⃗x )−f ( ⃗x *))
2M
m
f (⃗x+ )−f (⃗x *)≤ 1− ( M )
(f (⃗x )−f ( ⃗x* ))
ϵ k+1≤c ϵ k
Note que, na prática não sabemos os valores de m e M, mas podemos substituí-los pelo menor e
maior autovalores da matriz Hessiana. Lembrando que:
M λmax
K= =
m λmin
a constante c que controla a taxa de convergência linear é dada por:
1
c=1−
K
Neste momento, algumas observações importantes devem ser feitas. Primeiro, note que no caso de
K tender a 1, ou seja, o maior e menor autovalores são muito próximos, o gradiente descendente
converge em um único passo, pois:
f (⃗x+ )−f (⃗x *)≤0 (não pode ser negativo, então erro é zero em apenas uma iteração!)
Na prática, quanto mais próximo de 1 for K, mais rápida é a convergência. Por outro lado, quanto
maior for K, mais lenta a convergência.
Vimos nesta aula garantias teóricas de que o gradiente descende de fato converge para um ponto
extremo linearmente. Ao longo do curso, veremos que existem métodos mais rápidos como o
método de Newton multivariado e o método do gradiente conjugado.
Aula 6: O método de Newton multivariado
O método do gradiente descendente apesar de garantir a obtenção da solução ótima, possui uma
taxa de convergência lenta (linear). Podemos generalizar o método de Newton para funções de
múltiplas variáveis. Seja f : Rn → R uma função arbitrária. Usando uma expansão de Taylor de
segunda ordem podemos expressá-la como:
T 1 T
f ( x⃗k + p⃗k )≈f ( x⃗k )+ ∇ f ( ⃗x ) p⃗k + p⃗k H ( x⃗k ) p⃗k
2
A ideia consiste em encontrar a direção do vetor p⃗k que minimiza a função. Para isso, devemos
derivar em relação a p⃗k e igualar o resultado a zero:
∂ f ( x⃗ + p⃗ )=∇ f ( x⃗ )+ H ( x⃗ ) p⃗ =0
k k k k k
∂ p⃗k
Note que é exatamente a mesma expressão do caso 1D, onde a derivada primeira f’ é substituída
pelo vetor gradiente e a segunda derivada f’’ pela matriz Hessiana. Outra observação importante é
que no método de Newton, o sinal negativo da expressão é imutável, isto é, independente do
problema ser de minimização ou maximização, o sinal de menos permanece (essa é uma pequena
confusão que frequentemente ocorre com quem é familiarizado com o gradiente descendente.
a) Método analítico
∂f
∇ f (⃗x )=
[ ][
∂ x1
∂f
∂ x2
=
4−4 x1−2 x 2
6−2 x 1−4 x 2 ]
o que equivale ao sistema linear a seguir:
4 x 1 +2 x2 =4
2 x1 + 4 x 2=6
Multiplicando a segunda equação por -2 e somando com a primeira resulta em:
−6 x 2=−12+4=−8
4 1
o que nos leva a x 2=
. Substituindo na segunda equação, é fácil verificar que x 1= .
3 3
1 4
*
Portanto a solução ótima é dada por ⃗x = ,
3 3
.[ ]
b) Gradiente ascendente
H (⃗x )=[−4
−2 −4 ]
−2
1
Iremos considerar α = e x⃗0=[1 , 1] .
4
k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1 1
x⃗1=[1 ,1]+ [−2, 0]= , 1
4 2 [ ]
k = 2: ∇ f ( x⃗1 )=[0 , 1]
1 1 1 5
[ ]
x⃗2= , 1 + [0 , 1]= ,
2 4 2 4 [ ]
1
k = 3: [ ]
∇ f ( x⃗2 )= − , 0
2
1 5 1 1 3 5
[ ] [
x⃗3= , + − ,0 = ,
2 4 4 2 8 4 ][ ]
1
k = 4: [ ]
∇ f ( x⃗3 )= 0 ,
4
1 5 1 1 3 21
[ ] [
x⃗4= , + 0 , = ,
2 4 4 4 8 16 ][ ]
1
k = 5: [ ]
∇ f ( x⃗4 )= − , 0
8
3 21 1 1 11 21
[ ] [
x⃗5= , + − ,0 =
8 16 4 8
,
][
32 16 ]
1
k = 6: [ ]
∇ f ( x⃗5 )= 0 ,
16
11 21 1 1 11 85
x⃗6=
[ ] [
, + 0,
32 16 4 16
= ,
32 64 ][ ]
…
Note que na sexta iteração a solução numérica já é próxima da solução ótima (porém ainda não
convergiu para o valor exato!).
1 4
*
x=
[ ]
, =[0.333 , 1.333]
3 3
11 85
x⃗6=
[ ,
32 64 ]
=[0.343 ,1.328]
c) Método de Newton
A matriz inversa da Hessiana deve satisfazer H (⃗x ) H−1 (⃗x )=I , o que nos leva ao sistema
(lembrando que a inversa de uma matriz simétrica também é simétrica):
−2 a b 1 0
[−4
−2 −4 ][ b c ] [ 0 1 ]
=
−4 a−2b=1
−4 b−2 c=0
−2 a−4 b=0
−2 b−4 c=1
8 b−2b=1
1 4
o que implica em b=
. Substituindo esse valor na segunda equação, temos 2 c=− , ou
6 6
1 4 1
seja, c=− . Por fim, chegamos que −2 a= , o que nos leva a a=− . Portanto, a
3 6 3
matriz inversa da Hessiana é dada por:
1 1
−1
H (⃗x )=
1
6
3
−
6
1
3
[ ]
−
k = 1: ∇ f ( x⃗0 )=[ −2 , 0 ]
1 1 2
−1
H ( x⃗0) ∇ f ( x⃗0 )=
2 2
1
6
3 6 −2
−
1 5
3
[ ][ ] [ ]
−
1 0
= 3
−
2
3
[
x⃗1=[ 1, 1 ] − ,− = ,
3 3 3 3 ][ ]
2 4
k = 2: [
∇ f ( x⃗1 )= − ,
3 3 ]
1 1 2
1 5
[ ][ ] [ ]
−
H−1 ( x⃗1) ∇ f ( x⃗1 )= 3 6
1
1
6
−
1 4
−
1 4
3 3
0
3 = 1
3
[ ][ ][ ]
x⃗1= , − 0 , = ,
3 3 3 3 3
Com apenas duas iterações, o método de Newton converge para a solução exata.
O método do gradiente descendente possui taxa de convergência linear, ou seja, o erro no próximo
passo depende linearmente do erro atual.
Já o método de Newton possui taxa de convergência quadrática, ou seja, o erro no próximo passo
depende do quadrado do erro atual (decai mais rápido). Demonstramos em aulas anteriores que a
convergência do método de Newton é quadrática no caso 1D, então não iremos repetir o processo
aqui novamente. Apenas apresentaremos um teorema que garante a taxa de convergência quadrática
do método de Newton multivariado. Por outro lado, o custo computacional do método de Newton é
maior pois exige o cálculo da matriz Hessiana e sua inversão!
O método de Newton pode se tornar mais eficiente se evitarmos o cálculo da inversa da matriz
Hessiana. Note que de acordo com a iteração do método de Newton, temos:
−1
⃗x k+1− x⃗k =−H ( x⃗k ) ∇ f ( x⃗k )
Podemos renomear a diferença no lado direito fazendo p⃗k =⃗x k +1− x⃗k , o que nos leva a:
−1
p⃗k =−H ( x⃗k ) ∇ f ( x⃗k )
o que define um sistema de equações. Resolver um sistema de equações em geral é menos custoso
do que inverter uma matriz. Dada a solução do sistema, como p⃗k =⃗x k +1− x⃗k , basta fazermos:
A ideia consiste em adotar uma estratégia similar ao que fizemos na descida do gradiente.
Desejamos a cada passo obter o tamanho do passo que satisfaz:
2 2
d d
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α[dα
f ( x⃗k + α p⃗k ) ] α=0
+ α
[
2 d α2
f ( x⃗k + α p⃗k )
]
α =0
Note que:
d d T
f ( x⃗k + α p⃗k )=f ' ( x⃗k + α p⃗k ) ( x⃗k + α p⃗k )=∇ f ( x⃗k + α p⃗k ) p⃗k
dα dα
T
o que para α =0 resulta em ∇ f ( x⃗k ) p⃗k . Note ainda que:
2
d d
2
f ( x⃗k + α p⃗k )=
d
[ ∇ f ( x⃗k + α p⃗k)T p⃗k ]= p⃗k T ∇ 2 f ( x⃗k +α p⃗k ) p⃗k
dα α
T 2 T
o que para α =0 resulta em p⃗k ∇ f ( x⃗k ) p⃗k = p⃗k H ( x⃗k ) p⃗k . Assim, podemos escrever a
seguinte aproximação:
2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α ∇ f ( x⃗k )T p⃗k + α p⃗k T H ( x⃗k ) p⃗k
2
∂ T T
∂ α f ( x⃗k + α p⃗k )=∇ f ( x⃗k ) p⃗k + α p⃗k H ( x⃗k ) p⃗k =0
e finalmente temos:
T
−∇ f ( x⃗k ) p⃗k
αk= T
p⃗k H ( x⃗k ) p⃗k
Algoritmo: método de Newton com Line Search
Ex: maximize f (x1 , x2 )=2 x 1 x 2+ 2 x 2−x 21−2 x 22 utilizando a solução inicial x⃗0=[0 , 0] e
2 x 2−2 x1
∇ f ( x⃗k )=
[ 2 x 1+ 2−4 x2 ]
Como a matriz Hessiana é constante, temos H ( x⃗k )=[−22 −42 ] para todo k.
k = 0: x⃗0=[0 , 0]
T
∇ f ( x⃗0 ) =[0 , 2]
T
−∇ f ( x⃗0 ) ∇ f ( x⃗0)
η 0= T
∇ f ( x⃗0) H ( x⃗0 ) ∇ f ( x⃗0)
0
η0=
− [0 , 2]
2 [] =−
4
=
−4 1
=
−2 2 0 4 −16 4
[0 , 2] [
2 −4 2 ][ ] [ ]
[ 0 , 2]
−8
1 1 1
4 [ ][ ]
x⃗1= x⃗0+ η0 ∇ f ( x⃗0 )=[ 0 , 0 ] + [ 0 ,2 ] =[ 0 ,0 ] + 0 , = 0 ,
2 2
1
k = 1: x⃗1= 0 ,
[ ]
2
∇ f ( x⃗1 )T =[1 , 0]
T
−∇ f ( x⃗1) ∇ f ( x⃗1 )
η1 = T
∇ f ( x⃗1) H ( x⃗1) ∇ f ( x⃗1 )
1
η1 =
−[ 1 , 0 ]
0 []=
−1
=
−1 1
=
2 1 −2 2
[ 1 , 0] −2
[
2 −4 0 ][ ] [ ]
[1 , 0] −2
2
1 1 1 1
[ ] [ ]
x⃗2= x⃗1+ η1 ∇ f ( x⃗1)= 0 , + [ 1, 0 ] = ,
2 2 2 2
1 1
k = 2: x⃗2=
[ ] ,
2 2
T
∇ f ( x⃗2 ) =[0 ,1]
T
−∇ f ( x⃗2) ∇ f ( x⃗2 )
η2 = T
∇ f ( x⃗2) H ( x⃗2) ∇ f ( x⃗2 )
0
η2 =
−[ 0 , 1 ]
[]
1
=
−1
=
−1 1
=
2 0 2 −4 4
[ 0 , 1] [
−2
2 −4 1 ][ ] [ ]
[ 0 ,1 ]
−4
1 1 1 1 3
[ ] [ ]
x⃗3= x⃗2+ η2 ∇ f ( x⃗2)= , + [ 0 ,1 ] = ,
2 2 4 2 4
1 3
k = 3: x⃗3=[ ] ,
2 4
1
T
∇ f ( x⃗3 ) =
2
,0
[ ]
−∇ f ( x⃗3)T ∇ f ( x⃗3)
η3 =
∇ f ( x⃗3)T H ( x⃗3 )∇ f ( x⃗3 )
1/2
η3 =
[ ]
− [ 1/2 , 0 ]
0
=
−1 /4
=
−1 /4 1
=
−2 2 1 /2 −1 −1/2 2
[ 1/2 , 0 ] [ ][ ]
2 −4 0 [ ] [ 1/2 ,0 ]
1
1 3 1 1 3 3
[ ] [ ][ ]
x⃗4= x⃗3 + η3 ∇ f ( x⃗3 )= , +
2 4 2 2
,0 = ,
4 4
3 3
k = 4: x⃗4=
[ ]
,
4 4
1
[ ]
T
∇ f ( x⃗4 ) = 0 ,
2
T
−∇ f ( x⃗4 ) ∇ f ( x⃗4 )
η 4= T
∇ f ( x⃗4 ) H ( x⃗4 ) ∇ f ( x⃗4 )
−[ 0 ,1 /2 ] 0
η 4=
[ ] 1/2
=
−1/4
=
−1/4 1
=
2 0 1 −1 4
[ 0 ,1 /2 ] [ ][ ]
−2
2 −4 1/2 [ ] [ 0 ,1/2 ]
−2
3 3 1 1 3 7
[ ] [ ][ ]
x⃗5= x⃗4 + η4 ∇ f ( x⃗4 )= , + 0 , = ,
4 4 4 2 4 8
3 7
k = 5: x⃗5=
[ ] ,
4 8
1
T
∇ f ( x⃗5 ) =
4
,0
[ ]
−∇ f ( x⃗5)T ∇ f ( x⃗5)
η5 =
∇ f ( x⃗5)T H ( x⃗5 )∇ f ( x⃗5 )
− [ 1/4 , 0 ] 1 /4
η5 =
[ ] = −1/16 = −1/16 = 1
0
−1/8 2
[ 1/4 , 0 ] [−2 2 ][1 /4 ] [ 1/ 4 ,0 ] [−1 /2 ]
2 −4 0 1 /2
3 7 1 1 7 7
x⃗ = x⃗ + η ∇ f ( x⃗ )=[ , ] + [ , 0 ]=[ , ]
6 5 5 5
4 8 2 4 8 8
7 7
k = 6: x⃗6=
[ ] ,
8 8
1
∇ f ( x⃗6 )T = 0 ,
[ ]
4
T
−∇ f ( x⃗6 ) ∇ f ( x⃗6)
η6 = T
∇ f ( x⃗6) H ( x⃗6 ) ∇ f ( x⃗6)
0
η6 =
[ ] = −1/16 =−1/16 = 1
− [ 0 , 1/4 ]
1/4
−1/4 4
[ 0 , 1/4 ] [−2 2 ][ 0 ] [ 0 , 1/ 4 ] [1 /2 ]
2 −4 1 /4 −1
7 7 1 1 7 15
6 6 [ 8 8 ] 4 [ 4 ] [ 8 16 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , + 0 , = ,
7 6
7 15
k = 7: x⃗7=
[ ,
8 16 ]
1
∇ f ( x⃗7 )T =
8
,0 [ ]
T
−∇ f ( x⃗7 ) ∇ f ( x⃗7)
η7 = T
∇ f ( x⃗7) H ( x⃗7 ) ∇ f ( x⃗7)
1/8
η7 =
− [ 1/8 , 0 ]
[ ]
0
=
−1/64
=
−1 /64 1
=
−1/32 2
[ 1/8 , 0 ] −2 2 1/8 [ 1/8 ,0 ] −1 /4
[ ][ ] [ ]
2 −4 0 1 /4
7 15 1 1 15 15
[ ] [ ][ ]
x⃗8= x⃗7 + η7 ∇ f ( x⃗7 )= ,
8 16 2 8
+ ,0 = ,
16 16
Note que nessa iteração a solução está próxima da solução ótima ⃗x *=[1 ,1] , mas ainda são
necessárias mais iterações para a convergência ao valor exato.
k = 0: x⃗0=[0 , 0]
T
∇ f ( x⃗0 ) =[0 , 2]
H ( x⃗0) p⃗0=−∇ f ( x⃗0 ) → [−22 −42 ] [ pp ]=[−20 ]
1
2
Resolvendo o sistema linear
−2 p1+ 2 p2=0
{2 p1−4 p2=−2
temos p1= p2=1 , e portanto ⃗p=[1 , 1]
−[0 , 2] 1 []
1 −2 −2
α 0= = = =1
[ 1 , 1 ] −2 2 1 [1 ,1] 0
−2
[
2 −4 1 −2 ][ ] [ ]
⃗x 1= x⃗0+ α0 p⃗0=[0 ,0 ]+1[1, 1]=[1 ,1]
−1 * 1
i. ∃h>0 / ‖H ( ⃗x )‖≤ (ou seja, a inversa da Hessiana no ponto de ótimo não explode)
h
(elementos da inversa da Hessiana são limitados superiormente)
2h
*
Suponha que ⃗x satisfaça ‖⃗x −⃗x ‖< min β , { 3L }
Seja ⃗x +=⃗x−H−1 (⃗x ) ∇ f ( ⃗x ) uma iteração do método de Newton. Então, pode-se mostrar que:
+ *
‖⃗x −⃗x ‖≤ ( 32 Lh )‖⃗x −⃗x ‖* 2
O erro no próximo passo depende do quadrado do erro no passo atual. Isso significa que o método
de Newton tem taxa de convergência quadrática, sendo mais rápido que o gradiente descendente,
que tem convergência linear.
Omitiremos a prova completa deste teorema, mas o leitor interessado pode encontrá-la em [1].
Referências
[1] Robert M. Freund, Newton’s Method for Unconstrained Optimization, MIT, February, 2004.
Aula 7: O método do gradiente conjugado
Otimização quadrática
1 T T
min ⃗x A ⃗x −⃗b ⃗x
x∈ R
⃗
n 2
onde A é uma matriz positiva semi-definida. Note que esse problema resume-se a resolver o sistema
linear A ⃗x =⃗b , uma vez que a condição necessária para a minimização da função quadrática
definida acima é justamente ∇ f (⃗x )= A ⃗x −⃗b=0 . Como ∇ 2 f (⃗x )=H (⃗x )= A , que é positiva
semi-definida, temos que a função é convexa e portanto ⃗x * é mínimo global. O método do
gradiente conjugado consegue resolver esse problema em no máximo n iterações. Na prática, para n
grande, requer menos de n iterações. No caso 2D, o método do gradiente conjugado converge em 1
ou 2 iterações no máximo.
Seja A uma matriz simétrica. Dizemos que os vetores { p⃗1 , p⃗2 , ... , p⃗k } , com pi ∈R n
⃗ são
T
pi A p⃗ j=0 , ∀ i≠ j .
conjugadas em relação a A (A-ortogonais) se ⃗
Note que se A = I, temos que vetores são ortogonais, por isso trata-se de uma generalização da
condição de ortogonalidade. Veremos a seguir que direções A-conjugadas implicam em
ortogonalidade.
Lema: Seja a uma matriz positiva semi-definida. Se o conjunto de vetores { p⃗1 , p⃗2 , ... , p⃗n } , com
pi≠⃗0 , são A-conjugados, então eles são linearmente independentes (L.I.), isto é, eles formam
⃗
uma base ortogonal para o espaço Rn .
Suponha que p⃗n é uma combinação linear de todos os outros n - 1 vetores do conjunto:
Como ‖ p⃗n‖2A = ⃗pTn A p⃗n >0 , pois denota a A-norma de p⃗n ao quadrado, temos:
2 T
‖ p⃗n‖A = ⃗pn A ( α1 p⃗1+ α2 p⃗2+...+ αn−1 ⃗p n−1)
Aplicando a distributiva:
2
‖ p⃗n‖A =0+ 0+...+0=0
gerando uma contradição. Sendo assim, a hipótese inicial de que existe um vetor p⃗n que é uma
combinação linear de todos os outros n - 1 vetores do conjunto é FALSA! Portanto, os vetores
{ p⃗1 , p⃗2 , ... , p⃗n } são linearmente independentes.
1 T T
min ⃗x A ⃗x −⃗b ⃗x → A ⃗x =⃗
b
x∈ R
⃗
n 2
Seja ⃗x * a solução ótima e seja { p⃗0 , p⃗1 , ... , p⃗n−1 } um conjunto de vetores A-conjugados. Como
esses vetores são L. I., eles definem uma base ortogonal do Rn e assim:
*
⃗x =α1 p⃗1 + α2 p⃗2+ ...+ αn−1 ⃗p n−1
Então,
⃗pTi A ⃗x *=⃗p Ti A ( α 1 p⃗1 + α 2 p⃗2 +...+ α n−1 ⃗pn−1)=αi ⃗pTi A ⃗
pi
⃗pTi A ⃗x * ⃗pTi ⃗b
αi = =
⃗p Ti A ⃗p i ⃗pTi A ⃗pi
* *
ou seja, não precisamos conhecer a solução ótima ⃗x para obter αi . Voltando para ⃗x ,
temos:
n−1 n−1 T
* ⃗pi b⃗
⃗x =∑ α i ⃗
pi=∑ pi
⃗
i=0 i=0 ⃗pTi A ⃗pi
x⃗0=α 0 p⃗0
x⃗1= x⃗0+ α1 p⃗1
x⃗2= x⃗1+ α2 p⃗2
…
⃗x n−1=⃗x n−2+ αn−1 ⃗p n−1
Teorema: Seja { p⃗0 , p⃗1 , ... , ⃗p n−1 } um conjunto de n vetores A-conjugados e seja x⃗0 um ponto
de partida inicial e arbitrário. Se aplicarmos as regras a seguir sucessivamente:
−⃗r Tk ⃗pk
α k= (*)
⃗p Tk A ⃗p k
Prova: Como { p⃗0 , p⃗1 , ... , p⃗n−1 } são vetores L.I., eles formam uma base para o R n. Então,
podemos garantir que o erro em qualquer iteração pode ser expresso como combinação linear dos
vetores da base, ou seja, podemos escrever:
Agora, basta mostrar que os valores dos pesos αk são dados conforme a equação (*). Sabemos
que:
*
⃗x − x⃗0=α 0 p⃗0 + α1 p⃗1 +...+ α n−1 ⃗pn−1 (A)
T * T T
p⃗k A(⃗x − x⃗0 )= p⃗k A (α1 p⃗1+ α2 p⃗2+...+ αn−1 ⃗p n−1 )=α k p⃗k A p⃗k
T
Multiplicando a equação (B) por p⃗k A , temos:
p⃗k T A(⃗x k − x⃗0 )= p⃗kT A ( α 0 p⃗0 + α 1 p⃗1 +...+ α k−1 ⃗pk−1 )=0
T * T * T * T
p⃗k A (⃗x − x⃗0) p⃗k A(⃗x − x⃗k ) − p⃗k A ( x⃗k −⃗x ) − r⃗k p⃗k
α k= T
= T
= T
= T
p⃗k A p⃗k p⃗k A p⃗k p⃗k A p⃗k p⃗k A p⃗k
Veremos a seguir que o valor de α k é ótimo, no sentido de que define o tamanho do passo
adaptativo obtido a partir da estratégia Line Search para o nosso problema de otimização
quadrática. Lembre-se que desejamos resolver:
1
min f ( ⃗x )= ⃗x T A ⃗x −⃗
b T ⃗x
x∈ R
⃗
n 2
1 1 1 1
g( α )= ⃗xTk A x⃗k + α ⃗x Tk A p⃗k + α ⃗pTk A x⃗k + α2 ⃗pTk A p⃗k −⃗
b T x⃗k −α ⃗
b T p⃗k
2 2 2 2
Note que a primeira e a quinta parcela da soma não são funções de α e podem ser descartados. A
segunda e a terceira parcela são de fato idênticas, de modo que a função pode ser escrita como:
1 2 T T T
g( α )= α ⃗p k A p⃗k + α ⃗pk A x⃗k −α ⃗b p⃗k
2
que é justamente o valor obtido anteriormente. Portanto, definir o valor de α é uma boa opção
em termos de convergência, pois estamos utilizando a estratégia Line Search!
Uma pergunta natural que surge neste momento é: como podemos definir as direções p⃗k de
modo que elas sejam A-conjugadas?
O método da direção conjugada nos fornece uma maneira de computar cada novo vetor conjugado a
partir do vetor anterior ⃗pk−1 : o método funciona escolhendo cada direção p⃗k como uma
combinação linear do negativo do gradiente −r⃗k e o vetor conjugado anterior ⃗pk−1 . Daí vem
o nome gradiente conjugado!
Note que o cálculo de βk requer duas multiplicações de matriz por vetor (uma no numerador e
outra no denominador) a cada iteração. Para acelerar o algoritmo, foi desenvolvida uma forma
computacionalmente mais eficiente para o cálculo de βk . Note que:
⃗x k+1= x⃗k + α k ⃗p k
Subtraindo ⃗
b de ambos os lados:
A ⃗x k+1−⃗b= A x⃗k −⃗
b+ αk A ⃗p k
nos leva a:
Lembre-se que já provamos anteriormente nas aulas passadas que a direção de dois gradientes
sucessivos na estratégia Line Search é ortogonal, o que implica em ⃗r Tk+1 ⃗r k =0 . Assim, temos:
⃗r Tk +1 A ⃗pk T
1 ⃗r k +1 ⃗r k+ 1
T
=α T
⃗pk A p⃗k k ⃗pk A p⃗k
Note que o termo do lado esquerdo da equação anterior é justamente βk+1 , o que nos leva a:
T
1 ⃗r ⃗r
βk+1= α kT+1 k +1 (A)
k ⃗pk A p⃗k
Mas de p⃗k =− r⃗k +βk ⃗pk−1 , multiplicando ambos os lados por r⃗k , temos:
Iremos mostrar a seguir, que ⃗pTk−1 r⃗k =0 (são ortogonais). Primeiramente, note que:
T T T * T *
⃗pk−1 r⃗k =⃗pk−1 ( A x⃗k −⃗b)=⃗pk−1 ( A x⃗k − A ⃗x )=⃗p k−1 A( x⃗k −⃗x )
*
⃗x = x⃗0+ α0 p⃗0 + α 1 p⃗1 +...+ α k−1 ⃗pk−1 +...++ αn −1 ⃗pn−1
de modo que:
Aplicando a distributiva:
T T T
−α k ⃗pk−1 A p⃗k −−α k+1 ⃗pk−1 A p⃗k +1−...− αn−1 ⃗p k−1 A p⃗n−1
Mas como as direções são A-conjugadas, temos que cada uma das parcelas resulta em zero, fazendo
com que:
o que é computacionalmente mais eficiente que a forma anterior. Note que o valor de α k fica:
T
− ⃗pk ⃗r k ⃗r Tk ⃗r k ‖⃗r k‖
2
α k= T
= T
= 2
⃗p k A ⃗p k ⃗pk A ⃗pk ‖⃗pk‖A
Algoritmo: método do gradiente conjugado
1
f ( ⃗x )= ⃗x T A ⃗x −⃗bt ⃗x com A e b conhecidos
2
⃗r Tk+1 ⃗r k+1
βk+1= T
(calcula beta)
⃗r k ⃗r k
k =k +1
}
A principal vantagem do gradiente conjugado é que ele pode seguir vales estreitos enquanto a
descida do gradiente desacelera e tende a percorrer um padrão zig-zag. Note também, que ao
contrário do método de Newton, não utilizamos a matriz Hessiana, o que é uma redução de custo
computacional considerável.
1 T t
Seja f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x a função objetivo a ser minimizada com A positiva semi-definida e
2
⃗
b arbitrários. Após k iterações do método do gradiente conjugado temos que:
k
√ q−1 ‖x⃗ −⃗x *‖
‖x⃗k −⃗x *‖A ≤2 ( √ q+ 1
0 ) ¿
λmax
onde q= é a razão entre o maior e o menor autovalor da matriz A .
λmin
Note que a forma se assemelha a uma convergência linear, porém a constante c é elevada a uma
potência k que depende diretamente da iteração do método. Por essa razão, dizemos que temos uam
convergência super linear (mais rápido que linear). Lembre-se que na descida do gradiente, a
convergência era linear, pois a constante c era fixa para toda iteração k do método. Já no método de
Newton a convergência era quadrática (mais rápida que super linear). Portanto, o método do
gradiente conjugado é considerado um meio termo entre descida do gradiente e método de Newton.
1 T
A= 2 −1
t
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x , com
2 [
−1 2 ] , ⃗
b=[1 , 0] e x⃗0=[0 , 0]
k = 0: r⃗0= A x⃗0− ⃗
b=
[−12 −12 ][ 00]−[−10]=[−10]
p⃗ =− r⃗ =[ 1 ]
0 0
0
T [−1 , 0 ] [−1 ] [ −1 ,0 ] [−1 ]
⃗r ⃗r 0 0 0 0 1
α=0 = = =
⃗p A ⃗p [ −1 ,0 ] 2 −1 −1 [ −1 ,0 ] −2 2
T
0
[−1 2 ][ 0 ]
0
[1]
1 1
0 0
2 [2 ]
x⃗ = x⃗ + α p⃗ =[ 0 , 0 ] + [ 1, 0 ] = , 0
1 0
1 0
2 −1 2 ] [ 0 ] [ 0 ] 2 [−1 ] [ 0 ] [− ] [ − ]
1 2 −1 −1 −1 1 2
r⃗ =r⃗ + α A p⃗ =[ ] + [
1 0
−1
0 0 = + = −1 + 1 = 1
0
2 2
1 0
r⃗T1 ⃗r 1
[ 0 ,− ][ ]
2 −
1
2 1
β 1= = =
T
⃗r ⃗r 0 4
0 ][ ]
[ −1 , 0 −1
0
1 1 1 1
p⃗1=−r⃗1 + β1 p⃗0= 0 ,
2
+ 1, 0 ] = ,
2 4 4 2 [ ] [ [ ]
1 1
2 2
r 1‖ =0 + − = > ϵ
‖⃗
2 4 ( )
(continue, pois a norma do gradiente é grande)
1 0
⃗r T1 ⃗r 1
[ 0 ,− ][
2 −
1
2 ] 1
4
1
4 2
k = 1: α1 = = = = =
T
⃗p1 A ⃗p1 1 0 3 3
[ ][ ]
[]
1 1
1 1 2 −1 4 , 3 8
, [ ][
4 2 −1 2 1
4 2
] 4
2
1 2 1 1 1 1 1 2 1
x⃗2= x⃗1+ α1 p⃗1 = , 0 +
2 [ ] [ ][ ][ ][ ]
, = ,0 + , = ,
3 4 2 2 6 3 3 3
1 0
r⃗1=r⃗0+ 0 A p
⃗ 0α=
0 [ ] [ ][ ] [ ] [ ] [ ] [
−1 + 1 2 −1 −1 = −1 + 1 2 = −1 +
2 −1 2 0 0 2 −1 0 −
1
2
=
−
1
2 ][ ]
T 0,0 0
[ ][ ]
⃗r ⃗r 0
β2= 2T 2 = =0
⃗r 1 ⃗r 1 0
0 ,−
1
[ ][ ]
2 −
1
2
1 1
[ ] [ ][ ]
p⃗2=−r⃗2 + 2 p⃗1= 0 , 0 +0 , = 0 , 0
β
4 2
2 2 2
‖r⃗2‖ =0 +0 =0< ϵ (pare, pois norma do gradiente é nula!)
2 1
*
Portanto, a solução ótima é ⃗x = [ ],
3 3
A seguir apresentamos mais alguns exercícios práticos sobre o método do gradiente conjugado.
1 T
A= 3 −2
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com [
−2 3 ] , ⃗
b=[1 , 1] e x⃗0=[0 , 0] .
1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A=
[−24 −24 ] , ⃗
b=[4 , 1] e x⃗0=[0 , 0] .
4 2 4
1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A= 2
4
8
[ ] 4
3
2
3
6
4
, ⃗
b=[1 , 1, 1] e x⃗0=[0 , 0 , 0] .
1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A= 2
4 [ ] 4
3
3
6
, ⃗
b=[ 4 , 4 , 4] e x⃗0=[0 , 0 , 0] .
Um problema do método do gradiente conjugado é que a função objetivo deve ser sempre
quadrática. Em muitos problemas isso não ocorre. Na próxima aula, veremos o método do gradiente
conjugado não linear, que pode ser utilizado na otimização de qualquer função, mesmo não sendo
quadrática.
Aula 8: O método do gradiente conjugado generalizado
Um problema do método do gradiente conjugado é que a função objetivo deve ser sempre
quadrática. Em muitos problemas isso não ocorre. Nesta aula, veremos o método do gradiente
conjugado generalizado, também conhecido como não linear, que pode ser utilizado na otimização
de funções arbitrárias, não apenas quadráticas. A principal diferença aqui é que a a matriz A não é
explícita nessas funções objetivo, de modo que o método gradiente conjugado tradicional requer
alguns ajustes. Deve se ter em mente que para funções não lineares arbitrárias, isto é, que não são
quadráticas, o número máximo de iterações do método generalizado não é limitado a n (número de
variáveis do problema de otimização). Em outras palavras, a convergência pode não ser tão rápida
quanto no problema de otimização quadrática.
Em termos práticos, a ideia do método generalizado é bastante intuitiva: substituir o resíduo (erro)
pelo gradiente:
Neste caso, a função objetivo f (⃗x ) é uma função não linear arbitrária.
⃗r Tk+1 ⃗r k+1
βk+1= T
(calcula beta)
⃗r k ⃗r k
k =k +1
}
Podemos aproximar f ( x⃗k + α p⃗k ) por uma expansão de Taylor de 2a ordem, ou seja:
Utilizando uma expansão de Taylor de segunda ordem, temos:
d 2
d2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α [ dα
f ( x⃗k + α p⃗k ) ] α=0
+α
[
2 d α2
f ( x⃗k + α p⃗k )
]α =0
Note que:
d d
f ( x⃗k + α p⃗k )=f ' ( x⃗k + α p⃗k ) ( x⃗k + α p⃗k )=∇ f ( x⃗k + α p⃗k )T p⃗k
dα dα
d2 d T T 2
2
f ( x⃗k + α p⃗k )=
dα
[ ∇ f ( x⃗k + α p⃗k ) p⃗k ]= p⃗k ∇ f ( x⃗k + α p⃗k ) p⃗k
dα
T 2 T
o que para α =0 resulta em p⃗k ∇ f ( x⃗k ) p⃗k = p⃗k H ( x⃗k ) p⃗k . Assim, podemos escrever a
seguinte aproximação:
2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α ∇ f ( x⃗k ) p⃗k + α p⃗k H ( x⃗k ) p⃗k
T T
2
∂ f ( x⃗ + α p⃗ )=∇ f ( x⃗ )T p⃗ + α p⃗ T H ( x⃗ ) p⃗ =0
k k k k k k k
∂α
e finalmente temos:
T
−∇ f ( x⃗k ) p⃗k
αk= T
p⃗k H ( x⃗k ) p⃗k
Note que é necessário avaliar a matriz Hessiana em cada iteração, mas não precisamos invertê-la.
Como era esperado, substituímos o resíduo r⃗k pelo gradiente ∇ f ( x⃗k ) e a matriz A pela
matriz Hessiana H. Por essa razão, costuma-se dizer que no método do gradiente conjugado não
linear as direções p⃗k são H-conjugadas (e não A-conjugadas como na função quadrática).
Uma observação importante é que a matriz Hessiana H (⃗x ) varia com ⃗x , e portanto, quanto
mais rápido essa variação ocorre, mais rápido as direções de busca p⃗k perdem a propriedade
conjugada. Por essa razão, em geral, costuma-se resetar as direções a cada n iterações, fazendo
βk =0 .
Ex: minimizar f (⃗x )=x 1−x 2 + x 21−x 1 x 2 com o método do gradiente conjugado generalizado
utilizando x⃗0=[0 , 0]
Da segunda equação, temos que x 1=−1 . Substituindo na primeira equação, temos x 2=−1 .
H (⃗x )= 2 −1
[−1 0 ]
e portanto não depende de x (porque função é quadrática, no caso de funções de graus mais
elevados, a Hessiana depende de x).
x⃗0=[0 , 0]
r⃗0=∇ f ( x⃗0)=[1 ,−1]
p⃗0=−∇ f ( x⃗0)=[−1 ,1]
k = 0:
α 0= T
T
−∇ f ( x⃗0 ) p⃗0
=
[ ]
−[ 1 ,−1 ] −1
1
=
[ ]
−[ 1,−1 ] −1
1 2 1
= =
⃗p0 H ( x⃗0 ) p⃗0 [ −1 ,1 ] 2 −1 −1 4 2
[ ][ ]
−1 0 1 [ ]
[−1 , 1 ] −3
1
1 1 1
2 [ ]
x⃗1= x⃗0+ α0 p⃗0=[ 0 , 0 ] + [ −1 ,1 ] = − ,
2 2
1 1
[
r⃗1=∇ f ( x⃗1)= − ,−
2 2]
1
⃗
β 1= T =
T
[
r 1 ⃗r 1
− ,−
1 1
]
2 2
[] −
−
2
1
2
= =
1
2 1
2 4
⃗r 0 ⃗r 0 [ 1 ,−1 ] 1
[ ] −1
1 1 1 1 1 1 1 1 3
[ ] 2 2 4 [ ][
p⃗1=−r⃗1 + β1 p⃗0= , + [ −1, 1 ] = , + − , = ,
2 2 ][ ]
4 4 4 4
k = 1:
1
T
−∇ f ( x⃗1) p⃗1
α1 = T
⃗p 1 H ( x⃗1) p⃗1
=
1 1
[ ]
,
2 2
1
=
[]
4
3
4
=
1 −1
1
2
1
2
=−2
1 3 2 −1 4
[ ][
,
4 4 −1 0 3
4
1 3
,
4 4
−
−
]4
1
4
[ ] [ ][ ]
4
1 1 1 3 1 1 1 3
2 2[ ] [ ][
4 4 ][ ]
x⃗2= x⃗1+ α1 p⃗1 = − , − 2 , = − , − , =[−1 ,−1]
2 2 2 2
r⃗2=∇ f ( x⃗2)= [ 0 , 0 ]
T [0 , 0 ] 0 []
r ⃗r
⃗ 0 0
β1= 1T 1 = = =0
⃗r 0 ⃗r 0 1 1
1 1
− ,−
2 2 [ ]
−
−
2
1
2
[]
1 3
2
[ ]
p⃗2=−r⃗2 + β2 p⃗1= [ 0 , 0 ] +0 , =[ 0 , 0 ]
4 4
Note que neste ponto, a norma do gradiente é zero. Portanto, o método convergiu!
a) Fletcher-Reeves (padrão)
FR ⃗r Tk+ 1 ⃗r k+1
β =
k T
⃗r k ⃗r k
b) Polak-Ribière
PR ⃗r Tk+ 1( ⃗r k +1−r⃗k )
β =
k T
⃗r k ⃗r k
c) Hestenes-Stiefel
HS ⃗r Tk +1 ( ⃗r k+1−r⃗k )
β =−
k T
⃗p k (⃗r k +1−r⃗k )
d) Dai-Yuan:
⃗r Tk+1 ⃗r k+1
βDY
k =−
⃗pTk (⃗r k +1−r⃗k )
βk+1=max {0 , βkPR+1 }
Os métodos quasi-Newton buscam uma aproximação para a inversa da matriz Hessiana, ou seja,
H−1 ( x⃗k ) . Além disso, os métodos padrões para resolver sistemas como os encontrados no
método de Newton clássico:
requerem O(n3 ) operações, o que pode ser computacionalmente muito caro. A forma básica de
um método quasi-Newton é:
1. Faça k=0, x⃗k como a solução inicial e H k =I (aprox. para inverso da Hessiana=identidade)
2. Calcule o gradiente ∇ f ( x⃗k )
3. Encontre a direção de busca
T
1. Simetria: H k =H k (isso significa que a U k =U Tk .
1 T T
f ( ⃗x )− ⃗x H ⃗x + ⃗
b ⃗x +c
2
∇ f (⃗x )=H ⃗x + ⃗
b o que implica ⃗x =H−1 (∇ f (⃗x )−⃗
b)
∇ f (⃗y )=H ⃗y + b o que implica ⃗y=H ( ∇ f ( ⃗y )−⃗
⃗ −1
b)
Denotando por
onde Δ x⃗k =⃗x k +1− x⃗k e Δ g⃗k =∇ f (⃗x k +1)−∇ f ( x⃗k ) . A condição de simetria é garantida por
construção, uma vez que matrizes da forma ⃗z ⃗z T , com ⃗z ∈R n sendo um vetor coluna são
simétricas. Podemos verificar que a regra de atualização DFP satisfaz a condição quasi-Newton.
Note que temos:
Para isso, devemos mostrar que H k+1 Δ g⃗k =Δ x⃗k . Note que:
T T
Δ x⃗k Δ⃗xk Δ g⃗k ( H k Δ g⃗k )( H k Δ g⃗k ) Δ g⃗k
H k+1 Δ g⃗k =H k Δ g⃗k + T
− T
Δ ⃗x k Δ g⃗k g k H k Δ ⃗gk
Δ⃗
o que mostra a validade da condição quasi-Newton. Na prática, essa condição significa que a regra
DFP mantém as propriedades da matriz Hessiana ao atualizar H k . Uma outra fórmula mais
recente que a DFP para atualizar a inversa da matriz Hessiana é a regra BFGS (Broyden, Fletcher,
Goldfarb e Shanno) definida por:
Δ ⃗gTk H k Δ ⃗
gk Δ ⃗x k Δ ⃗x Tk ( H k Δ g⃗k Δ ⃗x Tk )+( H k Δ g⃗k Δ ⃗x Tk )T
H k+1 Δ g⃗k =H k Δ g⃗k + 1+
( T
Δ ⃗x k Δ g⃗k )( T
Δ ⃗x k Δ g⃗k ) (
Δ g⃗k − T
Δ ⃗x k Δ g⃗k ) Δ g⃗k
o que é equivalente a:
T T T T
Δ ⃗g k H k Δ ⃗
gk Δ ⃗x k (Δ ⃗x k Δ g⃗k ) ( H k Δ g⃗k Δ ⃗x k Δ g⃗k )+(Δ ⃗x k Δ ⃗gk H k Δ ⃗g k )
H k+1 Δ g⃗k =H k Δ g⃗k + 1+
( T
Δ ⃗x k Δ g⃗k )( T
Δ⃗x k Δ g⃗k )(
− T
Δ⃗x k Δ g⃗k )
Após algumas simplificações, temos:
T T T
gk H k Δ ⃗
(Δ ⃗ g k ) Δ ⃗x k Hk Δ ⃗
g k (Δ ⃗x k Δ ⃗g k ) Δ ⃗x k (Δ ⃗g k H k Δ ⃗
g k)
H k+1 Δ g⃗k =H k Δ g⃗k +Δ x⃗k + T
− T
− T
Δ ⃗x k Δ ⃗gk Δ ⃗x k Δ ⃗gk Δ ⃗x k Δ ⃗gk
Como o 3o e o 5o termo são idênticos, pois os valores entre parêntesis são escalares) e possuem
sinais opostos, eles se cancelam. Simplificando ainda mais, chegamos em:
Para que seja possível realizar a estratégia Line Search nos métodos quasi-Newto, além de
aproximar a inversa da matriz Hessiana, é preciso também de uma aproximação para a própria
Hessiana, denotada por B k , uma vez que ela é utilizada com cálculo do tamanho do passo ótimo.
Há diferentes formas para calcular tais aproximações, sendo as mais conhecidas as regras DFP e
BFGS. A seguir apresentamos um pseudo-código do método BFGS.
T
−∇ f ( x⃗k ) p⃗k
αk= T
⃗pk Bk p⃗k
T T
Δ g⃗k Δ ⃗g k Bk Δ x⃗k (Bk Δ x⃗k )
B k+1=B k + T
− T
Δ⃗x k Δ ⃗
gk Δ ⃗x k Bk Δ x⃗k
T T T T T
Δ ⃗gk H k Δ ⃗g k Δ ⃗x k Δ ⃗x k ( H k Δ g⃗k Δ ⃗x k )+(H k Δ g⃗k Δ ⃗x k )
H k+1 =H k + 1+
( Δ ⃗xTk Δ g⃗k )( Δ ⃗x Tk Δ g⃗k )(
−
Δ ⃗xTk Δ g⃗k )
e faça k = k + 1
a) Se B k =H ( x⃗k ) e −1
H k =H ( x⃗k ) , então o método quasi-Newton se transforma no método de
Newton tradicional.
4. Calcule α k =arg min f ( x⃗k + α p⃗k ) utilizando uma aproximação de Taylor de 2a ordem como:
α
T
−∇ f ( x⃗k ) p⃗k
αk= T
⃗pk Bk p⃗k
T T
Δ ⃗x k Δ ⃗x k (H k Δ ⃗gk )(H k Δ ⃗gk )
H k+1 =H k + T
− T
Δ ⃗x k Δ ⃗
gk Δ ⃗gk H k Δ ⃗gk
e faça k = k + 1
Teorema: Seja f (⃗x ) uma função fortemente convexa com matriz Hessiana ∇ 2 f (⃗x )=H (⃗x ) L-
suave, isto é:
Então, o método quasi-Newton com regra DFP ou BFGS tem convergência super-linear, ou seja,
para k suficientemente grande:
onde c k →0 .
Método Convergência
Cada método possui suas vantagens e desvantagens, de modo que a escolha de qual utilizar depende
essencialmente do problema em questão e do número de variáveis da função objetivo. Como
exemplo de aplicação, citamos as redes neurais, em que a minimização da função de erro, que
tipicamente envolve milhares ou até mesmo milhões de variáveis (pesos sinápticos), é realizada
pelo método do gradiente descendente. Apesar da convergência mais lenta, é o único capaz de ligar
com um problema dessa magnitude.
Aula 10: Otimização não linear com restrições de igualdade
Até o presente momento, nosso interesse era resolver problemas de otimização não linear sem
restrições, ou seja, problemas em que os valores das variáveis da função objetivo não possuíam
restrição alguma (eram livres para ocupar qualquer região do R n). A partir de agora estamos
interessados em otimizar uma função não linear sujeita a restrições que também podem ser não-
lineares. A ideia é que o conjunto de soluções viáveis não é mais todo R n, mas sim um subconjunto
dele. Para isso, será introduzido o método dos multiplicadores de Lagrange.
Multiplicadores de Lagrange
max f (x , y ) sujeito a
g( x , y )=c
Intuição: Em um ponto de máximo, f (x , y ) não pode aumentar em qualquer ponto vizinho onde
g( x , y )=c . Note que se pudesse aumentar, poderíamos andar sobre g( x , y )=c para crescer
o valor de f (x , y ) . Veremos a seguir que geometricamente isso significa que os gradientes de
f (x , y ) e g( x , y ) são paralelos nesse ponto.
Podemos visualizar os contornos da função f ( x , y ) dados por f ( x , y )=d i e o contorno de
g( x , y )=c
Resultado importante: O gradiente de uma função é sempre ortogonal a suas curvas de nível (pois o
gradiente sempre aponta para a direção de maior crescimento da função). Esse resultado pode ser
melhor compreendido a partir da demonstração do teorema a seguir.
d d
f (x (t), y (t))= K=0
dt dt
df dx df dy
+ =0 (*)
dx dt dy dt
⃗ f (x , y)= ∂ f , ∂ f
∇ (∂x ∂ y )
e o vetor tangente a curva no ponto (x, y) é definido por:
⃗r ' (t)=(x ' (t), y ' (t))= ( dxdt , dydt )
Portanto, podemos reescrever a equação (*) como:
mostrando que o produto escalar entre os vetores é nulo. Portanto, o gradiente e o vetor tangente são
ortogonais. Na curva vermelha, g( x , y ) não muda (é constante) e nas curvas azuis, f ( x , y )
não muda (é constante). Suponha que caminhamos sobre a curva vermelha de g( x , y )=c .
Estamos interessados em pontos onde f (x , y ) não muda quando nos movemos (máximos). Para
que isso aconteça, devemos estar seguindo uma curva de nível de f. Isso significa que deve existir
um ponto P em que as duas curvas de nível são tangentes. Nesse ponto, os gradientes de f ( x , y )
e g( x , y ) são paralelos ali. Ou seja:
para algum λ (o gradiente de f é um múltiplo do de g pois ambos apontam para uma mesma
direção, embora o sentido possa ser oposto). Essa variável λ é conhecida como multiplicador de
Lagrange
Resultado: Se (x*, y*) é um ponto de máximo para o problema original, então existe um λ tal
que (x * , y * , λ* ) é um ponto estacionário para a função lagrangiana L(x , y , λ) .
Ou seja, existe um ponto para o qual as derivadas parciais dessa função L(x , y , λ) são iguais a
zero. Em outras palavras, ao derivar a função Lagrangiana em relação a x, y e λ (basta tomar o
gradiente) e igualar ao resultado a zero, estamos na verdade resolvendo o problema de otimização
original pois:
max f (x , y ) s.r.
g1 ( x , y )=c1
g2 ( x , y )=c2
...
gk ( x , y )=c k
k
L( x , y , λ 1 , λ 2 , ... , λ k )=f ( x , y)−∑ λ i (g i ( x , y )−c i )
i=1
Ex: Resolva o seguinte problema de otimização não-linear com restrições de igualdade:
∂L
∂ L(x , y , λ)
=−2 x−λ=0 (I)
∂x
∂ L(x , y , λ)
=−2 y −3 λ=0 (II)
∂y
∂ L(x , y , λ)
=−x−3 y +10=0 (III)
∂λ
3λ
De (I) temos que x=− λ e de (II) temos que y=− . Substituindo em (III) nos leva a:
2 2
3λ 9λ
− λ −3 −
2 ( )
2
=−10 → λ +
2 2
=−10 → 5 λ=−10 → λ=−2
−2 x +2=0 → x=1
−2 y +6=0 → y=3
Ex: Uma caixa retangular sem tampa deve ser feita com 12m 2 de papelão. Determine as dimensões
x,y e z que fornecem o volume máximo de tal caixa.
Função objetivo (a ser maximizada): volume
Restrição: área (base + 2 paredes + 2 paredes)
∂L ∂L ∂L ∂L
∇ L( x , y , z , λ )=⃗0 → =0, =0, =0, =0
∂x ∂y ∂z ∂λ
∂L ∂L ∂L
= yz− λ ( y +2 z)=0 (I), =xz− λ ( x +2 z )=0 (II), =xy− λ (2 x+ 2 y )=0 (III)
∂x ∂y ∂z
∂L
=xy+ 2 xz +2 yz=12 (IV)
∂λ
Isolando λ nas equações (I), (II) e (III):
yz xz xy
λ= = =
( y +2 z) ( x +2 z) (2 x+2 z)
z (2 x +2 y)=x( y+ 2 z )= y ( x +2 z ) → xy +2 xz =xy+ 2 yz → x= y
Portanto, para maximizar o volume as dimensões da caixa devem ser, x=2 , y=2 e x=1 ,
o que resulta em um volume de 4m3
Ex: Resolva o seguinte problema de otimização não linear com restrições de igualdade. Note que a
restrição neste caso também é não linear.
2
max f ( x . , y)=x +2 y sujeito a
g( x , y )=x 2 + y 2=1
∂L ∂L ∂L ∂L
∇ L( x , y , z , λ )=⃗0 → =0, =0, =0, =0
∂x ∂y ∂z ∂λ
e portanto
∂L ∂L ∂L 2 2
=2 x−2 λ x=0 , =2−2 λ y =0 , =x + y =1
∂x ∂y ∂λ
x−λ x =0 (I)
1− λ y=0 (II)
x 2+ y 2 =1 (III)
a) x=0 ou
b) λ =1
c) y=±1
Assumindo b) e combinando com II) temos y=1 , que é mais restrita que c)
x=0, y=1 e
x=0 e y =−1
Aplicando o gradiente:
∂L ∂ L ∂ L ∂ L ∂L ∂L
∇ L( x , y , z , w , λ 1 , λ 2)= ⃗
0 → = = = = = =0
∂ x ∂ y ∂ z ∂ w ∂ λ1 ∂ λ2
∂L ( λ 1 + λ 2)
=2 x− λ1 −λ 2=0 → x= (I)
∂x 2
∂L ( λ1 − λ 2 )
=2 y−λ 1+ λ2 =0 → y= (II)
∂y 2
∂L ( λ1 + λ 2)
=2 z− λ1 −λ 2=0 → z=x= (III)
∂z 2
∂L ( λ +3 λ2 )
=2 w− λ1−3 λ2=0 → w= 1 (IV)
∂w 2
∂L
=x + y + z +w=10 (V)
∂λ1
∂L
=x − y + z+3 w=6 (VI)
∂λ2
Substituindo as variáveis de (I), (II), (III) e (IV) nas equações (V) e (VI), temos:
( λ 1+ λ2 ) ( λ1 −λ 2) ( λ1 + λ2 ) ( λ1 +3 λ 2)
+ + + =10 → 4 λ1 + 4 λ 2=20
2 2 2 2
( λ 1+ λ2 ) ( λ 1−λ 2) (λ 1+ λ 2) ( λ1 +3 λ 2)
− + +3 =6 → 4 λ1 +12 λ 2=12
2 2 2 2
λ1 + λ 2=5
{ λ1 +3 λ 2=3
Fazendo λ 1=5− λ2 e substituindo na 2a equação temos:
A Análise de Componentes Principais é uma técnica para tratar dados de alta dimensionalidade que
utilizam as dependências entre as variáveis para representá-los de uma forma mais compacta sem
perda de informação relevante. PCA é uma dos métodos mais simples e robusto de realizar redução
de dimensionalidade. É uma das técnicas mais antigas e foi redescoberta muitas vezes em diversas
áreas da ciência, sendo conhecida também como Transformação de Karhunen-Loeve,
Transformação de Hotelling ou decomposição em valores singulares.
→ Método linear: assume hipótese de que daos encontram-se num subespaço Euclidiano do Rn
→ Método não supervisionado (não requer rótulos das classes)
→ Decorrelaciona os dados de entrada eliminando redundâncias
x1
d x
[]
⃗x ∈R = 2
...
xd
⇒
W pca
y1
[]
⃗y ∈R k = ... , k ≪d
yk
O problema em questão pode ser resumido como: dado um espaço de entrada, deseja-se encontrar
as direções w⃗ i que, ao projetar os dados, maximizam a variância retida na nova representação.
Ou seja, queremos encontrar as direções em que o espalhamento dos dados é máximo (desejamos
reter o máximo da energia dos dados). A pergunta que surge é: quais são essas direções?
Primeiramente, note que podemos escrever ⃗x ∈ R d como (expansão na base ortonormal):
d d
⃗x =∑ ( x⃗T w⃗ j) w⃗ j=∑ c j w⃗ j (cj são os coeficientes da expansão)
j=1 j=1
⃗ i w⃗ j= 1, se i= j
{
T
w
0, se i≠ j
Dessa forma, busca-se uma transformação linear T que maximize a variância retida nos dados, ou
seja, que maximize o seguinte critério:
k
PCA 2 T 2
J 1 (T )=E[‖⃗y‖ ]=E [⃗y ⃗y ]=∑ E[c j ] (*)
j=1
Note que E[ ⃗y T ⃗y ]=E[ y 21 ]+ E[ y 22 ]+...+ E[ y 2k ] é justamente a soma das variâncias em cada eixo
coordenado da nova representação. Como c j =⃗xT w⃗ j (projeção de ⃗x em wj ⃗ ). Então:
k k k
PCA T T T T
J 1 (T )=∑ E[ w
⃗ ⃗x ⃗x w⃗ j ]=∑ w
j⃗ E[⃗x ⃗x ] w ⃗ Tj Σ x w⃗ j
⃗ j =∑ w j sujeito a w j‖=1
‖⃗
i=1 i=1 j=1
T
em que E[⃗x ⃗x ]=Σx denota a matriz de covariância dos dados observados.
∂ J (T , λ )=Σ w⃗ −λ w =0
j x j j j
∂ w⃗ j
w
∑
⃗ j j=1 w⃗ j j=1 w
⃗ j j=1 w⃗ j j=1
ou seja, devemos maximizar a soma dos k autovalores. Isso define a regra a ser utilizada pelo PCA:
devemos escolher para compor a nova base os K autovetores da matriz de covariâncias associados
aos K maiores autovalores. Após aplicar PCA, os dados projetados na base PCA não exibem
correlação, ou seja, a matriz de covariâncias torna-se diagonal.
Def: Toda matriz A simétrica e positiva semidefinida possui uma decomposição A=Q Λ QT onde
Q é a matriz dos autovetores (nas colunas) e Λ é a matriz diagonal dos autovalores. Sabemos
que matrizes de covariâncias são matrizes positivas semidefinidas.
Além disso, pode-se mostrar que se ⃗y= A ⃗x ( ⃗y é uma transformação linear de ⃗x ) então a
matriz de covariância de ⃗y é transformada por Σ y = A T Σ x A .
T T
Σ y= A Q Λ Q A
λ1 0 ... 0
T T
Σ y =Q Q Λ Q Q=Λ=
0 λ2
0 0
0 0 [ ... 0
... 0
... λn ]
sendo que QT Q=I pois a base formada pelos autovetores é ortonormal
→ Dizemos portanto que após a transformação PCA, os dados encontram-se decorrelacionados
(não há correlação, elimina as dependências existentes entre as variáveis).
Algoritmo PCA
A seguir apresentamos um script em Python que implementa o método PCA para análise do
conjunto de dados IRIS, que possui n = 150 amostras, cada uma contendo m = 4 atributos. A matriz
de dados é portanto 150 x 4. Desejamos obter uma matriz de dados de dimensões 150 x 2, ou seja,
desejamos reduzir a dimensão dos dados pela metade. A ideia é que depois do PCA, é possível
plotar gráficos de dispersão dos dados e visualizar as amostras como pontos no plano.
import numpy as np
import sklearn.datasets as skdata
import matplotlib.pyplot as plt
'''
Aplica PCA nos dados para reduzir dimensionalidade para d
return novos_dados
# Início do script
X = skdata.load_iris()
dados = X['data']
# Aplica PCA
dados_pca = PCA(dados, 2)
# Plota dados
plt.figure(1)
plt.plot(dados_pca[0,0:51], dados_pca[1,0:51], '*', color='blue')
plt.plot(dados_pca[0,51:101], dados_pca[1,51:101], '*', color='red')
plt.plot(dados_pca[0,101:151], dados_pca[1,101:151], '*', color='green')
plt.show()
Aula 11: Otimização não linear com restrições de desigualdade
Vimos anteriormente que a solução de problemas de otimização não lineares com restrições de
igualdade são solucionados com o método dos multiplicadores de Lagrange. Nesta aula,
estudaremos problemas em que as restrições são desigualdades, ou seja, podem ser expressas da
forma g( x , y )≤c . Em suma, o problema de otimização na forma padrão é da forma:
Condições de Karush-Kuhn-Tucker
São condições básicas para determinar se um ponto é crítico em um problema de otimização não
linear com restrições de desigualdade. As condições de KKT reconhecem que existem duas
possibilidades para um ótimo local:
a) Nenhuma restrição está ativa no ponto de ótimo local: há uma colina/vale na função objetivo que
não está próxima do valor limite de uma restrição. Em casos como este, o gradiente será zero no
ótimo local (caso trivial).
b) Pelo menos uma restrição está ativa no ponto de ótimo local: neste caso, alguma restrição está
prevenindo o método de melhorar o valor da função objetivo. O gradiente não é zero!
As condições de KKT tratam os dois casos simultaneamente. Assim, devemos proceder como:
- Sempre escreva as restrições de modo que o lado direito (RHS) seja zero.
2 2 2 2
x 1+3 x 2≤5 se transforma em x 1+3 x 2−5≤0
- Dessa forma, restrições ativas sempre tem valor nulo, pois g( x)=0
- Restrições inativas tem um valor de função diferente de zero (i.e., g(x)=−4 ). Mas podemos
setar o multiplicador associado como λ =0 porque a restrição em questão está inativa.
- Portanto, sempre temos λ i gi ( x )=0 para i=1 ,2 , ... , m (cobre tanto restrições ativas quanto
inativas). Essa é conhecida como condição de ortogonalidade.
1. Condição Lagrangiana
3. Restrições
Uma observação importante é que no método dos multiplicadores de Lagrange, vimos que o sinal
do multiplicador λ i não importava (tanto faz o gradiente da restrição estar na mesma direção ou
direção contrária do gradiente da função objetivo).
Lembre-se que todas as restrições estão na forma gi ( x 1 , x 2 , ... , x n )≤0 , para i=1 ,2 , ... , m . O
gradiente aponta para a direção de maior crescimento da função. Então, se uma restrição dessa
forma está ativa, ou seja, gi ( x 1 , x 2 , ... , x n )=0 , então se mover na direção do gradiente é proibido,
pois a restrição proíbe a função de aumentar).
Agora, suponha que desejamos maximizar a função objetivo: significa que desejamos nos mover na
direção do gradiente da função. Dessa forma, se estamos em um ponto tentando nos mover na
direção do gradiente mas uma desigualdade está ativa e o seu gradiente está na mesma direção do
gradiente da função, o multiplicador de Lagrange correspondente será positivo e estaremos em um
ponto de ótimo local (pois restrição está ativa). Em outras palavras, uma restrição de desigualdade
“segura” o ponto quando o multiplicador de Lagrange é positivo, o que nos leva a condição de não
negatividade dos λ i . Ou seja, se multiplicador de Lagrange é negativo, então não estamos em um
ponto crítico!
Note que se o gradiente da restrição apontasse para a direção oposta (para baixo na figura anterior, o
que implicaria em inverter a ordem do crescimento da restrição, ou seja, para baixo aumentaria e
para cima diminuiria), poderíamos continuar subindo a colina em direção ao máximo absoluto.
RESUMO
∂L
i) =0 j=1, 2 ,... , n (Ponto de ótimo da Lagrangiana)
∂xj
Algumas perguntas:
∂L
(I) =20 x 1 + x 2+ λ =0
∂ x1
∂L
(II) =−2 x 2 + x 1−2 λ x 2=0
∂ x2
(III) λ (−x 1+ x 22 +5)=0
2
(IV) −x 1+ x 2 +5≤0
(V) λ ≥0
Vamos testar se o ponto (9 , 2) satisfaz todas as condições. Substituindo esse ponto em (I), temos
180+2+ λ =0
o que implica em λ =−182 , o que claramente fera a condição (V) – não negatividade! Portanto,
a solução em questão, não é uma solução válida!
(I) x 1+ x 2−10≤0
(II) x 1−8≤0
∂L
(III) =5−λ 1−λ 2=0
∂ x1
∂L
(IV) =4−λ 1=0
∂ x2
(V) λ 1 ( x1 + x 2−10)=0
(VI) λ 2 ( x1 −8)=0
(VII) λ 1 , λ 2≥0
Note que de (IV) temos que λ 1=4 , o que nos leva a λ 2=5−4=1 .
Substituindo os valores nas equações (V) e (VI), chega no seguinte sistema de equações:
4 x 1+ 4 x 2=40
{ x1 −8=0
*
Portanto, o ponto ⃗x =( 8 ,2) é um ponto de máximo local (confira que a Hessiana é negativa
semi-definida).
x 1+ x 2≤7
(I) x 1+ x 2−7≤0
A condição de ortogonalidade é:
(IV) λ (x 1+ x 2−7)=0
(V) λ ≤0
x 1=3+ λ e x 2=5+ λ
2 2
λ 3+ λ +5+ λ −7 =0
( )
2 2
Simplificando, temos:
λ ( λ +1)=0
a) Caso 1: λ =0
Então, temos que x 1=3 e x 2=5 . Porém, note que a restrição, dada pela equação (I), falha!
b) Caso 2: λ =−1
5 9
Neste caso, temos que x 1= e x 2= . Vamos checar se as condições de KKT são válidas.
2 2
5 9 14
(I) + −7= −7=7−7=0≤0 (OK)
2 2 2
L(x 1 , x 2 , x 3 , λ1 , λ2 )=x 21+ 2 x 22+ 3 x 23 −λ1 (x 1−x 2−2 x 3−12)−λ 2 (x 1+2 x 2−3 x 3−8)
∂L
(III) =2 x 1−λ 1−λ 2=0
∂ x1
∂L
(IV) =4 x 2+ λ 1−2 λ2=0
∂ x2
∂L
(V) =6 x 3 +2 λ 1+3 λ2=0
∂ x3
(VIII) λ 1 , λ 2≤0
a) λ 1=0
b) x 1−x 2−2 x 3−12=0
- Análise do caso a)
λ2 λ2 λ2
x⃗1= x⃗2= x⃗1=−
2 2 2
λ2 λ 2 λ
λ2 ( 2
+ 2 +3 −8 =0
2 2 )
Simplificando, temos:
λ 2 ( 3 λ2−8 )=0
8 8
que tem como soluções λ 2=0 ou
. Pela restrição de não positividade, λ 2=
λ 2= não é
3 3
viável, então resta apenas λ 2 =0 . Voltando para as equações (III), (IV) e (V), temos:
2 x 1=0 → x 1=0
4 x 2=0 → x 2=0
6 x 3=0 → x 3=0
Isso implica que a solução é ⃗x *=[0 , 0 , 0] . Note que a solução satisfaz todas as condições de
KKT e portanto é uma solução ótima viável (verifique que trata-se de um ponto de mínimo).
- Análise do caso b)
Temos que x 1−x 2−2 x 3−12=0 (*)
( λ 1+ λ2 ) (2 λ2 −λ 1) (2 λ 1+3 λ2 )
x 1= x 2= x 3=−
2 4 6
( λ 1+ λ 2) (2 λ 2−λ 1) (2 λ1 +3 λ 2)
− + −12=0
2 4 6
o que é equivalente a:
17 λ 1+12 λ 2=144
Porém, as condições de não positividade dizem que λ 1 , λ 2≤0 . Como podemos ver, não existem
valores negativos que satisfaçam a igualdade acima. Portanto, a única solução do problema é:
*
⃗x =[ x 1 , x 2 , x 3 ]=[0 , 0 ,0 ]
x 1≥80
x 1+ x 2≥120
(I) −x 1+ 80≤0
(II) −x 1−x 2+120≤0
∂L
(III) =2 x 1+ 60+ λ 1+ λ2 =0
∂ x1
∂L
(IV) =2 x 2+ λ 2=0
∂ x2
(V) λ 1 (−x 1+80)=0
Caso a) λ 1=0
Caso b) −x 1+ 80=0
− λ2 −60 λ2
x 1= =− −30
2 2
λ2
x 2=−
2
λ2 ( λ2 + 30+ λ2 + 120)=0
2 2
λ 2 ( λ 2+150)=0
x 1=0−30=−30 e x 2=0
150 150
x 1= −30=45 e x 2= =75
2 2
λ 2=−2 x2
Assim, podemos escrever:
−2 x 2 (−80−x 2+ 120)=0
−2 x 2 (−x 2 +40)=0
Note que a solução x 1=80 e x 2=0 viola a condição (II). Solução inválida!
λ 1=80−220=−140
λ 2=−80
Portanto, a solução x 1=80 e x 2=40 é viável pois satisfaz todas as condições de KKT, dadas
pelas equações de (I) a (VII).
2 2
x 1+ x 2≤5
3 x1 + x 2≤6
Note que temos uma restrição não linear, o que dificulta um pouco a álgebra nos cálculos manuais.
Utilize um computador para realizar os cálculos se necessário.
Luenberger, D. L., Ye, Y.; Linear and Nonlinear Programming, 3a ed., Springer, 2008.
Yanasse, H. H., Arenales, M., Morabito, R., Armentano, V. A.; Pesquisa Operacional, 2nd ed.,
Elsevier, 2015.
Avriel, Mordecai. Nonlinear Programming: Analysis and Methods. Dover Publishing, 2003.
Bazaraa, Mokhtar S. and Shetty, C. M. Nonlinear programming. Theory and algorithms. John Wiley
& Sons, 1979.
Jan Brinkhuis and Vladimir Tikhomirov, Optimization: Insights and Applications, Princeton
University Press, 2005.
Igor Griva, Stephen G. Nash and Ariela Sofer. Linear and nonlinear optimization. SIAM, 2a edição,
2009.
Changhyun Kwon, Julia Programming for Operations Research, 2 ed., 2021. Disponível em:
https://juliabook.chkwon.net/book/frontmatter
“The real voyage of discovery consists not in seeking new landscapes, but in having new eyes.”
(Marcel Proust)
Sobre o autor