Neptune Blog

Part 1: Instruction Fine-Tuning: Fundamentals, Architecture Modifications, and Loss Functions

9 min
23rd October, 2025

TL;DR

Instruction fine-tuning (IFT) refines pre-trained large language models (LLMs) to follow specific task instructions by training on prompt-response pairs.

At the core of IFT is a dual-objective loss function that balances instruction-following with general language modeling capabilities.

Each IFT training sample consists of a task, a context, and a target response. Datasets can be augmented through automated approaches to increase task diversity and difficulty.

Modifications to an LLM’s input layer, attention mechanism, and output layer improve instruction-following capabilities and make IFT more efficient.

Instruction Fine-Tuning (IFT) emerged to address a fundamental gap in Large Language Models (LLMs): aligning next-token prediction with tasks that demand clear, specific instructions.

While LLMs excel at linguistic pattern recognition through self-supervised pre-training, they are not inherently optimized for following explicit directives. This limitation stems from their pre-training objective: predicting the next token in a sequence based on statistical patterns, which does not guarantee that the model will interpret user queries as formal instructions requiring specific actions.

IFT bridges this gap through dual-objective training on prompt-response pairs, where each example contains an instruction, an optional context, and a target output. On the one hand, it aims to maintain the LLM’s general language modeling capabilities to ensure fluent text generation. On the other hand, it incorporates an instruction-following loss function that evaluates how well the model’s outputs align with reference answers for given directives.

In this blog post, which is the first in a three-part series, we will explore the foundations of instruction fine-tuning, covering fundamental concepts like instruction masking and the “two-stream architecture” as well as strategies for data preparation and mitigating catastrophic forgetting.

Instruction fine-tuning in a nutshell

IFT tailors LLMs to follow user instructions by bridging their inherent next-word prediction with human-defined objectives.

The IFT loss function combines the standard language modeling loss (Lnext-token) that maintains the fluency and versatility inherited from large-scale pre-training with an instruction-following loss (Linstruction) that guides the model’s output toward a target response.

The instruction-following loss penalizes outputs that deviate from gold answers aligned with user instructions instead of simply generating statistically likely but potentially off-topic continuations.

Formalizing this idea, one can describe the overall loss as: 

Ltotal = Lnext−token + λ Linstruction

The scalar λ controls the trade-off between maintaining language fluency and enhancing instruction adherence. 

Additionally, instruction masking is employed during training to enhance generalization. In this technique, random tokens within the instruction are replaced with mask tokens or removed entirely, forcing the model to infer the intent from incomplete information.

For example, an instruction like “Summarize the following article.” might become “Summarize the [MASK] article.”. This prevents the model from simply memorizing specific instruction phrasings and instead develops robust comprehension of task requirements, boosting its ability to handle variying instruction formats.

How is IFT different from traditional fine-tuning?

Traditional fine-tuning customizes a pre-trained model for a specific task, such as sentiment classification, by training it on a set of labeled examples. This process often limits the model’s capabilities to just one type of task and can lead to “catastrophic forgetting” of others. As a result, if we ask a sentiment-tuned model to summarize text or translate sentences, its performance may drop compared to the original model.

In contrast, IFT treats every task as a request the model must interpret and solve. For example, one training sample might say, “Explain the main point of this paragraph,” while another might say, “Detect the sentiment in the following review.” Over many such instructions, the model becomes adept at switching tasks, retaining prior knowledge, and responding to new or unusual prompts.

This approach has proven especially helpful for zero-shot and few-shot tasks because the model “expects” to receive instructions and produce context-relevant answers rather than learning just one format or label set. Research published by Google in 2021 demonstrates that instruction tuning substantially improves zero-shot performance on unseen tasks, with instruction-tuned models like FLAN surpassing few-shot GPT-3 by large margins on multiple benchmarks.

Parameter-efficient instruction fine-tuning

While major foundation models like GPT-4 or Llama-2 undergo full parameter instruction fine-tuning during development, parameter-efficient fine-tuning (PEFT) methods have become widely adopted for instruction fine-tuning since the LoRA paper was published in 2021. They are particularly popular among researchers and practitioners with limited computational resources.

PEFT methods integrate lightweight, trainable modules such as adapters that are inserted into each transformer layer. Instead of modifying the entire network, only these additional parameters are updated. This modular approach minimizes disruption to the general-purpose parameters (thus reducing the risk of catastrophic forgetting) while facilitating rapid adaptation to new instruction formats or domains without the computational overhead of full model retraining.

