粉丝543获赞2563

嘿,大家好,今天我们来聊一个特别有意思,甚至有点颠覆性的话题,我们训练 ai 的 方式会不会从一开始就走错了路?我们将要深入解析一项叫 opus 的 新技术,它就提出了一个更聪明也更高效的训练方法。咱们这就开始吧。 首先啊,我想抛出一个核心问题,一个让整个 ai 行业都感到焦虑的问题。如果有一天, ai 把整个互联网上所有高质量的数据都学完了,吃光了,那我们该怎么办? 你别觉得这是危言耸听,这其实是一个马上就要到来的挑战。好的,那在这次解析里呢,我们会按这么个思路来走,首先看看 ai 面临的数据强到底是怎么回事, 然后分析一下为什么光靠砸更多数据已经不好使了。接着,我们会揭示旧方法背后一个很根本的问题, 之后就轮到我们的主角 o p u s 等场,看它是怎么解决这个问题的。当然,我们还会展示它那些令人难以置信的结果。最后再聊聊为什么说这项技术可能会改变一切。 好啦,那我们就从问题的根源开始说起。现在的 ai 领域啊,正一头撞向一个巨大的障碍,研究人员们给他起了个名字叫数据强。 你想想看,在过去好多年里,想让 ai 变聪明,逻辑特别简单粗暴,就是为给他更多的数据。这个所谓的规模法则,就像是 ai 发展的燃料一样,推着我们往前跑。 但问题是,现在我们好像正以百米冲刺的速度,一头撞向一堵结结实实的墙。 这可不是什么遥远的科幻小说情节了,有研究预测,就在二零二六年到二零二八年之间,可能就这么短短几年,我们就会把互联网上所有能用的高质量公共文本数据给用光了。你看,时间真的非常紧迫,也逼着我们必须得想点新办法,更聪明的办法。 那我们就来看看,为什么以前那种简单粗暴的蛮力方法,也就是拼命堆数据,现在没报道帮我们翻过这堵数据墙了。 咱们打个比方啊,这就像训练一个运动员以前的老方法之一呢,叫静态筛选。 这就好比你给运动员制定的一套训练计划,然后跟他说,行了,从第一天到最后一天,你就照着这个练吧,完全不管他练的怎么样,有没有进步。后来呢?有了动态选择, 这就毫不有了。一个教练每天观察运动员,给他安排新的训练。嗯,这当然好多了,但还不是最高效的。 好,现在咱们再往深挖一层,看看这些老方法失败背后,真正的技术原因是什么。 其实问题啊,不光在于你挑了什么数据给 ai, 更关键的是, ai 到底是怎么从这些数据里学习的。 要想搞懂这个,我们得先认识一个关键角色,叫优化器,你别被这个名字吓到。其实可以把它想象成 ai 模型学习的那个核心引擎, 它决定了 ai 是 怎么吸收信息,怎么自我提高的。就像每个运动员的身体素质和肌肉类型都不一样,每个 ai 模型也有它自己独特的学习方式,而这个方式就是由它的优化器决定的。 这张图就特别直观了,它一下子就把问题的核心给点出来了,大家看左边这条歪歪扭扭的路,它代表了旧方法给 ai 规划的训练路径图。 这条路呢,是基于一个叫原始梯度的东西,简单说就是最直接,但不一定是最聪明的学习方向。这就好像你让运动员去爬山,却让他走一条最崎岖的山路,虽然最后也能到山顶,但累得够呛,效率太低了。 而右边这条笔直的路呢,才是 ai 的 优化器,也就是它的学习引擎真正想走的那条捷径。所以,你看,旧方法最大的问题就是,你给的训练地图和 ai 自己最想走的那条路,完全是拧巴的,是错位的。 那问题怎么解决呢?别急,我们的主角这就登场了。 opens 提供了一种全新的更智能的训练方式。 oppos 这个全称听起来有点复杂,叫优化器引导的投影消用选择,但说白了,你完全可以把它理解成一个超级聪明的 ai 私教。 这个私教啊,特别懂他手下这个 ai 运动员的生理机能,也就是他的优化器,所以他总能特别精准地在最恰当的时候挑选出对 ai 来说最有价值的训练数据。那么,这个聪明的教练具体是怎么工作的呢? 首先,他能读懂 ai 这个运动员的身体,知道哪条训练路径才是最高效的。其次,他心里有一个冠军模型作标准,也就是那个高质量的代理池,确保 ai 始终是朝着正确的方向在进步。 第三,他的反应特别快,能用一些聪明的技术,迅速判断出哪个训练项目最有价值,不浪费一分一秒。 最后啊,他还会安排多样化的训练,今天练力量,明天练速度,避免 ai 因为老式重塑同样的东西而学不进去了。好了,理论听起来确实很厉害,对吧?但 opus 在 实战中的效果到底怎么样呢?咱们别说虚的,直接看数据。 结果非常简单,直接 o p u s u 能把训练所需要的计算量减少到原来的八分之一,你没听错,是整整八倍的效率提升,这简直太惊人了! 而这一张图呢,就更直观地展示了 opus 的 成功,大家请看这条红线,它就是 opus, 你 看它是不是一下子就把其他所有方法都远远甩在身后了? 而且最关键的是,他是在用了比对手少得多的训练数据的情况下,做到了这一点,这可真是事半功倍这个词最完美的权势。所以啊,你看这个直接对比就知道他有多夸张了。 在一个实验里,用标准方法进行完整训练,吭哧吭哧,为了两千亿单位的数据,结果还不错,但是用 o p u s 呢?只用了三百亿单位的数据,连七分之一都不到,得到的结果居然比那个完整训练还要好。 所以,这项技术的意义到底在哪儿?它可不仅仅是让训练快了一点或者省了点钱,它可能从根本上为人工智能的未来开辟出了一条全新的道路。 你想想看,这都意味着什么?首先,咱们前面说的那个让人头疼的数据强,好像有办法绕过去了, 我们还能用更少的资源训练出更强大、更专业的 ai 模型,这样一来, ai 开发的成本和门槛都会大大降低,让更多人能参与进来,而最重要的,我们就能去挑战和解决那些以前因为数据和算力不够,想都不敢想的更复杂的问题了。 当然了,这么厉害的一项开创性工作背后是一支强大的团队,它是由上海交通大学和阿里巴巴集团的通易千问团队这些顶尖的研究机构合作完成的,也就说明了这项研究的分量和可信度。 最后也给大家留下一个开放性的文体来思考一下。如果说 ai 的 学习方式从过去那种像建一个巨大的图书馆一样被动的存储信息转变成了现在这样,像培养一个主动思考、高效学习的天才, 那么有了这样的 ai 天才,我们人类社会下一个可以用它来解决的重大问题又会是什么呢?谢谢大家!

