今天的主题,机器学习数据分析中的核心知识点,损失函数 loss function。 节目中,我会尽量避免复杂的数学推倒,而是从直觉出发,帮助大家更好的理解损失函数的本质。 我们知道,不论是传统的回归模型还是复杂的神经网络模型,数据工作者的目标都是让模型能够准确的进行预测判断。 在这个过程中,我们会通过训练数据及对模型进行训练,根据模型的预测结果和训练数据的真实标签误差,制定模型参数的调整策略, 从而让误差减小到可接受的水平内。而这个量化误差的数学表达是就是我们今天的主角损失函数。假定我们有训练数据及 x 以及对应的结果项链 y。 我们把训练数据集录入到参数项链 w 的模型中, w 可以理解为回归模型中的变量系数,或者是神经网络中的神经元连接权重,预测结果为项链 yp。 这里大家可以暂停思考一下,当前模型参数 w 下,你会如何量化模型的误差呢? 相信大家的答案中一定会包含下面两类损失函数,一、绝对值损失函数,二、平方损失函数。 两者的结果肺复,且均能反映真实值和预测值的整体差异。理论上他们都可以作为机器学习模型的损失函数。 模型训练的本质就是通过找到一个合适的模型参数 wc 十,损失函数值最小化当然,为了选择最契合具体分析案例的损失函数,我们需要了解这些损失函数的不同特性,以便更好的控制模型训练效果。 绝对值损失函数的损失值会伴随着误差等比例变化。在平方损失函数中,误差绝对值越大,损失值增加越快。所以相对于绝对值损失函数,平方损失函数会让模型更厌恶大误差。 我们知道,一般在预测模型中,一长直较易产生大误差,所以当模型选择的是平方损失 函数时,其最终预测结果会向异常值倾斜。当然,也存在这样一种损失函数, huber loss function, 他对异常值的偏好介于绝对值损失函数和平方损失函数之间。 当你想照顾到一场直,又不想让一场直对模型训练产生太大影响时,他可以作为一种折中的选择。上面所介绍的损失函数虽然简单直观,但其适用性存在一定的局限。 当我们的真实结果标签和预测结果是概率分布时, yi 和 yip 落于零到一间,其误差 yi 减, yip 则落于负一到一之间。如果我们继续采用之前的损失函数,且损失值将被 卡死在零到 n 之间,而我们希望损失值如下图所示,展现出更大的弹性。当预测概率与真实结果概率差距越大时,给予更大的损失惩罚。 所以,接下来我们就要根据数学直觉推倒一套针对概率分布的损失函数。 我们已知,当前模型满足下属条件, yi 大于等于零, yi 撇大于等于零。 y 一加 y 二一直加到 yn 等于一。 y 一撇加 y 二撇一直加到 yn 撇等于一。 我们对 yi 和 yip 进行 log 变换,得到 loguyi 和 loguyip, 求两者的叉。 loguyi 减 vip, 它就是 vi 和 vip 的 logo, 自然比,其结果能反映出真实概率和模型预测概率的差异。 根据真实概率分布歪,我们就可以计算出 log 斯然笔的期望,以此体现模型的整体预测概率分布差异。该表达式也被称为 kl divergence kl 散度公式。 现在让我们继续玩一玩这个式子,进行如下的变换,通过添加副号,让 lock 内部的分子分母调换位置。 我们知道 log 函数是凹函数,坑 k function。 所以括号内的 a 部分满足减身不等式。根据减身不等式, a 部分小于 等于零, kl 散度非负,所以其可以作为损失函数存在。现在我们对 kl 散度公式再做一些变换,把 log 分数转换为 log 叉,再进行归类。 该等式又可以分为 b、 c 两个部分,其中 b 部分是不受模型参数 w 影响的,并且其值小于等于零。 而 c 部分与模型参数 w 紧密关联,其直非复,因此可以将其单独拿出来作为更为精简的损失函数, 而他也就是我们所熟悉的交叉商函数 cross ngp loss function。 到这里我们今天损失函数的介绍就告一段落了,希望帮助到大家更好的理解 相关概念,特别是从数学直觉的角度,重新看待 kl 散度和交叉伤函数这两个相对复杂的概念。最后感谢大家观看,让我们下期节目再见!
粉丝1.8万获赞3.6万

