粉丝1256获赞1.0万

我们接下来说什么呢?今天啊,首先我和大家一起来先去看看到底我们所说的深度学习是解决什么问题的。我们要借助深度学习帮我们解决问题,最终是完成什么样的目的, 然后在这样完成这个目的的过程当中有怎样的步骤?这个步骤是跨越任何具体的模型和具体大家可研究的那个领域的, 任何大家的领域啊,你只要用到了深度学习,任何的模型,其步骤都是一致的。所以呢,这个深度学习完成问题的步骤也会在我第一个部分和大家去做分享。 然后第二个部分呢,就是在这个完成问题的过程当中,其中一个核心的环节就是训练,所以这个训练我们拆出来啊,具体看看训练的过程有哪些, 然后损失函数、梯度下降和激活函数都是我们在刚刚开始学习的时候,大家会比较头疼,或者是说大家会先去搞定的几个问题,这些呢我们都在今天的内容里面一一来看。 好了,那我们就开始我们的内容了啊。首先我们先来一起认识什么是深度学习,以及深度学习里边具体的一些步骤。如果现在大家要用深度学习这个事你已经确定下来了,那么我们先弄清楚深度学习的目的是什么?深度学习的目的 不管大家是哪个领域,只要你要用深度学习,其目的就是来找到一个能够解决你现在问题的模型,这就是咱们深度学习的目的, 不管我们这个学习过程是怎样,不管你现在的任务是怎样,最终都是要来找到一个解决你任务的模型,这个模型找到了,咱们深度学习的过程就可以结束了,所以首先我们先弄清楚他的目的,就是来找到一个模型, 那么这个模型又要如何去理解呢?我们举几个任务来看,我们经常来看一些文本的任务啊,那就来说一个文本的任务,文本翻译。 如果我现在是希望借助机器深度学习的过程,然后帮我们来找到一个能够完成文本翻译这个任务的模型, 所谓这样的模型,不过就是我以后呢把一个要翻译的话丢给这个模型,这个模型就可以给我输出翻译的结果,那么这样的能够完成这个任务的啊,当前就是我们现在文本翻译的模型了。 再来说一个图像的例子啊,如果我现在呢能希望借助了深度的学习学习过程,最终来帮我能够去完成这样的事。我丢给现在模型一张图像,这个图像里面有一个手写的数字,它能够给我识别出来这个图数字 图像当中的数字是什么,那么这个图像的模型我们也就找到了。这个模型所完成的任务本质上就是一个图像分类的任务, 所以任务各种各样,但其本质上都是来找到能够完成这个任务的模型,这就是我们深度学习最终要达到的目的。 好了,那么如果这两个例子我们这个说清楚之后,那再具体去看,我们所谓的模型不过就是一个输入到输出的映涉关系嘛,文本翻译的话呢,你要丢给模型的是要翻译的话,模型给我们输出的是翻译的结果, 即输入和输出之间就一定会有一个应授关系。图像分类,你丢给模型的是一张图像,模型给我们输出的是当前分类的结果,即输入到输出之间也会有它的应授关系。 所以模型啊,看上去很抽象的一个概念,其本质就是由输入到输出的一个映设关系,这就是咱们借助深度学习,最终要帮我们找到的那个东西,就是一个输入到输出的映设关系。 好,那么如果说是映设关系,咱们再来想想,那这个模型,这个映设关系啊,到底要长成什么样子呢?我们怎么才能够把它确定和找到呢? 我们来看个简单的问题啊,我们现在呢有这样的一些样本点,它的分布我用一个二维的这样的一个坐标轴呢,就给它画了出来, 所以我们人眼看到了这样的一个个的样本点,看到了它们的分布,如果我们现在呢,想再有一个啊 x 进来,我就能够大概猜出来在这个分布当中,它的 y 的 值大概是多少。 所以借助已有的这些样本点,我们来找到一个模型,帮我们完成这样的 x 到 y 的 映涉关系。 所以这个映涉关系呢,大家一看啊,应该是一条线,既然是一条线,那么我们就可以把 x 输入进来之后,让它去乘以一个权重,也叫做这里的一个 w 啊,就叫做 w 了,乘以一个数来表示当前这条线的斜率,然后再给它加上一个数,能让这条线呢在做轴当中上下平移。所以这不就是可以来 比拟我们当前数据分布的一个模型了吗?我们把 x 进来,让它去乘以一个数,再加上一个数来预测它现在的输出,根据我们已有的样本点,那么这就是一个简单的模型,一个线段模型。好, 那么现在这样的一个简单的陷阱模型,它怎么出来的呢?第一,我们看了看当前的这些样本点的分布的情况,我们认为用一条线来表示它们之间的关系,当前是比较适合的, 所以我就把它想象成了 w 乘以 x 加 b 的 这样的一个结构啊,这个当前的这个计算的一个过程啊,用输入进来的数字去乘以一个 w, 再加上一个 b, 大 自然就对应的是一条线 好了,那么这是第一,我们根据现在样本点的分布,用了一个线段的结构,但是现在呢,这个 w 和 b 的 曲值是多少我还不知道,因为它的值也将直接影响我们。之后再拿这个模型去预测未知数据, 就是我只有一个 x, 想在这个分布当中来看看,根据之前的经验,它的 y 应该是多少。此时不光我们知道啊,拿 x 进来要和一个 w 相乘,再加上 b, 这个运算的步骤,还应当能够确定当前的 w 和 b 应该是具体什么值, 它们的值也确定下来了,我们才能够拿这样的模型出去使用啊,去解决一些未知的 x 的 y 的 预测的问题。所以在这的话呢,就确定了有两个方面。第一, 结构长成什么样。我们现在是一个这样的分布,我用了一个向量模型,其向量模型就是它的结构, x 进来去乘以一个数,再加上一个数, 这就是模型的结构。第二,我要能够真正的拿这个模型去解决问题,还得找一找这里边 w 和 b 应该取什么值啊?所以当我们的结构和这些参数具体的值都已经确定下来了,咱们这个模型就能可以拿来使用了。 所以现在一个简单的模型,我们举了个例子去体会了一下啊,这个模型就是把数据拿进来,可以得到输出的这样的一个映涉关系,而它呢确定应当包含两个方面, 第一呢,就是当你的数据进来以后,要经过怎样的运算步骤。第二呢,就是在这个运算步骤当中所涉及到的那些参数的取值。 当你的步骤以及参数的值都确定下来了,我们这个模型自然就算是找到了,就可以拿来去使用,去解决一些未知的数据,去把一些未知的数据丢给这样的模型,能够得到理想的输出了。 模型就是这样的一个有结构有参数值的东西,我们要确定一个模型,就是确定它的结构,也确定它的参数值。 当然了,咱们有很多啊,我们刚才用了个简单的线性的模型,而有很多的模型都会非常复杂,比如说大家可以看看这些模型对不对? 这是 transformer, 大家经常会关注,这是我们深度学习这一波热潮的推动的源头。 alex net 二零一二年的一个模型,这是另外一个模型,它们都是一个个的模型,我们看到的这个模型的结构图, 通过这个图我们能够看到这个模型里边用了哪些模块,这些模块是怎么一步一步搭起来的啊?怎么让数据进来就一步一步运算得到输出的?这就是这一个个模型结构所包含的信息。 所以呢,我想在这呢,我们先确定的是什么啊?弄清楚的是深度学习,大家如果要学啊,要用先弄清楚咱们用它来解决的是什么,目的就是找到你当前问题解决的那个相应的模型。 而一个模型的确定在我这里将它总结为这两个方面,第一就是模型的结构啊,第二呢是这个结构里边所有的参数值。 这两件事都确定下来,咱们这个模型就确定了,咱就可以拿它去用了,去解决问题了。而结构是什么呢?结构咱们看到的这一个个都是模型的结构图, 它所含盖的信息就是数据进来以后要经过怎样的一系列的运算,第一步是什么运算,第二步是什么运算,一直到输出都经过了怎样的运算的这个运算步骤,它就是模型的结构所对应含盖的信息。 你看到的 transformer 给你的这个结构图含盖的信息就是数据进来第一步,第二步,第三步都经过怎样的运算,最后得到输出。这个图 表示的就是这样的一个运算步骤。你看到的这个 alex net 也是输入进来的是一张图像从左到右,一步一步一步都做了怎样的运算,最后得到输出。这都给咱们表示的是这个模型的结构。 结构就是告诉数据进来要经过怎样的运算步骤,这个结结构的确定貌似很难啊。对呀, 所以咱们要弄清楚深度学习是怎么回事之后,然后呢?花很多的精力不就是在学这个结构里面的那些模块啊,一个一个大家觉得,呃,在某些问题里边比较有效的那些结构吗?对吧?那我们为什么要学呢?学过之后咱们就知道。哦,原来 这样的模块啊,这样的结构就就就能够这样的可解释性的去解决一些问题了啊,为什么我们就能够大概有些了解了, 然后呢?当我们解决自己的问题的时候,我们根据自己在之前对于深度学习这些模块的知识,咱们就可以去选啊,我现在要做一个图像的问题,那我就可以去选怎样的一些结构,比如说我选选卷积, 看看是不是合适,对不对?那我现在要处理的是一些呃,什么样的问题,对吧?我看看我选择什么样的结构,这不就是我们学的目的吗?对不对? 自学会被魔镜函数算法给迷惑。是的,那我为什么讲这些啊?第一啊,呃,因为我这边大多都是刚刚开始入门的同学,所以我会讲一些入门的知识。第二,我认为深度学习这块最麻烦的就在于入门这里, 那我带了这么多的学生,那我带着这些届的学生在学到这块的时候,也都会在入门这块用的时间比较久, 我们刚刚开始开设这个方向,就我们刚刚开始去讲这些内容的时候,学生大概用一个学期才真正的搞清楚。哦,原来我们学了那么多的算法,学的怎么样?实际上他是这样的一个学习过程, 所以我就想把这块跟大家真正的去弄清楚,这是也是结合我这些年的一些经验啊,也是我自己的学习过程怎么去做的好的。 但结构当中啊,每一个层呢,里边都涉及到很多的参数,刚才举了一个简单的例子,比如说我们现在呢,数据进来经过这样的运算,这个 w 是 参数,这个 b 是 参数, 我们能确定在这里做了一个乘法的运算,又做了个加法的运算,这是步骤,但这个步骤当中决定最后结果的还有这些参数要取什么值。 所以我们的结构只是告诉数据进来要经过怎样的运算,在每一层里面还都会涉及到大量的参数,所以这些参数的值也将决定模型的输出。所以一个模型的确定,第一把结构定下来,根据你的理解和经验,自己先去定 设计者来决定。第二呢,就来找这里边那么多的参数,每一个都应当取什么值了。当我们把这个参数值一个个的都找到了啊,都是现在理想的数值摆在了这些位置上,那么咱们这个模型就能够拿来去使用了, 那么这个结构确定下来了,里边有那么多的参数,对吧?我们现在一说模型很大,里边都有多少亿个参数,多少亿个 w 和 b 这些值,我怎么知道他们应该取值?为什么呢?怎么找这些参数的值呢?那就是训练过程来帮我们决定的了, 训练完了就说明我们的参数已经找好了,训练的过程就是在这里寻找参数的过程。那么现在我们总结一下其深度学习的本质就是设计者 根据经验来去选定一个模型的结构,然后通过训练帮我们不断地去调整参数,最终帮我们确定下来参数,那么结构和参数都有了,咱们深度学习这件事就可以结束了。 好啦,这里没有问题的话呢,那么我们再举个例子,看一看深度学习解决问题的步骤, 这个步骤,这个过程,我用一个简单的例子带大家去体会它中间的过程,但这个过程是在任何复杂任务里面都一样的,不管你现在啊是解决语言模型,还是要去做一些大家各个领域里面的具体的任务,其步骤都一致。好,我们来看 我们现在举还是我们深入学习入门的时候,大家经常用到这个例子,就是来识别图像当中是什么手写数字这件事。 好了,这件事是我现在要解决的任务,所以我最终要找到一个能够解决这样任务相应的模型。 这个模型呢,我就可以把我现在一个手写数字的图像丢给他,他就可以来识别图像当中是什么数字。这对背后啊,其实对应的就是一个图像分类, 这就是我现在要解决的任务。好了,这个任务我们看看解决它需要有几个步骤,还是那句话,这个步骤是在任何复杂任务,只要是深度学习,其步骤都是这样。我们来看, 第一,我要根据我现在的任务来选定一个结构。我现在是什么任务呢?识别图像当中是什么数字啊?其实呢,他不过就是一个图像的分类任务,所以既然是图像的分类任务,那我就选定一个卷积神经网络 构成作为我当前任务的模型结构,这是第一件事,根据我的知识经验和我对于当前任务的理解选定一个结构。 第二,我的结构已经选好了,一个模型的确定,一是结构,二是这个结构里面所有的参数取值结构我就已经定下来了啊,那么这里边那么多的参数,我要通过训练去找到,对不对? 好,别着急,训练,训练有个前提,就是你得现在准备好一些经验数据用来训练使用, 也就是你在训练的过程当中你去调整这些参数啊,为了能够最终完解决你的那些问题啊,识别图像当中的数字,那你怎么知道你现在找的参数是好不好?你怎么知道你现在变了一下的参数,你改了一次参数是比之前的参数会更好呢? 在这咱们得有一些经验数据作为标杆,我说清楚了吗?所以在第二步我们就准备一些经验数据,这就是咱们所说的训练级,这些数据就是用来让模型作为标杆去调整参数用的。 第二步啊,准备经验数据,它的作用就是让模型拿它当做标杆去调整参数 啊,也就是我们的训练过程啊,拿经验数据去进行模型的训练。那么选择什么样的数据作为我的任务的经验数据呢?你看,我现在就是要去得到一个能够识别手写数字的模型, 那我在这就准备若干手写数字的图像啊,你要完成之后让他去解决什么任务,你在这就让他学什么东西,所以我在这就有了这样的一些图像作为我在这里的经验数据。 那么这个数据大家有时候会问该有多少呢?在这里自然是越多越好啊,但也有些时候我们也限于各种情况,可能数据不够多,所以你要相应的调整你的模型,那么本身啊,它一定是越多越好的。 好的,准备好我们的经验数据,这是第二步,所以第三步就是模型的训练 啊。再说一下其过程,模型的训练,这个训练过程的本质就是在去找这个里边所有的参数的最优的值,那这个训练的过程就是一步一步的优化参数的过程。 好了,这是我们现在完成任务的第三步就是模型的训练好,那训练完了,也就是我认为我现在参数都已经找好了,那到底好不好呢?还得有第四步来进行验证 啊。第四步就是在你认为已经调整好的参数的基础之上,咱们找一些模型之前没有见过的数据,让模型来试试看, 是这个,这个怎么样,是吧?是不是有真正的这个能力啊?是骡子是马,我们拉拉出来遛一遛,我把一些数据线就丢给他,看看他的情况如何。这就是我们第四步验证, 其目的就是让模型在一些没有见过的数据上预测一下,看看模型的性能。 好了一二三四。这四步就是我们解决不管是简单的问题还是复杂的问题,只要是用深度学习,其步骤都是这四步。然后呢,我们就把训练过程给大家再展开来看一看啊。在刚才四步里边,我们现在把训练过程具体展开一起来看一看。 还是刚才的例子,我们准备好了经验数据,让模型训练去使用,我们也有当前模型的结构,已经先确定了下来,那么我们来看看训练过程里边具体是怎样的 好,还是那句话,我们先弄清楚咱们训练的本质啊,训练在这一步,其本质就是把你现在模型结构里边那些参数一步一步去进行调优呢 啊,你第一步训练就是做第一步调优,训练完了就说明你的调优完了,他就对标的是咱们这些参数的调优过程 好了,那我们来看看这个参数的调优啊,要经过怎样的步骤来举刚才那个例子里面来看啊, 现在我的模型的结构不是我已经给它确定下来了吗?我用了 alex net, 对 吧?好,那么这个里边呢,我先把所有的参数都给它一个随机数,作为它的出使值,那么现在的结构是确定的,里边所有的参数也都有值了啊,甭管好不好,反正它有, 它有了结构,又有了里边所有的参数的现在的取值。那我丢给模型一个输入的数据,它是不是就能够得到现在的输出了?它就能够把这个数据放到我的模型里边一步一步一步去运算得到最终的输出了,这是第一步啊,我们那在这呢训练过程里边,第一, 先让一个数据丢给模型,然后呢让模型在现在随机数作为参数的这个情况下去计算,得到输出。我们把这个过程就叫做了前向传播,大家有可能有听过这个词,对不对? 好,这就是前向传播,第一步没完啊,最终的目的是完成参数的更新啊,这,这还没完呢啊,好,前向波得到了模型的现在的输出之后呢, 我们把模型现在的输出和本身啊,你输入进来的这张图像它正确的那个标签,它应该是三,对不对?而我们现在模型的输出预测的是二,所以这个二和三之间呢,就有一个差距, 这个差距大小是多少就叫做损失值了,计算差距的方法就叫做损失函数,所以在这第二我们去计算出来当前的损失值 好了,再往下就接近尾声了啊,我们找到了模型现在的输出和我们期待的正确答案之间的差值, 我们让我们的参数变一下,而也能够判断出来我们的参数是往好变还是往坏变了。怎么叫更好呢?只要你让这个损失值变得更小了,那你新的参数一定是比之前的参数更狠,对不对? 所以第三步我们就往能让损失降低啊,让损失变小的方向去更新参数。 到这里我们的参数就完成了次更新了,由 w 零比零变成了 w 一 比一。 好了,这三步我们就由随机数的参数值完成一次更新。那么继续在刚才已经更新过的参数的基础之上啊, w 和 b 一 啊, w 一 和 b 一 刚才 蹭更新过的这些参数我拿过来,然后呢,我再找一个样本丢给我现在的模型,此时模型的参数是进行过一次更新的。 好了,那么模型依旧会得到现在的输出。这是第一步,前向传播依旧来算算现在的输出的损失,依旧往现在能让损失降低的方向再次更新我们参数,我给他记作 w 二 和 b 二,你看此时参数又进行了第二次更新了,好了,就这样,我们把这三步总结一下,然后给他打个包,放到放循环里边去,咱们不就让参数一步一步一步的去进行更新了吗?直到你认为达到了你,嗯,你达到了,达了你的标,你就可以让这个放循环结束了, 这就是参数的更新过程,也就是我们的模型的训练过程啦。同学们,这里呢,我们就把我们的训练过程其核心步骤就说完了啊,在这里呢,我们就会按照我们现在的这个步骤,把它用代码去相应实现,你看他已经看到了放循环了,对不对? 而啊,在具体去完成这件事的时候,我们最多用到的是小批量批斗下降,也跟大家说一说,这样的话,大家再回到你的代码里面去,你就会看的更清楚了。 好,大家想听听小批量梯度下降的话,来回复一个六六六啊,大家经常会听到小批量梯度下降是什么意思呢?就比如说我刚才举的例子是一个样本丢进来,对应一次个参数的一次参数的更新,而大多情况下,我们真正的不是一次只让模型看一个样本,而是让他看一个批量,这就是我们所说的 batch size, batch size, 一个 batch, 一个 batch 啊,一个批量,那个大小为多少呢?我举个例子啊,比如说就三十二,好,也就是说我每次在这儿放的不是一张图像,是三十二张图像。那么现在你可能有疑惑,那这过程还是这样吗?还是这样,我刚才不说了吗?这个过程其实都一样, 三十二个样本一起进来,一起潜在传播得到它的输出,那就有三十二个输出呗,一起去算损失,那不就有三十二个损失的分量吗? 再把这三十二个损失的分量整合到一块儿,能让总的损失平均的损失下降的方向去进行一次参数的更新。所以在此时我们是三十二张图像对应了一次参数的更新的,这个三十二就是咱们所说的批量大小 batch size 了, 这三十二个样本就是我们说的说的一个批量。好,那么如果我现在啊,我这个训练集当中啊,我们用的这其实就是啊,有六万个样本啊,六万个样本,我三十二个一组,三十二个一组,让他来看,我们画成一个图这样子,这是我总共的六万个样本, 六万个样本,我其中的三十二个一组,三十二个一组,三十二个一组,我就给他拆,拆了若干组,每一次呢我就拿一组过来,那么就会对应有一次参数的更新,比如说我最初的时候,参数是 w 零啊,我就由 w 零变成了 w 一, 这是第一组数据能够完成的事。 好,然后第二组数据过来的时候呢,就让参数由 w 一 变成了 w 二,大家看到了吗?同学们, 就这样,我们一个批量一个批量的去让模型看,每一个批量对背后都对应了一次参数的更新,那么最后呢,这整个六万个样本都看过了,咱们这个参数呢,就更新了不到两千次, 这六万个样本你都让模型看过一遍,相当于是我们读一本书,我们就读了一遍书,读百遍,对不? 后边大家都知道,所以呢,我们不会让他看一遍,因为他看的变数越多,他的理解会随着变数有变化,所以呢,我们再让他看第二遍,第三遍、第四遍,每看一遍,这六万个样本就是我们所说的一个 epoch, 所以 看几遍就是咱们那个 epoch 参数的取值的作用了。 然后再说刚才星辰说的 batch size 越大越好吗?大家来理解一下这个 batch size, 就是 说我让参数的一次更新是由多少个参数来决, 呃,多少个样本来决定的。我们举两个极端的例子,如果我每次就由一个样本来决定,你说我一个样本就会让参数做一次更新,那么如果我的样本的数据集里边有一些边边角角的特殊值啊,那我现在参数也要拿它的情况来去相应的做一次调整,对不对? 所以这样的话,我们容易学到一些边边角角的特殊情况,对不对?所以这样的话,我们容易学到一些边边角角的特殊情况,对不对?所以这样的话,我们容易学到一些边边角角的特殊情况,对不对?所以这样的话,我们容易学到一些边边角角的样本很大。 然后呢,让模型呃把这些六万个样本一起来看,最后对应的一个一次参数的更新。那么也就是说你这六万个样本里边有一些边边角角的问题,有一些比较核心的特征, 它在这里的权重都一样啊,都一样,所以容易去呃忽视掉一些特殊情况。所以到底批量大小为多少呢?不同的数据不一样,这属于超参数,我们可以通过对比实验来选择。 前天我的一个课程班里面,大家就在这块有一些实验,然后呢看我们当时的数据里面三批量大小为三十二,比六十四更好。好的, 这里我们就说完了训练过程,那我们回到刚才我们深度学习解决问题的步骤里边来看,我们说所有只要用深度学习,咱们去解决一个任务,其步骤都是这样,第一步先根据你的知识经验选定当前的模型结构。 第二呢准备你现在可以用来训练模型使用的经验数据。第三步就可以开始训练了,其训练的本质就是一步一步的参数的更新过程,而这个更新过程咱们刚才也展开了,里边啊是前向传播求得损失,然后再往损失下降的方向去完成一次参数的更新。 第四步呢,当我的参数经过若干轮的轮的更新,我认为已经达标了。好,我们来试一试,验证一下,把一些模型在训练的时候没有见过的数据拿过来看一看模型当前的性能如何,这就是我们深度学习里边的四步,这就是我们在代码里边的四个代码段, 我,我刚才说让大家能够把代码看的更清楚,我现在也说了代码段,你去看啊,如果你用了你师哥师姐的这个训练过程的代码,你去看里边就是这四个代码段, 选定结构,确定你的模型结构,准备好你现在能够训练使用的数据集,然后就是训练过程,然后后面有个验证过程。训练过程这一块刚才我们已经说了小批量批的下降是怎样,我把这个代码也给大家说一说,你再去看你的代码可能会更清晰一些,首先在这里我们会有个负循环,就把每一个批量 啊拿过来,然后呢音当前我们的 data load。 好, 这个是什么呢?这个是我们的小批量数据加载器,帮我们去这六万个样本里边三十二,三十二帮我们去拿的啊,每一次放循环呢,他都会帮我们去按照顺序拿三十二个样本过来,这是我们拿到的那一个批量的样本,好进来固定的三步, 第一步前向传播,第二步,求得损失,第三步,去往损失下降的方向更新参数。好,这是我们放循环里边的三个部分, 那么这样我们就把六万个样本三十二个,三十二个拿给他,能够看完一遍了,这是这个放循环的作用,但我们这六万个样本不是只看一遍呀,所以外面还会有一个放循环, 这就是为什么你看到是两个放循环,外面这个放循环就看看我们这六万个样本要扫几遍,里边这个放循环能够确定我们每一个批量过来要做什么事情。这就是咱们训练过程当中的那个代码了,很清楚是不是?所以你去看啊,咱们都是这样啊,都是这样固定的。好了, 这是深度学习解决问题的步骤,我们就从整体的四步以及训练过程里面的三步啊,这样的就给大家拆开了,让大家能够把整个事情 搞的这个流程上面更清楚。那至于大家各种问题,你,你不过就是可能要学各种结构是怎样,这是一个结构的事,你的数据拿过来,你可能会做一些你在那里现在的数据的处理 啊,而这个训练其实大概大大家代码都差不多,都基本一样,这个后面就可以去验证了啊,验证部分啊,也跟大家来说一下, 怎么叫验证呢?这个验证你看还不是真正的拿模型去用,用之前我们得验证。所以呢,当我们手里有了一些经验数据的时候,一般我们会拆成两个部分啊,至少两个部分, 第一个部我们拿来训练使用,拿来调整模型的参数用好,训练过了,我们拿一些模型没有见过的那些过来,就是之前你已经拆出来留下来的那些过来在训练过的模型,这里看看他的预测情况怎么样, 这样的话,咱们就对于模型到底性能如何,更更更更更靠谱了。好了,我们这个步骤就说完了啊,之后就可以拿来用了, 再有自己手写的一些数字,我就拿过来丢给我们刚才训练好的模型,让他来帮我们去预测里面是什么数字了。下面呢,咱们就可以具体来看一下损失函数, 你现在看过训练过程,你已经知道损失函数应该在哪了,对不对?你也知道损失函数在这里的作用大概是什么了。来,这都是我们刚才内容里边能让大家清楚的,所以刚才内容很重要啊,虽然我经常在直播的时候说,虽然大家觉得他 有经验,有知识的同学就是有知识基础,同学会觉得他很简单,但他很重要啊。嗯,所以弄清楚了我们就好说。损失函数啊,梯度下降和几乎函数了,都在刚才的过程里边。好了,那我们就来看损失函数,首先 损失函数在刚才咱们的模型的构建,然后呢数据的准备,这是第一啊第二,然后呢?第三啊是训练过程,第四是验证过程,这是我们深度学习解决问题当中的四步, 在一二三四的哪一步里边有用到损失函数呢?来,刚才听到同学回答我三呐,对呀,在这里边我们不是往损失下降的方向,你得先有损失才能找他下降的方向,对不对?所以在这求得损失这一步,我们用到了损失函数 损失的意义和损失函数,我们现在具体来看啊,损失函数自然就是去计算损失的那个函数, 那么损失又是什么呢?损失就是在这里来体现我们现在的这些参数,让模型的输出和我们正确的答案期待的结果之间到底差的有多远? 这个差的距离的体现,这个差值就叫做损失值了,计算这个差值的过程就叫做损失函数。所以损失函数的两点作用, 表层来看,他是能够体现模型的输出和我们期待结果之间的差距的,找差距,这是他表层的作用,还有一个深层的作用, 深层的作用呢,就能够往能够给我们现在的参数更新去指明方向了,因为我们要往损失下降的方向去更新参数,因为你往损失下降的方向更新了参数,才说明我们现在更新的参数是比之前的参数让模型性能更好的, 对不对?所以函数损失函数的作用在这里,表层是找差距,而深层是指方向, 那么我们已经弄清楚损失函数的作用和意义了,现在咱们来说一说常见到的损失函数,对于我们刚才来识别图像当中是零到九的哪个数字,这其实就是一个十分类任务,零到九十个数字,我们来预测是哪一个十分类任务, 对于这样的十分类任务的话,我们啊分类任务我们一般用到的损失函数是交叉商,这个我们在这里不去展开,它是一个非常巧妙,能够体现当前分类任务的损失值的一个计算的方式,且它可导啊,这个我们一会会说梯度下降啊,且它可导 好了,这是交叉生,它是用来进行分类任务损失计算的损失函数最常用的啊。那另外呢,回归问题,什么是回归问题呢?我们刚才是让模型来预测零到九里边的哪个数字, 它所预测的这个值域是一个离散的空间,只有十个可选项。那比如我现在是想让模型来预测一个小孩的身高,这个身高呢?他的值域就是一个问题,就是我们所说的回归问题。 既然只是在连续的空间,我们经常用到的损失函数就是均方误差啊。我们来求模型现在对于小孩预测的身高和人家真正的身高之间的差值,再求个平方,将若干这样的样本的这个求的差值的平方,再求个均值, 就是均方误差了,这是我们最多见到的最多用到的损失函数啊。 而我们有一些复杂问题,比如说我现在是目标检测,我要来输出的是现在输入进来的这个图像里边有很多个物体, 每个物体我要找到它的位置和这个物体是什么类别,你看位置,它不就是个回归问题吗?类别它不就是个分类问题吗?所以很多复杂问题其实也是由回归和分类构成的 啊,所以你可以拆开看,它里边呢,很多其实有各个损失分量,那这些损失分量可能还会最终落到军方误差和交叉商上面去, 还有其他的啊,干呢或等等啊,这些复杂的损失函数,其意义都一样,来体现模型的输出和我们期待结果之间的差值, 然后它能够指明损失下降是往什么方向走,然后这个呃,构成的方式,它可能都是由一些损失分量构成的啊,我们在这里就不展开了,这就是损失函数。 那么下面呢,我们来说,在刚才我们完成深度学习任务里边啊,那固定四步,四步里边,第三步的训练,训练里边要找损失,往损失下降的方向去更新参数展开来看,就要说说梯度下降了,所以现在我们来说梯度下降是怎么回事? 梯度下降在我们深度学习里边哪用呢?训练过程当中用,训练的目的是干嘛呢?就是去对参数进行更新,所以现在我们再来啊,回顾一下参数的更新有怎样的步骤。梯度下降在这用到哪?为什么它有用?好,我们回顾一下啊, 现在呢,我有一个模型,模型的结构呢,我自己先确定下来了,然后这里边所有的参数呢,都由随机数构成,它的出式值,我现在用一个我准备好的训练集里面的样本丢给了模型,模型呢就能够得到现在的输出,这是第一前向传播 输出之后我来去计算它的损失,分类任务嘛,我用交叉商损失函数计算得到现在的损失,然后呢,我就可以找到损失,我就能够往损失下降的方向去找一组新的参数,我给它记为 w 一 和 b 一。 好了,到这里我们的参数就完成了一次更新, 此时我们先要由前向传播得到模型的输出,再找到模型现在的损失,然后我们要往损失降低的方向去更新参数,这些逻辑上都弄清楚的话,那么下面咱们就来看看这个向损失降低的方向去更新参数到底是什么样子的。 来,我们把一个损一个参数值,我们给他摆到这啊,假如说我现在把我模型里面的一个参数,我给他拿了过来,假如说这个参数最初的时候取值随机数嘛,他零到一之间比较多啊,比如说就在这了,好,取的值,取的值是在这啊,取的值,比如说在这零点五, 那么我用这个参数值,然后呢,构成了我的模型,拿个样本过来前向传播得到模型的输出,再计算得到模型现在的损失,假如说他的损失就是大概二点五左右吧。好,那也就是我找到了这样的一个点, 那么这个点啊,横坐标是我当前的参数取值,纵坐标是现在算出了损失值,所以现在呢,它是一个参数和损失值之间的关系图, 没问题,对不对?好,那我们继续来看啊,咱们的目的是完成参数更新,对不对?好了,那么现在呢,既然我们把这个损失值和当前参数之间的关系用这张图画出来了,那同学们告诉我, 此时我们的参数要往左调还是往右调会更好呢?那肯定往右调啊,因为你发现往右调这损失值不就变小了吗?那怎咱肯定是往损失值变小的地去更新参数,对不对?好,往右调,你是通过这张图看出来的, 如果真的把这个有这个图,那咱还调什么调?咱直接找这个点不就完了吗?关键就在于没有这个图啊,我们有的是什么?我们有的是当前参数是什么值,我们有的是这个参数,我们得到了怎样的损失值?我们只有这一个点呐,同学们,对不对? 所以这个事怎么办?我们怎么来确定能让损失下降的方向呢?此时梯度就出现了,哎,其实就是它的导数啊,它是什么意思呢?它是上升最大的方向,它是这个点上升最大的方向,这就是我们那个导数的数学意义。 ok, 那 如果我告诉你,我能够找到这个点上升最大的那个方向,你能不能找到更好的参数啊?能啊,你就把把这个上升最大方向给它前面取个负,这是梯度,我们就给它叫做 w 点 grade, 它就是我现在的红色的这个线,有方向,有大小,那我要去找它下降,不就给它前面加个符号吗? 对不对?那我还要更新我现在 w, 我 就让我的 w 这么算一下这个 w 一 啊,如果最开始是 w 零的话,那我这样不就是往 正确的方向去迈了一步吗?那我不就找到了我们现在实时观看上的右边这个方向的一个新的 w 值了吗?这点东西啊,很多时候都让大家在入门的时候特别头大啊,如果你现在还能够挺清楚的话,咱们,呃,给个自己一个激励啊,回个六六六也给我一点反馈啊。 好,同学们啊,这就是咱们参数更新的基本思想,在原来初使的参数值,然后去减他的 t 度值, 但是呢,这个 t 度值有的时候算的特别大,哎,这时候你就知道了,你这个 t 度值大小有什么关系了,如果这个 t 度值比较大,你看你倒是找到正确的方向,向右走, 负吗?向右走,但这值特别大,你一下迈到这来了,你看这损失不就变得更大了吗?所以呢,咱们通常不直接用损失值,而是在它前面呢去乘以一个很小很小的数,比如说啊, 这个数字就是咱们所叫做的学习率,所以我们会把一个学习率乘在这里, learning rate 去乘以它作为这一步大小的限制。 好了,此时你已经看到梯度下降的公式了,新的参数啊,第 t 加一时刻的参数值,就由第 t 个时刻的参数值减去学习率 乘以损失。对于他求得的这个梯度值,这就是梯度下降啊,所以不难,也不用很头大,知道它是怎么回事啊,从学习过程上,从它所出现的位置是目的上,我们去理解它就好说了。 好了,下面咱们来看激活函数这个概念,大家也在学习的时候肯定会听到过,对不对?那么激活函数有什么作用呢?来,咱们看例子啊,左边是我们刚才看到的那个例子,我们说如果在这个问题里边,我要找个模型,我直接找一条线就好了, 那一条线就是我们所说的现象模型,一般呢,我们可以通过若干的乘和加来表示一条线, 但你这条线能解决什么事?你也就判断一下你,你要不就做分类啊,这个点是在这个线的上面还是下面,我们可以做个二分类,要么呢?你就是来做一个回归问题啊,我现在输入了一个值,你来预测一下,根据这条线公式呢,我们来预测一下它的 y 应该是多少,你不会就能做这俩事很简单,但如果我有一个复杂问题呢? 这个复杂问题是什么呢?就比如说,就比如说什么十分类,哈哈,其实算相对复杂一点,对吧? 啊?等等啊,如果我们有一个相对复杂一点的问题,咱们用线肯定没法解决,你再叠更多层的加和乘都没法解决,因为他们对应的都是线,二维平面里的是线,三维平面里,呃,三维的里边他就是个平面,他都是直线或直的平面, 他不能够拟合所有的复杂问题,所以怎么办?咱们这个模型的结构在运行的过程当中就不能只依赖成和加,还得有一些能够完成非限性转换的函数作用进来。比如说我们把这一条线,我们给他压缩成,给他转成这样, 这就是一条,不是一条直线了,那么这个过程呢,就可以通过一个非限性转换的函数去给他完成。 现在一看到一个全连接的网络啊,如果在这都只是加和乘的话,其实算来算去还是一个平面啊。但是呢,我们在这个运算的过程当中给它加上一些非现金转化的函数,这里加了 ray 路, ray 路是这样的函数, 好,这是我们现在的输入啊,这是我们的输出路由 x, 它是这样的,当我们的输入大于零的时候,它将原样输出。输入是一,输出是一,输入是二,输出是二啊,大于零原样输出,当它的输入小于零的时候呢,将它的输出转为零, 这不就是一个非限性,一个折线吗?非限性的函数,路由是一个非限性转换的函数,经常用作我们在图像处理过程当中的激活函数。 然后还有一类呢,就是 s 型,将直线转成这样的 s 型,那么这个呢,是能够将这个 s 型啊,上面呢,这儿是一,下面呢,这是零,压缩到零到一之间,叫做 logistic 逻辑词典函数,也就是大家经常说的 sigmoid 压缩到零到一之间的这个非限性转换的函数, 那么它 h 呢?是压缩到一到负一之间,它也是 s 型啊,这是一些 s 型,它们都是非限量转换函数。刚才我们见到了 ray, 它是这样的,还跟它很接近的,有个叫做 j 路,这是一经常用在大语言模型里面的, 它们都是可以完成非限量转换的函数。好,激活函数,其本质就是在我们计算过程当中加一些非限量转换的函数,这就是我们今天的内容。