Preparing training data for instruction fine-tuning

Instruction fine-tuning requires training data in a specific format: pairs of instructions and their corresponding high-quality outputs.

Each pair consists of:

  1. An instruction that clearly defines the task (e.g., “Translate the following sentence to French”).
  2. The input or context when needed (e.g., the sentence to translate).
  3. A reference output that demonstrates correct task completion (e.g., the accurate French translation).

The 2022 FLAN-T5 paper established this format as the foundation for IFT, demonstrating that models trained on diverse instruction-output pairs could effectively generalize to new tasks. The key challenge lies in creating, curating, and scaling these instruction-output pairs while maintaining high quality and task diversity.

Cookbook example: Summarizing academic papers

The canonical step-by-step process for building a high-quality instruction dataset looks like this:

  1. Identify the core task and goals: Suppose you want a model that generates summaries of short academic articles for researchers. You may need the model to highlight the paper’s main objective, methods, and results while keeping the summary within a specified length.
  2. Write clear instructions: Begin by explicitly defining what “summarizing an academic paper” means in your context. An example instruction could be: “Summarize the following academic paper in two to three sentences, emphasizing the methodology and main findings. Keep it concise and accurate.”
  1. Provide a reference response: Pair the above instruction with a high-quality, domain-appropriate answer. For instance, if you have a short excerpt from a paper discussing a machine-learning approach to image classification, your manually written output might look like: “This paper proposes a convolutional neural network architecture with skip connections for image recognition. The authors train and evaluate on a large, labeled dataset, showing a 3% lower error rate than previous baselines. These findings suggest that deeper models with specialized layers can substantially improve image classification accuracy.”
  1. Maintain consistent formatting: Store your instruction–output pair in a structured file. A minimal JSON Lines entry could look like this:

{“instruction“: “Summarize the following academic paper in two to three sentences, emphasizing the methodology and main findings. Keep it concise and accurate.\n\nPAPER TEXT:\nHere is a short excerpt from an academic paper on convolutional neural networks with skip connections, describing its design…”, output“: “This paper proposes a convolutional neural network architecture …”}

  1. Quality check via small-scale testing: Fine-tune a small model using maybe 20 to 50 similarly styled instruction–output pairs. See whether the generated summaries match the style, detail, and brevity you want. If the summaries are too long, incomplete, or inaccurate, refine your instructions or revise your reference responses.

With the small initial dataset at hand, we can then create extended versions of the same instruction, for example “Summarize the following academic paper in 100 words or fewer, highlighting the statistical methods used,” or “Provide a brief overview of this conference paper’s main contribution, and then list two of its limitations.” Adding instructions that vary in format pushes the model to adapt to different constraints (like word limits or specific focal points).

Automated approaches for dataset growth and adaptation

Creating variations and additional data samples manually is often infeasible. Instead, LLMs can be used to augment IFT datasets.

The Self-Instruct methodology, first published in late 2022, pioneered automated instruction dataset generation. Starting with a small set of instruction-output pairs, an LLM learns to recognize and replicate instruction patterns. The model then generates new instructions by varying task types and domains. Simultaneously, a separate model instance produces corresponding outputs. A final verification step ensures quality and consistency.

This automated approach powered the Alpaca model released in March 2023, which achieved remarkable performance using 52k synthetic instruction-output pairs.

In April 2023, the WizardLM team introduced Evol-Instruct, which evolves instructions through two mechanisms:

  • In-depth evolution uses targeted LLM prompting with examples to inject additional requirements. The system shows the LLM examples of adding constraints (like word limits) or reasoning steps, then asks it to apply similar transformations to new instructions. For instance: “Rewrite this summarization task to require exactly 50 words and include reasoning steps.”. Each evolution adds one new requirement, leveraging the LLM’s understanding of instruction patterns.
  • In-breadth evolution expands topic coverage by prompting the LLM to generate entirely new instructions in underrepresented areas. The system asks: “Create a new instruction similar to this one, but in a less common domain.”. The LLM uses its knowledge to identify rare topics, while unsupervised clustering helps track topic distribution.

