大模型学会的整套流程求导梯度下降链式法则哈喽我是子牙老师。前面花了五年时间通关了计算机手写操作系统、手写CPU虚拟机、手写Linux系统、手写GDB调试器、手写编程语言…后面准备通关AI研发出所有大家想学却没人教或者学不到的AI领域课程。如果你感兴趣可以关注我的公众号【硬核子牙】现在的大模型简直强的一批能写代码、生成内容、生成图片、生成视频……简直无所不能那大模型究竟是如何学会这些的呢本篇文章为你揭晓本篇文章是《通关AI》系列文章第三篇前两篇《真刀真枪讲透大模型底层》《不要小瞧ywxb》关注我的公众号【硬核子牙】看计算机底层、大模型底层硬核文章以下enjoy先说答案想想我们人是怎么学会东西的获取信息-尝试回答-对照结果-发现错误-调整学习方式-再次尝试-重复直到掌握大模型学会东西的本质非常类似前向传播-计算Loss-求导-得到梯度-梯度下降更新参数-重复代码长这样人类学习与大模型学习的类比关系如图我们人类是通过反馈修正自己的认知。大模型是通过梯度修正自己的参数本篇文章着重讲梯度。梯度是什么梯度是怎么来的为什么梯度下降能让大模型修正自己的参数到无限接近真实答案举个例子再讲梯度之前举个例子让你清晰看到大模型是如何学会的。即前面提到的那些名词是如何协同工作的模型ywx大模型通过不断训练要得到w5假设x2真实答案y_true10当前w3计算得到答案y_pred6计算误差errory_pred-y_true-4损失函数MSE计算Loss16大模型看到Loss这么大意味着w3错的很离谱需要调整这里顺便提一下Loss很小也不一定结果就对的离谱最终还是要看测试数据的测试结果。总之大模型训练就像泥巴里抓泥鳅-捉摸不透微调才是精髓Loss只能让大模型知道w3是不对的而且值等于16让大模型知道当前错的很离谱。但是大模型不知道此时w的值到底是偏大还是偏小即大模型不知道是要调大w的值还是调小w的值怎么办呢数学里有个东西可以解决这个问题导数。导数、求导后面再讲。关注我的公众号【硬核子牙】看计算机底层、大模型底层硬核文章大模型通过对Loss求导得到结果dW-53.926102913598854这里的dW就是梯度。把dW代入梯度下降公式【w w - lr * dW】就能得到新的w值4.999999999943761已经无限接近真实答案w5了一般来说大模型训练的前N轮效果是最明显的越往后训练效果越不明显甚至有可能没有变化epoch100, loss5.718312269938509e-20, W4.999999999943761epoch200, loss2.903008131213323e-29, W4.999999999999998epoch300, loss2.903008131213323e-29, W4.999999999999998epoch400, loss2.903008131213323e-29, W4.999999999999998epoch500, loss2.903008131213323e-29, W4.999999999999998epoch600, loss2.903008131213323e-29, W4.999999999999998epoch700, loss2.903008131213323e-29, W4.999999999999998epoch800, loss2.903008131213323e-29, W4.999999999999998epoch900, loss2.903008131213323e-29, W4.999999999999998epoch1000, loss2.903008131213323e-29, W4.999999999999998所以真实的大模型训练前N轮训练时会让大模型学得快一点后面的训练会让大模型学得越来越慢。你可以这样理解大模型的学习速度随着大模型的训练次数递减即大模型的学习率随着大模型的训练次数动态调整你有没有注意到dW是负数意味着w3太小需要往大了调。如果dW是正数意外着w大了需要往小了调。这是人话版从大模型或者数学角度它是这样的人类只是利用了求导的这个规律用来训练大模型发明导数的人是天才使用导数来训练大模型的人也是天才梯度与求导【大模型学会】这件事是怎么做到的通过梯度下降不断调整自己的参数直到无限接近真实答案。那梯度是怎么来的求导。求导到底是求什么如何理解求导抛开数学概念说人话求导就是w等于某个值时Loss的值。如果配合上梯度下降就可以计算出w调整一点Loss变化多少。即Loss随w的变化情况。这个是大模型训练与大模型学习的根基举个例子吧 假设你开车回家汽车速度不是固定的。平均速度只能告诉你一段时间内开了多快但是如果想知道10点整这一瞬间的速度就需要求导。求导本质就是研究“某个东西变化一点点会引起另一个东西变化多少”。在大模型中我们也是通过求导知道参数 w 改变一点会让 Loss 变化多少从而决定参数应该如何调整。你现在应该对梯度、求导有概念了吧。接下来就来讲讲求导到底是怎么求的公式是怎么推理出来的求导从计算角度来说求导就是把两个点之间的平均变化率不断缩小到某一个点的瞬时变化率什么意思呢举个例子转化成求导公式就是即s(t)t**2的导数公式是d(s)/d(t)2t平方的导数公式就是按这个过程推导出来的这个例子还是很容易懂的吧没有你看一遍没看懂多看几遍。如果你还是搞不懂那你可能需要老师教你欢迎报名我的课程《手写Chatgpt自研推理平台》链式法则求导真正的大模型训练不是一次求导就完成而是通过链式法则把 Loss 对几十亿参数的影响逐层计算出来然后通过梯度下降不断更新参数重复很多很多次什么是链式法则先不说教材上的定义直接上例子找到感觉回到我写的大模型我想让大模型学会ywx大模型的训练代码前向传播的链式法则是W-Y_pred-error-Loss如果想让大模型学会W就要进行反向传播Loss-error-Y_pred-W画箭头的部分就是链式法则。学术定义是一个结果经过多个步骤计算出来那么最终结果对最开始变量的变化要一层一层传递是不是一下就看懂了开始根据链式法则进行求导d(Loss)/d(error)的结果是多少呢上面提过。s(t)t**2导数就是2t。这里就是为什么要除以len(X)因为loss的值是平均值d(error)/d(Y_pred)的结果是多少呢d(Y_pred)/d(W)呢这三个公式的大致推导过程就是如此本篇文章我就不展开讲了后面再写文章展开讲。其实你们看懂这篇文章AI辅助完全可以自己啃出来。对大模型底层感兴趣的小伙伴可以关注我的公众号【硬核子牙】看计算机底层、大模型底层硬核文章。反向传播的完整公式就是如图结合梯度下降就能学会W大模型中所有的参数都是这样学会的可以这样说你吃透了这篇文章你就吃透了大模型训练的精髓你就深刻理解了大模型能学会任何东西的根基如果你想更多了解我欢迎去我公众号【硬核子牙】看我之前的文章及我的奋斗历程。白手起家程序员的职场心得应该会对你有很大启发若有收获就点个赞吧