💡 这节课会带给你
- 了解机器学习的基本概念
- 掌握模型微调/小参数量微调的操作过程
- 掌握模型微调/小参数量微调关键「超参」
- 掌握训练数据的选择、准备、清洗等方法与思路
- 训练一个垂直领域的大模型
开始上课!
还是写在前面
这堂课内容有难度:
- 有很多陌生的名词,包括数学名词和模型算法本身的名词
- 涉及到很多数学知识,很多东西本身是从数学推导出来的,不好具象化
- 深度学习里有大量基于经验的总结,体现成各种超参和 Tricks
这堂课该怎么学:
- 注意力集中,跟上我的思路
- 遇到不懂的地方,别害怕,先尝试思考
- 实现想不明白也别灰心,这个领域的能力积累是需要时间的
- 真感兴趣的同学,尝试多度论文,“书读百遍其义自见”的道理我亲自验证过
- 自己思考很重要!回想“程序员思维向算法工程师思维”的转变
Fine-Tuning 有什么用:先看一个例子
https://u202774-9847-a4dc9da1.westb.seetacloud.com:8443/
法律领域的阅读理解
判决书:
经审理查明:2004 年 1 月 6 日,安居物业与东至县昌盛房地产开发有限责任公司签订前期物业管理服务合同,合同约定由安居物业对东至县昌盛房地产开发有限责任公司开发的食品小区提供物业服务,服务期限为该小区业主大会成立时止,该合同对委托管理事项、双方的权利义务、物业管理服务要求标准、物业管理服务费用、违约责任等进行了具体的约定 2005 年 8 月 28 日,汪 x3 入住该小区 8 栋一单元 102 室,并与安居物业签订了房屋入住协议,约定物业管理费为 252 元/年,并明确若汪 x3 无故不交规定应交费用的,安居物业可要求其限期缴纳并收取应缴费用 3%的滞纳金汪 x3 自 2008 年 8 月 28 日以来未交纳物业服务费,2013 年 12 月,安居物业向汪 x3 下达催交物业服务费通知书现安居物业以被告自 2008 年 8 月 28 日起至 2015 年 4 月 27 日止的物业服务费 1680 元及违约金 50.4 元未交为由诉至本院,被告则以原告不作为为由拒不缴纳,为此成讼另查明,本案所涉食品小区目前未选举业主委员会以上事实有当事人陈述、前期物业管理服务合同、房屋入住协议等证据在卷佐证,足以认定
问题 1: 安居物业给哪个小区做物业?
问题 2: 被告是否如约支付物业费了?
我有很多问题
<br/>
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201420.png" style="margin-left: 0px" width="600px">
一、什么是:
- 模型训练(Training)
- 预训练(Pre-Training)
- 微调(Fine-Tuning)
- 轻量化微调(Parameter Efficient Fine-Tuning, PEFT)
<br/>
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201420.png" style="margin-left: 0px" width="800px">
二、什么是模型
<div class="alert alert-warning">
尝试: 用简单的数学语言表达概念
</div>
2.1、通俗(不严谨)的说、模型是一个函数:
$y=F(x;\omega)$
它接收输入$x$:可以是一个词、一个句子、一篇文章或图片、语音、视频 ...
- 这些物体都被表示成一个数学「矩阵」(其实应该叫张量,tensor)
它预测输出$y$
- 可以是「是否」({0,1})、标签({0,1,2,3...})、一个数值(回归问题)、下一个词的概率 ...
- 它的表达式就是网络结构(这里特指深度学习)
- 它有一组参数$\omega$,这就是我们要训练的部分
<div class="alert alert-warning">
把它想象成一个方程:
<ol>
<li>每条数据就是一对儿 $(x,y)$ ,它们是常量</li>
<li>参数是未知数,是变量</li>
<li>$F$ 就是表达式:我们不知道真实的公式是什么样的,所以假设了一个足够复杂的公式(比如,一个特定结构的神经网络)</li>
<li>这个求解这个方程(近似解)就是训练过程</li>
</ol>
</div>
2.2、一个最简单的神经网络
一个神经元:$y=f(\sum_i w_i\cdot x_i)$
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201423.jpg" style="margin-left: 0px" width="800px">
把很多神经元连接起来,就成了神经网络:$y=f(\sum_i w_i\cdot x_i)$、$z=f(\sum_i w'_i\cdot y_i)$、$\tau=f(\sum_i w''_i\cdot z_i)$、...
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201427.jpg" style="margin-left: 0px" width="800px">
这里的$f$叫激活函数,有很多种形式
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201500.jpeg" style="margin-left: 0px" width="800px">
<div class="alert alert-warning">
思考: 这里如果没有激活函数会怎样?
</div>
三、什么是模型训练
我们希望找到一组参数$\omega$,使模型预测的输出$\hat{y}=F(x;\omega)$与真实的输出$y$,尽可能的接近
这里,我们(至少)需要两个要素:
- 一个数据集,包含$N$个输入输出的例子(称为样本):$D=\{(x_i,y_i)\}_{i=1}^N$
- 一个损失函数,衡量模型预测的输出与真实输出之间的差距:$\mathrm{loss}(y,F(x;\omega))$
3.1、模型训练本质上是一个求解最优化问题的过程
$\min_{\omega} L(D,\omega)$
$L(D,\omega)=\frac{1}{N}\sum_{i=1}^N\mathrm{loss}(y,F(x;\omega))$
3.2、怎么求解
回忆一下梯度的定义
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201512.svg" style="margin-left: 0px" width="400px">
从最简单的情况说起:梯度下降与凸问题
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201514.png" style="margin-left: 0px" width="800px">
梯度决定了函数变化的方向,每次迭代更新我们会收敛到一个极值
$\omega_{n+1}\leftarrow \omega_n - \gamma \nabla_{\omega}L(D,\omega)$
其中,$\gamma<1$叫做学习率,它和梯度的模数共同决定了每步走多远
3.3、现实总是没那么简单(1):在整个数据集上求梯度,计算量太大了
<br/>
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201600.png" style="margin-left: 0px" width="800px">
<div class="alert alert-success">
划重点:条件允许的情况下,Batch Size尽量大些
</div>
3.4、现实总是没那么简单(2):深度学习没有全局最优解(非凸问题)
<br/>
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201603.png" style="margin-left: 0px" width="800px">
3.5、现实总是没那么简单(3):学习率也很关键,甚至需要动态调整
<br/>
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201606.png" style="margin-left: 0px" width="800px">
<div class="alert alert-success">
划重点:适当调整学习率(Learning Rate),避免陷入很差的局部解或者跳过了好的解
</div>
3.6、神经网络的梯度怎么求(选学)
Chain Rule:
假设 $L(w)=f(g(h(w)))$
那么 $L'(w)=f'(g(h(w))) \cdot g'(h(w)) \cdot h'(w)$
<img src="https://maynor.oss-cn-shenzhen.aliyuncs.com/img/20231108201610.png" style="margin-left: 0px" width="800px">
蓝色的过程叫 Forward Pass,红色的过程叫 Backward Pass,整个过程叫 Backpropagation
后记
📢博客主页:https://manor.blog.csdn.net
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Maynor 原创,首发于 CSDN博客🙉
📢不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐
📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12471942.html
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。