大家好,我是 joy, 欢迎来到理解深度学习的第十一课。上节课我们讲了随机梯度下降,是不是感觉模型训练越来越有意思了?没错, joy, 我是 赛 随机梯度下降。 s g d 确实很强大,但它也有自己的小脾气,今天我们要给它升级,让它跑得更快更稳。 听起来就很厉害,所以我们今天要聊什么呢?今天我们会介绍梁中非常重要的优化算法,动量法 momentum 和 adam, 它们都是为了让我们的模型训练过程更高效、更稳定。动量 adam, 光听名字就觉得它们充满了力量感。 赛,快给我们讲讲为什么我们需要这些新方法呢? s g d 不是 已经挺好的了吗?嗯, s g d 在 很多情况下表现不错,但想象一下,如果你在爬一座很长的山谷,山谷底部很平坦,但两边却很屌翘, sgd 可能会在山谷的两侧来回震荡,像走枝子形,效率就不高了。哦,我明白了,就像图里画的那样,走得很迂迂。那动量法是怎么解决这个问题的呢?动量法就是为了解决这种震荡和收敛慢的问题, 他的核心思想是不仅看当前的梯度方向,还要记住之前走了哪些方向。记住之前的方向。这听起来有点像物理学理的惯性啊。你说对了, joy 就是 栋梁这个名字的由来。 我们更新参数时,会结合当前批次计算出的梯度和我们上一步移动的方向。具体是怎么结合的呢?能详细解释一下吗?没问题, 你可以把 m 下标 t 加一看作是新的动量,它由两部分组成,一部分是旧的动量, m 下标 t 乘以一个衰减系数,贝塔另一部分括号一减,贝塔括号乘上式当前计算出的 t 度记下标 t, 也就是 d t 布选择的小批量样本 b t 的 损失梯度总和,然后就用这个新的总量 m 下标 t 加一代表上坡方向, 然后反方向改变参数。其中贝塔就决定了我们对历史方向的记忆力有多强,对吗?对的,为了看清楚这点,我们可能需要做一些推导。 我们注意到,这个动量的定义实际是一个递推关系,根据 d t 部的数据计算 d t 加一部的数据, 我们可以反复这个过程,然后用数学归纳法得到这个递推关系的通解。也就是新的动量 m 下标 t 加一等于 b, 它的 t 加一次方乘动量出值 m 下标零 加上括号一减,贝塔括号乘幺从零到 t 求和被求和。像是贝塔的 t 减幺次方乘当前计算出的小批量数据 t 度 g 下标幺。 我看到了,如果幺越大,那么 t 减幺就越小。考虑到贝塔在零和一之间,进而贝塔的 t 减幺次方就越大, 这说明越近的敌赌季涛对动量的贡献权重括号一减,贝塔括号乘北塔的梯减涛次方就越大,反之,越早的敌赌季涛贡献就越少。没错, joy, 你 的分析很对, 同时北塔越接近一,这些求和权重也都会变得更大,也就是模型对之前的移动方向就记得越清楚,越近的梯度贡献越大,北塔越接近一,历史梯度贡献也会变得更大。 还有其他什么特点?你总结的很对。 joy, 上面这个飞碟带大新动量表达式,说明了这个动量的本质就是历史梯度的指数加权平均。 这样一来,如果梯度方向一直很稳定,动量就会积累,让我们的步伐越来越大。哇,这不就是顺风加速吗?可以这么理解, 如果梯度方向反复变化,比如在山谷里左右摇摆,那么不同方向的动量就会相互抵消,让整体的移动轨迹变得更平滑,减少不必要的震荡。就像图展示的那样,这样就避免了来回折腾,能更直接地奔向最小值了。太棒了, 那 nesteroff 加速动量又是什么呢?听起来更高级一些。 nesteroff 加速动量,或者叫 n a g, 是 在动量法基础上的一个巧妙改进。 普通动量法是在当前为止计算梯度, n a g 则更聪明一些。怎么个聪明法?他会先用当前的动量预测一下我们下一步大概会走到哪里, 然后在那个预测点,也就是图中的点四上计算梯度。等等。在预测点计算梯度,这有什么好处呢?这样做的好处是 d 度。像现在是对仅由动量提供的路径 alpha 被它 m 下标 t 进行了一个修正, 就像图里画的,它不是在点一算梯度,而是在点四算。哦,我看到了,它先沿着虚线方向直接移动 alpha beta m 下标梯到逮点四,再从点四测量梯度,然后根据这个梯度方向移动到点五。 这感觉像是三四二厚型,更具前瞻性。对相比而言,普通的动量方法,先在点一测量梯度,然后这个梯度的方向移动到点二, 最后沿着虚线方向移动阿尔卑塔 m 下标梯,到达点三。哇,我发现区别了,标准动量法是先测量梯度并沿梯度移动后再沿动量移动。而 nestoroff 加速动量则是先沿动量移动,然后测量梯度并沿梯度移动。 两者的先后次序刚好相反。总结得真好, joy, 这使得 nestroof 动量能够更早地看到前面的地形变化,从而做出更准确的调整, 通常能比标准动量法收敛得更快一些。动量法听起来已经很棒了,丹塞,我刚才在翻资料的时候看到它还是有一个潜在的问题,就是学习率是固定的,这又会带来什么麻烦呢? 嗯,你观察的很仔细,固定布场的地度下降确实有个不理想的特性。想下一下,有些参数对应的损失函数变化很快,地度很大。有些参数变化很慢,地度很小。 就像左图和右图里画的那样,一个方向很陡,一个方向很平缓。没错,如果你用一个大学习率,在陡峭的方向上,可能一步就冲过头。比如左图大不长,导致红色的变化,箭头变得不稳定。 但如果用小学习率,在平缓的方向上又会走得很慢,半天都到不了。比如右图中的小的短箭头,也就是左图陡峭的部分希望小不长,而右图平缓的部分又希望不长大写。 这样就很难找到一个万能的学习率,既能快速前进,又不会翻车。那 adam 全称是自适应,估计他非常聪明。 他借鉴了动量法的思想,但不仅仅是对梯度本身做动量处理,他还对梯度的平方做了动量处理。梯度的平方为什么是平方呢?梯度的平方可以看作是衡量这个参数方向上变化剧烈程度的一个指标。 adam 会为每个参数维护两个动量项,一个是对 t 度本身的平滑估计,我们叫它 m。 另一个是对平方 t 度的平滑估计,我们叫它 v。 这里特别要注意的是,这里的平方指的是逐个分量平方,比如 v 下标 t 加一的 d k 个分量等于括号偏 l 白偏 f, k 括号的平方。明白了, m 就 像是平均速度, v 就 像是平均的颠簸程度,因为它消除了正负两个方性的差别。哈哈,这个比喻很形象。然后, adam 在 更新参数的时候,会用 m 除以 v 的 平方根,这也是逐个分量相处哦。除以 v 的 平方根, 那不就是用平均速度除以平均颠簸程度吗?警惕!通过这种方式, adam 能够自适应地调整每个参数的学习率。 对于那些梯度变化很大的参数, v 会比较大,除完之后布长就小了,变得更谨慎。而对于梯度变化小的参数, v 相对小,布长就大一点,可以更大胆地探索。 这样就实现了每个参数都有自己的数熟,学习率完全正确。这就是 adam 最核心的优势之一,它能更好地平衡不同参数的更新布长,让训练过程更稳定、更高效。 就像图六点九 d 里展示的路径非常平滑,这样就避免了图六点九 c 里那种虽然在每个方向都移动了固定距离,但最终却在最小值附近来回跳动的情况。 此外, c 老师,我注意到教材中提及了所谓的归一化递度,这是什么意思?你刚才自己也提到了这个算法实现了每个参数都有自己的专属学习率, 这个专属学习率实际就是红色圈注的部分, alpha 除开根号 v 下标七加一。如果忽略小量 epsilon 的 话, 注意,这个除法是逐个参数分量相除,那归一化的度呢?这个所谓的归一化梯度也是逐个参数分量归一化,也就是对于蓝色圈注的部分, m 下标 t 加一,除开根号 v 下标 t 加一, 继续按逐个参数分量计算,可得偏 l 百偏斐除偏 l 百偏斐的平方,再开平方等于偏 l 百偏斐除偏 l 百偏斐的绝对值。 然后忽略小量 epsilon, 可约等于偏 l 百偏斐正负号,也就是正负一。哇,我看到了,果然是对梯度的每个分量进行了归正负一对的。 所以最后算法移动的距离等于 l 法乘归一化梯度等于正负 l 法。 由于是目前 l 法是固定的,也就是算法在每个参数方向上移动相对固定的距离, 这种归一化梯度的算法就是 rms prop 的 核心思想。哦,我终于明白了归一化梯度的准确含义了。 此外,我看到教材上说 adam 算法等于动量法, momentum 加 rms prop, 能给我仔细讲讲吗?为何要进行这样的结合?可以的。还记得我们前面引入动量法的疑音吗?记得, 好像是说梯度下降法或随机梯度下降法只用到了最近的梯度,导致迭代的参数移动路径非常曲折。而引入动量法后,由于采用了所有先前梯度的指数加权,平均平滑了参数变化轨迹。你的总结非常好, 现在看看刚才提到的 rmsprop, 是 不是也是只用到了最近的梯度?只不过仅仅对这个梯度进行分浪归一化而已。哦,我明白了,现在也需要用动量法进行参数轨迹的平滑化了。对的, 只不过我们现在需要同时平滑两个量,一个是低度平滑后对应动量 m 下标 t 加一。另一个是低度平方 平滑后对应 v 下标 t 加一。最后就得到了和前面动量更新 m 下标 t 加一一样的表达式,贝塔乘 m 下标 t 加括号一减贝塔括号乘关于参数的低度, 还有新的所谓 rms prop 的 更新, v 下标 t 加一的表达式。伽马乘 v 下标 t 加括号一减,伽马括号乘关于参数的低度平方。 说得非常对, right, 前者是所有立式梯度的指数加权平均,可用来估计梯度的平均值,又被称为梯度的一阶矩,也就是动量。 后者被称为所有立式梯度平方的指数加权平均,可用来估计梯度的非中心方差,又被称为梯度的二阶矩,也就是 r, m, s prop。 哦,明白了,那么现在我们可以将这种一阶聚动量 m 下标 t 加一和二阶矩 rms prop 带入归一化,就可得到。阿当更新规则还不行,还差一点, 因为在训练刚开始的时候,因为我们收集到的梯度信息还很少, m 和 v 的 估计可能会不太准确,会有偏差。比如刚开始的时候,它们可能都偏小了。没错,因为 m 和 v 一 般都初始化为零, 这会导致刚开始都很小,所以阿当还有一个偏置消正步骤,就是正确的阿当更新规则公式里的 q 的 符号, 它会修正这些初始阶段的估计值,让它们更接近真实情况。具体是如何修正的呢?就是我们希望在迭代的初期,希望放大一阶矩动量 m 和二阶矩 rms prop 等。过了所谓的冷启动阶段,这个放大作用会逐渐消逝。应该有具体的修正公式吧。有的就是修正后的一阶矩动量 m q 大 小标 t 加一等于 m 下标 t 加一除一减贝塔的 t 加一次方。 还有修正后的二阶矩 r m s prop v q 大 小标 t 加一除一减伽马的 t 加一次方。 我看到了,果然,当梯较小时,由于 beta 在 零和一之间导致分母更小,起到了放大的作用。而当梯较大时,分母趋于一,修正作用逐步消失。 这是一阶举动量的修正效果。二阶举 r m s prop 的 修正效果也类似,这确保了算法在粗出的几步就能全速运行。二、不是缓慢的热身。听起来很周到,所以 adam 在 实际应用中表现怎么样呢? adam 在 实践中非常受欢迎, 因为它对初初学习率不那么敏感,而且通常能很快地取得不错的进展。它特别适合矗立神经网路中,不同层之间低度大小差异很大的情况。怪不得我听说很多深度学习模型都默认使用 adam 作为优化器。 是的,它是一个非常强大的工具。不过需要注意的是,实际中我们通常用小批量 mini batches 来计算梯度,所以 adam 的 轨迹在实践中还是会有一些造像的,就像随机梯度下降法那样。 毕竟 adam 算法也算是随机梯度下降法的变种。 sum, 我 们刚才用了动量法和 adam, 它们都有各自的参数,比如 beta, gamma, 学习率, alpha, 还有批次大小等等。这些参数是不是也要我们自己来设定?对,没错, 这些参数我们称之为超参数 hyper parameters。 它们不像模型本身的参数那样是通过训练数据自动学习出来的,所以它们是用来控制如何训练的参数,而不是模型学到了什么的参数,对吗?非常准确, 超参数直接影响模型的训练过程和最终性能。选择这些参数与其说是科学,不如说更像是一门艺术。艺术?那是不是没有一个固定的公式可以告诉我哪个超参数组合最好?确实如此, 通常的做法是,我们会训练很多个模型,每个模型都使用不同的超参数组合,然后选择表现最好的那个,这个过程就叫做超参数搜索。 hyper parameter search。 听起来工作量不小,是的,但它是模型训练中非常关键的一步。我们会在第八章更详细地讨论超参数搜索的策略。好了,赛,今天我们学到了好多。经过第十课和今天的第十一课,第六章的主要内容算是学完了, 能帮我们简单总结一下本章的重点吗?好的, joy。 本章我们主要围绕模型训练或者说模型拟合展开, 目标是找到使损失函数最小化的参数。我们从最基础的低度下降法开始,沿着损失下降最快的方向更新参数。然后我们发现,在处理复杂的非限性函数时, 梯度下降可能会被困在局部最小值或安点,而且计算成分也高。没错,所以我们引入了随机梯度下降 s g d, 它通过使用数据的一个随机子集批次来计算梯度,引入了一些有益的噪声,帮助我们跳出次优区域,同时也降低了每次迭代的计算成本。介社为了让 s g d 更高效,我们给它加上了加速器。 对,就是动量法。它通过结合之前的移动方向,让模型在参数空间中移动得更平滑,减少了在下长山谷中的震荡,加快了收敛速度。 最后,我们介绍了 adam 算法,它更进一步,不仅使用了动量,还为每个参数自适应地调整学习率。 adam 通过对基度和平方基度都进行动量估计并进行偏置矫正,使得他在各种复杂的损失函数地形中都能表现出色,并且对初识学习率不那么敏感。 总结得真好,这些优化算法确实让深度学习模型的训练变得更可行,更强大。 是的,这些思想不仅适用于深度学习,也适用于优化任何模型。下一章,我们就要深入到神经网络的核心,学习如何通过著名的反向传播算法来高效计算精度,以及如何正确的出使化网络参数。 在节目结束前,赛,我想请你带我们快速回顾一下 notes 里的一些有趣点和几则练习题,让我们的听众能对这些概念有更深的理解。 没问题, notes 部分提到了优化算法在工程领域的广泛应用以及精度下降的历史。它还深入讨论了凸性、最小值和安点。凸性我知道就像一个碗,只有一个最低点, 但深度学习的损失函数通常不是图的,对吧?正是非图函数会有局部最小值和安点。 note 里提到,我们可以用 hesin 矩阵来判断一个点是最小值,最大值还是安点。 hesin 矩阵听起来就计算量很大,那如果模型有一百万个参数, hesin 矩阵的维度是多少呢? 这也是习提六点一,一问的答案是一百万乘以一百万。这是一个巨大的矩阵, 计算它的孪几乎是不可能的。也试着为什么像牛顿法这种需要 hesy 孪的优化方法在深度学习中不常用。明白了,计算成本太高了。 notes 里还提到了 s g d vs adam 的 激烈讨论,到底哪个更好呢?这是一个非常活跃的研究领域, adam 通常启动快,对超参数不敏感。 但有些研究认为,精心挑优的 s g d, 特别是带动量的 s g d, 可以 找到更宽的最小值,从而获得更好的泛化能力。 更宽的最小值是什么意思?简单来说,如果最小值像一个宽广的平底锅模型,参数稍微偏离一点,损失变化也不大,这通常意味着模型更稳定,在面对新数据时表现更好。 哦,原来如此,所以没有绝对的赢家,要看具体情况和调优水平。 对,而且还有很多 item 的 改进吧,比如 itemw, rectified item, 它们都在尝试兼得两者的优点。下面可以讲几个习题吗?可以的。首先,习题六点一零 在我们在课程中已经反复提到过,栋梁就是历史梯度的指数加权平均, 并且提及证明,就是反复迭代几步,发现规律,然后用数学归纳法证明。这个具体过程,希望同学们课后要完成哦哦, 习题六点一一前面已经讲过了,再讲一个习题六点八,具有固定学习率的非随机梯度下降,能否跳出局部极小值吗? 我们知道,一般是根据梯度为零这个条件求集值。从局部来看,一旦参数到达这个集值点时,根据梯度下降的更新规则,可发现参数将不再会变化。 从数学上看,仅仅靠导数求集值,无法确定是不是全区最大还是全区最小。 如果您的运气不好,参数不变时仅仅处于局部集值点,那么你将永远无法跳出。 我明白了最后一个问题,我们来做个习题,六点九,我们在一个规模为一百的数集集上,以二十的 p 次大小运行随机梯度下降算法。一千次迭代,我们训练了多少个回合? e pox, 这是一个很好的时机问题。一个回合意味着模型完整地便利了一遍所有训练数据。一百个数据点批次大小是二十,那完成一个回合需要多少批次呢?一百除以二十就是五个批次, 所以每五次迭代就完成了一个回合。那总共进行了一千次迭代,就是一千除以五,等于两百个回合,完全正确。 joy, 你 掌握得很好哇,今天的信息量真是大,从动量法到 adam, 再到超参数和优化器的选择, 我们又向理解深度学习迈进了一大步。是的, joy, 掌握这些优化算法,能让我们的模型训练事半功倍。希望今天的讲解能帮助大家更好地理解这些概念。非常感谢赛的精彩讲解,也感谢各位听众的收听。 别忘了,下节课我们将揭开反向传播的神秘面纱,那可是神经网络训练的核心哦。敬请期待,我们下期再见。再见!