今天的内容非常适合大家刚刚要开始去学习深度学习零基础的同学,那么今天的内容呢,会是大家在具体的去学习某些算法,某些数据的处理的方式,这些具体任务,具体的知识之前要先能够 去了解的啊,一些基本的问题,那我就给他做深度学习第一课。所以如果呢,你现在也是刚刚要开始去学习深度学习,你现在可能也会面对很多的困扰啊,比如说有一下子特别多的概念将涌入出来,所以你可能会对于这些概念在学习的过程当中,因为新东西太多了嘛, 就有可能会有一些不太清楚,或者是不太好弄明白的地方。我们今天的内容啊,一次课咱们就把基础的时候啊,需要去做的那些基本的准备都跟大家去看一看啊,这是我们今天的内容, 所以我们今天的内容呢,对于大家要开始学习零基础的同学会非常友好。首先呢,我们先来认识到底深度学习是什么啊? 我们所说的深度学习经常会配合着机器学习一块,看到大家也经常会在这两个概念这里呢,可能会有一些迷惑,实际上机器学习呢,就是借助了机器的学习过程帮我们来解决问题, 深度学习就是机器学习若干个解决问题方式当中的一类,所以讲过这两句话之后,对于这两个概念你可能有了一个大概的认识,如果说他们的关系的话,那么就是机器学习 包含深度学习。我们现在讲到的这么多的深度学习,只是在机器学习若干方法里边,大家目前比较关注的比较主流的一类方法 啊,那么它是基于神经网络的比较深的神经网络的模型就叫做了深度学习,但他们都是机器学习, 所以要学深度学习,也首先先去看看机器到底如何学习,机器学习的目的是什么?他和深度学习的过程和目的都是一致的啊。深度学习就是机器学习若干方法里边的一个啊,主流的目前大家比较关注的一类方法。 深度学习呢,也依旧要通过机器的学习,所谓的机器的学习就是咱们之后在真正落地的时候训练的过程, 所以训练是来进行了机器的学习啊,他们就训练的本质就是去完成学习的过程啊,学习的过程就是由训练解决的,通过这个学习和训练,最后我们找到了一个模型,而这个模型呢,就是用来解决问题的那一个函数。 举几个例子来看,比如说我现在要解决的问题是文本翻译,那么我要通过训练这个过程,最终帮我找到了一个文本翻译的模型。 那比如说我现在想做的是图像分类,通过了相应的训练过程,最终找到了图像分类的模型。 所谓的模型,通过这样两个表示的方式,你会发现它其实就是个函数,你要给模型输入, 那么模型经过一系列的运算之后,得到模型的输出,就像函数一样,你要给一个函数输入,函数中间他包装了现在对应的固定的运算步骤,那么就得到了函数的输出,所以模型你就可以给他理解成是复杂的函数好了, 那么函数有输入经过,这个把输入放到对应的函数里边,经过一系列的运算得到输出,那么输入和输出之间,我们说这有一个函数的运算步骤,其实呢,这对应的就是我们当前的模型是怎样的一个结构 啊?所以模型就帮我们去解决了由输入到输出之间的映涉关系,这就是模型啊,所以呢,文本翻译这里我们要解决文本翻译这中间具体的映涉关系这件事,有它的模型的结构, 那么图像分类要解决啊,图像分类的输入到输出之间的这样的关系,有它的模型的结构,但总之我们要说的深度学习在干嘛呢? 就是通过训练的过程帮我们来找到当前你的任务相应的模型,那么到底模型我们已经知道它是什么了,就是解决问题的一个函数啊,那这些模型我们要怎么找到呢? 我们来看几个简单的问题啊,现在我们看到的这样的一些点啊,这个点有它的数值 x, 这算作我们当前的输入以及它的 y 输出,所以对于这样的一些坐标当中的点来说,它的模型就是一个 w, x 加 b, 我们可以把这个 x 啊,当前的所有这个横坐标和 y 这个点,他的 x 和 y 之间的关系,用这样的一个公式可以去给他表示出来,如果我把这里边的 w 和 b 也确定下来,那么这条线就能够确定下来了, 所以如果我们有现在的这样的一些关系,什么关系呢?横坐标 x 和 y 啊,和 y 的 之间的这些关系,我们用这些点来表示出来的话,我们就可以用这样一条线来表示他们的关系, x 和 y 的 关系。那么如果我已经确定这是一条线能够表示出来的,下一步就是来看看这里这条线现在能够确定下来的时候的这个 w 和 b 的 值是什么好了。第一是它的运算方式,我用了 w、 x 加 b, 第二是里边 w 和 b 具体的取值,这两件事都确定下来的话,那么我们当前的这个模型就能够确定下来了。 所以一个模型的确定包含两个方面,第一是你这个预算步骤,那怎么算?第二是在预算步骤当中所涉及到的所有的参数取值。对于简单的这个现象的模型,我们就能够这样去确定,再复杂的模型它的确定也都是包含这两个方面。第一模型的结构 x 进来要经过怎样的运算?第二,运算过程当中所涉及到所有的参数的取值,我们已经现在脑子里边清楚了啊。一个模型的确定要包含两个方面, 第一是它的结构,第二是这个结构里边所有的参数的取值。那咱现在就来看看这两件事都能怎么去确定。先来说结构怎么确定, 你所看到的你要关注的那些论文当中的这些模型结构图,它表示的都是咱们所说的。第一件事就是当数据丢进来以后,要经过怎样的运算步骤,先乘还是先加?还是要怎样 一步一步怎么去把数丢进来的数据一步一步计算得到的输出。每一个所谓的模型的结构图来表示的都是这件事, 比如说这是 transform, 大家可能见的比较多,我的数据丢进来了以后啊,一步一步怎么去进行计算?先经过先经过了注意力,又有了加,又有了 nom, 又有了全连接,是吧?这样的块又堆堆了若干层,一步一步最后呢,经过了全连接,又经过了 softmax 得到输出。你看这张图告诉你的就是数据进来怎么一步一步的运算,最后得到的输出。这个图是 unite 也一样,数据从这进来了以后,这是图像数据,图像数据进来以后,我们先经过了卷接,又经过了池化,又经过了跳跃连接,一步一步预算,怎么得到的输出?就是这张图给你呈现出来的信息。每一个所谓的模型的图结构都是来告诉你, 都是来告诉你数据进来了以后,怎么一步一步去进行预算的,一直得到最后的输出。 ok, 这就是模型的结构图,来告诉你什么的好 同学们,这个模型的结构图对应告诉你的数据进来要经过怎样一系列的运算步骤,它就是个搭积木的过程,第一个积木块是注意力好了,那你就进来做注意力那样的运算步骤,先去计算 k v, 由 q k v 得到注意力的计算的注意力分数,由注意力分数再加求和。 那全连接呢?就是全连接的运算步骤,那你反正这个图告诉你的就是数据进来第一步干什么,第二步干什么,一直到输出。每一个模型结构图给你呈现的都是这个信息。第一运算的步骤就是模型的结构所包含的信息,那么这个里边就有大量的参数, 如果你已经能够确定模型的结构,咱们就可以继续往下去找参数了。如果你现在的任务你不知道要用什么结构啊,那就说明你对于这些结构里边的模块不熟悉,因为每一个结构啊,比如说注意力也好, 全连接也好, add 也好, nom 也好,它在这个结构当中所出现的时候,都有它在这里想去解决的问题有它的意义。你对于每一个模块如果都有一定的认识,你自然知道你现在的任务要选择什么模块去构建模型了 啊,或者你可以用比较主流的几个哪些模型来解决你的问题,不熟悉你去学啊,还没有学的话,你可以参考一下当前你相关的一些论文,找一找方向啊,这个不是我们今天的重点,我们今天不是来讲某一个结构,而我们今天讲的是整个深度学习的过程里面这些基本的问题。 所以结构每一个结构都有他在设计过程当中的特点,了解他的特点,然后选择你的任务适配的结构就 ok 了。那么结构自己去确定啊,确定下来以后,我们来看参数如何找 找参数的过程就是咱们所谓的训练过程,所以模型的训练其本质就是在调参。 好了这句话,一会我会带你去看他中间的过程具体一二三步是怎样的。那总之呢,我们找到了参数,结构呢,也在之前确定下来了啊,结构里面的参数也都确定下来了,我们就可以完成当前的任务了啊。比如说我现在是想能够得到一个图像分类的模型 结构,我先去自己跟着,根据我的理解去确定,为什么?因为我现在是图像分类啊,所以我从我的认识上面我就知道,对于图像处理这里如果是图像分类,我可以选择一个比较经典的图像分类的卷积神经网络,比如在这儿我用了 alexite, 我 为什么用 alexite? 我不用,我不用 url, 我 不用 transformer 呢?因为我对于模型的结构有我的认识,我认为在我当前的任务选择它比较合适,还是刚才那句话是基于你对于深度学习这些底层模块的认识的。 好了,我现在呢选择了一个结构,这个结构就确定下来了,我就可以去训练模型。训练的目的是在当前确定下来的结构里边找到所有参数的最优值。 那么这个训练的时候有两个前提,第一就是你是一个什么结构啊?他对应有哪些参数?第二呢, 结构确定下来以后,咱们去训练找参数最优值的时候,一定要基于当前的经验数据,这就是为什么所有的机器学习也好,深度学习也好,一定要有数据的原因。我们是根据这些经验数据去找当前结构里边这些参数的值到底应该有什么样的一个 合理的取值的。 ok, 我 们下面要去看训练的步骤是怎样。首先你先清楚训练在干什么, 模型的训练其本质就是调参的过程,训练的过程就是在这里参数的调优过程,来看到底这个调优的过程是怎样完成的。所以现在我们来看模型的训练过程。 好训练的时候啊,在训练这件事具体开始之前有两个前提,刚才其实 ppt 里面有显示啊,第一,你得先确定这个模型的结构到底是怎样的,是卷积,是全连接,是注意力结构,先确定下来。 那么第二呢,就是你在调整参数的过程当中,一定要有当前用来进行模型参数调优的经验数据,这就是咱们所说的训练级 结构和你现在能够去调参数的这个训练级都准备好了,咱就可以来进入到了模型的参数调优过程了,也就是训练过程。这是两个前提,在参数的调整之前,也就是在训练之前,这两个前提是要先做好准备的。 好,做好准备了,我们就来看看这个参数的调整是一个怎样的过程。首先,我的模型结构已经有了啊,我的经验数据也已经有了,我会在经验数据里边来选择一个样本啊,或者是一组,这个不重要。总之呢,我先选择一个样本丢进我的模型, 我们说模型就是一个函数,现在你就给这个函数了,相应的输入模型呢,它对应了一个运算步骤,所以你把输入放进来,就会在我们已经确定的运算步骤里边开始进行运算。第一步,第二步,第三步,一直运算得到现在的输出, 那我现在给它丢进去的图像就是我模型的输入步骤,我现在采用的运算步骤就是 alex net 这个具体的模型结构来对应我现在的预算步骤。好了,经过现在模型里边第一步,第二步,一步一步的计算,得到了模型的输出,这是我现在模型的输出。如果我告诉你这样的一个具体的当前啊,确定的七百八十四个数字,就是这张图像所对应的二十八乘以二十八,二十八的这个二维的数字,这个七百八十 四个数字丢进来了,怎么能够最后就能够确定得到这个数据呢?即便结构已经确定下来了,但是每一个层里边还涉及到了大量的参数, 我们已经能够得到最后的输出了,这些参数一定有值,那么这些参数的值现在是什么呢?那么它们具体是什么呢?它一定有具体的值啊,不然的话,我现在没有办法完成运算啊。拿个简单的例子来看,这口水还没喝到嘴里,哈哈, 打个简单的例子来看,比如说这里就是 w x 加 b, 我 知道我现在的 x 是 一了,那我这一步就是有固具体的值,现在是,比如说啊,结果是五,不能加引号啊,结果是五就是数值五,那么 x 是 一,我能够得到五,这个 w 何必一定有当前具体的数值啊? 所以现在我的模型结构已经确定下来了,用 alexnet, 我 把我就这张图像丢进了模型。这张图像的七百八十四个数字是固定下来的,那么得到了模型的输出,中间所涉及到的所有的参数一定有值,对吗? 那么这些值是什么了?哎,太棒了,我看到有答案了,这些在最开始的时候,这些参数的值都是随机数,所以由随机数构成了这些参数当前的值。在随机数的这些值里边,我们就把当前一个数据丢进去,让它计算得到了输出, 所以当前的参数有值,他们的值是随机数,我们就用随机数作为的出使值,开始去进行了模型当前的输出,这是我给他的输入一张图像,这是他的输出,他认为这个数字是二, 当然预测的不好,因为现在是随机数作为的参数的值啊,我们现在因为这些参数是随机数作为他的值,所以他的输出不好,所以下一步我们就要调整参数的值了呀, 所以我们往下看啊。但是这是第一步,我们把数据丢给现在的模型,它的随机数作为它的参数的值的基础上得到了当前的输出,但这并没有结束,我们的目的是在随机数作为初始值的基础上去进行参数的调优,我们来往下看,看看怎么能够完成参数的调优。 好,这是第一步,得到现在模型的输出。这是第二步,由模型的输出和本身这张图像的标签去进行比对,看看我们的模型的输出和当前这个图像的标签,也就是正确答案,看看它们之间差多远。 把模型的输出和图像的 label 进行差值的计算,这个差值就是我们所说的损失值, 那么得到差值的过程也就是差值的运算的这个函数就是损失函数。好了,这里我们就说了到底什么是损失函数以及损失函数的第一个意义,好,那么这是损失函数啊,以及我们在这里第二步要计算损失,我们现在说的是训练过程里面包含什么, 不管说多么复杂的函数,多么复杂的模型,其训练过程都一致。我们现在就拿简单的问题来告诉你所谓的训练这个训练过程是怎样的? 第一步就是把你现在手里的训练级的一个样本拿进去丢给模型,得到模型现在的输出。第二步就是由当前的输出去计去计算得到损失。好了,第三步 可以去调整参数了,那此时这个参数调整的目的一定是要让模型变得更好, 那怎么就算是更好的模型,只要损失值变得更小了,就说明我的模型变得更好了。好了,所以我们已经知道咱们怎么是更好的模型参数能够让损失变得更小,模型就是更好的模型, 同时这些参数也是更好的参数。训练的本质就是参数的优化过程,所以现在我就知道我应当如何去优化我所有的参数值了,只要我的参数是让损失变得更小了,我的参数就是被优化了。 所以在这我要算一算损失,因为下一步我就要往损失下降的方向去调整,去更新所有的参数了。所以第三步就是往损失能够降低的方向去更新所有的参数。 好了,到这里我们由一二三三步就由最初由随机数所构成的损失完成了参数在这里的一次更新 好了,这就是训练过程当中的步骤,所谓的训练的目的是优化参数,而优化的过程就是这样的三步,我们现在要做的事情就是由 刚开始的随机数的 w, 比如说我给它叫做零啊,随机数的这个值经过这样的三步得到了优化了一次的 w, 我 再换个样本进来, 首先我要在我的模型结构这里刚才优化好的这些参数值拿过来作为我现在模型里面的这些参数值, 好换个样本丢进去,在这样已经进行过一次优化的参数基础之上,再来做刚才的事情。 第一步,在现在的啊这个参数以及现在的数据这里得到模型当前的输出。第二步,由当前模型的输出去计算当前的损失。第三步,在当前的损失这里去调当前的参数,也就是我把我的参数由 w 一 就可以变成 w 二了。 这件事还是这样的三步,初使的这个参数值是我们刚才优化过的那个参数值。好了,还是这样的三步,我就完成了参数的第二次更新。 那么第二次的参数更新完了以后,我们就可以继续这么去做,在第二次参数更新的基础之上的模型这里换一些样本进来,再来进行第三次参数的更新。所以这件事咱们可以给他打个包,放到放循环里边。 一步。第二步,第三步。而这里呢,我们每次要换样本,看清楚了吗?换不同的样本进来,来进行这里参数的更新啊,我们把样本这里就循环完了,参数经过了若干次的更新之后,模型的性能就进行了相应的提升, 所以呢,大家当然最后要用代码去进行落地啊,去做你的实验,但代码其实都是工具,都是我们在这里的想法,用工具去进行的实现,所以你看这个过程清楚了,这就是我们训练过程的代码。 那我在这总结了一下啊,第一步,前向传播,把数据丢进来,得到模型当前的输出。第二步,来计算当前的损失。第三步,根据当前的损失去调整参数啊,新的参数一二三三步, 所以呢,我们就经过这样的训练,一二三三步给它打包到一起,放到负循环里边,一直到你认为当前的参数已经达到你想要的 这个标准了啊,达到了你的标准,我们这个循环就可以结束了,参数就可以停止调整了。那么此时我们的模型呢,就完成了它的训练,完成了训练以后就可以进行了,拿它去使用了,所以当我在这里有一些未知的数据,我就可以把它丢给我的模型,我的模型就可以得到理想的输出了。 前面训练的目的就是来找可以拿来使用的模型啊,所以训练完了我们的模型就可以这样来使用了。训练过程咱们就说到这啊,下面我们来看第三个部分,损失函数。好, 那损失函数的作用刚才在训练过程里边大家已经看到了,简单来看,首先就是它,它的第一个作用啊,就是来找差距, 来体现一下当前你模型的输出和你期待的结果之间的差值大小,这就是损失函数的表层意义。找差距 他还有一个深层的意义,深层的意义也和训练有关,刚才在训练过程里边,我们要求损失的目的是能够去找更好的参数,要往损失下降的方向去找当前更好的参数, 所以损失在这里,损失函数的一个深层的意义就是来找方向,来给参数的优化表明方向,那这就是损失函数的作用。 所以呢,你可以的任务结合损失函数的作用去找。当前的损失函数可以写成什么样子,我们可以自己定义,但有几个常用的,我们来一起看一看。 在这里呢,我们从两个经典的监督学习的任务来看他们的损失函数啊,这都比较常用的,第一就是回归问题,第二是分类问题,大家对于什么是回归,什么是分类,应该这个任务都了解,对吗?好,来说一下啊, 首先回归和分类这都是我们的啊,有监督的任务,什么意思呢?我想能够通过机器的学习或深度学习的学习过程,帮我们来找到的函数是来找数据之间的映涉关系的。 比如说我们现在有一张图像,图像里面有个数字好,它的映涉关系就是这个图和这个五,这个五算是个类别,它们之间的映涉关系, 所以有监督都是来找硬涉关系的。再举个例子啊,比如说我现在知道一个小孩的年龄啊,比如说是七岁,我知道他父母的平均身高 h 吧,父母的平均身高,比如说是一七零。好,那我可以来估计小孩现在的身高,比如说这个小孩七岁,假如说是一百二十五厘米, 看到了吗?那么这都是来找应设关系的。图像和这个图像里边是什么数字?这是有应设关系的年龄和父母的平均身高到小孩现在的身高,这中间也是有应设关系的。 九、监督的学习是来找应设关系,他们本身是有答案的啊,所以我们来找中间那个应设关系。在这里, 如果我是要来识别图像当中是什么数字,我已经知道了,图像当中只有一个数字,而这个数字不过就是零到九里边的一个,所以呢,他要么是零,要么是一,一直到九,只是这十个选项里边的一个。 做这样的选择题的任务就是分类任务啊,那当前就是有十个类别,零一二三四五六七八九十个类别, 分类问题就是做选择题,而这个回归问题是怎么样的?我来预测小孩的身高,他可以是一米二五、一米二六、一米二五点五等等,他的直域是个连续空间。回归问题我说清楚了吗? 什么是分类?什么是回归?好,这是分类和回归,对,就是一个离散,一个连续。好了。那么对于这两个经典的任务,我们经常用到的损失函数是这样的,对于回归,在这里咱们最经常用到的就是均方误差。什么意思呢?我把模型现在对于这个样本的预测的值 和这个样本的真实的值之间求个差值,再去给他求个平方,每个样本都这么做,再求个每个样本在这里的均值,就是均方误差。对于回归问题,这里咱们用到的最多的损失函数就是均方误差。 好了,这是回归问题,我们可以用这样的函数来表示他的损失,而这个函数表示出来了以后,一会咱们要去求梯度的时候,他也可导,所以好算, 我们说清楚了吗?这是回归问题。为什么要用均方误差?现在我们来看分类问题,分类问题在这里用的是交叉商,所以呢,在这啊,我们用的是交叉商啊,交叉商。首先你在这里模型输出的是对于每某一个类别的类别概率, 假如说这个类别呢?是在这里,首先分类任务是什么咱们已经清楚了,嗯,假如呢,我们就是两二分类好了,那么正例为一,负例为零,我们现在模型的输出是零点八,什么意思呢?代表它是正例的概率, 所以我们会把这个零点八拿过来和一来进行比对,得到当前的损失值,这是它的损失函数呢,我们用两个类别也好,用多类别也好,本质上都是一致的啊,这就是我们说的交叉商损失函数, 为什么他就交叉商摆在这,就能够解决当前对于多分类问题的损失值来找差距这件事呢?比如说我们现在来看啊,假如说我们现在是标签是一啊,应该是正例,那我的模型的输出是不是越接近于一,就说明我们的模型当前的性能是越好的。 好,跟上我的思路,我们来告我来跟大家说一说,为什么他就能够表示当前的多分类的这件事情的损失值啊?我,我来说一下啊,假如说我现在这个样本是正例,那么他的输出就应当是一, 而我模型呢,输出是零点八,所以跟他有一点差距,好,再来找零点八,那么这就是当前的损失值了,在这里 看到了吗?也就是这就是我现在的损失函数,所以你看看我这个蓝色曲线,我当前的样本,正例啊,它是为一 模型的输出,是当前正例的概率越接近于一,就说明是越好的,所以你看这个函数是不是越接近于一,损失值就是越小的。当它的这个模型的输出为一的时候, 丢到我这个函数里边,它的损失值就为零,零啊,而这个这个模型的输出是零到一之间的值,越靠近于零,损失值就是越大的,看到了吗? 所以现在我们这个函数就能够表示当前类别为一的时候它的损失了,而且它是连续可导的来, 这是唯一的时候。如果我们现在的这个样本是负利,本身是零,你看这个橙色的线,就是当我们的样本为负利的时候,那我的模型输出它的损失值是如何计算的?这个函数看到了吗?你看啊,如果我现在本身它是个负利,那么我就希望我的模型输出应该为零, 对不对?要是越接近零就是越好的,所以你看成色这条线越接近于零,损失值就是越小的。 所以每一个损失函数都能够体现是模型现在的输出和期待结果之间的差值,而且损失函数通常要可导、连续可导,这是分类和回归经常用到的损失函数是怎样的?还有一些复杂问题我们可以看看,比如说优喽 yolo 是 一个用来进行目标检测的模型,而目标检测要找的就是图像当中每一个物体的位置和类别,所以模型的输出就得包含位置和类别。那么我要去表示的损失函数,就是把比如说模型在现在输出的时候,那个位置 啊, box 那 个矩形框的位置,以及它的类别都拿过来去进行个纠正。而位置不就是个回归问题吗?类别不就是个分类问题吗? 对不对?所以复杂的问题,他的损失函数可能有多项来构成,继续去拆,也基本上都是落到了回归和分类这些事上。 好,如果大家对于干网络本身不熟悉的话,我就不再说这里的损失函数了,因为你不知道干网络在干什么,咱们这个损失函数也就不好去理解了。但是我想跟大家说的是,我们已经清楚了损失函数它的意义,找差距和来找方向,那么我们是可以根据当前的任务自己去进行损失函数的定义的。 很多时候大家想找一些新的方向,能够有一些新的成果,损失函数的创新也是一个创新的方向。对,对抗训练是一个通过对抗的训练过程,最后来找到一个可以进行生成的模型 啊。所以干网络是一个生成模型,但它的过程是通过对抗。怎么叫对抗?在过程当中这个是生成器,是咱们最后要用来进行生成的模型,但是训练他的过程给他配了一个判别器, 所以他俩对抗,那判别器是来判断一下丢给判别器的当前的收入,是你生成器生成的假数据还是真实的数据? 判别器用来进行判断,生成器呢?功能就是用来进行生成,生成一个期待能够骗过判别器的结果啊。所以有生成器,有判别器,他俩一起对抗着去进行训练,判别器的能力也就能够越来越好,他俩一起 向上上升啊,一起去进行交替的训练,最终我们找到一个好的生成器,就能够拿来去进行使用了。 所以在这个过程当中,生成器和判别器都是模型,所以你理解了这个对抗的作用,对抗的过程。至于生成器和判别器里边这个模型的结构就可以自己去搭了,搭全连接也好,搭卷接也好,搭串词方面都行, 都可以。这个判别器的损失函数在这就是个分类问题,来判断一下当前你给他的输入是生成器生成的假数据还是真正的数据,所以他在这做的是一个二分类的分类任务,所以他的损失函数不就是个二分类的损失函数吗? 啊?而生成器在这,他的目的是要去骗过判别器,所以呢,他就希望生成器生成的结果再丢到判别器里边,让判别器在这里的输出是往正就往真的数据那去猜的,也就是他的输出又接近于一, 在这里就是越好的,所以根据理解,咱们就可以构成他各自的损失函数了。好,我们继续往下啊。那么我们对于损失函数大概都有什么?咱们简单看过之后就可以来看看梯度下降了, 为什么?因为在这咱们要看看我们有损失值去找具体更好的参数这件事到底是怎么办的,这就是梯度下降在这里去解决的问题了,所以梯度下降同学们要知道它是用来优化参数的具体的方法。 当我们有了损失值,我们怎么就能够找到更好的参数值了呢?我们说要要往损失下降的方向去找的参数就是更好的,怎么就是有损失下降的方向了呢?有了损失下降的方向,又怎么具体的算出当前的参数值呢? 这就是梯度下降所做的事情。所以咱们现在来看梯度下降到底是怎样的,这块对这块是最麻烦的,咱们学生都学习梯度下降就是你最耗精力的地方, 在我的课程里边,我是会让同学去手撕梯度值的,通过梯度下降的方式去手撕参数的更新的,由一个具体的参数值,由当前具体的数值和模型的结构手撕出来,参数更新过之后具体的数字的,这是我课程的定位啊, 从这这部分就要这么去做的。但我们在这里的时候呢,会整体让你知道梯度下降为什么是参数的优化方法。首先 我们的梯度下降是参数具体的优化算法,也就是当我们有了参数,我们要把这个参数去进行调整的时候 的计算的方法是我们所说的梯度下降。再说啊,梯度下降就是现在深度学习百分之九十九,百分之九十九的深度学习的模型,不管你说的是 n、 l、 p, 还是计算机视觉 c、 v 啊,不管是卷积还是 transform, 这里用到的都是梯度下降的参数的优化方法,我说清楚了吗? 深度学习百分之九十九甚至以上都是用梯度下降来进行的参数的更新的,所以梯度下降是来告诉你参数到底如何得到更新啊,那参数的更新在这里呢,我们还给得回到训练过程里面来看, 训练过程里边我们会把当前的参数取的值放到这来,把我们手里有的训练级丢给这个参数的值,比如 w 啊,就是一个具体的值,比如说就是零点五。好了,在这样的值的基础之上,我们来得到模型的输出, 再去计算损失,我们说往损失下降的方向去调整参数,所以这个时候我们就把这个参数得到了更新啊,比如说我们这里的参数啊,由零点五我们就更新得到了,比如说零点八, 这是个参数的更新过程,所以我们由这个 w 零变成更新过的 w 一。 这个方法在这里边用到的是梯度下降。我说清楚梯度下降在解决什么事情了吗? 就梯度下降来干什么的?梯度下降就是把你这个参数来得更新啊,具体怎么就由 w 零计算得到了 w 一, 这中间就是通过梯度下降完成的,这是梯度下降在干什么? 我们清楚了,它的目的是把 w 零变成 w 一 啊,让 w 由初识的随机数去调优啊,具体得到了优化了以后的 w 的 计算的步骤,计算的方法, 那我们现在呢?回过头来咱们看啊,当前假如我的 w 出使值在这里啊,这是 w 零, 是一个零点几的这么一个负数啊,这是我的 w 的 出使值,那我的 w 的 出使值在这的话,对应得到了一个损失,这个是由我们前向传播得到模型的输出,再去进一步得到的损失,损失值呢,大概就是五 好,所以呢,我就确定了这个点,在下一步不就是往损失下降的方向去调整当前的参数了吗?如果我把损失和参数之间的关系用这张图给你体现出来,你一定知道我们现在的 w 是 应该往大还是往小调,来,往大还是往小调。评论区告诉我, 我们一定把这 w 往右调,往大调,因为你通过这个图你会发现,我只有把它往右调,才有可能让损失去变得更小,让损失变得更小的 w 才是更好的 w, 对 不对?所以我们要往右调,这是因为这个图我给你摆在这了,但是我们没有这张图啊, 如果你有这个图,你直接找到这个点不就完了吗?对不对?没有,我们只有这一个点,我们只有当前知道这个 w 零是什么值, 只有知道当前这个对应的损失值是多少,我只有这个点,所以我没有这个图,那我到这个点上,我得知道我要让 w 往大还是往小,怎么办呢?这个时候梯度就出现了,其实在这标量来看是导数啊。 好,那如果有很多个维度就是梯度了,那那梯度是什么意思呢?或者这个导数啊,在这,它是上升最大的方向。好,这就是梯度的意义,我说清楚了吗?梯度是在这个点上升最大的方向, 对,就是这块的斜率。好,没有问题,那咱们现在呢,能够计算得到 t 度, t 度 w 零点 red 啊,这个是东西,咱们是可以通过炼制法则从损失一路给它求过来的。这个东西咱们今天不展开,但是是肯定能够 去算出来的啊,这个 python 也好,也都是可以帮咱们通过计算图能够去算出来的。好了,我们有它就好去调整参数了, 我们知道了它,现在它如果知道了啊,我们是不是知道它是向上升的方向,咱得让它下降,对不对?所以呢,下降我们就得前面给它加一个符号,这不就是能够下降了吗? 这不就是一个能能够让 w 变小的一个方法了吗?所以呢,我们的 w 零就可以是这样去更新,那我把它写到这 w 一, 这是更新了以后的 w, 它就可以呢,由 w 零 让他往梯度的反方向去走一步,走多大呢?走梯度值这么大,这样呢,也就是我们在这个点就可以向下去走一步了。好,负号确定了我们走的方向, 现在我就确定了,我可以按照梯度的反方向去走一步,就是能够让损失变小的一个更好的参数了。那么这就是咱们梯度下降的公式,但是还不完整。为什么?如果你的梯度值很大?同学们, 我知道我该往右走,那你这一步但是迈的特别大,你一下子迈到这来了,这损失值不就没有降,反而升了吗?所以刚才有同学问我说损失变大了,怎么回事?下降一下,调小一下,就是你这一步别迈太大。 所以呢,在这呢,一般情况下,咱们还得让他梯度值前面去乘以一个限制他这一步变动步骤的东西,就是学习率啊,好,乘以在这,这就是学习率啊。 lr 学习率, learning rate, 它通常是一个比较小的数字,所以你看到咱们学习率通常情况下可能定义的为零点零零零一或者更小,你都可以去试,但总之它会比较小,它的作用就是来限制一下你这一步别迈太大。所以我们基本的思想就很简单了, 来,我知道这里的梯度是这样的,我往梯度的反方向走,这找的是我走的方向,也就是负号,但我这一步往正确的方向迈一小步 就可以了,所以前面有个学习率,学习率代表的是我步子的大小,所以呢,我们在这往正确的方向,也就是负号去迈小小的一步,对于我参数的一次比较有效的更新了,这就是咱们梯度下降的公式,我给大家写到这啊, dt 加一时刻的参数值,它是由 dt 时刻的这个值去减去这里的学习率乘以损失过来的,当前的这个求过来导数的,这就是咱们的梯度,当然多个维度就是梯度啊,它就是梯度值, 这就是梯度下降。到这里呢,咱们就把梯度下降说完了,那这是最基本的梯度下降,我们现在深度学习里面超过百分之九十九的模型的训练都是这样的,都是梯度下降。 只不过呢,我这个是最基础的版本,它可能会稍加一些优化啊,比如说我这一步呢,让它先卖大再卖小,走的可能会快一些,或者有一些其他的方式,但本质都是它,本质都是它,它就是我们现在深度深度学习里面超过百分之九十九的优化方法。 好,我们今天继续啊,来看激活函数。激活函数啊,简单来跟大家说,就是我们的模型深度学习不管是有多深还是有多浅啊,只要是神经网络是深度学习,他一定是限性结合非限性的运算。 所以在这你得先清楚什么是限性,什么是非限性,咱们就能够知道激活函数在模型里面的作用了。首先大家看到左边这里, 这里呢,如果数据的结构分布是这样的,那么我在这里呢,当然就可以画一条线来表示数据的结构了,横轴是 x, y, 这个这个 y 轴是纵轴是 y 啊,那么 x 和 y 之间的关系,我们就可以通过一条线来表示出来, 这就是限行模型,但是不是所有的问题,用一条线就能够解决太多的问题,只要是咱们现在想解决的那些复杂问题,什么人脸识别了,文本翻译了,对吧?那些一定都是非限性的,他都比较复杂,所以这样的就是 就是,比如说这样,这种啊,你得画个曲线吧?你说你用一个 w x 加 b 解决不了,你得画个曲线的就叫就是非限行问题,这是, 这是腺性,这是非腺性。好腺性和非腺性是不是就没有问题了?很简单,是不是好腺性和非腺性咱们就说完了啊,我们解决复杂的问题都是非腺性的, 而咱们的模型里边都是腺性结合非腺,所以腺性就是我们给,比如说全连接 w x 加 b, 这不就是一个腺性的过程吗? 所以你用它不能够解决复杂的问题,咱们就得在这个限性计算之后,再给他加一个非限性的转换函数,这个非限性的转换函数在模型里面就叫激活函数,它的作用就是来完成非限性转换的。我说清楚了吗? 为啥限性一定要结合非限性?因为限性不能够解决所有的复杂问题啊。举个例子,比如说我们现在在坐标轴当中,这些红色的是一个类型, 而这些蓝色的是一个类型啊,好了,那你说我怎么画线,我找什么线?是不是都不能够将这两个类别去进行区分呀?在这里我可以画个,目前来看,我是可以画一个圆将它区分,这就是一个非限性的数据问题,说清楚了吗? 所以我们要解决的复杂问题都是非限性的转换的过程,我们就得在模型里面有非限性转换的能力,激活函数就是在你的模型里边帮你来完成非限性转换这件事的,我说清楚了吗?对对对,大部分的现实问题都是复杂的问题,都得是非限性的好,没有什么问题了,对吗?我们继续继续往下, 所以你现在明白了啊,我们在模型里边,不管这个模型有多深有多浅啊,他都要有激活函数,因为在这是通过激活函数在模型里边的构成来完成非限性转换这件事的, 所有的激活函数都是用来完成成非限性转换的,所以呢,其实再复杂的问题都是限性结合非限性两个转换一步一步给他堆起来的。比如在这, 在这里我们可以先做一个限性的转换,比如说这个 z 一 啊,这是一个全连接啊,这个 z 一 呢,我们就可以用这个 w 一 一去乘以 x 一, 加上这里的 w 一 二去乘以 x 二,再加上这里的 b 一 一,这是一个限性转换, 限性转换,这是等号限性转换,这是 z 一, 但是限性不能解决所有的问题,所以我们把这个 z 一 拿过来之后呢,我们再给它经过一个非限性转换 啊,所以就这里这是一个非限性的转换函数,把自己音拿过来,经过非限性的转换就得到 a 一。 就这样我们继续讲向后传递,这是一个全连接的运算过程,所以我们再复杂的模型都是这样限性结合非限性的。比如说大家都经常来讨论 attention, 注意力 attention, 对 吧?那你这注意力的运算本身就是限性的,然后注意力的运算之后,我们给他加上一个非限性转换的函数, 听说了吗?我们的模型结构所说的卷积也好,全连接也好,其实都是限性的,在他们之后都再加上一个非限性转换的函数,就是我们在模型里面的激活函数了。好,激活函数,你给他理解成构成模型非限性转换那个能力的函数, 所有的激活函数都是非限性转换的函数。好了,我们来看常用到的激活函数,这个同学知道吗?哈哈哈,它是可以将一条线转换到零到一之间的一个非限性转换函数,它就是咱们经常这个俗称的啊,我们经常直接就把 sigma 的 叫做它了, sigma 的 函数就是这个啊,但实际上在这里说的并不严谨, sigma 的 指的是所有 s 型,只要是能够转成 s 型的,这种函数都是 sigma 的 函数。 s 型是 sigma 的, 具体来看,这个函数转到零到一之间的这个叫 logistic, 这是我们经常用到的一个激活函数。对对对,赵子龙, 是这样啊,是由一步一步的叠加,最终呢我们完成复杂的问题,是这样的,特别棒啊, 那么右边呢,也是一个 s 型的函数,它们呢?将数值不是压缩到零到一之间,而是压缩到负一到一之间,这是 touch。 touch, 好 了,这是我们经常用到的两个 s 型的激活函数,你看它们是不是都是非限性的,将线给它转成了非线 好了。另外还有一类比较常用的就是 re 路了,我们来看啊,这个是 re 路,他是怎样的呢?他是可以从零这来去一刀切零,左边的数值给他转成这个全部都为零,而零右边的数值实际上他是转成保持不变啊,这是 re 路,我说清楚了吗? raylu, 它很简单,它就是一个 max 函数啊,零 x, 如果这个当前的 x 比零小就输出零,如果它比零大就输出 x, 这就是 raylu, 懂了吗? 好,我们来看我们在大模型里面最多用到的这个 raylu, raylu 呢就是比 raylu 稍微圆滑了一点,它并不是把这块这个角 在这硬硬硬去给它转换的,而是在这呢有了一个小小的弧线,这样的话呢就可以在这呢有了一些转换,让它并不是直接去切。所以 ray 路呢,一般出现在图像里面,卷积神经网络,这比较有效。而我们对于大语言模型这些靠概率去进行计算,去去进行推导的这些 问题来看, g 六会比较合适一些啊。好了,这就是常用到的激活函数 ray, 有 这些到底是用的 ray 呢?还是用这个 touch 呢?还是用 ray 呢?是根据不同的任务来选的,每一个都有它适用的场景。 大语言模型,语言模型,大家用 g 六效果会比较好,卷积这里用 ray 会比较好。好了,我们今天的内容就到这里了啊。