六个月带你吃透 ai 大 模型面试精选题,今天是解释拉玛的 rms norm 和 y t l u 激活函数改进。面试的时候被问到拉玛的 rms norm 跟,所以给激活函数改进这个问题 我们一般怎么来回答?首先给大家说一下答题思路,更多 ai 大 模型学习资料可点击主页粉丝群自行领取。我们可以从以下几个维度 去做一个拆解的一个这个回答。我首先是从知识这一块,那我们要去讲这个 rms normal 它的一个原理是什么?你这个刷移它的一个机制是怎么样的?那他们做一些改进的一个背景是怎么样? 那我们可以结合一些项目去做一些关联性的一些项目,比如说要做一些对话系统的一些项目,比如说要做一些代码生成的项目。那我们可以去做一些技术对比,比如说像 计算的一个复杂度,包括这个参数的一个效,包括它的一个数值的一个稳定性,大家可以从这三个角度上面去做一些技术对比的一个回答。首先我们来说一下这个知识点拆解这一块, 那么这个 m s normal 的 核心原理,我们可以提一下这个公式推导与 layer normal 的 一个差异,包括计算效率的一个优化,包括这个 slider 的 优化,这个激活函数我们可以从这个数学形式、门控机制、参数效率这块去做个分析。 那么我们还可以聊一些这个拉玛改进的一些背景,比如说像 transform 架构,一些瓶颈训练稳定性的一个需求, 计算资源的一个约束,那么大家可以尽量的去结合自身的一个项目去做一些关联性的一个回答。比如说机器翻译项目,我们可以从这个长文本处理中的一个数值稳定性挑战这一块可以做一个梳理。然后对话系统开发这一块可以从多人 交互式的一个梯度爆炸问题去做一个分析,包括这个代码生成任务,可以从模型收敛、速度优化去做一个需求的一个梳理后,第三块就技术对比矩阵 或这个指标这一块计算复杂度啊,我们可以从一些,比如说像 rms norm, 它不同维度的一个计算复杂度,像对比这个 layer norm, trig, 还有这个 r, e, l, u, g, l, u 这三种技术 技术的对比,我们可以去做一个针对性的分析。参数效率这一块像有,那它是没有额外的一个参数的,那像这个 slug, 它的参数量可以减少百分之五十,那从数值稳定性上来,这个 rims norm 的 话,它具有更优的一个 t 度传播。 而这个 layer norm 的 话,它是依赖于均差和这个均值方差计算,所以底的话它是依赖于内置门控的一个机制。而而 elu 或者 glu 的 话,它是比较容易出现 t 度消失的一个情况。要从实际提升速度来看的话, rms norm 的 话,它可以提升百分之三十到百分之五十。 rayon norm 呢,它可以有这么一个精准。还有这个 sugi, 它是有百分之二十到三十的这么一个提升的,而而 leo u 的 话,它就没有显著的一个提升了。那我从项目案例这里我给大家举两个项目案例,第一个呢是这个客服系统, 我们可以向背景挑战上,从这个上面来说,我们对应的解决方案什么?以及实施的一个效果是怎么样的?风控系统这一款大家可以去聊这个背景挑战和解决方案,包括它的一个实施效果是怎么样的。案例就是跨境电商智能客服系,它的背景可以去处理多语言客户咨询, 需要去支持阿拉伯语、俄语等复杂的文本。他的挑战比如说像阿拉伯语变音符号导致这个人 bedding 层的一个波动, 长尾问题引发的一个梯度爆炸,以及多语言混合输入导致的一些这个表征对齐。还有解决方式,我们可以去从几个维度去说。像 rms 分 成应用的话,它可以在 betting 层去添加 rms normal 层,以及在 cross attention 模块中使用 layer normal。 通过超参数这个动态调节归一化强度酸,那就是通过门控优化这一块去做的,在 f f n 层去替换催给的一个结构,采用动态路由机制去调控门控系数,引入参数共享策略去减少龙鱼的一个计算实时效果。这一款它可以在阿拉伯语模型上面动值去提设, 提升了百分之十二点七,训练崩溃次数的话减少百分之六十三,多语言混合任务响应速度的话提升了百分之四十一。案例二,在金融风控文本分类系统这一款它的一个背景去处理年报、 审计报告等结构化的一些文本挑战,专业术语分布不均导致的一个表征偏移,常文本续列的一个梯度弥散问题, 以及多分类任务的一个类别不平衡解决方案。比如说通过 rms normal 改进设计双归一化的这么一个结构,也就是 rms null 加 group null, 引入自适应缩放因子, 构建动态掩码机制去处理一些敏感信息。而 swiggle 它的一个增强就是使用参数化的这么一个 swiggle 啊,或者像叫 p swiggle, 引入残差跳跃连接 实施特征及注意力机制,它的一个实施效果就是 f 一 score 提升了九点二个百分点,训练时间缩短百分之三十七,风险误判率的话降低了百分之二十八。那我们可以有一些视力回答。

