昇思MindSpore技术公开课——第三课:GPT

1、学习总结

1.1Unsupervised Language Modelling

GPT代表“生成预训练”(Generative Pre-trained Transformer)。GPT模型是由OpenAI公司开发的一种基于Transformer架构的人工智能语言模型。它在大规模文本数据上进行预训练,学习了丰富的语言知识和语境,并能够执行多种自然语言处理任务。

GPT模型的核心思想是在大规模语料库上进行预训练,使其具备对语言的理解和生成能力。它采用Transformer架构,该架构利用自注意力机制来处理输入序列,使得模型能够捕捉长距离依赖关系。GPT的预训练包括自监督学习,其中模型尝试预测给定上下文中缺失的词语,从而学习语言的结构和语法。

动机

GPT 模型的动机来源于 未标注的文本数据远多于已标注的文本数据,并且对于不同的下游任务会存在不同的标注方式。

已有方法
semi-supervised learning

半监督学习(Semi-Supervised Learning)是一种机器学习范式,介于监督学习和无监督学习之间。在半监督学习中,训练数据集包含一部分带有标签的样本(有监督的数据)和一部分没有标签的样本(无监督的数据)。该方法旨在利用有限的标签样本和大量未标签样本来提高模型的性能。GPT1主要使用以下方法训练:

  • 基于大量未标注的文本数据,训练预训练语言模型
  • 使用已标注文本数据,对模型针对某一特定下游任务进行finetune,只更改output layer(线性层)

但是半监督学习面临以下问题:

  • 自然语言处理的下游任务非常多元,难以有统一的优化目标。
  • 难以将预训练模型的信息完全传递到finetune的下游任务中。

所以提出了非监督学习预训练模型,模型结构如下:
由于训练objective的选择,gpt在模型选择上不应该看见当前token后的信息,故模型应设计为单向网络,即transformer中的decoder结构。
在这里插入图片描述

2、学习心得

Supervised Fine-Tuning

Supervised Fine-Tuning(有监督微调)是一种机器学习中的训练策略,通常用于对预训练模型进行进一步调整以适应特定任务。这方法主要应用在迁移学习的背景下,其中模型首先在一个大规模的任务上进行了预训练,然后通过微调在特定任务上进行优化。

在已经预训练好的GPT上额外加一层线性层
在这里插入图片描述
并通过缩小目标与计算结果的误差进行模型优化
在这里插入图片描述
最终为加速模型收敛及提高模型的泛化性,融入pretrain时language modelling的优化目标
在这里插入图片描述

心得:

在GPT课程的学习过程中,我对自然语言处理和大模型的工作原理有了更全面的认识。通过深入学习GPT模型,我理解了预训练和微调的重要性,以及如何利用大规模文本数据让模型学到通用的语言表示。课程中的实践项目——使用GPT Finetune 完成一个Task,使用IMDb数据集,通过finetune GPT进行情感分类任务。加深了对模型训练和调整的实际操作经验。

总的来说,GPT这一节课程的学习让我受益匪浅。不仅拓展了对人工智能和大模型的理解,还提升了在实际项目中应用这些知识的能力。这门课程为我未来在人工智能领域的发展奠定了坚实的基础,激发了我对这一领域的兴趣和探索欲望。

3、经验分享

使用GPT Finetune 完成一个Task

在模型finetune中,需要根据不同的下游任务来处理输入,主要的下游任务可分为以下四类:

  • 分类(Classification):给定一个输入文本,将其分为若干类别中的一类,如情感分类、新闻分类等;
  • 蕴含(Entailment):给定两个输入文本,判断它们之间是否存在蕴含关系(即一个文本是否可以从另一个文本中推断出来);
  • 相似度(Similarity):给定两个输入文本,计算它们之间的相似度得分;
  • 多项选择题(Multiple choice):给定一个问题和若干个答案选项,选择最佳的答案。
    在这里插入图片描述
    本次实践使用IMDb数据集,通过finetune GPT进行情感分类任务。

4、课程反馈

在学习GPT课程的时候,跟着课程内容实践代码课程,导入mindnlp库的时候报错,具体是运行以下代码的时候:

import osimport mindspore
from mindspore.dataset import text, GeneratorDataset, transforms
from mindspore import nnfrom mindnlp import load_dataset
from mindnlp.transforms import PadTransform, GPTTokenizerfrom mindnlp.engine import Trainer, Evaluator
from mindnlp.engine.callbacks import CheckpointCallback, BestModelCallback
from mindnlp.metrics import Accuracy

报错:

ImportError: cannot import name 'Truncate' from 'mindspore.dataset.text' (/home/ma-user/anaconda3/envs/MindSpore/lib/python3.7/site-packages/mindspore/dataset/text/__init__.py)

我在启智社区创建的调试环境,镜像是
mindspore_2.0.0_notebook,使用pip 命令下载了mindnlp,但还是报错。

报错二:ImportError: cannot import name ‘GPTTokenizer’ from ‘mindnlp.transforms’ (/opt/conda/lib/python3.7/site-packages/mindnlp/transforms/init.py)
在这里插入图片描述
暂时还没有解决办法。

安装mindnlp时报错:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
transformers 4.35.0 requires tokenizers<0.15,>=0.14, but you have tokenizers 0.15.0 which is incompatible.

解决办法:
降低tokenizers版本:

pip install tokenizers==0.14.0

希望技术公开课的实验部分可以写清楚需要的环境和MindSpore版本是什么,以及跑通代码所需的依赖。

5、使用MindSpore昇思的体验和反馈