A quality filter automatically discards evolved instructions that don’t yield new information or confuse the model (indicated by short responses or nonsensical language). Failed evolutions return to the pool for future attempts, helping the system identify and address gaps in the model’s capabilities.

Beyond basic instruction-response pairs and complexity variations, there are numerous sophisticated approaches for dataset construction and augmentation in instruction fine-tuning, including multi-turn dialogue training, domain-specific data synthesis, and cross-lingual instruction adaptation. We will explore these advanced data generation and curation strategies in detail in the third part of this series.

Data quality control

Automated training data generation for IFT (via Self-Instruct or Evol-Instruct) can produce large amounts of synthetic data, but must be paired with robust filtering to remove illogical or off-topic outputs.

The Self-Refine approach presented at NeurIPS 2023 provides a built-in mechanism: the model reviews its drafts and discards those failing coherence checks. The process uses specific metrics to evaluate quantitative metrics to evaluate instruction-response pairs:

  • Semantic coherence scores measure the logical flow between instruction and response using embedding similarity.
  • Task alignment verification ensures responses directly address the instruction rather than generating tangentially related content.
  • Format validation checks structural consistency using predefined patterns.
  • Reference comparison calculates similarity scores against known high-quality examples.

For filtering, the system applies confidence thresholds:

if semantic_score < THRESHOLD or alignment_score < THRESHOLD:
    flag_for_review(instruction_response_pair)
if contradiction_detected(response) or complexity_score > MAX_COMPLEXITY:
    reject(instruction_response_pair)

For high-stakes domains (e.g., finance, law, health), human reviewers provide additional verification. This prevents simpler tasks from dominating the dataset. The system maintains a balanced distribution of complexity levels by tracking and adjusting acceptance rates across different difficulties.

This automated first-pass filtering enables efficient processing of large-scale datasets while ensuring consistent quality. However, two key limitations exist:

  1. The system may occasionally reject valid but unconventional instruction patterns.
  2. Automated metrics cannot fully capture nuanced aspects of instruction quality that human experts can identify.

Modifying input layers for instruction processing

At its core, instruction fine-tuning requires the model to distinguish between directives (“summarize this text”) and content (“the text to summarize”). Standard LLMs process all tokens through the same embedding space, treating all input tokens identically. To improve instruction-following and enhance IFT performance, we can modify the model’s input layers to create separate processing paths for directives and content.

Incorporating instruction-specific tokens or embeddings

To create dedicated representations, we can add special tokens like [INST] and [/INST] to mark the beginning and end of instructions and map them to a separate embedding space. Unlike regular embeddings that capture semantic meaning, these instruction embeddings encode the directive nature of the text.

The implementation of instruction-specific embeddings requires three architectural changes, each of which increases the model’s parameter count:

  1. Expand the model’s vocabulary to include the special instruction tokens.
  2. Create a separate embedding matrix specifically for instruction content.
  3. Condition the attention mechanisms on whether a token comes from an instruction or the main content.

This architectural enhancement yields significant benefits, particularly for complex directives. InstructGPT showed that models with instruction-specific embeddings excel at following multi-step instructions while maintaining consistency across long outputs. However, they need training on diverse instruction types ranging from simple task definitions to detailed format specifications and constraints.

The two-stream architecture

A widely adopted approach is the two-stream architecture, demonstrated in Flan-T5 and InstructGPT, in which the model processes the instructions and the primary input through distinct pathways and then combines these representations.

Below is a simplified example demonstrating the idea in PyTorch. We assume a base LLM backbone (base_model) and a separate instruction encoder (instruction_encoder).

import torch.nn as nn
from torch import Tensor
from transformers import PreTrainedModel

class InstructionAwareModel(nn.Module):
    def __init__(self, base_model: PreTrainedModel, instruction_encoder: PreTrainedModel):
        super().__init__()
        self.base_model = base_model
        self.instruction_encoder = instruction_encoder
        self.fusion_layer = nn.Linear(base_model.config.hidden_size * 2, base_model.config.hidden_size)

   def forward(self, input_ids: Tensor, attention_mask: Tensor, instruction_ids: Tensor, instruction_attention_mask: Tensor) -> Tensor:
       input_embeds = self.base_model.embeddings(input_ids)
       instruction_embeds = self.instruction_encoder(instruction_ids, attention_mask=instruction_attention_mask).last_hidden_state


        # Combine input and instruction embeddings
        fused_embeds = self.fusion_layer(torch.cat([input_embeds, instruction_embeds], dim=-1))
        outputs = self.base_model(inputs_embeds=fused_embeds, attention_mask=attention_mask)
        return outputs