今天比较 sigma 的 激活函数和 solu 激活函数,现在打个比方,假如说你是一个激活函数,有两份工作可以做,一份是门口的保安大爷,一份是公司主管手下的大厂职员。 先说保安这份工作,你站在炸炸鸡旁边,你的职责是非常简单的回答一个问题,到底这个门是开不开,放不放行,放多少? 那么你输出的就必须是一个通行的概率,范围是在零到一之间的,所以这个时候你就是需要用 sigma 的 这个激活函数。 假如说外面有个人来了,有个 x 来了,这个 x 很 大很正,那你就输出,那你就给他必必须过,然后输出一个零点九九类似的分数。 但假如说外面来的人很富,这个 x 是 很小的,那你就给他几乎不过,比如说给他一个零点零零零一这个分数, 这就是为什么二分类输出层 logit 要过一遍 sigma 的 函数,因为模型最后要的是要不要,是不是 有还是没有?你作为保安大爷,你必须给一个零到一之间的答案,你只负责开门还是关门,这个门开多大,开的概率是多少? 所以这就是 sigma 函数的特点,它的范围是零到一之间,把它把输入的 x 全部会呃划到这个范围里面,然后全部是大于零的,它没办法把 x 划到大于一的这个范围, 它相当于是一个二分类给一个零到一之间的概率或者是答案。好,现在是第二份工作,现在你进大厂了,当职员了, 那你的任务就不再是给人放门了,你的任务就是要在公司内部搬运信息,处理业务,还有传递信号,那么这个时候如果你还用 sigma 的 当激活的话,那就非常尴尬了,因为 sigma 的 一个问题是, 输入的 x 不 管是多大输出,永远会被压扁到零到一之间。那现在假如说你用 sigma, 领导给你一个一百千克的任务,然后你回一句,啊,不行不行,领导,对不起,我只只能输出一千克,那相当于这里面的信息,你你都给 把它扔掉了。而且很多信息它是有正有负的,正的可能表示是加强,负的可能表示是抑制或者是反向修复。但是如果是 sigma 的 话,呃,不管是正的还是负的,你直接会把 整个负方向给干没了,就小于零,小 x, 如果小于零的话,那你输出的一定是大于零的负方向被你给干没了。 这在公司内部传递信息来说,就相当于是把所有文件都压缩成了一个一 kb 的 缩略图,然后只能看得见轮廓,但是信息全没了, 那这个时候就不行了。所以大厂职员更适合用写录或者是 switch 这种激活函数,这个激活函数就相当于是一个员工加一个主管在审批,然后 sigma x 就是 这个主管,然后 x 就是 员工, 也就说 x 是 你本来要提交的工作量,这个工作量很可能可能很大,也可能是负的,要纠错, 那 sigma 的 x 就是 主管给你的通过比例,这个是在零到一之间的,当 x 很 大很正的时候,主管觉得,哎,靠谱。 sigma 的 x 给他给一,给他给约等于一, 那相当于你几乎是全额提交了这个 x, 你 的输出 x 乘以 sigma 的 x 就是 约等于 x 的, 那么这个时候呃传输效率也比较高, 那如果 x 是 负的话,哎,主管觉得,哎,这不靠谱。 sigma 的 x 把它设成约等于零,那么这个时候 你提交的就很少,然后输出的也是接近于零的,因为 x 乘以 sigma x, 然后这个 sigma x 接近于零的话,那么他们的成绩也是接近于零的,相当于这像像是一个噪声,然后主管觉得不靠谱,相当于这个噪声就被抑制了。 那么如果 x 是 有点负的,但是也没有特别离谱,那这个主管也不会一刀切,然后你还他可能留一点点反向修正的力度,这个这个时候 sigma 的 x 他 不是接近于零的,他是有一个负值的, 然后 x 乘以 cy 还是可以传输下去的,比如说啊,六乘以个负零点三,六乘以个负零点四,那这个时候其实还是能留一点点的反向修正的力度的,它它不会就是像 x 很 富的时候造成,是完全被抑制的。所以说写路他的职责就相当于是大厂里当员工,他要在内部传递和处理信息,他要既保留一定的浮值,既 既保留一定的 x, 又要有一个类似于门控的感觉,这个 x 它输出多少有一个门控。 然后如果是 sigma 的 话,就是在门口当保安,输出的相当于是一个概率,从零到一,到底是 过还是不过有还是没有,是还是不是要做决策二分类。所以说如果你的任务是门口的东西,能不能进就用 sigma 的。 如果说是,呃公司里要干多少活,怎么干,怎么传出信息,那就用 si 路或者是 switch。