好的各位同学,那么接下来呢,我们来讲解一个概念,损失函数。那么既然大家经历过我们上一节的这个实战案例啊,大家应该都知道,我们在实际的深度学习也好,机器学习的模型训练中, 那我们每一个样本呢,在输入到模型之后呢,都会得到一个预测值,然而呢,这个预测值和真实值之间一定会存在差值,那么这个差值呢,就成为了这个样本的预测值和真实值之间的损失, 当然呢,这个损失值越小,也就是说越接近真实值,那么这个模型就越是成功嘛。 在我们的深度学习算法当中呢,有很多不同类型计算损失值的函数,那么这些函数上的本质上呢,就是通过数学公式啊,来计算差距,从而来判断 我应该接下来怎么调整这个差距的函数。那一会儿的话呢,我会给大家呢讲解几个我们在 python 当中经常用到的几种损失函数。那在讲这个之前呢,我来补充一下上节课我们剩下的一个知识点,这知识点呢就是泛述, 那么什么叫做泛数呢?首先我们来先直观的感受一下啊,什么叫做泛数?如果在一个空间中有个二维向量啊, x y, 它坐标是 x 的 绝对值加上 y 的 绝对值,那么它的二泛数呢,就是 x 的 绝对值平方加上 y 的 绝对值平方,再开一个方。 而这个向量的三泛数呢,就是 x 绝对值的三次方加上 y 绝对值的三次方除以 三次根号,以此类推呢,它的 p 泛数就是 x 的 绝对值的 p 次方加上 y 的 绝对值的 p 次方开 p 四根号啊,呃,当然呢,这个里头,如果说当 p 趋于无穷的时候呢, v 的 无穷范数呢,那就不是这个公式了啊,那么它的公式呢,就变成了取 x 的 绝对值和 y 的 绝对值中的一个最大值。 好,那么从数学的角度来了解了二维空间向量的范数之后呢,我们来看一下啊, n 为向量的范数 是怎么去运算的,那么 n 为向量 x 的 组成呢,我们可以把它理解成 x 一 x 二点点点点点 x n 啊, 这样的一个向量。好的,那么 x 向量的一泛数呢,就是 x 一 的绝对值加上 x 二的绝对值加上点点点加上 x n 的 绝对值,也就是绝对值,每一项绝对值的和啊,就是一泛数, 那么二泛数呢,就是每一项绝对值的平方之和之和加起来再来一个开方啊,再来一个开方,以此类推, p 泛数也是一样,绝对值每一项绝对值的 p 次方加和,然后开 p 次方。 好的,那么呃,这个泛数的话呢,在拍套制当中,当然它也提供了公式啊,直接可以算 向量 x n 结泛数的一个函数啊,那一会呢,我们在代码中呢,也会带领大家练一下,那么这个泛数呢,为什么在损失函数里讲啊,因为有很多损失函数,它的数学公式的计算结果都跟输入特征的泛数 的值相关,所以说这里呢,给大家补充一下泛述的知识。那么接下来我们来看一下第一个常见的损失函数啊,叫做平均绝对误差损失函数,那么这个损失函数呢,也叫做 l e loss, 就是 大家可以看到啊,这个函数里呢,我们 y 代表真实的标签,而 y h 呢,当然代表预测的标签,那么我这个 l e loss 函数算出来的就是 每一次用真实值减去预测值啊,那么这个绝对值呢,就是他们之间的差距啊,这个绝对值呢,就是他们之间的差距。 好,那么这个差距的绝对值相加,大家会发现,其实这个就是差距的 l 一 算数吗? 哎,所以说呢,它也叫 l e l s 函数啊,那相加之后呢,再除以一个 m 啊,就是取一个 l e 泛数的平均啊,除以一个 m 就是 它最后得到的一个值啊,一会呢,给大家用代码来验证一下这个公式的正确性。在 pad 里呢,我们用 n n 点 l e, l s 就 可以直接调用出来这个 损失函数了。好,下一个我们来看第二种常见的损失函数啊,叫做 mse 均方误差损失函数。那么均方误差损失函数呢?也是啊,先呢,我把真实值和预测值之间的差距给算出来,并且呢,把这个差距平方了, 平方了之后再加和啊,那么这个就叫尊方损失啊,尊方损失加和之后呢,再除以这个数量 n 就 可以求出损失函数的值了,那么它呢,用来衡量的是模型的预测值之间和真实之间的平均差异。如果说我们有一组数据的时候,我们可以将每一个数据的差一相加,然后求平均值,这个也是 mse 平均差异的这个算法,那么它在 python 里可以用 n n 点 m, s e l s 这个函数呢,直接求出结果。好,下一个损失函数叫做 交叉商损失函数,那么这个交叉商损失函数呢,用的最多的是在分类任务里,也就是说呢,我的预测值是一些离散的值, 是一些离散的值,而不是连续的值啊,连续的值那是回归问题,那么他呢,主要是用来做分类问题,比如说呢,我们有一个数据集啊,来要来做这个 图像识别,那么我图像可能能识别出来类别大概有这个二三十种,甚至是一二百种,对吧?猫啊,狗啊,车呀,房子呀等等,那么这些值呢,都是离散的分类任务啊,那么在解决分类任务当中,我们 经常用到的就是这个交叉商的损失函数,那么这个函数呢,它描述的是模型的预测值与真实之间的差异。 好,那么大家可以跟我一起先看一下这个函数啊,这个函数呢,它是用真实值乘以这个 log 的 预测值,加上一减 y, 真实值乘以一减预测值的 log, 然后呢,把这些值都相加,再除一个 n, 然后再取个负数啊,那么实际上呢,大家会发现啊,这个式子里虽然看起来蛮长的啊,但是呢,如果说当你的 这个预测值 y 等于零或者是一的时候,那么这个式子呢,都会出现一个结果,就是 这两项相加呢,等于零,对吧?你看,比如说等于零的时候,那么这一项呢,就是零乘任何数等于零嘛,然后这一项就是一乘 log, 一 log 一 就是零嘛,也是任何一项等于零啊,然后同理来说,一带进去也是一样的,为什么会出现这样的一个结果啊?比如说我们在经典的二分类的问题当中啊,比如说 这个东西要么就是猫,要么他就不是猫啊,那经典的二分类问题,其实他的 真实值就只有两个,零或者一,也就是说呢,当我的预测值要是真能达到零或者一的时候,说明我的预测值和真实情况呢一致啊,那这个时候你算出来的整体的交叉商呢?就是零啊, 如果说你但凡不等于零或者一的话,那么你一定和零或者一这个这个真实结果之间有一个正的交叉商啊,就会有一个正的值。 那么交叉商这个里头呢,我们 n n 也是直接提供了函数来供我们去运算,那当然这里头呢,你既可以返回 n 份样本之间的 l s 啊,也可以返回整体样本之间的 损失的和,也可以返回平均啊,就是你参数怎么去设置的问题了。好,那么接下来的话呢,我们来进入代码来看一看损失函数的应用。 好的啊,那么接下来呢,我们来练习一下泛数的应用啊,就泛数这个函数呢,上节课我们也讲了叫做 norm。 好,首先呢我们泡到一个 touch, ok 啊,那我们现在呢先构建一个张亮,那么这个张亮的话呢,我给它构建成一个三乘四的吧, 第一个呢,比如说一二三四啊,然后呢第二个比如说来一个二四六八吧, 然后第三个我们来三六九十,嗯, 好,然后呢 d type 等于一个 float 三十二啊, touch 点 float 三十二。 ok, 好, 有了这个之后的话呢,我们直接啊就用 touch 点 null 这个函数, 大家可以看到啊,这里边的话呢,他的第一个值的话,你要传进去,对,他就是你要算的这个张量的值,然后呢第二个参数呢,就是这个 p 啊,这个 p 呢,就是你要求 l 几范数,比如说现在我们要求 l 二范数的话,那我们 p 等于二就可以了。 嗯, ok, 然后第三个值呢,就是它这个 dim 啊, ok, dim 这个值如果你不给的话,那么它就把你整个的张量的每一个数挨个求平方和,然后去开一下方啊,去这么求二分数,那如果说你给一个 dim 的 话呢,比如说我们 dim 啊,等于一个一,求一个二分数。 好的啊,那现在的话呢,我们首先来看一下 print 一下这个,我们来看看它是一个什么值啊? 好,大家可以去算一算啊,一的平方加二的平方加三的平方加四的平方等于多少?然后呢这个数开方你看看等于多少啊?大家可以去算一下啊。 ok, 那 假设的话呢,我不加这个 dim 等于一, 嗯,它呢就会得到一个一乘一的一个呃,张量啊, 好,那么由此你也可以看得出来,就是泛数它其实也算是会压缩维度的一个聚合类的一个函数啊。 好,那么大家也会发现啊,当 dim 等于一的时候,它的一个张量呢,变成了一个呃,一乘三的,对不对?也就是维度发生了一个转换啊,如果说你想着让这个维度不发生转换的话呢,那么我们可以保持一个 keep dim 啊,等于处就可以了 啊,这个 keep true 的 话呢,在我们之前的这个运算中大家也经常见到过啊,那那么它的这个维度呢,就不会被拉伸啊,就是保持原来的这个维度的信息。好的啊,那这个呢就是 num 函数,那么接下来呢,我们来看关于 pad 值当中损失函数的用法, 我们还是新建一个文件 这里呢,我 import 一个 touch 啊,这里头的话,我先输入一个预测好的这个张量啊,叫做 y hat, 那 么它呢等于 touch 啊,点 python 啊,我们来二三四五, 然后说明一个 d type 等于一个啊 touch 点 float 三十二,这个 d type 的 话,我建议大家在做预算的时候啊,都给它写上,其实是上一节的话,我们做简单神经网络的时候,我就给大家说了,就是有的时候呢,在神经网络里这个 运算呢,会比较的复杂啊,就,而且它隐藏层的黑盒子的运算非常的多,所以说为了保持数据类型的一致,最好是我们在声明探测的时候,你要去固定一下它的 type。 好,那么我们真实值呢,也定一个 touch 点 python, 然后这里头我们直接复制了, 比如说我们真实值四五六七啊,四五六七,好的,那么现在呢,我们打印一下 y hat 和 y 啊, 那么这个呢是正常的生成的,那么接下来呢,我们就要求这个 l e 的 loss 了,那么在 n n 里呢,它提供的这个 l e loss 呢,其实就相当于有点像一个接口一样,所以说呢,我们得先用一个长量 loss 来承接住这个接口啊, n n 点 l e loss 啊, 好,然后我们再用这个接口来计算 y hat 和 y 的 差距。 ok, 那 么现在的话呢,我们可以直接把这个差距给 print 出来啊, 好,那么我们来运行一下, ok, 那 我们就得到了一个 l e 的 loss。 好, 那么大家可以看一下啊,它们之间每一个的差距的绝对值是不是都是二啊?所以除以平均之后呢,也是二啊,这个呢就是 l e 的 loss。 那 么同理来说, 如果说你想求 mse 的 loss 以及啊交叉商的这个损失啊,都是一样的。嗯,比如说呢,我们这个叫做,嗯, l e loss 吧, 然后呢,我们再来一个 mse loss, mse loss 它呢等于 to 十点 n n 点 mse loss 啊,用法呢是一样的。 好,然后这个交叉商呢,我们也来一个吧, 我们就直接返回它的这个 n c 样本的 loss 就 可以了啊, 嗯, ok, 把这个真实值和预测值传进去就 ok 了。 好,那么大家可以看到啊,这个损失的值呢就已经得到了。呃,如果说的 大家感兴趣的话,也可以自己在数学上去验证一下啊,那么这里头呢,我想跟大家说的就是这个 l s 的 用法,你不能直接在这里头传给把这个值传给 n n 啊,因为 n n 呢,其实它相当于是一个鸡肋。后面的话呢,我们 去做所有 n n 的 操作的话,都要继承 n n 的 这个积累,然后在我们自己的类上去做操作啊,所以说这个里头也是一样,我们继承的实际上是它的一个呃计算的接口啊,然后我们用自己的这个函数的名字去计算就 ok 了。

