From f39af7c307d1c599ea2d1746cf796c6e6382ce03 Mon Sep 17 00:00:00 2001 From: Sandeep Puthanveetil Satheesan Date: Fri, 25 Oct 2024 10:28:35 -0700 Subject: [PATCH 1/6] Add figure numbers. --- sections/foundation-models.qmd | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/sections/foundation-models.qmd b/sections/foundation-models.qmd index 8ca8cef..03455ec 100644 --- a/sections/foundation-models.qmd +++ b/sections/foundation-models.qmd @@ -4,7 +4,7 @@ Foundation models (FM) are deep learning models trained on massive raw unlabelled datasets usually through self-supervised learning. FMs enable today’s data scientists to use them as the base and fine-tune using domain specific data to obtain models that can handle a wide range of tasks (language, vision, reasoning etc.). In this chapter, we provide an introduction to FMs, its history, evolution, and go through its key features and categories, and a few examples. We also briefly discuss how foundation models work. This chapter will be a precursor to the hands-on session that follows on the same topic. -![Fig : Image source- 2021 paper on foundation models by Stanford researchers [@Bommasani2021FoundationModels]](../images/foundation-models/foundation_models.png) +![Image source- 2021 paper on foundation models by Stanford researchers [@Bommasani2021FoundationModels]](../images/foundation-models/foundation_models.png){#fig-fm-adaptation} In this session, we take a closer look at what constitutes a foundation model, a few examples, and some basic principles around how it works. @@ -33,7 +33,7 @@ In this session, we take a closer look at what constitutes a foundation model, a Foundation models, introduced in 2021 by Standford Researchers [@Bommasani2021FoundationModels], are characterized by their enormous neural networks trained on vast datasets through self-supervised learning. These models serves as a "foundation" on which many task-specific models can be built by adaptation. Their capabilities improves with more data, requiring substantial computational power for training. These models can be adapted to various downstream tasks and are designed for reuse, leveraging transfer learning to enhance performance across different applications. ::: {.column-margin} -![Fig : 2021 paper on foundation models by Stanford researchers [@Bommasani2021FoundationModels]](../images/foundation-models/foundation_models_paper.png) +![First page screenshot of the 2021 paper on foundation models by Stanford researchers [@Bommasani2021FoundationModels]](../images/foundation-models/foundation_models_paper.png){#fig-fm-2021-paper} ::: With the start of availability of big data for training, evidence showed that performance improves with size. The field came to the conclusion that scale matters, and with the right model architecture, intelligence comes with large-scale data. @@ -46,7 +46,7 @@ Here's a few examples of foundation models and their parameter count: * Wikipedia consists of only 3% of its training data * GPT-4 [@openai2024gpt4technicalreport] - 1.8 trillion parameters -![Fig : Growth in compute power. (Source: GPT-3 paper [@DBLP:journals/corr/abs-1810-04805])](../images/foundation-models/compute-power-training.png) +![Growth in compute power. (Source: GPT-3 paper [@DBLP:journals/corr/abs-1810-04805])](../images/foundation-models/compute-power-training.png){#fig-gpt-3-compute-power} ## Types of foundation models @@ -100,13 +100,13 @@ Here's some examples of multimodal foundation models: Introduced in 2017 by the paper "Attention is all you need" [@DBLP:journals/corr/VaswaniSPUJGKP17], the transformer architecture revolutionized NLP by enabling models to efficiently capture complex relationships in data without the limitations of recurrence. This architecture is known for its ability to handle sequential data efficiently. Its parallel processing capabilities and scalability have made it a foundational model for many state-of-the-art systems in various domains, including image processing and speech recognition. Checkout "The Illustrated Transformer" (blog post)[https://jalammar.github.io/illustrated-transformer/] for a detailed overview of the transformer architecture. -![Fig : Transformer architecture](../images/foundation-models/transformer-architecture.png) +![Transformer architecture](../images/foundation-models/transformer-architecture.png){#fig-transformer-architecture} ##### Attention Mechanism Attention is, to some extent, motivated by how we pay visual attention to different regions of an image or correlate words in one sentence [@weng2018attention]. we can explain the relationship between words in one sentence or close context. When we see “eating”, we expect to encounter a food word very soon. The color term describes the food, but probably not so much with “eating” directly. -![Fig : One word attends to other words in the same sentence differently](../images/foundation-models/human-attention.png) +![One word attends to other words in the same sentence differently](../images/foundation-models/human-attention.png){#fig-transformer-attention} Check out Lilian Weng's blog post [@weng2018attention] on detailed overview of attention mechanism. @@ -119,7 +119,7 @@ Check out Lilian Weng's blog post [@weng2018attention] on detailed overview of a In the example below, the self-attention mechanism enables us to learn the correlation between the current words and the previous part of the sentence. -![Fig : The current word is in red and the size of the blue shade indicates the activation level [@DBLP:journals/corr/ChengDL16]](../images/foundation-models/self-attention.png) +![The current word is in red and the size of the blue shade indicates the activation level [@DBLP:journals/corr/ChengDL16]](../images/foundation-models/self-attention.png){#fig-transformer-self-attention} 2. Positional Encoding: @@ -162,7 +162,7 @@ GPT-3 and CLIP models utilize transformers as the underlying architecture. Introduced in 2014, Generative Adversarial Networks (GANs) [@goodfellow2014generativeadversarialnetworks] involves two neural networks (generator-discriminator network pair) contest with each other in the form of a zero-sum game, where one agent's gain is another agent's loss. Given a training set, this technique learns to generate new data with the same statistics as the training set. For example, a GAN trained on photographs can generate new photographs that look at least superficially authentic to human observers, having many realistic characteristics. -![Fig : GAN basic architecture](../images/foundation-models/gan.png) +![GAN basic architecture](../images/foundation-models/gan.png){#fig-gan-architecture} In a GAN, @@ -171,19 +171,19 @@ In a GAN, When training begins, the generator produces obviously fake data, and the discriminator quickly learns to tell that it's fake: -![Fig : GAN training - early phase. Image source: Google developers [blog](https://developers.google.com/machine-learning/gan/gan_structure)](../images/foundation-models/gan1.png) +![GAN training - early phase. Image source: Google developers [blog](https://developers.google.com/machine-learning/gan/gan_structure)](../images/foundation-models/gan1.png){#fig-gan-training} As training progresses, the generator gets closer to producing output that can fool the discriminator: -![Fig : GAN training - mid phase](../images/foundation-models/gan2.png) +![GAN training - mid phase](../images/foundation-models/gan2.png){#fig-gan-training-mid-phase} Finally, if generator training goes well, the discriminator gets worse at telling the difference between real and fake. It starts to classify fake data as real, and its accuracy decreases. The training procedure for generator is to maximise the probability of discriminator making a mistake. -![Fig : GAN training complete](../images/foundation-models/gan3.png) +![GAN training complete](../images/foundation-models/gan3.png){#fig-gan-training-complete} Here's a picture of the whole system: -![Fig : GAN architecture](../images/foundation-models/GAN-architecture.png) +![GAN architecture](../images/foundation-models/GAN-architecture.png){#fig-gan-architecture-2} A disadvantage of GAN is potentially unstable training and less diversity in generation due to their adversarial training nature. StyleGAN [@DBLP:journals/corr/abs-1812-04948] and BigGAN [@DBLP:journals/corr/abs-1809-11096] are example of models that utilize GAN as the underlying architecture. @@ -207,7 +207,7 @@ Diffusion models, introduced in 2020 [@DBLP:journals/corr/abs-2006-11239], are i 4. Sampling: * To generate new samples, the process starts with pure noise and applies the learned reverse diffusion process iteratively. Over multiple time steps, the model denoises the input until it resembles a sample from the training distribution. -![Fig : Training a diffusion model. Image source : Lilweng's [blog](https://lilianweng.github.io/posts/2021-07-11-diffusion-models/)](../images/foundation-models/diffusion-training.png) +![Training a diffusion model. Image source: Lilweng's [blog](https://lilianweng.github.io/posts/2021-07-11-diffusion-models/)](../images/foundation-models/diffusion-training.png){#fig-diffusion-training} Diffusion models can generate high-resolution and diverse images, often outperforming GANs in certain tasks. They are generally more stable to train compared to GANs, as they do not rely on adversarial training dynamics. @@ -245,7 +245,7 @@ containing 1B segmentation masks from about 11M privacy preserving images and SA Large pre-trained Language Models (LLMs) have revolutionized natural language processing, but they come with inherent limitations that necessitate the development of techniques like Retrieval-Augmented Generation (RAG). This chapter explores the motivations behind RAG by examining the constraints of traditional LLMs. ::: {.column-margin} -![Fig : A typical user interaction with LLM](../images/foundation-models/userllm.png) +![A typical user interaction with LLM](../images/foundation-models/userllm.png){#fig-user-llm} ::: ### Limitations of Large Language Models @@ -263,7 +263,7 @@ LLM has not seen "your" data - the unique, often proprietary information that or When specific domain knowledge is required, the traditional approach has been to fine-tune the LLM. However, this process can be resource-intensive and may not always yield optimal results, especially for niche or rapidly evolving fields. ::: {.column-margin} -![Fig : Fine-tuning LLMs. Image source : [datacamp blong](https://www.datacamp.com/tutorial/boost-llm-accuracy-retrieval-augmented-generation-rag-reranking)](../images/foundation-models/llmfinetuning.png) +![Fine-tuning LLMs. Image source: [datacamp blong](https://www.datacamp.com/tutorial/boost-llm-accuracy-retrieval-augmented-generation-rag-reranking)](../images/foundation-models/llmfinetuning.png){#fig-llm-finetuning} ::: 4. Lack of Source Attribution @@ -275,11 +275,11 @@ LLMs generate responses based on patterns learned during training, but they don' One of the most significant issues with LLMs is their tendency to produce "hallucinations" - plausible-sounding but factually incorrect or nonsensical information. This phenomenon can undermine the reliability of the model's outputs. See Lilweng's blog post [@weng2024hallucination] on hallucinations for detailed information. ::: {.column-margin} -![](../images/foundation-models/llmhallucination1.png) +![](../images/foundation-models/llmhallucination1.png){#fig-llm-hallucination} ::: ::: {.column-margin} -![Fig : LLM Hallucination examples](../images/foundation-models/llmhallucination2.png) +![LLM Hallucination examples](../images/foundation-models/llmhallucination2.png){#fig-llm-hallucination2} ::: 6. Outdated Information @@ -308,7 +308,7 @@ Let's now compare the traditional LLM and RAG approaches #### Traditional LLM approach -![Fig : Traditional LLM approach](../images/foundation-models/promptframework.png) +![Traditional LLM approach](../images/foundation-models/promptframework.png){#fig-llm-prompt-framework} 1. User Input: The process begins with the user submitting a question. 2. Prompt Engineering: The user's question is combined with a pre-defined prompt. @@ -317,7 +317,7 @@ Let's now compare the traditional LLM and RAG approaches #### RAG approach -![Fig : RAG approach](../images/foundation-models/ragpromptframework.png) +![RAG approach](../images/foundation-models/ragpromptframework.png){#fig-rag-prompt-framework} 1. User Input: As before, the user submits a question. 2. Knowledge Base Query: The question is used to query a knowledge base. @@ -355,13 +355,13 @@ At the heart of vector databases lies the concept of vector embeddings. These ar 3. Similarity Principle: Words with similar meanings tend to have similar vector representations. ::: {.column-margin} -![Fig : Vectors](../images/foundation-models/vectorDB-vectors.png) +![Vectors](../images/foundation-models/vectorDB-vectors.png){#fig-vectors} ::: ###### How vector databases work Let’s start with a simple example of dealing with an LLM such as ChatGPT. The model has large volumes of data with a lot of content, and they provide us with the ChatGPT application. -![Fig : VectorDB within RAG. Source: KDnuggets [blog post](https://www.kdnuggets.com/2023/06/vector-databases-important-llms.html)](../images/foundation-models/vectorDB.png) +![VectorDB within RAG. Source: KDnuggets [blog post](https://www.kdnuggets.com/2023/06/vector-databases-important-llms.html)](../images/foundation-models/vectorDB.png){#fig-vectordb} So let’s go through the steps. @@ -374,7 +374,7 @@ When the user continues to make queries, it will go through the same embedding m Now lets see how it works in the vector database. -![Fig : VectorDB pipeline. Source: pinecone [blog post](https://www.pinecone.io/learn/vector-database/)](../images/foundation-models/vectordb-working.png) +![VectorDB pipeline. Source: pinecone [blog post](https://www.pinecone.io/learn/vector-database/)](../images/foundation-models/vectordb-working.png){#fig-vectordb-working} The three main stages that a vector database query goes through are: @@ -442,7 +442,7 @@ This ensures the LLM outputs text in Markdown format, which can be helpful for s Let's bring it all together -![Fig : RAG system. Image source : [blog.demir](https://blog.demir.io/hands-on-with-rag-step-by-step-guide-to-integrating-retrieval-augmented-generation-in-llms-ac3cb075ab6f) ](../images/foundation-models/RAGsystem.png) +![RAG system. Image source: [blog.demir](https://blog.demir.io/hands-on-with-rag-step-by-step-guide-to-integrating-retrieval-augmented-generation-in-llms-ac3cb075ab6f) ](../images/foundation-models/RAGsystem.png){#fig-rag-system} 1. User Submits Query: The user inputs a query into the system. This is the initial step where the user’s request is captured. 2. RAG System Query Relevant Documents: The RAG system processes the user’s query and searches for relevant documents. From de96436660057317759f5b09a0f9162bf428a852 Mon Sep 17 00:00:00 2001 From: Sandeep Puthanveetil Satheesan Date: Thu, 21 Nov 2024 13:35:11 -0600 Subject: [PATCH 2/6] Commit for saving changes. --- sections/foundation-models.qmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sections/foundation-models.qmd b/sections/foundation-models.qmd index 03455ec..63bc603 100644 --- a/sections/foundation-models.qmd +++ b/sections/foundation-models.qmd @@ -19,13 +19,13 @@ In this session, we take a closer look at what constitutes a foundation model, a ## Introduction -### Traditional ML vs Deep Learning vs Foundation Models +### Traditional Machine Learning vs Deep Learning vs Foundation Models -**Traditional machine learning** involves algorithms that learn patterns from structured data. Techniques like decision trees, support vector machines, and linear regression fall under this category. These methods often require feature engineering, where domain knowledge is used to select and transform input features to improve model performance. Traditional machine learning excels in scenarios with limited data and interpretable results. +**Traditional Machine Learning (ML)** are algorithms that learn patterns from structured data. Techniques like decision trees, support vector machines, and linear regression fall under this category. These methods often require feature engineering, where domain knowledge is used to select and transform input features to improve model performance. Traditional machine learning excels in scenarios with limited data and interpretable results. -**Deep learning** is a subset of machine learning that employs neural networks with multiple layers (hence "deep"). These models automatically learn features from raw data, making them particularly powerful for complex tasks like image and speech recognition. Deep learning excels with large datasets and can capture intricate patterns but often requires significant computational resources and can be harder to interpret compared to traditional methods. +**Deep Learning** (DL) is a subset of machine learning that employs artificial neural networks with multiple layers (hence "deep"). These models automatically learn features from raw data, making them particularly powerful for complex tasks like image and speech recognition. Deep learning excels with large datasets and can capture intricate patterns but often requires significant computational resources and can be harder to interpret compared to traditional methods. -**Foundation models**, such as GPT and BERT, represent a new paradigm in AI. These large-scale models are pre-trained on vast amounts of data and can be fine-tuned for specific tasks with minimal additional training. Earlier neural networks were narrowly tuned for specific tasks. With a little fine-tuning, foundation models can handle jobs from translating text to analyzing medical images. Foundation models generally learn from unlabeled datasets, saving the time and expense of manually describing each item in massive collections. Foundation models leverage transfer learning, allowing them to generalize across different tasks more effectively than traditional machine learning and deep learning models. +**Foundation Models** - advanced forms of DL models, such as Generative Pretrained Transformers and BERT, represent a new paradigm in the broad domain of Artificial Intelligence (AI). These large-scale models are pre-trained on extremely vast amounts of data and can be fine-tuned for specific tasks with minimal additional training. Earlier neural networks were trained for specific tasks. With a little fine-tuning, foundation models can handle jobs from translating text to analyzing medical images. Foundation models generally learn from unlabeled data through self-supervised learning, saving the time, effort, and expense of manual data labelling. Foundation models leverage transfer learning, allowing them to generalize across different tasks more effectively than traditional machine learning and deep learning models. ## Foundation Models From 82f3e463abaf14f9b8a3970d7a4d01829d44a7ef Mon Sep 17 00:00:00 2001 From: Minu Mathew Date: Fri, 2 May 2025 18:37:35 -0500 Subject: [PATCH 3/6] added description of models --- sections/foundation-models.qmd | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sections/foundation-models.qmd b/sections/foundation-models.qmd index 63bc603..6e03260 100644 --- a/sections/foundation-models.qmd +++ b/sections/foundation-models.qmd @@ -40,11 +40,22 @@ With the start of availability of big data for training, evidence showed that pe Here's a few examples of foundation models and their parameter count: -* CLIP [@DBLP:journals/corr/abs-2103-00020] - 63 million parameters -* BERT [@DBLP:journals/corr/abs-1810-04805] - 345 million parameters -* GPT-3 [@DBLP:journals/corr/abs-1810-04805] - 175 billion parameters +1. Contrastive Language-Image Pre-training (CLIP) [@DBLP:journals/corr/abs-2103-00020] - 63 million parameters + * [CLIP](https://openai.com/index/clip/) from OpenAI is the first model to combine the image (computer vision) and language (NLP) domains. + * [Contrastive Language-Image Pre-training](https://en.wikipedia.org/wiki/Contrastive_Language-Image_Pre-training) (CLIP) is a technique for training a pair of neural network models, one for image understanding and one for text understanding, using a contrastive objective. + * The goal for [contrastive learning](https://paperswithcode.com/task/contrastive-learning) is to learn a representation of data such that similar instances are close together in the representation space, while dissimilar instances are far apart. + * In summary, CLIP is a pretrained model for telling you [how well a given image and a given text fit together](https://medium.com/one-minute-machine-learning/clip-paper-explained-easily-in-3-levels-of-detail-61959814ad13). + * CLIP is the pre-cursor to [DALL-E](https://openai.com/index/dall-e-3/). + * Applications of CLIP range from image captioning, image classification, semantic image search, content moderation etc. +2. BERT [@DBLP:journals/corr/abs-1810-04805] - 345 million parameters + * [Bidirectional Encoder Representations from Transformers](https://en.wikipedia.org/wiki/BERT_(language_model)) (BERT) is a language model introduced in October 2018 by researchers at Google. + * It is the first language model to learn bi-directional representations of text to significantly improve contextual understanding of unlabeled text across many different tasks. ![Source : [Nvidia blog](https://www.nvidia.com/en-us/glossary/bert/)] + * It’s the basis for an entire family of BERT-like models such as RoBERTa, ALBERT, and DistilBERT. + * [Google](https://research.google/blog/open-sourcing-bert-state-of-the-art-pre-training-for-natural-language-processing/) has described BERT as the “first deeply bidirectional, unsupervised language representation, pre-trained using only a plain text corpus” + * Applications of BERT are langauge translation, sentiment analysis, question answering etc. +3. GPT-3 [@DBLP:journals/corr/abs-1810-04805] - 175 billion parameters * Wikipedia consists of only 3% of its training data -* GPT-4 [@openai2024gpt4technicalreport] - 1.8 trillion parameters +4. GPT-4 [@openai2024gpt4technicalreport] - 1.8 trillion parameters ![Growth in compute power. (Source: GPT-3 paper [@DBLP:journals/corr/abs-1810-04805])](../images/foundation-models/compute-power-training.png){#fig-gpt-3-compute-power} From 0318458ea70c37fc7c5bfab49cb44efbf2657298 Mon Sep 17 00:00:00 2001 From: Minu Mathew Date: Wed, 7 May 2025 17:37:34 -0500 Subject: [PATCH 4/6] added model descriptions --- sections/foundation-models.qmd | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/sections/foundation-models.qmd b/sections/foundation-models.qmd index 6e03260..ce8ddc2 100644 --- a/sections/foundation-models.qmd +++ b/sections/foundation-models.qmd @@ -54,8 +54,13 @@ Here's a few examples of foundation models and their parameter count: * [Google](https://research.google/blog/open-sourcing-bert-state-of-the-art-pre-training-for-natural-language-processing/) has described BERT as the “first deeply bidirectional, unsupervised language representation, pre-trained using only a plain text corpus” * Applications of BERT are langauge translation, sentiment analysis, question answering etc. 3. GPT-3 [@DBLP:journals/corr/abs-1810-04805] - 175 billion parameters - * Wikipedia consists of only 3% of its training data + * Generative Pre-trained Transformer 3 (GPT-3) is a large language model released by OpenAI in 2020. + * The model is trained on internet data to generates textual output. We can optionally pass it some text as input, [which influences its output](https://jalammar.github.io/how-gpt3-works-visualizations-animations/#:~:text=We%20can%20optionally%20pass%20it%20some%20text%20as%20input%2C%20which%20influences%20its%20output). + * Training data used for GPT-3 is pretty vast - Wikipedia consists of only 3% of its training data. 4. GPT-4 [@openai2024gpt4technicalreport] - 1.8 trillion parameters + * This is the successor of GPT-3 from OpenAI. + * The model is more creative, has more reasoning abilities and surpasses [GPT-3 in all benchmarks](https://openai.com/index/gpt-4-research/). + * This model powered ChatGPT. ![Growth in compute power. (Source: GPT-3 paper [@DBLP:journals/corr/abs-1810-04805])](../images/foundation-models/compute-power-training.png){#fig-gpt-3-compute-power} @@ -80,6 +85,8 @@ Here's some examples of language models: * GPT-3 * GPT-4 * Llama 3.2 [@dubey2024llama3herdmodels] + * Llama (Large Language Model Meta AI) is a family of open-source large language models (LLMs) released by Meta AI + * Llama models weights are open and downloadable from their [website](https://www.llama.com/llama-downloads/) or use [HuggingFace framework](https://huggingface.co/docs/transformers/en/model_doc/llama) to use in text-generation applications. #### Vision models @@ -87,10 +94,15 @@ Vision models are trained for computer vision tasks. The primary training object Here's some examples of vision models: -* [GPT-4-turbo](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4) +* [GPT-4.1](https://platform.openai.com/docs/models/gpt-4.1) + * This model can take in text and image as inputs and textual output. * SAM [@kirillov2023segment] + * [Segment Anything Model](https://segment-anything.com/) (SAM) from Meta AI is a promptable segmentation model that is generalizable to multiple applications and unfamiliar objects and images. * CLIP [@dubey2024llama3herdmodels] * Swin-transformer [@liu2021swintransformerhierarchicalvision] + * This is a type of [Vision Transformer](https://paperswithcode.com/method/vision-transformer). + * Due to its architecture, the model can serve as a general-purpose backbone for both image classification and dense recognition tasks. + #### Multimodal models @@ -99,10 +111,17 @@ Multimodal models are designed to process and understand multiple types of data Here's some examples of multimodal foundation models: * [GPT-4o](https://openai.com/index/hello-gpt-4o/) -* DALL-E [@DBLP:journals/corr/abs-2102-12092] + * GPT‑4o ("o" for "omni") accepts as input any combination of text, audio, image, and video and generates any combination of text, audio, and image outputs. * CLIP [@dubey2024llama3herdmodels] +* DALL-E [@DBLP:journals/corr/abs-2102-12092] + * This model from OpenAI generates images from natural language descriptions known as prompts. + * The [link between textual semantics and their visual representations](https://www.assemblyai.com/blog/how-dall-e-2-actually-works#:~:text=The%20link%20between%20textual%20semantics%20and%20their%20visual%20representations%20in%20DALL%2DE%202%20is%20learned%20by%20another%20OpenAI%20model%20called%20CLIP%20(Contrastive%20Language%2DImage%20Pre%2Dtraining)) in DALL-E is learned by CLIP (Contrastive Language-Image Pre-training). * [Sora](https://openai.com/index/sora/) [@liu2024sorareviewbackgroundtechnology] + * This model from OpenAI can generate realistic videos from text prompts. * [Gemini](https://gemini.google.com/?utm_source=google&utm_medium=cpc&utm_campaign=2024enUS_gemfeb&gad_source=1&gclid=Cj0KCQjw05i4BhDiARIsAB_2wfDvtujFotV-ds_t1TWtUmwbeNFLVcdbE8zSQEN08FPlAC8im4lhpNcaAlwaEALw_wcB&gclsrc=aw.ds) [@geminiteam2024geminifamilyhighlycapable] + * Gemini is a family of multimodal large language models developed by Google + + ### Types of foundation models (Architecture) From 87e8ba6773a241f5006bf6260a3fb451c07e28b3 Mon Sep 17 00:00:00 2001 From: Minu Mathew Date: Wed, 7 May 2025 17:42:23 -0500 Subject: [PATCH 5/6] added note on models --- sections/foundation-models.qmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sections/foundation-models.qmd b/sections/foundation-models.qmd index ac76de8..f3fed6a 100644 --- a/sections/foundation-models.qmd +++ b/sections/foundation-models.qmd @@ -121,7 +121,9 @@ Here's some examples of multimodal foundation models: * [Gemini](https://gemini.google.com/?utm_source=google&utm_medium=cpc&utm_campaign=2024enUS_gemfeb&gad_source=1&gclid=Cj0KCQjw05i4BhDiARIsAB_2wfDvtujFotV-ds_t1TWtUmwbeNFLVcdbE8zSQEN08FPlAC8im4lhpNcaAlwaEALw_wcB&gclsrc=aw.ds) [@geminiteam2024geminifamilyhighlycapable] * Gemini is a family of multimodal large language models developed by Google - +::: {.callout-note} +The models described above represent those available at the time of writing this section. Given the rapid advancements in this field, these models may become outdated over time. +::: ### Types of foundation models (Architecture) From bb56a0c2fc9a5ba50c949b6708231697eb7fd666 Mon Sep 17 00:00:00 2001 From: Minu Mathew Date: Wed, 21 May 2025 18:06:54 -0500 Subject: [PATCH 6/6] changes --- images/foundation-models/ar-nar.png | Bin 0 -> 263083 bytes .../diffusion-training-2.png | Bin 0 -> 2030377 bytes references.bib | 50 ++++++++++++++++++ sections/foundation-models.qmd | 34 +++++++++--- sections/hands-on-lab-foundation-models.qmd | 38 +++++++------ 5 files changed, 100 insertions(+), 22 deletions(-) create mode 100644 images/foundation-models/ar-nar.png create mode 100644 images/foundation-models/diffusion-training-2.png diff --git a/images/foundation-models/ar-nar.png b/images/foundation-models/ar-nar.png new file mode 100644 index 0000000000000000000000000000000000000000..88ccdfc4c79d2f3913558fac66db8756ba833587 GIT binary patch literal 263083 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