欢迎大家回到索斯大模型的第十七集,这节课我们来聊聊音频 transformer ast, 我 们要构建原声多模态模型。首先在聊音频 transform 之前呢,我们先回顾复列定律,复列定律说的是任何周期性的波形都可以表示成不同频率的正弦波和余弦波的叠加。 哎,负极极数呢?也就是这个公式, a 零呢,是个常数,然后从 n 等于一到正无穷求和,然后 an 乘上 n, omega t, 然后 b n 乘上三 n, omega t, ok, 这样呢,我们就可以表示成任意的这种 f t 周期函数。 ok, 由欧拉公式呢,我们又可以把负极数写成,写成这个样子, 其实它要说明一件事情是什么呢?就是 c, n, 对 吧?是一个十轴上的数字,旋转了 n, omega t 这个角度之后,它在这个位置负平面上,这个是十轴,这个叫 omega 虚轴,对吧?然后任意都可以表示成这么一个项链,然后他几个项链放在一起之后,可以累加起来,对吧?这个一个平行四边形法则累加起来,他就长这个样子。如果两个项链就累累加出来这个波,那这个周期它就在在某一时刻,它就是一个这个。呃 啊,副平面上的一个向量,这东西我们可以取取它的模作为正负,可以取它模的平方作为功率去后续使用。好的,有这个认识之后,我们理解起来也不复杂啊。首先我们要知道,就是啊,音频信号它是一段连续的信号,我们必须先经过采样,比方说常见的采样是四十四十四点一千赫兹,对吧?我们把它采样成这个很多很多个采样点 啊, n 每增加一呢,就代表时间过去了零点零二秒。好的啊,我拆解下来。音频 transformer 呢,也基本上分为核心的四步骤啊,第一步,我们分出来的每个小样之后啊,我们要对它呈上一个脉冲信号,使它这个啊,就是 切分,切分成一个个小样,取的是二十三点二二毫秒。切分之后的语音信号。小段呢,在短期内,我们要把它看成一个周期函数,我们假设在这个周期这么一个小段内啊,他是频率的组成是不变的。当然我们如果贸然的切,像这里给他贸然的切两刀, 给他这样切两刀。哎,你是不是可以很明显看到他这个左右之间是有断层的,所以我们需要给他加一个窗操作。常见的窗呢,是用一个左右之间是有断层的,所以我们需要给他加一个周边,他变得更加平滑一些。我们来看一下这个公式, w, n 呢,是不是零点五四减掉零点四六口算二派, n 除以 m 减一啊, m 减一分之二派 n 呢,它能保证满足它能便利到零到二派的完整范围啊,这样就能确保一整个完整的周期。 ok, 这样的话,我们就成功把这个每切割成来的每个每个小段做成了一个周期函数,这样我们就可以用复列定律去进行操作。 ok, n 为参考点的,所以常见数值,比方说零到一零二三, m 是 窗口宽度。常见数值,比方说一零二四,因为它是二十四方,计算起来会特别的快,然后它的图形就长这个样子,这算是一个经验公式,它求求起来会比较便捷。 ok, 这个东西呢,我们就把它切分出来的每个片段,我们把它叫做帧,假设我们切到了 m 个帧,这个 m 就是 第几个帧的意思。 像这个图里面呢,采用点就是从 n 等于零到五十,哎, m 呢,就是总共就是 m 五十一个。接下来我们就要对刚才切分的每个小样,哎,就是每个帧进行一个这个复反时复列变换。 m 呢,在这边表示第几个片段?如 m 等于零,表示第一个片段。我们刚才呢,比方说切出来了七百二十个片段,对吧?然后呢, m 每个 m 都是代表二十二点三二毫秒啊,那七百二十乘二十二点三二,差不多就等于十六点几 十六秒左右的这个音频长度。 ok, 那 我们取某一个表示第几个片段好。角频率呢?就是我们等会要用来擦去试尝试,哎,如果这个角频率是相干的话,那这个后面这一串的值会非常大,如果是相消的话,他会特别负,如果没什么关系的话,那他就会基本上归零。哎,这样的话就能去算出来 w, 这个 omega 呢,出现在这个地方,它是一个变量, w 呢是刚刚提到的汉明窗函数,哎,汉明窗函数,然后里面这个东西呢,表示它放在哪个范围,放在哪个范围就表示我现在要处理这一段,然后其他片段我们不看,就这个意思, 为什么里面是 n 减 m, r 呢? r 呢?它里面是表示滑动的不长,我们这边取四百四十一个点啊为举例,比方说就是十毫秒为一个一次滑动不长,哎,我们要逐渐滑动,可以看一下这个图,这个黄色的呢, 这个黄色呢表示片段,然后这个 r 呢,就表示不长 m 是 不是二十二点三二毫秒, r 是 十毫秒,比方说这个样子,那涂上这个绿色就是 啊,这个四四一。然后大家可能好奇,就是具体这个形式 n 为什么是 n 减 r 啊?因为 f 减 a 呢,表示向了 n 函数向右移动 a 个单位之后得到的东西,所以在这里面的话,我们从原来的之前是不是 w n 呢?就之前是 w n, 现在我们变成了,就是要变成 n 减 r, 就是 向右移动 m r 个单位啊, 所以 m 等于零的时候,就表示窗函数在 w n 的 位置啊。照住开头 m 等于一的时候,就表示 w n 减 r, 向右平移 r 单位,表示照住向右平移 r 单位之后的这个片段后面就是负极极数的顶点部分了啊。 x n 就 表示当前材料频率下的这个正负, ok, 然后 e 的 负 j omega n 次方呢,就是就能让它向负平面上 旋转,顺时针旋转这个 omega n 角度 s m r, 它就表示与 f t 就是 原周期函数的相干性水平啊,当然是在 m 固定的 m 和固定的 omega 下就相干性水平 ok, 那 给它取魔长 a, m r 就是 相,代表正负或者电压 u 啊, 如果给它取魔长的平方哎,那它就代表能量或者功率,我们把它叫做 p, 括号 m omega, ok, 好 的啊,那现在我们得到了一个就是 p, 就是 这个东西 pm omega 这个东西。好,那我们它这个东西 跟人类的对声音的感受其实不完全对应,比方说一百赫兹和两百赫兹,我们人听下来非常非常敏感,但是一万 赫兹和一万零一百赫兹人听下来几乎是没有任何区别的。哎,我们就要通过一个美耳刻度映射,哎,让我,让我们这个人耳这个频率限性化,哎,它具体怎么操作呢? ok, 我 们要这边讲这个美耳刻度映射,把这个 pm omega 代表每一个某个片段的这个角频率,某个角频率下的这个啊能量水平,所以我们要把它写成一个横向量,就是取不同的横向量,欧米伽一, 欧米伽二,然后点点点取到欧米伽 f 为止,这 f 的 横向量去呈现一个 h i, 这个 h i 叫做每尔频率变换矩阵,哎,它具体做了一件什么事呢?大家简单看一下就行了,它是把一个这个横向量,就是啊,一行成 f 列的这个横向量,对吧? 变成了这个 f, 就是 一行乘八十列,我们取出 f, 它可能有一千多多个,对吧?但人类可能只对其中的八十个敏感,我们只取其中的八十个作为核心指标,其他的我们直接忽略不计。 ok, 那 具体怎么变换呢?大家简单看一下这个形式就行了,它是一个非限性的变换。 ok, 那 我们这个得到的这个最后这个好,这个这个标量,它就是在 m 这个帧下第一个每尔频段的总能量,有了这东西之后,我们就可以构建这个阴能矩阵, m 每尔阴能矩阵,哎,这个东西就包含了这个音频信息。 ok, 它是长什么样呢?它是 t 行乘八十列, 这个 t 是 什么意思呢? t 表示啊,就是你切分的片段长度,本来我们说的是二十二点三二毫秒嘛,对吧?你这个 t 啊,这个算小 t 吧,小 t 就是 这个音频的总长度,比方说就是十六秒左右,最后算下大概是七百二, 七百二十个这个片段,这个 t 在 这也就是七百二,我们就取这十六秒为例,比较方便后面去计算。我们得到了音频音能矩阵 m, 它的每一行呢,都表示某一个片段的代表的所有音频信息。 ok, 好,那我们现在接下来要进行一个卷积扫描操作。哎,我们定义这一个卷积和 w j, 它的尺寸是十六乘八十八十,是不是就跟我们列是重合?它也就代表每次都把所有列给取取掉,然后它总共定义大概五百一十二个这样的卷积和分别去 关注某一个方面,就是音频的某一方面,这个有点像多头,对不对? ok, 其次他要设定一个不长 s, 表示这个卷积和每次移动距离。 ok, 那 卷积套在这个上面,这个七百二十乘八十的这个阴能矩阵,它是怎么操作呢?然后这样子套一下,它是每个位置,它不都有个 w 吗? w 对 应相乘之后再加起来,哎,它就得到了某一次的这个 啊,这个 v i j 这个音频序列,这个东西啊,一个标量 v i j 音频序列, ok, 它能移动多少次?我们可以算一下总行数是不是七百二,减掉一次十六,因为初十就在十六,对吧?除以一个二,然后再加个一,这样就得到这个移动的次数,移动次数也就是我们获得的 v i j 的 列数。 哎,我们可以好多好多列,他,他会每次向下移动两格,他每次有十四个是重叠的,每次向下移动两个,移动,移动,移动,移动,直到这个到七百二为止。我们算下来之后,每个卷积核在 m 矩阵上重叠地方,哎,相乘再求和,得到 v i g, 每个卷积核移动完得到,呃,就是三百五十三乘一这个列向量, 那总共五百一十二个卷积核,他们关注这个音频的内容的不同方面,哎,我们移动完就得到这个,哎,给列五百一十二个列向量,然后给他这个动向拼接起来,给他这样子拼起来是不是得到这个音频特征矩阵 z 啊?哎,得到这个三百五十三乘五百一十二的这个音频特征矩阵, ok, 哎,我们只是取了十六秒对不对?实际的音频可能长达一个小时,三千六百秒这么长,哎,就三百五十三,显然是太大的,所以我们要进行一次这个 attention 压缩,这跟上次是一模一样的,还是一个可以学习的 q 论的矩阵, ok, 得到这个东西后续的操作跟跟那个词嵌入是没有任何区别的, ok, 然后也是一模一样的牵伸压缩,得到 x compressed, ok, 然后进行这个线型投影,只不过它维度数稍微不同一样。然后横向拼接,把上面五百一十二行的图幅向量放在这边,然后六十四行的六十四行的这个音频向量 拼到一起,这样就得到最后去进行注入未知编码的这个五百七十六乘四百四千零七十六的矩阵, ok, 所以 总结下来也就是七步走,基本上也就完成了这个音频嵌入。