今天来了解一下什么是损失函数。损失函数也叫目标函数或者代价函数,是机器学习和深度学习的核心概念。 它量化模型预测结果与真实值之间的误差,用于指导模型参数的优化方向 来看视力对于零和一这两张图片分别给出实际结果和预测结果。以零为例,因为图片是零,因此这里是零的概率就是百分之百,是一的概率是百分之零。同时,我们假设模型预测时是零的概率是百分之八十五点五, 是一的概率是百分之十四点五。如果从这个结果看,模型预测基本是对的,那么我们如何量化这个预测结果呢?我们就可以用一减零点八五五的平方加上零减零点一四五的平方除以二来计算, 同理可以对数字一图片进行相同计算。我们把这个计算公式就得到了军方误差损失函数 mse。 最后我们把两张图片的损失值相加,就得到了本轮预测的最终损失值大 c。 我 们来对这个损失函数总结一下。 这个损失函数叫做军方误差损失函数,它适用于各类预测任务。由于函数是光滑曲线,因此利于后续的梯度下降计算。缺点是对异常值敏感, 对于其他问题也均有常用的损失函数,这里列在了下方表格里,大家有兴趣可以自行了解和学习。

上次说到继续学习,就是找一个最优的方程来解一个推测的一个问题,比如推测图片是什么,推测股市涨跌等等。李宏毅教授用了当年一个火爆全网的游戏我的妖怪 go, 把找方程的过程做了一个非常详细的分析。嗯,先介绍一下口袋妖怪勾。这是一款虚拟现实游戏,它可以在手机上投出你所在城市的地图,然后在地图上显示找这个口袋妖怪的这个任务。 当然,年纪跟我一样大的应该知道,他以前在动画片里的名字是宠物小精灵。然后手机根据定位来判断你 是否真的到达了城市的那个位置。如果真的到达了,那就能找到口袋妖怪。然后你把它收到你的精灵球里,再把它养大。嗯,最后跟别人去对战。当年国外满大街都是一头找妖怪。 说到底,这还是一款宠物养成类的游戏。也就是说,你抓住的妖怪如果进化以后特别厉害,那你就赚了。所以,如果能够预测你找到的后代妖怪将来的航班 boys, 也就是战斗力 cp 值能升到多少, 对玩家来说还是有点意义的。这里呢,列举了杰尼龟和雷精灵长大前和进化后的 cp 值的比较。哎,你看,从这个六幺二长到了九七九,雷精灵就更厉害了,七零六 直接翻倍涨到了幺四二零。好了,游戏背景介绍完了,下面咱们开始言归正传,来找继续学习的那个方程。首先选择方程的种类,我们假设它是一个陷阱方程,咱们 就用中学学过的最简单的外等于 a 加 b 乘以 x 的形式。这里埋个伏笔啊,不一定非用线性方程。后面我们会在尝试使用一些更复杂的飞线行。 那机器学习里呢,那个 y 等于 a 加 b x, 嗯,我们是一般携程,嗯, b 加 w x。 这个 b 呢,呃,就代表是八, s 是这个偏离度。 w 呢,就是 v, 就是权重。我们的方程集合呢,就是 e 和 w 取不同值时,一个线性方程,比如外等于十加九 x, 外等于九点八加九点二 x。 下一步呢,就是要从这么多的现行方程中找到一个最优的。怎么找呢?我们就要用到训练数据。比如最开始杰尼龟和雷精灵的数据就是训练数据。杰尼龟小时候的 cp 值呢,就是 x, 接尼龟进化以后的 cp 值呢,就是 y。 那雷精灵呢?当然也一样。但是这个 y 呢,我们会在上面加一个小曲线,不做 yhat, 一 就是戴帽子的 y。 那 y 和 y 有什么差别呢? y hit 是我们训练数据样本的实际值,是真实的结果。而 y 呢,是拿前面的方程用 x 计算出来的推导值, 他们之间是有一定差距的。除了杰尼龟和雷精灵以外。嗯,实际上还找了十个口袋妖怪的这个训练数据样本。嗯,我们把这十个样本的数据画在坐标轴上,那就是十个点。十个点的横坐标呢,就是 x。 动作标呢,就是 yhat。 然后回到我们的目标,就是要找一个最优的线性方程, y 等于 w 加 e x。 如何通过这十个点找到这个最优方程呢?这里呢,就引出了拉斯方程的这个概念。这个拉斯方程损失函数呢,就是用来衡量及 集合中一些方程的好坏。如何衡量呢?看一下拉斯方程的这个表达式。实际上呢,就是用追宁贝塔的这个 yhat 减去集合中方程算出来的 y, 实际上呢,也就是 d 加 w 乘以 x。 理论上呢,方程越好,这个线性方程计算出来的 y 跟这个 y 汉就应该越接近,所以 y hit 减去这个 y 的值就应该越小。另外呢,就是要考虑所有十个菲尼杯的, 也就是训练数据,所以要计算所有十个追拧逮他的 wifit 与 y 的差值,最后再做一个加总,加总,人越小越好。另外,发现没有,当我们把十个已知的吹牛 d 塔 带入这个劳斯方神以后,嗯,劳斯方神的 wifi 和 x 就已经是已知的数据了,所以未知数就只剩 b 和 w 了。所以呢,找这个最优方程的这个逻辑呢,就是让劳斯方神 最小。换句话说呢,就是要找到一个 b 和一个 w, 让这个 los 方式呢,这个值最小。那么用这个呃找到的这个 b 和 w 组成的 y 等于 b 加 w x, 就是我们要找到的最优方程。 由于这是一个简单的线性方程,所以呢,呃,如果你还记得中学学过的最小二乘法的话,你就知道那个 b 和 w, 嗯,是 可以计算出来。不过呢,还有一个更强大的方法,那就是梯度下降法。这个方法呢,不止适用于线性方程,还适用于飞线性方程。嗯,时间有限,咱们下次再介绍吧。我是古依赖嘛。嗯,下次见,拜拜。

