Loading...
Searching...
No Matches
quasi_newton.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
7
8namespace opennn
9{
10
11class QuasiNewton final : public Optimizer
12{
13
14public:
15
26
27 explicit QuasiNewton(Loss* = nullptr);
28 void set_minimum_loss_decrease(const float new_minimum_loss_decrease) { minimum_loss_decrease = new_minimum_loss_decrease; }
30 void from_JSON(const JsonDocument&) override;
31
32 void to_JSON(JsonWriter&) const override;
33
34private:
35
36 void update_full_batch_parameters(const Batch&,
40
41 void calculate_inverse_hessian(OptimizerData&) const;
42
43 struct LineSearchState
44 {
45 void reset(Index parameters_number)
46 {
47 direction.resize(parameters_number);
48 potential.resize(parameters_number);
49 initial = 0.0f;
50 learning_rate = 0.0f;
51 old_learning_rate = 0.0f;
52 slope = 0.0f;
53 }
54
55 VectorR direction;
56 VectorR potential;
57 float initial = 0.0f;
58 float learning_rate = 0.0f;
59 float old_learning_rate = 0.0f;
60 float slope = 0.0f;
61 };
62
63 pair<float, float> backtrack_along_direction(const Batch&,
64 ForwardPropagation&,
65 BackPropagation&,
66 float);
67
68 LineSearchState line_search;
69
70 float first_learning_rate = 0.01f;
71
72 float minimum_loss_decrease = 1.0e-6f;
73};
74
75}
Definition json.h:75
Definition json.h:92
Definition loss.h:19
Optimizer(Loss *=nullptr)
QuasiNewton(Loss *=nullptr)
void set_minimum_loss_decrease(const float new_minimum_loss_decrease)
Definition quasi_newton.h:28
void from_JSON(const JsonDocument &) override
void to_JSON(JsonWriter &) const override
DataSlot
Definition quasi_newton.h:16
@ InverseHessian
Definition quasi_newton.h:23
@ OldGradient
Definition quasi_newton.h:20
@ ParameterUpdates
Definition quasi_newton.h:19
@ BfgsWork
Definition quasi_newton.h:22
@ OldParameters
Definition quasi_newton.h:17
@ GradientDifference
Definition quasi_newton.h:21
@ OldInverseHessian
Definition quasi_newton.h:24
@ ParameterDifferences
Definition quasi_newton.h:18
TrainingResult train() override
Definition configuration.h:10
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Definition back_propagation.h:19
Definition batch.h:60
Definition forward_propagation.h:52
Definition optimizer.h:28
Definition training_result.h:20