答应给粉丝兄弟们做的新 iphone 手机啊,到手后必做的几个设置,尤其是你怎么着呀,你更新 ios 二六以后,你有这个续航焦虑的,而且它那个晚上待机掉电特别严重的那种啊啊,这期视频它比较长,请耐心观看,因为我讲的特别细,特别细。 第一步啊,点开设置,点开电池,然后找到充电,把这个充电上线,把它拉到百分之一百,然后优化充电啊,这个打开不要把它选择八十到九十五,这没有任何意义,不会对你那个健康度产生啊什么好的。呃,效果没有用啊。 然后咱们找到电量模式,这电量模式自身电量我说过很多次啊,这个打开以后会学习你的使用习惯,这个学习时间是十四天, 这个过程就比较费电,然后的话学成了之后会又怎么样呀?啊,也会限制你的那个 cpu 和 gpu 的 性能,才有可能给你省电,而且你面临的会是什么呀?掉帧,卡顿啊,都是这个功能,所以说没有任何意义啊,这个我给你讲的很细。 然后咱们返回第二步,找到通用往下滑,找到后台 app 刷新啊,这个我建议把它关了啊,不会影响你那个接收消息,而且会比较省电。 然后咱们返回,找到第三步辅助功能,辅助功能里边找到显示文字与大小,可以选择打开降低透明度,然后可以打开降低白点值,降低白点值我建议你拉到多少?拉到二十五到三十五左右就可以。 咱们返回第四步,找到显示与亮度,打开它,然后我建议啊,咱们就把这个全天候显示屏关闭就可以啊,这个是比较费电的,当然你喜欢的话,比较喜欢炫酷的,你也可以开着。然后咱们返回 啊,往下走,找到第五步啊,咱们那个隐私圆圈性把它打开。第一步啊,打开定位服务,定位服务里边一定要记住啊,以天气为举例,还是那句话,你可以选择使用 app 或小组件期间,或者是使用 app 期间, 不要选择始终。然后把那个精确位置要关闭,返回咱们继续往下走。系统服务里边啊,建议把这个蜂窝网络搜索关闭啊,再往下走,把这个重要地点与路线关闭啊,这个东西我说过很多次, 然后把这个产品改进,这一溜都关了,不会影响你手机的任何性能啊,只会让你手机更省电一些。然后咱们返回啊, 找到那个跟踪啊,把这个跟踪要关闭啊,允许 app 请求跟踪,一定要关闭,不要问为什么。然后咱们继续往下走啊,找到什么呀?找到这个分析与改进, 这个啊,不要费电,一定要把那个共享 iphone 分 析去关了,好不好?然后咱们返回,找到 app, 然后首先第一个找到什么呀?通讯录搜索一下,点开,然后啊点击通讯录账户, 然后抓起新数据,因为我已经关了,第一把这个推送要关,第二要把那个自动改为手动。 呃,你如果说你开的这个东西的话会比较费电,尤其是这个自动啊,看看了没有,你要想延长电池的续航能力,请减少抓起的数据的频率。发现了没有?然后咱们返回啊,返回 还有一个,找到你的邮件搜索邮件,点开,然后邮件账户一样把这个抓起新数据这个东西,你把它关闭就行了,好不好? 都是啊,把它改为手动,然后咱们返回,返回以后啊,咱们这个这些还有一个问题告诉你们,咱们有一些不常用的 app, 你 比如说这个啊,我打开了以后它有一个实时活动, 这个东西啊,如果说不是你常用的 app, 不是 外卖之类的这个东西,我建议你把它关闭掉啊,然后的话啊,更新频率也把它关闭,好不好? 你只要做了这些设置啊,等那个咱们那个 l s 二六点四到来啊,你的手机续航会有一个比较不错的提升, 关于苹果手机的问题,你有哪里不懂的都可以问我,还有说你们想学什么的,可以在评论区啊,点赞最多的,我会给兄弟们做一个视频详细讲讲。好了啊,这期视频就到这学会了的点点关注啊,咱们下课。