In this example, the fusion layer merges instruction embeddings and regular input embeddings, treating the instructions as a separate source of feature information. Throughout the forward pass, the model “sees” which tokens pertain to instructions and belong to the primary input.

After the initial fusion, we may still want to reinforce the presence of instruction cues in deeper layers of the model. Otherwise, the underlying network might lose track of the instruction signal as it proceeds through multiple transformations.

One way to preserve this context is to introduce additional gating or residual pathways that reinject instruction representations at every layer:

import torch
import torch.nn as nn
from torch import Tensor

class InstructionAwareLayer(nn.Module):
    def __init__(self, hidden_size: int):
        super().__init__()
        self.self_attention = nn.MultiheadAttention(hidden_size, num_heads=8)
        self.instruction_gate = nn.Linear(hidden_size * 2, hidden_size)
        self.layer_norm = nn.LayerNorm(hidden_size)

    def forward(self, hidden_states: Tensor, instruction_context: Tensor):
        attn_output, _ = self.self_attention(hidden_states, hidden_states, hidden_states)
        gated_output = torch.sigmoid(self.instruction_gate(torch.cat([attn_output, instruction_context], dim=-1)))
        output = self.layer_norm(hidden_states + gated_output * instruction_context)
        return output

Here, the instruction gate determines how strongly the instructions should influence each layer’s output. The model can thus dynamically decide when (and how much) instruction context remains relevant at each step.

Attention mechanisms for prioritizing instruction information

Instruction-guided attention modifies the standard attention computation to give higher weight to instruction tokens during processing. This works by adding learnable bias terms to the attention scores for tokens marked as instructions.

The mechanism involves three modifications to the standard multi-head attention:

  1. Instruction token identification: Special tokens like [INST] and [/INST] mark instruction boundaries, from which we can create a binary mask that identifies which tokens contain directives versus content.
  2. Attention score biasing: A learnable bias vector is added to attention scores for instruction tokens, increasing their influence on the output representation.
  3. Dynamic bias adjustment: The bias strength adapts based on the instruction complexity, using the instruction embedding to modulate attention intensity.

This approach ensures that when generating responses, the model consistently references the original directive rather than getting distracted by longer context passages. InstructGPT demonstrated that using instruction-biased attention led to 15% better instruction adherence on complex multi-step tasks compared to the standard attention mechanism.


Instruction-guided attention mechanism incorporating instruction queries and flags as additional inputs to multi-head attention for enhanced instruction adherence.

The hidden states, instruction query, and attention mask are processed by a multi-head attention block. The instruction mask is applied to the resulting output through element-wise multiplication, which amplifies attention weights for instruction tokens while dampening non-instruction content. This ensures directive information maintains prominence in the representation. The original hidden states are then added back through a residual skip connection to obtain the final output. This skip connection preserves the model's original language modeling capabilities while incorporating the instruction-aware attention modifications, preventing the instruction-specific processing from completely overwriting the base representations and maintaining stable gradient flow during training.

Instruction-guided attention mechanism incorporating instruction queries and flags as additional inputs to multi-head attention for enhanced instruction adherence.

The hidden states, instruction query, and attention mask are processed by a multi-head attention block. The instruction mask is applied to the resulting output through element-wise multiplication, which amplifies attention weights for instruction tokens while dampening non-instruction content. This ensures directive information maintains prominence in the representation. The original hidden states are then added back through a residual skip connection to obtain the final output. This skip connection preserves the model’s original language modeling capabilities while incorporating the instruction-aware attention modifications, preventing the instruction-specific processing from completely overwriting the base representations and maintaining stable gradient flow during training.

Instruction-biased attention adds learnable bias parameters to attention keys for instruction tokens, preventing them from being overshadowed by longer context sequences. This approach amplifies instruction token weights during attention computation, ensuring directive signals maintain influence throughout processing.

import torch.nn as nn
from torch import Tensor