发现一个特别适合发论文的方向,损失函数加自注意力机制。损失函数加自注意力机制在深度学习领域是一个热门研究方向,它可以提高模型的性能和泛化能力,帮助我们构建更加精确且高效的模型。 将自注意力机制引入损失函数,意味着在计算损失时不再对所有样本或特征一视同仁,而是根据他们的重要性赋予不同的权重。这种权重的分配可以基于数据本身的特性,也可以基于模型在训练过程中的表现。例如,在分类任务中,对于难以分类的样本或少数类样本可以赋予更高的权重, 使模型更加关注这些样本,从而提高模型对少数类的识别能力。在回归任务中,对于预测误差较大的样本可以赋予更高的权重,使模型更加努力的去拟合这些样本,从而提高模型的整体预测精度。另外,我整理了十篇关于损失函数加字注意力机制的最新论文及代码,方便大家参考。

大家在初学深度学习的时候啊,不知道有没有思考过一个问题,当我们训练一个模型的时候,他是怎么知道自己学会还是没学会?比如说你让 ai 去生成一段话,他是怎么知道啊,这么深层就一定是对的,而不是输出一段外码呢?今天给我几分钟啊,我将带你透彻深度学习里面的学习二字,记得点赞收藏啊,我们这就开始。 首先,什么是损失函数啊,用最通俗的话来讲,它就是一个衡量差距的计算器,那衡量的是谁和谁之间的差距呢?当然是期待的标准答案和你这个预测答案之间的差距。 想象一下啊,你在练飞镖把心呢,是十环,这是我们期待的一个分数,也叫做真实值,你第一次扔没有经验啊,啪一下扔到了这个五环,而这是你的实际分数,也叫做预测值。 那你这次表现如何呢?就是你离这个靶心还差多少距离呢?这个距离在数学上量化出来就是损失值,也叫做 loss。 而深度学习呢,在训练的过程中,其实就是一场以降低 loss 为终极目标的游戏,而 loss 越大,说明 ai 错的越离谱,所以我们希望惩罚就越重,那 loss 越小呢啊, ai 预测的就越准, 如果 boss 变成了零啊,恭喜你,你要么是训练出了一个神级模型啊,要么就是你过你格了,又或者呢,你的训练级跟测试级混着用。所以说呢,损失函数的作用就一句话告诉模型,你离正确的答案还差多远? 可能有的小伙伴会问,哎,这不就是做减法吗?是吧,用正确答案减去预测答案不就行了吗?这种想法对也不对,事情没有那么简单,针对不同的问题呢,我们需要用不同的方法去测量这个误差啊,这也就是为什么有那么多种损失函数,无论是机器学习还是深度学习啊,大致都会分为两种任务啊,回归和分类。 我们今天只讲两个最常用的损失函数啊,我们先从回归讲起啊,当当当啊,军方误差损失函数啊,我们可以简单的来分析一下这个公式,因为我们给模型输入的数据一般都是啊一批一批输入的,所以这里计算的误差呢,是每个 batch size 计算一次啊,效率更高。这里的 n 呢,就是批次大小 啊,除以他的目的很简单,就是获取平均的一个误差。在回归任务中呢,比如说预测房价也好啊啊,预测股票具体数值啊,当然可以使用刚刚的思想啊,就用这个标准答案减去预测答案的方式来计算误差,因为回归是将预测具体到一个数值上。但是为什么这个军方误差损失函数需要平方一下呢? 有三种原因,一种是从直观上来看,可以放大偏差啊,惩罚极端错误。比如说当你的误差较小的时候,比如误差为一啊,平方时候仍然就会比较小,对总损失的影响就有限。 但是当误差较大的时候啊,平方就会啊嘎嘎猛增,这种特性呢,就会迫使模型优先降低大的误差啊,避免出现这种极端离谱的预测。二呢,就是它可以消除正负抵消啊。如果不平方,假设一个批次有两个预测,他们分别预测偏高五和偏低五,那相加之后不就为零了吗? 这样就会让模型误以为啊误测的非常的完美,但实际上它错的很离谱。当然绝对只眼能解决这个问题,但是它会引发出一个更严重的问题。 我们可以看到,如果使用绝对值作为这个损失函数,那么误差在零点的这个值它是个尖的,计算出来的这个误差如果小于零,则斜率是负一,若大于零呢?而这斜率是正一。 稍微学深入一点的小伙伴应该知道,深度学习主流的优化算法,梯度下降法是依赖损失函数的导数来计算,这个优化的方向和步长的 误差越小,按道理来讲,你优化的布长也应该越小才对。而他这里无论误差在多少,但布长总是负一和正一,这样就会导致模型在接近终点的时候,布子还是卖的很大,容易在最低点附近反复横跳,难以稳定收敛。如果有不懂梯度下降法的小伙伴也不要着急,你可以想象这是一种优化方法, 这种方法呢,可以根据损失函数的梯度来算出模型参数优化的个方向,这个方向呢,能让模型沿着的误差最小的方向啊,优化参数,从而更新模型。好,这个是回归任务中比较常见的损失函数,而分类任务为什么不能使用刚刚的这个 mse 呢?很简单,因为分类输出的往往是一个概率, 比如预设这张图啊,是不是猫或者给定一个句子啊,让你来判断这个句子是消极的还是积极的。你怎样来计算图或者画跟标签的差值呢?这样再使用这个 mse 是 不是就不太合适了?所以就引出了第二个数学函数幺叉商。想要弄清楚它呢,就得先说说什么是信息量。 在信息论里头呢,一件事情发生的概率越低,它一旦发生,包含的信息量就越大,也就是越让人惊讶。比如说,如果我告诉你啊,明天的太阳从东边升起,你肯定毫无波澜,因为概率几乎是一这句话的信息量接近于零。如果我告诉你,奥运会中国乒乓球连预选赛都没挤进啊,你肯定惊掉下巴, 因为这事的概率极低,所以它包含的信息量就贼大。那我们要用什么数学公式来模拟这种情况呢? 当当当啊,有没有发现, log 函数其实天然呢,就很类似于我们刚刚的想法,假设这个横轴是这个概率值啊,重轴是这个信息量, 那么现在呢,是概率值越小,则信息量也越小。但是我们如果在前面再加一个符号呢?是不是直接就和我们刚刚想的这个结论一致了?当一个事发生的概率越小,他所表达的信息量就越大。 比如说,当概率接近于一的时候啊,那信息量就接近于零,表示,哎,你猜对了,所以我不惊讶,所以惩罚就为零。 而如果概率接近于零的时候呢?啊,这重坐标啊,原地起飞,说明惩罚就非常的大。固定了这么多啊,终于要请出今天的压轴主角啊!交叉商公式,这里呢,是二分类的交叉商公式啊,大家先不要被这个公式吓跑啊,看的很疼啊!其实很简单, 这个 y 是 真实标签的概率,而这个 y 一 八呢,是这个预测标签的概率。在二分类里头啊,标签只会有两个,比如说判断是不是猫啊,是就是一,不是则为零。 当真实标签是一的时候啊,此时 y 等于一,你看公式的这个后半部分啊,一减一,是不是就变成零?所以说后面那一长串直接就消除掉了,公式直接就简化成了前面这一部分,我们把这个数值带入进去, 就变成了这个样子。而这又回到了我们刚刚说的这个 log, 如果模型预测他是猫的概率啊,是零点八,也就是百分之八十, 则这个负 log 零点八几乎接近于零啊,惩罚很小。但如果你预测他是猫的概率是零点一,也就差不多在这个位置, 则这个负 log 零点一啊,就比较高了,这个分数惩罚就比较大。当真实标签是零的时候啊,你看公司的前半部分 y 零的时候,是不是就直接消失了,也就只剩公司的后半部分? 这就很有意思了,因为你要预测他不是猫,所以你的预测概率越接近零,是不是就越好啊?如果你的预测概率还是这个零点八,那我们把这个值带入进去,那么一减掉这个零点八啊,是不等于零点二, 而负 log 零点二,它的损失其实是很高的,对不对?也就说明明这个不是猫,但是你去预测它是猫的概率是零点八,这就说明你简直是在胡说八道,对吧?但是如果你预测概率是零点一,也就说你很肯定的预测它不是猫,那么一减掉零点一,是不是就得零点九?而负 log 零点九的值,它其实就非常接近于这个零 损失就很小,说明你预测的就没毛病,对不对?好了,讲到这里,相信你已经知道模型为何知道这个零损失就很小,说明你预测的就没毛病,对不对?好了,讲到这里,相信你已经知道模型的这个 log 值吗?对吧, 但是这个 lo 式值怎么能指导模型来训练呢啊,这就涉及到刚刚讲的这个优化器的部分,比如说梯度下降法,但是由于这期视频呢,主要是讲解损失函数的,所以优化器部分就放到以后的视频当中更新了。 好了,就总结一波,损失函数的本质呢,就是给模型的一个打分老师啊,用来衡量真实值和模型预设值的差距。而训练模型的本质呢,就是通过调整其参数啊,使得模型输出的值跟真实值越来越近,也就是 lo 式越来越小。同时呢,他还负责给优化器主路啊,告诉模型如何修改自己的参数啊,不过这个是后面的内容了, 即使人生也像训练模型啊,我们都在不断的面对自己的错误啊,调整自己的参数啊,最后希望大家的 lo 式啊,都能早日收敛, 觉得这期视频对你有帮助的话呢,请一定不要吝啬的一箭三连啊,这对我真的很重要,下期视频见!

