七月在线公开课笔记-十二-
七月在线公开课笔记(十二)
1447-七月在线-机器学习集训营15期 - P18:11-XGBoost精讲 - 程序员技术手札 - BV1ASste6EuZ
嗯如果没有问题的话。
我们就准备开始好吧,额按照咱们这个课程安排啊,今天呢我们要介绍的是超级boost模型,呃,这个模型呢其实我们从第一次上课的时候,就介绍到了这种呃,或者说为他进行了一个准备,为什么这么说呢。
大家其实可以看到,x g boost模型的先导模型是GBDT,就是那个梯度提升决策树,然后梯度梯度提升,决策树的前序模型呢是BDT是集成决策树,而集成决策树呢是由数模型,采用所谓的集成方法来构建的。
一种所谓的集成学习模型,而数模型呢我们也已经介绍完了,包括id3C4。5和cut数,当然boosting我们上次也介绍了一部分,那么从这个过程大家可以体会得到,像查查t boss的这种模型的工作哈。
都是在前序的工作的基础之上,又进行了适当的改进和调整,包括原理方面的,也包括工程方面的,所以得到了一个很好的效果,也就是说哈这个咱们之前的一些的工作啊,其实都是为了这个模型所做的一个准备啊。
这是需要介绍一点的,那么刚才提到了就是charge boost模型呃,前序的准备非常的充分,或者说它是在前序模型的基础上做的改进,那么在性能上的话,它取得了非常好的效果啊,不管是在这个比赛当中。
还是在这个实际工作当中啊,他就不是它的这个性能还是比较突出和优秀的,性能呢体现在两方面,一方面呢是这个模型的准确度啊,嗯不管是回归还是分类啊,x g boost都可以很好的能够完成一系列的工作。
那么呃第二方面呢就是从这个运算的速度上啊,刚才是刚才是这个准确性是吧,另外一方面就是速度上,即使是我们基于海量的啊高纬的数据,那么由于charge boost,在工程方面做了大量的优化和改进。
所以说它在这个速度性能上也是带来了,非常好的一个呃效果简单点,简单一点说呢,就是这个模型呢就是计算的准,还算的快啊,所以说哈在各大比赛以及实际工作当中,应用的其实还是比较广泛的,呃需要提醒一点啊。
茶几boost模型呢并不是所谓的深度模型,当然是我们聚焦在深度模模型,如果是以深呃人工神经网络啊为基础的,这一系列的神经网络模型为基础的,这个视角当中呢,x g boost会显然的不太不太一样啊。
包不光是模型结构还是这个优化策略,都不是特别一样啊,这一点希望给大家这个说明一点,也就是说不要迷信啊,讲到这个人工智,讲到这个人工智能是吧,现在好像这个呃,大量的工作都是在这个深度学习领域,这没问题。
但是呢除此之外哈,其实还有很多的方向都是可供大家啊,需要学习参考的地方啊,多说那么一点,这是关于x g boost,如果没有问题的话,我们就开始今天的内容好吧。
OK那么关于主要内容呢包括这么几方面,一方面呢是X级boss的原理部分,另外一方面呢是应用部分,那么在原理部分呢,我们需要顺着刚才的那个啊发展的脉络,从这个提升方法做一个简单的回顾。
因为我们上次已经介绍到了是吧,包括提升方法和这个BT嗯,我们上次都已经介绍完了,那么这次呢重点聚焦到GBDT梯度,提升决策树以及呃x g boost本身上啊,当然这一系列的工作啊。
其实向前推进的过程当中,都是为了介绍这个x g boost啊,这是在原理部分上,那么应用部分上呢,包括这么几方面啊,一部分是关于参数的,就调参的参数的选择,包括通用参数,提升器的参数。
还有学习任务参数呃,有在参数的基础上呢,我们会介简单介绍一下基本应用啊,基本应用包括这个X级BBOOST和莱,GBM的一个对比分析,以及随后的一个来GBM的应用,当然后续的这一部分内容啊。
不作为我们的重点,我们重点还是聚焦到呃差距,box t boost的这个原理部分啊,这是说一下我们今天的主要内容,那么我们就继续往下,那么从charge boost这个名称哈,就是这个模型名称上。
其实我们也可以看得到它的一个特点,什么特点呢,所谓的charge boost,其实就是在我们GBDT的基础上,进行了一个扩展啊,或者极限的一个提升,这样的话就构成了所谓的charge boost。
那很显然我们需要了解的就是GBDT,GBDT呢,这也是今天我们需要简单介绍的,他是在BDT的基础上使用所谓的梯度信息啊,一阶梯度,这样的话就构成了在BDT的基础上,使用异界梯度,就构成了我们的GBDT。
在GBDT的基础上做相应的拓展扩展改进,就是我们今天的x g boost,当然我们已经熟悉的是,BDT是由我们的boosting和决策树所构成的对吧,那这样的话我们一个顺序应该是什么。
应该是当然额决策树是作为一个基础模型,然后呢是将介绍boosting,然后是BDDT,然后是JBDT,最后是charge boost,这个过程,其实是通过本身的这个模型的这种性能性质啊,所决定的。
那我们简单的回顾第一部分,关于这个集成方法,boosting方集成方法呢两部分上次已经介绍了,分别是所谓的加法模型和前降分布算法,所谓的加法模型就是将一系列的基模型,BX伽马M和他的这个全值系数。
BM进行一个累加,得到的我们的FX,那这个时候呢,我们的优化目标,就是在整个加法模型上来完成的,所以你会发现,当我们带入到损失函数里面去,实际输出和整个的模型输出计算损失以后,在整个数据集上进行累加。
这是我们的优化目标,因为它是一个加法模型,所以对它的直接的优化其实是呃比较困难的,那这个时候我们就采用在加法模型的基础上,所谓的前项分布算法逐步的去优化我们的损失,以期最终逼近我们最终的这个加法模型的。
这个损失,那么所谓的前项分布算法是一种优化的思路啊,他是将我们的加法模型啊,可以从前向后,每一步只学习一个奇函数及其系数,逐步逼近我们的优化目标,那这样的话呢,整个的优化过程就变成了在损失函数里面。
只需要计算的是实际输出,YI和当前的一个G模型,贝塔b xi伽马之间的一个损失计算,当然还是在整个数据集上来完成的,那么很显然,这个单独模型的优化,要比上面加法模型的优化的,这个困难度要减少很多了。
当然这是我们的一个期望,或者我们的一个预期,这个预期的实现嗯,还是有一些这个步骤的,因为很显然这两个优化目标是不一样的,那么怎么样使得你用这种简单的方法去逼近,这个加法模型,其实还是有一系列的步骤的。
这就是所谓的切向分布算法,切分布算法告诉我们的是在数据集T上,X一Y1XNYN损失函数L是已知的,以及我们的奇函数集合啊,BX伽马也是已知的,注意这是个函数集合,也是我们的模型集合。
这里的模型呢并不唯一是一啊,是一个由若干个元素所组成的一个集合,当我们进行加法模型的优化过程当中,或者说在我们的前项分布算法的过程当中,每一次我们所优化的那一个G模型。
都是属于这个基模型集合当中的一个元素啊,在这个原,在这个集合当中不断的去寻找就可以了,就是不断的去找一个优化,找一个再优化,找一个再优化就可以了,那么输出的当然就是我们的加法模型FX。
那么切向分布算的步骤啊,第一步啊就初始化F0X等于零,强调一点的是,它同样也是个模型啊,将所有的输入都映射成了输出零,只不过呢它是在D0布上啊,作为一个性能非常差的一个基础模型所存在。
我们就是在F0X等于零的基础上,不断的构建新的基模型进行进行优化,加入到这个初始模型当中去,来完成我们的加法模型的一个训练过程,从第二步开始,我们令M从121直到大M步啊,我们不断的在进行这个循环优化。
在循环优化的每一步当中,我们都是使得损失函数的实际输出,和我们上一个模型的输出,加上当前模型贝塔BX伽马构成的新模型,在数据集上的一个最小优化结果啊,注意哈,我们的优化目标并不单纯的是基模型的优化。
而是是在上一次模型的基础上,加上当前G模型在损失函数上的一个优化,那么很显然这个地方的FM减1X,以F0X为基础,每一步的前一步的模型其实都是已知的啊,这一步是我们作为一个基础模型,不断的在向上迭代。
向上迭代,每一步都是在前一步的模型的基础上,进行一个局部的一个优化,那么当然当当,我们有了当前模型的贝塔M和伽马M以后,更新当前模型FMX等于FM减1X,上一步的模型。
加上当前这一步已经优化得到的贝塔MBX,伽马M有同学会问了,这个优化过程怎么去完成,其实这个优化过程就是一个学习过程,我在数据集上,使得损失函数极小化的那个优化过程啊,一以我们的数模型为例。
后面我们也讲到了是吧,以我们的数模型为例,其实这一步就是一次数模型的学习啊,很多同学啊呃不太清楚哎,这个损失函数放在这,那优化过程在哪,优化过程就是使这个损失函数极小的,那个优化过程。
你说具体是实现在哪个地方,那这一步的具体实现就是我们以以数模型为基,模型为例的话,那就是单棵树的一个学习过程,当然是在FM减1X加上那颗单颗树构成的,那个模型的基础上,使得数据集上的损失最小好吧。
那么当完成了以上这一步以后,我们得到了一个新的DM步的模型FMX,那这个时候随着循环的不断的深入,这里的FMX在不断的进行优化是吧,当M等于当小M等于大M的时候,我们的优化过程迭代结束。
那这个时候最终得到所谓的加法模型,就是FX等于F大,MX等于3mm从一到大M贝塔m bx伽马M啊,这是我们上次所介绍到的啊,这个时候有同学还会有疑问啊,就这个大M怎么去确定。
当然这个大M可以是事先设置的啊,你认为比如说我迭代100根是吧,我前项分布算法过程当中,我迭代160,这是一种策略,另外一种策略呢,很显然也可以,通过你每一次学习的这个实际输出的。
FMX和上一次这个FM减1X之间的差,值的绝对值啊,就是我们可以计算一下,计算一下当前F模型减去一个F减1X的差值,就是这是我上一步的性能,这是我当前步的性能,这个差值如果小于了一个阈值。
就是我每一次优化其实已经有很有限了啊,就是每一次的提高非常非常有限了,这个时候我基本上也可以停止整个优化算法了,就像我们的这个考试一样是吧,每一次我都是呃97分96,97。一九十七。2是吧。
这个时候已经没有太大的提升空间了,这个时候优化算法也可以结束掉了,那么这个时候BDT键介绍完了以后。
BD这个BOSTON介绍完了以后,下一步就是BDT啊,提升决策数,提升决策树呢,就是以决策树为基模型构成的提升方法啊,那这个时候把我们的基模型,每一个机模型都以数模型作为一个特例实现,也就可以了。
那么其实你可以看到,在形式上我们的以提升绝对数模型,就是一个FM等于SMM乘以一到大MTX,大欧米伽M,这个时候你会发现没有那个B啊,没有那个贝塔,这个时候我们认为所有的数模型啊。
都是这个都是这个等全值的啊,就可以了,也为我们的优化简便一点啊,其中这个参数就是我们的一棵树啊,就是我们的一棵树,那继续往下,那以BDT的这个前项分布算法。
其实和我们的这个boosting的前向分布算法。
是一样的啊,同样是在F0X等于零的基础上,DM部的模型是FMX等于FM减1X,加上一棵树就可以了,这是我们的优化目标也相应的发生了变化啊,就是在我们实际输出Y和FM减1X。
加上那棵树作为当前模型的基础上,进行损失计算,在数据集上进行最小化就可以了,那么这个时候我们具体的看一下,就是已知我们的数据集X一Y1直到XNYN,将我们的输入空间RN进行一个呃。
令我们的xi属于我们RN的一个元素,那这个时候的话X是我们的输入空间,同样vi是属于画外,是属于一个R的,注意这是一个R,这很显然是一个回归问题是吧,我们先处理回归,那这个时候Y为输出空间。
如果我们的输出空间化,X被划分成了这个互不相交的区域,R1R二一个RJ啊,并且在每个区域上都确定相应的输出CJ,那么决策数就可以表示成以下形式啊,刚才我们讨论关于这个BDT的时候。
我们知道是以数模型作为这个基模型来构建的,那这个时候我们明确的给出,当前这颗树模型的定义,我们上一次在讲这个决策式的时候,也已经强调过了,数模型本质,就是对我们输入空间的一个离散化划分。
划分成R1到R这个空间,然后每一个空间给出一个相对应的输出,这个时候就构成了所谓的决策树模型,那么交叉数模型的表示这个形式化的表示,形式上我们可以认为我们是需要遍历啊,当有一个输入X进来以后啊。
我需要遍历,那而那那这个第三空间,那这便利过程我们使用一个累加过程来对应,那这个时候我们需要判断当前输入的X,是否属于某一个RG空间,那么从R1R二一直到RJ我需要遍历一下。
看后面这个指示函数是否是成立啊,指示函数的条件是否成立,当X属于某一个输出空,输那个输出空间的时候,那这个时候指示函数里面的条件为真,返回一,那么对应的就是当前这个空间的输出值CD。
当这个便利过程完成以后,一定是由某一个空间啊,某一个RG空间对应我的X,那这个时候输出的就是当前那个空间的CJ,那这个时候有了关于数的模型以后,我们下一步就可以以具体的模型形式啊。
模型形式作为我的这个呃数模型形式,带进到我们的前项分布算法过程当中去,也就可以了啊,大家可以看到啊,在这个过程当中,和我们的BDT这个boosting过程其实是一样的,就是以我们的决策树模型。
作为一个基模型的替代就可以了,那么重点呢,其实在这个地方我觉得其实是更重要的一点,为什么这一点呢,上次我们也讲到了这一点,当采用平方损失的时候啊,当我们采用平方损失的时候。
我们知道这是个标准的平方损失函数的定义,LYFX啊,实际输出和模型的预测输出的差值的平方,左右的损失,那么在java模型当中,我们把我们的这个每一步的这个呃模型展开,会发现它是由FM减ex。
加上当前要学习的那棵树模型构成的,当前部模型,那这是实际输出Y,那这个时候的损失函数计算一定是,Y减去FM减1X减去那棵树的输出的平方,加上平方值,那这个时候呢我们会发现当前这三步当中哈。
Y是我们的实际输出,是数据集里面的已知值,这个FM减1X,在当前DM部的模型的构建过程当中,上一步嘛,上一步的模型基于当前这一步,DM部也是已经知道的了,因为我们每一次都是在上一步的基础上。
再构建一个新的模型,那么上一步的模型基于当前,这一步的模型是个已知值,他也是知道的,那么也就是说只有当前布的这颗树模型,我是不知道的,那好如果我们把这里的Y和FM减1X,这两个已知量啊,既然是已知嘛。
就可以加括号先算出来,算出来呢作为R值啊,算出来作为R值,那R值呢也是已知值,那这个时候我们在加法模型的每一步的损失,计算过程当中,其实等价于计算一个R减去T的平方,那么R呢。
如果我们认为它是因为R是个已知值嘛,反正他是个已知值,某一个数据集的输出对吧,我不管你是哪个数据集啊,反正这个数据集的输出我是知道的了,那么在此基础上,我要计算它和我们一棵决策树的差值的平方值。
同样对应到我们一个一般化的这个损失函数,额平方损失函数的定义过程当中,大家会发现,其实它和我们的一般化的平方损失函数,在形式上是完全一样的,大家可以看到这里的R反正是已知的,我不管我不确定于哪个数据集。
但反正它是已知的,它就对应的是我们的实际输出Y,那这个时候的T其实就是一棵树模型,它对应的就是一般化的我们的一个FX,那这样的话问题就退化成了,我要在实实际输出R上训练一颗决策树模型T。
然后去计算它的损失的问题,使当然使这个损失最小的那个T,就变成了我最优的那颗T,那你会发现这个问题就已经退化成了,我们上堂课的,上次课的讲到的那个什么,那个那个决策树模型了是吧。
也就是说你会发现问题通过这一系列的转化,已经我们看不到所谓的什么嗯,加法模型和前项分布算法了,他就退化成了一个在已知数据集上进行,一颗决策树模型的构建的问题了,而这个问题我们不管是从i id,344。
5还是卡的数都已经很好的解决掉了,那也就是说问题转化成了什么嗯,转化成了当我在第M步的学习过程当中,其实我只关心的是,我要构建一个新的数据集R啊,新的数据加R,当然这个R的计算其实很简单。
就是Y减去FM减1X,而我在当前这个已知数据集R上,再重新学习一棵树就可以了,那换句话说,我每一步的数的学习,都是在实际输出和上一步模型的那个差,值上进行学习,我们下面上一次已经介绍过了。
其实这个这个结果其实非常呃,有意义的地方在于实际输出是Y减去FM减1X,注意这里的FM减1X是我们上一步的模型,那么他俩的差值很显然是上一步的模型,没有很好的反映,我们实际输出的那个结果的那个差对吧。
我们每一次都有一个考试,考试免不了都会出现错误的情况啊,就是错题我复习的有,我复习需要有针对性,既然我考试验证了我掌握的内容,其实我的精力其实就并不一定要在这方面,我的主要精力就要放到我上一次考试。
那次没考好的地方,所谓的错题的情况,我把精力放在这,那么很显然我下一次再考试的时候,一旦出现了我上一次没考好的那个情况,出现了以后,我当然因为我前面都已经对吧,做过处理努嗯。
相对应的都已经把这问题都解决掉了,那这个时候的性能肯定是越来越提高了,这就是加法模型呃,他的一个策略在这个呃BDT上,1BDT上的一个体现,非常的有针对性啊,这一部分被称之为是。
就是我们实际输出和我们上一次模型的预测,输出之间的这个差值被称之为是残差啊,残差,那也就是说所谓的加上分前项分布算法在呃,加法模型,在前项分布算法的过程当中的学习过程,其实就是每一步构建一棵决策树。
去拟合上一步的残差就OK了,所以你看一下我们的具体的学习过程,已知输入数据集要要求输出,我们的最终的BDT模型F0X等于零,这是没问题的,然后呢在循环过程当中哎,我们不再是直接对那个LYI。
FM减1X加T进行优化,而是直接先计算一下残差,我先算一下YI减去FM减1X2,作为当前部的参差值,有了这个残差值之后,哎我拟合残差学习一个回归数,得到我们的决策树体,而就这一波而言。
就是我们上一次课讲到的,不管是id34。5还是cut数,你把它展开放在套在这一步里就可以了,当我们得到这个新的决策数T以后,那下面就是更新我们的FX在FM减1X的基础上,加上那个决策树就OK了。
那这个时候通过我们的上述循环,最终当达到第M步的时候,我们最终得到回归提升,决策数F大于MX等于sin m,从一到大M我们的决策数相加就可以了好了,这就是关于这个BDT部分。
BDT以及那个boot和BDTD部分,这是我们上一次所介绍的内容啊,这一部分内容是我们的回顾啊,这个看看大家有什么问题吗,没有问题的话,我们就继续哈,那下一步好在讲这个GBTC的G之前呢。
我们简单的回顾一下哈,我们的一个基本的一个策略,就是我们有输入空间画X,有输出空间画Y,我们要做的是X1X2。2。1到XN到,Y1Y2。2。1到YN的一个映射的问题,等下把它映射过去,而我们又知道。
满足这个从X到Y的映射的这个F2,F1F2点A点,它是有若干个,所以我们需要有一系列的策略,当然不管你是结构风险最小化,还是经验风险最小化,反正找到一个F星就可以了,但事实上大家再注意一点。
就是我们经常会发现,在我们的模型的构建过程当中,决定模型形态的其实是模型的什么参数,不管是我是用theta表示还是用W表示,其实还是一个参数空间CA1CT2点点点,那这个时候你会发现哎。
所谓的最优函数F星,其实是由相应的参数来决定的,那么也就是说,我们的学习过程,其实并不是在模型空间F空间里面啊,不是在花F空间模进行学习的,而是在我们的参数空间C塔里面进行学习的。
所以你会发现我们的学习策略是构建一个,关于当前参数的损失函数YI和,FC塔X,然后再和我们的什么,和我们的参数进行一个偏导计算,这个时候,我们假设我们前面的这个学习率是阿尔法。
然后再到C塔的基础上得到一个它的迭代方式,因为我们的求解目标是C它,所以你会发现我们的损失函数啊,比如我们还用L来表示啊,我们损失函数是对我们的theta求偏导,因为我们是在C大空间里面进行学习的好了。
如果我们我们想当然的认为啊,想当然的认为,如果我们的这个模型空间里面的每一个模型,F都不是由C塔来决定的,换句话说,我不必然的有这么一个所谓的参数空间,这么一个概念的话。
也就是说我这个模型不是由参数决定的,我只有只有模型,没有什么参数,没这么东西,那么按照刚才的套路,其实其实不变的在于我需要计算的还是F呃,X对吧,对谁的偏导,这个时候你会发现哎,就麻烦就在于。
之前我是在参数空间里面对参数求偏导,现在我没有哪个参数空间了对吧,那这个时候我对谁求偏导,那你是不是可以直接利用你的函数求偏导,那这个时候再加上得再加上你的学习率,然后呢你是在上一步的那个模型的基础上。
在新的模型的啊负梯度方向上得到一个新的F,在逻辑上是完全一样的,大家发现了吗,这是啊关于这个GBDT的一个,这个就是一个思路,就是我们嗯,由于我们在前面的一些大多数的模型当中啊。
都是有这么一个参数以及参数空间的概念,我们在形式上更习惯于对C塔,或者对参数的偏导计算,因为你的求解目标就是参数,所以你当然是需要找到你是在theta空间里面,你要找到一个最低的CA星作为你的模型参数。
但现在问题是,我们把它换掉对吧,我们不在C塔空间里面,我们没有C塔那个概念,我们直接是就是在F空间里,模型空间里面,我们同样找到的是F型,那同样还是从L向F空间求偏导,得到负梯度方向。
以使它能够收敛到最低点,作为我们最终的那个自由模型不就可以了吗,啊这是做的一点铺垫,其实有了这一点铺垫以后,你再回过头来再去看这个所谓的GBDT,其实就一目了然了,为什么,因为有了这个过程以后。
你会发现它再结合着我们前面刚讲到的,卡瓦模型和前向分布算法问题,就变成了什么,其实简单点说,就一句话,梯度提升,梯度提升算法使用了损失函数的负梯度啊,使用损失函数的负梯度,这是损失函数。
损失函数的负梯度,在当前模型的值啊,对我们的函数进行一个负梯度计算,在当前模型的值作为回归问题,提升决策树的当中的残差的一个近似值,来拟合一颗回归树啊,就像刚才我们所说的啊,我们就是在模型空间里面啊。
就是在模型空间里面,既然在模型空间里面,我们找到了那个使模型失损,模型的损失最小的那个方向,就是我直接对F进行求偏导,它的负方向,负梯度方向就是我下降最速的那个方向。
我在它此基础上有了这个负梯度方向值以后,我们每一次的学习时,他它使得它越来越小,越来越小,就完成了我们优化的一个目标,那么看下面梯度提升决策树的算法啊,其实非常简单,就是在输入的基础上。
还是输入数据集和我们的损失函数啊,输出呢就是我们的模型初始化还是F0X,当然这个地方需要注意一点,有同学这个地方就有点懵,唉刚才都是F0X等于零吗,为什么这个地方变成了FX0,后面这么复杂的一个式子了。
后面这个复杂式子,其实仔细看一点也没太大的一个困难在于,我现在计算的是什么,计算的是一个在损失上,实际输出Y和我们的一个常量C,注意啊,这个C啊是个常量C之间的一个,数据集上的一个损失的极小值。
也就是说哈,你这个时候即使找到了一个F0X,是通过这么一次学习得到的,也无非得到的就是个常数,比如说F0X等于八或者等于七,当然只是只是举例啊,也就是说你会发现他和那个F0X,直接让它等于零。
在性能上其实区别并不大,但是呢这个的好处在于,它是通过一个学习得到的结果啊,不管是数值几吧,性能上一定要比这个零可能要好一些,但是呢因为这个模型本身是个常量模型啊,就是那个C啊或者是常量函数。
所以这个性能上有提高,提高非常非常有限,所以啊如果你理解了,你认为OK没问题,如果你你说哎呀这个地方实在不理解,那就让它等于零就可以了,如果你还需要再理解理解,我们上次其实举多过一个例子。
举还记得在我们第一次上课的时候讲到过,那个那个什么那个欠拟合现象啊,过拟合和欠拟合的时候,我们讲到过,比如我们那个正弦曲线,还记得那个,正弦曲线啊,还记得那个F0等于零是在这儿,我们有一次变化了以后。
其实是F0X,其实是可以让他还是同样是作为一条直线,但并不一定这个呃是F0等于零了,而那个时候你会发现,即使还是一条直线,性能上有提升,但是性能提升的非常有限,其实非常类似于在现在这个场景上,好吧。
这是第一步啊,这个很多的时候,大家在这个地方都有疑问和困惑,解释一下,当有了这个基模型以后啊,基础模这个不是基模型啊,当有了这个F0X作为一个第零步的模型以后,那么我们从一到大M每一步我都需要计算的是。
I从一到N在整个数据集上来完成一个嗯,不再是残差的计算,而是残差的一个近似值的计算,就是刚才我们所说的就是我们的损失函数,基于函数的负梯度方向啊的一个值,用这个值来作为我们残差的一个近似值。
其实哈并不再有残差的概念了,因为标准的残渣概念,是在平方损失的基础上才有的啊,这是在上面这个残渣的概念啊,是在标准的平方损失的基础上才有的,那么在BDT的基础上啊,呃有残差的概念。
但是在JBDT的基础上,其实完全可以不提残差这个概念,因为刚才我们是我们已经分析了,我们每一次的学习,就是在函数空间里面,直接对我们的模型函数进行偏导计算,它的负梯度方向就是我们的最优的收敛方向。
因为我们还是希望这个损失函数最小嘛,那个函数,损失函数最小的那个FX就是我们的最UX,所以啊这个地方嗯你需要知道啊,计算这么一个负梯度方向就可以了,有了这个负梯度方向以后,下面的工作啊。
下面的工作就是一棵决策树的学习,只不过我们的学习目标变成了这个,刚才计算得到的负梯度啊,这个过程其实和我们的ID3C四,4。5和cut数是完全一样的,当我们构建出这个新的数数以后。
下面更新FMX等于FM减1X,加上我们的一颗新的决策树就可以了,有的说唉你上面不是个T吗,怎么下面变成它了,不要忘了我们那棵决策树T展开之后,不就刚才所说的吗,J从一到大GCM。
然后I判断一下X是不是属于RM对吧,只不过是刚才把上一步,那个T展成他的一个标准展,比那个形式化的表述就可以了,然后当我们得到了每一步的FMX以后,那么最终的决策树啊,当最终的梯度提升决策数。
FHX就等于F大MX等于sum m,从一到大M那大M可竖那大M棵树,每一棵树都是J从一到大GCMG,然后判断一下当前的X是不是属于,那当前的一棵树所对应的离散化输出的空间啊,这就是BDDGBDT哈。
其实最核心的一点,就是对这个式子的一个理解啊,这个其实还是怎么说呢,嗯需要有一点这种这种抽象的能力是吧,大家看看这部分有什么问题吗。
好这个还有另外一个资料给大家看一下这个。
咳咳这里呢还有一份资料嗯,为什么要把他介绍给大家呢,是因为这份资料在刚才那个呃,就是GBDT的讨论过程当中。
其实是有一些更详细的更详细的介绍和说明啊,有兴趣的同学呢,这个资料呃我一会整理一下,发到我们群里啊。
大家可以看一下,其实你会发现它同样是逻辑,就是刚才我们所说的,当我们有参数空间的概念的时候,我们每一次的参数都是在上一次参数的基础上,加上一个新的参数的更新值对吧,我们是在我们要聚焦到德尔塔西塔上。
而德尔塔西塔其实就是我们的,你可以理解成模型的负梯度方向,只不过你是在参数来计算的。
你可以看到,你看我们就就是在我们上一次的基础上,加上一个德尔塔西塔,而德尔塔西塔就是我们需要计算一下一阶梯度,是吧,找一下这个那个类比式的啊。
在这嗯从参数空间到函数空间的一个映射。
当我们在当我们你看,当我们习惯于在参数空间里面。
来完成参数的学习的时候,我们继续往下,你会发现它和函数空间上,在上一次的函数上进行新的函数的学习,不是一样的吗,形式上是完全一样的,只不过我们换了一个空间而已啊,没有参数的概念了,所以说你会发现哎。
我在上一步的C塔等于负的对吧,阿尔法去作为学习力啊,在负梯度的基础上不断的累加负梯度的时候,负的参数梯度的时候,其实我们累加负的函数梯度是不是也可以啊。
是一样的一个概念啊,这个嗯我觉得虽然稍微有一点儿,这个抽象的理解。
但是一旦你能够突破这一点的话,我觉得对大家来说一定是一个,就是我觉得是个很大的一个提升啊,不要拘拘泥于呃习惯性的一个结果,那好了,前面的铺垫啊,都作为准备共性的工作,那下面我们正式的开始介绍呃。
X级boss的模型啊,前面的工作哈都是铺垫的内容啊,最终聚焦到这,我们看一下,极限提升决策树啊,极限梯度提升决策树啊,这个东西呢,其实就是在我们之前的那个,上一步的JBDT的基础上做了两点改进。
第一点改进啊,其实可能细心的同学都发现了啊,不管是前面讲到的这个这个BDT也好,还是讲到的这个GBDT也好,其实都没有正则画像,都没有正则化对吧,也没有减值过程,那么这个时候是不合适的啊。
所以呢ti boost的作者啊,陈天基老师的第一个改进就是加入了正则画像,当然这个正则画像设计还是有一定技巧的啊,一会我们再介绍,那么第二项,既然GBDT使用到了负梯度方向。
那负梯度呢我们基本上就是一阶梯度信息,而我们知道按照泰勒展开式呃,理解梯度信息之后,应该是二阶梯度,三阶梯度以及更高阶的梯度,才能完整的描述一个函数对吧,那这个时候如果我们用一阶梯度进行模。
这个模型的学习的过程当中,你会发现那是不是可以考虑二阶梯度呢,对其实第二个改进就是使用了二阶梯度,啊这就是我们在原理方面啊,比较突出的两个改进的地方,当然还有一些细节改进啊。
比如说后面的损失函数定义啊等等其他方面,但是最主要的还是这两点啊,那我们就分别啊,看这两点是怎么在JB例题当中体现出来的,那么在此之前呢,我们还需要介绍一下,就是在GBDT当中。
关于决策树的模型的一个定义啊,在GBD7当中哈决策树模型的一个定义呃,我们看一下,首先我们已知的还是训练数据集xi到YI啊,这个没什么特别的,其中xi是属于RM的,还是MV的一个特征输入。
那么YI是属于RN额属于R,它是一个连续失值输出,那么很显然是个什么,是个回归问题,D的模等于N也是元素个数是N个,那么这个时候的就差几boost里面的模型定义啊,就是决策树模型被定义成FX等于W。
下标是QX啊,下标是QX,那这个时候啊嗯就不是形式上啊,形式上就不是那么的明显啊,它和我们前面所介绍到的,不管是ID344。5还是卡的数啊,不管是BDT还是GB,DT的模型的定义都不太一样啊。
都不太一样,形式上是不太一样的,但是含义上可以说是完全一样的,为什么这么说呢,我们再回顾一下,我们刚才已经重复了好多遍了,关于决策树的模型定义的本质是什么,一棵决策树的本质就是我们对输入空间。
花X的离散化啊,得到若干个离散化之后的空间,以及若干个离散化之后的空间,当中的每一个空间所对应的什么输出,就是刚才我们所所说的R一R二D2。2,一直到RJ,然后呢每一个都对应一个输出,C一C二D2。2。
一直到CJ,这就是就就是决策树,那咳咳,刚才我们看到的那个决策树,在形式上是从J从一到大G然后是CJI,然后看一下X属于RJ,这是我们前面的老套路了,这不是一棵树吗,为什么现在他就长这样了呢。
简单的分析一下,看一下,解释一下这里的W和QX到底是什么东西,看下面其中QQ是个什么,Q是一个从RM到123点点点,遇到大T的这么一个映射,注意啊,Q是一个映射,就在这个地方哈,这里的QX啊。
这里的QX是个函数哈,是个映射,这个函数能干什么,能把一个RM的值映射到1~8T啊,这个集合里面去,那注意一下这个RM是什么RM哪有啊,RM在这RM就是我们输入空间,就是由若干个X所组成的一个输入空间。
那这个时候你会发现,换句话说这里的QX的输入,这里的QX的输入就是我们的一个什么,RM为空间里面的一个点啊,就是我们那个输入特征值啊,就是说QX的输入就是我们的一个输入特征值。
那有了这个输入特征值X以后,你看下它把它映射到哪去了,映射到了12345点点大T里面去了,那这个大T是什么,这个T看后面有有介绍,T为决策树叶子的节点数啊,T为决策树叶子的节点数。
也就是说我们要得到一棵树,这棵树长什么样,我不知道,但是我对你的叶子都已经编好号了,121号叶子,2号叶子得点点,最后DT个叶子,那这个时候的Q能够完成的就是,当我有了输入以后,当我一个输入X来以后。
我通过Q5X得到的是,你当前这个输入X所对应的那个叶子的下标,对应的那个叶子的下标就说我我你给我个X,我虽然不能把,直接把你先映射到那个叶子里面去,但是我可以先通过QX得到,你应该在的那个地方的下标。
非常类似什么,就是你上班的时候啊,每一每每来一个工,每来一个新的同事对吧,我都先给他一个什么,给他一个工牌,这个工牌上记录了,你应该坐在哪个位置上的工位,当你拿到这个T之后啊,当你拿到这个QX以后。
再根据这个QX我们刚才讲到了QX是什么,QX是W的一个下标,看W是什么东西,W在哪,W在后面,W是属于RT的,RT很显然T刚才已经介绍了是叶子的节点个数,那RT是个什么东西。
RT不就是由T个123点点二,由T个元素所组成的一个向量吗,啊注意它的下标分别是从123。2点,一直到大T那时候我刚才把它们组合到一块,你会发现功能就在于,当你一个新的元素X来了以后。
先通过QX得到你先在哪个叶子节点上,然后有了这个QX的叶子节点编号,查一下这个W得到,比如说你是3号叶子啊,你的QX等于三,你找到这个位置上了,然后再查一下这个W的第三个维度上的值。
我们就可以得到相对应的输出了,那么你看一下这个模型和我们前面所讲到的,这个数模型的逻辑是不是是不是一致的,只不过我们区别在哪,区别只是在于,我们刚才讲到的是一个从离散空间的角度上,得到对应的输出。
那么你看看我们现在介绍的这个模型,定义WQX是不是也是给我一个X,先计算一个QX,而QX一定是一个离散空间当中的一个位置,有了这个QX以后,WQX对应的就是当前这个离散空间位置上,所对应的那个输出值。
形式上虽然不一样啊,形式上可以说是很不一样啊,但是原原理上是完全一样的一个东西啊,原理上是完全一样的东西,你现在回过头来再看一下这个FX的定义哈,再看一下这个FX的定义,大家应该就能够明白了啊。
这个过程刚才已经介绍了对吧,你给我一个X啊,我先通过QX计算出你是在哪个叶子上啊,知道你在哪个叶子的位置上了,我通过这个W结构或者W数组,其实它就是个数组是吧,我通过查一下这个数组对应的那个叶子位置。
得到的就是当前这个叶子的对应输出值,而这个输出就是你输入X所对应的输出值,这就是在charge boost里面关于决策,关于决策树模型的一个定义,这个模型的定义啊是很有意义的。
一会我们会看到它后面进行这个嗯,推导的就是损失函数的推导过程当中,这个模型的定义其实还是非常,结构上还是非常有意义的啊,一会我们可以可以体现的到啊,关于这个GBD就是x g boost这个模型定义部分。
看看有什么问题吗,如果没有问题的话,我就继续啊继续,弄好了继续,好了有了模型了,我们上面先定义损失额模型,有了以后看一下提升决策树模型的预测输出,因为刚才只是一棵树啊,只是一棵树,那么在提升决策树当中。
我们无非就是把这若干克数进行一个累加是吧,所以YHEI等于负XI等于K,从一到大KFKXI啊,注意啊,这里的戴帽子的啊,带hat的都是模型的预测输出啊,都是模型的预测输出,考虑到它是一个加法模型啊。
它是一个加法模型,所以呢我们是把每一科啊,每一颗决策树进行一个累加,所以这个地方啊是一个sum k从一到大,KFK的一个累加过程啊,累加嗯下这里的K下标啊,仅仅表示了我是第几棵树啊,第几棵树。
那么有了这个预测输出以后,看损失函数定义正则化目标函数啊,正则化的目标函数,那或看一下很显然是加上了什么,加上了正则化项是吧,加上了正则画像,看一下怎么定义的,定义为sum i。
然后呢LYI额y hat i,然后是YI,这是我们在一个数据上实际输出,实际输出和预测输出之间的损失啊,这是一个数据上的损失,然后在整个数据集上进行一个累加,这个地方没没加上下没加这个这个上界哈。
你II从几啊,I肯定是从一啊,这个没问题,那上节是几啊,有同学有有印象吗,I从一到几,I从一到N,为什么I从一到小N,因为刚才我们检查过数据集里面,元素的个数就是小N个,所以你这个地方一定是从X1Y1。
一到XNYN,所以这个地方的损失一定是这样来计算的,那么这是我们普通的一个损失函数是吧,普通的这个结构风险额经验风险啊,这是普通的一个经验风险,那么在经验风险的基础上,我们看一下加上正则化项。
正则化项是怎么加的,sum k3K然后呢大欧米伽FK,那么很显然加上了正则化项,那是正则画像里面,这个大欧米伽又是怎么来定义的,看下面很显然我们前面一直讲到过啊,这个正则化项一定是用来表示当前模型。
复杂程度的一个项啊,就当前复杂程度的一个像,那这个时候我们大家需要想一下,一棵树模型怎么表示它的模型的复杂程度,很多的指标都可以完成这个度量,那比如说我们可以通过什么,可以通过这棵决策树的这个深度是吧。
深度啊,当然我们知道数越深,模型越复杂啊,这是一种方式,还可以通过什么,还可以通过当前模型的叶子节点的个数啊,就是那个大T前面刚才已经介绍过啊,T为决策树叶子节点的个数额,树里面的叶子越多,模型越复杂。
反之越小,所以这个地方第一项啊,正则化项的第一项包含我们叶子节点的个数啊,叶子节点的个数,前面这个伽马啊,前面这个伽马嗯也是我们的一个系数啊,也是一个嗯超三需要设置的啊。
用来表示当前你这个正则化项的一个重要性,这是第一项,第二项是个什么东西,第二项是个1/2兰姆达,W的二范数的平方啊,W的二范数的平方,谁的范数是W的范数,负W是谁,W是在这刚才已经介绍过了啊。
其实这个W就是把我们得到的每一个叶子,节点的输出形成了这么一个什么数组,所以我们才对叶子进行了编号嘛,最后一个是大T,那么这个里面的值就是W1W2,一直到W大T我们这个值也不能够啊,特别的大。
或者说用这个值的大小,也表征了当前模型的一个复杂程度,所以这个地方的第二项啊,这个地方第二项是1/2拉姆达额,W的二三数的平方,稍微把它展开,展开之后变成了那伽马T加上12拉姆达,1/3,从一到大T啊。
因为这个时候我们有大七个叶子,所以把每一个叶子的W都拿出来,进行一个平方向就可以了,好吧,这是正则画像,那么很显然通过正则画像的加入,使得我们当前构建的这个charge boost的模型。
就不太容易陷入所谓的过拟合现象啊,这是第一项改进啊,关于第一项改进,看看大家有什么问题吗,没有问题是吧,好我们继续嗯好了,有了模型的定义,有了这个损失函数的定义,那我们继续往下看。
这个时候的损失函数定义,还是刚才我们所说的是吧,还是在整个数据哎,就刚才我们说你把它补齐了吗,SUMI从一到N,我们整个数据集上损失L,加上正则画像就可以了,需要注意哈,哎这个地方看一下,稍微注意一点。
注意什么,这个y height i啊,y hat i很显然是模型的实际输出,而模型的实际输出按照我们前面所讲到过的,我们在DT轮上啊,因为我们的学习过程啊,前项分布算法的学习过程是一步一步的在做。
所以当我们看到DT轮上的模型参数的时候,你会发现这里的LT等于YI实际输出和你看了吗,既然是DT轮,那么就是在DT减一轮的模型输出上,再加上DT轮我们要学习的那棵决策树,作为我第T轮的整个的实际输出。
对预测输出再和我的实际输出计算损失,然后在数据集上来完成累加,再加上唉我DT轮的模型的一个正则化项,构成了我DT轮的目标函数啊,这一下哈这个有同学也经常会有困惑,困惑在哪,困惑就在你上面这个目标函数。
实际输出就是Y呃,预测输出就是y hat,然后实际输出就是YI,为什么在下面的这个损失函数里面,又你你那个YI为什么又等于这个式子,是因为我们整这里的one heat啊。
这里的one heat是我们整个学习之后的啊,最终的那个模型的预测输出,而这下面这个式子啊,下面这个式子说的是我在DT轮的学习过程当中,损失函数的具体形式啊,这是不一样的,所以你会发现上面这个式子里面。
直接就是实际输出和预测输出之间,的损失函数计算,而在下面这个式子里面,由于它是DT轮,所以我必须要把DT轮写成,按照我们加法模型的要求,写成DT减一轮的输出和我当前轮的模型的和,作为我DT轮的预测输出。
再和实际输出做损失计算,然后再加上正则画像作为我的目标函数啊,这个地方的困惑啊,解释清楚了啊,好了重点来了哎呀重点在哪呢,这个地方就比较慢一点了,嗯好好玩来看,既然我们已经完成了。
第T轮的目标函数的一个定义啊,这个定义形式上其实已经很嗯,已经细节信息已经很丰富了是吧,YI是已知的,y height t减1I也是已知的,FTXI是未知的,因为是DT轮要构建的那颗决策树啊。
I从一到N是在整个数据集上,然后呢大欧米伽FT啊,大欧米伽F的定义在这啊,F这个,这个是这个当前这棵决策树的叶子个数啊,以及W的值啊,在FT减一上也是已知的,但问题在于下面的一个工作。
我们需要在DT轮的目标函数的基础上,在one height t减一处进行一个二阶泰勒展开啧,这可能对大家有时就是一个挑战,为什么对大家来说是个挑战呢,因为为什么要进行二阶泰勒展开啊。
这就是个很大的一个困惑嗯,如果联想一下,我们在JBDT上的一个学这个这个一个介绍,可能这个困惑就会减少一些,因为很显然,我们在GBDT的基础上要进行模型的学习,我们是要计算一个负梯度方向。
而那个负梯度方向是通过我们的损失函数对吧,还记得吧,是我们的那个损失函数L,FX和Y对我FX的偏导的负值的一个学习目标,那么现在呢我们前面讲到过啊,你这仅仅是使用到了一阶梯度信息。
因为只有求一阶导数这个精度啊,这个精度一定不比我们的二阶梯度的精度要大,也就是他他还小一些,那这个时候我们如果是不是可以哎,如果在此基础上,我们再求一下二阶梯度,是不是更精度更高一些。
这就是为什么我们要这在这个地方讨论,选目标函数,在y head的T减一处的一个,二阶态的展开的一个问题,好吧,这就是我们的一个目标,就是我们看一下这个二阶梯度信息是多少啊。
这个作为如果我们作为优化目标的话啊,这个精度就要比刚才的一阶梯度信息,更加的丰富是吧,精度会更高。
那么既然要讨论到二阶梯度展开,又不得不回过头来看一下这个式子,看哪呢,我们看一个式子啊,看一下上面有一个展开式。
可能对于额部分同学来说,这个泰勒展开式已经忘的差不多了啊,我们也不需要讨论啊,不需要严格的讨论,这个具体展开的这个细节部分,我们看一下形式上怎么去看一下,一阶泰勒展开哈,FX的一阶态勒展开。
它约等于F0啊,在X0处的一个函数值加上F1到X0,乘上一个X减X0是吧,这是一阶梯度,二阶梯度啊,展开是FX约等于FX0啊,在X0处的函数值加上一个F1等于X0,乘以一个X减X0。
再加上一个F0到X0,乘以一个二分之X减X0的平方对吧,这很显然有了二阶梯度信息,那么这是一个在X0处的展开,如果我们把它写成迭代形式啊,写成迭代形式,什么叫迭代形式啊,就是这个地方的X0呃。
这里的是X减去X0,是个在X0处的展开,我们把这里假设XT等于XT减一,加上一个德尔塔X啊,我们是在上一次的那个XT减一的基础上,又增加了一个变化量,德尔塔X作为我XT的一个当前值。
那这个时候FXT在XT减一处的泰勒展开,就是下面这个式子,FXT等于FXT减一,加上一个德尔塔X啊,这个注意啊,这是个等式啊,FXT就是FXT减一那个位置上对吧,上一次那个位置上加上加上了一个增量。
德尔塔X啊,加上那个增量增量X作为我FX的一个输入,那这个时候展开之后怎么展,展开之后约等于FXT减一,其实我们就是以FXT减一处,作为我的它的展开位置啊,函数值吗,函数值加上一个F1导XT减一。
乘以一个德尔塔X,按照刚才上是X减X0,X减X0不就是个增量吗,这个增量不就是等于德尔塔X吗,再加上一个F两导,XT减一乘以个二分之X减X0,增量的平方就是德尔塔X的平方啊,这是我们这个偶数里面的结论。
你拿过来用就可以了,我们要把它拿过来用,用在哪儿看一下,分清楚谁是谁就可以了,谁是谁,什么叫谁是谁,看这两,我们既然是要对我们的目标函数,在f heat t减一处进行二阶泰勒展开。
很显然这里的LT就是这里的FXTLT,就是这里的FXT,然后呢按照我们刚才所说的LT等于什么,等于YIYHET减一,加上一个FTXI,注意啊,你需要仔细对一下这里的XT减一。
就是这里的y height t减一,有同学转不过来啊,这个你这里是Y这里是X能能是一样的吗,抽象首先就是抽象嘛是吧,注意这里的X就是模型的,就是函数的输入啊,就是函数的自变量。
你可以发现这个模型的这是关于F的自变量,那这个模这个函数L的自变量,是不是也是y hat t减一是吧,这是XT减一啊,就是这里的Y害的T减一,这里的FTXY就是这里的德尔塔X啊。
就是你每一次要新增加的那个增量,有了这个对应关系以后,在下面约等于号了啊,约等于号约等于SM从一到N其他都不变,然后这里的L是y i y HT减一,就是这里的YXT减一。
在T减一处的函数值加上加下面加什么,加下面这个式子是F1导XT减一对,我们的XT减一求偏导吗,你看损失函数对Y害的T减一求偏导,然后呢乘以一个德尔塔X,乘以一个德尔塔XFTX刚才也说过。
这里德尔塔X就是FTX再加加上什么,加上一个F两导XT减一,这里你看这是F两导XT减一,然后呢再乘以一个二分之德尔塔X的平方,1/2,往前提1/2往前提,德尔塔X的平方就是FTX的平方,好吧。
所以说啊从这从上面这个目标函数定义开始,以及在外head的T减一处的二阶泰勒展开,完全其实就是一个符号提示,不完全就是一个符号的一个替换啊,这个地方你对应着每一个符号啊,它的展开式的。
每一个符号一一的进行对应就可以了,好吧嗯,这一部分有什么问题吗。
兰姆达也是权重系数吗。
哪个兰姆达,哪个兰姆达,你说这里的兰姆达吗,呃这不是模型的选值系数,这是我们的呃,正则化项当中的一部分的一个超参数啊,这不是那个全职系数和模型的全职系数没关系。
好吧,为什么要把叶子节点加到损失函数里面去啊。
是在这是吧,前面我们讲到过啊,正则这个过拟合的问题啊,过拟合欠拟合的问题,过拟合项就是模型太复杂了,我们需要在正则画像中项当中加入,表示模型复杂程度的一个量,那这个时候怎么表征当前模型的复杂程度。
叶子的节点个数是可以用来表示模型,复杂还是不复杂的,就像前面我们讲到的,如果我们只有这个经验风险最小化,我们会使得模型很复杂啊,会出现所谓的过拟合,现在这个过拟合现象。
而模型越复杂的一个相对应的一个情况,就是模型的不复杂,模型的不复杂,就是尽可能的希望模型的叶子节点尽可能的小,所以这个时候当我们追求这个呃,损失整个目标函数的小的时候,我们一定知道经验风险是越来越小的。
但是相对应的经验风险越来越小,会导致我们的正则化项越来越大,那这个时候是这两个的结果的尽可能的小,所以一方面考虑到了在数据集上,我们要使损失小,还考虑到了你的模型还不能太复杂。
所以这个模型加上正则化项之后的,这个模型就很很很少会出现所谓的过拟合现象,好吧,这就是这个在目标函数当中加上正则化项啊,那下面刚才介绍到的呢,重点在于这个二阶泰勒展开。
所谓的二阶泰勒展开呢其实就是套公式啊,就是我们的泰勒展开公式,这个时候只不过你需要仔细的去划分一下,到底谁是FXT,谁是那个德尔塔X啊,有了这个对应关系以后,展开公式是是没有问题的,好吧嗯,还有一点啊。
可能会有同学提提出疑问来提出疑问来嘶,怎么看这个L函数,和你刚才所介绍的那个FXT不一样,哪儿不一样呢,又说不出来,很显然有一个地方不一样,不一样在哪,细心的同学会发现,这里的L函数是一个二元函数。
什么叫二元函数,它有几个几个自变量,它是有两个自变量的,你发现了吗,那比如说上面这个式子看的更清楚,我们上面最早的时候讲损失函数的时候,说到过损失函数是二元函数,它是由两个量构成的,一个是实际输出。
一个是预测输出,才能计算这个这个才能计算损失是吧,所以哈你会发现除了这一点不同之外,二元函数那就二元呗,更重要的在于这里的YI还是个实际输出,是个已知值,那它既然是已知的。
也不妨碍任何的这个额泰勒展开的计算啊,所以这个地方稍微仔细一点。
灵活一下,应该没有问题啊,看看这一部分有什么问题吗,而且电影没看懂,回去以后看视频啊,把那段视频这个材料我也发给大家啊,那个地方你再对应的自己看一下,就是个对应好吧,别对应错了就行了。
求导的时候FX与FT减U无关嘛,哎这是个好问题,我看是哪个同学啊啊0906同学啊,嗯额首先这个FX是对应的残差吗,这不是个残差啊,没有残差的概念,那但下面这个好问题,求导的时候是F与FT减一无关吗。
就说哎刚才那个求偏导对谁求偏导啊,对求谁求偏导,是在y heat t减一处的二阶泰勒展开,我们在前面求那个呃YIFXI对FX求导的时候,用负梯度计算的时候啊,负梯度计算的时候。
很显然我们是在对FX求偏导,但是这个FX上注意后面还有一个竖杠,竖杠在上面,竖杠在上面,竖杠在这这里的你要求偏导,你对谁求偏导啊,是对FX没问题,但是我们知道我们每一次的迭代过程当中,的FX是多个啊。
有F1XF2X一直到FMX,那么到底是对哪个FX求偏导,那大家觉得你应该对哪个FX求偏导,你要知道你必须要知道函数的具体形式以后,你才能够计算出它的偏导,以及它的负梯度的方向。
既然你需要对这个FX是已知的,那么很显然在第M部的时候,FX是不知道的,你不能用,那这个时候你只能用谁,只能用他的上一部那个FM减ex,所以这个地方你会发现啊,我对FX求偏导的时候。
是FM减1X作为我的求导对象,同理刚才是如果是一阶泰勒展开,那这个地方是二阶泰勒展开,那二阶泰勒展开的时候,你出现导肯定是对f HT减一嘛,就是你上一轮所学到的那个模型。
就他的那个偏导嘛啊这是个好问题啊,细心看了啊,但是这个问题啊,其实如果你再仔细一点考虑的话,其实是也是能够思考出来的,你对谁求偏导,你如果你对它不知道不了解,还是那个结果出不来,那谁了解或者谁知道。
在DT轮,很显然T减一轮的信息你是知道的是吧,好吧好了嗯好,当有上面这个这么复杂的式子以后呢,那么下面我们就需要做一些符号上的这个替换,使他能够简单一点,怎么替换,首先我们看看一下。
some i从一到n l y i y HT减一,这一项是没有变的啊,这一项还在这,那么下面这一项啊,下面这一项嗯,很显然这里的FT减XFT减X还在,所以这两项是没动,那么很显然这一项就变成了这一项。
那么很显然下面说到过,用JI啊,来表示损失函数在Y害的T减一上的偏导值啊,就是做了个符号替换,也没什么太大问题,那么同样这里的F平方F平方都在,那么这里的二分之一二分之一也在那H在这儿。
那替换的是这一项,那么很显然,hi等于损失函数对Y害的T减一的,二阶导数和二阶导数啊,放在这个地方做了一个简单的符号替换啊,就是为了,下面写的方便而已好了,二阶特点展开就展开完了展开完了以后。
我们继续往下,因为展到这个地方啊,讨厌在这个地方后还有个正则画像好吧,我们把正则画像一块展开是吧,把正则化项也展开,展开之后呢,我们就知道正则化项,大欧米伽FT等于这里的伽马T加上12。
兰姆达sum g1从一到大T,然后W的WG的平方啊,这是我们刚才所介绍的正则化项的那一项,加进来就可以了,加进来之后发现了问题了,问题在哪儿啧,加进来之后啊,发现这个式子呢就已经复杂到好好。
好多地方都莫名其妙的地方,注意啊,前面有一个sum求和是从I从一到N,后面也有一个sum求和,J从一到大气这两个求和,那就很麻烦,为什么这么这么说呢,因为前面这个求和是在整个数据集上来求和的。
I从一到N嘛,I从一到N整个数据集上求和,后面这个求和J从一到大TT是什么,还有印象吗,T是我们嗯模型当中决策树的那个叶子的个数,这两个sum求sum求sum求和啊,这个求和的对象是不一致的啊。
就是一个是在数据集上,一个是在叶子叶子上,那这个时候对我们整个公式呢,这个计算会带来一定的麻烦,下面我们就需要把这两个求和公式进行统一啊,统一起来啊,在一个循环上就完成这两个活啊,就是这么个目标。
这个地方呢就是就是一点小技巧啊,小技巧技巧在哪儿,先说明一下,虽然从形式上我们会发现啊,虽然在形式上我们会发现,这两个求和形式上是完全不一样的,但是呢仔细想一下,你反正你两个都是求和求加法啊。
求若干个数的和吗,求若干个数的和,我们看一看你这若干个数的和的结果,是不是一样的,第一个求和啊,很明显I从一到N,很显然我们是在数据集上来完成求和的啊,数据集上来完成求和的N在哪往前找,看到N了吗。
N是我们数据集的模啊,数据集有多少个元素,你这个N就是多少,那很显然这个求和是在数据集上来完成的,换句话说我需要遍历整个数据集,好看后面这个后面这个是什么,刚才我们也已经讲到了啊。
他是我们学习之后的那个决策树的叶子节点,叶子节点上的求和,叶子节点上的求和,我第一个叶子,第二个叶子一直到第七个叶子,我都需要进行求和,求和的对象是谁,求和的对象是对每一个叶子的输出值的平方,对吧。
每一个叶子的输出值的平方,对每一个叶子进行求和和,对整个数据集求和,怎么能够把这两者统一起来,换一个角度啊,换一个角度,如果我们在进行决策树的学习的过程当中当中,大家想一下,是不是在学习完成以后。
我们必须要保证每一数据集里面的每一个数据,都必须要落到决策树模型的每一个叶子里面去,想想,我再重复一遍,就是数,当我们通过数据集啊学习完成了一颗决策树,那么是不是也就意味着。
我当前这个数据集里面的每一个数据,都一定被映射到了,这颗学习之后的决策树的,某一个叶子节点里面去了,我虽然不知道它一定在哪一个叶子上,但是我一定知道的,他一定是在这些叶子当中的哪一个里面。
某一个里面是这样吗,那如果有了这个视角以后,那大家想一下,我对一整个数据集的便利,是不是就可以转变成对整棵决策树里面的,每一个叶子节点的便利,然后遍历每一个叶子节点,那么大家想想这两个效果是不是一样的。
再举一个例子啊,再举一个例子,我们都知道咱们学校每一名同学,都一定隶属于学校里面的每一个班级,这是没问题的是吧,你是三班的,你是二班的,你是四班的,那么当这个学校的校长,要便利整个学校的学生的时候。
他有两种方法可以去完成,第一种方法,他可以拿着整个学校的点名册对吧,你不有学号吗对吧,我大不了就按照学号,一个学号,一个学号的点名,那这个时候很显然,就是在对整个数据集进行便利,这是一种方式啊。
我从一号学生到N号学生遍历一遍,那这个时候我就便利完了,那么除了这种方式之外,我又知道,既然每一个学生都在某一个班级里面,我还可以怎么办,便利我先遍历一班,在一班里面我把所有的学生都遍历完了。
再遍历二班啊,在二班里面再把所有的同学都遍历完了,一直到最后一个班级,把所有当前这个最后班级里面,所有的同学都遍历完了,那我也有信心,相信整个学校的所有的同学也都便利完成了啊,其实是一个逻辑啊。
其实是一个逻辑,就在这个地方,我们碰到了一个困难,就在于这两个sum求和啊,在形式上不一致啊,这个地方我们需要把它统一起来啊,这个时候我们需要折中一点,就是需要把这里的整个数据集上的求和。
把它形式上统一成在整个叶子呃,所有叶子节点上的求和的一种形式,那看具体怎么去做,看下面我们需要定义这么个东西嗯,定义叶子节点G上啊,某一个叶子节点G上样本的下标集合,我知道哈,每一棵树。
我们一棵树有若干个叶子节点,有若干个叶子节点,比如说就是三个叶子啊,三个叶子,一号叶子,2号叶子和3号叶子,那我一定知道我数据集里面的所有的数据哈,都在这三个叶子节点里面是吧,然后呢我定义这个叶子上。
比如说定义2号叶子上,所有样本的下标集合为这么个东西,就是当前这个叶子节点里面有若干个元素啊,比如说X1X2嗯X8,举一个例子啊,仅仅是举例子,那这X1X2X八这三个叶子的下标,我们把它构成一个集合。
叫做IG叫做I2,因为他是2号页了,也就说II2现在等于什么,等于128这么个东西,看一下形式哈,看一下形式IJ说明的是在DJ个叶子上,所有的数据的下标的集合,所以你会发现它的形式定义在下面。
这个式子为什么是这样来定义,还记没记得还记得这个q xi是什么东西了吗,找找啊。
忘了啊,忘了就往前找,q xi q x是不是在这QX是不是个映射,你给我一个X,我把你映射到叶子里面去是吧。
现在就用的这个Q函数了啊,这个Q函数就是说明的是你给我一个X,你给我一个X,我把你当前这个X的叶子给你找到,当然叶子的下标是G,那么你看一下是不是就像刚才我们所说的,把叶子节点G上的样本样本就是数据。
就是我们的数据,将叶子节点上数据的下标哪些数据啊,一当前这个叶子节点上所有的数据,是不是都一定满足QX等于G,因为我们知道QX就是完成叶子节点映射的,只有满足了QX等于G,才。
说明你当前这个X是属于这一页的里面的元素,而把这些所有的元素找出来以后,我要什么,我要的是元素的下标,所以是xi为什么这里是I的集合啊,就是这里的xi,好吧,有了这个关于叶子节点G上的。
样本的下标集合以后,你看看下面,我们就可以把目标函数表示为,按叶子节点累加的形式累变成下面这个形式,看看还是原来那个目标函数啊,还是原来的目标函数哎,这个时候SU就不再是在整个数据集上求解了。
而是变成了J等于一到T我遍历所有的叶子,在遍历每一个叶子的过程当中,我要计算下面这个值啊,计算后面这个值,那后面这个值看看,那么看下面,既然我们现在是在数每一个叶子上进行便利,那么下面的求和。
就到了每一个具体的叶子里面去了,比如说这里的I属于IJ,说明当前这个元素,是我D这个叶子里面的某一个元素,当这个便利完成以后,是不是意味着当前D这个叶子就便利完了,那在外层循环里面。
当外层循环所有的叶子都便利完成以后,是不是也意味着整个数据集也便利完了对吧,所以说啊SAMJ从一到T开始遍历叶子,SAMI属于IJ遍历当前DJ个叶子,在D这个叶子里面。
我们在遍历这里的GI乘以FTXIJI啊,没有问题啊,JI没有问题,就是这里的JI,那问题是你这个FTXI跑哪去了,有人I发现FTX它没有了,这里变成了WG,那你看看这里为什么有这么一个式子。
就是为什么你把这里的FTXI用WG可替换,换句话说,很显然这里要保证f t xi是等于WG的,为什么这个等式是成立的呢,为什么,注意FTXI是我们前面定义的那个数啊。
哎这个时候就体现出啊,这棵决策树的定义形式的这个好意义了,这里是FX等于WQX。
按照我们这个数的定义,你是需要等于FTXI。
按照我们的定义。
不是W不是Q应该是等于wq xi,没问题吧,哎你这个地方怎么变成了G了啊,不要忘了你,你是在第几个叶子里面,所有必须要满足所有的W呃,所有的QXI就等于G,那不就是等于WG了吗,另外怎么来的了吧。
所以从这一项到这一项是需要它俩相等,它俩相等呢,就是因为这是按照定义来的,但是呢我们知道他是在当前叶子节点里面,QXY就等于G,所以是等于WG,你看这就体现出啊,这个刚才那个函数的额数模型的定义的。
技巧了吧,就在这儿好了,继续往下吧,如果这个明白了以后,下面其实也就明白了啊,然后呢是二分之一二分之一没有问题,然后呢同样到了叶子里面是sum i从一呃,属于IGHIHI没问题。
然后这里多了一个兰姆达是怎么个意思呢,然后这个地方又多了一个WG的平方,又是什么意思呢,意思在于,既然我们已经变成了便利叶子,那后面这个遍历叶子,是不是也可以拿到整个的循环过程当中来了。
我没有必要遍历两次叶子,再在当到了某一个叶子里面,这两个循环这个活我是不是都可以干了,我在这个里面,我第一个第一步先把这个数据的便利,这个活干了,第二步再对你的输出的值的平方的求和也干了。
是不是也可以了,所以说这个地方,所以这里的J从一到大T里面前面这一项啊,因为这里的没有WB的平方啊,这第二项呢,我们就完全可以把WB的平方往前往前移进来,一进来以后呢,这个地方刚才我们说到过这里。
同样哈是FT的平方,xi按照定义应该是等于怎么老喜老喜欢写Q,应该等于W的q xi的平方,就等于WG的平方,明白了吗,这是这是这是那么来的好吧,当然这个地方是不是还有一个WZ的平方,也要也要过来。
那这就意味着前面的系数上要进行相加,又变成了1/2,往前一提变成了一个sum i hi,加上一个这里的lambda,就变成了这个式子,这一部分是这两部分的求和,这两部分的求和。
这一部分其实就等于WG的平方,所以这里的W的平方就向后提了,然后前面的系数这里有个1/2,H这里有个12兰姆达,把1/2再往前提,所以剩下的就是H加兰姆达好吧。
那后面这个伽马T没办法就扔在后面,拉倒了啊,就扔在这,所以说这是今天可以说是嗯,又是一个额比较不太好理解的地方,是我们需要做的工作,是需要把sum进行一个形式上的统一,最核心的就在于。
我们需要在便利业务的过程当中啊,每一个叶子都遍历完了,来表示我对数据集的便利,那这个时候我需要在当前叶子的便利过程当中,需要定义一个叶子节点的一个元素下,标的集合啊,就这么一点地方介绍清楚了就可以了。
这一部分看看有什么问题吗。
这两个sum求和,是要遍历完每一棵树的所有叶子节点吗,是I是N个数据,G是T个节点,不该是SUG包含在SUI当中吗,呃,是I在这当中,就像刚才我们所说的,学生是在班级里面,数据是在叶子节点里面对吧。
第二位HI为啥又是IG呢。
HI应该了解了是吧,OK没问题啊,好了这一步完成以后哈,你会发现哎我的损失函数啊,终于变成了这个样了,那这个损失函数长这样有什么用呢,看下面不要忘了我们是要什么,我们是要令损失函数最小的时候。
那个输出值不要忘了我们现在的目标哈,其实那个,那个FX的定义还告诉我们,我这个输出是在W上来完成的,计算出计算出的这个输出值,我一定是要使这个W的值在目标函数的最小化,的基础上,要尽可能的小。
对应的就是最优的模型输出,那这是我们的优化策略是吧,因为正好我们的目标函数还加上了正则化项,这个优化策略应该是很好的,避免了所谓的过拟合,那策略有了以后,套路不就是求偏导吗。
对我们的WG求偏导仔细一点啊,这个地方需要特别仔细一点嗯,没什么技巧,下面就没有什么太多的技巧了,就是一个,仔细了啊,这个式子要对WG求偏导,你看看你能得到一个什么结论,注意啊是WG。
所以外面这个sum g从一到T的循环,其实就没有必要了,因为在循环过程当中只有一项是WG,其他的项要么比WD小,要么比大GW大是吧,那么当只有WG这一项上,我们对WG求偏导。
所以这一项肯定是SMI除以IGGI,再加上一个哎,这个时候你会发现,同样还会有一项是WG的平方向,这个二往前一提二分之一一乘变成了一,所以剩下的是sum i属于IGHI,加上一个LAMBA。
后面这个伽马T没有包含WG的那一项,所以整个式子等于零,整个式子等于零,把前面这个和后面这个因为可以看到啊,这一项连是只有一次项嘛,就变成了只有前面的系数,这是个二次项,二往二已经往前提了。
从二次项降成了一次项,所以把这一项移到等式的右面去作为分母,所以就变成了下面这个式子,WG的星最优的模型输出等于负的sum i,从I除以IGHI,加兰姆达分之SUI属于IGGI啊。
这一项生成的是SUGI,加上这一项,剩下的sum h i加兰姆达,然后是W然后这一项等于零,所以W星就等于这一项向右向右扔,这一项除过去就变成了一个负的,分母是sum h加兰姆达分之13。
IHI没问题吧,所以就是这一项好吧,好了,我们看看这一项哈,这一项当中的几个量,第一个一阶导数,二阶导数兰姆达,拉姆达是超参数,这个是我们设置的,这个很显然是知道的,那这里的HI和JI和HI1阶导数。
二阶导数知不知道看什么定义啊,一阶导和二阶导数的定义在这个地方,你会发现,这里的求偏导都是对我们的YHET减一,来完成的,而我们前面刚讲到过y high的T减一,是我们的T减一部的已知模型。
所以这里说的偏导值,不管是一阶还是二阶也是已知的呃,在D替补上都是已知的对吧,既然在TDT补上都是已知的,所以这里WG星也是最优解好吧,这个是三三个部分都是都是已知量嘛,所以这个地方也是最优解嗯。
到此为止我们就解出了最优解的一个嗯,计算公式啊。
看这一波有什么问题吗,其实有了损失函数求偏导,让它等于零解出来就可以了。
OK那我们继续往下,下面一项呢,其实又是一个比较不太好理解的地方啊,不是特别好理解的地方哪呢,我们继续往下看啊,为什么说不太好理解呢,看下面,当我们有了这个关于W的最优的输出值以后啊。
那么下一步我们把这个WG星啊,把它回带到目标函数里面去,你不是认为有WG和WG的平方吗,既然我们有这个式子了是吧,把这一项回带回来回来了,回电回来以后呢,稍加整理,我们就可以得到下面这个式子。
有人说还挺复杂,其实也没什么复杂的啊,稍微整理一下,能约的约约,能能合并的合并,最后得到下面这个式子,得到这个下面式子呢,就是说当我们代入每一个叶子节点,G的最优分数啊,就是最优分数的时候。
得到最优化目标的函数额,得到最优化目标函数值啊,得到最优化的目标函数值,这个最优化目标函数值呢,就下面这个式子就等于负的二分之一三分之一,从一到达T分子是SAMI,属于IGGI的平方,分母是SAMI。
属于IG hi加上一个兰姆达,加上一个伽马T嗯,这是我们在最优分数的意义上的,最优的目标函数值啊,最优的目标函数值,也就是说啊我的函数值是这么个式子,这么个值啊,函数值是这么个值,而这个函数值的这个值。
你会发现所有的值都是已知的,T是叶子节点的个数,我只需要查一下叶子有多少个节点,就可有多少个叶子就可以了,这里的这个伽马呢是我们的这个参超参数,前面已经说到过,兰姆达呢也是超参数JI和HI1阶导数。
二阶导数在DT减一轮的时候也是已知的了,所以这里的最优的目标函数值也是已知值,那它会告诉我们一个什么样的一个结论,就是说啊,我们当在某一步过程当中学习了一个最优的呃,学习到一棵树以后。
那么这棵树的最优的输出带回到我们的这个呃,回带回我们的目标函数以后,使得我们的函数目标函数会得到这么一个结果,这个结果呢是不要忘了啊,不要忘了这个结果是所谓的目标函数值,简单一点说。
他就是在不断的在计算损失的基础上,在数据集上进行累加的一个结果,不要忘了它是它的本质,我们嘎啦嘎啦讨论了半天,不要忘了它到底这个目标函数到底是个什么,这个目标,其实最本质的还是在我们的实际输出和模型。
输出上的损失的和呀,也就是说当我们在在某一刻,当我们按照前面的逻辑学习到了某一棵树以后,这棵树里面的一阶导数,二阶导数兰姆达伽马T我们都知道了以后,我们发现了当前这棵树T的损失是这么一个值,L值。
这是一个损失值啊,或者说是目标函数值是这样吧,那它有什么意义吗,就这个目标函数值它它有什么意义吗,看下面看下面。
我们知道数是怎么得到的,数是通过节点的分裂得到的对吧,我们你看我们当在刚才那个数的基础上,如果再分一层得到这么一个数。
我们把它称之为T1撇吧,注意啊,刚才是三个节点,刚才是三个节点,三个叶子节点现在呢是变成了四个叶子节点,两棵树结构上也不一样了,所以刚才那是T数,这是T1撇数,那么T数和T1撇数的不同。
在于损失函数肯定也不一样了是吧,刚才那是L这是L1撇的,不一样就在于模型结构发生了变化,由原来的三个叶子节点啊,由原来的三个叶子节点,现在变成了四个叶子节点,那这个时候叶子节点的不同。
就在于原来的某一个叶子节点通过了什么,通过了分裂啊,通过了分裂,构成了局部上发生了变化,那我们知道哈,当我们一旦知道了模型结构以后,这棵树被确定了,损失函数也就被确定了,那下面问题在于。
我当前这个UT数向T减一数的,这个分裂过程当中,你说我是分裂还是不分裂,是根据什么来的,分裂还是不分裂是根据什么来的,肯定是根据损失的大小来的,换句话说,如果我分裂之前的这个损失。
要小于我分裂之后的损失,你说我还分裂,不分裂,我就不分裂了,我就没必要嘛,因为分裂之后你反而损失大了,我还需要干这个工作吗,反过来,当分裂之后的损失小于分裂之前的损失以后,那我当然需要分裂。
有同学就会有疑问啊,这个不分裂啊,损失还会更小吗,会这样,因为我们前面讲到过,你分裂之后模型越来越越复杂,可能会出现所谓的什么过拟合现象,所以这个时候你会发现,我当前模型分裂和不分裂。
都是需要根据损失函数来进行判断的,而我们又知道,损失函数的最优解就放在这个地方,就明明白白的放在这个地方,那好了,你告诉我分裂和不分裂,我们是不是就可以通过分别计算,损失前和损失之后的这个啊。
不是这个分裂前和分裂后的损失的大小,是不是就可以了,这就是在GBDT上呃,在XGB上啊,x g boss上,我们进行模型分裂的一个依据啊,回忆一下啊,回忆一下我们的id3C4。5和cut数。
分别采用的是信息增益,信息增益比和基尼指数来完成的,特征分裂的依据啊,找到的特征分类依据,而在x g boost里面啊,它是通过定义损失函数的形式来分别比较,分裂之前和分裂之后损失函数的大小。
作为我们当前决策树是否分裂的一个依据啊,所以说这些是不一样的啊,这些是不一样的,那好了,有了这个依据以后,我们看具体怎么去做这个事情,怎么去做呢,怎么去做呢,先给这假设嗯嗯既然要分裂,那就先分裂吧。
分裂之后看看结果不就完了吗,好了,假设IL和IR分别为分裂后,左右节点的实例集,那先分裂再说是吧,那这样当然还要保证IL和I2,还是原数据集的左右子数是吧,那么分裂后损失函数的减少量。
由下列式子来表示啊,就减少了这个量由下面这个式子来表述,什么意思呢,注意这是我们分裂之前的原数的损失函数对吧,这是分裂之后左子树的,这是分裂之后右子树的啊,这是这是分裂之后左子数的啊。
这是分裂之后右子树的,这是原数的这个损失函数,那这个时候我们就像刚才我们策略是一样的嘛,左子树的损失加上右子树的损失,和原数的损失差值进行一个比较,我们的目标很显然是。
就根据这个分裂依据来判断我这是减少量吗,这是损失的减少量,这个损失还损失的减少量和零和进行比较,是不是就可以了,如果这个损失的减少量大于零,意味着我有我有我有必要分裂,因为你损失会越来越小嘛是吧。
如果你的损失的减少量小于零,那就别分裂了,你还你还不如保持原来那种状态对吧,所以说啊这个时候差距boss里面还有一个,就是这是最这也是我们另外一个不同的地方,和我们之前的决策树啊。
它是由我们的损失函数的这种变化的不同,来决定啊,作为依据来决定,是否是对当前的绝对数加以分裂,好吧好了,那这样的话我们看看算法其实很简单啊,就有了这个原理以后,模型就很简单,这个算法就很简单了。
我们看下面分类查找,分类查找的一个精确贪婪算法啊,就我们的分类依据既然有了,我们就按照这个依据来进行查找就可以了,首先那输出呢就是输出最大的分裂位置啊,最大的分裂位置就像我们在在什么。
在那个卡子数上来查找是一样的了啊,首先基尼指数为零啊,就是损失为零,你这样可以理解,然后呢分别计算左子树和右子树的损失啊,左子树的一阶梯度和额,这个数的一阶梯度和二阶梯度啊,一阶梯度和二阶梯度。
然后呢在所有可能的一到D,这是我们的特征维度啊,这是我们的特征维度,在所有的特征上分别进行分裂的可能性的查找,我们前面讲到过啊,特决策树的生成就是在某一个特征上进行分裂,那我找哪个特征呢。
我需要遍历所有的特征是吧,遍历所有的特特征,在便利某每一个特征当中,分别计算在当前特征左右指数啊,进行划分或者分裂以后的损失的一个计算,那这个时候呢首先在当前这个特征上对左子树,右子树的这个一阶特征。
二一特征都需要清零,清零完了以后再对当前特征上看到了吗,j stored i by x j k刚才我们说的是第K个特征,在我第K个特征的所有的取值,所有的数据上啊,所有的数据上进行一个先进行一个排序。
由大到小或者由小到大无所谓,反正你排序就可以了,这样的话呢把这个G挑出来啊,把这个G挑出来,以当前这个G作为我的分裂位置,作为可能的分裂位置,既然这这个挑出来以后,哎。
看下面分别在以当前这个位置为分类位置,计算它的一阶梯度和二阶梯度,然后把这个一阶梯度加到左子树里面去,加二阶梯度加到左子树里面去,那么这个时候右指数的一阶梯度和二阶梯度,就是由我们原数的。
原数的一阶梯度和二阶梯度,分别减去左子树的一阶梯度和二阶梯度,来进行计算,计算出来以后呢,比较比较一下,比较什么呢,就像刚才那个我分裂之后的损失,和分裂之前的损失的那个损失的减小量,比较一下。
如果这个量减小到和之前的那个减小量最大的,那个,当然就是我需要找到的,那么我需要尽可能的减少,可能都会使得损失减少,但是不同的特征上,不同的特征的位置上减少的这个量是不一样的。
我当然是希望是找到使得这个减损失的减少量,最大的那个位置上,所以我不断的啊不断的把这个位置进行记录,记录的同时呢,和新的位置的这个减少量进行一个选择,选择那个原味,原来的和新的更大的那个减少的量。
作为我score里面的值,好吧,大家想一下,当内层循环,当这层循环完成以后,是不是在特征K上所有的数据上,这个分裂损失减少量最大的那个就找到了,那么在外层循环上,既然每一个特征。
既然一个特征上所有都找到了,那么在所有每一个特征上我都找到啊,都遍历一遍,把那个最大的放到当前的score里面,那这个时候输出的就是我所有的特征上,所有的特征取值上,使得损失减少量最大的那个分裂值。
其实说明一下啊,这个分裂值是多少,其实并没用对吧,其实我们并不关心这个这个损失,减少量的最大值是多少,其实并没有,我们更关心的是什么,我们更关心的是这个减少量最大值,所对应的那个特征以及特征的位置输出。
其实啊这个算法应该应该啊应该输出的是什么,应该输出的是那个最优的特征K以及特征,K上的那个取值J,就和我们在cut树上输出的那个那个那个特征,以及特征的分裂位置是一样的,明白没问题吧,啊。
那么这个时候我们有了这个分裂特征,以及特征的分裂位置,就可以不管我是用呃,再代入到我们那个决策树的生成过程里面去,就可以得到我们的决策树了,好吧,看这部分有什么问题。
嗯哦我觉得回去以后和那个cut树的那个特征。
以及特征的分类位置的那个那个那个算法啊,你需要回去以后再咳一块再再看一下好吧,因为我们都额目的哦,算法目标其实就是在整个数据集上的,所有的特征以及特征的分裂,可能位置上查找一个最优的位置。
那最优的位置的依据这个地方已经给出来了,所以说你会发现前面这些工作啊,这是在整棵树上完成,一阶梯度和二阶梯度的计算,然后呢这个K从一到D啊,从D到D就是所有的特征的遍历啊,所有特征的遍历,你不是呃。
输入是一个是一个是个多维度的一个向量吗,这是每一个维度上都可以,都可能作为我的特征分类位置嗯,比如说前面我们讲到过那个例子,贷款那个例子是吧,年龄额呃,年龄还有什么,这个是否有房子,是否有工作。
还有信贷情况,这不都是每一个都有特征吗,每一个特征我都不需要进行便利,每一个特征里面的每一个取值,比如说嗯我以这个年龄为例,年龄分青年中年老年,那么年龄里面的青年中年老年,我都需要查找一下这个值。
就这个这个减少量是不是最大,便利完了以后,我在拿着这个最在当前这个特征啊,当前这个年龄特征里面的,额损失的减少量的最大值和,比如下一个特征是那个有没有工作啊,工作这个特征里面无非就是有工作没工作吗。
我在便利一下这个有是否有工作,有工作没工作,这两个职上,所有这个损失函数的额损失减少量的最大值,再比较一下,那么在年龄里面的这个损失减少量的最大值和,是否有工作里面的这个年龄的这个这个工作的。
这个损失的减少量最大值最大的那一个,当我们完成了所有在特征上以及特征的可能,取值上的这种减少,损失减少量的最大值的计算的时候,那个位置不就是可以作为我当前的一个,分裂位置了吗。
比如说比如说啊你这个年龄啊,老的这个中年啊,中年这个年龄上的这个损失的减少量是最大的,那我就以当前年龄的中年为例,把当前这个数进行划分就可以了,这是关于这个特征分裂部分。
那回过头来看看我们关于X级boss的这一部分啊。
前面就不看了啊,从这开始看嗯,回去以后你需要好好的理解一下这个,我觉得这个呢别看很多的同学啊,就是啊看着简单可能就pass过去了啊,是这么简单吗,他很显然简简单有几,它简单的这个简单有他的简单的道理啊。
每一次面试的时候,我经常的会问一些同学对吧,你比如说你这里为什么是FX等于WQX,好多同学他就这么定义的啊,我说定义是这样定义的,你它的原因是什么,就不是那么的清楚是吧,所以说你很显然他的作用。
在后面的简化过程当中是很重要的是吧,这个地方你需要自己再看看嗯。
再下一个呢是这是正则化项加入到了,E的节点和W的输出啊,这个对于他的正则方向,这个是的改进之一啊。
他的改进之一,这个是需要看一下的,这两第二点下面一点呢就是这些都展开啊,这个时候刚才有同学有疑问,这个地方没有什么技巧性啊,就是把公式一个一个仔细的对应清楚,就可以了啊,就这个还不清楚。
那只能是看公式就看就可以了,好吧嗯,这是正话第二个正则化项的地方啊,第三个就在这啊,当我们有了这个二阶TT泰勒展开以后,这个sum求和这两个也是哈,有很多同学就划水,就就是划水。
我说这个你从这一步怎么怎么做到这一步呢,有同学说不就这么得到吗,我说怎么就就就得到了,我说特别是啊,其实最核心的就是在这个地方啊,就是关于当前每一个叶子上的,下标集合的这个定义啊,所以再深入的说一下啊。
如果有兴趣的同学可以看一下陈天琪老师,他做这个工作时候本身的那篇论文啊,那篇论文里面其实还是关于这个部分,还是说的很清楚的啊,只不过还是需要有点改进而已啊,这是这个地方的一个理解啊。
第三个地方呢就这啊就是这个损失,就是这个分类依据的问题啊,他其实是通过我的有了最优损失以后,我带回到原损失函数,得到了一个损失的一个额表达式,既然我这个损失的表达式都已经有了,我分裂还是不分裂。
通过损失的大小的比较,就可以一目了然的得到这个结论吗,嗯只不过这个时候麻烦就在于,我需要在所有特征和特征取值上进行便利,那便利就便利呗,无非就是遍历的过程嘛,仔细一点控制一下左右指数的位置就可以了。
先上来求一个整的,然后把左数的清零循环遍历的过程当中,不断的求出JI和hi加到左里边去,那右边的不就是这整个的减去左边的,不就得到了右边的吗,嗯好了。
原理部分就是这些内容。
嗯那下面我们看看应用啊,这个因为这一部分呢,我预期好像在后面的课程里面没有过多介绍,所以简单的和大家一块过一遍好吧,就是参数就是调参嘛,参数呢我们大学有这么三类,就通用参数提升器,参数和学习参数啊。
这个看一下通用参数部分呢,嗯最重要的其实就是booster的选择,就是我们的这个提升器啊,就是我们的这个booster,这个提升器的这个选择的问题呃,有两种选择,一种是数,一种是这个线性模型啊。
线性模型这两个呢,一般我们预期数模型的性能,要比线性模型的性能更好一些,当然这和你的数据集也密切相关啊,这个嗯运算性能其实和数据集是密切相关的,这个你可以做一个参数选择。
当然默认的是以数模型作为我们的基础模型,我记得新的版本好像又增加了一个那个booster,忘了啊,你有兴趣的同学可以再查一下他的API啊,这个地方多了一个啊,下面这两个呢回去我自己看一下。
这个没什么特别的啊,嗯第二部分呢就是关于提升器的参数啊,提升器的参数首先是个艾塔,艾塔呢这个是个学习率啊,艾塔是学习率,就是我们在进行F等于F加上L这个呃,就是是L对F的那个偏导的计算过程,艾特在这啊。
艾特在这个地方就是他的学习率嘛,然后呢这个值有了以后,下面是关于最小的叶子节点的权重啊,就是最小叶子节点样本权重和,这不是那个权重啊,这个那个权重是,其实是我们叶子节点里面的输出值的和啊。
不是不是大家理解的那个权重,就是不是我们那个那些什么贝塔呀,不是那个东西,其实这里就是你可以认为就是W的和,就是那个sum w啊,这个值的和,就我们在叶子节点里面包含了若干个样本。
这个样本的和要尽可能的小,啊所以是最小叶子节点样本样本的和啊,你别加权重了,就是样本和就可以了,用来控制过拟合的啊,这个值不能太特别大,太大了。
就陷入这个欠拟合现象,然后呢除了这个最小的叶子节点的样本和呢,还有一个就是树的最大深度啊,树的最大深度我们前面讲到过,书的最大深度,也表征了当前模型的复杂程度,另外一个呢就是最大的叶子节点的个数。
就是那个大T这两个参数啊,这两个参数其实是密切相关的,当我们在二叉树当中,我们知道叶子节点的就是树的深度和,叶子节点的个数其实是有数值关系的对吧,当你确定了其中一个以后,另外一个其实也就被确定了啊。
所以这两个哈确定一个,另外一个就确定了,我们一般习惯上使用的是叶子节点的个数啊。
当然深度也也可以吧,这个随便吧。
另外一个就是伽马,就是我们前边两个超三里面的伽马,另外一个兰姆达的后面应该是啊。
其他的大家自己看一下就可以了,这是那个兰姆达啊,学习任务的参数呢,其实呃,XJB还是提供了很丰富的,这种学习任务的参数,比如说他可以处理所谓的二二分类问题,也可以处理所谓的多分类问题。
而且可以处理带概率类别的多分类问题啊,这个都需要根据你的任务类型的不同,来加以选择啊,多量方式呢我们除了平方损失之外,还有很多其他的损失,但是我们更多的还是采用了,所谓的平方损失的形式啊。
这个最一般实用,那么下面呢还举了一个例子啊,这个例子呢回去以后大家呢可以额自己跑一遍,这个地方介绍一点啊,说明一点,有些嗯芯片可能会出现一些在x g boost上的,一些某些老版本上会出现报错。
这个时候你可以把这个开关量打开啊,把这个开关量打开,编译就可能会通过,但是有些那个特别是英特尔芯片,会出现所谓的二次加载问题啊,这当然这个我们也不需要特别考套考虑了啊。
就是某些版本的芯片和某些版本的差距boost,而是不兼容的,试一下这个参数可能会解决你的问题,那么数据集呢这个地方有这么一个数据集,然后呢他有九列数据啊,想想是九列是十列啊,呃十列数据前九列是X。
最后一列是标签啊,对数据进行切切分啊,训练集测试集的一个切分,切分完了以后呢,我们可以大体的跑一下这个模型,在不调参的基础上,我们直接对它一个进行一个学习,学习之后呢,你会发现他的学习率呢。
已经达到了这个正确率啊,已经达到了77。95%啊,这已经性能上不调参就已经马马虎虎凑合了呃,看下预测的结果呢,无非就是因为12分类啊,所以直接给出了标签这个分类结果值,但是呢给大家说一下。
更建议大家使用的呢并不是直接输出零一值啊,更建议大家使用的还是这个,带着概率输出的预测结果啊,带着概率输出的预测结果,所以说你看下面这种情况啊,他分别给出的是当,不同的这个标签取值的时候。
它对应的一个概率值啊,所以说你会发现比较一下啊,比较一下,这是第一个啊,第一个返回了一个零,然后呢这个时候呢你会发现,返回零呢其实其实啊按照我们的概率输出,他是95。45%上是返回一个零标签,还有0。
04%上,可能会要返回一个一标签啊,这个呢是更对我们的结果的这个呃解释哈,可能更有意义一些,比如说再举一个例子,你看这个值,你看这个如果我们只通过零幺的输出呢,我们知道它输出的是个标签一。
但是呢通过概率分析呢,我们会发现这个标签一呢其实并不可靠,因为它即使是标签一,也仅仅是在58。8%上返回的是一,换句话说他有40%一点,接近41。2%是需要输出零的,所以说这个标签的输出就很有啊。
很有讨论的空间,所以你像这种结果的解释性,会为我们的这个工作上带来很大的帮助是吧,另外呢还可以输出每一个参数的重要性啊,就是每一个特征的重要性啊,不是每一个参数,每一个特征的重要性啊。
就像刚才那个例子里面,第七列的数据的那个特征啊,要比其他列的特征的重要性更大一些啊,这个了解一下就可以,并且呢还可以把当前决策树的形状绘制出来啊,这是嗯都可以试一下吧,另外呢就是模型的调优啊。
后面我们会讲到啊,比如网格调优啊,网格调优呢就是我们把所有的参数的取值空间,做一个大致的一个生成啊,根据我的不同的取值空间学习率啊,最大深度啊生成不同的参数空间,在这个参数空间当中啊。
我遍历整个参数空间啊,就是网格搜索,其实就是在有限的空间里面进行便利哈,当这个时候我们再看一下结果的时候,已经性能上有提升了81。1%了啊。
咳咳咳,后面呢在一个新的数据集上。
也有类似的一个使用额,下面呢可能就是啊,另外一个呢是关于这个差异boost和LAGBM呃,let gbm呢是另外一个包啊,或者另外一个库,这个库呢是微软下面的一个工作,也是非常好啊,就是你看一下啊。
是我们的差距,boss的这个分类啊,下面一个是我们的LETTGBM,那个JBM呢是微软的一个工作啊,这个工作呢和这个x g boost呢是呃非常相近的,两个不同的工作啊,原理上都非常的相近。
但是工程上会做到大量的改进。
那么我们下面这个例子呢,是根据一个数据集上的呃性能上的对比啊。
从这个速度上和准确度上,我们都进行了两个不同的包的一个对比。
大家可以看到啊,其实在特定某些特定情况之下,这个来自GBM,要比这个x g boost的性能还要好一些。
不管是精度还是速度啊,也就是说啊,今天我们虽然讲的是这个是这个x g boost。
但是在工作当中哈,你可以使用一下let gbm。
可能会出现一些更好的效果,他俩非常类似哈,都可以给出特征的排序以及不同的数形结构啊。
let s gbm也给出了一个例子,有兴趣的同学都可以看一下。
好嗯。
嗯这是我们今天的主要内容。
看看大家还有什么问题吗,Ok,还是那样,就是我会把这个用到的那份额扩展材料啊,也给大家发到咱们的课程群里啊,作为一个补充啊,今天的内容呢,如果还有什么问题及时在群里提出来啊,我相信一定会存在不少问题啊。
有什么问题我们再集中的进行讨论,一定是通过自己的分析和就是思考啊,就是你一定先有自己的一个理解啊,你的理解是什么,然后你的理解和资料上,哪个地方是统一不起来的,嗯我们把问题聚焦在哪啊。
千万不要问说哪有问题啊,这都有问题,这个都有问题,就聚焦不不到具体位置上了是吧。
哦嗯嗯强调了嗯,这里有个问题啊,就是我们是以刚才看到个标签外了啊。
我看到那个标签Y啊,看看他标签外在哪啊。
这个地方呢我们的原理部分的介绍过程当中,是以回归问题哈。
这个是以回归问题作为X1boss的模型的输出,所以你会发现这里YI是属于R的啊,YI是属于R的,很显然是个回归问题,那有同学马上就会问tt boost,如果是个回归问题的这个模型的话。
那能不能解决分类问题是可以的,那怎么解决呃,这个分类问题这个问题其实我觉得到现在啊,大家应该嗯其实一个一个通用的方法啊,就是我们怎么能够把回归问题的模型,改造成这个分类问题的模型。
如果我知道当前模型是个回归输出,那这个时候我马上就可以想象一下,你那个线性回归是怎么改成那个逻辑回归的,还有没有同学有印象线性回归输出的是个R,然后呢逻辑回归输出的是个零幺,这不是个分类了吗。
他是怎么做的,无非就是在线性回归的基础上,套了一个西格玛的函数吗,对吧,那么同样我们在tag boss的基础上,他回归输出的基础上,你外边再套一层西格末尾的函数,就可以把它映射成二分类里面去了。
如果你把它套成消费max,就把它套,就把它映射到多多分类里面去了,这就解释了刚才为什么在那个插件,boss那个包里面,它是个分类问题啊,它这个分类问题有同学这个地方会有困惑哈,你讲原理的时候是个回归。
它为什么是个最后是个分类呢,就是因为啊,其实这个你只要在回归的基础上,加上一个不同的分类函数,就可以压缩到不同的离散空间里面去,来完成我们的分类问题了。
好吧嗯那好,我们今天的内容就到这,有什么问题的话,我们及时在课程群里讨论好吧。
1447-七月在线-机器学习集训营15期 - P19:12-HMM、CRF模型要点 - 程序员技术手札 - BV1ASste6EuZ
那么今天是咱们这个阶段的最后一次课程内容,按照这个课表上的安排,我们今天主要介绍的是概率图模型当中的,一马可夫模型,条件随机场模型呢这个呃我们不做过多的介绍,后续会把一些材料发给大家。
我们重点还是介绍这个IMAX模型,那么在介绍一马可夫模型当中啊,通过我们这个脉络图可以看到它的前序工作呢,可能会体现在朴素贝叶斯模型当中,这在我们上一次介绍朴素贝叶斯的时候,也说明了。
主要是集中在其中的一些逻辑,计算的这个规则当中啊,概率逻辑计算的一些规则当中啊,这是一点,另外一点呢就是在EMC模型的计算里面,需要使用到em算法,就是期望最大算法。
所以呢今天会把这个em算法做一个补充,那这样的话呢,我们就可以通过朴素贝叶斯当中所熟悉的呃,概率计算以及E算法当中所提供的优化过程,来得到hmm1mark副模型里面的,一些重要性的结论,好吧。
这是我们今天的主要内容,如果没有问题的话,我们就开始我们的IMAC模型,通过前面的我们的介绍哈,大家也能够体会得到IMAX模型啊,需要进行大量的概率计算啊,它也是属于一类所谓的那个概率图模型当中。
非常重要的组成,那么IMAX模型的主要的工作啊,先说明一下,就是这个模型它能解决一类什么样的问题,它主要解决的是一类,称之为是序列标注的任务啊,或者叫做序列到序列的任务,我们把它称之为是不用这个打开啊。
我们把它称之为是这个从序列呃,到序列的任务啊,特别是一类在自然语言处理当中,非常重要的一类任务,再举一个例子啊,比如说啊我们有一个自然语句啊,比如说在这个在这里啊,我们就以银马可夫模型啊。
这么一个算是一个句子为例,当我们有了这么一个语料以后,我们就得到了一个sequence啊,一个序列,然后呢,我们希望得到当前这个序列,向另外一个序列的一个映射,比如说啊我们要在这个语料库的基础上。
要进行一个磁性的标注啊,什么叫磁性的标注啊,就是我需要看一下当前这个序列里面,每一个单词的词性是什么,因为我们知道词性有名词,动词,形容词,副词,介词等等各种不同的词性是吧。
在LLP里面有一类任务就是需要考察一下,当我们拿到一个语料的时候,每一个单词的词性到底是什么啊,这是一类啊标准的序列到序列的标注任务,那比如说举一个例子,比如伊马尔可夫模型,比如说我们现在已经拿到了。
当前这个语调是由两个单词所组成的,第一个单词那就是银马可夫,另外一个单词呢是模型,那么当前有两个单词所组成的这个呃序列,那么我们希望得到的是它们所对应的,词性的一个序列,当然我们知道你比如说一马可夫。
我们认为它也是一个名词是吧,然后呢模型呢当然也是一个名词,那这样的话你会发现,尼玛跑夫模型这个序列所对应的另外一个序列,就是名词名词序列,当然这只是举一个例子,那么在这一类任务当中,大家会发现。
这两个序列有一个明显的对应关系啊,序列和序列之间有明显的对应关系,序列当中各个单词之间也有明显的对应关系,因为我们知道啊,我们学一些语法规则啊,会告诉我们,比如说名词和名词是可以并列出现的是吧。
形容词和形容词也是可以并列出现的,动词和名词也是可以出现的,但是一般很少我们出现,动词后面加形容词的情况,当然这是这些信息啊,完全我们是可以通过我们拿到的语料库啊,比如说你拿到了NN多篇文章是吧。
这N多篇文章当中,我们通过一些统计和概率计算,可以把这些哈序列到序列的这种规则,以及磁性到磁性的规则,都可以通过模型进行学习出来,而这类模型啊,我们都把它称之为是所谓的概率图模型啊。
其中啊以马可夫模型就是这类模型当中的一种,好吧,所以说啊这个解决什么问题,我们先首先有一个认识啊,它能够解决的啊,就是序列到序列的一个映射任务啊,那么多说一句哈。
比如这个sequence to sequence任务啊,这个嗯除了以马可夫模型,cf模型这种概率图模型可以很好的解决之外,现在还越来越多的,我们使用到的是深度学习模型里面。
你比如说像这个循环神经网络这一大类啊,一大类模型来进行解决啊,这是一个方向,另外呢现在在呃这个深度学习领域,有所谓的注意力机制引入以后的,transformer1类的模型啊。
这类模型已经非常优秀的解决了这类sequence,to sequence问题啊,这就说明一下,那么但是呢在机器学习领域,解决这类问题的主要模型,还是像比如说像野马可夫模型和CR模型啊。
这一类概率图模型为主要的代表,当然呢呃其实随着学习的深入啊,特别后面大家掌握了这个深度学习模型以后,大家会发现当处理一些任务的时候,深度学习模型和呃这种概率图模型的结合。
也在某些问题上取得了非常不错的成绩啊,就像刚才我们讲到的啊,比如说像那个注意力机制啊,各种各样的transformer加上cf模型啊,或者说加上hmm模型,就在一些具体的任务当中,取得了很好的一个成绩。
当然那是后话了,那么回到我们这个概率图模型当中来,在今后的复杂的模型当中,其中以马可夫模型,或者说CRF模型,很有可能会作为更复杂模型的一部分出现啊,这个需要说明一下。
不是说哈这个概率图模型就没有用武之地了啊,有了深深度学习模型以后,不是这样的啊,深度模型,深度学习模型和像概率图模型之间的一种融合,在特定任务上,还是当前的一些范式啊,就是标准的任务解决方案啊。
这个多说一点,那么回到一马可夫模型,我们看一下,刚才已经介绍了,一马可夫模型能够解决这一系列任务,那么今天呢我们需要聚焦一下,我们今天的这个模型的介绍的主要内容,包括这几个方面,第一个方面就是模型定义。
到底什么是一个一码和模型嗯,这个非常重要哈,这个包括后面的cf,很多的时候后面的问题的解决,其实归根到核心矛盾上,就是你对整个问题的定义是不是能够理解,换句话说你对这个模型的这个定义认识的程度。
直接影响到了你对后面问题的解决的程度,好吧,所以第一个任务就是到底HM,hmm的定义是什么啊,这是非常重要的内容,那么在此基础上,我们会解决一马可夫模型所面临的三个问题。
第一个问题呢我们把它称之为概率计算啊,第二个呢是所谓的学习算法,第三个是预测算法,后面我们逐一啊作为一个介绍,那好了,下面我们先开始第一个问题,就是关于模型定义的问题,一马可夫的模型的定义呢。
首先介绍两个集合啊,首先介绍两个集合,第一个集合呢我们把它称之为状态集合啊,状态集合,另外一个集合呢我们把它称之为是观测集合,这两个集合其实啊就像刚才我们所介绍的,因为我们要介绍两个sequence。
就两个序列,那么这两个序列有哪些符号组成,或者有哪些状态组成,我们必须要先给出一个说明,那么这两个集合分别对应了刚才那两个序列啊,呃的取值,你这样可以认为啊,第一个序列呢我们把它称之为状态集合啊。
状态集合由状态集合中的元素组成,其中的一个序列由观测集合中的元素组成,另外一个序列啊,就是其中的一个序列,你就在状态集合里面找元素,另外一个序列,你就在这个观测集合里面找元素就可以了。
那么具体定义形式呢,我们把状态集合定义为Q集合啊,Q集合Q集合里面包含若干个状态啊,若干个状态分别是Q1Q2,一直到QN啊,N个状态,那么观测集合呢我们用V来表示,分别为V1V2,一直到VM啊。
M中观测啊,M种观测,注意再强调一下,这两个都称之为是集合,集合里面的元素是没有顺序的啊,集合里面的元素是没有顺序的,它仅作为后续两个序列的组成啊,但是具体谁先谁后,在这两个集合里面并没有定义好吧。
它只是作为一个数据集出现啊,你从这里边找元素就可以了,那么下面呢,我们再介绍所谓的状态序列和所谓的观测序列,注意这是两个所谓的序列,就是对应了刚才所说的两个sequence,其中的一个sequence。
我们把它称之为是状态序列啊,状态序列状态序列呢我们用I来表示啊,用I来表示,其中这个序列定义为I1I2,I小T1直到I大TI大T那么再强调一下,因为它是序列序列是有顺序的,换句话说。
序列I当中的各个状态,I1I2取决于状态集合当中的各个元素,但是更重要的是,状态序列当中的这些状态具有前后关系,换句话说,它的下标表明了当前这个状态,在状态序列当中的位置信息。
I1就是出现在第一个位置上,I2是第二个位置上依次类推,而每一个状态序列当中的状态,取决于状态集合当中的某一个元素啊,我相信这个啊能够能够严格的区分开好吧,那么另外一个序列呢,我们把它称之为观测序列啊。
观测序列,观测序列我们用O来表示啊,用O来表示O序列内容分别为O1O2,一直到O小TO大TO大T,同样观测序列也是个序列,序列当中的每一个,代表的是一个具体的观测的位置,O一O2OT一直到O大T。
其中的每一个观测都取决于我们的观测集合啊,取决于观测集合啊,这是两个集合和两个序列的定义哈,两个集合两个序列的定义,那么有了这两个集合和两个,这个观测的定义以后呢,下面我们需要把这些信息啊。
通过一种图示化的方式把它表示出来啊,表示出来怎么表示呢,就是你画个图,这是非常重要的一种,这个算是一种技巧吧,就是后面哈我们所碰到的模型会越来越复杂啊,这个你把它这个用图示的形式。
把这些信息能够充分地表示出来,非常有利于你对这些问题的一个理解和解决,好吧,那么我们看一下,现在我们有手头上有两个序列,第一个序列就是I序列,其中的序列由I1I2点点一直到小T点点,一直到I大T组成。
这个时候呢我们一般,圆圈上表示这个这个序列,重点是上序列是有前后顺序的,所以呢我们用这种带箭头的序列来表示,我们的这个状态序列,同样我们还有一个所谓的公序列观测序列,O1OR点点一个O小T。
然后是O大T,这个时候呢很很很自然啊,同学们就会有一个想法啊,上面这个状态序列是这样沿着这个箭头组成,那你是不是观测序列也是这样的,这个地方就需要注意的,以马尔可夫模型有这么一个定义哈。
有如下这么一个规定,状态序列当中的每一个状态啊,I1I二一直都I打T啊,每一个状态直接决定它所对应的观测啊,也就是说啊观测虽然也是一个序列啊,观测虽然也是个序列,但是决定观测序列的。
并不是由序列本身来决定的,而是由它所对应的状态来做决定的,回想一下刚才那个词性标注的那个任务,我们知道以马可夫模型,这两个单词所组成的状态序列对吧,然后呢我们的名词名词也组成了一个序列,那么很显然。
我们可以认为是有单词,决定了我们的单词的性质是吧,所以这个时候我们一般情况下是这样的来画哈,能明白什么意思吧,所以说啊这个图示啊,必须要把它的含义呢够明晰的表示清楚才可以,当我们有了这个图以后啊。
后面所有的计算啊,大家都可以认为是在这个图示当中来完成的啊,就是在这个图上来计算就可以了啊,不要跑到别的地方去了,当然这个图示其实还是信息很丰富的,我们看还有哪些信息需要注意,第一个信息哈。
就是你会发现在状态序列当中,I1这个状态跳转到I2,这个状态依次向后跳转,那么跳转从I1跳转到I2,从I2跳转到I3,那么这个跳转的概率是多少,这个图里面还没有表示啊,这是第一点,那么第二点。
从IE这个状态能够跳转到它所对应的观测,由每一个状态都可以跳转到它所对应的观测,那么从状态向观测的跳转的概率,也现在还不清楚啊,还不知道,但事实上大家可以看到,一旦我能够获取到从状态到状态。
或者是状态到观测的这个概率值以后,我当前这个in马可夫模型,其实就可以进行一个生成过程了,怎么生成,首先我从状态I1开始先生成它所对应的观测,然后再从I1生成它所对应的下一个状态I2。
再由I2生成它所对应的观测go2依次向下,最后直到IT这个状态生成,它所对应的什么观测,gt整个的一马可夫模型其实就可以结束生成了,也就是说它是这样形成的,从状态到观测,从状态到状态,再从状态到观测。
再从状态到状态,然后依次向下生成最后的一门考试模型,那么在这个过程当中非常重要的,刚才介绍的两点,就是状态到状态之间的概率是多少,你需要把它表示出来,然后呢从状态到所对应的观测的概率是多少。
也必须要明确的表示出来,那么下面我们就需要给出两个非常重要的信息,第一个信息呢我们把它称之为是状态转移矩阵,状态转移矩阵首先明确一下它是一个矩阵,当前这个状态转移矩阵当中,记录了任意两个时刻之间的状态。
转移的规则是多少啊,状态转移的规则是什么,那么这个时候呢就有个问题,那么为什么我们使用一个矩阵结构来描述,任意两个状态之间的转移规则,如果是个矩阵结构的话,那这个矩阵它的形状是什么样的啊,第三个问题。
当我们确定了当前这个矩阵的形状以后,每个矩阵当中的每一个元素的值又是多少啊,这是一系列的问题,那么回到刚才关于状态转移矩阵的这个概念,或者含义,状态转移矩阵就像刚才我们所说的。
他要记录的是任意两个状态之间的转移关系,而我们清楚地知道,状态的可能的取值无非就是Q1,一直到QN的状态,也就是说这里的I1I二一直到I大T,我是大T个时刻,每一个时刻都可以取。
直到我们状态集合当中的某一个状态,而我们这个状态转移矩阵又是用来记录,任意两个状态之间的转移情况的话,那么很显然我们可以用矩阵这种结构啊,来加以表示,那么下面这个问题就是这个矩阵的结构。
或者说当前这个矩阵,它是一个几行几列的一个矩阵,我相信大家是通过一个分析啊,或者简单的思考是可以得到结论的,再重复一下问题啊,就是我们现在有N个状态,好状态,有N种可能的取值,那么这N种可能的取值呢。
他们之间的任意两个之间的跳转关系,需要通过一个所谓的状态转移矩阵,来进行一个描述,那这个时候这个状态转移矩阵啊,这个矩阵几行几列,一共有N种状态啊,任意两个之间可以进行跳转。
那这个矩阵应该是一个N乘N的矩阵对吧,N乘N的矩阵,这一点再加以说明,就是后面不管是呃这个什么样的一个呃模型啊,当他使用所谓的向量,使用所谓的呃矩阵,甚至后面我们在使用所谓的张量。
来表示这个数据结构的时候,那么首先你需要确定的一点是,当前这个数据结构的形状啊,如果是个矩阵,你需要明确的给出当前矩阵是个几行几列的,当然这个不能靠蒙啊,不能靠猜测,一定要根据当前这个数据结构所需要。
处理的任务来决定,因为当前的状态转移矩阵是用来记录,任意两个状态之间的转移规则的,而我们一共有大N种状态,所以我们用N乘N的矩阵就可以存储了,那么有了这个矩阵以后,我们更希望得到的是每一个元素的值啊。
就说任意两个状态之间的转移规则,到底是怎么来加以描述的,那么很显然,其中就是关于AIJ的一个定义对吧,AIG的定义,看一下IP的含义哈,AIJ的含义,它说明的是在T时刻。
或者说在某一个时刻处于状态QI的条件下,在T加一时刻转移到状态QG的概率,比如说现在我们看一下这里,这是T时刻,那么很显然,下一个时刻一定是I等于T加一时刻是吧,那我们知道从T是从it是可以跳转到T。
加一的啊,从IT是可以跳转到IT加一的,换句话说啊,我是可以从一个时刻跳转到他的下一个时刻的,那这个时候就是所谓的状态之间的一个转移,或者跳转,那这个信息就要被记录到我们的状态,转移矩阵里面。
而状态转移矩阵啊,它其中的每一个取值都说明了是在T时刻,或者在某一个时刻处于状态,QIT等于QI,在下一个时刻就是T加一时刻,状态等于QG状态T加一等于QJ概率,那么很显然这是一个什么概率。
这是一个条件概率啊,在上一个时刻,在提时刻等于QY的条件下,在T加一时刻等于状态QJ的概率,所以看一下哈,你会发现AIJ其实是一个概率值,而是一个什么,而是一个条件概率,他说的是IT等于QI的条件下。
IT加一等于QJ的概率,从QI跳转到QG是AIJ,这是关于状态转移矩阵的一个定义啊,状态转移矩阵的定义,当这里的I从一到N进行取值的时候,这里这样也是从从一到N啊,I从一到N,然后呢这也从一到N。
那么大家可以看到,当两个循环结束以后,这里的AIJ就把所有的状态,而这些信息就都记录到了,我们这个状态转移矩阵A里面去了,关于这一部分,看看有什么问题吧,那么大家看看啊,我再举一个例子啊。
比如说有同学会对这个T啊有困惑,就是这个T你刚才说的是在IT这个时刻,是不是在T这个时刻等于QI,在T加一这个时刻等于QG的这个状态转移,其他时刻呢注意啊,这里的T啊,这里的T代表的不是一个具体的时刻。
而是我们在状态序列当中的任意一个时刻,比如说T是不是可以等于1T如果等于一,就变成了ZI1时刻等于QI,那么在I11,就是I2时刻等于QG的状态转移的概率值,而这个同样我们是通过你看哈。
它和具体的时刻其实并没有关系,你看看这个表达式里面和具体的时刻,T其实并没有关系,这里的T的强调的仅仅是前后关系,就是如果我在前一个时刻是QI,下一个时刻是QG,那么这个跳转关系就用了AIG来表示。
至于这里的T是12345678,一直到大T的哪一个时刻,其实并没有限制,能明白什么意思吧,就是这里的T和T加一仅仅说明的是前后关系,而不是一个具体的位置,那么这种前后关系啊,你想象一下这种前后关系。
这里有个一二是前后关系,二三也是前后关系,TT加一是个前后关系,到大T减1T是不是也是个前后关系啊,它描述的就是这种前后关系的这种跳转概率啊,用这个AIG来表示好吧,这是状态转移矩阵的一个介绍。
那么如果有状态状态之间是可以转移的话,那么很显然,状态和观测之间也是可以进行跳转或者转移的,那这个信息我们把它称之为是观测概率矩阵啊,关于观测的概率矩阵,那么通过刚才那个状态转移矩阵,A的一个定义啊。
我们应该能够啊,能够想象得到这里的观测概率矩阵,很显然他也是个矩阵是吧,同样回答以上刚才两个问题,第一个问题这个矩阵的形状是长什么样,第二个这个矩阵里面的取值是怎么定义的,那么再重再重复一遍。
观测概率矩阵说的是由状态到观测的调整关系,它需要记录的是任意一个状态,跳转到任意一个观测上啊,这个概率信息是多少,那么这个时候大家想一下,状态呢是有N种状态,可能取值,观测呢是有M的观测可以取值。
那这样的话从N种状态到M种观测,就需要一个N行M列的矩阵来加以表示啊,所以说啊,这个地方观测概率矩阵是一个N乘M的矩阵啊,N乘M的矩阵,这是第一点,第二点就是说的是由状态向观测进行跳转。
而我们先显而易见的可以看到,状态和观测之间的时序关系是一一对应的,时序关系啊,就是我在第一个时刻的状态,跳转到第一个时刻的观测,在第二个时刻的状态跳转到第二个时刻的观测。
同样在DT时刻的状态跳转到DT时刻的观测,所以这里的每一个元素定义的是,在T时刻处于状态QI的条件下生成,同样是在T时刻观测为VK的概率,所以啊你看一下它的定义形式,是在T时刻状态是QG的条件下。
同样是在T时刻观测是VK的条件,概率被定义为BJK那么同样这里的T啊,这里的T也不是一个确切的时刻,他呢也是在我们整个的序列上可以任意取值啊,如果T是第一个时刻,那这里说的就是在第一个时刻等于Q2QG。
同样在第一个时刻等于VK的条件,概率等于BKBJK,当然这个T可以从序列上任意一个时刻上取值,那么K代表的是我们的观测,所以从一到M这对应的是我们的状态,所以是从一到大N好吧,那这样的话我们可以看到啊。
上面从状态到状态,我们是用AIJ来表示,由状态到观测,我们是用BJK来表示,那么这个时候我们就可以按照,刚才我们所说的那个生成策略,来生成当前的状态序列和观测序列了是吧,UI1生成勾一。
那么这个是根据我们刚才所定义的集合B啊,这个观测概率矩阵来生成的,我就找一下在当前vi1的条件之下,生成O1的那个最大的概率值是多少,是谁,我就生成那个概率最大的对应的OE,同样由I1。
我再根据集合B啊,查一下生成I2那个概率最大的啊,那个I2状态到底是谁,我就生成那个状态,同样依次向下生成,当前这个一马可夫模型里面,所有的状态以及观测也就都生成了,嗯好像是这样是吧。
但是呢又好像不是哪有问题呢,换句话说这一部分还有什么问题吗,看看,状态集合和观测集合里存的都是什么数据啊,这个需要根据我们这个具体的问题来进行,具体的这个定义,比如说刚才我们提到过那个词性啊。
刚才我们提到过那个词性标注的那个任务是吧,如果我们认为语料是我们的状态集合的话啊,如果我们认为我们的语料是状态集合的话,那么状态集合里面的每一种状态,就是我们语料库里面的每一个单词。
如果我们认为这里的磁性啊,是作为我们的我们的观测集合的话,那么这个时候的观测集合里面的每一个元素,就是我们每一种可能取值的词性动词,名词形容词啊,这是你需要根据特定的任务来决定的。
那我们继续按照刚才所说的,好像没有问题了,但是有一个很麻烦的是关于那个I1,就是第一个时刻的那个状态啊,啊我们说是从I1生成它所对应的O1,UI1生成它所对应的那个I2是吧,UI2再生成O2等等等等。
但是他这个IE由谁来生成,就像我们这个比较熟悉的那个多米诺骨牌,一样是吧,我们知道后面这一长,这后面这些串生成啊,都是类似于我们那个多米诺骨牌,你只要退到了第一个后面,就以此生成就可以了。
但问题是这第一个骨牌由谁来生成,并没有在模型里面加以介绍是吧,那么下面我们就需要处理这个问题,那么我们再回想一下,既然是在第一个时刻啊,第一个生成第一个时刻的状态,而我们又知道状态的取值可能性。
是刚才的那个Q集合,而我们知道在Q集合里面有Q1点点,一直到QN种状态可供选择,那现在问题是,我在第一个时刻到底去哪一个状态呢,那这个时候我们很显然,每一种状态可能都有可能出现。
所以下面我们需要设计一种数据结构,用来存储生成第一个时刻的,所有可能的状态的这么一个呃概率值,那这个时候大家想一下,用的是一个什么样的结构,能够存储以上的信息,以上的信息就是说在第一个时刻能够取值的。
所有状态的概率值,而我们知道所有的状态无非就只有N种状态,那这个时候第一个时刻时刻已经被确定了啊,在这一个时刻有N种可能的取值,那很显然我们用一个什么向量就可以了,所以把它称之为初始概率向量啊。
初始概率向量,初始概率向量呢我们用派来表示它的,每一个元素呢,我用我们用pi加以区别,这里的I哈,这里的I也是从一点点一直取到N,因为你因为你在第一个时刻,也可以有N种状态可供选择。
那么下面那么pi是在时刻T等于一处,处于QI的概率啊,所以说你会发现它的概率计算是I1等于QI的,概率被定义为pi,I呢是从一到大N,而我们知道这里I1等于Q1,I1等于Q2,一到I1等于QN啊。
是由N个概率值,这N个概率值组成了我们的初始概率向量派,初始概率向量排,那么回到刚才这个图当中好了,这个时候生成I1的,就是根据我们的初始概率向量派来生成,那么有了这个数值概率向量派。
以及我们刚才说的状态转移矩阵A,和我们的观测概率矩阵B,那么当前的一马可夫模型就可以说是完成了,我们形式化的给出姨妈和规模型的定义,所谓的姨妈口服模型啊,是个三元组啊,就是三部分组成的哪三部分呢啊。
首先他用LAMBA加A表示,用lambda加A表示,lambda就是我们的1M模型,它是由刚才所介绍的状态转移矩阵A,观测概率矩阵B以及初始概率向量派啊,这个地方是个逗,用这个逗号三部分来组成的。
我们的一马可夫模型啊,这就是以上关于马可夫模型的定义部分,那么在此基础上呢,我们还需要做两个非常重要的假设了,重要的假设,这两个假设哈主要是为了进行这个化简来用的,怎么样化简呢。
因为我们可以看到nb ab派啊,这三个部分我们的IMAX模型其实是蛮复杂的,蛮复杂的一个数据结构,在后面我们进行这个问题求解的过程当中呢,这个模型太复杂啊,就像我们在那个什么。
在那个朴素贝叶斯模型里面对吧,碰到了那个条件独立性假设其实是一样的,我们要为了简化问题哈,这个带来一些这个规则,这个规则呢我们看两个非常重要的规则,第一个一马可夫模型的两个基本假设啊,第一个假设呢。
我们把它称之为七次马可夫性假设啊,其次马尔科夫性假设他是这么说的,在任意时刻T啊,在任意一个时刻,T的状态只依赖于时刻T减一的状态,首先其次,马可复性假设,说的是状态和状态之间的一个假设啊。
状态和状态之间的假设回到我们前面那个图哈,状态到状态,这是I1I2点点,这是I大T,他说的是状态之间的一种假设关系啊,和你那个观测哈,暂时还,暂时还没关系啊,人家说的是状态和状态之间,人家说的是什么。
人家说的是在任意时刻,在任意时刻T的状态依赖,并且只依赖于前一个T减一时刻的状态,也就是说某一个状态啊,某一个状态和其他的状态没有关系,和其他的观测也没有关系,它只和它的前序状态相关啊。
这是做了一个非常重要的假设,就在这个地方,就说你可以认为哈,状态和状态之间都是近视的啊,都是近视眼啊,虽然说我们知道每一个都有倾向依赖关系,但是呢从单一个状态而言,他只能看到他的前序状态是谁。
换一个角度,就是当前这个状态只依赖于它的前序状态,和它的后续状态,以及它所对应的所有的观测,和其他状态都没有任何关系啊,这是这么一个假设,那么在形式上我们这样来定义,怎么定义呢。
就是说当我们已知了IT减1OT减一一,直到I1OE以后,换句话说你可以看到我即使是既知道状态,也知道观测,而且不只是知道一个状态,一个观测,知道很多的状态,很多的观测的条件之下来决定当前T时刻的it。
刚才我们前面已经说过,你这些状态和观测有些根本不会影响到T,那么哪些会影响到T呢,只和我前序状态T减一有关啊,这是所谓的七次方属性假设,那这个东西有什么用啊,也就是说到后面。
我们进行逻辑这个概率计算的时候啊,当我们进行概率计算的时候,你碰到这么一个式子很麻烦,很复杂的一个概率条件,概率是吧啊,又知道这么一些观这个状态,又知道这么一些观测啊的条件之下,来求T的条件概率的时候。
马上就可以把它化简为化简为,只有当前时刻的前序时刻作为条件的时候,it的条件概率就OK了,那其他的都没关系啊,图上说明了,刚才已经说明了某一个时刻的状态,只和它的前序状态有关啊,只有他俩有关系。
和其他时刻的状态状态观测观测即使你已知了,也不影响我当前这个时刻的状态啊,状态之间就这么个近视的关系啊,这是说的,其次马合并假设,第二个假设能称之为观测独立性假设啊,观测独立性假设他说的是什么。
他说的是任意时刻的观测啊,观测和同一时刻的状态的关系啊,如果说哈状态,刚才我们的七次Mark复性假设,说的是状态和状态之间的关系,那么现在说的这个观测独立性假设说的是谁啊,说的是状态和观测之间的关系啊。
他俩之间的关系什么关系呢,任意时刻的观测啊,任意时刻的观测O只依赖于同时刻,你看任意时刻T的观测只依赖于时刻T的状态,我任意时刻的状和观测只依赖于同时刻的状态,和其他时刻的状态。
和其他时刻的观测也没有关系啊,这是你看你会发现这两条假设啊,其实很强的两条规则啊,很强的两条规则,那么在形式上我们可以看到啊,就像刚才我们所说的,即使我知道了大量的状态信息和观测信息。
作为条件之下来决定我当前的观测的时候啊,这个条件概率也直接等于什么,它直接就等于同时刻的状态啊,同时刻的状态IT作为条件之下,那么gt作为他的条件,概率和其他时刻的状态,和其他时刻的观测也没有关系啊。
也没有关系,同样怎么使用,就像刚才所说的,当你后面再推导一一个概率计算,而后面的条件会一大堆一大堆条件之下,观测的条件概率的时候,马上就可以用这条规则啊,把它化简为只和我同一个时刻的。
同一个时刻的状态相关就可以了,图上就是这么说的啊,状态和状态之间只依赖于前驱状态,状态和观测之间只依赖于同一个时刻的状态,好吧,这是关于两个假设啊,关于假两个假设用的时候啊,这个一会儿用的时候。
我们回过头来看一眼就可以了,有了这两个假设以后呢,我看下面一个问题啊,就是观测序列的生成算法啊,就有了一马可夫模型ab派以后,我可以根据ab派这三个这个结构来生成,我希望得到的观测序列啊。
希望得到的观测序列,那么这个算法的输入就是输入我们的模型啊,输入我们的模型lambda ab派,然后呢你还需要给出一个观测序列的长度啊,你要生成多少个观测啊,你要生成多少个观测T也是需要的。
输出什么输出我们的观测序列O啊,输出我们的观测序列O就可以了,那么其实也就是说我们现在有了一个啊,任意两个状态之间的跳转关系啊,通过A来表示,然后呢任意一个时刻向观测的调整关系,我们用B来表示。
而且呢在第一个时刻上,哎那个第一个时刻的跳转生成,我们用派来进行定义,那这个时候你会发现当我们通过派先生成谁啊,I 1ui1,根据B就可以生成OE再UI1生成I2,UI2生成O2UI2生成往下生成。
然后呢生成继续所对应的O,那这个时候你会发现依次向下生成,当生成到最后一个O大T的时候,我们所希望的观测序列是不是就已经有了,所以说啊就像刚才我们所说的,通过派生成一个通过O通过B生成O。
通过A生成I啊,以此生成就可以了,所以算法本身其实并不复杂,我们可以看一下,第一步,由初始概率向量派来产生状态I1,LTRU太行生成状态I1,这个时候就会有同样疑问,这个I1你说生成这个IE怎么生成啊。
那这个时候我们是不是可以使找一下,使得当前对吧,我们的状态转移这个初中,我们这个初始概率向量里面定义的是N种状态,在第一个时刻生成的概率值,那我到底在第一个生成,第一个时刻生成哪一个状态啊。
我们第一个策略非常简单,就是找那个在我们的初始概率向量里面,概率最大的那个作为我当前IE的状态,是不是就可以啊,就那个概率值谁的概率最大,我把它生成作为第一个状态是不是就可以啊,好了啊。
这样解决的就是第一个时刻的状态,然后呢第二步梯等于一,第三步由状态T当然啊,这里T开始循环了吗,由状态IT的观测概率分布,同样哈这个OT等于多少OT,同样是使得那个BGK取得最大值的那个概率。
所对应的那个观测啊,然后呢第四步,这样的话第一个时刻就有了状态和观测,然后呢下面由状态IT的状态转移概率分布,那个A矩阵来生成下一个时刻的状态IT加一,那这个时候再判断一下啊,T等于T加一。
再判断一下T是不是小于T,因为我们知道在这个循环过程当中,依次生成观测,一次生成状态啊,这个in Mark和模型依次向就向后生成,当这个条件不满足的时候,意味着T等于T我当前的观测已经生成完毕了。
否则就可以啊,这个时候就可以结束到整个生成算法啊,呃这个算法本身其实作用不大啊,用处也不大啊,它主要是为了说明或者说让大家能够理解啊,当前这个以马克服模型的定义问题,而加以说明的好吧。
以上呢是我们今天的第一个,关于一马可夫模型的定义问题,再回过头来看一下,我们分别定义了状态和观测两个集合啊,这是两个集合,你的状态和观测的取值是在两个集合里面,取值的,下面呢重要的是两个序列。
分别是状态和观测序列啊,是两个有前后关系的这种序列,但是呢这个时候我明确一下,状态序列是由状态和状态之间的关系决定的,观测序列是由他同一个时刻的状态所决定的,状态是由状态生成。
而观测是由它所对应的状态生成的啊,观测也是由状态生成的啊,所以这个结构这个图你回去好好再琢磨琢磨,然后呢三个信息状态转移矩阵A,观测概率矩阵B和初始概率向量派啊,分别定义了状态和状态之间的跳转。
以及状态和观测之间的跳转,以及第一个时刻状态的生成规则,或者说生成概率啊,这三部分的信息,由这三部分信息组成了整个一马可夫模型,当然模型很复杂,所以我们加上两条假设,其次马克假设和光观测独立性假设。
生成算法回去以后自己看一遍,看看这部分还有什么问题吗,如果没问题,我们就继续啊,继续呃,当模型介绍完了以后,那么我们需要看一下这个模型它能干什么是吧,他能干啥,一般情况下呢。
一马可夫模型可以解决以下三类任务,或者三个工作,哪三类任务呢,第一类任务称之为概率计算啊,概率计算,那么概率计算说的是什么呢,就是一系列的概率计算,那不废话嘛,但是呢这一系列的概率计算的目的啊。
这一系列的概率计算的目的是,为后续两个任务做前期的一些中间结果的计算,换句话说,后续两个任务都比较复杂啊,都比较复杂,会使用到大量的一些概率计算的中间结果,而这些中间的结果就在第一个任务里面。
把它解决或者完成了,当你用的时候,在第一个任务里面去找就可以了啊,第一个任务需要处理大量的概率计算任务好吧,那么其中呢有有有一些比较典型的哈,这里我们只能介绍一些比较典型的一些计算。
我们以这个第一个任务为例哈,第一个任务说的是什么,说的是当我们已知lambda啊,已知我们的模型以后,并且呢我们还知道了我们的观测序列啊,还知道了观测序列能够计算出在当前模型,当前一马可夫模型条件之下。
出现这个观测序列的概率值是多少啊,这个东西挺有意思啊,就当我们知道的是lambda,还是知道呢,我们一个观测序列,这个时候我们要得到什么呢,我们要的是在当前模型条件之下出现这个序列。
出现观测序列的概率值啊,就像刚才我们所说的对吧,你状态决定状态,状态决定观测现在状态之间的转移概率,A状态观测矩阵B和初始向量派我都知道了啊,这里的模型是一致的吧,然后呢还知道什么呢。
还知道一个观测序列,这个时候我能够计算的就是,在已知模型的条件之下,出现这个序列的概率值是多少,我能把它计算出来啊,这是第一类任务,概率计算任务当中的一之一之一,类似这种任务啊,类似这种任务还有很多啊。
这个地方呢我们以他作为一个例子作为介绍啊,呃其实非常有代表性啊,其实就是一系列的概率计算,有了这一个例作为啊,这个准备其他的任务呢,相应的也可以作为一个计算结果,这是第一利润,第二个任务啊。
称之为学习任务,学习任务说的是什么,学习任务说的是我只知道一个啊,我只知道一个观测序列啊,我只知道一个观测序列,但是我仅通过这个观测序列,就可以把当前使得这个观测序列出现。
概率最大的那个模型拉姆达构建出来,而我们不要忘了这个拉姆达包括三部分,初始概率向量派,状态转移矩阵A和观测概率矩阵B,第二个任务啊可以说是非常重要,你可以认为是一种无中生有的任务对吧,我第二个任务。
这是第一个任务,第二个任务说的是我只知道一个O,其他的我一概不知道,只知道一个观测序列,这个观测序列怎么生成的,我也不知道谁生成的,我也不知道,因为序列I我也不知道,但是仅此情况之下,我就可以把那个。
出现当前这个观测序列概率最大的那个模型,找出来,第二个任务啊,非常厉害了是吧,非常厉害了,而这个学习过程当中啊,我们需要使用到em算法,所以一会儿呢我们会单独把这个em算法,再做一个介绍。
这是第二个任务,第三个任务呢称之为预测任务或者编码任务,他说的是什么,他说的是同样我知道了模型lambda,还知道了,观测序列O和我们的第一个任务,的已知条件是一样的,但是呢他求的目标不一样,他求什么。
他求的是在当前已知兰达和序列O的条件之下,我能够把出现概率最大的那个状态序列,I构建出来,他要求的是那个I序列,I序列是刚才说过,他是在已知la和O的条件之下,出现这个序列的。
那个概率值最大的序列能够构建出来啊,这是三类三个任务啊,三个任务,这三个任务呢我们又一次的做一个解决好吧,先看第一个任务,第一个任务说的是已知lambda啊,已知模型和O,我们要把在当前模型下面。
出现O的那个概率值计算出来,就是个概率计算呗是吧,概率计算,那么一一提到概率计算,这个时候马上就有同学应该反映出来反映什么,既然是概率计算,而且是挺复杂的,概率计算,我们手头上的一些工具都有哪些。
简单的回顾一下,我们上次讲到的那个那个那个朴素BS模型,两条规则,第一条规则是什么,加法规则,加法规则说的是边缘概率等于PXY对吧,我们的边缘概率和联合概率,之间的这个概率关系啊,概率关系。
当我们啊不是不是在X上,一定是在Y上,因为我们这个地方多了一个随机变量Y是吧,随机变量Y需要进行一个sum上的一个求和,这样的话就还原回我们的表演概率了啊,这是加法规则,那么另外一套规则呢。
就是说的是PXY和联合概率等于什么,等于,等于条件概率和概率的乘积啊,联合概率嘛,两个随机变量本来是两个随机变量的嗯,不确定性,这个时候呢,我们在一个随机变量被作为条件确定以后。
另外一个随机变量的条件概率,那么这个时候很显然他俩不相等了,那么这个时候需要把那个确定之后的随机变量,它的这种不确定性通过PY再还原回来,那么这样的话就构成了所谓的乘积规则啊,后面哈下面就是这两条规则。
反复的用啊,反复的用,你想不明白了,你就回来看一眼,找找他俩就OK了,好吧好,回过头来看一下,有了这两个工具以后,我们解决第一个任务,已知拉姆达和O要求这个在拉姆达条件之下,O的概率值。
这个任务呢我们把它称之为是,这个就是概率任务其中的一种啊,或者一个,那这个任务怎么去解决啊,这个任务解决呢需要引入另外一个概念,或者另外一个中间结果叫做前项概率啊,前项概率。
前项概率呢我们把它定义为啊阿尔法TI啊,阿尔法TI,阿尔法ti,这个前向概率呢被定义为在已知模型条件之下,O 1o2,OT以及IT等于QI的一个联合概率啊,当然是在模型条件之下的联合概率,你看啊。
这个时候你就不知道这个阿尔法TI,到底是个什么东西了是吧,或者说这个联合概率到底长什么样,也不知道了,还是那个问题啊,画图画图画图画图,那么假设这是I1啊,这是I,你看看啊,I,T啊,就在这啊。
这是I大T好吧,然后呢,你看看这个这个这个联合概率里面都有谁,包括O1O2,IT如果是在这一定对应的是OT,那么前面只是O1O2,看看这个式子里面有O1O2,一直到OTO1O二,一直到OT。
然后呢还有谁,还有这里的IT,所以说啊这个所谓的前向概率说的是这部分啊,这一部分被定义为项式,所谓的前项概率用阿尔法IT来表示,在T时刻的IT和O一一直到OT啊,组成这么一个所谓的前行概率这么一个东西。
有了这个前向概率以后,我们看看这个前向概率它能够蕴含着哪些信息,而这些信息是不是为我们最终的这个PO的计算,能够带来一些帮助,好吧,我们需要分析一下这个线程概率,那这个前行概率的分析呢。
我们需要把它展开,仔细的去看一下这个前行概率,所蕴含的一些内容,那这个前行在这个展开过程当中呢,我们就需要仔细一点好了看看,首先我们可以看一下这一步啊,阿尔法TI等于刚才所说的拉姆达条件之下。
O1到OTIT等于QI,从这一步到这一步是定义啊,这个没什么可说的啊,这一步是定义,那么从这一步到这一步啊,说明一下做了两个地方的修,两个地方的调整,第一个调整呢是在这儿,是,因为当前这个阿尔法TI。
一定是在已知兰姆达条件之下的,这个呃前向概率啊,每一步都是都带着这个拉姆达条件,所以呢后续的计算,就把这个拉姆达条件隐去了啊,你知道他带着,但是呢我们就为了简便啊,就不再写每一步都写这个拉姆达了好吧。
这是第一步,所以你会发现从这一步到这一步里面,那个拉姆达条件没有了啊,不是没有了啊,是因为我们为了简写就不写它了好吧,这是第一个地方改了第二个地方,刚才我们说到过啊,其实在阿尔法ti前向概率当中。
其实包含了两部分信息,既包含了DT时刻的状态信息,也包含了从一到T时刻所有的观测信息,所以呢你会发现这个IT等于QI,我们还依次保留对吧,T时刻的状态信息我们还保留着,那么从第一个时刻到T这个时刻。
所有的观测信息呢还是太太复杂,我们把它简写简写为勾,从下标一到上标T啊,从下标一到上标T表示了啊,就是从第一个时刻的状态啊,第一个时刻的观测到第T个时刻的观测啊,我们用这么一种简写的符号来表示。
这里的O11类的OT好吧,就是从这一步到这一步,其实就是为就是为了简写方便啊,这个没什么说明一下就可以了,没什么可以过过多理解的部分,那么下面就需要一步一步的去理解了,那么下面大家看一下。
怎么从PIT等于QIO1到OT啊,这么一个联合概率等于等于下面这个式子,或者说从这一步到这一步肯定是相等啊,这是没问题的,但是你用的是哪条规则,或者你根据的是什么样的一个规则。
你从上面这一步可以得到下面这一步,看看我们在形式上,在形式上变成了什么,变成了SUG,从一到N啊,变成了一个求和啊,概率求和,然后呢,它的求和的概率的这个对象呢就比较复杂了,变成了四项,看了吗。
一项两项,三项四项,这四项分别是谁,分别是IT等于QIIT等于QI,IT等于QY啊,他还在这是吧,然后呢,这里有一项是O1到TO1到OT,那么O1到OT,是不是可以拆成O1到OT减一,然后再到OT。
所以说这一项拆成了两项啊,也在啊,其实这没问题,然后来多了一项,IT减一等于Q类,你看这里只有两项吗,哎这里有两项,但是多了第三项,IT等于QG,这第三项是怎么多出来的,或者说多出来它是用了哪条规则。
大家有什么理解吗,哪条规则,不理解是吧,你想想我们手头上一共就这两条规则,你你你现在也没得选吗,你能选哪一个,你看看你两条规则,加法规则和乘积规则,乘积规则不带sum求和。
那可很大概率是是是根据这个加法规则,但是加法规则人家只说的是条件,概率和联合概率之间的关系,你这里好像并不符合,刚才那个并不符合这个要求啊,所以这个时候你需要灵活一点,什么叫灵活一点,这你会发现。
比如说这个地方我加上一个随机变量Z,大家想想影响不影响,这个所谓的加分规则是不影响的,也就是说我加上一个,只要在左侧再加上一个随机变量Z,那么同样在右侧也加上一个随机变量Z,其实这个概率等式还是成立的。
那这个时候你再想想,不就变成了两个随机变量和三个随机变量之间,的这种啊这种概率关系了吗,那么同样,现在你是在保证了原有的随机变量的基础上,增加了一个随机变量,而增加的这个随机变量是IT减一等于QJ。
我们只需要保证的是什么,保证的是你新加入的这个,你之前加入这个随机变量Y,要进行一个sum概率上的求和,你看看这个时候是不是这从一到N,而我们知道QG吗,QG是我们状态集合当中的一个元素。
而这个元素可以在所有的状态集合上任意取值,那有多少种状态,有大N种状态,所以这个地方G从一到N我可以从一到N取值,那不就是这里对应的是随机变量Y,在所有可能的情况下进行一个概率求和嘛。
所以啊从上面这一步到下面这一步,我们用的是加法规则好吧,这个地方确实你需要灵活一点,但是这个灵活呢,我觉得也没有什么太多的技巧性而言是吧,这是这一步啊,那么为什么要这样做啊,这才是个好问题。
就是你吃饱了撑的没事吗,为什么本来只有两部分对吧,两部分的联合概率的形式,你为什么把它硬生生的拆成,拆成这个一拆成这种形式很显然是有用的,但继续往下,那么最后你才会发现我们的目的是什么好了。
那么再从这一步到这一步又是用到了哪条规则,或者说是呃怎么生成的,我们再看看啊,本来现在我们得到的是IT减一等于QJ,IT等于QI,然后呢是O1到OT减一这个地方是OT,这是一个四个部分的联合概率。
现在呢拆成了两部分,拆成了两个概率的相乘,哪两部分呢,我们需要看一下,第一部分变成了IT减一等于QJ,原来我在这,现在跑到这来了,然后呢这个地方还有个IT等于QY,IT等于QY在这对吧。
然后呢这里还有一个O1T减一,O1T减一是在这,然后这里还有一个OT在这,那么也就是说啊,很显然我们原来是四部分的联合概率,现在呢拆成了一个条件概率的形式是吧,拆成了一个条件概率的形式。
作为了前面这一部分,很显然我们知道这个等号,如果仅有前面这两部分的话,是不相等的,那怎么办,看这看这这里还成了一个IT减一等于QJ,然后O1T减一,那么你看看是不是IT减一等于QJ跑到这来。
O1到T减一是跑到这来,那你告诉我,下面这一步的得到是使用的哪套规则,应该是一目了然了吧,哪条规则,我们只有手上这两个东西,乘积规则,有同学会问,那乘积规则说的是两个变量的联合概率。
是拆成了条件概率和边缘概率的乘积,你这可是有四个,四个又怎么了,四个无非就是你可以把,你可以把他俩认为是一个吗,你可以把他俩认为是一个吗,那这样的话这四个不就调整一下顺序,就变成了两组是吧。
其中一组作为条件,另外一组作为条件概率的,条件概率很显然就变成了条件,概率,需要乘以那个内一组所对应的一个边缘概率,这是用的是乘积规则,那同样继续往下呗,你需要一步一步的去这样去去给大家说啊。
在这个规则还只是把结论放在这,让你找只找对应关系或者找这个规则是吧,我们上学的时候,这个就完全没有,而你需要自己去找这个推导过程好吧,让我们看看从这一步到这一步又是怎么来的呢,看看再分析分析啊。
很显然这个地方,这两个同学还在啊,在这直接下来了,但是作为条件的这两部分,只有其中的一个下来了,这个条件跑哪去了,你需要给出一个解释和说明是吧,这是一个一个,后面这个式子很显然是变成这个式子了。
又为什么,你需要解释一下好吧,两个问题,第一个问题就是这个O1到OT减一去哪了,这是第一个问题,第二个问题,这个式子它等于这个阿尔法T减1G,又是为什么啊,这两个问题谁能解释一下吗,先解决第一个问题哈。
第一个问题是这个O1到OT减一跑哪去了,他不能凭空就消失,是吧,很显然,但是从式子上又告诉我们,他又确实是没有了,那原因是什么,或者为什么没有看一下啊,再看一下这个式子。
我们已经知道了问题的主要矛盾在哪了,就是就是他跑哪去了,但是他跑哪去,一个很重要的原因在于他是谁,或者他起到了一个什么样的作用,很显然,这里的O1到T减一处在一个什么位置上,处在一个条件的位置上是吧。
处在一个条件的位置上,而他作为条件又决定了谁呢,又决定了前面两个随机变量分别是IT和OT,IT和OT,那这个时候就有一个很显然的一个启示,就是他作为条件如果能够去掉,那也就是说这个条件存在和不存在。
不会影响前面这两个随机变量,那我们就需要看一下,这个条件是不是真的,对前面两个随机变量不产生影响的吗,或者说,如果我们认为,他对前面两个条件不产生影响的话,是因为什么造成的,那我们前面想想。
刚才讲到的两个马尔可夫性假设,第一个假设说的是什么,第一个假设说的是任意一个时刻的状态啊,任意一个时刻的状态,只依赖于它的前序时刻的状态,所以这个条件你是不能够去掉的。
也就是说这里的T减一直接决定或者影响了T,IT减一在哪,IT减一在这,IT在哪,T不就是在这吗,T减一在前,T在后,那么很显然刚才我们说的,其次马克复性假设不就说的是,IT只依赖于IT减一。
那么当IT减一作为条件的时候,你是不能够去掉的,所以这个IT减一等于QJ你是不能动的啊,所以这个条件是原封下来的,那么看另外一个gt ot,我们前面也讲到过,影响OT的是谁。
OT在这影响OT的只有IT来决定它,如果T作为条件,那这个条件也不能去掉,但问题在于后面这个条件里面有T吗,没有啊,没有it,所以说影响it的it减一可以作为条件。
但是影响OT的那个T是没有作为条件出来的,换句话说,你这个地方即使有O1的OT减一,按照那个所谓的观测独立性,假设你这里的O1到OT减一,不影响这里的OT,因为OT只只依赖于IT。
同时也不影响这里的IT,因为IT减一影响IT,所以就是说你这里的条件存在还是不存在,都不直接影响前面的两个随机变量,所以这个条件也就没有存在的必要了,所以就退化成了下面这个式子了好吧。
所以从这一步到这一步啊,是因为你这个条件是可有可无的,没有用处啊,所以是的,也就做了相应的简化啊,这是刚才那个一个疑问,那下面这个疑问又是下面这个问题是怎么来,是怎么解决的,咳咳。
下面这个问题说的是阿尔法T减1G,为什么等于这个式子,那很显然我们需要看一下,阿尔法T减1G的展开式到底是长什么样,我们但是手头上我们只有这么一个东西,我们手头上只有一个阿尔法TI。
那我们需要找到的是阿尔法T减1G等于什么,那就展开看看呗,按照定义形式对吧,自己展开看一下,首先还是个概率对吧,阿尔法TI说的是O1到OT,那么很显然这里的T是和这里的T对应起来的,你现在是T减一。
很显然是O1O2。2点,一直到O什么OT减一吗,然后呢还有一个IT等于QY,那很显然应该是IT减一等于什么IT减一,这里的I对应的是这里的I,那你看现在这里是既然是G那很显然是。
所以说IT减1G根据定义展开,是等于PO1O二一直到OT,然后是OIT减一等于QJ,你再看看上面这个式子,是不是就是说的这个东西,这里O1到OT减1O1到OT减一,IT减一到QG,IT减一到QG。
所以说这两个式子相等是通过定义展开的,只不过我不是在T时刻上展开,而是在T减一式刻上展开,那按照标准定义形式展开就可以了,这也没什么可说的是吧,嗯好继续往下,那从上面这一步到下面这一步又是因为什么呢。
我们需要再仔细看一下,首先这里的阿尔法T减1G,这里有个阿尔法T减1G,这里是没有变的啊,这个是没有变化的,然后很显然这个式子,这个式子又分别表示成了下面两个式子的乘,积的形式,那仔细的再看看啊。
再仔细的看看,这又是因为什么呢,首先我们可以看到IT等于QI,IT等于QI跑到这来,然后呢OT跑到这儿来,然后IT减一等于QY啊,在这,然后呢看后面IT减一等于QY,T减一等于QG。
哎呀这个是因为什么呢,哪个同学能看出来了,那个时候很显然,我们知道这里的IT等于QY和OT,是一个联合概率的形式,当然是件之下的一个联合概率是吧,那这个时候同样同样,我们还是使用我们的这个乘积规则啊。
把它展成条件概率和边缘概率的乘积,只不过这个时候呢我们可以看一下,稍微仔细一点啊,稍微仔细一点,这个时候我们只需要保留的是谁,保留的是OT在前面啊,OT在前面,那很显然这里的IT等于QI。
就作为了条件部分了吗,作为条件,而这个地方的I7-1等于QJ,同样作为条件再放下来,所以你会发现这是原条件在这没变,这是原来的两个随机变量的联合概率,其中的一个条件放到了这儿,另外一个在前面。
所以这是一个根据我们的乘积规则啊,根据我们的乘积规则展开的条件概率的形式,既然改成了条件概率,那这个时候的这个条件你还需要把它还原回去,乘以它的什么,乘以它的边缘概率,所以你会发现这个地方他还在这啊。
作为一个边缘概率,但是呢不要忘了,他同样是在IT等于QJ的条件之下,所以这个条件你还不能变化,所以说啊从这一步到这一步,用的还是我们的乘积规则,只不过这个时候的乘积规则,因为后面带了一个条件概率啊。
带了一个条件概率,所以这个条件你不能够说去掉就去掉,还必须要保留着,至于这个条件起不起作用,那是另外一回事啊,即使它不起作用,你写在这也没问题,当他你觉得不影响前面的这个条件,决定的这个随机变量的时候。
如果你有依据,就可以把后面这个条件就去掉了,没问题吧,所以说啊,这个地方使用的还是我们的程序规则,那好了,有了成规则之后,这一步就是因为什么好了,我们再看看这一步在这啊,这是没问题的。
落回来你再分析分析这一步就很有意思了,这一波啊是个条件概率啊,这一部分是条件概率,这一部分条件概率说的是什么,说的是在T减一等于QJ的条件之下,it等于QI,很显然说的是状态和状态之间的关系。
IT等于QJ,然后再按哎哎可能吗啊,这是IT减一等于QJ,在IT等于QI啊,这么一个概率值,那反过来不是前面的影响,后面,IT减一等于QG的条件之下,T等于QI,那么很显然。
这是说的是两个相邻状态之间的转移概率,而这个转移概率一定是在哪,是不是一定是在我们那个状态转移矩阵A里面,但是状态转移矩阵A里面那个AIJ说的是什么,那个概率哈,我们直接看定义吧,在哪儿来着,在这。
人家说的也是前后之间的关系,两个时刻的关系,但是说的是在前时刻等于QI,后时刻等于QG,等于AIJ,但是下面这个式子说的是什么,下面这个式子说的是在前一个时刻等于QJ,后一个时刻等于QI。
所以就不再是AIG,而是什么AJI,很多同学啊这个地方都都问,是不是书上印错了啊,你看看你那个统计学习方法里面没有印错啊,这个地方确确实实AGI,为什么是AGI,就是因为啊在公式的推导过程当中。
这个地方说的是前一个时刻等于QJ,后一个时刻等于QI啊,所以一定是AGI好吧,不管是AI还是AGI,在我们的状态转移矩阵A里面,是已经被定义的啊,这个是没有问题的好吧。
所以说这个是通过我们的状态转移矩阵,A来确定的,那下面这个式子说的就是什么,下面这个式子啊是一个条件,概率决定哪个随机变量决定是OT,而我们前面也讲到过,在T时刻的状。
T时刻的观测只和同一个时刻的状态有关,和其他时刻的状态和观测都没关系,所以说后边这个条件压根儿就不起作用啊,压根就不起作用,那这个时候我们再看一下,在T时刻,等于QI的条件之下,T时刻等于OT。
那肯定是通过谁啊,是不是通过我们的观测概率矩阵B来决定的,不就是那个BIOT吗,在T时刻等于QI的条件之下,T时刻等于gt的概率BOT啊,所以说从这一步到这一步,完全是通过我们的已知条件。
那个拉姆达来决定的,拉姆达里面既包含A也包含B还有那个派,虽然我们没用到是吧,但是我们知道这个地方信息数据是有的,那有了这次这个到这一步以后,我们需要停下来分析分析这个结果啊。
这是最后我们要推导出来的一个结论,那这个结论有什么用,这个结论其实是非常有用的,第一个其中的三部分,其中的三部分,第一部分BIOT是B矩阵里面存在的,这里的ADI是我们A矩阵里面存在的。
当我们已知拉姆的条件之下,以上两部分信息是已知的,那么得到的第三部分啊,非常有意思,他得到的是阿尔法T减1J,我们现在建立的啊,建立的是阿尔法T2和这个式子的关系,而在这个式子当中的前两部分都是已知量。
已知就是已知嘛,就就就算出来结果就带带你去算就可以了,问题是,我们建立的是一个阿尔法TI,和阿尔法T减1G之间的关系,那这两个关系有什么作用,你会发现很显然,明显的说明的是,DT时刻的阿尔法值。
和DT减一时刻的阿尔法值之间的关系,换一个角度,当我知道了DT减一时刻的阿尔法值的时候,代入到下面这个式子里面,我们就可以计算出DT时刻的阿尔法值,当我有了DT时刻的阿尔法值。
同样带入到它所对应的这三部分里面去,我就可以计算出谁啊,是不是可以计算出那个阿尔法T加一啊,有了阿尔法T加一,我就可以计算阿尔法T加二对吧,这是从前往后的一个计算逻辑。
但问题是你这个阿尔法T减一怎么得到呢,阿尔法T减一我要记得到这个值,那么很显然,阿尔法T减一,是不是可以建立阿尔法和它和阿尔法T减二,之间的关系,有的人RFT加二,你也不知道,那同样嘛一直在往前追溯。
我要计算阿尔法T减二,我需要知道阿尔法T减3T4T5T6,一直到减,一直到阿尔法一那个时刻,而阿尔法一里面一定包含的是第一个时刻,而第一个时刻是在谁那派里面,换句话说有派我就可以计算阿尔法一。
由阿尔法一可以计算阿尔法二,由阿尔法二就可以计算阿尔法三,计算阿尔法四,一个阿尔法T减一计算到阿尔法T,计算到阿尔法,大体换句话说,我们建立的是这个倾向概率的计算逻辑,告诉我们。
前向概率之间是有一个所谓的递推关系的,就在这,我建立的是邻相邻两个时刻的递推关系,那这两个相邻时刻的递推关系告诉我们,当我知道了lambda的时候,当我们知道了ab派的时候,第一个时刻的阿尔法值有了。
那么以后所有的阿尔法值都可以计算得到啊,都可以计算得到,那有了这个前向概率的作用是什么啊,一会我们就可以看一下啊,有了这个阿尔法作用还是非常重要的,那么到此为止哈。
这个阿尔法前向概率部分它的定义在这放着,有了阿尔法TI,我们需要建立的是相邻两个时刻的阿尔法之间,的递推关系啊,这个递推关系的关系式也摆在这个地方,每一步的计算都是有依据的啊,为什么要讲这个东西。
第一教材上是没有展开讲的,他只给出了一个结论,很多同学对这个结论是有困惑的,就是为什么或者怎么得到这个结论,逻辑就摆在这,大家可以看到啊,这个逻辑推导还是有一定的,这个稍微复杂一点啊,这是第一点。
第二点呢说的是什么,就是你希望得到某一个结论的时候,或者说你已经知道这个结论,而希望看一下它的递推关系的时候,其实无非使用到的就是所谓的基本的概率,计算规则,以及当前这个模型所特定的一些基本假设。
或者说是一些这个前提条件,有了这些前提条件,基本假设,再加上两条基本规则,也是可以通过这种分析哈得到你想要的结论的,那么关于这个前项概率部分看有什么问题吗,是不是T等于QI的条件,首先前面是个联合概率。
就没有条件,他是谁的条件嗯,我不太清楚这个问题,所以最好再稍微整理一下好吧,如果整理一下,说不清楚的话,你可以截个图,在我们的资料上截下图,然后你再画一下到底谁的条件,好了,前项概率呢我们就介绍到这。
那前行概率它有啥用或者怎么用,是个问题是吧,看一下这里计算,不要忘了我们的目标是什么,我们的目标是为了要计算这个PO是吧,POPO呢我们可以把它写成P,从O一一直到O大T啊,这是没什么问题的。
PO从O一一直到殴打T,然后同样从这一步到这一步是怎么得到的,原来只有O1的O大T是吧,O1的O大T,现在呢再加上一个I大T等于QI,I大T等于QI,那么很显然多了一个随机变量啊。
多出来这个随机变量你还需要通过什么,通过求和啊,把它还原回去,好还原回去呢,这个地方是QI嘛,所以I从一到N,那么很显然使用的是什么加和规则是吧,加和规则,那加上这个随机变量的作用是什么呢。
再看下面这一步,他可以得到什么,就从这一步到这一步是怎么得到的,从这一步到这一步,很显然我们可以得到啊,式子上告诉我们这一部分是等于下面这个式子,而下面这个式子是阿尔法大ti对吧,阿尔法打ti。
那么按照我们的这个关于阿尔法的定义,还是那样,你需要把阿尔法大ti展开是吧,阿尔法大ti等于什么,那就比较一下吧,阿尔法大ti不就是等于等于什么,原来阿尔法TI是从一到小T,你现在是阿尔法大T。
不就是从O1点点遇到O大T,这个是I小T等于QI,那现在不就是再加上有I大T等于QI,不就可以了吗,按照我们的简写符号不就变成O1从一到大T,然后呢是I大T等于QI,那你看看这个式子和下面这个式子。
对吧,这个式子本身就是关于前项概率,在大T时刻的前项概率的一个展开式嘛,所以这是根据定义来的,那得到这个式子有什么用,你再看看得到这个式子有什么用,那很显然得到这个式子以后,在整个表达式里面。
我只需要把这个阿尔法大TI计算出来,比如这个阿尔法大TI进行全进行一个求和,就可以得到这里的PO是吧,但问题现在就是,这个F大TI能不能得到他大ti,我不知道等于多少,但问题在于,我前面。
我们已经建立了任意两个时刻的,前向概率之间的关系,阿尔法大ti我不知道,那我好了,我计算一下阿尔法大T减1I是不是就可以,那阿尔法大T减1I是多少,我也不知道,那我需要计算一下阿尔法大T减2A。
同样不知道继续往前倒,一直倒到什么时候,一直倒到那个阿尔法1I,如果我知道了那个阿尔法1I等于多少,我就知道阿尔法2A,阿尔法2A知道了阿尔法3I,阿尔法大T减1I,一直到阿尔法大TI是不是已经知道了。
一旦有了阿尔法大TI知道之后进行一个求和,我就知道了P5,所以说前向概率的这个逻辑就告诉了我们,任意两个时刻的前向概率,我是可以啊,这个递推关系是可以建立的,而一旦建立了以后。
我需要知道这个阿尔法大T的结果的时候,我就可以一直往前倒,那一直往前倒呢,我就需要知道那个阿尔法一是谁,那这个时候很显然所有的矛盾啊,所有的矛盾都聚焦到了那个阿尔法一上了,那现在也就是说那个阿尔法一。
你是不是能够把它计算出来的问题,一旦把那个阿尔法一计算出来了,你就可以知道阿尔法二,阿尔法三就是阿尔法四,也就是阿尔法大T,而把所有的阿尔法大T都求和,你就知道了,这是你的P5,阿尔法一是个核心问题。
阿尔法一等于谁呢,还是那个老样子,还是那老样子,阿尔法一,它就是阿尔法一嘛,按照我们前面的定义,你把热烈的阿尔法一展开看看它等于什么,不就完了吗,阿尔法1I阿尔法1I很显然也是个概率。
按照我们前面介绍的阿尔法一,I是应该是等于O1,然后呢是I1等于QY没问题吧,I1等于QY,然后呢这个是个怎么办,下面有没有同学能够给给一点意见,这个联合概率怎么计算,很显然,这是一个关于两个随机变量。
O1和I1等于QY的联合概率,那你想想这个式子的概率值,我们怎么样能够通过一些已知量把它表示一下,换句话说他应该等于什么,按照我们前面讲到的放在这吗,联合概率不知道等于多少,联合概率概率。
联合概率不知道等于多少,你可以把它拆成边缘概率和条件概率,条件概率和边缘概率的形式是吧,这个地方需要仔细一点,就在于谁作为条件O1是作为一个,你看看两个随机变量的联合概率,我拆成。
把它拆成了条件概率和边缘概率的乘积的形式,而你看看这两部啊,这一步这一步说的是什么,这一步说的是,在第一个时刻状态等于QY的条件之下,观测等于勾一,那么这个不就是等于那个BIOE吗,这是注意啊。
这是说的是还是那样画图啊,如果你真的琢磨不清楚,你画图,这说的是在第一时刻,那第一个时刻I1对吧,不是I1等于QI的下O1吗,那就是由状态决定我们的观测,这不就是那个BEOBIOE吗。
我们的观测概率矩阵,那下面这个是什么,下面说这个式子说的是I1等于QI,I1等于QI,第一个时刻等于QI的条件由谁来决定,是由我们的派I,初始向量来决定的,而我们知道已知当我们已知拉姆的条件之下。
这里的B和派都是已知的是吧,所以说啊那这样的话阿尔法1I就是已知的,就像刚才我们所说的,看这里的狮子,初始值阿尔法1I,阿尔法1I就等于派I乘以BIOE,这个式子怎么得到的,刚才已经说了是吧。
阿尔法1I知道了,有了阿尔法1I我们根据DT表达式,那这个时候当我们知道了阿尔法TJ的时候,我们代入到这个式子里面,就可以计算出阿尔法T加一啊,前当我们知道了阿尔法T,就可以计算阿尔法T加一。
再把阿尔法T加一带到这儿,就可以得到阿尔法T加二依次向下,最终我可以计算出来的就是谁,就是那个阿尔法T阿尔法大T是吧,阿尔法大T,而我知道当阿尔法大T有了以后,进行一个sum求和。
这个时候就可以得到这里的PO,而我们PO就是我们在已知拉姆达条件之下,希望得到的观测序列的概率值,我们的求解对象好吧,看看这一部分还有什么问题吗,当然概率计算远不止这一个,后面还有很多,还有很多个。
我们就不一一介绍了啊,但是呢基本的逻辑是一样的啊,就是从一个量啊得到另外一个量,只不过中间的计算步骤啊,使用我们的java规则,乘积规则和那个齐次性假设啊,那个那个其次假设和观测图类型假设啊。
这一系列的这些已知条件,你做一个计算就可以了啊,这些结果呢就摆在这,有兴趣的同学哈,你会记住自己看一下啊,自己看一下,当然这些中间的结果啊,我们计算过程你是你你有兴趣看,没兴趣就就算。
但是这些中间的结果,你知道是可以通过我们的已知量,可以把它计算出来的,后面我们用的时候直接拿过来用就可以了,好吧,这是关于第一个问题哈,第一个问题,第一个问题解决了以后,我们看第二个问题。
第二个问题呢称之为学习问题啊,他说的是已知观测啊,已知观测要把这个模型构建出来啊,这个问题很厉害啊,要把这个AB派都需要搞定啊,这个问题呢就比较麻烦,为什么麻烦呢,是需要看一下这个模型。
我们前面讲到过啊,就是在当前这个模型当中,状态状态状态观测观测观测,现在呢我们仅仅知道的是观测,就仅仅知道的是这个东西,还需要把ab和派都需要搞定,那这个时候呢最麻烦的问题就在于,I我不知道啊。
这里的状态序列我是不知道的,那这个时候的问题求解就牵扯到另外一个话题,就叫做带有隐变量的计算问题啊,带有隐变量的模型求解问题,那这个时候呢我们可以借助另外一个嗯算法,叫做期望最大算法啊。
所以这个时候呢需要我们把期望最大啊,介绍一下em em介绍完了以后,我们回过头来,把em代入到我们这里的求解过程就可以了,Em3,em算法是用来求解带有不完全数据的模型的,计算的啊,所谓的不完全数据哈。
这里的不完全数据就是我们的观测随机变量,那就是我们的观测啊观测,然后呢完全数据呢就是带着观测,还带着我们的隐变量,那这个时候呢因为不同的这个模型和算法,它们的符号不太一样,我们需要做一个对应关系啊。
做一个对应关系怎么对应,那这里所介绍所谓的隐变量Z啊,这里所谓的隐变量Z,就是我们马尔可夫模型里面的状态序列I啊,他俩是一回事,而这里的所谓的观测随机变量,Y就是我们马可夫模型里面的观测序列O啊。
他俩是一回事,好吧,就是em算法里面用YZ来表示,但是在HMM里面是用go i来表示啊,你知道他俩对应关系就可以了,那下面的问题就变成了,当我们不知道I啊,或者说我们不知道隐变量Z隐变量嘛。
就是我们不知道的时候啊,但是呢我们虽然不知道它的值,但是很显然它是存在的,那这个时候我们怎么在隐变量存在的条件之下,我们要把完全数据的联合概率计算出来的,问题啊,就这么个东西。
看下面当含有隐变量Z的概率模型啊,我们的目标是极大化观测变量Y,关于参数theta的,关于参数theta对参数theta的对称,自然自然函数啊,就是参数theta的对数似然函数的极大化的问题。
那这个时候呢,我们看一下这个对应自然函数对数,虽然函数呢就是在条件之下,西塔之下Y的一个呃连上外对,需要注意一下这里的Y哈是个是个序列啊,因为这里的是个序列嘛,所以这是个联合概率啊。
不要认为这里的Y是一个嗯,这个什么不是只有一个随机变量,你或者说你可以把这里的Y,认为是一个随机向量啊,由若干个随机变量组成的一个随机向量,所以说这个时候还是挺复杂的。
复杂还就体现在不仅仅是由我们的这个呃,观测变量Y还有所谓的隐变量Z啊,还有所谓的隐变量Z,同样哈从这一步到这一步,用的是我们的加法规则啊,这没问题,然后呢从这一步到这一步,我们继续把它展开。
因为这里的YZ哈是联合概率,所以可以拆成条件概率和边缘概率的乘积,所以这个地方是用的乘积规则好吧,最后呢我们需要得到的就是关于对数,似然函数的对数,似然函数的极大化问题就是下面就是极大化。
下面这个式子极大化,下面这个式子呢搞出来,带给我们带来很大的麻烦啊,这个式子还是又有log又求和是吧,又带着一堆成绩,还挺麻烦的,那最差的极大化怎么办,怎么怎么完成,我们下面有个策略,我们看一下。
因为很显然这个求极大化的过程,我们需要进行一个迭代过程,需要迭代的计算,既然是迭代的计算,我们比较一下对自然函数LC,它与第二次迭代以后的对手,自然函数LCI之间的那个差值,注意啊。
这里的参数THETI,代表的是我们在第二部已经得到的那个参数值,因为在第二部那个参数值我已经知道了,所以带入到我的自然函数里面去,这里的自然函数LCI也是已知的,那现在我需要看的是我的优化目标。
LC塔就是这个式子啊,就是这个式子,我的优化目标和在第二轮,已知C塔I以后的那个lc ti之间的,那个差值是多少,我分析一下他俩的差值,这是一个常用的策略啊,什么意思呢,就是当这是我们的theta。
这是我们的LC塔,当我们这个LCA这个很复杂啊,这个函数形式啊,或者说我压根可能就不知道,但是呢我又希望找到它的极值,比如说极大值,那么很显然这个地方是我们要的C大箱,我们很显然是要得到这个最大型。
但是呢这个函数形状我又不知道,那这个时候怎么办,往往我们会在任意时刻找到一个西塔值,作为西塔零是吧,然后呢我我既然又不知道这个函数长什么样,那怎么办,我看一下,如果我知道他在lc ti的时候的一个值。
比如这个这个值我知道的,那这个时候我看一下整个的函数,基于这一点的时候的一个函数形状,能不能表示出来,换一个角度啊,就是说如果我能知道它整个函数和一个定值,之间的那个关系,我找到的时候。
其实整个的函数其实加上一个常量,是不是也已经知道了,当然这是一个简单的一个思路,因为这里的C塔零是在某一个位置上的,一个参数值,这个位置上参数值带入到LC塔以后,这个具体的位置。
是会随着我们的迭代过程发生变化的,也就是说我我要找到一个和某一个时刻的,LC和A之间建立某种关系,有了这种关系以后,我只需要把整个的函数形状表达成,关于某一个时刻。
c ti的这个差值的大小的形状就可以了,而我下面的问目标只需要使这个差值怎么样,是不是仅希望使这个差值尽可能的小,是不是就可以了,那是不是就可以趋近于我原函数的一个情况。
而我们知道使得我这个差值尽可能的小,又使得这个这个差值达到一个,尽可能大值的时候,就趋近于我的原函数的一个极大值的情况,这是我们一般的一个策略啊,所以我们一般需要看一下当前这个LC塔和它。
它在一个具体参数位置上的,那个那个已知函数值之间的差值,我们看一下这个结果是多少,那么看下看下面分别代入哈,分别代入就是把LC塔放在这后面呢,很显然就是LC塔I啊,LC塔ILC塔I嘛。
就等于log p在lc ti在c ti条件之下,Y的概率值啊,这个从这一步到这一步就是个代入,那么下面一个从这一步到这一步,为什么是的就有点复杂了啊,但是仔细一点就没问题啊,这一步在这啊。
这是没问题的问题,就便于这么个式子变成下面这个式子,他俩是怎么得到的,到这儿是怎么来的,其实并不复杂,你可以看到这里的SAMZ还在这里,是PZC下YPZC塔条件之下,Y这里还能是个PC塔,条件是ZPC。
它条件之下是Z啊,比如说行这一部分在这没问题,那很显然是多了这两部分,那do的这两部分一个在分子上,是一个在分母上,而且这个时候的两部分还相同,那也就是说分子分母同乘了一个条件概率,我们知道条件概率。
这样的是不影响我们整个式子的,所以这个时候,也就是说从从这一步到这一步,就是在我们这一项当中的分子分母,分子分母上啊,同乘了一个PYC,它I条件之下Z的概率啊,就这么一步啊,这个没什么太多可说的。
然后呢从这一步到这一步呢,可能会发现哎我们得到的是一个大于等于,比如上面这个式子啊,上面这些式子是大于等于下面这个式子的,为什么上面这个式子大于下面这个式子呢,我们需要借助一个所谓的琴声不等式啊。
这算不等式形成不等式哈,这个我们是数学上的一个不等式性质啊,你拿过来直接用就可以了,有兴趣的同学你可以查一下这个数学课本啊,这个地方我们直接拿来用就可以了,他说的是什么,他说的是log。
萨姆拉姆达Y是大于等于萨姆拉姆达log y啊,你这么简单看理解就可以了,log萨姆拉姆达Y大于等于萨姆拉姆达log y,那么比较一下,看一下log sum lambda外四部分是吧。
Log some lambda y,log sum lab y按说是大于等于sum lambda log y,看看下面大于等于,lambda log y明白怎么来的了吧,所以就是前成不等式的使用啊。
这也没什么可说的,好了我们继续往下下面一步呢就不好理解了,就从这儿到这儿来的,从这到这会发现这里有个log PCI条件之下,Y的条件概率跑哪去了,就这部分哈没有了,跑哪去了呢,跑这来了,跑这来跑这来吧。
你这个logo就没有了,那为什么这个地方呢,我们需要分析一下,分享,很显然这个地方如果是log log变成log a b,比上log log a减log b等于log a b log b嘛。
这个时候挺好办,但问题麻烦的就在于,它前面还多了一个sum z p y c,ti条件下Z的概率,那这一项里面没有这部分,所以你就不能把它提供因式提出来,然后变成log log是吧。
那问题是嗯能不能把它凑一下,怎么凑一下,就是把这一部分式子,放到前边了,可不可以,当然可以还是不可以,我们需要计算一下这个前后之间加上以后,是不是发生变化是吧,是不是发生变化。
还会发现一个很好的一个结论是什么,一个很好的结论就是这个式子本身上,就是这个式子SZ,然后是PZ条件之下,yc ti这个式子等于几啊,这是个条件,概率是关于谁的条件,概率是关于随机变量Z的条件概率。
而前面又是个SAMZ,我们知道这个式子我不管后面这两个条件啊,不管这两个条件,因为这两个条件是已知条件嘛,当已知条件之后,关于Z的时候,因为我们知道这里的Y是我们的观测变量。
这里的C塔I是我们的上一轮的已知参数,都是已知的嘛,在这两个已知量的条件之下,Z随机变量要进行一个求和,而我们知道这个式子一定等于几,一等于一,注意哈,这仅仅是这个式子等于一,不代表哈这个式子。
换句话说,你看看这个式子里面,随机变量Z在这是不是也有随机变量Z,所以说这个式子即使等于一,那么这个式子也不等于后面这个式子,你不能把这个式子你不知道不等于一吗,一乘以任何值不得动一吗,不行。
是因为这里的随机变成Z,和这里的随机变成Z有关系,而这个地方是个乘积,所以sum求SAM的求和是对这个乘积的求和啊,这个地方需要注意一点,但是呢这不影响什么,这不影响我发现在这一项上。
如果我加上一个p z y c ti乘一个PYC啊,这还有个log,Log p,YCA是不影响的,为什么,因为这里的Z随机变成Z,在后面这一项里面是没有的,所以这个地方我等于是乘了一个,一一乘以这个式子。
而这个时候一凑,你会发现哎,这一项和后面这一项我就可以,形式上就可以把它统一起来了是吧,然后呢,这个地方就变成了LV减log b,那这个时候的这一部分就自然的出现在了,分母部分上了,好吧啊。
这个这个推导过程啊,如果你觉得这个推导过程还有问题,回去以后好好看一下,我们只要结论啊,我们要结论要什么结论呢,我们看看我们现在手头上,一个得到一个什么结论,我们手上得到了一个LC塔。
减去LC塔I要大于等于这个式子要大于等于,这个式子大于等于这个式子呢我们看看,就像下面这个式,就像下面这样以后哈,我们因为我们知道啊,这里的这个LCI是个已知量啊,在DI流的时候是吧。
我们把这个减LC的I扔到等号的右边去,因为等号右面去之后,这个地方就变成了加上一个LCI,变成了LC塔式大于等于这个式子啊,就是下面这个式子,令lc ti加这一部分等于一个B。
那么得到的就是LC塔I是大于等于B西塔,西塔I的LC的I是大于这个式子的啊,换一下看看我们知道一个什么东西啊,我们要求一个LC它的极大值,但是呢我们通过刚才的分析会发现。
我现在的LC塔大于等于下面这个BCACAA,也就是说我得到了一个下界函数啊,就原函数的下面一条函数,而我们又知道在下面这条函数如果求极大的话,它的一个极大位置,应该就越来越趋近于我原函数的极大位置。
这是想这是显然的,因为同一个例子,比如说呃,我们班级里面学习成绩最不好的那个同学,的成绩都有一个大幅度的提升,我们学习好的同学肯定他也必须要越来越努力,就是我的下界函数都越来越大的时候。
我的上界函数也趋近于我的最大值,那这个时候下面的问题就转化成了,我只需要使这个B函数它的极大化,来代替原函数的极大化,那好了,那么对B函数的极端化呢,我们分析一下啊,B函数展开以后,这个式子也挺复杂。
但是呢我们加以分析会发现,首先这个lc ti是不需要的或者不影响的,因为它是已知量,在DI里的时候,他已经算出来了,而这里的这个分母部分,分母部分我们也不也不影响,因为它都在大是吧,也不影响。
那这个时候只剩下了分子部分,尽可能的怎么样极大化就可以了,那这个函数我们再给它起个名字叫做Q函数啊,Q函数,那么em算法的一个核心就在于,找到带有隐变量的模型的Q函数,而Q函数呢就摆在这个位置上。
我们需要唯一需要做的就是分析,Z是我们的这个呃状态变量,Y是我们的观测变量,把这个能够对应起来以后啊,对应起来以后构建我们的Q函数,下面的问题就是当我们求原函数,原函数的极大化问题的时候。
转化成了它的下界函数B函数的极大化问题,而通过一系列的分析,我们会发现,B函数的极大化又等价于Q函数的极大化,所以问题就转变成了Q函数,而Q函数当中既包含我们的随机变量,Z又包含我们的随机变量Y。
只需要把它套入到公式里面去,就可以得到原函数的极大化,好吧,看一下em算法,em算法其实就两步,第一步嗯先初始化我们的CA0啊,随机给出一个参数位置,然后呢第一步给出异步。
所谓的异步呢就是构建我们的期望,期望呢其实就是刚才那个Q函数,有了Q函数以后,第二步M不就是使我们的Q函数极大化,Q函数极大化的那个最优参数,就是原函数的极大化,最优参数好,那下面的问题就在于回过头去。
下面我们现在有I有OI是我们的隐变量,都是我们的观测变量,现在我们希望找到的是带有隐变量I的联合,概率的极大化问题,那这时候原函数我们知道挺复杂,转变成它所对应的Q函数的极大化就可以了。
看看这一部分有什么问题吧,那我们就继续啊,下面其实有了这个工具以后,下面其实就是一个对应的问题,对应求解的问题,你把符号放好了,继续下,嗯好学习学习算法,将我们的观测序列啊。
就将我们的观测序列作为观测序列,O将状态序列作为隐隐变量或者引数据I,那么一马可夫模型呢,就是带有含有隐变量的一个概率模型啊,还有隐变量的概率模型,那这个时候p o lambda啊。
O是我们的那个观测嘛,PO拉姆达展成PO在I条件之下的PO,然后再乘以pi,就是刚才我们所说的PO是我们的观测变量,I是我们的隐变量,那这时候就完全数据就是OI嘛。
完全数据OY那这个时候的完全就是散函数,就是log p o i lamba,那这个时候就像刚才我所说的,异步定义Q函数,Q函数就在这啊,对应起来放在这就可以了,那这个时候呢你会发现在Q函数当中。
我们把联合概率拆开以后,把联合概率拆开以后,拆成了一个边缘概率和联合概率乘积,再出一个边缘概率,这个联合概率乘以联合概率,再出一个边缘概率的形式,注意一下,这里的变异概率是在拉姆达一拔。
就说他是在上一次的那个参数,已知的条件之下的边缘概率,所以这个时候的分母部分哈也是不影响我们的,所以我们的Q函数可以进一步,削减成下面这个式子好吧,约减成下面这个式子,而约定成下面这个式子里面以后。
我们可以看到剩下的就是联合概率的形式啊,POY的形式,POI等于什么,下面给出POI的定义,POI定义,注意一下,这里是O和I的联合概率,就是我们的状态序列和观测序列的联合,概率的形式,既然是联合概率。
就意味着当前概率模型要从I1I2I三,一直生成到I大T,并且对应时刻的O1O2,一个O大T也需要生成,也就是说,我们需要把当前这个姨妈可夫模型生成出来,而生成算法在我们前面已经介绍过了,怎么生成。
看一下,先通过派生成I1,然后生根据B生成I1所对应的O1,再根据A生成A1,A1所对应的I1所对应的I2,再根据B生成I2所对应的B2,依次向下生成就可以了,所以说你会发现这个联合概率要拆开以后。
就是根据刚才我们的派币ABABAB,生成我们的整个一马可夫模型就可以了,而生成过程当中啊,而生成过程当中你会发现派不知道B不知道,A也不知道,因为我们现在知道,谁知道我们的目标。
就要把那个兰姆达先生找出来,所以这个地方的ab派啊一概不知一概不知哈,没关系,恰好这个地方做的是一个对数,自然你看了吗,这太有意义了,恰好是个对数,似然函数的一个极大化的求解问题。
而我们知道里程的一个对数,求垒成的球队数就变成了什么,就变成了累加,这个时候就变成了几部分,第一部分派是作为一部分,第二部分B作为第二部分,第三部分A把它作为第三部分,那么整个的累乘变成了累加,累加呢。
我们把它翻成变成三部分的累加,哪三部分呢,就像刚才看到的,这是第一部分,仅包含那个pad累加,这是第二部分,包含我们那个A的累加,就是那个第三部分包含B的累加,也就是说刚才刚才的里程通过log求和。
就变成了累加,累加呢我们单独把它们归归啊,分分组啊,分分组分成三组,哪三组呢,派的一组,B的一组,A的一组啊,变成这三组的累加,那下面的问题在于我们要对累加的和极大化。
李家的和的极大化的问题转化为了这三组啊,这三组分别极大化的问题,和我们使得第一组极大化求出谁啊,求出派星,第二组极大化我们求出那个B型一样A型,第三组我们一起使它极端化,求出那个B型。
这样的话呢有了A型,B型和派星,这个时候就组成了我们的,拉姆达星我们的模型就有了,这是基本的一个思路,那下面的问题就在于使这三部分分为几大化吧,看一下分别替代化分别极大化的问题啊。
其实就是一个带约束条件的,因为我们知道我们在对派进行极大化的时候,我们知道在第一个时刻可能取值的,所有的状态的概率和一定为一,这是没问题的啊,因为我比如说我第一个时刻能取三种状态啊,在等概率的时候。
每一种状态很显然是1/3,三分之1+3分之1+3分之一是一,有同学说不等不等概率的时候,不等概率的时候,虽然他们的概率值是不一样,但是概率和一定为一啊,这个没问题,所以一定是带着约束条件的极大化问题啊。
带着余数条件的极端化,而这个问题呢,其实按照嗯我们最简单的一个方式,分别对我们的派I求偏导就可以了是吧,派I求偏导让它等于零,得到一个关于派的一个表达式啊,这个时候你把这个表达式表示成关于派的结果。
我们就可以看到,这时候的派I就是所谓的派星I啊,最优的派啊,这个推导过程啊,这个推导过程就不展开了,原理其实是一样的好吧,这是关于派星,第二步是关于那个A型,同样这是我们的那个累加和。
里面关于A的部分条件呢,同样求和为一啊,这个时候还是使用啊,刚才那个逻辑啊,还是刚才那个逻辑,你把A型的最优A的最优解A型找出来,注意啊,这里所有的这些参数啊,这些Z塔,这里的这个伽马。
都是在我们刚才所介绍的那个第一步,概率计算过程当中的中间结果啊,刚才一直在强调啊,第一步的工作就是为后续工作提供中间结果的,这些可以看一下,或者参考一下第一步的工作就可以了,同样这里的关于B啊。
B型式计算也是同样的逻辑啊,同样的逻辑,那么总结一下,总结一下,当我们要求解啊学习算法的时候,输入的只有我们的观测序列,O输出的是我们的一马可夫模型,兰姆达ab派,第一步随机初始化A0B0和派零啊。
得到我们的兰姆达零,那这个时候呢递推递推的过程,刚才已经给出来了,迭代公式已经有了吧,有了迭代公式以后,我们不断的进行收敛收敛,最后就一次得到ANBN和PN构成,我们的蓝不蓝,最后算法就可以终止掉了。
好吧,这是我们关于这个第二步啊,关于这个学习任务的一个介绍,学习任务的介绍,其实你会发现核心就在于QQ函数的构建,为什么要构建这个Q函数,是em算法里面解决的啊。
em算法里面告诉我们要求解带隐变量的模型啊,的联合概率必须要啊构建Q函数,让Q函数最大化就OK了,所以呢有了em算法回去以后再看看,有了em算法以后,这里的Q函数定义符号上对应起来。
那下面的问题呢正好hmm里面告诉我们,对数自然函数是在累乘上做累乘变成累加,分别变成了三部分的和每一部分进行最大化,得到的就是关于三部分的三个量派ab的最优解,就构成了最优的兰姆达星,好吧。
这是关于第二个问题,看看有什么问题吧,那我们看最后一个问题,最后一个任务啊,做编码或者预测任务啊,他是知道模型以后还知道了我们的状态序列啊,状态观测序列我们要求的是状态序列的,在概率巨大的条件之下。
我们的状态序列需要构建出来啊,这是一个求序列的一个过程啊,求序列的过程,这个过程呢我们使用所谓的维特比算法,维特比算法的核心是一个,类似于我们的前向概率这么一个东西,但是呢它叫做什么呢,它叫做呃。
在T时刻,状态为I的所有单个路径的概率最大值,这个德尔塔ti啊,德尔塔ti他说的是在所有可能的啊,在DT时刻,T,在DT时刻状态为I的所有单个路径的概率,最大值,现在我们的目标是要求一个状态序列。
A1A2点了点状态的一个序列,既然是状态的一个序列,那么比如说在IT这个时刻到T这个时刻等于,QY假设行it等于QY,那么到DT在DT的时刻等于QY的可能,所有的可能我们比如说我们从I1开始。
I1是是个状态,第一时刻的状态它可以是Q1Q2,第二点遇到什么QN从I1出发,从I1出发,从I1这N个可能的概率出发,我们依次可以得到I2I2,同样是Q1点点移到QNN种状态。
那么这个时候从I1的N种状态,那么到I2的N种状态,那么就有N乘以N个路径,那么同样依次往下,I1点点一直到QN,然后呢一直到IT等于QI那么很显然啊,从这种排列组合我们知道其中所有的路径,所有的路径。
我们把其中那个能够到达T的所有路径里面的,那个概率最大的拿出来,把它命名为德尔塔ti啊,这是德尔塔ti的一个含义,那我们有了这个德尔塔ti的这个定义以后,那么同样我们需要建立的是德尔塔TI的一个。
递推关系式,递推关系式,那么就是所谓的D德尔塔T加1I和德尔塔,看一下,和这里的,德尔塔T之间的关系,你看可以看到非常类似于我们的前行概率啊,德尔塔T加一和这里德尔德尔塔T,其他的两个量。
AGI和这个BIOT加一都是已知值是吧,那这个时候也就是说啊,其实IT是因为是任意一个时刻嘛,你往前倒I2是吧,I2是在所有I1I2,所有可能路径里面的概率最大值,那么从其样同样I3是从I1到I3里面。
所有概率这个呃出现的路径的概率极大值,而我们知道I1到I3,我们只需要知道I1I2,只能决定II2到I3,那么递推关系式嘛就这么一个逻辑,那这个时候我们只需要把这个路径里面。
最概率最大的一个路径节点记录下来就可以了,那个出现在路径上的概率最大的节点记录下来,记录下来以后,当我们从第一个节点到最后一个节点,便利完成以后,就是我从第一个节点到最后一个节点,就是那个I大T。
我从IE一直按照这个概率最大,这个条件走到I大T的过程以后,那么在这个路径上,所有的节点都可以保证,是出现概率最大的路径节点,而这个路径就作为我当前的最优路径,就是那个预测算法啊。
这就是预测算法维特比算法的一个基本含义啊,它其实最核心的就是在这里的,德尔塔TI的一个定义,好吧,这样的话预测算法不作为我们的重点介绍,了解一下就可以了,如果有兴趣的同学们可以在一块讨论一下。
那这样的话,以上的内容就作为,我们今天关于一马可夫模型的所有内容,我们回过头来再做一个简单介绍,四部分啊,四个内容其实是五部分啊,加em算法模型定义,lambda ab拍啊。
这里面的含义回去再看一下第二部分,概率计算,就是那个前加概率的递推关系式,重点在于每一步的递推过程,你需要有一个依据和根规则啊,这个依据和规则你需要确定,第三步学习算法。
你需要带着隐变量的联合概率的计算,需要使用em算法,回去以后看看em算法的逻辑,有了em算法以后,核心就是Q函数定义,这个时候只需要把符号进行一个一一对应,就可以了啊,联合概率的计算。
第四部分预测算法就是维特比算法啊,就是我们的那个德尔塔ti的含义,回去我再看一下,看看这一部分里面还有什么问题吗,到一个什么程度啊,就我们这一周核心聚焦的原理部分啊。
如果我们简单的回顾一下我们这一周的内容哈,我们这一周处理完了这个呃,原理部分很基本的这个术语和概念啊,这些内容呢仅仅是开始,当你接触每一个模型的时候,就像刚才我们所介绍的hmm里面那个呃,倾向概率是吧。
那什么七次马克分,假设这些东西都是术语描述的啊,你必须要能够,还有刚才同学那个同学提出那个问题,我为什么没有理解呢,我觉得可能就是你所那个提出那个疑问,其实并没有把它,通过一些更准确的方式把它表达出来。
所以造成了没有get到是吧,问题就出在这些基本数据的使用上,所以这部分内容你每每掌握一个模型的时候,这些基本术语必须要把它掌握嗯,这个术语的掌握和使用还是非常重要的,沟通的一个基础,然后看一下我们的嗯。
这一个阶段啊,我们介绍完了线性回归,介绍完了逻辑回归对吧,从线性的拧成分类的是吧,然后呢呃直直向量机,软件隔硬间隔和函数和SM啊,这是我们一个逻辑,另外呢觉得数E3C4。5开的数。
核心问题就在于它的特征,就是特征分类的依据是什么,ID3是信息增益,C4。5,信息增益比卡的数是基于指数啊,数的定义啊,数模型的定义,然后呢boosting加上模型线下分布算法。
由这个boosting方法采用决策树作为奇函数,就构成了BT,在BD题里面,我们啊还有那个残差啊,很重要的那个残渣学习是吧,然后呢在GBDT里面,我们通过函数空间的分析。
用我们的损失函数对于模型的负梯度啊,作为我们残差的拟合对象,然后呢xd boost我们非常重要的一个工作,两个改进正则化项加上二阶梯度展开是吧,当然其中还包括那个呃,那个那个最最优的那个损失分类依据啊。
他和前面这三个是不太一样的是吧,这个你需要了解,然后呢朴素贝叶斯那个推荐独立性假设啊,它是在条件什么条件之下,标签条件之下各个特征之间的独立性啊,然后呢一码可控模型今天我们也介绍了这。
当然我们还包括我们的EMM算法呃,这仅仅是开始啊,其实你会发现,还有很多的内容是没有,包含在我们这个阶段的学习当中的,比如说人工神经网络,当然这在我们后续课程里面会有啊,也就是说呃到一个什么样的阶段呢。
你必须要掌握我们整个模型当中的原理部分,比如说人工神经网络里面,模型结构就是这个模型是什么,长什么样,你需要知道有的模型结构有最高最核心的,它的误差反向传播算法啊,呃相邻层怎么穿,跨层怎么穿啊。
这个你都必须要非常了解,否则的话你看后面越来越复杂,CN无非就是加上池化层和卷积层是吧,RN那就加上我们的中间的中间状态,加上一个时间循环啊,当然这种改进你必须要是,严格依赖于前序模型的工作的基础上。
你才能够理解人工神经网络,你你你前期工作这是谁啊,其实就是逻辑回归,逻辑回归,你掌握了吗,逻辑回归的前序目前是线性回归,线性回归你掌握怎么样,如果反过来,如果你前面都掌握了,其实到人工神经网络之类。
其实是相对来说比较比较能够理解的,那么同样后面哈啊CRF呢今天并没有介绍,但是呢我会把一些材料整理一下,发到群里面,你会看一下,其实CRF和HMM的嗯,在模型定义上就有类似的地方。
因为它们同属于概率图模型,所以呃分析上其实也有很多相近的地方,当然规则上是不太一样的,但是这些相近的地方,对你后续的工作其实套路都是一样的吗,你只需要严格分清楚,它在当前模型里面是怎么被定义的就可以了。
同样的道理,在cf的学习过程当中使用的工具叫做最大商,M商最大,那这个时候你需要把最大熵模型了解了以后,套用到cf里面去也就可以了,当然这一部分还仅仅是我们整个学习过程当中,的开始部分。
远不是根本就没有结束是吧,所以这个时候有问题很正常,有什么问题,我们还是需要在群里集中的进行讨论,我们的课程都是这样,我们我我认为我们的课程是信息量非常大的,课程,两个小时里面。
我们基本上需要把呃一个模型的细节部分,能够重点的给他一个介绍,所以说啊,你不可能寄希望于听这么两个小时就听懂了,否则的话我觉得哼首先你就没有必要再听了,第二呢我觉得对你来说,价值或者意义也并不大对吧。
当然你听不懂的时候,需要反复的进行理解讨论消化吸收,我们的答疑群一直都在,当然可能是刚刚课程刚开始,大家还没有习惯这种方式,但是在我们历往届的这种班级里面,都是充分的在利用这个环境,好吧好。
我们这一个阶段的学习呢就算是告一段落,刚才已经说了,这仅仅是开始,有什么问题,我们及时在群里进行学习和沟通好吧,如果没问题的话,今天我们就到这儿,谢谢大家。
1447-七月在线-机器学习集训营15期 - P2:1-线性回归、logistic回归、梯度下降 - 程序员技术手札 - BV1ASste6EuZ
好没问题好,那我嗯好,我重新说一下啊,然后欢迎大家来到我们机器学习的这个课程,然后今天是我们正式给大家讲,机器学习算法的第一课,所以在今天这节课当中,我们会给大家介绍到回归类的算法啊。
这个回归类算法是一个所谓这个所谓的回归类,算法,是一个广义的回归算法,就是啊一一会儿我们会给大家介绍到这个啊,机器学习的这个不同类型啊,就是做做一个分类包,涵盖的这样的不同类型的板块。
然后大家会看到这样一个概念叫做回归,那在那个概念当中呢,我们的回归指的是你的输出结果是一个连续值,那我们这个地方指的回归类算法是一大类,所以今天的课程主要会给大家讲的是,一个是线性回归啊。
叫linear regression,然后这是一个很常见到的一个啊回归模型,还有一个叫logistic regression啊,叫逻辑逻辑回归或者逻辑4D回归,这是一个用于分类的一个问题。
然后这两个啊这个这个模型,同时你在周志华老师的西瓜书机器学习当中,它叫做对数几率回归,就是有不同的这个叫法啊,啊不好意思,这个地方的手写板可能有一点点怪啊,大家就是勉强看一下啊,叫对数几率回归好。
我们今天主要重点是介绍到这样两个算法,那在介绍这两个算法之前呢,我会先给大家梳理一点小小的machine learning的概念啊,大家在之后会学到很多的算法,但是希望大家不要对。
大家对这些算法的认识不是孤立的,一个小的算法呃,希望大家能建立起来一个地图,一个大的框架,然后你把这些算法逐一的放到这个框架当中啊,同时也能了解到算法和算法之间的一个模型,和模型之间的一些联系。
和他的一些啊优缺点啊,他们的一些对比,那这样的话会有一个更完善的了解啊,所以今天的课程呢,我们会先交代机器学习的一些基本的概念和基,本的板块,让大家有一对这个内容有一个基本的认识。
然后我们会给大家讲到回归大类的算法,包括linear regression和logistic regression,然后今天给大家讲到的这个logistic regression。
这个算法叫做逻辑斯蒂回归,或者是对数几率回归,也是你在工业界会看到很重要的一个baseline model,一个机械模型,就是你会看到各种各样的应用呢啊,他都会先用它去试一下啊。
有一句在工业界有一句话叫做一招LR打天下,所以你看到的除掉嗯,没像BTTMDJ这样的公司以外,其他的大部分公司啊在广泛的使用这个base model,对啊好的,所以就是今天的一个大体的说明。
关于今天的课程,然后大家现在看到这个页面,我们给大家画的这样一幅图,实际上是告诉了大家整个机器学习解决,从解决问题的角度上,我们对它的一个分类,首先整个机器学习啊。
大家如果听到这个名词叫machine learning,这个笔好像不太好用啊,那大家要知道它可以分成啊,叫做监督学习和无监督学习,所以我给大家写一下,可以分成啊,Supervise learning。
监督学习和无监督学习,你看到的算法的,都大部分都是可以归到这个板块的,这两个板块的啊,但又会有一些特殊的一些一些这个呃板块啊,所以监督学习做的事情和无监督学习做的事情,我说明一下,监督学习呢。
类似于大家之前在上学的时候学习的这个过程,所以老师会给你一些题目,然后在这些题目的基础上,老师会给你一些参考答案,比如说你买的参考资料,它会有参考答案,或者老师会给你批改作业。
他会告诉你说这个东西做得对和不对,也就是说你做每一道题,你都有一个参照指导的一个参考答案,去验证自己做的对与不对,你是在有有题有参考答案的这个条件下去学习,如果如何更好的去做这些题。
所以你会总结出来一系列的做题的方法和思路,那这个时候你不仅有数据,你不仅有提,你还有标签,你还有标准答案,所以这个我们把它叫做监督学习啊,你看到了很多工业界的很多很多算法,都是这样一类模型。
而我们今天一会儿给大家讲到的,线性回归和逻辑回归都属于监督学习,无监督学习呢,它就像是没有标签的,这些数据给到你手里,你去总结它里面的一些规律,举个例子来说,在电商。
比如说淘宝或者京东里会有大批的用户数据,这些用户每天都会在这个app上发生,各种各样的啊动作,会有各种各样的行为啊,会浏览会有评论,会有加车,会有点击,会有购买,那你手上拿到的是一堆的这个数据。
没有任何人告诉你,说你的屏幕的背后是一个什么样的人,他不会给他刻意的去打一个标签,但是你有了这么多数据之后,你可以在这些数据上去挖掘出来一些信息,举个例子来说,你可以找到一波群体。
这波群体他是他的行为是比较类似的,你发现这群小姐姐都还很爱去逛口红品类,这群小哥哥都非常喜欢各种各样的电子产品,所以你会在无监督的场景下会拿到一堆的数据,这一堆数据是没有标签的。
你要在它的基础上去学习出来,一些模式和规律啊,那这个叫做无监督的学习是没有标签,没有答案,你只有这些数据啊,你需要去根据他的统计,根据它的分布去总结出来一些规律,一些模式。
比如说刚才我说的是典型的机器学习当中的,一个聚类这样的一个问题,比如说另外一些场景下呃,大家也会知道会有一个很典型的一个啊,一个问题叫做啤酒与尿布的这样的一个故事啊,说的是在大型的超市连锁超市当中。
也会有大量的用户的这个购物的流水,那这个东西呢是没有标签的,上面不会告诉你说这是一个什么样的用户,以及它的一些呃详细的情况,你唯一看到的是,这有这样的一堆的用户购购物之后的流水,那根据这个东西呢。
你可以发现哪些东西和哪些东西,可能是会被一起购买的,那你在做这个商场的这个这些货架栏,它的摆放的时候,你就可以去做一些调整啊,方便他们去购买,Ok,所以你需要树立的第一个概念是整个机器学习,通常情况下。
大家在互联网公司当中用到最多的两类,叫做监督学习和无监督学习,然后还有第三类叫做强化学习,叫做reinforcement learning啊,强化学习是另外一个分支啊,就是可能在咱们这个课程当中。
不会特别去讲这样一类学习呃,他有一点点像监监督学习,但是它的不同在于它的结果Y,这个东西是一个有有延迟的反馈,就是举个例子来说,你下围棋,你下围棋的每一步落子,都有可能会影响你最后的输赢。
但是他不会在当时这个时刻显现,你若下错了一颗子,可能会在10分钟或者15分钟之后,引起这盘棋的结局是输的,或者说他是赢的啊,这取决于你这一步下的好还是不好,所以你会拿到一个结果,你会拿到一个反馈。
但这个东西是有延迟的一个反馈,再给大家举个例子,你们知道有一家有一个公司叫做滴滴,然后滴滴很重要的一个场景,是去做一个啊运输力的一个调度,但是你他想做一些事情,比如说滴滴。
也许他关注去把每一个司机一天的收益最大化,但是你想一想,这在这个场景当中,我的每一次派单,我把滴滴这辆车派到另外一个地方,它的终点给到了A这个地方,和给派到了B这个地方,这个是会影响司机的下一次阶段的。
我把他派到了A这个地方,他下一次接单只能在A附近去接吗,我把他派到了B这个地方,他下一次接单只能在B这个地方去接,所以你的每一次你的每一个动作,你的每一次决策都会影响他,从下一个时间点开始之后。
所有的动作,而这些这些结果它最终会有一个反馈回来,你今天一天结束之后,你去看一看今天所有成交的这个单,所以我接了班加在一起,你才知道我今天的收益有多大,所以强化学习它有一点点像监督学习,但是他的这个Y。
通常情况下是一个有延迟的反馈,他不会在当时那个时刻就发生,它的结果不会在当时那个结果,在当时那个时间点就反馈给你,所以这类算法很特殊啊,大家我在我们这个课程当中,不会特别去给大家讲这一类算法。
我们关心的点是上面的监督学习和无监督学习,这也是大家在互联网,至少在互联网公司会更频繁用到的两类算法,而其中的监督学习,如果大家再对它细分一下,会细分成这个地方啊,sorry我箭头画错了。
这个地方的分类和回归,那这个是如何区分的呢,这个场景区分的方式是根据输出的结果Y,在有些场景底下我们做的事情是选择题啊,一会儿下一页你会看到在有些场景底下,我们需要去解决的是一个问答题。
你需要给我一个明确的一个连续值的结果,或者多个连续值的结果,OK那无监督学习呢,它有很多算法,很典型的A算法叫做聚类好,所以大家先树立起来一个大的框架,这个大的框架就是在机器学习的场景下。
我们在这门课当中,我们关注的算法是supervise,当你监督学习和unspots learning无监督学习,而其中的监督学习又可以像下一页一样,去分成分类和回归两个问题。
那所谓的分类问题是什么问题呢,在很多很多的场景底下,我们需要解决的问题是去做一个选择题,所以你在一个很典型的垃圾邮件识别的,这个场景下,你最后的结果就是一个选择题,有两个选项给你。
你要判断你现在给到你的,这个有一堆的文本或者图像的这个这封邮件,它到底是一个垃圾邮件,还是一个不是一个垃圾邮件,所以你的选项就是两个选项,A和BA是B不是,比如说你去做一个文本情感分析。
今天你打开了淘宝,你打开了京东,你看到了评论,你看到了买家秀,你要去判断你现在这个地方的用户,到底这段评论是一个啊,对这个商品是一个称赞还是一个这个批评,那你你在这个情况下给到你的就是文本。
你需要去判定的结果,就是这个结果是一个positive还是一个negative,OK所以这个时候你做的是一个选择题,你的选择题有两个选项,一个选项是这是正面的情感分正面的一个呃。
一个褒义或者说一个鼓励的这个评论啊,另外的选项是这是一个批评或者贬义的,这样的一个评论,OK然后第三个安利是啊,我们知道现在深度学习非常热对吧,所以大家会看到一些所谓的deep learning。
或者neural network啊,从某种角度上来说,它实际上也是一一种机器学习啊,只不过他这个时候的形态用的是神经网络,那在这样的模型当中,你解决的问题也会有很多很多的问题,比如说一个典型的问题。
是关于图像内容识别的问题啊,你们千万不要以为这个地方的图像内容识别,他做的事情是他做的事情,是真的让这个模型去看到世界上的万事万物,去告诉你说他是什么,大家想一想,你平时你你在你的世界当中,你放眼望去。
你看看你周边的这些东西,你能够给给出来一个能够报出来他的名字,或者说给出来一个解释,根本原因在于你从小到大的成长环境当中,你知道有这么一些东西,所以计算机去完成图像的内容识别。
实际上也是有一个大的知识库,大家知道有这么一些东西,比如说我现在在这个地方列了四个选项,叫做喵星人,汪星人,人类和草泥马,当然它会有第五个选项,发现不在这四类当中,所以第五个是都不是。
那这就是一个选择题,它完成的是一个五分类的选择题,我会给你五个选项,你从里头选一个,OK总之大家想了想,发现这个地方分类问题,说的事情是我去做选择题,那不屑于我上面给大家列到这些例子,举个例子来说。
在电商当中场景当中,我们很关心一些东西,比如我们很关心在淘宝这个这个商品下,你会不会发生购买这样一个行为啊,所以最后你也是完成一个选择题,你的最终结果无非是两种,我买了它,我没有买它。
所以我会去构建一个模型去区分一下,说哪个商品你更有可能会购买,那我就把它放在前面了,所以这就是一个很典型的分类问题,OK那下面的回归问题,对比上面的选择题呢,对他做的是一个问答题。
所以呃你不需要告诉我说,刘德华和吴彦祖都很帅,请告诉我他的具体颜值的得分谁更帅一点,到底是吴彦祖是9。4,刘德华是9。2,还是刘德华是9。8,吴彦祖是9。6,所以你不需要告诉我,Yes or no。
你不需要告诉我啊,它它是某一类,我需要你告诉我一个具体的值,举个例子来说,头号玩家的票房值有多高啊,某一个电影的票房值有多高,魔都的房价具体是什么样的一个值,那你思考一下,它显然不是一个选择题。
因为具体的这个值它有无穷种取法啊,你只需要你的票房多一块钱,少一块钱都不一样,房价也一样啊,颜值的得分多0。1分多,00:05分都不一样对吧,所以这个地方的分类问题和回归问题呢,其实啊都是监督学习。
我都有X都有Y,仅仅区别在于,我这个地方的Y到底做的是一个选择题,还是一个填空题,OK所以大家有一个基本的概念,OK好的,那下面这一页呢讲到的是聚类问题啊,就是我刚才给大家说的,在淘宝和京东的场景下呢。
你可能会有很多很多的用户行为,那这个时候你不可能呃,找一个人去把所有这些记录全看一遍,你是看不完的啊,就是在阿里的场景下,尤其在京东的场景下,它会有有非常非常多的用户,非常非常多的数据。
就是数据量级可能在几10亿,几百亿这样的量级啊,在一段时间内就会有这样的量级,然后数据的维度可能也会高达几亿几10亿啊,这个时候你是看不过来的,所以你想去挖掘一些信息出来,你想对这些用户去看一看。
这些用户群体有什么样的差异,他们都有什么样的贡献,你就可以基于你的数据X,去用一些无监督学习去挖掘一下,比如说最典型的无监督学习叫做聚类,你可以让用户和用户之间去抱抱团,基于他们的用户行为去抱怨抱团。
所以你就会发现,那些爱买口红和连衣裙的小姐姐们,你也会发现那些爱买电子产品的小哥哥们好,所以大家在这个地方有一个先有一个认识,我们将来看到的几乎这门课当中,所有的模型都可以被分到这个地方的监督学习。
更具体一点,分类和回归的监督学习以及无监督学习,比如说聚类或者是其他类型的啊,降维数据,降维等等这样的一些无监督学习当中啊,相信大家也有一个基本的认识,他们区别在于说到底是给题给标准答案。
这样学习的方式,还是说是只给数据去挖掘这样的信息,这样的这个方式,同时呢你也知道做选择题和做填空题的差别好,这是一点小小的概念,然后来到下面这一页,这个地方呢我们找了一个周志华老师的机器。
机器学习西瓜书里面的一个案例对吧,所以呢我想给大家建立一点小小的概念,就是你需要知道呃,我们会有一些称呼,我们会有一些术语,你需要知道这些称呼和术语到底说的是什么,所以刚才我已经给大家介绍过了。
无监督学习和监督学习,那在这本书的这个例子当中,显然这是一个监督学习呃,我需要根据这个地方的三个信息,颜色,西瓜的色泽和西瓜的耕地和西瓜的悄声,去判断它到底是一个好瓜还是西瓜,更具体一点说。
这是一个做选择题的一个问题,我最后的结果就是两种情况,我要么判断它是一个好习惯,要么判断它是一个坏的西瓜,而我的依据是前面的这样的三列,我们通常会把数据组织成这样的一个形态,大家如果有兴趣。
将来去参加数据科学的比赛,你会发现所有数据科学比赛的数据啊,他都很习惯,会用这样很很规范的,行行列列的数据给到你手里,那在这个数据当中,大家来看一看这个方阵的数据,行行行行列列的方阵数据。
在这个数据当中,你的每一行是什么,每一行是一个西瓜,每一行是一个西瓜,所以每一行是一个什么,是一个事例,是一个样本,是一个样例,Ok,所以在这个数据当中的,每一行都会是一个他找过来的西瓜。
用于学习的西瓜,在你初高中的学习过程当中,这里的每一行都会是你找过来的一道练习题,要带着答案的练习题,所以这个地方的西瓜是一个,他会找过来一个西瓜,他会告诉你,它到底最后这个选择题的结果是一个好习惯。
还是一个坏习惯,同时它会给到你前面这样一些,用于最终西瓜是好西瓜,还是坏西瓜的这样的一些判断啊,你会拿到手里题目的参考答案,选择题的参考答案,你也会拿到选择题的题干或者是他输入的信息。
所以这个行行列列数据当中的每一行,大家对它的理解就是一个样本,在这里就是一个西瓜,所以大家记住他的称呼,可以叫做示例,可以叫做样例,可以叫做样本,他们说的是一回事,那每一列是什么呢。
你去推断这个西瓜到底是一个好的西瓜,还是一个坏的西瓜,你总有一些你需要去判断的依据,那这些依据可能会有很多很多不同维度的信息,所以每一个维度的信息,我们把它叫做一个属性,叫做一个特征。
所以大家在这里看到的每一列,包括西瓜的颜色,包括西瓜的敲的声响,包括它的根地,这个东西都是属性,都是特征,所以在将来的大家学习机器学习的过程当中,你会更多的看到这样的一些概念,当提到这个概念的时候。
你要在脑子中浮现这样的一幅图,你告诉自己说,实际上他说的就是行和列,当他提到一个样本的时候,它指的是一行,指的是一个西瓜,指的是一道题,当他提到一列的时候,它指的是我的一个。
用于完成这道选择题的一个属性,或者是一个特征,而最后的这一列显然是label,是我们最后选择题的答案,也就是我们的标记空间和输出空间,好OK所以这是一些基本的概念,大家要了解一下。
那整个机器学习做的事情是什么呢,做的事情在于我准备好了这么多题,我准备好,我在夏天准备好了这么多西瓜,我送到你手里的时候,你能通过我们在这个课程当中学到的,一系列的模型。
从前面的这个选择题当中去学习出来,一个X到Y的一个映射,注意啊,这是有监督的学习,所以我学习出来的东西是这个地方的一个映射,而种种模型只是这个地方的映射不一样,这就像大家解题的时候。
你有不同的解法是一样的,你去解决这一道数学题,如果它是一道选择题的话,它的标准答案一定是固定的,但如果它是一道解答题的话,你可以有不同的方式去解决这个问题,而这个地方的机器学习。
实际上对应的是这个地方的解法,这个地方的F比如说同样是这个地方的色泽,耕地和敲声,我要根据这三个维度去推断,一个西瓜到底是好瓜还是坏瓜,我有很多推断的方式,比如说今天大家看到了逻辑回归。
一会你看到逻辑回归或是一种计算的模型,去拿到一个概率值,比如说大家在明天课程里学到的决策树,它会是一种规则,所以我的种种方法体现最终的差异,在这个F上我会用一个不同的表示啊,实际上它也有它的称呼啊。
你可以叫做表示,可以叫做表达,你也可以叫做假设函数,它会通过一个这样的东西,这个东西最终的目的就是我每送进来一个X,我每给你一道题的时候,你可以基于这个方法去达到一个答案。
而这个东西就是你通过不断的学习,去不断的这个学习的过程,去不断的完善和积累出来的,这样的一个模式或者规律,所以你做的事情是我数据已经准备好了,而且我知道这个地方的数据有行有列,我知道有样本。
我知道有属性,我知道有标签,在这个的基础上,我把它送到各式各样的model当中,我把它送到各式各样的模型当中,我试图去学习出来一个学习出来一个模式,学习出来一个规律,而这个东西最终目的在于。
在将来某一天你去参加高考的时候,没有标准答案摆在你面前的时候,你拿着这些题你也能积极,你也能根据我之前总结到的规律,总结到的做题的方法方式去完成这个题目,就给出来一个答案。
而且我会希望你给出来的答案越来越正确越好,所以这个地方会有一些其他的概念,比如说给到大家的那些叫做训练集,给到大家的那些题呢,是你平时去做练习的训练集,OK那还有另外一个问题,那叫做测试集。
那个东西你是提前看不到的,高考之前高考题虽然出好了,一定是密封的,一定是在高考当天你才可以看到这份题,而且你只有一次机会,当你做完了这些题,当你去评估它的结果之后,你不可能再跟他说。
老师我再高考一次一模一样的题,No,这个地方不可能,所以你要从你的训练集上,你要从你的训练数据上学习出来做题的规律,学习出来这个模式,而在高考的时候,面对新的样本,面对新的题的时候,用这个模式和规律。
用这个F去对这个地方的X做一个预估,拿到一个答案Y,我们会希望这个地方的F越通用越好,我会希望这些同学们在参加高考的时候,准备的越充分越好,学习到的知识越稳固越好,学习到的做题的方法通用性越好越棒。
所以这个地方大家看到其他的一些概念,说的是这个事情啊,右边这个东西刚才我已经解释过了,所谓的分类回归,所谓的二分类是啊做选择题的A和B啊,就是正面反面啊,抛一颗硬币的正面反面说的是一样的。
OK这个地方是一点小小的介绍,这一页当中有一些概念,大家将会在未来的机器学习的学习过程当中,会再次见到好,我先往后跳一跳,我们来到今天的第一个model叫做linear regression啊。
OK这我知道这个模型很简单,但请大家静下心来听一听,因为我想阐述的不仅仅是这个模型,而是让大家建立一点基本的概念,我们将将来所有的模型会丢到一个套路当中,你可以把它总结成以同样的一个套路。
但是它有不同的表达,会有不同的优化,所以导致了他最后的结果,或者它的形态,或者是他的方法是一种不同的表示,这个是一个确实,你在很久以前就学过的一个模型对吧,所以大家上初中没上高中的时候,就知道说。
我可以基于一堆东西的这个运算去做一个预估,老师会告诉你说你怎么去拟合一个二次函数,你怎么去拟合一条直线对,所以这个东西你和一条直线,这个东西叫做线性回归对吧,那OK我们用专业的术语来形容一下这个东西。
他说的事情是这样的,首先它是一个有监督的学习,大家要明确一下,linear regression是一个有监督的学习,他要学习到的,每每一个每一条记录,都可以记录成这样的一个样本。
都可以记录成这样的一个样本,这样的一个样本就是我刚才说的X和Y,只不过这个时候你为了去学习到这个规律,你需要很多的X和Y,你需要去做很多的题,你才能总结到规律对吧,为什么高三的时候。
老师会让大家反复的去做题,因为你只做一两道题,你是学不到通用的通用的规律的,所以我在这个地方会准备好一批所谓的一批,这个地方是N个样本,N个题,N道题,那这N道题每道题都会有它的输入,X会有它的输出。
Y这个地方的输出Y因为它是一个连续值,所以它是一个回归类的问题,我要学习到的东西是一个映射,F从X到Y之间的一个映射,对于输入的X可以输出连续值Y,我假定输入和输出之间对,是一个线性的相关关系。
OK所以我们建立了一个基本的认知,说线性回归这个东西,大概就是说你准备了一堆的XY,然后我会用一个线性的表示,去完成X到Y之间的一个映射,而我可能想去学习出来一个这样的映射,好啊,没关系。
这个model很简单,但是这个model啊,待会我们会用机器学习当中的这个套路和板块,就给大家重新的阐述一下啊,这个地方有一个小小的问题,让大家去思考一下,说如果你去让一个6年级的小学生。
在不问同学具体体重的情况下,把班上的同学按照体重从轻到重去排队,这个同学会怎么做呢,他可能会环顾一下他的周边的同学,然后他可能会通过观察大家的身高和体格,来完成这个排队。
这个事情是一个非常合理的事情对吗,因为根据我们的常识,好像一个人越高,他的体重应该是越重的,基本是这样的,然后一个人越壮,他应该可能是越重的,所以你从里头拆一个维度出来。
比如说这个地方我们采集了一些样本,我们找了一个班上的同学过来,我们把他的身高和体重啊,以横纵横横纵坐标的形式,标到这样一个二维的坐标系当中,所以大家在这里看到每一个蓝色的样本点。
实际上是我找过来的一个同学,然后我在这幅图上戳了一个点,而线性回归想做什么样的事情呢,线性回归扫了一眼这幅图,他告诉你说,哎我发现了这个上面,好像随着我的身高不断的变大,好像我的体重有一个递增的趋势。
那我能不能用一个简单的线性的表达形式,比如说这个地方是一个一条直线去拟合出来,这样一个变换呢,所以啊线性回归,最终的结果会是这样的一个形态啊,所谓的线性,就是因为它这个地方是一个在二维平面当中。
它是一条直线,这样那你要学习到的就是这条直线的斜率,和它的截距,OK好,这是一个简单的例子,另外一个啊就是有一定年代,有一定历史的例子,是这个皇家预估的例子,相信很多同学都见过这个例子了吧。
所以在这样一个例子当中呢,我们知道影响房价的面,房价的具体的价格有很多很多的因素啊,举个例子来说,和它的面积有关系,和它是几居有关系,和他的地理位置有关系,和他是否是学区房有关系,和他的楼层有关系。
和他的建筑年龄有关系,OK好,所以大家看到这个地方我们给到的这一页,实际上呢我们抽了一个最直接的一个影响因素,叫做面积,很显然在大家直观的理解当中啊,房子的面积越大,应该它的房价是越高的。
所以在这里面我们找到了一些房子过来,我们把这些房子的数据记录在这,我们说每套房子它到底是多大的面积,我记录在左边,它到底最后是什么样的一个价格,记录在右边,所以我积累了一些数据。
这个数据同时同样和我们前天给大家讲到的,数据形态是一模一样的,它是一个行行列列的数据,他的每一行会是一套房子,它的每一个列呢啊除掉最后的这个价格,这个标签列,它其他列都会是对应的X对应的输入的属性。
对应的输入的特征,Ok,好,所以啊对大家在这里看到的这份数据,就是最简单的一份数据啊,好所以这个地方呢同样有一幅图去拟合出来,这个地方的面积和这个地方的price啊,它之间的一个关系啊。
大家有问题可以先在我们的边框里头,只可以在我们的这个呃讨论区去提问,那我会视情况会做一个回答,或者我会每一段时间之后,给大家做一个集中的回答,好吧,就是希望那个大家先跟着我的节奏去啊,往后走。
因为你们问到的有一些问题,实际上是一些和今天的模型本身,并没有太相关的一些问题啊,我们一会集中来给大家交流一下好不好,所以啊这个地方所谓的线性模型对,模型确实很简单,我理解。
所以它的横坐标呢就是它的面积,它的纵坐标就是它的price,你发现有这样一个正相关的关系啊,如果你这时候用简单的模型去做拟合,很有可能就是这样的一条直线好,那刚才我说了。
房价影响的因素远不可能是这一个因素,影响因素多的很,所以在这种情况下,你很有可能会有其他的一些因素,比如说它是几居,比如说我刚才说的一些房林呢,比如说它是否是学区房啊,比如说它的地理位置啊等等。
那所以当你把这些信息以数字化的形式,表示出来的,表示出来之后,你会发现这个时候的变量就变多了,那只不过这个线性模型由刚才大家在二维,在二维平面当中见到的一条直线,变成了在高维平面当中的一个平。
这个大家相相信大家有一点小小的概念,就是我们可以把这个东西写成这样的一个形式,C打零加C打1X1加C的2X2啊,以及你在机器学习当中,你可能要习惯另外一种表示形式,是向量化的表示形式。
如果我把这个地方的seed写成一个列向量啊,一般情况下我们会习惯用列向量啊,就是C大于零啊,C打1C大二,那我这个时候的X呢,它是一个也是一个列向量啊,所以它是X1X2X三。
那这个时候很显然我对C打去做一个转置,它变成了一个什么向量,我对C打去做一个转置,它变成了什么向量,所以它变成了一个行向量,那一个行向量和一个列向量去做啊,或者说你可以理解成,这两个列向量去做一个内积。
它的形式实际上和大家在这看到的是一样啊,当然这个地方那个所以X0X1X二对,然后X0呢它大家可以认为它等于一啊,对吧好,所以拿到结果会是一个数,对不对啊,好的啊,当然了,实际的情况就像我刚才说的。
你见到因影响这个房房价的因素多的很,所以你最后看到这个情况,它又会变成,刚才我们在西瓜那幅图当中看到的一样,有很多行,有很多列,那其中的每一行就是一套房子,其中的每一列它就是这套房子的决定。
最后价格的一个因素,一个属性,一个特征,嗯好的,那你要完成的东西就是在大量的样本,大量的训练集当中的题,大量的训练集当中的房子当中总结出来的规律,F去用在我现在的未知的这次高考。
或者这个新的房子的价格预估上去预估,拿到一个结果,抽象一下做的事情,实际上就像这一页给大家写到的一样,我需要去学习出来一个这个地方的training set,上面X到Y的映射F。
只不过这个F它的形态可以有各种各样的形态,那在linear regression当中,我们给了一个最简单的形态,是一个线性组合的形态,那在这样一个线性组合的形态里头,大家看到它可以写成。
它可以写成一个向量化的表示形式,刚才我已经给大家提过了,是像这个地方的C大的转置,乘以X这样的一个形态,那在这个表述里面,我们认为所有的C大和X它都是列向量啊,这是我们习惯的一个表述啊,叫做列向量好啊。
相信大家没有问题,那问题来了啊,师兄师姐告诉我说用这样的学习方法去学,所以我知道了,我固定住了一个这样的F对吗,我的F就是一组这一组输入的X,去做这样的运算,拿到一个结果。
所以啊是考入考进清华北大的师兄师姐,给了很多的方法,告诉你说你就这么学吧,你每天就先学呃,先做这个,早上起来先做英语去读一会儿英语做英语,然后做什么题,然后做什么题啊,所以那个道理大家懂很多,方法。
大家懂很多,但是并不一定并不一定每个人都能做好,对不对,那都是这样的一种形态,并不是每一个线性模型都能把这个问题预估好,同样是用这样的模型,大家都是用这样的模型去做项目,去参加比赛,有些人能进前三。
有些人连前300都进不了,所以显然是有差别的,所以差别在哪,差别很显然大家发现了就在这个地方的C打上,所以我已经知道是这样的一个形态了,我已经知道师兄师姐告诉我,是这样的学习方法了,为什么会有差别。
大家学的不一样,大家的C打不一样,所以我怎么去找到最好的这样一组C打,可调的这样的一组theta,对于我的输入的X我能最好的去几何,我现在的每一个答案为这是我们关注的东西,那我想另外再说一点东西。
因为这个模型很简单,所以我知道有些同学会觉得说,我想学高逼格的模型,为什么老师要一开始给我讲这么简单的模型啊,这个模型本身不是,并不是我们想给大家重点去啊,就是说特别重点去给大家详述的。
这样的一部分内容,我想讲述的内容是,如果你看一看整个机器学习所有的模型,包括深度学习的模型,你会发现一个很有意思的事情,这个意意思有意思的事情是这样的,首先呃我这地方会给大家列一下公式啊。
比如说我们把所有数据机器学习当中,解决问题的方法叫做数据驱动的方法,叫做数据驱动的方法啊,这个名词啊,这个啊有些同学可能听过啊,叫beta jing数据驱动方法,那数据驱动方法关注两部分。
第一部分叫做数据,第二部分叫做算法或者模型,好没问题,那数据这个东西以后再跟大家说,它同样非常重要,就是它同样非常非常重要,你们看到那些大型互联网公司,b at google facebook啊。
TMDJ这些公司当中,它的能做好的,很大一部分原因是因为它的数据量够在小公司,中小型数据中小型公司当中,你要去用这些AI的算法,它的数据不一定足以支撑模型,学习到非常好的模式,这个东西我们之后再说。
我们会有专门的课告诉大家如何去做数据处理,如何去做数据上的信息抽取,好,这个先放一放,我们看一看后面的模型的部分,也就是和更多同学关心的这些很fancy的model啊,大家都很想知道这些逼格很高的模型。
说老师我听说这种隐马尔可夫模型,条件随机场都是很高级的模型,能给我讲一讲吗,呃请不要把每个模型当做一个,孤立的模型来看待,这些模型的产生是为了解决问题,所以每个模型它会有有不同的部分。
如果我们这个地方对模型去做一个拆解的话啊,这是我自己写的一个公式啊,它不一定啊,你不一定在某本书上可以查到它,或者是你可以看到一个呃,某一个学术巨作上会有这样的一个写法。
但是这个东西它当你看完这些模型的时候,你可以把它套到这个公式里,那每一个模型会是什么呢,它会有一个假设函数,或者说你叫做表达啊,假设函数,那这个假设函数呢它是一个F,这个F可能是可能是一种计算的模型。
可能是一个规则,可能是任何一个其他的东西,当你有这样的东西以后,就是师兄师姐告诉你一个学习方法,你能不能用好,取决于你要在这个大的架子下,你要再给给定你的这个学习方法的,基础上去完成什么。
后面的部分叫做优化,如何去让这个地方的C打一步步的去,朝着让这个模型变得更好,你和更准的方向走这个部分叫做优化,所以等学完今天的课,学完明天的课学完再往后学完其他的课,你再来看一看这个公式。
你会发现无非是我换了一种表达,我在线性回归当中,我用一个这样的方式去完成预估,我在决策树当中用一个规则的方式去完成预估,我在后面其他的FM当中,我用另一种方式去完成预估,我在其他的模型。
而更多的模型当中,我选择其他的方式,其他的形态的方式去完成预估,你选了某一个师兄师姐的方法,然后后面的优优化的部分,实际上在做的事情是,我如何让我现在学到的,这个找到的这套学习方法。
最好的去适合我现在的这个数据,去学习出来最有用的做题的方法,能让我在高考里取得最好的成绩好,所以刚才我们提到的这个部分,对有些同学在其它很简单,对它非常简单,它仅仅是用了告诉我们假设函数是什么。
所以当有XL我这么算,但是拜托你要算的话,你要知道这个C的,而且它会影响最后的结果,他怎么算呢,好请来到第二个部分叫做优化,所有的学习过程必须有一个方向吧,你在做题的时候。
你得知道有同学会老师会告诉你一些事情,说你得你得加油学习啊,你得合理分配一下的时间呢,你得看一看你的错题在哪,请拿出你的本子,把你的错题记一记,多去看一看这些错题到底错在哪。
总结一下你做得不好的点在哪去优化一下,所以这个东西变到机器学习里面,它是什么样的一个过程,你方法已经给你了对吧,师兄师姐能凭借这套方法考进清华北大浙大,上海交大,复旦啊,这样很好的学校。
你用这套方法能不能学好呢,对你来看一看你该如何去学,所以在学学习的这个过程当中,你会再看到这样的一个概念啊,刚才我们讲到了一部分叫做优化对吧,好优化这个东东西,我再给大家做一个公式的拆解。
通常情况下在监督学习当中啊,我们来那个做一个约束啊,在监督学习当中它会等于什么呢,它会等于你的一个评估,你每个部分做的好与不好的一个loss function啊,这个东西呢一会儿再说它是什么啊。
大家先听听一下,有这样一个东西,再加上一个什么对optimizing的一个呃,一个呃算法啊,啊有点丑啊,那我就写写这个优化算法叫做中文,好了对啊,有这个英文的字样啊,但是给大家说一下啊。
这个损失函数这个叫做优化算法啊,我跟你说这个公式是通用的,这个公式是通用的,所以你今天学到东西要机器学习对吧,等等你有时间了,往后看看深度学习,你看TENSORFLOW,你看PYTORCH啊。
你觉得逼格很高对吧,谷歌家的TENSORFLOW啊,FACEBOOK的PYTORCH,然后呃但是你去看一看,你会发现诶这里头有个东西叫optimizer,他做什么样的事情,对他就做优化所有的所有的模型。
你往下拆,它就是这样的公式好,所以这个东西是什么,它做什么用啊,没关系,我来给大家讲一讲,所以现在我们要提一提这个概念,叫做损失函数,叫做loss function啊,有些同学第一次听到这个东西对吧。
这个东西非常的重要呃,我先说明一下,你会在其他地方听到其他的一些称呼,说的和他是一个意思,你会听到一些什么样的称呼呢,对cost function,代价函数你会听到objective啊。
客观度或者目标函数啊,他说的和LOFUNCTION实际上是一个意思,所以这个东西在中文当中,我们把它叫做损失函数哎,等一等等一等损失损失函数是个什么东西,好像到目前为止。
你还没告诉我这个东西是什么东西对吧,损失函数是什么呢,刚才我说过了,我说你要做题,老师会叫你拿出一个小本本,来把自己做得不好的那些题目记下来,去分析一下自己为什么没做好,哪个方法没掌握好。
那你得知道哪些题做错了对吧,错的程度到什么程度,做的有多不好,哪些环节做的不好,偏差有多大,这个东西我需要一个数学定量的东西,给我指明一个方向,所以损失函数就是这样一个东西。
所有人都知道前面的假设函数长,这样我给一组塞达就会有一个结果出来,问题是不同的,C大凭什么说他好,凭什么说它不好,你怎么去评估啊,你如果都评估不出来,这个东西你衡量不了的话,你凭什么让我去做优化。
去做学习,所以这个地方的损失函数就是一个衡量,你现在这一组参数下,你做这个事情和标准答案之间,差异的这样的一个函数,它就叫做loss function,叫做损失函数,举一个最简单的例子,在这个例子当中。
我们只有一个变量X我们输出的结果是Y,我们只有三个样本点,112233,我们要用一个Y等于WX,或者Y等于KX这样的方式去拟合,现在的三个样本点啊,当然了,有些同学会跟我说,老师我肉眼就看出来了。
Y等于X,OK好,我们先不管这个东西,因为现在这个例子非常的简单,所以你肉眼就看出来了,很好很棒,但是当这个数据的维度高起来的时候,你肉眼是看不出来的,好没关系,我们需要找到一套通用的东西去衡量。
说我做的好与不好,首先可动的东西是什么,是K对吧,或者说Y等于C的X啊,那无所谓啊,就是这是不同的表达形式,那在这个情况下,我认为C打X啊,那大家去看一下这个地方可以调的是C的啊,我我我先为了简单起见。
我没有加B啊,我没有加后面那个偏置项,只是说这条直线一定是一条穿过原点的直线,你想一想它可以变的东西是什么,是不是你拿着这样的一条直线开始甩呀,他开始绕着原点在旋转呢,诶我每每旋转到一个地方。
我是不是有一个我预估的结果值,会有一个真实的结果值,我是不是这两个东西之间,可以求一个什么差值啊,我是不是可以求一个德尔塔差值出来,所以这是一个很直观的一个概念,你需要有东西去告诉你说。
我选定了这一组C的,我做的到底怎么样,你必须要有一个数学定量的东西去衡量,这个东西,我才知道我下一步的优化方向在哪,所以很简单,你预估的结果,你对于每一个输入的样本,输入的X,你的预估的结果是你C的X。
你的真实的结果是什么,对是你的label,是你的标签,我把我预估的结果减去真实的结果啊,但它可能可正可负对吧,所以我给一个平方,OK给个平方以后,它衡量的就是差距,把它们加在一起除以2M分之一啊。
注意啊,前面的2M分之一,它M分之一是求一个平均,这个大家能理解吧,就是你有很多道题,老师说你这这份题做的好与不好,不能只看单道题对吧,所以我要看你平均做的好与不好,你有100道题对吧,你100道题。
你这100道题做的结果怎么样,我要把它加在一起,我要把它加在一起,OK我也把它加在一起,然后我把它加在一起以后,求一个平均的差异有多大,我应该除以总的题目的数量对吧,那我问大家一下啊。
因为有同学说这个地方是N,我问大家看大家一下是M还是N,是M还是N,我对这个地方的多少多少道题,多少个样本求了和N是什么,不要搞错了,这个地方的M和N先看清楚它们分别是什么,我的样本数是M哥。
你看到了I等于一到M,我是对我的M道题去求了我的差异,我是不是应该除以M分之一,为什么要给二好,有同学会说老师为什么要1/2啊,为什么要1/2啊,啊不要着急,这个东西没有意义。
它仅仅是为了我们待会去做数学优化的时候,求导的方便仅仅是这样的一个原因啊,所以比如说老师给你给班上同学去做一个打分,我给的分数是198,然后九十六九十四,这样的分数和我给的分数是五十四十九四十八。
这样的分数并不影响大家的序对吗,就是做得好的同学还是做得好,做得不好的同学还是做得不好,所以前面这个地方的1/2,是不影响我这个结果,它的取不同的C打的时候,它的大小顺序的对不对,这个东西是不影响的。
所以给我们带一个1/2,大家不用,大家不用太纠结这个问题,他没有关系啊,因为你在后面的处理当中,你会发现它为我的数学计算提供了一些便利,所以我把它整体除以二,我不影响我的顺序啊。
原本是一百九十八九十六啊,94P变成现在的50,那个49,四十八四十七,实际上没有关系,Ok,哎呀刚才那个东西啊,我写了一个函数对吧,我说OK这个地方是sigma前面2M分之一。
这个地方从I等于一到M好,然后我后面呢是一个HC的啊,xi k减去这个地方的YI好,我给了一个啊平方好,大概是这样的一个公式好,是这样的一个公式好的,然后这个东西呢他在回归类的问题当中。
另外一点是是这样的,首先我问大家一下,这个这个公式当中未知数是什么,请告诉我现在这个JC大当中的未知数是什么,我的每一个样本送进来的样本X是知道的,Y是知道的,谁是未知数,谁是我现在哪个都。
哪个变量是我现在不知道的未知数,我要去调整的未知数好有很很好,很多同学告诉我是C的,是C的啊,因为X和Y都是知道的,seed是不知道对不对,好好很好,那所以大家现在抽象一下我做的事情是什么。
来不要看到这个复杂的公式,你看到的东西就是一个JC的好,这个东西首先告诉我它的它的它是用来干嘛的,它是用来干嘛的,它是不是用来评估,不是评估啊,用来衡量我做的好与不好的。
就是衡量我和标准答案或者说F的好坏的,它是用来衡量F的好坏的,好记住啊,这是第一个点好,第二个点是啊,不同的C打是不是会有不同的JC打值,不同的CA是不是有不同的偏离量。
所以我现在想让我和标准答案之间的差异最小,我是不是要去找到一个C大,使得我现在这个函数最小,是不是使得我现在这个函数最小,告诉我我是不是希望去找到一个塞达,使得我现在这个JC达最小。
使得我现在我的预估值和标准答案之间的差异,越小越好好,所以抽象一下,你发现它变成了一个问题,它变成了一个球函数最小值的问题,好这个有问题吗,大家有问题吗,它变成了一个这样的问题,叫做求函数最小值的问题。
而你这里头的变量是C的,唉但是大家想一想啊,你想一想这个地方我Y等于C打X哎,我的C大可以动对吧,因为我们来看一看,当这个C打从很小,从从很小从零的地方开始往上走,再往上走的时候,大家告诉我。
这个时候的JC打是什么样的一个变化,是不是我在右边这幅图当中描述的变化呀,开始的theta等于零的时候,是不是在这标准答案在哪,在这它们之间是有差异的,对不对,它们之间是有差异的,对不对。
随着我这条直线往上走,差异会怎么样,对会先减小减到什么位置,对在这是一个特例啊,这是个特例,在这个特例当中,它会刚好穿过它,所以它会走到零,然后会再变大呃,告诉我从左边这幅图到右边这个函数。
大家有问题吗,有同学有问题吗,我要去求这个函数的最小值,我用一种最直观的方式,把这个函数的形状变化趋势给画出来了,我要求的东西在哪,我要求的东西在哪,我要求的东西在这,这是我想要的东西。
这是我想去找到的那个点,当我找到他之后,我就可以很自信地告诉你说,这个师兄师姐的方法用的很好,我在我的数据上有非常棒的效果,好有一个问题就是刚才这个是一个一元的情况,一元情况就只有一条轴嘛。
啊多元的情况是什么样呢,对多元的情况画出来是这个样子啊,对这个样子啊,啊大家听清楚了,我的最终的目标一定是希望去找到一个最小值,只不过在很多情况下,比如说大家在后面学到更复杂的函数啊,更复杂的函。
更复杂的模型当中,它的损失函数是一个非凸的,也就是说在那个情况下,它它是凹凸不平的,所以他很多时候你是找不到全局最低点,所以你找到的是一个一个这个局部最低点啊,或者叫做极值点啊。
但是有可能在工业界可用就好了,好这个问题不用纠结,总之回到刚才我们这个例子当中,我们就是这样的一个曲线,对不对,就是这样的一个曲线,对不对对,就是这样一个曲线好,那在二元的情况下是什么。
对是这样的一个碗状的形状有问题吗,我每取定一个函数值,它都会有一个有一个有一个取值嘛,这个取值注意啊,这个时候的取值不是原来的函数的预估取值啊,我再强调一遍,这个时候的函数取值是什么。
这个时候的函数取值是什么,是差异啊,请请盯盯着这个东西看啊,它不是我原来的Y等于K啊,这个C打X不是不是那个Y,他现在是一个用于衡量我每取第一组C的,我和标准答案之间差异的,这个函数叫做损失函数啊。
它不是原来那个假设函数啊,它是损失函数,好好相信大家没问题,然后对有同学问到这个问题,说老师老师老师这个我知道这个这个好简单的,那个数学老师告诉我们说求求最求极值,我好像求导让导数等于零就出来了对吧。
求导,然后导数等于零就出来了,OK你说的东西没没有问题,就是你说的这个很棒啊,说明你的数学基础非常好啊,但是你要知道唉,通常数学家,这些学统计的数学家和做计算机的人同学,他们会有不同的解决问题的思路。
数学家他会给你很多很复杂的公式,他会告诉你说你这样算就可以了,但是它会有一些问题,举个例子来说,有一些场景下你的计算的计算量是很大的,大到你在工业界没有办法用,你没有办法很快速的去算出来。
比如说哎数学家会告诉你说你求个逆就好了,这矩阵求一个逆,然后你再再用力去和,和这个这个这个X去做一个矩阵的乘法,这个事情就解决了,问题是你求矩阵逆,那个事情是可能是一个计算量很可怕的事情。
所以有些东西从数学上理论上来说很简单,求解起来,但是当这个问题变复杂了之后,呃,他的求解和计算,他的那个数学公式求解起来可能是很复杂,所以呢在计算机的角度,我们我们更我们更倾向于用这样的方式去解决。
这个方式叫做迭代法,所以我们再回顾一下,刚才我给到大家的这个公式,这个公式当中告诉大家一件事情,说我们的优化是等于loss function加optimizing,所以我的优化是等于损失函数加上。
使得这啊那个有点丑啊,大家那个忍一下,损失函数加上啊,这个优化算法啊,就是损失函数对损失函数去最小化的,或者说去减小的这样的一些优化算法,所以损失函数我们已经定义了,它就长那样,所以优化算法有很多种。
没错是有很多种啊,我今天讲到这个方法是最最最最常见的方法,它并不是唯一解,你会在其他地方看到其他的一些优化算法,没错,这个事情没做好,所以我们在计算机的世界,我们更习惯用这样的一类方法。
叫做迭代法去解决问题,迭代法说的事情是不要着急,不要一不能没有办法一口吃成一个大胖子,所以怎么办呢,一步一步来,他问你,他问你说,你已经知道现在这个东西是一条抛物线,或者说它是一个这样的网状的结构了。
你怎么去求这个最小值呢,然后他想了一下,他告诉你说,我好像可以在这上面放一个玻璃弹珠,然后我让这个玻璃弹珠往下滚就可以了,他最后应该会停在最低点,如果它是一个网状结构的话,这个大家有问题吗。
我把那个玻璃弹珠往上一放,它是不是可以往下滚,滚到最低点,当它啊它可能有可能会小震荡一下啊,但最后是不是一定落在最低点对吧,所以这个时候我们来模拟一下那个过程,我要做的事情是放一个小球。
我让这个小球顺着他往下滚,我希望他最后停在这,所以这个地方会涉及到一个问题,就是K小球从哪放,第二个问题,小球怎么滚好,我们从数学上来,我们从数学上来解释一下他说的事情是什么。
我们来翻译一下上面说的那句话,第一你得给我一个初始的位置,小球放哪初始位置好,初始位置可以是任何一个位置,比如说在这个地方啊,那个啊抱歉啊,这个地方我纠正一下,这个不是X啊,这是C的啊,抱歉。
这是做PPT的时候的一点小的那个那个失误啊,就是这个地方应该匹配一下,所以横坐标是C打,我指定不同C打社会有不同的FC打,然后刚才大家已经告诉我说,这个东西长成这样啊,长成这个形状啊。
刚才大家告诉我的好,那我我刚才告诉大家一件事情,我说诶那把它做的有趣一点,我来放个小球,让它往下滚吧,那这个小球里头会涉及到两个问题,第一球放哪,第二球怎么滚,球放在哪,没问题,你随便放。
因为这是个管嘛,你大概就放高一点,会放高低放低一点,所以没问题,我会让我的C大取一个C大start一个一个取值,这个可以是默认值,比如说取零,比如说取某一个值都可以啊,好然后接下来你要做的事情是。
我希望他往下滚,诶,有同学能告诉我,从数学上来说,这条曲线变化最快的方向是什么方向吗,高中数学就告诉你了,这个地方抛物线变化最快的方向在哪,是它的斜率的方向对吗啊,当然这是单元这一元的情况啊。
多元的情况我们把它叫做叫做gradient,梯度对吧,叫梯度好,所以呢他告诉我说这个东西是切线的方向,是切线的方向对吗,所以好,我来把刚才说的这句话翻译一下,这句话翻译一下,是这样的。
请帮我找到一个方向,在我起始位置开始,请帮我找到一个方向,我会顺着这个方向往下滚一段,然后我再顺着这个方向再往下走,所以他每一次都是这样的迭代,它犹如一个下山的过程,当你蒙住你的眼睛,让你下山。
你可能会用脚去试探一下周边的地形,找到那个往下走最陡的方向,去往前迈一步,往前找到往下最陡的方向,往前迈一步,而这个所谓最陡的方向就是斜率,或者是啊在高原的寒情况下,它的梯度,所以我每次去迈一步。
所以大家能理解吗,当我在这个位置,在我在这个位置的时候,在这个位置的时候,当我在这个位置的时候,当我在这个位置的时候,我往下滚,我是不是去找到一个方向,大家告诉我这个地方的JC打对C打一球偏导。
大家看这个地方的函数对C的去求偏导,他拿到的方向是什么,就是这个值是一个正值还是负值,大家告诉我,这个小球球的这个斜率是正的还是负的,直观理解一下它是负的对吧,我应该往正的方向走还是往负的方向走。
我应该往正的方向走还是负的方向走,我应该往正方向走对吗,所以记住一件事情,就是梯度,或者说啊梯度,或者说它的这个它的gradient啊,现在这个gradient或者是斜率,这个时候是让他变小。
让让他这个变大的方向啊,就梯度是变大的方向啊,所以这个时候呢你的负梯度才是往下走的方向,才是才是你真正的让这个函数减小的方向,所以我翻译一下这句话,就是这样的,我原本有一个C的位置。
我希望他朝着我现在的,这个最大的负梯度的方向走,所以负梯度的方向我希望朝着这个方向走,我是不是要加上阿尔法贝的这样一个东西啊,那加上阿尔法贝的一个这样的东西,是不是就是这样的一个公式啊。
我朝着负梯度的方向去迈进一步,然后我下山的过程走到了一个地方,我再环顾一下四周,我再基于我现在判断最陡的方向再去迈下一步,没错这个就是最简单的一种优化方法,叫做gradient descent。
梯度下降叫梯度下降,你们千万不要小看这个方法哦,这个方法在神经网络当中,有一个和它对应的方法叫做随机梯度下降啊,就是唯一的区别在于随机梯度下降,没有用全部的样本去求梯度啊,他用的是一部分部分的梯度。
但是那个算法在神经网络当中非常好用啊,大家很多同学都会用那个方法去做优化,他做的事情就是我去找到那个下山的方向,我朝着方向一步步走,呃虽然数学家告诉我说,我只需要求导等于零。
我只需要去求这个矩阵的逆就可以了,但是我发现这个事情并不好求,所以OK啊,有同学问到说为什么是负梯度的方向,我刚才已经解释过了,你看一看这幅图当中梯度是朝朝左还是朝右的,梯度是大于零还是小于零的好吧。
梯度是大于零还是小于零好,所以从刚才那个是一元的情况,如果是二元的情况呢,现在有一个碗,现在有一个碗,你在上面放了个球,它会怎么滚,对在玩儿这样的一个形状当中,如果我找一个横截面,我往上一层一层的去截。
我拿到的是什么,是等高线对吗,是是不是等高线,大家对这个图没有问题吧,我拿着一个水平的平面去做截取,我拿到的是不是这样的,一个一层一层的等高线呢,我最底下的这个地方是碗底,它是最低的。
我希望去找到他对吗,所以这个地方大家看到的这个箭头是什么,对就是那个球滚的方向,我是垂直于等高线的方向,垂直于等高线的方向往里走的,这个是我认为比较快的方向诶,你也可以朝其他方向走啊,你当然可以这么走。
这么走这么走绕回去对吧,但这个很慢,所以最快的方向就是刚才说的啊,gradient啊,就是所谓的这个法线的方向,在二元的情况里头,就是大家看到这个情况,OK嗯好的好啊,有同学说这个不是等高线。
这个不是等高线吗,每一圈它是不是处在一个高度,这里面的每一圈是不是处在一个高度,你就把它当做等高线就好了,二人的情况和一元的情况实际上一样,仅仅的区别在于你有两个方向,你有两个方向。
有问题一会儿我们再课间的时候再说好吧,所以这个地方,这个地方大家看到的这个一环一环的,实际上每一环它的高度是一样的,在现在这个这个曲面上啊,就是取经不同的C大C大于零和C打一,实际上它的取值是一样的啊。
就是这一圈实际上是一样的,然后大家现在看到的这个地方的梯度下降,在多元的情况下,仅区别仅仅在于你有很多个未知数,你需要对这些未知数都同样,用这个地方的gradient design去做一个迭代啊。
这个函数求导大家会吗,X平方求导你会吗啊sorry,不是立方平方,X的平方求导,你会吗,好你是会的啊,好没问题,所以你知道你会把二拿下来啊,所以这个地方2M分之一,你会知道它会变成M分之一对吧。
好好很好啊,然后啊还要还大,大家知道这是一个复合函数对吧,就是C大X减去Y1的平方,这是一个是一个复合函数,所以它最后呢呃对C打求导,还要乘以一个部分对吧,好没问题啊,这是个复合函数。
所以它求导的话两部分先对啊,外层求,然后再对里边的这个小的这个函数去求导好,所以这个大家都没问题啊,然后所以这就是那个梯度下降啊,刚才大家注意到这里头有个东西叫做阿尔法,刚才大家注意到这里头东西。
有个有个东西叫做阿尔法,刚才大家注意到这个地方会有一个阿尔法,那阿尔法这个东西呢,它就是所谓的学习率叫做learning rate,大家想一下这个阿尔法会有什么样的影响,先别管它。
别纠结这个东西怎么去求我问大家一下,阿尔法如果太大会怎么样,阿尔法太大会怎么样啊,不好意思啊,这个地方同有修正C的JC的好,如果步子迈太大会怎么样,步子迈太大会怎么样,会直接跳过最低点,甚至足够大。
它是不是会往上走,告诉我啊,如果你给的这个阿尔法非常大,你给个100万,它会跳到这个位置,他下次可能会跳到这个位置,可能会跳到这个位置,他不收,他不收敛,他可能不收敛,那一般情况下你取得大的话。
他有可能越过最低点,那我再问大家一个问题,哎那个如果如果它小呢,如果取得特别小呢,哎你告诉我说老师我取的小这种稳妥了吧,我取0。000001诶,好没问题,对,这个时候他的时间会非效时间消耗会非常的多。
它的速度会非常非常的慢,速度会非常非常的慢,好没问题,所以怎么去求这个阿尔法呢,对这个东西叫做超参数啊,所谓的超参数是指的在这个模型开始学习之前,请帮我把它敲定,请帮我把这个值敲定。
我需要用它去完成迭代,所以这个地方呢对它有一系列的方法,可以去完成梯度下降啊,但大家注意一点啊,就是一般情况下我们为了简单,你可以敲定一个恒定不变的,恒定不变的这样的一个阿尔法啊。
他也确实有一些其他的方法,但是呃我们在我们在工业级当中,有一个说法叫做NO free lunch,叫做NO free lunch,这个意思是告诉你说啊,这个世界没有那么美好的事情。
你告诉我说老师我有个非常牛逼的算法,它可以自动去学习这个地方的阿尔法,取什么样的步长是最最合适的,没错可能会有这样的算法,但你知道他一定付出了其他的代价,比如说他需要先去扫描和计算一遍。
这个地方的阿尔法,这个东西也同样是需要费时间的,所以啊千万不要去想想象,有任何一个东西比另外一个东西一定是要好的,经常有同学会问我说,老师老师老师哪个模型最好啊,哪个模型最好,这个问题我回答不了没。
有没有所谓的最好的模型,你想你就想一件事情吧,如果这个世界上有最好的模型,我干嘛要其他的模型啊,我就不用去学这些其他的模型了,我直接学那个最好的模型就好了,我编一本书,我不需要去想其他的模型了对吧。
所以所以没有这种事情啊,大家不要去问这样很傻的问题,说哪个模型最好,哪种方法最好,没没有这个事情的好,所以呃你你知道这个地方用的方法叫做,梯度下降,你知道学习率会有什么样的影响,好OK这个点就够了。
然后这个地方的阿尔法怎么取对,它是一个超参数,针对超参数它的优化的方法,我们在后面会讲到呃,实际上它是一些实验的方法,就是你需要去选取不同的这个阿尔法,比如说呃取这个0。000呃,一啊,0。001啊。
0。01啊,一等等,他会去做一些实验,他会去做一些实验,这样好吧,然后那个这个在后面会给大家讲到,我今天在这不给大家细讲啊,好了,下面我们要讲到,非常非常非常非常非常重要的一个概念。
叫做叫做OVERFITTING和under fitting to the model,没model的状态,模型的状态哦,这个东西非常重要哦,你我我告诉大家,你你你以为参加比赛的时候。
你以为工业界做实际项目的时候,参加比赛的时候,这些前面的选手在撕什么样的东西,他他在所有东西就是就是这个东西,谁能让现在的模型学习到的方法更通用一点点,就是他的他的表达更通用一些。
这个是大家在努力学习的东西,所以你去参加比赛,你会看到很多很高高逼格的东西对吧,我去年参加了一个开go比赛,然后最后最后呃排名在在第二,然后第一,然后然后我当时用了大概嗯八个模型去做融合。
然后第一名告诉我说,后来我们和我们和第一名交流一下,第一名告诉我说他们用了啊160多个模型,然后我们就说OKOK那个啊就是输了输了没错,那个160多个模型,他们去利用了模型的差异化去。
当然我们成绩和他们其实差的非常小,就是前面几名的成绩其实差的幅度很小,而他会它的单个模型做的成成,做的效果是没有我们好,但是他用了很多模型做集成的时候,能够把把学偏的那部分拉回来一点。
所以最后的表现总体的表现会好那么一点点啊,OK好,所以你记住一件事情,就是我们在我们所谓的模型的好坏,其实说到底就是这样一个比,去比谁的模型泛化能力更好一点,谁的模型学到的这个模式。
学到了这个映射关系会更通用一点,所以这个地方就会涉及到这个概念,叫做fitting和OVERFITTING呃,under fitting和all fitting是这样的,这个地方有个很简单的例子。
这个例子是这样的,你现在决定了要用多项式回归,多项式回归去解决一个问题,然后这个问题呢是一个啊多项式回归嘛,完成一个连续值的预估嘛,然后标了一些样本点,然后咔咔咔的上面甩了一堆样本点了,大概长成这样。
然后呢这里头有个很纠结的问题,就说嗯你要知道啊,这个数据如果能画出来,好简单的画出来谁如果可以画在这幅图上,你告诉我说老师老师这个我一眼就看出来了,我应该用一个类似于二次函数这样的方式方。
式去去做做预估嘛对吧,但是问题是实际工业界的数据维度高得很,你画不出来的,OK你画不出来的,所以在这个地方有个很纠结的问题,就是多项式模型,我我的那个次数选多少比较好啊,我我可以选一次,我选二次。
我可以选这个3456789十次,所以这是个很纠结的问题啊,那你想一下,如果是一次的话,大家告诉我这是什么,这是一条直线,这是一条直线,这个是什么,对这是一个抛物线,啊这是什么,是一个高次曲线。
呃大家先不用纠结纠结,那个模型集成的那个那个事情啊,我们在后面会给大家讲到,然后另外我需要给大家说明的就是,还是NO free lunch,这个天下没有那么美好,没有那么好的事情。
这个是什么意思呢啊亲爱的同学们,如果现在有一套模板,或者现有现有的这个工具,可以帮助你自行的去找到最优的解啊,你们就不用学这个课了,你们就下岗了,工业界也不需要,你们也不要招这么多的算法工程师了。
为什么我直接阿里云或者腾讯云,或者各种云平台,只要一集成,把这套模板这套套路往上一套,你来数据,你往里头怼呗,我直接就能拿到模型了对吧,所以不要也不用去问说,有没有一些现成的框架或者软件。
可以解决这个问题没有,如果有的话,你们就失业了嗯所以所以啊大家往后学就好了,对谷谷歌的做法只在部分,我知道谷歌在做这个事情,谷歌和微软做的那个东西,只对一些多媒体数据是有用的。
呃我自己在工业界做这个事情,我们的场景他们搞不定,你一定要手动的对数据去做一些分析,他们理解不了场景,你所谓的人工智能没有那么智能,他做不到,你甩给他一个题,他就能解决这个问题。
它在一些特定的场景底下有用,比如说图像识别,就是这很特殊,因为图像这个东西人不太好去做分析,它本身就是raw data,原始数据,他绝对做不到通用的人工智能,不然的话大家就下岗了好。
所以这个地方呢有一个很纠结的问题,是说我到底取直线还是抛物线,还是高次曲线才能拟合得更好呢,其实我也不知道,但是大家想一想,如果你取直线的话,会有一个问题诶,我问大家一个问题啊,如果你取直线的话。
这个直线当然他会努力的去学了对吧,就是你你刚才那个优化算法,其实梯度下降做的事情,就是在调整这条直线的斜率,和它的它的这个截距嘛,所以这条直线他就拼命的学,他不断的去去做旋转,不断的去上下平移。
但是我问大家一下,他能他能学好这些点吗,它能拟合好现在的这些点吗,它拟合不好对吧,所以这个状态叫做欠拟合,就是这个模型的学习能力很差,学习能力有点差,所以以至于说他没有办法去拟合好,所有的样本点。
它它刚对其中的一些样本点拟合的好一点,他对另外一些样本点就偏了,所以他很挣扎的在学这个东西,但是学不好抛物线呢,抛物线它可能不会穿过每个点,但是它离这些点都挺近的吧,可能是这样的一个形态。
OK啊高次曲线呢哦高次曲线太牛逼了,你想一想他有这么多的项,而且还有平方立方四次四次方向,大家告诉我一个数的平方立方四次四次方,如果它是一个大于一的数,它是不是他是不是这个空间会非常大呀对吧。
平方向嘛他可以直接甩得很高,它的立方向可以甩得很高,四次方向可以甩得很高,所以这个时候呢,你有你有非常充足的空间去把这条曲线拉下来,或者是丢上来,所以它可以有很很很很诡异的方式啊,很很扭曲的方式。
就穿过每个样本点,很开心对吧,大家他特别开心,他说我每个点都传过了,哇这个事情太棒了,但有个问题就是最左边这种状态显然是不OK的,这种状态对应了什么呢,对隔壁家的傻儿子啊,所以这个很尴尬了啊。
所以你让他去学习呢,他其实很努力啊,他他不是不努力,他真的很努力在学,但是他可能他的这个记忆力,或者是这些能力就很有限,所以你要让他去同时学九门课,或者多少门课的时候,他就,有点吃力啊,就怎么都学不好。
我拼命的在学,我拼命的在调这条直线的这个斜率,和它的截距根就学不好,那那那这个东西是什么呢,这个东西是什么呢,对这个东西是反的啊,你另外一个邻居家有一个天才儿子,然后呢问题是呢大家没好好教他。
所以什么意思呢,就给了他十道题,说你来来把这十道题做一下,一般的小朋友做十道题,要一个要可能要要40多分钟一个小时啊,然后这个同学太牛逼了,就是这十道题呢可能呃5分钟就搞定了。
但是他问题是他做这个题的方式,他学这些题的方式呢,并不是去好好的把底层的规律和模式学下来,而是直接把它背下来,因为他记忆力好啊对吧,他很聪明啊,对你而言很难的东西对我而言很简单啊,我直接背下来呀。
我不用看题目啊,我去看一下这里的关键词是什么选项,选什么好,背下来了,然后明天你给我出一模一样的题,好,咔咔咔,写完了100分,明天我换一道别的题目好,不认识,没有见过。
所以这个地方的左边这个状态就叫做欠拟合,欠拟合,通常情况下是因为model的学习能力不够引起的,就是你有一个很复杂的场景,你用了一个非常弱的模型去学它啊,当然这个情况在工业界不太可能。
就是你现在看到的工业界,大家不会用特别弱的模型,不太可能大家上的都会是相对比较复杂的模型,所以更有可能会出现右边这个地方,就是你那个模型的学习能力太强了,问大家一个问题啊,你去解一个方程组。
这个方程组有三个未知数,只有两个方程,你告诉我有多少组,几三个未知数,两个方程,就是啊你给他太大的空间了,你给他太大的空间了,你三个未知数得有三个方程啊,一般情况下啊,而且这三个方程还没。
不得不不能有两个方程之间,是一个这个这个线性相关的啊,就是在这样的情况下,在这样的情况下,他才有可能拿到的是唯一一组解,但是有如果你给他的空间太大了,你这个模型的能力太强了,你给他太多的参数哎。
拜托他的学习能力太强了,你这几个小小样本对他而言简直就是小case,我我随便找一组解过来,但是啊我我随口举个例子啊,我知道有很多同学这个对线性代数比我要熟啊,所以你说的这些不能其次啊。
等等这样的一些要求对啊,先抛开这个不说,我们就说那个那个呃,就是我大家明白我刚才说的这个意思啊,就是当我有三个或者四个,或者这个五个未知数的时候,我只给两个方程的时候,这个事情太好办了。
我随随便便找一组数,我就我就完成拟合了对吧,所以这个东西对应到的是过拟合,过拟合通常情况下是因为你的model capacity,是因为你的模型的容量太大了,然后你没控制好。
他是因为你那个呃天才儿子太聪明了啊,可惜呢你没有好好教他,你没有跟他说,你不能这样做,你得好好的去看题目底层的原理啊,不许背题目啊,啊那个什么什么不用,不要着急的去看小猪佩奇,OK啊等等,不拉不拉。
咱就说一堆这样的,这个这个这个一会儿我们会有方法去限制它好,所以这个地方的过拟合和欠拟合,大家有一点基本的印象了,有一点点基本的印象了,所以过拟合和欠拟合里面更可怕的是。
后面这个过拟合是这个over fitting啊,这个事情更可怕,然后你看到的参加比赛,你没有别人效果好,或者说前面几名之间有差异,最根本的原因在于大家过拟合的程度不一样,就是你你学的这个程度不一样啊。
然后这个地方呢,我给大家做了一点小小的解释啊,大家都希望自己更聪明,都希望去用神经网络对吧,他说啊老师这个模型超级牛逼的那个啊,好复杂的,逼格非常高的对,但你不一定能用得好,就是更复杂的模型。
更多的参数意味着它有非常非常强的能力,但也有可能你约束不住他,他可以用很很随机的方式,就可以解决你这个问题,但是他没有任何的意义,第二点是你要知道你的这些数据,它并不一定每一个数据都是和全局分布一致的。
这样的数据它有可能是一噪声点,他有可能是噪声点,但是你的模型如果学习能力太强了啊,他是有可能会把这种东西背下来的,好好,所以这个地方我们要提到一个很重要,很重要的概念。
叫做regular arization,正则化,正则化是一个什么样的东西呢,正则化就是你你隔壁家的那个天才儿子,他爸爸妈妈已经意识到了,说不能这样教了,所以呢要约束约束他啊,所以要要给他加一些限制。
刚才大家的损失函数长成这个样子,刚才大家的损失函数长成这个样子,然后你只告诉他说,今天我给你这些题,我只看标准答案,我只看你做的标准答案,他标准答案都对了,就给100分,OK好。
然后那个那个天才儿子呢就啊好牛逼的啊,反正记答案啊就开始抖抖抖抖抖抖抖抖啊,每个点都穿过了啊,所以就有问题了对吧,这个鬼东西呢它就抖动非常大,意味着它非常的不平稳,非常不平稳。
意味着新的样本过来的时候看可能就挂掉了,所以怎么去限制它呢,你盯着这个东西仔细的看了一下,你说好像是因为C大X当中的C大啊,这个地方的XX可能是你做完变换的那些,X平方,X立方X4次方啊。
就是这个地方是因为这个地方的C达,你给他太大的自由的空间了,因为你想一下啊,如果你刚才拟合的这个值太小了,那怎么办,对给后面一项给高一点的C大呀,把他拉起来呀,所以他就拉起来了,如果这个东西太高了。
怎么办,以后面一个C打一个负的值啊,把他拉下来,他就拉下来了,所以最根本的原因在于你仔细想一想,在于你这个地方不对C达做任何的限制,它可以通过别的方式去把刚才你和不好的结果,强行的拉下来,或者是拉上去。
让这个曲线甩起来对吧,这是当然这是一个很口语化的说法,大家能理解我的意思就OK了啊,就是把这个东西甩起来了,所以很可怕对吧,这个事情就很可怕了,所以你抖一抖,你感觉很开心啊,你现在样本点你好开心啊。
全穿过了,分析这东西没用,OK怎么限制他呢,今天呢老师检查作业啊,你父母检查作业说答案没用,答案没有用,帮我把过程写好好吗,可以限制一下它,那这个地方呢我不仅要求看标准答案,去计算这个地方的JC达。
我还要求去看你C达的幅度,如果你是用这种很随意的甩动的,这样的方式很,也就是说很大的seed的什么绝对值啊,这样的形式去完成拟合的话,不好意思,不可以,我要给你在尾巴上加一项东西,我评估你做的好与不好。
不仅看你和标准答案之间的差异,我还看你这个地方这一项,这一项就是刚才C大的幅度吗,能理解吗,没有问题吧,啊这个叫做L2胜则换啊,就是它的幅度嘛对吧,所以这个地方的拉姆达是什么,对拉姆达是一个超参数啊。
用来控制说我给他加多大的,我给他加多大程度的,我给他加多大程度的乘法,Ok,啊对那个有有同学有同学提到了一个问题啊,说这个地方那个C达不应该用2M分之一,需求平均啊,啊这个其实它和你的C大取值有关系嘛。
对吧,你可以你把C你就是其实它是C打,是需要调的啊,所以如果如果你把它放在这个中括号以内的话,对加在中括号以内的话,你就需要去调C的啊,他也可以加在这个位置,对就是这个同学说的说的没有问题啊。
因为有同学提到了这个,说那个C达不应该被M平均,对你可以把中括号放在这个位置没错,然后有同学问到说拉姆达怎么去求,对拉姆达是一个超参数,这个乘法项的程度,就是说你天才的这个这个小朋友。
家长的管太多也不好对吧,人家是有创造力的,天天打就打傻了对吧,不能打太厉害啊,但也不能不管啊,不管你就天天就玩手机了啊,就天天这个去吃鸡了好,所以这也这也是不好的,所以得管一管,但是又不能管太过了。
所以这个拉姆达呢就是一个约束项啊,大家得调一调,但这个拉姆达的取值怎么取呢,对它是一个超参数,然后这个超参数呢,就是呃大家要通过一些实验的方法去取啊,这个没有办法,你就算不出来。
因为这个东西一旦呢这种超参数如果能算出来,哎还是刚才那句话,大家就失业了啊,啊对他有一些方式可以去做出来啊,但是它没有数学的公式,可以直接去求解到最大的最好合适的拉姆达,它和你的数据分布有关系。
它和你的数据是有关系的,所以你可以通过一些方法方式去做,但是这个方式它不是全自动的,或者说不是一个数学公式,往里头一套就能取到的,对啊是的,所以这是一个正则画像好,然后这个地方的损失函数没错。
叫做L2loss啊,叫做l two los l2的一个损失啊,好大家在后面会见到其他形式的损失,嗯嗯那个这样大家呢我们休息几分钟好吧,大家可以去上个洗手间,或者是这个喝口水啊,然后一会儿我们一鼓作气。
把后面给这个算法去给大家讲一下,你会发现你会发现这个,你会发现这个地方呢啊,后面这个算法和前面这个算法呢,他从刚才我拆解的公式上来说是很一致的啊,有同学问了一个问题,我再回答一个问题吧。
那个这个同学问到问题说,为何过拟合会加大variance,哎刚才我说了过拟合是什么现象啊,我我我用一个直观的方式给你解释一下,过拟合是什么现象,过拟合是甩起来了,所以你甩上甩下它的波动不会变大吗。
这个模型不稳定啊,所以就像这样的抛物线是很稳定的,像这样的曲线是非常不稳定的,你可以去做一些事情,你可以把C塔压下来,不让它甩那么高,它会相对平滑一点啊,所以它的variance会会降。
OK他的variance会会降它的方差啊,他的这个波动性会会往下降啊,就是限制非大的幅度,大概这个意思啊,然后那个呃如果要从数学的角度上来来说的话,你可以去查一下,会会有一些证明去告诉你说过。
你和他为什么是这样的一个方式嗯,好吧,那我再解释一个问题吧,为什么误差项求和范围到M,因为我有M个样本,为什么乘法项加到N,我只有N个C打,我只有N个seed,OK说明白了吗。
所以注意一下他们的计算的时候是不太一样的,OK好的啊,歇几分钟哈,23分钟,然后一会儿我们回来给大家一鼓作气,把后面的算法讲了,好的我们回来,然后我来给大家解释一下几个问题啊。
有同学说前面的C打是从零开始的,这个地方C打应该从零开始了呃,这是一个习惯,一般情况下我们加正则画像,我们不会对C打零去做,我们不会对C打零去做乘法,我们不会对偏置项去做乘法呃,因为你想一下C打零。
它是不会X做乘积的,后面的C打一,C打二,这些东西它会和后面的具体的X去做乘法,但是这个东西无所谓啊,你把C打零加上来也也无所谓,他也没有关系,它它也可以啊,这个model一样可以run起来。
只是一个习惯而已啊,就是我们习惯不对这个偏置,向这个C点零去做乘法,呃其他的问题我再说,我们先往后走,这个地方我们要讲到一个很牛逼的算法,叫做logistic regression。
老just regression源于这样的一个问题,说今天我要去做一个事情,我希望去对我现在的这样的样本,去做一个分类啊,注意啊,我现在来到场景不是不是那个填空题了,是选择题啊,做分类做分类啊。
然后在做做这个分类的问题当中,当然你赶紧有两倍两类样本点了,所以这个地方有个场景,这个场景的横坐标横坐标是啊,tumor size是这个肿瘤的这个大小,然后纵坐标呢是它是是否是一个恶性肿瘤。
那大家可以看到这个地方有四个样本,是很不幸啊,这四位同学呢是恶性肿瘤,左边这个地方呢啊,这四位同学是诶那个良性肿瘤没有关系啊,很健康好,所以你要解决的问题就是,我希望去把这两类东西区分开好了好了。
然后有同学说,老师老师这个我知道刚才刚学了线性回归,刚才刚学了线性回归,那个如果大家对前面我讲到的部分,有疑问的同学,你可以在回头录播课出来了之后,再仔细听一下我的描述方式啊,我没有说C打越小越好。
我后面那个乘法项,仅仅是为了控制住C打的幅度嗯,那我刚才已经说过,C大大的话,这个模型它的偏,它的方差会很大,它会甩起来嗯,好所以所以那个呃可以去听一下我的描述啊,我我的原话不是说这个东西越小越好。
所以这个地方呢,当我解决这样一个问题的时候啊,有同学说老师老师刚讲过线性回归这个,这个好开心的对吧,找条直线咔拟合一下啊,这有一堆的X和Y吗,有一堆的X和Y嘛,然后我就拟合一下好,这个事情就搞定了。
那我说哎只要现在Y取0。5,然后我去取到这样一个X的阈值,只要在这个阈值的左侧的XK全都是好的,右侧的一直OK很不幸啊,现在大家要去处理一下哎,但是呢这个方法,并不是那么完善的一个方法,为什么呢。
当你现在如果有两个异常值进来,三个异常值啊,如果你来了两个这个这个很严重的这个同学啊,就是他的这个肿瘤大小非常大,然后他显然是恶性肿瘤,在这种情形下,你再去做线性回归,你会发现一个问题。
这条直线被拉偏了,这个很好理解吧,因为他要兼顾到所有的样本嘛,他要兼顾到所有样本,所以他被拉偏了,拉偏之后呢,你如果你取0。5做阈值,哎,这俩东西就分错了吗,就分错了吗,对不对,所以这俩东西就分错了好。
所以呃所以这告诉我们一件事情,说你思考一下线性回归,我应该可以拿到负无穷到正无穷之间的一个啊,一个值,对吧啊,负无穷到正无穷之间的值,哎,但是这个东西呢你不太好去取那个那个阈值吧。
就是刚才那个阈值你不太好去取定这个阈值吧,因为你取了一个阈值以后,如果我回头那个来个新的样本,我把这条直线拉偏一点,我输出结果好像你这个阈值就不适用了,对吧对,所以他的健壮性不太够,他对噪声非常敏感。
好这个地方有个很神奇的函数,数学上的函数叫SIGMOID函数,这个函数这个函数神奇到什么程度呢,就是哎我去什么情况,啊SIGMOIDSIGMOID这个函数长什么样呢。
对它就是GZ等于一加上E的负X次方分之一,哎这是一个,这是一个数学特性很好的一个函数啊,就是数学家找到了一个函数,这个函数有什么用呢,对它可以把负无穷到正无穷之间的一个数,压缩到0~1之间啊。
你想一下嘛,当Z很小很小的时候,你想想Z取负的100万的时候,大家告诉我Z取负的100万,E的负Z次方就是E的100万,一加上E的11000000,它是不是一个非常非常接近零的一个值。
它是不是一个非常非常接近零的值,如果我的Z取100万很大很大,你带进去E的负X次方是一个很小很小的值,所以这个时候它是一个非常非常接近一,的一个值,所以他们把一个负无穷到正无穷之间的值。
压缩到0~1之间,这个大概没问题吧,就是这个函数,然后这个函数呢还有一个很很好的一个优点,就是你你发现你把零这个点带进去啊,你把零这个点带进去,你发现你把零带进去,一加上E的零次方分之一。
大家告诉我是多少,一加上E的零次方分之一,这是多少,它等于1/2,所以我们通常大家说一件事情会说,我有半数的概率,我能做成这件事情,我有半数的概率他会怎么样,我觉得有0。5的概率他会怎么样。
我觉得我有超过0。5的概率,他会怎么样,OK好,然后这个函数还有一个很有意思的事情,就是哎我不知道大家认不认识这个函数,我问大家一下,你们知道啊,这这这个是那个面试题啊,是校招的面试题。
就是GZ这个函数啊,哎你知道它导数是多少吗,G撇Z你知道它导函数是什么吗,好所以现在拿出笔来算的同学,不好意思,这个函数你都不熟,GZ这个函数的导函数,就等于GZ自己乘以一减GZ不是本身啊。
GZ乘以一减GZ啊,EE的X次方才是啊本身啊,没错没错,GZGZ乘以一减GZ啊没错,所以所以这个是很好的一个数学特性,这意味着说如果我要对这个东西求导,我可以一步写出来对吧。
就是说我我如果知道GZ等于多少,那这个地方G撇Z等于多少,我是可以直接套用公式一步求出来的啊,所以它的数学特性非常好,它是一个中心对称的一条曲线,在0。5这个在一零这个位置的输入,取到0。5这样一个值。
然后对这个点是一个中心对称的,在啊很小很小的时候,它取到的值是接近零的,很大很大的时候取到的值是接近一的啊,这样好先先记一下有这么一个函数,好的呃,然后你要知道所有的分类问题,所有的分类问题。
本质上是在空间当中去找到一个decision boundary,找到一个决策边界,在空间当中去找到一个决策边界,去完成这个地方的,去完成这个地方的决策,决策边界去完成这个地方的决策。
所以这个地方有两个样本点,红色样本点和绿色样本点,我可以找到一条这样的线完成决策,我这个地方有红色样本点和绿色样本点,我可以找到一个这样的曲线完成啊,区分这个地方有红色样本点和绿色样本点。
我可以找到一条很扭曲的线去完全区分好,往下走,看到一个例子,这是一个很经典的例子,这个例子告诉我们说如何由线性回归,哎呀这个比呀这个得到的这个拟合的,哎呀我要换一个手写板了啊。
拟合拟合的这个直线或者曲线,去把它变成这个东西,变成一条决策边界,好我们来看一下这个事情怎么做的,只有两个样本点啊,这两个样本点呢啊一个是这样的啊,小圈圈,一个是这样的小叉叉。
我要去找到一个模型去把它分开好,所以其实我就要找到一条决策边界,叫decision boundary呃,先不管这个东西怎么来的,就是我们记住这个公式,我们需要的东西是这个,这个这个叫做这个表达表示。
或者是假设函数,假设函数再加上优化好,我假定它的假设函数是这样的啊,我再给一个值我的C大零取多少,C大零取啊,去去去去去这个地方的啊,这个这个这个三好,然后C打一呢去取122。
OK然后C答案呢去去去这个这个这个一好啊,大家告诉我这个里面的这个形式是什么,就是三加X1加X2等于零,这是什么呀,就这个东西是什么,从数学上来说它是什么,它是一条直线吧,就是你把零三和三零带进去啊。
他发现这个东西都等于零,对不对,然后两点决定一条直线,对不对,所以你就把它连起来,它就长成这样,很好哎呀,对它就长成这个样子好啊,O那个再问大家一点小小的数学知识,在这条直线上方的上方的点。
代表这条直线里头取值是多少,直线上方的点,你的X1取100,你的X2取啊,那个200带进去,它是一个什么样的值,对他是个大于零的值对吧,你随便带一个直径,你不就知道了吗,所以在直线上方的时候。
对它是A对啊,大于零的直线下方呢,直线下方呢,直线下方呢对直线下方是小于零,你随便带个值进去,你试试看,你带一个-100,带一个-200好诶,这有什么用呢,哎大家还记得刚才的SIGMID函数长什么样吗。
哎大家还记得西格玛的函数长什么样吗,我把一个大于零的值带进去,和一个小于零的值带进去,最终的结果会怎么样啊,就是我把一个大于零的值带进去,和把一个小于零的值带进去,我最终的结果会怎么样啊,分别怎么样。
我把一个大于零的值带进去,它是大于1/2的嘛,我把一个小于零的值带进去,它是小于1/2的嘛,对不对,你看你把一个大于零的值带进去,是不是大于0。5啊,你把一个小于零的值带进去,是不是一个小于0。
5的值啊,所以他告诉我们说我把这一堆的点带进去以后,我去求一个这样的函数,把一个线性回归的结果丢到一个西格玛A当中,我是不是能拿到一个概率P大于0。5的,一个结果,哎我把下面这个东西丢进去。
我是不是拿到概率P小于0。5的一个结果呀,诶所以这个东西有什么用呢,它实际上是告诉你说告诉你哦,在直线上方的这些点,它是小叉叉的概率是大于0。5的,它是小叉叉的概率是大于0。5的。
而下方的这些样本点是小叉叉的,概率是小于0。5的,而你就可以基于0。5去给一个判定的边界,完成这一次的分类,所以我希望给大家说清楚了,我们再跳到下一个场景,有同学说老师老师你刚才那个东西太简单了。
谁告诉你说我搞一条直线就可以区分开呀,你太弱了吧,好是太弱了,那就换一个听好了啊,这个形式好了,样本点呢对你刚才说直线好简单的,我就不用直线了,因为这个情况下我有一堆的小圈圈,我有一堆的小叉叉。
你发现了,你搞一条直线来啊,你拼命的选那条直线,你调整它的斜率,你调整它的截距诶,分不开对,分不开啊,你被包围了啊,就准备投降吧,好所以这个时候怎么办呢,唉我们来做一点小小的处理啊,非线性的处理。
我让这个地方的C打零取什么呢,取啊一这个地方C打一取什么呢,取0C打二取什么呢,取0C大三取什么呢,取1C到四取什么,取一好问大家一个问题,X1的平方加X2平方减一等于零,这是一个什么。
这是一个什么形状,哎你先别管现在怎么来的,一会再说,那是那是下一个环节,假设函数之后的东西好,有同学告诉我说,老师老师这东西好简单,它就是这样的一个圆,它就是这样的一个圆,哎呀我再问大家一个问题啊。
我把圆外的点,我把圆外的点带进去,带到这个函数里头,带到现在这个表达式里头,这个结果会怎么样啊,对我把这个地方带一个100进去,我把这个地方带一个200进去,这个结果会怎么样啊,哎很好,同学告诉我说。
圆外的所有的都是大于零的,圆内的呢,圆内的呢对园内的都是小韵的对吧,就带到这个表达式,带到这个表达式,诶那我再问大家一个问题,当我套一个G函数在外面的时候,X1平方加X2平方减一。
我猜到他也代入这样一个SIGMOID函数,我得到了什么,OK他又告诉我一件事情,他说诶,诶诶在这个圆外面的概率P是大于0。5的,在圆内的概率P是小于0。5的,所以事情又解决了。
他告诉你说在圆外面的是属于小叉叉的,概率是大于0。5的,在圆内小于这个属于小叉叉的,概率是小于0。5的,那我认为大于0。5的我就判定成这一类呗,小于0。5的我就判定成另外一类呗,诶这个问题是解决了。
好好好,所以好像看起来形式很简单,好啦好啦,回到第二个问题啊,所以假设函数已经有了好,请告诉我优化怎么做吧,我不知道SA怎么取,请告诉我告诉我theta怎么做啊,那个优化怎么做吧,好所以回答这个问题。
回答这个问题呢,我们要做的事情是求这个c ta,呃有同学说老师老师还损失函数,对不对,损失函数对不对,loss function对吗,求一求啊,所以我把我预估的这个概率结果。
P去和这个标准答案零和一去做一个差值,这个事件不是搞完了吗,好简单的,和线性回归一样,嗯这样做不能说不对,但是我们不选这个东西去做损失函数,为什么,因为这个函数的数学特性不太好。
因为这个函数的数学特性不太好,这很尴尬啊,所谓的数学特性不太好,实际上是指的,如果你用这个东西去做它的损失函数,做它last function,你会发现说这货呀糟糕了好多,最低点啊,凹凸不平的。
根本就不像之前提到的碗状的那么乖啊,凹凸不平,所以呢你就搞一个小球滚,咔咔咔滚到第一个位置出不来了啊,环顾一下四周,你说我就是最矮的呀,我比周边都要矮,你凭什么还要我再滚呢,对吧,我就呆在这好了。
所以这个就非常糟糕了,所以你那小球就滚不动了啊,然后所以这个数这个函数它的特性不太好,数学大家就不用它,所以大家提出来另外一个损失函数叫做lock loss,就是我们会我们希望最后是可以滚小球的。
我们会希望它是能够滚小球的,我们希望这个JC打能是啊,随着这个C打是能是这样的一个变化的啊,这个会比较好好,所以呢我就往下走呃,所以这个地方提了一个损失函数,这个损失函数是这样的,它的公式有一点小小的。
有一点小小的麻烦,然后我来给大家,我来给大家解释一下这个公式啊,就是我给他推一下,为什么损失函数会长成这样,HC打X刚才我说的是什么,这个东西是什么,是不是概率P啊,是不是属于正样本的概率P呀。
刚才大家都见到了吧,属于小叉叉的概率吧,P吧,我们用一个这个这个SIGMOID函数,里面套了一个C打转置X,然后送到一个sigma的函数里头就得到它嘛,对吧好,我给大家推一下诶,我问大家一个问题啊。
如果你的标准答案是一,就是这是正样本,这是负样本,标准答案是啊,这一个是正样本,那你的你的你应该就是标准答案取一,非标准答案取零嘛对吧,就是我的意思就是说你明确你的答案,就是这个东西吗。
然后你现在你给的呃,这个预估的结果告诉我说这个是P,就是这样本的概率是P,是负样本的概率是一减P哎,你告诉我你是不是希望这个P越大越好,就是大家告诉我是不是希望概率P越大越好,如果它是一个正样本。
你是不是希望概率P越大越好,就希望它是正样本的概率越大越好,好,你希望是P的概率越大越好,是不是希望log p越大越好,是不是希望log p越大越好,是不是希望负的log p越小越好。
是不是希望food log p也越小越好好,所以损失函数就求出来了,就长这样,负的log p k当它是负样本的时候,当它是负样本的时候,你是不是希望这个东西越大越好,你是不是希望log1减去P越大越好。
你是不是希望负的log1减P越小越好,哎我刚才的这个推理大家听明白了吗,我给大家说的这个大家听明白了吗,你的概率P就是预估的正样本,预估的是小叉叉的那一类的概率,我会希望正样本的时候。
我会希望它越大越好,我会希望它越大越好,然后如果是那个呃负样本的时候,我会希望一减P越大越好,所以我会去做这样一个一个事情,OK有同学问到了一个问到了一个问题,说老师老师为什么加log。
为什么要加log,我会不加log不行吗,不加blog没有关系,但是你别忘了你现在有一批样本,你做题不是做一道题,你你不是做一道题,是做一批题,所以你一批题你不是不希望第一道题的P啊,越大越好。
第二道题的P越大越好,第三道题的P越大越好,如果是这样的话,你是不是希望把它们乘起来越大越好啊,所以你会去做一个乘法啊,比如说P啊,P1撇,PPP1撇不是那个导数啊,是是另外一个P啊,这是第第第三道题。
P两撇,你是不是希望这个东西越大越好,但是大家问大家一下,一个01之间的数,一个01之间的数越乘是不是越小,我给你100道题,我给你1万道题,最后这个连乘是不是它会变得很小,这个连成一旦变得很小。
它就很糟糕了,你的计算机超过你计算机可以去计算的精度了,怎么办,求一个log,把它变成加法,加法是不怕数量多的,你加1万个数,它也没有做乘法那样的危险度那么高,做乘法用0~1之间的数做乘法。
连乘乘在一起,你待会就糟糕了,所以我解释清楚了,为什么要加log吗,就是这个其实和自然函数有关系啊,就是log,自然大家会之所以会去做这样的一个事情,就是因为你不你不做这个东西,它会可能会溢出。
可能会在计算机当中超过它能计算的精度啊,所以我说清楚了吗,好接着往下走,用加法肯定是不行的,用加法肯定是不行的,这个地方你的这些,你你现在这个自然,你是希望每一个都尽量的大啊。
用加法体现不出来这个东西啊,就加法加法的话呃,加法是做不到这个事情的,那你你肯定是用连乘的形式对,然后这个时候呢,你的损失函数可以写成这个形式,你的损失函数可以写成这个形式,啊这个大概没问题吧。
当它是正样本的时候,是不是这个东西就取一,当它是负样本的时候,是不是这个东西就取一,是不是就把刚才的这样一个分段的函数,统一成现在这样的一个形式了,有这个这个部分大家有问题吗,啊哪个同学有问题。
就是把我刚才给大家推出来,正样本的情况下,和负样本情况下的损失函数合在一起,大家有问题吗,因为两分段函数这个太讨厌了啊,他的他不太好求啊,明白吧,就是一个函数比较好求,分段函数的话就有点麻烦啊。
所以呢我就不分段了对吧,我就不分段了,Ok,好吧啊,那个同学说西格玛呃,那个呃P体现在哪,来问大家一下西格玛log啊,这个H的费达xi,我把这个地方的西格玛啊,对这一堆的东西求和log。
求和是不是等于上面的东西求乘积,log求和是不是等于上面的东西求乘积啊,是不是就变成一堆东西,连成了体现在损失函数呢,是不是体现在这为什么前面要乘以一个Y啊,这个这个同学我们要把公式合到一起啊。
看清楚了,我只有在正样本的时候才取它,我在负样本的时候取它,看到了吗,啊去去这个地方啊,负样本,然后我我我这个时候的取正样本的时候,我这一项不就没有了吗,我取正样本的时候,Y等于一,这一项不就没有了吗。
我取负样本的时候,后面等于一,前面这项不就没有了吗,所以它是不是就变得和前面的公式一模一样了,OK了吧,好好有同学说log为什么前面要有负号啊,记住损失函数评价的是什么,损失函数评价的是什么。
损失函数评价的是我和标准答案之间的差异,你差异越大,这个函数应该越越大才对对吧,所以你这个地方的概率P在正样本的时候,概率P越大,这个值是越大的,在负样本的时候,概率P越大,这个东西是这个东西。
它是它也是越大的,所以你要加一个负号,去符合你的损失函数的含义,损失函数的含义,听明白了吗,我说清楚了吗,我说清楚了吗,这个地方,所以所以要加负号的,明白吗,损失函数是什么,刚才我们希望它越大。
我们希望是正样本的时候它越大,希望是负样本的时候它越大,对那我加一个负号,它就变成对的啊,所以它就它它它就和我的损失函数的定义,一样啊,损失函数是要求评估的是差异度,就这个函数越大他是越不好的。
它越小它是越好的,对吧好呃那个呃亲爱的同学们,不要忘了后面的正则化,就是你要知道哦,你刚才在做线性回归的时候,你是可以,你是线性回归的时候,你是可以扭动的去去拟合这些样本点,你现在在逻辑回归当中。
你同样可以扭着去做做区分哦,你可以扭着去做区分哦,去去把这两个样本点分开来哦,所以这个也是一个很可怕的事情,所以这个地方呢啊对你就同样要去限制一下,限制一下它的幅度,限制一下它的幅度。
所以这个地方的幅度呢,大家可以同样加一个正则画像啊,比如说你这个地方是一个l two的,一个一个lol two的一个正则化啊,不是l to lose l two的,抱歉。
刚才可能是前面同学有问到这个不叫l to lose,这个叫l two的regularization啊,l two的正则化啊,它不是l to loss,l to lose是一个用在回归当中的loss啊。
l two的正则化啊,这样L2的正则化,然后呢加在尾巴上呢,就是为了去限制住C打的这个幅度,限制住C达的幅度,对这个损失函数有不同的叫法啊,最大最大最常规的叫法叫LOGLOSS。
叫对数损失叫LOGLOSS,他有其他的叫法,比如说它叫做binary cross entropy loss,就是二元的交叉熵损失啊,或者叫做对数损失都一样都一样对都一样啊,啊对对对。
然后这个函数的数学特性非常好,对这个函数的数学特性非常好,它是一个凸函数啊,它是一个凸函数啊,哦对有同学发现了一个问题啊,说老师这个地方好像你的那个中括号放错了,中括号放错了。
我应该我应该去那个纠正一下这个东西啊,中括号放错了啊,中号放错了,然后这个地方少了一个括号,哎呀抱歉抱歉,这实在是敲公式,一敲多了就容易蒙对,就容易懵啊,所以大家看一下,实际上啊现在这样是对的对吧对。
现在这样我相信大家大家是没有问题的对吧,所以所以那个大家看一下啊,就是前面的部分应该是应该是应该是这样,好好大家现在看到这个式子啊,大家那个那个这个这个公式,还是有点那个书写的时候有点问题啊。
我们应该纠正一下啊,这个函数它是一个凸函数,它是一个convex function,所以凸函数你是可以直接滚小球的,对你是可以直接滚小球的,所以同样的方式去求他的这个gradient,求它的梯度啊。
同样的方式去求他的梯度,然后照刚才一模一样的方式去做,优化细节的东西呢,我没有在,我没有在这里就给大家推导那个导数啊,因为我刚才说它有很好的特性,就是大家别忘了这个GZ是等于GPC。
是等于GZ乘以一减GZ的啊,你们自己去求一下,你发你可以验证一下这个结果,所以它求导其实不难,它的导函数,虽然刚才大家看到那个函数,老师你说老师老师这个感觉好复杂,那个里头又有什么。
一加上E的这个这个负Z次方分之一,然后这个Z又是W的转置X,OK然后然后然后你又在前面求log,感觉这东西好复杂,但其实它不复杂,没有大家想象的那么复杂啊,啊所以这个地方求解的方式。
求解求解的部分没有给大家细说,它还用的方式还是梯度下降啊,依旧是梯度下降啊,顺着这个方向去做优化好呃,再说一点其他的内容,就是这个世界上不只是二分类的,谁告诉你说做选择题只有两个选项。
没有人告诉你说做选择题只有两个选项对吧,这个世界上东西多着呢对吧,我我这幅图像里头可能是猫,可能是狗,可能是大象,可能是鸽子,可能是其他动物,所以如果我只知道二分类,刚才我们的逻辑回归只完成二分类对吧。
我只拿到一条决策边界,Decision boundary,决策边界,我只能完成二分类,我怎么去完成多分类呢,这个地方有些思路啊,所以从二分类迁移到多分类,有两个常见的思路。
一个叫做one with one,一个叫one with Rest,他们分别做什么样的事情呢,我还会翻做这样的事情啊,这个地方有三类三角形,小叉叉和小方块,我怎么去做三分类呢,我做不了啊。
我只能做二分类,好没关系,我一步一步来,我先构建一个分类器,C1去区分小三角形和小叉叉,为构建第二个分类器,这个地方的C2去区分小三角形和小方块,我去构建第三个分类器,去区分这个地方的小叉叉和方块,诶。
你告诉我,如果我来新的一个样本点,我来新的一个样本点,比如说这个样本点可能是啊,在这哎,这个样本点是不是可以丢到这三个分类器当中,分别去拿到一个属于这个呃,三角形的这个概率啊,P1和属于叉叉的概率。
一减P1,然后以及丢到第二个分类器当中去,找到属于三角形的概率啊,这个地方啊叫做叫做P111撇,和一减P11撇,是不是可以丢到第三个分类器当中啊,C3当中去区分出来属于方块的概率啊,属于方块的概率P啊。
那个啊一两撇,然后属于叉叉的概率啊,一减P一两撇有有问题吗,我对其中的每两类啊,不不不,这个地方和soft max没关系,这个地方和soft max一点关系都没有啊,大家不要不要。
那个我知道你们知道一些多分类的分类器啊,不要搞混了,这个地方就是用二分类去解决,去解决多分类啊,那它的两种思路,one with one或者one Rest用的都是二分类。
和soft max一点关系都没有好,OK所以这个思路大家听明白了吗,我对里头的任意的两个类去构建一个分类器,我会拿到三个分类器,没错他会拿到二分之N乘以N减一个分类器,没错没错。
啊你你们你们我知道你们想在想什么,你们觉得计算量很大对吧,构建三个构建这么多个分类器,计算量很大对吧,唉谁谁跟你说了,谁跟你说了,这些分类器在构建的时候一定要做串行了,唉谁告诉你说要做做串行啊。
我估计这个资源多的很,我我任意的两个分类器,我去构建这个分类器的话,我可以很简单的去构建,构建一个并行的去构建很多个分类器,可以同时跑起来啊,还有一个还有一点是这样的,哎你你知道你你自己想的是什么。
你觉得构建这么多个二分类器和你你猜一下,构建这么多个二分类器和构建一个多分类器,哪个计算量大呀,我知道你在想什么,因为你直接想要模型吗,你说我这个地方有二分之N乘以N减一个模型。
那个地方只有一个多分类器的模型,但谁告诉你说,那一个模型比这个地方的一个模型,和这个地方的一个模型,构建的时间复杂度是一样的,所以不一定的这个东西不是你想象的那样哦,你要任何的事情。
万事万物你都要考虑不同的维度,所以这个地方的one with one,是一个在工业界里头依旧在用的方式,比如说大家如果看SB,你看后面讲到的支持向量机,它在做分类的时候,它就有可能会用到呃。
用到这个地方的思路啊,就one with one或者one with Rest的思路对,所以大家可以稍微那个留意一下对,就任何的事情,你我还是还是那个大家要多多思考啊,他总会有自己的一些利弊啊。
可能和你直观想的东西不一定一样好,这是one with one,One,One one,One with one,做的事情很简单,就是在任意的两个类别之间,去构建了一个分类器。
那one with Rest呢,那one with Rest呢好很多同学很聪明,你已经猜到了one with Rest是什么,when we switch告诉构建,同样会构建三个分类器。
只不过这三个分类器是区分说诶是小三角形,不是小三角形,是小叉叉,不是小叉叉,是小方块,不是小方块,有问题吗,同样去取最大的那个概率P啊,注意啊,他这个地方构建了三个分类器之后。
它取的是这里头最大的那个概率啊,就是P1P11减P1啊,P1撇,一键P1撇,P一两撇,一键P一两撇里头哪个最大,它就算是就是说这个里头啊,Sorry,就是P1P2P三啊,不对P11P1撇。
P一两撇哪个最大,他就取哪个,OK能理解能理解我说的意思,就是他取最大概率的那个类,作为他最后判定结果的lo,所以这是一个啊思路啊,就是one with one和one with stress。
这样思路我希望能给大家说清楚了啊,One with one,就是两两之间去构建,然后one with stress呢就是是否对吧,是小三角形,不是小三角形,是小方块,不是小方块,是小叉叉,不是小叉叉。
好这样啊,代码一会儿给大家讲,然后说一点点说一点点那个工程应用的经验,这个就是我刚才给大家那说的那句话,因为有同学总会觉得说老师,老师前面写的这些模型好简单的呃,我想学复杂的模型。
我要去学那些什么什么比较比较牛逼的,那些model啊,那些神经网络的model,什么支持向量机啊,那些这个啊,GREGBDT等等这样的机械模型,我觉得他们好牛逼的,我觉得洛基回归好弱的啊。
这个没有啊没有就是啊模型简单,工资低,谁告诉你的,你这句话的前提是,简单的模型和复杂的模型你都能用好,所以而且你要知道,不同的场景里适用的模型是不一样的,嗯我我跟你说啊,如果你这个问题非常简单。
你用神经网络去做这个事情,可能是一个吃力不讨好的事情,逻辑回归的优点在哪,逻辑回归你可以拿到,你可以拿到C答,你可以直接根据C塔去看每一个特征,它的重要度有多高,对,所以所以这个时候。
你它有非常非常高的可可解释性,我们今天给大家讲到的模型和明天讲到的模型,都有非常非常高的可解释性,可解释性是什么,是工业界非常看重的东西,举个例子来说啊,你们去看一看,有些很牛逼的行业哦。
叫做互联网金融,大家知道吧,很牛逼吧,天天跟钱打交道啊,互联网金融,然后里头有一个领域叫做叫做风控反作弊,我告诉你神经网络他们是不敢用的,为什么,因为神经网络出现问题了,完蛋了,你查不到问题。
就是它的可解释性很差,你不知道他为什么做了一个这样的决定,但是如果今天大家用逻辑回归,你去检查一下这个地方的C打,你就知道他为什么会做这个决定,是因为我的某个C打比较大,是因为我的某个输入的X比较大。
才会有这样的一个结果,所以你可以第一时间对你现在这个东西,问题去进行处理,如果你用神经网络,你现在出现问题了,你只能把它先降级,降到一些其他的模型上,然后先顶着,然后你再去查它。
它短时间内是查不出来他的,你你是很难去查出来他的问题的,所以可解释性意味着有更高的可控度,有更高的可控度,而且直到几年以前,你看到的最牛逼的那些公司,包括呃百度,包括阿里,他们还在用这个模型。
用的用逻辑回归,只是只是在到近两,近几年大家的那个数据量幅度起来了,然后不那么容易过拟合,然后这些工程师又能在一定程度上,能去debug一下呃,像神经网络这样的一些model之后。
现在线上的BASSLINE,就是现在这些模型才切到deep learning上对,但是你看到大部分公司我们有一句话叫做,一招L2打天下,真的你去工业街问一下,这个大家都都都是知道这句话的啊。
就是我只需要这一个模型就可以了啊,就是关键就在于你的数据处理的有多好,然后所以这个地方呢我给大家写了一堆东西啊,大家看一下就好了,就是模型本身是没有好坏之分的,千万不要有这种想法。
觉得啊老师这个模型好简单,然后会这个模型的人是拿不到高的工资的,没我我跟你说逻辑回归我,我去面试你的话,我去问你问题的话,我同样可以问得出来,你对你的机器学习的功底到底是怎么样的,所以你不用。
你不要去觉得这个模型很简单,它的里面也有一些细节啊,你需要再消化一下,然后呃模型本身是没有好坏之分的,然后它有它的优点,它有它的优点,它最后能输出一个概率P,然后它可解释性高啊。
他做完特征工程以后效果很好,然后他可以去做一些其他的,因为它可以输出概率,他可以去排序啊等等等等,然后它的应用也很多啊,就大家看到那些什么呃,最大的这几家公司,包括这个这个什么头条啊等等啊,抖音啊。
他们里头做一些工作可能都会用到,可能都会用到这个模型啊,是对啊,现在写的这些内容来源于我,来自于我自己的一些总结,所以那个不是书,如果你要看书的话,你可以看一下周志华老师的机器学习西瓜书,在那本书当中。
他把逻辑回归叫做对数几率回归,就是他认为最后是一个回归,回归的是一个概率,所以它叫做对数几率回归啊,然后你可以去看一下,好吧啊,然后这个地方关于算法的调优啊,你可以去调正则化的系数。
C可以去调收敛的阈值,E可以去调损失函数给不同的权重啊,这些东西都是可以调的,你在工具库里头是可以可以可以见得到的啊,先简单的说一下,然后推荐两个工具库是呃,来自于台大的利布雷尼亚和塞克勒当中的。
Logistic regression,然后LIVINA这个库是一个,它是一个C加加的库啊,然后LI里头有一部分是对他做的那个CD当中,有一部分是对这个东西这个库去做的封装啊。
就是它是一个Python的封装啊,你可以认为OK好啊,所以这个库大家可以看一下,我给了一些链接啊,这是这是台湾大学的一个库叫LIVINA啊,如果数据量大的话,也可以用spark spark当中。
这个应该是以前的酷啊,这以前的版本1。6,现在应该已经到2。3了,Spark,然后这个spark当中有两个板块,一个叫ml lib,还有一个叫做ml,然后这两个板块当中都有LR。
然后它都能完成并行化的优化,OK好,然后那个我带大家来看一下代码嗯,所以那个稍等一下,我来把它切上来,呃能看到我的屏幕吗,能看到我的屏幕吗,嗯大家能看到我屏幕吗,好啊我我做一个小小的说明啊。
第一节课的代码,里头有我自己纯手写算法的部分,听清楚啊,里面有自己纯手写算法的部分,所以如果大家看这个代码,觉得老师好复杂的,这个很正常啊,在大家今后使用这些模型的时候,更多的时候你不会自己手写代码。
你会基于一些工具库去完成这些任务,只是工具库用的好与坏,和你对模型的理解之间会有非常大的关系,所以如果你看这一次课的两个代码,这两个我手写模型的代码看的有问题的话,这个不要不要因为这个东西而觉得很呃。
对自己的否定情绪很高啊,是不用因为这个地方的底层的这个这个代码啊,一方面是他确实比较麻烦,另外一方面是我只是为了告诉大家说,你看我给你写了一个逻辑回归,我给你写了一个梯度下降,我用这个东西确实能跑起来。
确实能解决这个问题,我只是为了给你加深一个印象,告诉你说你看我写一个线性回归,我写一个损失函数,我写一个梯度下降,我去迭代一下诶,它的损失函数下降了,他最后能够收敛,唉和工具库的结果还比较类似。
只是这样的一件事情,并大家实际工业界的在解决问题的时候,并不会去手写模型啊,这是一个非常好的事情,手写模型肯定是比不过那些前辈已经吹出来的,很完善的这样的工具库,所以大家在这次课看到的这两个代码啊。
linear rebrushing example和logistic regression example,对我自己手写了一部分代码,就是关于这里头的这个就是大家知道的,这里头会有一些模型的这个拟合呀。
会有一些优化迭代,这样的过程我全都自己手写了,所以你看起来代码会有点复杂,实际在工业界当中去完成拟合,可能就一句话啊,所以所以这个地方会有一些其他例子吗,比如说你看这个地方的cable的。
这个旧金山的犯罪啊,类型的这个分类这样一个问题呃,最终的你知道建模的部分在哪,建模部分在这看清楚啊,建模部分就在这,他就是用一个模型去拟合一下我的数据,去feat一下我的数据,X和Y看到了吗。
这个东西就完成了,这个过程训练就完成了,不需要你自己去写,而我前面给大家写的这个东西,是为了加深大家对知识的认识,所以我给大家手写了一遍啊,所以大家不需要去抠这里头细节点。
比如说你说老师老师这个可视化我不会做,怎么办啊,会不会后面的课学不下去,不会啊,老师老师这个地方的这个向量化的表示形式,这种南派的计算,我不会会不会影响后面课的学习,不会OK好。
所以这个地方我先做一个简单的说明啊,然后我来说一下这个地方的例子,这个例子是这样,大家看这个代码不用一行一行的去看啊,就是不要求大家每一行都去看,搞清楚他在做什么啊,因为你在后面的,我刚才我说了。
就是使用方法不一定是这样的,使用方法哈啊这地方会有一些工具库啊,Python这个语言我不知道大家熟不熟啊,但是建议大家熟悉一下,这是数据科学领域呃比较牛逼的一个语言,如果现在大家看各种各样的AI工具。
如果它没有,它不是Python写的,他一定会有Python的接口,基本上是这样的,你看google的TENSORFLOW,你看你看那个FACEBOOK的PYTORCH。
他以前有个很好用的库叫做touch,这个库呢早在非什么CANCEFLOOR,什么carry,什么什么什么,这些工具库全都没有出现之前就有,大概在那个时候,我们啊1114年一几年在用的时候啊。
1314的时候,可能那个时候就已经有touch这个工具库了,然而那个工具库的主语言不是Python,所以谷歌爸爸一旦一一把甩出来之后,大家用Python去写,然后那个啊就那个FACEBOOK肯定也是。
他也在构建自己的AI生态嘛,所以受到压力了,所以他立马推出了一个叫做PYTORCH的工具库,那个工具库就是touch的一个Python的版本啊,还是Python的版本啊,有同学问到说老师。
老师这个地方的这个i Python这个notebook,用什么东西去打开啊,你如果是Mac的话,你可以装jupiter notebook啊,如果你是windows或者Mac的话。
你同样你可以去装一个anaconda,Anaconda,然后我来给大家拼一下吧,对我敲到里头了,敲到我们聊天区了,叫anaconda,然后你把这个东西下来,下下来以后,下一步下一步下一步安装好了。
它里面就可以启动一个NO no9,peter notebook就可以下载这个代码,好吧啊,然后这个代码呢我不想每一行有每一行就讲,我事先说明一下,在Python当中呢用工具库是这样做的啊。
有些大神已经写好的工具库,Import pandas s p d,说明说我要把pandas这个工具库引入进来,我取一个别名叫做pd,我把NPI这个工具引入进来,取个别名叫做NP,然后我要做可视化。
所以要用的Mac polip,这样的工具库好,中间这一大坨东西不用管,他们就是一些基本的设定啊,前面的东西也不用管,就是用当派去产出了一个数组而已,一个矩阵啊,你可以认为OK啊。
然后这个地方的单变量线性回归,先准备好数据,数据我已经给大家准备好了,叫做linear regression data1啊,Linear regression data1。
然后所以这个地方我把它加载进来,它就是一个大的矩阵,然后在这个矩阵的基础上,我就可以去取出来对应的X和Y好,所以把X和Y画一画图啊,就长成这个样子啊,那个大家读这个代码的时候啊,你是第一遍读的时候。
不要去抠每一行代码,不然的话你读的会很会会很费劲,呃会很费劲,所以这个地方呢大家以以这个嗯,大家大家以现在这个地方的这个案例为准,去看一看他在做什么样的事情,我做了一个可视化。
我给大家画出来的横坐标是population of city,就是城市的这个人口数,纵坐标是什么呢,纵坐标是它的一个perfect啊,就大概是这个城市的一个收入啊,或者是他的GDP啊等等这样的信息好。
然后所以我画了图,大概长成这个样子,然后我现在,我现在想对这个地方的数据去做一个拟合啊,我想对这个地方的数据去做一个拟合,那怎么办呢,对我我这个地方显然是一条直线。
所以我要做的事情是我的假设函数已经有了,是C的X对吧,那我就要去计算一下我的损失函数啊,所以loss function或者computer function实际上是这样的啊。
loss function和computer function实际上是这样的,那我给定C打给音,给定X的时候,我做什么,你看是不是C达和X去做一个内积啊,就是C大乘以C打的转置乘以X啊。
然后求完那集以后,我是不是用求完预估的结果值,减去真实的结果值,再求了一个square啊,再求了一个平方啊,H减去HC的X减去Y求平方,再求和,再除以2M分之一对吧,这个和我们的公式一模一样。
这个和我们在我们在我们刚才的PPT当中,公式一模一样对吧,然后我们写了一个gradient descent,就我们手写了一个梯度下降,我们手写了一个梯度下降,这个地方的梯度下降是每一次的C打。
都沿着负梯度的方向,负梯度我们已经求出来了,就是啊H减去Y再乘以X啊,就转置乘以X这样的一个,那X的转置乘以这个H减去Y对吧,然后我沿着负梯度的方向,以阿尔法这样一个学习率去做一遍调整。
我写了一个for循环,我就一步一步的去做这样的啊,一步一步的去做这样的调整对吧,我一步一步去做这样的调整,我把中间每次调整之后的,这个损失函数做一个记录,那大家会发现随着我的迭代次数。
往随着我的这个地方的迭代次数啊不断的增多,大家会看到这个地方的cost j,实际上最后的这个损失函数,这个JC打是往下降的,往下降,就表示说我和结果之间的差异值越来越小,越来越小了。
然后最终我就可以把这个结果画出来,所以当我求我迭代到一定程度的时候,我就求出来了,C打了求RAC的,你就知道斜直线的斜率了吗,你知道斜直线的斜率,你就可以画出来这条直线嘛。
所以大家看这个地方我用了两种方式,一种方式是我自己用用这个呃,这个这个梯度下降去学习到的这个参数,另外一种方式是我调用了大神的一个工具库,就是啊逻辑回归,把那个psychic learn。
psych learn当中的这个这个这个linear,regression线性回归,然后去feit data对,去feit data,然后拿到的结果大家看,实际上我自己手写的这个算法。
和工具库的算法是非常类似的,就结果基本上是一致的对吧,结果一般基本基本上是一致的,然后我就可以对它做一个预估好,这是这个代码正确的打开模式,这是这个代码正确的打开模式,OK啊好。
然后第二个代码是逻辑回归啊,逻辑回归前面的东西我也不说了,这一大坨好,然后pro data就是一个函数,这个函数用于绘出来样本点的一个分布好,所以我现在通过pla data。
把加载进来的数据叫做data one,点TXT加载进来的数据去绘制出一幅图,这幅图就长成这个样子,所以这幅图是说我参加两次考试,我两次考试有两次考试的成绩。
example one score和example to score,最后我能不能通过这次考试,我要基于两次考试的得分去做判断,所以大家看到这个地方会有啊,黑色的部分是通过了啊。
这个地方的黄色部分是没有通过,是挂掉了,所以啊有没有通过,有没有挂掉,取决于你取决于你两科成绩,如果你有些科目非常非常的好,只要你另外一科不要太差,我就让你通过,结果大家发现了吗啊。
然后或者是你两科都很好,当然了,妥妥通过,如果你两科都很差,不好意思,你肯定通不过,如果你某一科很好,但是另外一科太差了,不好意思,也通不过,很多同学考过研对吧,你教考研的时候,实际上单科是有单科线的。
你过不了单科线的话,不好意思,你是没有办法的,OK好,所以我需要去找到一条决策边界,把这样的两类样本点分隔开,没错,所以呢底下这个地方我就开始给大家写了,好计算一下损失函数,损失函数是什么。
对刚才大家回到PPT里头,看一下损失函数怎么求的,损失函数是不是正样本的时候是啊,这个log p啊对吧,负样本的时候是log1减P,然后前面加个负号对吧,记得吧,然后我就把这个东西写出来了啊。
Python Python其实它是一个可读性很好的一个语言,所以我就把损失函数写出来了,然后到损失写函数写出来了以后,我应该怎么样对,我应该用这个地方的梯度去完成梯度下降,去优化吗。
所以你就可以优化一下,然后呃这个里面有一些细节啊,我没有办法一行一行给大家解释,如果你们有看不懂的,可以在群里头啊,那个提出来,大家可以一起讨论啊,我会给大家做解释,然后你往下看底下这个地方的话。
决策边界就是我如果通过梯度下降去学习到了,这一条角色边界的斜率和它的截距,我就可以把它画出来,所以大家看这条这条线学得还不错吧,这个学得还不错吧,你看他是能把它是能近似的,把这两类样本点分隔开的。
因为它是一条直线啊,所以它啊他是没有办法做到完全分隔开的,因为你看一下这里头的样本点是不可以,线不是线性可分的,你找不到一条线把它分开的,所以他很努力很努力学,大概学到这个程度好啊。
下面呢这个弟子是一个加正则化项的逻辑回归,因为我们说正则化很重要对吧,你要去限制住他的这个呃逆合能力,所以呢这个地方呢我们把数据画出来,它长成这个样子啊,它有两类样本点。
一类样本点是这个地方的黑色的小叉叉,另外一个样本点是这个地方的黄色的啊,这个小圈圈我要把它分开,所以要学习出来一个决策边界好,我们搞一点点多项式的特征出来,因为显然这个没有办法线性可分嘛。
大家看到这幅图能找一条直线,是咔咔咔分不开的,所以怎么办呢,线性分不开,搞成非线性,所以他找了一个多项式的变换,去把映射后的数据映射成最高六阶,就是最高是六次方啊,这样的一个一个多项式的啊。
表达就是有X1的例六次方,X26次方啊,那又包括X1的五次方,四次方,三次方,X1的平方乘以X2,X1的立方乘以X2,X1的立方乘以X2的平方啊等等等等等,反正这里造了很多的这种。
交叉项和多项式的特征出来了,然后我把这个多项式的特征,利用刚才的啊逻辑回归去完成一个分类,我同样去计算一下损失函数,只不过这个损失函数,要记得加上尾巴上的正则画像啊,去加一个正则画像好没问题。
然后底下这个地方是同样的方式去做调优诶,刚才有同学说,老师老师为什么那个问题里头不去做啊,超参数的不做这个参超参数的选择啊,对啊,因为刚才不做调参吗,因为刚才那个lina regression太简单了。
他没有要调的东西,大家现在看到这个地方,罗辑logistic regression,它有一个要调教的东西叫做C的啊,这不叫做拉姆达,就是这个地方的正则画像的强度,拉姆达呃,你先看图,先看图。
拉姆达等于零表示什么意思,拉姆达等于零表示什么意思,拉姆达等于零,是不是说你们家这个天才的这个小孩,我管都不管,你爱怎么学怎么学,你你自己你随便去学,对吧,我不对你做任何的约束。
所以大家看到最左边这样一幅图,是不加任何惩罚的,我不做任何的惩罚,你看他可以学得很扭曲,不做任何的限制,他可以学得很扭曲,它扭它很扭曲的,这个结果很可能效果是不太好的,在新的样本上。
大家看中间中间是我加了一个拉姆达,等于一啊,就是我加了一些拉姆达,中间啊中间是我加了拉姆达,拉姆达等于一,说明我稍微惩罚了一下他,但是又没有太过,大家看这个学习的这个曲线怎么样,是不是平滑了很多。
你们看结果是不是平滑了很多,最后这个拉姆达等于100,拉姆达等于100,也糟糕了啊,拉姆达等100来表示大多了啊,这个小孩就就就那个管的太严了啊,打太多了,这个没有创造力了啊,也畏畏缩缩,不太敢去学了。
所以效果就不太好,你看右边的效果就不太好,所以拉姆达太大和太小都不好啊,你不管它也不好管,太多了也不好稍微管一管,所以这个拉姆达怎么去调对,后面会讲到具体讲到如何去调参。
但是这个地方给大家一个基本的认识啊,基本的认识我这个代码,大家把他的kernel换成python3跑一下,我而且你们用过Python吗,你们知道python2和python3的差别不是太大吧。
就是大部分情况下是通用的,除掉print代码除法和啊,你的一些map filter这样的东西,它一个一个是迭代器,另外一个阐述结果是list,差别不是太大,你要你如果要跑python3。
你把这个地方的cell,你不PERSL,你把这个地方的kernel,你把它换成python3的kernel去跑一下就好了,我不知道大家装的JUPITER有没有两个环境啊。
我自己本地的JUPITER是两个环境,都装了python2和python3,所以如果你们要做python3,你们就在你们自己配一下环境。
在kernel里头把把kernel换成python3的kernel,所有东西都可以跑,代码没有动啊,代码不用去动啊,这里头的代码是大部分代码是兼容的啊,除掉print这样的函数,其他的代码大部分是兼容。
所以你们直接跑就可以了,OK所以不要觉得python2和python3之间有太大的差异,没有你想象那么大的差异呃,呃至少对用户而言差异不是那么大啊,基本上你的可以感知的部分比较少。
当然了我是我也是很提倡大家用python3的,因为在2020年以后,那个python2是不会再维护他那些工具库的更新了,所以建议大家用python3,我这个地方用python2的原因是。
因为我公司的服务器投入的Python环境,有些还是python2的,这是有些历史遗留原因啊,大家知道啊,在前几年我们就开始用Python了,然后有一些项目当中用到了Python,是python2呃。
你要不全切成python3的话,有一定的风险,线上的项目,这个意思好吧,对,那个是这个意思,如果大家用python3跑这个代码有有小问题的话,你们提出来,我们帮大家去改啊,其实改动的地方很小,明白吧。
就改动的地方其实很小啊,K好那个这个这两个就是那个呃我手写的代码,然后大家可以看一下,这个这个是实际工业界里头解决问题,我们用工具库去做啊,这个代码,然后这个里头就是读数据啊,包括读数据啊。
数据的处理啊,这个我们在后面会给大家讲啊,读数据和数据处理,然后它的建模很简单,它建模就这一行启动一个逻辑回归的分类器,拟合一下数据就完了,就一行对这个就是你用工具库和不用工具库的。
你用工具课不用工具库的区别,OK啊,所以引用了just regression,直接去feat一下data就可以了啊,多余的东西我不想,我不想给大家再啰嗦多说,你们如果在跑这个代码。
或者是查这个API的时候遇到了问题,你就在群里艾特我问就好了好吧,我的代码已经在课前啊,在昨天已经传到了我们的QQ群文件里,大家打开QQ群文件把代码拉下来,本地装一个anaconda。
就可以把它把我的代码加载起来,可以去跑,OK啊,anaconda是有python2和python2的,python3的不同的版本,大家用python3去跑,我这个地方这个代码也没有问题。
也是没有问题的好吧也是没有问题的,然后大家注意一下,这个地方的代码阅读是需要花一些时间的,所以我希望大家下课以后花一点点时间,去把我这个地方给到的这个啊,案例和代码去消化一下,OK去消化一下。
如果你们有问题的话,可以提一下,OK啊,然后我我觉得大家可以在学过一点点模型之后,再动手去做一点东西啊,回头我们会有一些小的比赛案例丢到大家手里,让大家去做,你们不用着急。
因为你今天学到的模型是很基础的模型,你在明天学完以后,你会学到新的模型,你会你需要去感受一下模型和模型之间的差异,这个东西对你的这个东西,对你的学习是有帮助的,然后案例我会传到我们的QQ的群文件当中。
然后大家那个去呃看一下好吧,然后自己去把这个代码拉起来去跑一跑,你去看一看里头的细节,最好的学习方式是在已有的代码上,去看别人是如何实现的,以及里面需要注意的一些点。
这样啊我这个代码应该用python3跑是没有问题的,你们可以试一下啊,对啊,你可以试一下啊,我今天就给大家讲到这好吧,我就不再拖堂了,不好意思,今天那个因为第一次课,我想给大家把一些基础的知识。
和一些我的一些理解给大家那个说清楚,我就没有赶时间,所以呃可能拖堂拖了一会儿,然后希望大家见谅啊,就是那个可能影响大家休息了,然后那个大家有更多的问题,你们就在那个群里面再找,再再艾特我去提问好吧,对。
那个我就不再给大家再拖时间了,然后那个对就是你们有问题的话,你们就问,然后我我我有可能工作会啊忙,但是我看到的话肯定第一时间回复大家好不好,对对,所以OK那我今天就给大家讲到这,然后大家辛苦了。
早点休息,你们有问题的话,你们在那个QQ群里去艾特,我再去问,然后我看到了,我会给大家做一个解答,参与大家讨论,好不好啊啊那个作业我说了,先把代码看一下,先把代码看一下,我现在让你建模。
你也做不了这个事情,对对,你先把先把这个地方我给到了四个四个代码,先去看一下,等你学完了几个模型之后,我会给你一个作业,会引导你去完成好不好,所以先不要着急啊,然后这个地方代码你一定要先看。
如果你不看的话,我给你一个题,你是动不了手的啊。
OK好好,谢谢大家,大家早点休息啊。