你知道什么是微调吗?大模型为什么要微调?以及大模型微调的原理是什么?

ops/2024/9/22 22:28:49/

预训练(pre+train)+微调(fine+tuning),是目前主流的范式**”**

在学习大模型的过程中,怎么设计神经网络和怎么训练模型是一个重要又基础的操作。

但与之对应的微调也是一个非常重要的手段,这里就着重讲一下为什么要微调,其优点是什么以及微调的本质。

图片

01、什么是微调?

学习一门技术不但要知其然,也要知其所以然。

想了解为什么要微调,首先要知道什么是微调?

我们常说的大模型,指的是具有大量参数的神经网络模型。然后经过大量的训练数据训练出来的模型叫做大模型,也叫做预训练模型。

微调指的是微调大模型,是在预训练模型(已经训练好的大模型)基础之上,使用少量数据对大模型的全部或部分参数进行调整,以达到在某个领域更好的效果。

举例来说,刚设计好的一个神经网络,就类似于一个从来没上过学的学生,他什么玩意都不懂,只会根据自己的本能去处理问题;

而训练大模型就相当于让这个学生完成了九年制义务教育或者上了大学,也就是说它接受过系统的教育,天文地理,物理化学等等均有涉猎,这样的模型就叫做预训练模型。

而微调就是在这个基础上完成某个方向的强化,比如想让这个学生去参加奥数比赛,就要让他对数学进行强化学习。

这个就是微调。

微调来源于迁移学习,所谓的迁移学习就是在已经训练好的模型基础上进行适当的优化或者说强化,这样可以更加合理的利用各种资源。

02、为什么要微调?

前面说了什么是微调,这里讲一下为什么要微调?

之所以需要进行微调,主要有以下两方面原因:

  • 训练成本问题
  • 训练数据问题

之所以要进行微调,其实最主要的原因就是成本问题。openAI公司训练GPT模型,一次的成本大概在几百万到上千万美元;换算成人民币就是上千万到上亿的成本。

虽然很多公司使用的大模型不需要有GPT模型那么强大,也不需要上亿的训练成本,但从零开始训练一个大模型,少说也要几百万人民币,这对个人和绝大部分公司来说都是不可接受的。

还一个原因就是,训练数据的收集同样需要巨大的成本,而抛开成本来说,很多公司根本无法收集到足够的训练数据,而没有足够的训练数据,那么就很难训练出一个很好的模型。

这时,微调的作用就体现出来了。微调只需要在别人已经训练好的模型之上,使用少量的数据对模型部分或全部参数进行调整即可。

之所以说对预训练模型的全部或部分参数进行调整是因为,微调分为全量(参数)微调(Full Fine Tuning)和部分(参数)微调——高效微调PEFT(Parameter-Efficient Fine Tuning),只不过很少有人会进行全量微调。

全量微调就相当于,你本来只是在一个普通的本科院校学习;然后突然有一天有个机会让你到一所985/211的学校去学习,学习的内容还是一样,不过人家教的会更好。

部分参数微调就是相当于,你进了你们学校的实验班或突击班,去强化学习部分课程。

所以什么情况下适合微调?

  • 无法接受训练的成本问题
  • 训练数据不足
  • 想使用别人已经训练好的开源模型(huggingface上有大量开源模型)
  • 数据安全问题,不能接受把数据上传到第三方大模型公司

这几种情况比较适合微调,如果不缺钱,又不缺数据,技术又过关;那么自己设计模型,自己训练是最好的方式。

当然,微调也不是万能的,只有在相似的条件下才可以进行微调;比如,一个识别猫狗的预训练模型,你要用人脸数据进行人脸识别微调,这就行不通了。毕竟,猫狗的数据特征和人脸还是有很大差别的。

02、怎么微调,微调的具体步骤?

前面说了,微调的目的是调整模型的参数,所以本质上和步骤上微调和训练没太大区别,都需要经过数据收集处理,数据加载,正向传播,反向传播优化的过程,然后给模型参数找到一个最优解。

只不过微调大部分情况下都是调整部分参数,而这种微调方式叫做——高效微调。也就是说用少量的数据,优化部分参数,以达到更好的效果。

既然是对模型参数的调整,那么具体是怎么操作的呢?

在神经网络的训练过程中,有数据处理,正向传播,反向传播和优化器,

而微调就发生在优化器上,训练的过程是优化器根据损失差通过反向传播的方式调整参数;而微调也是通过优化器去调整模型的参数。

基于pytorch框架的神经网络,其微调部分参数的原理就是通过冻结参数,把不需要调整的参数冻结,这样大模型在微调的过程中就只会优化可以被调整的参数。

而全量微调就是不冻结参数,所有参数都会被调整。

代码如下所示:

在这里插入图片描述

这样,通过微调模型,就可以让预训练模型达到自己想要的效果。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。


http://www.ppmy.cn/ops/50863.html

相关文章

PHP入门教程3:数组和字符串操作

PHP入门教程3:数组和字符串操作 在前两篇文章中,我们学习了PHP的基础语法、控制结构和函数的使用。本文将重点介绍数组和字符串的高级操作,这些是PHP编程中非常常见且重要的内容。本文将包含以下几个部分: 数组的类型和操作多维…

社区项目-项目介绍环境搭建

文章目录 1.技术选型2.原型设计1.安装AxureRP2.进行汉化3.载入元件库4.基本设计 3.元数建模1.安装元数建模软件2.新建项目3.新增一个刷题模块主题域4.新增数据表 subject_category5.新增关系图,将表拖过来6.新增题目标签表7.新增题目信息表8.新增单选表、多选表、判…

后端开发面试题5(附答案)

前言 在下首语言是golang,所以会用他作为示例。 原文参见 @arialdomartini的: Back-End Developer Interview Questions 数据库相关问题 1. 如果要你将一个项目从MySQL迁移至PostgreSQL中,你会如何迁移? 迁移一个项目从MySQL到PostgreSQL涉及多个步骤,主要包括数据备份、…

Cocos Creator,Youtube 小游戏!

YouTube 官方前段时间发布了一则重磅通知,宣布平台旗下小游戏功能 Youtube Playables 正式登录全平台(安卓、iOS、网页),并内置了数十款精选小游戏。 Youtube Playables 入口: https://www.youtube.com/playables Coco…

Java面试题:对比继承Thread类和实现Runnable接口两种创建线程的方法,以及它们的优缺点

Java 中创建线程有两种主要的方法:继承 Thread 类和实现 Runnable 接口。下面我将分别介绍这两种方法,并对比它们的优缺点。 继承 Thread 类 方法: 创建一个继承自 Thread 的子类。重写 Thread 类的 run 方法。创建子类的实例并调用 start…

Linux入门攻坚——26、Web Service基础知识与httpd配置-2

http协议 URL:Uniform Resource Locator,统一资源定位符 URL方案:scheme,如http://,https:// 服务器地址:IP:port 资源路径: 示例:http://www.test.com:80/bbs/…

yum的概念、相关命令、ftp http部署步骤;NFS共享文件操作步骤

目录 yum 配置文件 缓存功能操作步骤 创建并配置本地仓库文件 yum相关命令 yum install __ yum repolist yum list __ yum info __ yum search __ yum whatprovides __ yum remove __ yum -y update __ yum history yum grouplist yum groupinstall "__&q…

用类来实现输入和输出时间(时:分:秒)

编写程序: 运行结果: 程序分析: 这是一个很简单的例子。类Time中只有数据成员,而且它们被定义为公用的,因此可以在类的外面对这些成员进行操作。t1被定义为Time类的对象。在主函数中向t1对象的数据成员输入用户…