斯坦福人工智能公开课 c s 三三六第四件,优化器与超参数所有人都知道经典优化区 adam w, 但很少有人能够说清楚为什么一定要在 adam 前面加一个 w。 如果你只会写一行 optimizer 点 stop, 那 你其实根本不懂大模型是怎么被训练出来的。 cs 三三六第四件,它的本质就是撕开算法优化器的黑盒。 核心第一点, adam w 的 暗物质权重衰减,也就是所谓的 wet decay。 很多人以为 wet decay 就是 l two 政策化, 但在大模型里面,这两个其实不是一回事。传统的 l two 是 加在梯度上的,问题是当你用 adam 这种自适应优化器的时候,梯度已经被动量和二阶矩阵修改过, 结果就是政则会被稀释甚至失效。 adam w 做了一件关键的工程创新,他把权重的衰减从梯度的根系里面解偶出来, 好处不只是防止过离合,更重要的是在超长的训练环境中能够保持仓促的灵活性,同时也避免权重的。他说。 第四讲核心第二点, gradient, 也就是梯度拆讲的,它是整个训练中的最后防线。 大模型训练最怕什么?不是慢,而是梯度突然爆炸。当全级梯度的范数瞬间失 控,损失就有可能一夜飞天。 gradient 梯度拆解的作用,那就是给模型踩一脚物理刹车,但这种预值它并不是随便设的。 t 度裁剪的域值太小,模型会学不动。 t 度裁剪的域值太大,模型的训练会直接爆炸。 在超大规模的分布式训练中,这个域值往往就是让模型不崩溃的最后保险丝。 第四讲的核心第三点, memory 和 compute 之间的权衡。很多人以为优化器只是算法问题, 其实更多的是显存的问题。因为 optimizer steps, optimizer 的 状态锻炼,一阶二阶矩阵往往是占训练显存的最大头。 这就是为什么模型的训练精度,包括 f p sixteen、 b f sixteen 以及混合精度的模型训练,它们不仅仅是为了速度,而是为了在有限的显存里能够塞进更大的模型以及 data batch 来换取更稳定的训练的修炼收敛效果。总的来说, cs 三三六第四讲这一讲,其实是在问一个更底层更深层次的问题, 你到底是要追求数学上的收敛,还是在有限的时间范围内以及有限的显存里完成模型训练的收敛? 大模型的优化,从来不就是从来不是纯数学的问题,而是受物理资源以及计算资源约束的挤兑工程问题。能把模型调通,这只是运气, 但能够预判他什么时候收敛,这才是实力。 cs 三三六第四讲,带你从调参数的工程师,升级为真正的能够理解训练系统深层次问题的模型架构师。