警告,本视频耗时两百个小时,制作时长共七十二万秒,我将一口气将你从零开始学完目标检测优漏系统教学知识,全程无废话,快速学完所有重难点。由于时长太长,本视频先带你过完 目标检测优漏。现在咱们这任务当中啊,真的就相当于是万事俱备,只差我们的损失函数了。已经把我们的啊,就是后卷框啊,其实现在我们不叫后卷框了,经过了两轮筛选,我们得到正样本,是不是来把咱们的正样本跟咱们 g t 之间要去算这个损失了?刚才 a d 还能说了,刚才咱们也算损失了吗? 刚才我们算这个损失啊,是为了找正样本,现在是说找到正样本之后,我们要实际看一看模型的预测的跟正样本之间的差异,好去更新它模型的参数了。是这样一件事啊, 来往下一走,往下走的过程当中,接下来第一步啊,这一块,这个这个就是我们这有八十四十二十,就是咱们一会分三层,每层他的一个特殊大小啊,八十四十二十,如果说大家你没改网络结构,跟我用相同配置软件,就是这三个数啊,那 下面呢?我们是一层一层去做啊,就是咱们这个损失啊,也是分层去做的,然后再做一个相加就可以了。来第一步,第一步大家看这个数吧,其实把手往这一点, 大概十八十八啥意思啊?是不是在我们第一层当中我们有十八个,然后再往下再往下一步去做啊?其实这些数啊都是我该做好的,你看是我该做好的,只不过是我们现在就取出来是不就可以了?然后第二件事呢,我们把这个 一会我们要遇到的一个知心度,咱把这个知心度先置零啊,就是一会知心度啊,我们要赋值啊,大家能知道知心度该怎么赋值啊? 其实知性度这个东西啊,它不是零和一真实值,它也不是一样,真实值它是按照我们那个 i o u 啊,就是我们那个,就是后选,就是正样本和 g t, 它之间实际的 i o u, 当做它的一个知性度啊,可能 i o u 是 达不到这个一的, 比如他达到零二八,那我说他有百分之八,他,他的标签就是他有百分之八十的可能性,是个正样本啊,就这种感觉啊。好了,这个是我们一会往下复制啊,咱们现在是拿底油选做一个抽象。第一步呢,我们说当前这一层当中啊,一共有十八个啊,一共十八个他给的这个东西,然后接下来我去取呗, 取啥?在我们这个对应的位置是不是?你看这个对应位置是不都有了啊?这不都是咱刚才说费了吧劲做这个锁影吗? 来把这个锁芯拿出来,我们要看一看在这些位置当中他的一个啊,预测的值是得多少?来这一块我们再取预测值。大家都说老师刚才不取个预测值了吗?咋又取了?刚才取那预测值啊,是算啥?算你哪些中央本上有中央本呢?现在有中央本,我们要算损失啊,是两个事 来,在任务当中先拿到我们的 grade, grade 不 就是我们的一个位置吗?就在特征图当中他的一个啊,锁芯的一个位置吧,他是属于哪个 grade? 接下来呢,我们得到咱们的 x、 y 的 预测值,跟它一样,就这东西跟它一样,我就不给他重解释了, x、 y 怎么得到的和 w 是 怎么得到的,跟我们刚才做法是完全一模一样的啊。然后接下来我们把它组成一个 boss, 好, 这块我们组成一个 boss, 然后组成完这个 boss 之后, 哎,我们说这个 target 当中啊,咱们刚才存的不都是我们的一个叫啥?叫做我们的一个真实值吗?它是有重复的啊,我在这个真实值当中,接下来我就去看我们的真实值和你这个 boss 之间的差异,算这个不就可以了吗?然后这个 target 当中,大家注意,我们是选二六啊,就是二三四五,二三四五啥意思呢?呃,它对我们来说啊,就是 我们取的就是 x、 y、 w、 h 取这几个维度啊,然后再乘上,因为大家来看这里边数值。呃,你看这里边数值啊,就是你别看前面俩啊,看后面这四个, 后面这四个怎么样?后面这四个它都是小数的,是不是?所以说我们对它做个还原,还原到哪呢?大家注意不是还原到原始输入图像当中,因为我们实际在预测时候预测的是个偏移量,咱们要还原,还原到哪,还原到特征图当中,所以这一块我们乘上特征图的大小啊,比如这块 a 等于零,那就乘到八十。 好,我们来先来看这里,大家来看我们得到结果,是不是说啊,都是一些,就当然都是一些实际数字吧,就是相当于我们预测当前你这个中心点,它是落在哪个格子当中啊,是这样一件事,以及你的长宽。 好了,到下一步,下一步任务当中大家来看,我们要做个减法,这块做个减法的意思就是说,呃,我们现在要得到的就大家先看这个吧, 你看这里边我们得到值这个十八四,得到这个十八四,大家看前两个值,前两个值都是小数,都是从零到啊,就都是从我们这一块给大家看出来的,这是我们这个预测值的一个取值范围,是不是? 所以说现在我们要得到的是我们格子他的一个偏移量,咱刚才不是说了吗?偏移量是从那个负零点五到那个正的一点五之间吗?所以说现在我们乘这个格大小相当于你得到的是一个实际的位置 啊,就是在这个特殊当中得到相对的一个位置,可能十三、十二,可能十五、十七之类的。但是呢,我说咱减去他实际格子的大小啊,我给大家画一画,就这样,就是现在啊,你拿到的可能是这个点,这是零一二,这是零,这是,呃, 画错了,这是零一二,好吧?然后这个点正常是一一,是不是?然后我们现在拿到这个点,可能是这一块,他可能是一点三, 逗号一点三,但是我要想知道的是它这个偏移量相对大于这个格多少,是不是?那说来减这个一啊?减这个一是减啥?减这个一不就减这格里的这个东西吗?所以现在我们拿到它实际的偏移量来,这一步咱得到偏移量大小, 你看我的偏移量值都是小数,是吧?你看这我们偏移量啊,咱拿到手了,然后有了这个偏移量,就是这是我们预测的偏移量, 这个呢,这是它实际量,这是我们实际的,我们从真实值,从它给它取出来的实际的偏移量。预测的偏移量,我们算这个 i o u, 这个算那个 c l u 啊。 c l u 其实比较简单,就是说不仅考虑我们充电面积,还考虑中心点距离,还考虑我们的一个宽高比啊,综合这三个指标去算我们这个 c l u, 然后算这个值,算出 i o u 值之后啊,我们说现在我们要算下损失,你告诉我值没用,那啥叫 i o 损失呢?我说 i o u 最大为一一减, i o u 不是 有损失吗?好,这一块大家来看,第一步咱们将是把我们这个回归的损失给计算出来了,所谓回归损失啊,就是你这个 s y w h 预测准不准啊?这是第一步来,我们算回归损失。 第二步呢,我们去算啊,他的知心度的一个损失。知心度这个损失,这样啊,就是首先我们得想知心度当时标签是啥,大家来看,我们这是知心度,我们一开始咋出手话的 全零啊?哎呀,那你说这个标签该怎么指定?我们标签也没标这个知心度啊,我们只是标了物体的位置和物体类别,然后他这个知心度是这样,大家来看啊,其实我们这个知心度是什么当做的就是用我们刚才说的咱们的正样本和 gt 之间这个 i o u i o u 就当做他的一个知情度了,你 i o u 是 一等,那我说你百分之一百这个物体啊,你 i o u 是 零点八,我说你百分之八十,这个物体啊,就是拿我们的 i o u 做一个赋值啊,拿 i o u 当做我们知心度的一个标签了, 来,大家就要赋赋值啊,因为我们这块就是比较少啊,所以说大部分你看见还是零,但是呢,他已经做了赋值了。好,这是我们说咱们对这个知心度这个任务当中啊,首先 啊,我们拿到手就是咱分类的一个标签吧,大家看,这是我们第一件事,来去取我们分类这个标签, 在我们这个他的当中,这个 i 就是 你取那个啊,这个 i 就是 你取这个。第几层?我们不是有三层吗?好,取到当前这个层,取完当前这个层之后,接下来咱把他那个类别的一个 id 给拿到手,大家注意啊,这个是我们类别的 id, 但是有问题,这个 id 他 是啥? 他不是个弯号的形式,是不是?一般我们说咱算这交叉,你不是需要做个转换吗?现在也如此,来我们这做个转换,这比较简单啊,为大家直接看就行,你看 这是我们任务当中,原来是十八,现在变成什么?现在变成十八,六是不是?为啥是个六啊?六个类别啊,这块就做了一个弯号的这个操作啊,然后再做个赋值这块,做一个赋值这块先上面其实先给他展现成弯号的形式,这块呢,我们是实际咱们去做这个赋值, 然后下面啊,来来来,大家看这复制完结果,就是啊,标签类标签位置为一了,这复制结果,然后再算这 bce, 这算再算交叉商,这没啥问题吧? 这一块这 ps 不 就是我们预测值吗?预测值取到它类别那一块,你看取五,往后就是一共取六个,这一块他也是如此,也是个十八六的,算这个交叉商预测类别的一个损失,这也行吧?好了,然后这个算完之后再往下我看看, 再往下我们任务当中,呃,这里边我们要算的啥?这里边咱们要算那个知心度,哎,我看知心度还算没算 哦?知心度没算这块知心度我们刚才只是做了一个负值,是不是只是把标签值拿出来了?那现在我们算一算,这个是我们标签,这个不是我们预测的吗?你看这是预测值,这是我标签取知心度那个维度,好了,再算什么?就是跟那个二分类一样啊,再算一下我们这个任务当中咱们这个知心度的损失, 那把这些损失算完之后,其实这一块他加上了一些。呃,这个 balance 相当于就是,嗯,做了一个倍数吧,这个数大家可以自己去定,就是可能在不同的层当中,他的一个就是系数是不一样的,这块是我默认的一些值啊。 然后再往下就是我们该做的第一层,那其实我们说第一层怎么做的?第二层是同理啊,我就不给大家一个去看了,大家自己玩。你看第二层还是去变 d, 这个 a 轴变成该是零线变 e 了, 然后下面呢?最后最后我们再往下跳,跳下断点当中,最后呢?我们还有这三个损失啊,就是回归损失啊,就是我们叫这个 box 吧,然后执行度损失叫 o、 b、 j, 然后分类损失叫 c、 i s。 他 们这还有这个东西,这是乘,等于就是我们这块设置的一些超参数,在我们这个超参数当中啊,呃,它的一些权重可能是不一样的,大家来看, 这块是我们做的一些权重啊,应该就是论文当中通过实验得到的结果,再传各自的权重值,那这里边咱相当于,哎把这些事是不是就做完了?最后我们的损失是由这三个相加得到的,然后再乘以 back 啊,还原回去,这就相当于我们把这个损失给他做出来了。 行了,这一块给大家去解释了一下啊,其实就是我们整个呀计算损失的过程。嗯,其实我觉得优路 v 七当中啊,其实这一块还挺关键的,就是他怎么去捐赠损失的,因为他既跟优路 v 五是不一样的,也跟优路叉是不一样的,更跟什么优路三个四是不一样的。 感觉呢?就是把这些综合了吧,更多的可能是在优乐威五的基础上,呃,做了一些拓展,我觉得是在优乐威五基础上做了一些拓展啊,这一块是咱们的一个整体损失,怎么去做的?其实最关键一件事啊,就是给大家说了好久,我觉得我印象中已经讲了好久这个东西了,咱 主要说的说啊,就是我们的标签,也就是说正样本是怎么做选择的,这一块是比较重要的一件事啊。行了,这给大家解释了一下啊,就是咱们损失,我们计算这个过程。

