Documentation

Convex.Algorithm.NesterovSmooth

NesterovSmooth #

Main results #

This file mainly concentrates on the Nesterov algorithm for smooth convex optimization problems.

We prove the O(1 / k ^ 2) rate for this algorithm.

class Nesterov {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] (f : E) (f' : EE) (γ : ℕ+) (initial_point : E) :
Type u_1
Instances
    theorem Nesterov.diff {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} (γ : ℕ+) (initial_point : E) [self : Nesterov f f' γ initial_point] (x₁ : E) :
    HasGradientAt f (f' x₁) x₁
    theorem Nesterov.update1 {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] (k : ℕ+) :
    Nesterov.y f f' γ initial_point k = (1 - γ k) Nesterov.x f f' γ initial_point (k - 1) + γ k Nesterov.v f f' γ initial_point (k - 1)
    theorem Nesterov.update2 {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] (k : ℕ+) :
    Nesterov.x f f' γ initial_point k = Nesterov.y f f' γ initial_point k - (1 / (Nesterov.l f f' γ initial_point)) f' (Nesterov.y f f' γ initial_point k)
    theorem Nesterov.update3 {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] (k : ℕ+) :
    Nesterov.v f f' γ initial_point k = Nesterov.x f f' γ initial_point (k - 1) + (1 / γ k) (Nesterov.x f f' γ initial_point k - Nesterov.x f f' γ initial_point (k - 1))
    theorem Nesterov.hl {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] :
    Nesterov.l f f' γ initial_point > 0
    theorem Nesterov.smooth {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] :
    LipschitzWith (Nesterov.l f f' γ initial_point) f'
    theorem Nesterov.initial1 {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] (f : E) (f' : EE) {γ : ℕ+} (initial_point : E) [self : Nesterov f f' γ initial_point] :
    γ 1 = 1
    theorem Nesterov.initial2 {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {γ : ℕ+} {initial_point : E} [self : Nesterov f f' γ initial_point] :
    Nesterov.v f f' γ initial_point 0 = initial_point
    theorem one_iter {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {xm : E} {x₀ : E} {γ : ℕ+} {alg : Nesterov f f' γ x₀} (hfun : ConvexOn Set.univ f) (hg : ∀ (k : ℕ+), γ k = 2 / (k + 1)) (k : ℕ+) :
    f (Nesterov.x f f' γ x₀ k) - f xm - (1 - γ k) * (f (Nesterov.x f f' γ x₀ (k - 1)) - f xm) (Nesterov.l f f' γ x₀) * γ k ^ 2 / 2 * (Nesterov.v f f' γ x₀ (k - 1) - xm ^ 2 - Nesterov.v f f' γ x₀ k - xm ^ 2)
    theorem nesterov_algorithm_smooth {E : Type u_1} [NormedAddCommGroup E] [InnerProductSpace E] [CompleteSpace E] {f : E} {f' : EE} {xm : E} {x₀ : E} {γ : ℕ+} {alg : Nesterov f f' γ x₀} (hfun : ConvexOn Set.univ f) (hg : ∀ (k : ℕ+), γ k = 2 / (k + 1)) (min : IsMinOn f Set.univ xm) (con : ∀ (k : ℕ+), (1 - γ k) / γ k ^ 2 1 / γ (k - 1) ^ 2) (k : ℕ+) :
    f (Nesterov.x f f' γ x₀ k) - f xm 2 * (Nesterov.l f f' γ x₀) / (k + 1) ^ 2 * x₀ - xm ^ 2