欢迎回到手撕大模型的第十四集啊,这节,这一集是我们的理论篇最后一集。这节课我们来聊聊 i m w 优化器。好,上一节课我们介绍完了,前向传播,反向传播,语记度下降。哎,我们知道了,就是只需要按照这个逻辑不断更新我们的每一个参数,就能使模型变成我们想要的样子。 好的,如果我们写严谨一点的话,就是 w t 加一就是下一项 w t 当前项等于减掉一卡学习率,乘上一个梯度,当前的梯度值 gt 表示。好的,那,那现在这个梯随这个东西我们叫做随机梯度下降,很明显他随机梯度下降会有存在一些问题,我们来简单看一下他的问题在哪里?随机梯度下降会遇到一些问题 啊,就是这张图表示的就是一张等高线图啊,每每一条线之间的差距是固定的,比方说啊,这一条 我随便举两条线,比方说这一条损失是五百,下一条下降的就是四百,以此类推,这就是六百,这是七百,大家能明白等高线的意思就可以。好吧,然后我们来看一下,就是一开始这边白色区域,由于等高线太过密集,我们这边就不化了 啊,这边他一开始的时候会随便乱撞,沿着这个方向随便乱撞,因为学习力哪怕设置很小,由于梯度太大,他会不停的往下坠落,就是不停的撞碰壁。好的,那我们可以观察到,就是他一开始会随机乱撞,这样的话是不太合适的, 因为可能就是遇到一些点,他应该放慢速度,可能会遇到一些边缘的点,走出这条这个等高线。 好的,这是峡谷阶段,这里等高线非常密集。好,他降着降着这边是比较正常的阶段。好,降着降着降到等高线。非常稀疏的平原或者 平原,或者是安布的地区,你可以看到他每一个点都非常密集。哎,这每一个点他都计算很多很多很多很多次,一个点就计算很多次嘛,他在这个比较平滑的阶段浪费了很多计算资源,这样也是不合适的,他要慢慢找到方向。 好的,然后他下一步走到这个,呃,就是快,毕竟终点了,对吧?他从这个平原阶段走出来,像一个醉汉一样乱撞。哎,可以看到这条红线就是他的更新路线,他就像一个醉汉一样乱乱走乱撞,误打误撞走到这个啊,直线我们肯定希望他能一路 朝向终点前进嘛,但这样他现在这个随机乱撞就浪费了很多很多资源。好的,那总结下我们就要解决三个问题。第一个问题就是啊,在峡谷阶段随机乱撞的问题,我们希望他走的稍微慢一点,因为随时可能会走出这个啊峡谷,找到合适的出发点,然后在平原阶段希望他走的快点,不要浪费太多计算资源在一些啊,就是参数不怎么更新的地方。 第三个就是让他快速找到方向,找到这个终点,并且在终点处让他这个权重尽可能的打弯。好,我们来看一下,就是 i m w 这个算法是怎么解决这三个问题的。 首先第一步 i m w 引入了动量 mt, 哎,它不是物理上的动量,而是一个数学上的对梯度的这个滑动平均,它的目标是用来解决方向问题,我们可以看一下公式啊,这里写了个通向公式, mt 等于贝塔一。哎,贝塔一是个参数,超参数也是由你设定的。呃, mt 减一,加上括号一减贝塔一,即 t。 好 的,如果把它写成 每一项的公式的话,就大概长这样,大家可以看出来,就是他基本上就是一个指数滑动平均,对对梯每个梯度的指数滑动平均,他参考了每个梯度,每个梯度的贡献在这个每次都在缩减常见的取值,比如说被他一取 零点零零一,那也就是每次取零点九九九,也就是啊,就是每一次上一次梯度的影响会传递到下一次,但是他就会衰减零点,衰减到原来的零点九九倍。好吧,这就是一个参考 每一次前面的方向。好的,它现在又引入了一个二阶动量。二阶动量是什么?它是跟它每次是梯度的平方,它的目标是用来解决误差问题,每次移动多少? v t 移动多少,我们看,可以看一下这个是通向公式,我们把它每一项写出来,它大概就长这个样子。 v t 等于 啊,贝塔平方,他会每次去参考,也是会有个缩减传递。好,第三步,他就把原来的这个一塔乘 g t, 这是原来的就直接乘粗暴乘上一个梯度方向,现在变成了什么呢?现在变成 w t 减一,等于 w t 减一塔乘上 m t 除以根号 v t 加 epsilon。 好, 我们来逐个讲解一下他现在替换的每一项 m t, 就 刚刚讲的动量对不对?动量, 解决这个方向问题,考虑历史纪录,然后根号 v t, 他 决定是不长,如果 g t 一 直保持很小的话,也就是刚才说的平原阶段,平原阶段他要加速收敛,如果 g t 很 大的话,他要保证速度降低,避免这个强烈震荡。他要 嗯,保谨慎起见,不能快速的震荡,他要找到一个方向赶紧出去。好的,然后 e p c 笼还是为了稳定服务,他通常是十的负八次方,是一个很小数字,保证分母不能为零。 好的,那最后我们还要引入一个参数控制,因为机器学习有一个原则,就是,呃,他要保证在相等损失函数损失 值相同的情况下,他要保证这个 w 每个参数尽可能的小,因为如果局部很大的话,那他会导致在某一点非常不稳定。他要保证不能某一项的贡献对这个 loss 贡献特别大,所以他保证 loss 相同情况下参数尽可能的小,他能使参数趋近于零,乘上减掉了个一塔那么大 w, 我 们来看一下他这个为什么能做到使这个 w 尽可能的小。 来看一下 w, 如果 w t 加一只取决于这个一减朗姆的一减一塔朗姆的乘上 w t, 我 们取一塔朗姆的为零点零一,那它就是 w 一 是不是等于零点九九倍 w 零啊? w 二是不是等于零点九九倍平方 w 零,那 w 一 百是不是零点九九乘的一百次方 w 零, 然后计算一下就发现它只有零点三六 w 零,你可以想象,如果是一千次方的话,它基本上这个东西就是零了,然后最终我们得到的一 i m w 优化器长,这个东西就是零了,然后最终我们得到的一 i m w 加一等于 w t 减掉一塔乘上二号 m t 方向问题除以根号,根号 v t 二阶动量解决不长问题,然后减掉蓝调倍 w t, ok, 这就是最终 i m w 优化器的样子。我们来看一下就是对比 s g d 它会长什么样? 好的,我拿绿色线表示 i m w 它会走的路线,它开头是跟 s g d 一 模一样,因为一开始这个 v t m t 都是零嘛。好,现在它经过第一次发现它 v t 很 大,它会减少它的不长,因为 v t 很 大呃,在分母位置,它会使这个 呃不长减小,而且 m t 它会参考上一次的变化,对不对?也就说相比于这个线,它应该首先长度缩短,而且往这个方向靠,那它下一步它应该会往这个方向走, 对不对?这就是它的变化,它会保走得更少,然后它的方向会向参考上一次变得靠拢,它会走到这个地方停下来,然后下一次它会继续继续参考 这个,这个有利于他改进他的方向。好,我们来看一下这个啊,平原阶段,平原阶段是不是 mt 他 会参考参考这个方向,他会一直走维奇,他发现他两次 t 度都非常非常小,这样他就会,他会 调整,他不长,不会变得这两个距离这么短,这么短的距离,他会加长他的距离,是快速经过平原阶段逐渐走到这个地方。哎,这解决了平原阶段问题。好了,快要逼近终点的情况下,他会走一个原来 s g d 会走一些类似的问题,他会因为有了 mt 的 参考方向,历史方向的,他会 逐步沿着这个啊历史方向走,因为你发现它的梯度也不大,所以它会比较猛地走向终点。好了,到终点阶段,原来 s g d 它会莫名其妙打转,对不对?因为现在有了一个简朗姆达尼塔 w t, 它会使模型尽可能小,它会快速地走向这个终点,并且在终点 完成训练。哎,有了这一步,而且它会使得这个 w t 参数数值尽可能小。这样就解决了刚才提到的三个问题。 ok, 我 们终于讲完了理论部分,后续可能就会带大家手手册大模型,一行一行写代码手册大模型,希望大家点赞关注支持一下。