在神经网络训练的时候呢,不同的这种任务,我们需要用不同的这种损失函数去决定,因为不同的损失函数,他对于任务的这种刻画呢,是不一样的。 你像常见的这种回归任务,你比如说我要清晰的让他逼进某个东西,我可能军方差好一些。如果说是分类任务呢,那我可能就是用交叉商的形式,如果说我有一些更加细节化的东西,你像 早期有一个经典的一个损失函数,叫推拉损失函数,它其实就是在做语音分割的时候,尽可能把不同类的给它推开, 把同类的呢给它拉到一块推拉损失。那么对于不同的任务呢,我们需要去去取不同的这种损失函数。今天呢,我主要讲一下这个交叉商损失函数,那么交叉商损失函数呢?如果是二分类的交叉商 annry cross 一 乘 这个 y i 呢?我通常指的就是它这个标签为一的情况下,就是 就是我们认定它有不同的类别,每一个类别呢,我可以取零取一嘛,对吧?这个 y i 通常是指的是它为一的情况下,所以它的概率我要尽可能的让它为一,然后这个地方呢,就是它标签为零,一减零它是一,然后 那标签为零的情况下呢?我的概率就是在这个情况下呢,我就要尽尽量让它趋近于一,那么由于这个是取负了,那么通常情况下呢,我们可以看到, 对于交叉商来说,它分别代表了这个叫 log 一 减屁屁, 就是为什么在分类任务的时候,我用交叉上的效果会更好一些呢?因为对于对数来说呢,他在这里面呢,他可能是相对平滑一点,他在这里呢就是他会急剧的类似于道障碍一样,他会急速的上升,就是当你的这个概率, 当我当前的这个任务,当我当前的这个任务呢,他取,我要强行让他就是这个概率要趋于零,就是说他不是这个东西的时候,我要让他趋于零, 就是一减七,我要趋于零,因为这个地方只要很小,那么当你模型输出的时候,当他不为零的时候呢,就会给他一个不为零,尤其是越趋近于一的地方给他一个乘法呢,会非常大,就像一道防火墙一样,这个在托优化里面,或者是这个在托优化里面有一个叫乘法函数法,就是 我我不想让函数取到离这个地方最近的情况呢,我就要接住梯度,那么接住梯度的时候呢,我就要让这个函数再趋近于这个值的时候呢,我要无限给它趋近于正无穷,就相当于道防火墙,你必须要尽可能的远离它, 是吧?那你看这个地方呢,我就要尽可能的让,当它标签为一的时候,我就要尽可能让它屁趋近于零,你看哦,屁尽可能的要趋近于一,因为只有趋近于一的时候,它的损失才能趋向于零,当它不为零的时候,这个地方也是这个地方会趋于无穷,就会是 只有当他趋向正向的时候,我给他给的值呢,会相对就是趋于零。如果说他在训练的过程中,当他的值如果跟我们实际的这种标签不一致或者啥的时候,这个概率就是说这个地方的惩罚是非常严重, 所以说呢,在这种高严肃的这种高严重的这种惩罚的情况下呢,函数就能够就是这个损失函数就能尽快的指导神经网络往这的方向上去引导 这个在拓优化,优化理论里面,他跟那个乘法函数法是很像的,就是我有一个约束, 我有一个约束一加 x 平方,我的约束等于零,那我在原函数里面,我就让这个值呢,我前面成一个非常大的系数,那么当 x 在 整整个函数让他去某一个极值的时候,那么当 x 在 这里面有值的时候,因为我本身让他为零的话,他后面向就不会干扰到前面取值的过程。 当他不为零的时候,整个狮子不为零的时候,前面有一个非常强大的一个惩罚项,就会让这狮子陡然增长,他就会把这个惩罚加的非常严重,就是火龙法则。那么在损失交叉上,对于对数的这种形态,他就严格满足这种类似于这种,当你错的时候,我给你的惩罚是非常严重,学吧,你就。