今天用一个西瓜的例子,带大家把普通的 f f n 算一遍,就是 f f n 就是 transformer 那 个块里的前馈神经网络,然后 feedforward network, 缩写叫 f f n, 它的计算其实蛮简单的,一个就是升维,然后激活,然后降维,但是中间有一些计算的步骤一遍,首先我们拿一个西瓜, 这个西瓜我们给这个西瓜五个特征,颜色,敲起来,声音、手感刮齐刮地, 就是给他这五个特征,然后我们现在打个分,这就是啊,这个 x 就是 这五个特征的打分, 那么我们把它写成一个向量,可以看到这个向量它里面就有五个数,我们可以把这个 x 当做 f f n 的 输入,现在我们要把这个西瓜,也就是说这个西瓜的特征输入到 f f n 网络里面。首先第一步先要升维,先来理解一下什么叫升维,比如说这个 x 现在是数是五维的,是五乘一,或者是一乘五,就是他是一个五维的向量,那么假如说现在给个 y 八乘一的向量,八维的向量,那么如果是从 x 到 y 的 话,就是升为, 然后如果是从 y 到 x 的 话,就是降为,那么来看一下他怎么算,他其实就是一个乘法的运算。假如说现在有一个 w, 然后 w 乘以, x 是 一个 y, 那么我们来看一下这个 w 应该是什么维度。再来说现在 x 是 一个函数量的话,那么 x 就是 一乘五, 呃,不对,不对,我们不能让 x 是 一乘五,因为 w w 应该是一个几乘五的系数, w, 因为 y 是 八,然后 x 是 五, w 应该是一个 八乘五的矩阵,这样的话八乘五乘五乘一就等于八乘一,哎,就刚好它就是 y 向量的维度了。然后也就是说啊, x 要把它写成 五乘一,一个变向量, x 乘以一个八乘五的矩阵,那么它就可以升为到 y, 如果 y 乘一个,比如说五乘八的矩阵,那么它就又可以降为降为到 x 的 维度里。那么现在我们定义一个 w up, 然后现在这里是五乘八,我把它写成,呃 w up 转至 t 吧, 然后假如说它的转至是五乘八,那 w 就是 八乘五,然后我们定义了一个升维的矩阵,然后呃,现在做一个这样的运算,就是 w up 乘以一个 x, 然后再加一个 b, 然后这个 b 就是 一个比较普通的上下平移,这就是 f f n 网络的第一步,升维。用 w up 做投影,把五维的特征加加工到八维的特征, 那么我们看从五维特征,从从五维特征到八维特征是什么意思?比如说五维特征,这里可能是一些比较明显的比较粗的指标,就是颜色呀,声音、手感。那么假如说它细化成八维了,那它可能是一个 由前五维指标组成的更细化的组组合指标,比如说甜度、成熟度、水分这些。现在只是举一个例子比较的比,举一个比较形象的例子,真实的模型,它的语义它是学出来的, 然后在这里我们为了生动一点,所以我给他定义了这八个特征,这样的话我们就可以算出来一个 z, 它的计算是矩阵的计算,然后这里我们就不详细代大家算了,我可以算一个 z, 一 算一个,它的 d 为 z 一 w, 这里是零点五 乘以一个右边的 x, x 是 一啊,我把 x 抄到这里, x 等于 零点五,乘一个一,加上一个负,零点二,乘一个负零点五,然后再加上一个这个负零点二在这里,然后负零点五在这里再加上一个 啊,零点四乘一个二,零点四在这里,然后二在这里再加上一个零,然后再加上一个不,零点三,乘一个负一,就是再加上零点三,加一个 b 一, 也就说加一个零点一,加一个这个,然后那么 z 一, 它就等于 一点九五,那么啊,以此类推,我们可以算出从 z 一 到 z 八,然后我们直接看一下 z 的 结果, z 的 结果就在这里。 这就是第一步,把它投影到一个更高维的特征里面去,然后我们得到了这这八项特征,也就是说投投影到的这个更高维的特征是 比之前那个五维的特征要更复杂的。他不是说每一个特征就是相互独立的,也不是说这些这八个特征和前五个特征就没有任何关系,这八个特征反而他应该是前五个特征的 间性组合,他反而就是,比如甜度,这个甜度有可能是由颜色呀、声音呀啊、瓜蒂呀连起来,他,呃,表达的,所以说啊,这八个特征就是更复杂、更抽象化的特征, 所以要升为然后第二步,第二步就是限,呃,给它加非限性的函数,我们用 sum, 因为我们上节课讲了,假如说你在 transform 块里,你是要传递信息的,是要把信息传递下去的,你就不能,你就不能像那个像 sigma 的 一样直接是零到一,嗯,你必须是,你必须是 x 乘以个 sigma 的, 然后这个 sigma 的 像就像一个门一样, 就像一个门控或者是主管。然后这个 x 就是 传递的信息,这两个相乘就是传递下去的总信息。然后相当于我们现在把这个 x, 把这个 z 带进去,然后我们就可以再得到这一列 z 二值,这是 z 经过死路之后的值。 好,那么现在我已经把啊 z 经过激活函数的值写出来了,就是加上一个非限性,然后让它能够表达更丰富的一个函数。 下一步第三步就是当投影,就是向下投影,把这八个内部指标再投回到五个粗粗的特征通道里面, y 就 等于 这八个内部的评判指标开始给五个粗通道投票,有的指标就会提高某某一个 粗通道,然后有的会压低。然后这里也举了一个 w 档的例子,这些 w 其实都是我们在学习训练的时候学的,然后这个只是一个呃,随便列的例子,大家可以看,然后最后我们就算出来了最后的输出外, 这就是最后算出来的 y 这个值。大家可能会发现这个 y 好 像普遍要比 x 小 很多,但它其实是正常 y 之间它都是同一个量级的,零点零九几啊,零点一几啊,零点零几, y 中间的这五个数是一个量级的,它只不过是比 x 小, 因为 f f n 层里面会加入那个残差的。 之前我们讲 transform block, 这里面可以看一下 f fn, 这里其实有一个残差的,就是 x 从这里输入之后, x 从这里输入之后,它是会加到这里的, 然后相当于这只是一个哦,这个 y 是 一个很小的量,然后它可能会经过归一化呀,这到零到一,然后主要的主要的数值还是在 x 这里, 所以大家啊,算完 f、 f n, 然后我们发现这个 y 还蛮小的,其实是蛮很正常的事情。然后再继续往后看,最大的是 最大的数字是这个值,这个正值零点一六六,说明这个质量、手感被模型给强化了,也是模型非常看好 模型更相信质量、手感这个线索,然后所以他被强化了,被增强了。比如说像外皮颜色呀,瓜地、干湿这几个零点零九,零点零九也是被保留下来的,就是没那么高,但是啊也不低, 好像瓜奇形状这个零点零二七是几乎没了,说明模型觉得这个特征对于总的判断,总的贡献是很小的。然后敲起来的声音,声音是负的,模型反而降低了这个线索的影响, 说明模型是完全不相信这个声音这个特征的,然后所以敲声这个线索也是被打了折扣的。这就是这颗西瓜在模型内部通过加工之后 得出来的结论。就说模型更相信质量、手感、外皮颜色、刮地这些线索,但是敲声这个线索模型是完全不相信的,模型给他扣分打折扣,然后刮其这个线索几乎不参与最终的判断的。 所以这就是一个西瓜它的五个特征经过模型经过 f、 f n 之后所经历的事情。然后它输出的数值, 它要向下一层网络传递出来的信号。所以说 x 它的每个维度,我们虽然数学上看好像它就是一个向量,它可能是二零四八维的,一零二四维的, 他的每一个维度、每一个数字都可以看作一个特征通道,然后这个特征通道他可能就表示的是某一个 特征,可能就表示的是某一个意思、某一个语义,然后经过模型的不断加工,然后模型就把啊每一个特征都做了相应的变化。

