Skip to main content

MetaLearner

Struct MetaLearner 

Source
pub struct MetaLearner {
    pub config: MetaLearnerConfig,
    pub meta_params: MetaParameters,
    pub task_history: HashMap<TaskId, TaskAdaptation>,
    pub meta_step: u64,
}
Expand description

MAML-inspired meta-learner.

§Overview

  • MetaLearner::adapt_to_task runs the inner loop: starting from the shared meta_params it takes config.inner_steps gradient-descent steps on the support set of the given task and evaluates the adapted model on the query set.
  • MetaLearner::meta_update runs the outer loop: given a batch of TaskAdaptations it averages the adapted weights, computes a meta-gradient (direction from current meta-weights to the average), and updates meta_params with config.meta_lr.
  • MetaLearner::predict performs linear inference.

Fields§

§config: MetaLearnerConfig

Hyper-parameters that control the learning algorithm.

§meta_params: MetaParameters

Shared meta-parameters (the “good initialisation” learned by MAML).

§task_history: HashMap<TaskId, TaskAdaptation>

Per-task adaptation results keyed by TaskId.

§meta_step: u64

Count of completed outer meta-update steps.

Implementations§

Source§

impl MetaLearner

Source

pub fn new(config: MetaLearnerConfig) -> Self

Create a new MetaLearner with weights initialised using xorshift64.

Each weight is set to xorshift64(state) as f64 / u64::MAX as f64 * 0.01 so that the initial values are small random numbers in [0, 0.01).

Source

pub fn loss(prediction: f64, label: f64, task_type: &TaskType) -> f64

Compute the scalar loss for a single prediction/label pair.

task_typeloss formula
Classificationmax(0, 1 - label * tanh(prediction))
Regression(prediction - label)²
Rankingmax(0, 1 - prediction * label)
Source

pub fn gradient( features: &[f64], prediction: f64, label: f64, ) -> (Vec<f64>, f64)

Compute the gradient of the MSE loss with respect to the linear model parameters (weights and bias).

Returns (dL/dw, dL/db) where dL/dw[i] = 2*(prediction-label)*features[i] and dL/db = 2*(prediction-label).

Source

pub fn predict( &self, features: &[f64], adaptation: Option<&TaskAdaptation>, ) -> Result<f64, MetaError>

Perform a linear prediction using either the meta-parameters or, if adaptation is Some, the task-adapted parameters.

§Errors

Returns MetaError::DimensionMismatch if features.len() != config.dims.

Source

pub fn adapt_to_task( &mut self, task: &MetaTask, ) -> Result<TaskAdaptation, MetaError>

Run the inner loop for task: adapt from meta_params using the support set, then evaluate on the query set.

The resulting TaskAdaptation is stored in task_history and returned to the caller.

§Errors
Source

pub fn meta_update( &mut self, adaptations: &[TaskAdaptation], ) -> Result<(), MetaError>

Run the outer loop (meta-update).

Averages adapted_weights across all provided adaptations, then computes a meta-gradient as the direction from current meta-weights to that average and applies a single gradient-descent step with meta_lr.

§Errors
Source

pub fn task_similarity(a: &TaskAdaptation, b: &TaskAdaptation) -> f64

Compute the cosine similarity between the adapted_weights of two task adaptations. Returns 0.0 if either weight vector is all-zero.

Source

pub fn best_task(&self) -> Option<(&TaskId, &TaskAdaptation)>

Return the task with the lowest query loss from the history, or None if the history is empty.

Source

pub fn reset_task(&mut self, task_id: &TaskId)

Remove the stored adaptation for task_id from the history.

Source

pub fn stats(&self) -> MetaLearnerStats

Compute aggregate statistics over the current task history.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more