作者们通过数千 t p u 小时的算力搜索,并结合人工干预得到了优化器 lemon 相比主流的 adam 有着速度更快且更守内存的特点,并且大量实验结果显示他在多数任务上都有着不逊色于甚至优于 idm 网友的表现。

现在去拍市面上主流的大冒险元码,你会发现他们几乎清一色都在使用同一个优化器, amw, amw 和 amw 差的那一个 w 到底是?嗯,记得先一键三连交波学费啊!咱们直接开讲, 在提出权重衰减这项算法的很长一段时间里,由于非常好用,并且在传统这个 s g d 当中呢, l r 正则化和这个权重衰减是完美等价的。所以像早期的这个 python, 还有 pencil flow 这种主流框架,在实现 adam 优化器的时候,也直接沿用了这个 s g d 的 逻辑,直接把正则向加到了梯度当中,参与所有动量的运算。 但实际上,在 am 这种带自适应学习率的优化器里头,连二正则跟权重衰减根本不等价。我们先来快速回顾一波 am 的 这个核心机制啊。看过我之前视频的小伙伴应该有印象, am 相对于普通的 s g d, 最大的优势就是会计算两个动量来实现自适应的梯度更新。一个呢,就这里的一阶动量 v t 啊,它是梯度当中的指数移动平均,简单来说就是给近期的梯度更高的权重,用来平滑梯度的波动,稳定更新的方向。而另一个呢,就是二阶动量 st, 它是梯度平方的指数移动平均,用来给每个参数啊,做自适应的学习率的缩放,也就是控制每一步更新的不长。而此时咱把这个 l r 正则项放进 l s 时,最终传入 adam 的 这个总梯度就变成了原始的梯度啊,加上一个正则项,这时 l r 正则项产生的这个 lamba set 会和原始的这个梯度啊一起参与一阶动量和二阶动量的完整计算。而 adam 里权重衰减失效的核心问题就出在这。 我们先来看一个典型的场景模型,在这个参数已经收敛了,也就说这一点的这个原声 t 度非常小,接近于零。此时传入 a m 的 这个总 t 度是不是只剩下啊这个栏目的 set 这个部分呢? 按照正常权重衰减的逻辑,我们希望接下来的更新呢,是在优化参数,同时让这个 set 按照比例的缩小。权重越大,衰减的越多,权重越小,衰减的越少,就像这个 s, g, d 里头这样, 但实际上 a, d, m 会拿到这个加了,也要按正则向的总梯度去计算一阶和二阶动量。为了让大家一眼看到本质,我们暂时先忽略偏差修正的分母部分和过去的动量累积部分。因为当该参数已经趋于收敛了,也就梯度几乎为零的情况下,只要多更新几步,这个 a, d, m, e 和二阶的动量其实已经被当前的梯度填满了。 所以历史的旧梯度影响几乎可以忽略。此时一阶动量这个 v t 是 不是就等于这个 lambda 的 s t 呢?是不是就等于这个 lambda 的 平方啊?也就这个样子。 然后把他俩带入这个参数的更新公式当中,你就会发现,平方再开方是不等于取绝对值啊。而最终这个更新公式呢,就会变成这个样子。这里的 side theta 呢,是符号函数,如果这个权重 theta 是 正数,他就取负一。 这里的系数 number 呢,是我们设置的一个正数,所以这个 number theta 的 绝对值可以把这个 number 提到外面来,这样分子分母的这个 number 呢,就会直接约掉,并且这个一匹龙呢,也是个非常小的一个数,因为呢,防止这个分母是零的嘛,所以最后只剩下了一个上一 函数,也就说篮的大小,还有这个权重 c 的 大小,居然在分子分母当中被基本抵消了啊,这意味着啥?是不是在 a m 当中使用这个 l r 正则化,最终对权重的惩罚效果变成了一个只和学习率 e t 相关的固定值,而不再是一个跟权重大小成正比的一个比例衰减呢? 并且这又会导致两个严重的问题,假设一个权重特别的大,比如一百,本来应该大力衰减的,但是在 a m 当中呢,它可能只减去了一个固定的学习率,比如说 e t 等于零点零零一, 这就几乎没有变化对吧?权重衰减直接失效,而当权重已经很小了,比如说啊,是个零点零零零五,本来只需要微微衰减一咩咩,但是 a m 呢,依然会减去固定的这个零点零零一,就会直接把这个权重减成负数,导致小权重在零点附近呢,会剧烈震荡,根本无法稳定的收敛。这个是梯度很小会遇到的问题, 同时在梯度很大的时候,比如说训练初期,参数还没有完全收敛,每个 b 度都非常的大,那么这里的梯度就不能径直为这个 lim 的 c 了。 参数更新公式这里也是啊,把这个一阶动量给它放过来,然后再把这里的分子给它拆开看,发现没有,前面这一项呢,就正常的梯度更新,而后面这项呢,就是 a w l r 正则实现的这个权重衰减。重点来了, 别忘了此时的梯度它非常的大,这会导致分母部分的二阶动量也很大,使得权重衰减的这一项呢,被除的非常的小,导致这个权重衰减会再次的失效。经过咱上述的分析,无论是训练前期的梯度大,还是训练后期的梯度小, a m 当中使用了这个 l r 正则实现的权重衰减都会失效, 根本原因是权重衰减项被嵌入了 a m 次适应学习率中,受一二阶的动量干扰,失去了与权重成正比的衰减效果。 哎!而 adam w 干的事很简单,就是将这个权重衰减项彻底的从 adam 的 动量计算当中解我出来简单来说就两步, 在计算 adam 的 时候,只使用原生的梯度来计算这个一阶和二阶动量,等 adam 的 核心计算完成之后呢,再将权重衰减的部分单独加在这个权重更新这一块,这样一来,权重衰减项就完全脱离开了这个 adam 的 核心计算,它的衰减力度呢,只跟当前的这个权重大小和我们设置的这个正则系数 lamb 的 挂钩,完美的实现了权重衰减原本的初衷。 怎样?是不是嘎嘎简单这种解谜呢?让 amw 既保留了 amw 快 收敛的优势,又真正发挥了群众衰减的泛化能力,其中的 w 指的就是 weight decay。 至此,相信你应该非常明白 amw 和 amw 的 区别,以及为何现在都首选 amw 的 吧? 如果这期视频能帮助到你,麻烦长按点赞,一键三连!你的支持是我更新视频的最大动力,咱们下期视频见!

就是这个十七岁的高中生,他写了一段体式词,直接把普通的大模型变成了顶级的智能体,连 openai 的 工程师呢都震惊了,这个孩子呢就是屠金豪,他呢就是上海建平高中的一名普通的学生, 他创作的这段体式词呢,可以把可要的三点五直接变成 gpt 五的效果,在面对复杂的问题的时候,智力增加了十倍不止。我们现在打开这个体式词,可以看到自适应框架、 核心思考、训练、多重假设、生成、系统性验证,每一个都会颠覆你的认知。我们呢花了一周时间把它的体式词翻译成了中文, 并且呢优化成了三点零版本,既保留了核心思想,又缩短了上下文的长度,比如说可以在豆包 deep sleep 里面直接去使用。我们呢已经使用这个体式词开发了很多的智能体, 这个效果呢确实非常的好。其实词的原文呢,我已经放到这个非书文档了,如果有需要的回复六六六免费分享给你。