嗨,大家好,我们今天讲大模型激活函数的第二代。为了解决上一代激活函数回归的一个问题,第二代激活函数几入出现了,它不再是一个简单的开关了,而是一个平滑的智能开关。 它是怎么样的一个公式呢?也比较简单,几入等于 x, 乘以一个斐 f x f x 呢?为标准正态分布的累积分布函数工程呢,竟是就这样的一串。不要,大家不用记这个,我们记到它的一些特性, 它不同于 reu 呢,它有一个的硬阶段,而是对几路的负值呢?几路对负值进行了平滑衰减,从而非直接归零,使梯度更加流动, 更稳定。它是现代大模型的一个标配。 g b t 系列呢? open i 核心模型架构的基石。 butter 模型呢,也是谷歌的预训练模型的标准配置。 number one 呢? matte 开元大模型呢,也是用的这些,然后我们看一下,就是这个,怎么理解啊?看看一下,我们先看一下数学知识标准的正态分布,标准的正态分布呢? pdf 呢?和 cdf 的 对比图, 这,这个是概率密度函数的一个一个对比图的一个概率密度曲线,这是一个 c、 d、 f 的 呃,曲线,它是对概率的一个累积,大家理解就是我们前一段这个是用的 c、 d、 f, 是 标准正态分布的累计分布函数,对吧? 然后大家长这个样子,那我们看一下维度维度的一个激活函数的一个对比, 你看以前 reo 的 话,在负的时候呢,它直接就变零了,就是,所以说它会有,呃,就是很多参数不能更新,导致 模型就不能 work 了。然后呢? reo 呢?它在赋值的时候它做了一个平滑,因为它是 x 乘以 five x 这样的,它不是为零,但是它是越到负的越深的时候,它值越小,大概是这么一个函数,所以它有效的能缓解。呃, re 路的一个,嗯, 就是开关的一个,那个参数死掉的一个问题。对啊,然后呢,我们看一下解路的优势呢,它为何成为经典?首先,它有平滑过度,无硬与直, 避免了尾数在零点的梯度的突变,使优化的过程更加平滑,有效的减少了训练过程的震荡。它结合了随机正态化思想。尾数的设计呢,可以看作是对输入进行了一种概率性的随机丢弃, 有助于提高模型的泛化能力和鲁棒性,训练更稳定,效果更好。在各种 n, o, p 的 任务上呢, reu 的 表现呢,普遍优于 glu, 已成为 transformer 等主流架构式上的。呃,一个标准的一个激活函数。 所以说呢,我们有些上上面的一些优点,然后所以说它也比较经典。我们今天这一讲就讲到这有问题我们评论区留言,拜拜。

老朋友泡泡茶,我们上一节讲到了就是就是一到四种就是大模型的激活函数的演变。其实呢,现代大模型的激活函数呢,基本上就是上上以上四种的一个结合。我们看一下现代 大模型的激活函数的一个标配,比如说这个 switch group, 它是 switch 加 group 的 一个结合, 先是一个 switch 函数 switch 函数,然后再就是门控去乘以,嗯,就是一个 sigma, 就是 group 的 函数。然后我们看一下 技术原理与优势,将 group 中的 sigma 的 门控替换成 switch 含激活函数,它可以结合了两者的优势,它不仅保留了门控机制的灵活性,还引入了 switch 函数的非偏信息,成为性能最强的激活函数之一。 然后主流模型的应用呢,它已经成为大语言模型的标配主键,比如说最近的 nasa 二三、 gpt 四以及 deepsea 等业界领先的模型架构,已全面采用 sweet group 来提升模型的表达能力。其实它也很简单,我们拆开看就是一个 sweet 乘以一个 啊 sigma 的 函数,然后还有 g 轱辘, g 轱辘呢是 g 轱辘加轱辘, g 轱辘呢是,嗯,等于 g 轱辘函数,就等于 g 轱辘函数来 门控乘乘以就是轱辘函数。它的核心说明呢,是与 switch 的 价格类似,区别在于将激活函数从 switch 替换为轱辘,这是一种在 保持性能的同时呢,还非常优秀和稳定的工程选择,就是它要简单一些。然后呢,主流的应用模型呢?嗯,国内的大模型价格中,包括通用千万、 glm 式豆包等都在使用。我们看一下老式的一个就函数和现在现代一个就函数,它们用在模型层都是怎么用的? 都是输入,输出,输入数据啊,第一步,第二步就是限行变换,就是给他升为这块有点不太一样了,这块是并行的限行变换,就是说两个这样并行的限行变换,然后首先,然后老师呢,这大模型呢,几乎函数只用这样的 g 几何, 然后现在的大模型呢,会用 sweet 几何,嗯,激活加 sim 的 门控这样的一个形式,就是前面讲讲了两种 十位轱辘和积积轱辘,然后呢,这边是限行变换 v 二降维,这是主元素相乘,然后最后最终输出,这边限行变换 w 三降维,输出就是现代, 嗯,那个 f f n n 呢?通过并行的门控,嗯,路径呢,引入了更复杂的非线性的交互,从而符合了更强的表达能力。它用的比较复杂呢,其实它就是几种几何函数的组合,但是就是这样呢,就表达能力就更强了,模型能力就更强,就这么一个意思。 那我们看一下主流大模型的激活函数的选型呢?都是哪些呢?早期你看 g p t 三就用 g p t, 它每代升级的时候就比较复杂的激活函数 sweet 股, 嗯, nama 一 呢,也是股, nama 二三呢, sweet 股,通用千万呢 g 股,然后 g l m g 股,股, deepsea 股,股,豆包呢 g 股,或者 有的 unice cream, 对 吧?就是这么,其实也没啥,没啥太复杂的,大家记一下这个,我们就是记一下这个,后面我会总结一。