class InstructionGuidedAttention(nn.Module):
    def __init__(self, hidden_size: int):
        super().__init__()
        self.query_proj = nn.Linear(hidden_size, hidden_size)
        self.key_proj = nn.Linear(hidden_size, hidden_size)
        self.value_proj = nn.Linear(hidden_size, hidden_size)
        self.instruction_bias = nn.Parameter(torch.randn(1, 1, hidden_size))

    def forward(self, hidden_states: Tensor, instruction_mask: Tensor):
        query = self.query_proj(hidden_states)
        key = self.key_proj(hidden_states)
        value = self.value_proj(hidden_states)

        key += self.instruction_bias * instruction_mask.unsqueeze(-1)
        attention_scores = torch.matmul(query, key.transpose(-1, -2))
        attention_probs = nn.functional.softmax(attention_scores, dim=-1)
        context = torch.matmul(attention_probs, value)
        return context

The key implementation challenge is bias initialization. The FLAN-T5 paper shows that instruction bias parameters starting near zero prevent attention collapse, while excessive bias causes the model to ignore non-instruction content entirely.

Adjusting output layers for instruction-following behavior

While input-layer modifications help the model recognize and prioritize instructions, output-layer modifications shape the response. Standard LLMs generate tokens with a fixed decoding strategy, which can lead to outputs that are either too rigid or too stochastic. By adapting the output layers, we can calibrate the model’s expressiveness and reasoning depth, leading to more accurate and reliable instruction following.

Implementing dynamic temperature controls

Dynamic temperature control automatically adjusts the temperature hyperparameter during inference based on instruction characteristics, rather than using a fixed value across all tasks. A model analyzes the input instructions and predicts the optimal temperature setting.

For simple factual queries, using a low temperature ensures deterministic and consistent responses. Creative writing tasks benefit from a high temperature, encouraging exploration and diversity. For complex reasoning, a medium temperature strikes a balance between accuracy and exploration.

Dual-head architecture for adaptive temperature prediction during instruction fine-tuning. The model generates logits and context-specific temperature values in parallel, enabling dynamic control over output randomness based on instruction type and context.
Dual-head architecture for adaptive temperature prediction during instruction fine-tuning. The model generates logits and context-specific temperature values in parallel, enabling dynamic control over output randomness based on instruction type and context.

Models like T5-based classifiers can be fine-tuned to predict optimal temperature values from instruction embeddings. Training a complexity classifier requires labeled instruction data across different task types. For detailed implementation strategies and temperature scheduling techniques, see this 2022 survey by Beijing Institute of Technology researchers.

The InstructGPT paper showed that adaptive temperature improved task-specific performance by 12% compared to fixed temperature settings.

Incorporating Chain-of-Thought mechanisms

Chain-of-thought integration adds intermediate reasoning steps to the model’s output generation, forcing explicit step-by-step problem decomposition before producing final answers. Rather than jumping directly to conclusions, the model learns to generate structured outputs with reasoning traces

CoT mechanisms require training data with explicit reasoning steps. The Chain-of-Thought Prompting paper showed 89% accuracy improvements on math problems when models were trained on step-by-step solutions versus direct answers. This approach proves most effective for multi-step mathematical reasoning, logical deduction tasks and complex instruction decomposition.

Multi-step parallel reasoning architecture for instruction fine-tuning. The model processes hidden states through three parallel reasoning pathways, each applying linear transformations and activations, before concatenating and projecting the combined representations to enable complex multi-step reasoning within instructions.
Multi-step parallel reasoning architecture for instruction fine-tuning. The model processes hidden states through three parallel reasoning pathways, each applying linear transformations and activations, before concatenating and projecting the combined representations to enable complex multi-step reasoning within instructions.

The computational trade-offs are significant: CoT increases inference time by 2-3x due to longer output sequences, but reduces error rates by 40-60% on complex reasoning tasks according to this analysis. Without specialized reasoning data during training, models struggle to utilize CoT capabilities effectively, often producing superficial step-by-step formatting without genuine logical progression.

Loss calculation for instruction fine-tuning

As discussed in the section Instruction fine-tuning in a nutshell, the dual-objective loss function:

Ltotal = Lnext−token + λ Linstruction

is at the heart of IFT. To implement this in practice, we need to understand how the model generates separate outputs for language modeling and instruction following, which builds directly on the two-stream architecture.

From the two-stream architecture to dual loss computation

To recap, the two-stream architecture processes instructions and content through separate pathways, ultimately producing two types of outputs:

  • Language modeling logits: generated by the transformer layers for next-token prediction across all tokens.
  • Instruction-following logits: generated by instruction-aware layers that evaluate alignment with the given directive.

