pub struct Lion {
pub lr: f32,
pub betas: (Array, Array),
pub weight_decay: f32,
pub state: State,
}
Expand description
The Lion optimizer [1].
Since updates are computed through the sign operation, they tend to have larger norm than for other optimizers such as SGD and Adam. We recommend a learning rate that is 3-10x smaller than AdamW and a weight decay 3-10x larger than AdamW to maintain the strength `(lr
- wd)`. Our Lion implementation follows the original paper. In detail,
[1]: Chen, X. Symbolic Discovery of Optimization Algorithms. arXiv preprint arXiv:2302.06675.
Fields§
§lr: f32
The learning rate.
betas: (Array, Array)
The coefficients used for computing running averages of the gradient and its square.
Default to Lion::DEFAULT_BETAS
.
weight_decay: f32
The weight decay. Default to Lion::DEFAULT_WEIGHT_DECAY
.
state: State
Inner state.
Implementations§
Source§impl Lion
impl Lion
Sourcepub const DEFAULT_BETAS: (f32, f32) = _
pub const DEFAULT_BETAS: (f32, f32) = _
Default values for betas
Sourcepub const DEFAULT_WEIGHT_DECAY: f32 = 0f32
pub const DEFAULT_WEIGHT_DECAY: f32 = 0f32
Default value for weight_decay
Trait Implementations§
Source§impl Buildable for Lion
impl Buildable for Lion
Source§type Builder = LionBuilder
type Builder = LionBuilder
The builder type for this buildable type
Source§impl Builder<Lion> for LionBuilder
impl Builder<Lion> for LionBuilder
Source§impl Optimizer for Lion
impl Optimizer for Lion
Source§fn update_single(
&mut self,
key: &Rc<str>,
gradient: &Array,
parameter: &mut Array,
) -> Result<(), Exception>
fn update_single( &mut self, key: &Rc<str>, gradient: &Array, parameter: &mut Array, ) -> Result<(), Exception>
Update a single parameter with the given gradient. Read more
Source§fn update<M>(
&mut self,
model: &mut M,
gradients: impl Borrow<FlattenedModuleParam>,
) -> Result<()>where
M: ModuleParameters,
fn update<M>(
&mut self,
model: &mut M,
gradients: impl Borrow<FlattenedModuleParam>,
) -> Result<()>where
M: ModuleParameters,
Apply the gradients to the parameters of the model and update the model with the new
parameters.
Source§impl Updatable for &mut Lion
impl Updatable for &mut Lion
Source§fn updatable_states(&self) -> impl IntoIterator<Item = &Array>
fn updatable_states(&self) -> impl IntoIterator<Item = &Array>
Returns a list of references to the updatable states. Read more
Source§fn updatable_states_mut(&mut self) -> impl IntoIterator<Item = &mut Array>
fn updatable_states_mut(&mut self) -> impl IntoIterator<Item = &mut Array>
Returns a list of mutable references to the updatable states. Read more
Source§impl Updatable for Lion
impl Updatable for Lion
Source§fn updatable_states(&self) -> impl IntoIterator<Item = &Array>
fn updatable_states(&self) -> impl IntoIterator<Item = &Array>
Returns a list of references to the updatable states. Read more
Source§fn updatable_states_mut(&mut self) -> impl IntoIterator<Item = &mut Array>
fn updatable_states_mut(&mut self) -> impl IntoIterator<Item = &mut Array>
Returns a list of mutable references to the updatable states. Read more
Auto Trait Implementations§
impl Freeze for Lion
impl RefUnwindSafe for Lion
impl !Send for Lion
impl !Sync for Lion
impl Unpin for Lion
impl UnwindSafe for Lion
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoOption<T> for T
impl<T> IntoOption<T> for T
Source§fn into_option(self) -> Option<T>
fn into_option(self) -> Option<T>
Convert into an
Option
.