大家好,我是你们的老朋友泡泡茶,我们今天来讲就是大模型激活函数的第三代 switch, 更柔和的智能控, 它是为什么叫呃,被称为智智能控的激活函数呢?它的公式看起来有点复杂,其实也不复杂,它 switch x 等于 x 乘以 sigma 的 函数。 这个 moi 的 函数可能有的同学知道不,也同学不太知道,就待会我给大家看长啥样子,其实也比较简单,它是是,它是 switch, 具有上限型和下限型的特点,它的一个自门控机制呢,输入 x 和门控 sigma 的 x 共同决定行为,比圆路和极路看起来更复杂,但是更平滑了。现代大模型中的角色呢, 较少是单独使用,更多的是作为基础主键去构建更复杂的激活函数,就是一般比较少,它是单独去使用的。 然后呢,函数的特性呢?格式化的是一图呢,平滑的曲线过路,不同于锐路,有硬边界。 switch 在 所有点上都具有平滑的导数。 自适应门控输出值呢,受到输入自身的门控机制调节,具备更丰富的表达能力, 可以构建更复杂的主键。它一般不单独出现,它是作为比如说 switch group 等现代激活函数的核心组成部分,提升模型的性能。这个我们后面会讲到啊,然后我们看一下,就是大家看一下这个图,很简单了,这是一个,是一个默认的函数,你看它是长这个样子, 从这就是一个拐角过来这零点,然后这个零点五,这是一个 e 加上这个这样的一个函数,它这个函数呢,就在这个上面乘到 x, 说看起来是不是长得很像刚才的几入是吧?但是它比更柔和更平滑,它没有几入,这这下面几入可能会弯这么多, 而且这个地方极路是这样的,有点有点弯的,但它没有,因为它是个 x, 是 这样的一个一个,然后我们看一下,然后第四,这是它的一个啊,然后第四代呢,就是几个路啊?极路 啊,就是格鲁,格鲁呢,它是带门控的信息过滤器,它呢跟刚才的 switch 长得很像,刚才 switch 不是 x 吗?它是 x 一, 然后去这个地方是一个门控, 乘以 c 个 mo 的 x 二,然后我们看一下它是怎么怎么做的呢?将输入分为内容 x 一 和门控 x 二。门控呢,经 c 个 mo 的 函数激活之后呢向 就是阀门一样动态的控制这个内容的一个通过量智能信息的过滤器,这是一种高级的过滤器,让模型呢自主学习并筛选出关键信息,提升模型的表达能力。就是它有一个门控的一个那个机制,而且它用这个东西来控制这个, 它这两个参数输入不太一样,我们看对比一下它俩长在哪不一样了哈,就是 switch 呢,是单一的激活函数。格入函数呢,它是一个计算单元和结构, 然后它都是接收一个输入向量,输出一个经过变化的向量,然后它是通过内部分路和门控机制输出一个向量。 然后呢,其实呢就是核心思想,它是将限行部分和非限行部分呢,是一个默认的是非限行部分啊,产生了非频发的非限行激活。它是用门,这个呢的机制是用门控的,机制, 是用输入的一部分呢,去控制另外一部分的信息的流通和通过量,就这样的,然后它是一个 x 乘以 sigma 的 beta。 x 刚才我们看到的是没有这个 beta, 是 吧?就是因为通常就为一嘛。然后呢,它是这样的一个函数,其实可以把这个东西它是 x 呢,被分为了两路,一个进行限行变换,限行变换是 x 乘以这个一个限性的一个公式,然后通过 sigma 非限性变换的一个门控,另外一路得到一个非限性变换,最后结果是两者相乘。 我们看一下典型的应用,就是可以替它可以替换神经网中的路由几路等激活函数用于前馈层。然后呢,这个呢,它是作为更复杂的,就是基础模块,特别是在创世 former 模型中的 f f n 前馈神经就是前馈网络中层中其遍体 sweet group 和呃 g group 被广泛应用,提升模型的性能,就说它也是,就是一个一种,就是单元结构,是作为更构造更复杂的一个激活函数的一部分,它也是,其实它俩就还有一定变通,对吧?然后我们看一下 group 的 优势呢,为何成为新宠? 因为它是用门控机制来控制更加智能,不再是简单的呃预执的判断,而是通过学习得到门控的动态的门控能更精准的控制信息流, 有效的减少了参数的溶于 group 的 结构呢,可以在保持甚至提升模型性能的同时,减少所需的参数量,提升训练和推理效率。 他能处理长训练能力更强优秀的信息过滤能能力呢,能使得 groot 在 处理长文本训练时 表现出色,有效有效的缓解了长距离的依赖问题,其实我们看看这几个都还挺简单的,对吧?我们今天这一讲就先讲到这,我们有问题我们评论区留言,拜拜。

你知道吗?现在 new ips 和 icl 二里的很多所谓大创新,其实都是旧瓶装新酒。我导师亲口跟我说的, stop reinventing the wheel。 你 是不是总想着搞一个惊天动地的 new theory? 错了,现在的 reviewer 不是 非要你从零构建,他们更看重你能不能把 classic method 玩出 modern insight。 纯从零到一的 theoretical innovation 越来越难,这根本不是我们普通人的赛道。怎么做?听好这三步, run it on startup, 比如 hmm 或者 common filter。 别嫌他们老,这些数学模型的 explainability 是 无敌的。第二步,给老测中心引擎保留 h m m 的 状态转移逻辑,但是把里面算概率的那一步替换成 transformers self attention, 这叫什么?这叫 structured deep learning, 瞬间逼格拉满。第三步,降维打击新场景,把它塞进 long sequence model 或者电商行为预测里。 这一套打法既有经典模型的逻辑,又有深度学习的精度。去年我师弟就是这么干的, h m m 加 transformer 的 融合,投了 new i k s, 居然直接中了神稿!人的评语是, solid motivation combined with modern architecture。 你 看,创新不一定是要发明新东西, vintage revival 才是最高效的路径。 是不是突然开窍了,想知道具体怎么做 internal fusion 和 external fusion 吗?我把这套能发顶会顶刊的论文缝合大法整理好了,里面不仅拆解了结构优化和鲤鱼惬意的核心路径,还教你怎么写出一篇顶级的缝合式论文。评论区扣缝合两个字,我来安排,鱼哥在老地方等你。

雷路几何函数的铁拳,我们算是体验了一把啊,相信呢,大家一定是意犹未尽,所以呢,我这里呢,再来一道雷路几何函数的铁拳,同时呢,我们也再次闻一闻啊,深度学习面试当中那股扒骨的味道啊。 好,那么这个题目是怎么样的呢?也就是雷路几何函数,对吧?那么雷路几何函数呢,它为什么容易提度消失? 其次,你怎么去诊断雷路几何函数提度消失的呢?然后第三个,如果说雷路几何函数它的提度消失了,那么你要怎么去解决这个问题呢?听一听这个问题啊,是不是很容易的把谷位, 我们看这个问题啊,这个问题呢,有三问,而且呢三问呢,还是相互递进的关系,说明呢,这个出题的人呢,他是一个思维缜密的人啊,啊,那么呢,这个题目呢,当然也是逻辑呢,非常严密的啊, 好,那么呢,我们看第一问啊,他第一问呢,他是说你这个零度几何函数呢,他为什么容易出现题多消失的问题 啊,那这个问题呢,当然还是一个送分的题目啊,啊,这个呢,也体现了我们出题的人呢,他还有一些人情味的啊, 啊,那么呢,他是这个啊,那么这个问题呢,我们要怎么回答呢?其实呢,我们如果说只要知道这个雷路几何函数它小于零的时候呢啊,它全部都是零,对吧?小于零的时候,它这个神经元呢,它就会死亡啊,死亡之后呢,那么当然 我们的这个无论是输出结果还是输出的提动呢,我们固定都把它写成零啊,这样呢,他的提动就是永远都是零了啊,那么呢第一问呢还是比较简单啊,就是神经元死亡的问题啊,神经元死亡之后呢,当然啊提动呢也就没有了啊 啊,这是个比较简单的问题。好,那么呢我们看第二问啊,第二问呢,他问的是怎么样诊断啊,出现了题多消失的问题啊?也就是你你在验答案的时候是吧? 啊,你在练单或者是啊,当然你是训练模型吗?训练模型的时候呢,出现了提度消失,那你怎么判断他出现了提度消失的问题呢啊,那么这个问题呢知道就知道啊,不知道就没不知道了,这个就没有办法了啊,当然我们 啊这个答案呢,就是我们使用这个 h 基增啊,使用 h 基增,反正这个肯定没有错啊, h 矩阵呢啊,它是一个特殊的矩阵啊啊,它可以呢诊断我们的模型呢,是不是出现了梯度相似的问题? 好,如果说你回答了这个 h 矩阵呢啊,那么呢可能啊这个面试官呢,他又会继续问啊啊,首先呢这个 h 矩阵它为什么可以诊断梯度相似的问题呢啊?其次呢啊这个 h 矩阵呢啊,它的特征值特征向量是怎么一回一回事呢 啊,这是对吧,这是连环的第二位啊,然后呢他还有连环第三位啊,他说这个 h 积分呢啊, 你怎么去把它求出来呢啊?如果说啊,你炼丹,你的炼丹炉啊,你的维度达到几万甚至几十万为对吧?达到,比如说你达到一万为的话,那么你的 h 积分他的这个 啊个数多大呢?就是一万乘以一万个数字对吧?你要求这个数字呢还挺困难的啊,那么你怎么把这个 h 值呢?把它求出来也是一个问题啊,虽然这里的问点很多啊, 那么第三个呢,就是你这个题都消失了怎么办啊?看看人家这题出的啊,非常的严谨啊,对吧?一开始问你为什么会出现啊?怎么判断出现了啊?出现了怎么办是吧?啊,人家这题目出的这个很八股啊, 好的话呢,我们看第三问啊,第三问呢,他是问你这个题都消失了怎么办啊?这个题都消失了 啊,那么这个问题呢,当然提肚消失呢,不仅仅是雷露几乎函数会引起提肚消失,对吧?其实呢还有其他的一些情况呢,会导致这个提肚消失啊,当然我们这里问的话呢,主要是问雷露几乎函数导致的提提这个提肚消失怎么办? 虽然你这也当然你可以结合呢雷路几何函数的一些特点啊,比如说呢,小于零的时候是吧,你不是结束消失,不是主要就是在小于零的时候消失了吗?那你说可以说对吧?我们可以用改进版的雷路几何函数啊,比如说呢,是用全是 form 里面啊,那个几何函数 啊,也就是记录几何函数啊,用那个几何函数呢,可以稍微改进。 那么其次呢啊,你还可以呢,在小于零的时候呢,你可以设置一些可以学习的提督,对吧?就是就是,也就是说呢,不是说单纯的把这个提督呢,就是变成零了啊,声音呢,变成零了,你可以呢小于零的时候给它 给出一些可以学习的空间啊,这也是一个思路啊,好,那么呢,这个是解决啊,累赘结构函数导致提多相思的问题啊。其实呢,我们刚刚说了啊,还有其他的一些情况呢,会导致这个提多相思啊,当然情况很多啊,那么呢,我们有没有一个统一的方法能够解决呢 啊?如果说你能回答这回答到这个地方啊,那么呢,你就这个是相当于是加方向了啊, 你可以这么回答,对吧?比如说我们可以使用长插神经网络啊,你要把这个东西拿出来啊,那你的这个炼丹炉那是啊,足够的深了啊,至少是二十层以上啊,你的神经网络。