Here’s what a basic composite loss could look like in PyTorch:

def instruction_tuning_loss(lm_logits, instruction_logits, labels, instruction_labels, lambda_=0.5):
    lm_loss = nn.CrossEntropyLoss()(lm_logits.view(-1, lm_logits.size(-1)), labels.view(-1))
    instruction_loss = nn.CrossEntropyLoss()(instruction_logits, instruction_labels)
    return lambda_ * lm_loss + (1 - alpha) * instruction_loss

In practice, we might feed our model both a “main text” branch for next-token prediction and a separate branch or head for instruction-specific classification or ranking. The parameter lambda_ lets us tune how strictly the model must adhere to instruction tokens versus how well it should predict the next word in general text.

Multi-task loss for diverse instruction

In many cases, we’ll have instructions spanning multiple task categories (e.g., summarization, translation, question-answering). A multi-task loss lets us simultaneously fine-tune on data drawn from different instruction sets. When training on multiple instruction types simultaneously, we need to track which task each example belongs to and weight the losses accordingly. This requires adding task identification to our training data.

Here’s a conceptual example in PyTorch:

import torch.nn as nn
from torch import Tensor

class MultiTaskInstructionLoss(nn.Module):
    def __init__(self, num_tasks: int):
        super().__init__()
        self.task_weights = nn.Parameter(torch.ones(num_tasks))

    def forward(self, outputs: Tensor, labels: Tensor, task_ids: Tensor):
        losses = []
        for task_id in range(len(self.task_weights)):
            task_mask = (task_ids == task_id)
            if task_mask.any():
                task_outputs = outputs[task_mask]
                task_labels = labels[task_mask]
                task_loss = nn.CrossEntropyLoss()(task_outputs, task_labels)
                losses.append(self.task_weights[task_id] * task_loss)
        return sum(losses) / len(losses)

The task_ids tensor is derived from the training data preparation step, where each instruction-output pair is labeled with its task category (summarization=0, translation=1, QA=2, etc.). This prevents common tasks from overshadowing specialized ones during training.

Implementing loss over instructions

Beyond the composite approach, we can apply loss directly to the instruction understanding components. This differs from the composite loss by explicitly optimizing the model’s internal representation of instructions, rather than just the final outputs:

def instruction_aware_loss(model_output, target_output, instruction, alpha=0.3):
    output_loss = nn.CrossEntropyLoss()(model_output, target_output)
    instruction_embedding = model.encode_instruction(instruction)
    instruction_loss = nn.MSELoss()(instruction_embedding, model.get_instruction_representation())
    return (1 - alpha) * output_loss + alpha * instruction_loss.

This approach explicitly optimizes how well the model internally represents and “understands” the instruction, complementing the output-focused losses.

Preserving general knowledge while adapting to instructions

Finally, any time we fine-tune an LLM on a specialized task, we risk catastrophic forgetting. This is the phenomenon where neural networks lose previously learned information when learning new tasks, occurring because parameter updates for new tasks can overwrite weights crucial for old knowledge. Regularization schemes, like penalizing deviation from the original weights, mitigate this. 

Elastic Weight Consolidation (EWC) identifies which parameters are most important for previous tasks using Fisher information, then adding a regularization penalty that prevents large changes to these critical weights. The technique works by computing the Fisher Information Matrix during the original task, which estimates parameter importance, then constraining updates during new task learning.

Here is a basic implementation in PyTorch:

class ElasticWeightConsolidation(nn.Module):
    def __init__(self, model, pretrained_model, importance_factor):
        super().__init__()
        self.model = model
        self.pretrained_model = pretrained_model
        self.importance_factor = importance_factor

    def forward(self):
        loss = 0
        for (name, param), (_, param_old) in zip(self.model.named_parameters(), 
                              self.pretrained_model.named_parameters()):
            loss += 0.5 * self.importance_factor * (param - param_old).pow(2).sum()
        return loss

What’s next?

We’ve now covered the basics of instruction fine-tuning from data preparation over architectural modifications to the design of the loss function.

In the second part of this series, we’ll look into optimizing the training process and cover evaluation of instruction-tuned models beyond minimizing the dual-objective loss function.

Was the article useful?

    This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.