在学习MindSpore技术公开课的时候,我喜欢MindSpore昇思的设计理念,特别是其支持全场景、全流程AI开发的灵活性。其采用了图模型的思想,使得模型构建更直观,易于理解。同时,MindSpore昇思提供了丰富的工具和功能,如自动微分、模型并行训练等,使得深度学习任务的实现更加便捷和高效。然后MindSpore的安装命令也非常简洁,在启智社区还有对应的MindSpore镜像版本可以使用,非常方便学习。

6、未来展望

通过深入学习大模型的可成——GPT的原理和应用,我在自然语言处理和文本生成领域的理解更加深刻。掌握了预训练和微调等关键技术,我能够更有效地利用大规模数据训练模型,提高在特定任务上的性能。

在科研方面,课程使我更加了解人工智能领域的最新进展,尤其是大型预训练模型在语言理解、生成和其他复杂任务上取得的显著成果。这启发了我在未来研究方向的选择,促使我更深入地探索和应用先进的深度学习技术。

基于课程学到的知识,我对人工智能和大模型的发展和应用充满了期待。我相信随着技术的不断进步,大模型将在更多领域展现出强大的能力,如医疗、自动驾驶、智能推荐等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413256.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android-三方框架的源码

ARouter Arouter的整体思路是moduelA通过中间人ARouter把路由信息的存到仓库WareHouse&#xff1b;moduleB发起路由时&#xff0c;再通过中间人ARouter从仓库WareHouse取出路由信息&#xff0c;这要就实现了没有依赖的两者之间的跳转与通信。其中涉及Activity的跳转、服务prov…

67.基于控制流编程,优化Go代码可读性

文章目录 一&#xff1a;简介二、代码整洁小技巧&#xff1a;基于控制流编程三、总结 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/40-clean-code-controll-flow 一&#xff1a;简介 如何写好代码&#xff0c;一千个人眼中有一千个哈姆雷特&…

Marin说PCB之关于1000 BASE-T1--ESD的处理知多少?

对于板子上的ESD器件想必大家做硬件或者是layout应该的不陌生吧&#xff0c;我们几乎遇到大部分板子上面的接口部分都会添加这个ESD器件&#xff0c;例如那些USB,MIPI接口&#xff0c;百兆/千兆-T1以太网连接器等。 其中T1连接器用的是罗森博格家的&#xff0c;在这个链路中有一…

线程进阶(以解决线程安全问题为主)、volatile的底层实现

线程&#xff1a;以解决线程安全问题为主 进程&#xff1a;运行时程序&#xff0c;操作系统分配内存资源的最小单位。 线程 &#xff1a;进程内部最小执行单元。 多线程的优点&#xff1a;提高程序响应速度&#xff0c;可以多个线程各自完成自己的工作&#xff0c;提高设备利…

原生SSM整合(Spring+SpringMVC+MyBatis)案例

SSM框架是Spring、Spring MVC和MyBatis三个开源框架的整合&#xff0c;常用于构建数据源较简单的web项目。该框架是Java EE企业级开发的主流技术&#xff0c;也是每一个java开发者必备的技能。下面通过查询书籍列表的案例演示SSM整合的过程. 新建项目 创建文件目录 完整文件结…

docker安装运行CloudBeaver并设置默认语言为中文

1、CloudBeaver CloudBeaver 是一个开源的 Web 数据库管理工具&#xff0c;它提供了一个基于浏览器的用户界面&#xff0c;允许用户管理和操作各种类型的数据库。CloudBeaver 支持多种数据库系统&#xff0c;包括但不限于 PostgreSQL、MySQL、SQLite、Oracle、SQL Server 以及…

微调您的Embedding模型以最大限度地提高RAG管道中的相关性检索

英文原文地址&#xff1a;https://betterprogramming.pub/fine-tuning-your-embedding-model-to-maximize-relevance-retrieval-in-rag-pipeline-2ea3fa231149 微调您的Embedding模型以最大限度地提高RAG管道中的相关性检索 微调嵌入前后的 NVIDIA SEC 10-K 文件分析 2023 年…

一篇综述洞悉医学大型语言模型的原理,应用和挑战

在过去的一年中&#xff0c;随着 GPT-4、LLaMA、Mistral&#xff0c;PaLM 等先进技术的突飞猛进&#xff0c;大型语言模型&#xff08;Large Language Models&#xff09;已经引领全球人工智能进入了一个全新的基础模型时代&#xff0c;这一时代不仅开启了技术创新的新篇章&…

QT图表-折线图、曲线图

时间记录&#xff1a;2024/1/15 一、使用步骤 1.添加图表模块 .pro项目管理文件中添加charts模块 QChart类&#xff1a;图表类 QChartView类&#xff1a;图表显示类 2.ui文件中添加QChartView组件 &#xff08;1&#xff09;选择一个QGrapicsView组件将其拖拽到ui界面上合适位…

前端背景收集之烟花背景

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f380;源码如下&#xff1a; &#x1f412;个人主页 &#x1f3c5;Vue项目常用组件模板仓库 &#x1f4d6;前言&#xff1a; 本篇博客主要提供前端背景收集之烟花背景…

RabbitMQ入门精讲

1. 什么是消息队列 消息指的是两个应用间传递的数据。数据的类型有很多种形式&#xff0c;可能只包含文本字符串&#xff0c;也可能包含嵌入对象。 “消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中&#xff0c;通常有生产者和消费者两个角色。…

【STM32】STM32学习笔记-MPU6050简介(32)

00. 目录 文章目录 00. 目录01. MPU6050简介02. MPU6050参数03. MPU6050硬件电路04. MPU6050框图05. MPU6050常用寄存器06. 附录 01. MPU6050简介 •MPU6050是一个6轴姿态传感器&#xff0c;可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0…