今天用一个西瓜的例子讲解 transform 里的 f fn three glue, 上节课讲的 f fn 是 最基础的,升为激活,然后降维,这节课讲的 three glue 是 three g l u, 是 现在目前大多数大医院模型都在用的一个 f fn 的 激活架构。 然后他是有大概三步,第一步就是同时计算内容分支和门控分支,第二步就是把它们两个分支进行点成,然后第三步就是继续降维,然后其中内容分支就做了升维,然后第三步所以要继续降维, 然后重点就在这个内容分支和门控分支里,内容分支就是说啊,我想说什么?对同一个内容 x 啊,内容分支就是 x 乘以个 w up。 好, 我想说什么? 门控分支就是 x, 再乘以个 w gate, gate 就是 门的意思,就是我信不信 这个特征该不该说说大多大声有门控分支,然后门控分支里面啊,还用的是 c c 路,然后最后做一个点乘,用这个符号。我们再用一个西瓜的例子,用它的三个特征来描述一个向量 x 等于, 那么假如说,呃,内容分之 b, 我 现在把 w up 设成 i, 然后就等于 x 乘一个 i x, 然后就是说啊,模型在脑子里同时准备了三句话,模型的质量是怎么样的,声音是怎么样的,它的刮地是怎么样的?现在我们来假设一个 w gate, 然后这个 w gate 应该是模型学的,然后我们先假设一个, 那么也就是说啊,假如 a 就 等于 x 乘一个 w gate, 现在来看它的意思是模型学到了一个经验,就是特征一,这个第一个 get 一, 它主要看西瓜,然后 get 三,主要看瓜蒂, 然后 get 二,它是啊看同时看声音,然后和瓜蒂是怎么样的,就是说瓜蒂会影响这个 get 二,然后 j 加,就等于 sol 好,挂 a 就是 啊 a 的 结果再包一个 sol 激活,然后最后最后的输出 y 就是 门控分支点成激活分支, j 点成 b, 或者是 b 点成 j。 好, 现在我们假设第一个挂,假设一个挂 a, 它是 x, 是 等于二一负一的,也就说它的重量还可以,重量是比较重的,然后声音还可以,但是它的瓜蒂是干的,所以它这个瓜蒂可能不太行,因为第三个特征是瓜蒂,然后沉是比较沉的,重是比较重的,然后我们来啊算一下, 比如说它这个时候 a 就 等于 a, 是 等于 a, 是 在这里的 x 一 x 二加 x 三,然后喊 x 三的,然后 a, 这个时候 a 是 等于 二负一负一的,然后经过,经过一个死路,就是 j 就 等于死路 a, 然后它就等于, 这应该就约等于一点七六,负零点二七,负零点二七, 然后这个时候我们就把它的门控分子算出来了,一点七六就是,而且它是大于一的,说明这个质量这条线索模型啊不仅很相信,还,而且要放大这个信号, 然后这两个后面两个都是负的,就是说啊不信,然后模型对这个这两个线索不相信,然后要把它当成反向的信号,然后要压缩这个信号,而且要纠正,因为负号要纠正这个信号,然后最后所以就除除了啊 g 等于它,然后最后 y, y 就 约等于 y, y 就 约等于啊等于这一点乘一个 b, 然后 b 其实就是 x, 然后所以啊,这一点乘 b, 然后就约等于三点五二,负零点二七, 零点二七,然后这也就是说这颗瓜它的质量就是三点五二,它是非常靠谱的。然后啊,我们应该放大它的信号,但是声音声音不太行,声音是不太相信的,然后因为它的瓜蒂是 干的,然后影响了声音这条信号,然后最后刮地这条信号,这条信号也是不太行的,然后是要把它缩小的好,声音是反向提醒的,然后刮地这个没有反向提醒,他就是缩小 好。再看另一个瓜,假如说瓜啊,对照个 b b, 它的等于一二一,也就说它的瓜蒂是新鲜的,然后它的声音是比较好的,然后它的重量也还可以啊,那么再再继续往下算一下。 好,那它的 a a 就 等于 x, a 就 等于 x 一 x 二加 x 二 x 三 x 三,然后算一下 a 是 等于 直接写结果了, a 就 等于一四一。 所以说啊,在这个瓜里面,声音这条特征是啊被放大到非常多的倍数的,然后其他反反而是其他两个特征。模型是把声音这条线索是压缩了一点点的, 也就是说对于不同的瓜,模型是有不同的门孔的,就是 sweet glue, 他不是,他不是人为定义的,人的人写的规则,而是模型学习规则,然后他的具体的 x 来定义,门控 x 去影响,就是到底是哪一个信号应该放大,哪一个信号应该压缩的,他是由内容决定的。 比如说第一个瓜声音,我们最后算出来声音是不可信的,然后他的呃 y y 这里是零点二七,他是反向抑制的,但是当但是第二个刮,他反而声音就可信了,就是因为第一个刮他的刮地很负,他的刮地是不可信的,而且声音也不可信,所以整个第二个第二个纬度就变成负的了。然后第二个刮呢,他的声音就非常好 好,它的瓜蒂也是新鲜的,然后所以第二个 gate 第二个门就会变得很变得大,然后声音这个信号就是会被放大了。所以说 lm 爱用 sweet glue, 就是 因为它是一个会根据自己的内容动态调整权重的一种特征。裁判 就是同样的三个特征啊,不同的输入不同的内容,他能学会什么时候把哪个特征放大,什么时候把哪个特征压缩啊,他是非常非常灵活,而且他用的是啊写路,就是传统传统的 glu, 传统的 glu 它用的是 sigma 的, 然后但是 sigma 的 它的门是在零到一之间的,它是打折有折扣的。但 slit 就 不一样, slit 用的是 slit, 然后它的门是可以大于一,然后把 关键的通道直接放大,强调或者是小雨林能轻微的做反向抑制或者是纠错的,所以它的表达是更灵活的,然后梯度也是更顺滑的。而且 slit 就是 每一个 通道都能被单独的放大或者是抑制,然后而且是可以由上下文来决定的。比如说这里, 这里本来这个通道是只有声音,这个通道只有 x 二的,但是现在我让第三个通道也影响第二个通道,这个是个 呃更常见的例子,像第一个和第三个反而不那么常见,一零零和零零一,然后像这种就是 两个或三个通道合起来影响一个特征的才是更常见的。每个通道还可以影响别的通道,然后也就说它是有上下文的,而且根据论文,根据实验也证明出 sql 就是 效果要比其他的呃 glu 好 一些。

然后呢,我们看一下从单点的激活到门控机子选型是怎么来的,它的发展历史是吧,一八年到二零二零年呢,以轱辘和机轱辘为代表的单点激活函数是主流,因为结构相对简单,计算开销小 啊,在深层网络中可以可能存在梯度消失的问题,但是现在呢,我们算力强了是吧,用是位轱辘和机轱辘外为代表的门控几乎函数成为绝对的主流,特点是引入了门控机制, 显著的提升了模型的表达能力和训练的稳定性,是当代大元模型的标配。然后它也能缓解,就是说梯存在的梯度消失问题。 然后趋势的总结呢,像更复杂更智能的门控机制眼镜就函数的设计呢,朝着更复杂更智能的方向去发展,核心的目标是在保持计算效率的同时呢,追求更强的表达能力和训练的稳定性。就是这么一个情况, 为什么现在大模型偏爱轱辘系列呢?因为门控机制更加智能啊,通过学习动态的门控,可以精准的过滤和传递信息,比固定的呃,预就是预值激活更加灵活。 第二是训练稳定性更高,门控结构呢,有助于缓解梯度消失的问题,在训练超大规模的模型时更加稳定。 然后呢,模型效果更强。大量的实验证明,采用 group 系列的模型呢,在下游任务上表现普遍优于使用传统的激活函数的模型,适用于更复杂的语义, 对于处理包含长距离依赖或者复杂的语言语义文本,更强大的信息整合, 通过过滤能力直观重要。所以说就是大家为什么偏爱这个,因为智能稳定,稳定性高,模型效果强,适合更复杂的语义,就这么简单。 好了,我们再复习一下我们的核心公式哈,最开始也是一个非常简单的引入,就是一个 max 零到 x 谷入呢,升级到 x 乘以 five x, five 是 一个,就是嗯,概率密度函数的一个累积。 然后呢,这个是 swy, swy 是 x, 就是 x, 乘以 sigma 的 x, 是 这么一个情况, g 轱辘呢,就是门控机制, x 一 就是去逐元素去乘以 sigma 的, 嗯, x 二。 swy 轱辘呢,就是 swy 是 函数,去门控乘以 sigma 的 函数。 g 轱辘呢,是 g, 就是截入函数,乘就是去门控乘以 c 勾末尾的函数。其实他就是这两个呢,就是在这四个上面就做这个遍体,记住这个结构就好了,其实他不是一个,呃,就单就是一个纯激活函数,他其实更重要的是个结构。 好了,我们激活函数的关键要点做一个总结吧,刚才是一个公式, 它的核心作用啊,激活函数为什么要用激活函数呢?还是给给大家?不知道我之前有没有给大家讲明白,激活函数是神经网络学习复杂规律的基础,通过引入激活函数,它可以引入非限性的变换, 使模型能够理合任意复杂的函数。没有激活函数,它就没有非限性变换,然后你就不能表达更复杂的一些信息。 演变路径呢,从简单到智能,从简单的锐路呢,演变到了平缓的极路,再到具备更适应力、更能力,更能适应力强的智能。 glu 的 门控机制 主流选型呢? glu 的 变体呢?现在大模型已经全面转向 sweet glu 和 g g glu 等 glu 变体,它们成了 transformer 架构的标配。 选型的原因呢,性能和稳定性,门控技术带来了更智能的信息处理能力,显著提高了模型的训训练稳定性,并最终带来了更强大的模型效果。好了,我们今天这一讲就到这里了。

本期我们聚焦 gpt 模型核心代码,从乾坤网络 feed forward network 开始,他通过两层全连接网络进行特征转换。第一层使用 g l u 激活函数添加非线性帮助模型捕捉复杂模式代码,分别定义了激活函数线性转换函数,然后就是乾坤网络函数层归一化 layer normalization, 通过计算每一层输出的均值和标准差来规范化数据,维持训练的稳定性和提升效率。 softmax 函数比较直观,将输入转换为概率分布,通过减去最大值,避免数值溢出,确保计算稳定。注意力机制 attention 我们就相对比较熟悉了,之前我们也演示过,而多投资助毅力机制猫 that attention 函数分头处理输入的 q k 利,捕捉多样化的依赖关系,严码保证信息按正确顺序处理,最后合并结果。有了以上所有模块,我们将组装 transformer, 通过层规移化和多头自注意力模块顺序处理输入,加上残差连接以保留信息流,继而再次进行层规移化,并通过前馈网络 以残差连接收尾。这一设计既防止的梯度消失,又能够有效捕获数据间复杂的关联性。然后我们定义 gpt 二函数,对输入此所引进形词嵌入和位置嵌入的相加,然后将其通过一系列 transfordblock, 每个块都执行自助毅力和前窥网络操作,最终输出经过层归一化后,与此嵌入矩阵的转值相乘, 形成下一次的概率分布。最后要定义 generator 函数,基于当前的输入和参数计算下一个词的概率分布。通过贪婪策略从模型输出中选取概率最高的词来逐步生成文本,每次选择概率最高的词作为输出, 并将其添加到输入中,卫生呈下一个词做准备,并可视化展示进度。对了,要运行脚本,别忘记 man 主函数封装了整个生成过程,从加载模型参数到文本编码,再到新词生成和解码,实现了完整的文本生成流程。