今天分享的是损失函数加自注意力机制。将注意力机制引入损失函数,意味着在计算损失时不再对所有样本或特征一视同仁,而是根据它们的重要性赋予不同的权重。这种权重的分配可以基于数据本身的特性,也可以基于模型在训练过程中的表现。 例如,在分类任务中,对于难以分类的样本或少数类样本可以赋予更高的权重,使模型更加关注这些样本,从而提高模型对少数类的识别能力。 在回归任务中,对于预测误差较大的样本可以赋予更高的权重,使模型更加努力地去拟合这些样本,从而提高模型的整体预测精度。另外,我整理了十篇关于损失函数加自注意力机制的最新论文及代码,方便大家参考。

ok, 小 伙伴们本期要给所有大家庭小伙伴们更新一磅一组重磅的学术氛围满满 的图,就是一个损失函数的一些瀑布图,那么这样呢,你把这些图放在你的文章里面,从你的大论文里面从合格直接拉到优秀,从四驱的艾特些,直接可以干到二驱的艾特些,甚至是 top 看的这样一些学术风非常 非常棒的一些图,而且最主要的是这是我独创的一些图,你在其他的文章里面可能都没有看到,你放上去的话就是与别人不同,就是非常的优秀的一些图,就是一共三组图,这是第一组图一个,当然具体你用哪一个,那就看你个人了,然后这是第二个图,稍等一会,他正在绘质啊,在这个地方。 ok, 这是第二组图,大家可以看一下这第二组图,其中这两个图我觉得会更好一些啊,大家可以自己用,然后你会制不同的这个图,以后呢就可以进行一个对比,那这个图怎么会制啊?给大家说一下,怎么会制,在这个地方,这个是代码,然后代码拉到最后,在这个地方有这个, 有这个路径,路径在这,你只需要改一下就行,我直接放在这了, esv, 对 吧?然后这个代码然后运行以后直接就出来,你只需要在这改路径,然后剩下的就是震动绘图,全部都有出来了,这是第二组图,第二组图我重点说一下,这两个图都可以,然后你看啊,这个图你还可以给它变不同的方向,看到了吗? 你想怎么给它划就怎么划,怎么变都行,因为看你个人了。 ok, 这个图非常的优秀哦,我建议大家可以把它作为对比,然后放在你的文章里面,肯定会非常的具有学术风的,本来神稿可能不重,一看到你这个图可能就直接给你过了,好,然后第三个图呢,是一个这种二 g 平面化的一个瀑布图, 这些图呢,大家想要哪一个呢就用哪一个,哪一个图呢,都比你这个 result 里面出来的图要棒,多好,这就是主要就是本期的视频,然后最主要的是呢,我今天想跟大家来看一下这个 啊,非常的感动啊,也非常的感谢小伙伴给我反馈,二三年就跟着我来学 v 八了,然后发了两篇爱的鞋,其中最中中了一篇 top 坎,其实从二三年开始的时候呢,我就二三年开学的时候,二三年开始的时候呢,嗯,我们就一直说一个事情啊,什么事情呢?就是 所有的小伙伴,只要你能中一篇矮的鞋,你就有无数篇矮的鞋,那他呢?两天以后中了一篇 top, 小 伙伴非常的优秀啊,总而言之,还是小伙伴优秀,并不是我优秀,真的是他非常的优秀,中了一篇一去 top, 在 工业作物,然后我给他打码了,这个是他的具体的一个文章, 平时看我抖音讲朋友呢,讲的很好,那最重要的,我希望大家毕了业以后也能经常回来看看我的抖音,经常回来看看我讲那些东西,可能我的抖音可能并不会只讲学术,有的时候一些工作和生活当中的一些感悟,我也会分享给大家。 更多的呢,是通过抖音这个平台,或者说通过网络这个平台和大家交一个朋友,交一个线上的知心朋友,很多事情呢,我可能在工作和生活当中也少走一些弯路, 好, ok, 呃,还有呢,就是这一个小伙伴,这一个小伙伴导致前段时间蒂特他改进魔神出缺少原创性,但他不懂机密血迹,没办法啊,我直接教大家怎么来改造自己的模块,大家看一下,最近我会更新大量的这种高阶的创新,也就是自己手搓一个模块, 这个对于大家来说非常的重要,大家一定要去学习,然后这样呢,导师就不会再 diss 你 了,导师他本来啥也不懂,其实你直接排列组合就不需要原创,直接搞也能发文章,大家的艾特现在都已经重视了,好,这本期,然后你再配上这个图,岂不是直接起飞啊,朋友们 加油吧,小伙伴们,本期视频比较短,主要是更新这样一个代码,然后给大家来说一下最近的一些这个刚刚收到一些消息。最后啊,祝所有的小伙伴们,我们都能够作为一个非常好的网络知心朋友。 另外呢,也祝所有的小伙伴们,工作牛逼,事业牛逼,家庭生活双幸福,加油吧,小伙伴们!

发现一个特别适合发论文的方向,损失函数加自注意力机制。损失函数加自注意力机制在深度学习领域是一个热门研究方向,它可以提高模型的性能和泛化能力,帮助我们构建更加精确且高效的模型。将自注意力机制引入损失函数,意味着在计算损失时不再对所有样本或特征一视同仁,而是根据他们的重要性赋予不同的权重。 这种权重的分配可以基于数据本身的特性,也可以基于模型在训练过程中的表现。例如,在分类任务中,对于难以分类的样本或少数类样本 可以赋予更高的权重,使模型更加关注这些样本,从而提高模型对少数类的识别能力。在回归任务中,对于预测误差较大的样本可以赋予更高的权重,使模型更加努力的去拟合这些样本,从而提高模型的整体预测精度。另外,我整理了十篇关于损失函数加自注意力机制的最新论文及代码,方便大家参考。

发现一个特别适合发论文的方向,损失函数加自注意力机制。损失函数加自注意力机制在深度学习领域是一个热门研究方向,它可以提高模型的性能和泛化能力,帮助我们构建更加精确且高效的模型。 将自注意力机制引入损失函数,意味着在计算损失时不再对所有样本或特征一视同仁,而是根据他们的重要性赋予不同的权重。这种权重的分配可以基于数据本身的特性,也可以基于模型在训练过程中的表现。例如,在分类任务中,对于难以分类的样本或少数类样本可以赋予更高的权重, 使模型更加关注这些样本,从而提高模型对少数类的识别能力。在回归任务中,对于预测误差较大的样本可以赋予更高的权重,使模型更加努力的去拟合这些样本,从而提高模型的整体预测精度。另外,我整理了十篇关于损失函数加自注意力机制的最新论文及代码,方便大家参考。

发现一个特别适合发论文的方向,损失函数加自注意力机制。深度学习中,损失函数与注意力机制的结合正成为提升模型性能的关键方向。传统损失函数在处理类别不平衡或造声数据时存在局限,而注意力机制能动态聚焦关键信息,但可能忽视大局。上下文。 通过将二者结合,可以引导损失函数更精准的优化模型注意力机制,识别重要特征损失函数,据此调整权重,从而提升模型鲁棒性和泛化能力。例如,在分类任务中,注意力加权损失可缓解样本不均衡问题。 在造声数据下,注意力引导的损失设计能减少溶于干扰。这一协调优化策略为图像识别、自然语言处理等复杂任务提供的新思路,有望推动深度学习模型的性能边界。另外,我整理了十篇关于损失函数加自注意力机制的最新论文及代码,方便大家参考。
