七月在线公开课笔记-十五-
七月在线公开课笔记(十五)
Lookalike相似人群拓展项目实战 - P1 - 七月在线-julyedu - BV1bA411p79R
OK我们现在课程开始啊,可以听到我说话吗?你今天讲的话是looklike相似人群扩展啊,这个也是在推荐广告里面是非常经典的一个业务啊。它呢是源于2018年的腾讯广告算法大赛啊,大家可其实可以看到。嗯。
其实从腾讯网算网算网大赛,从17年到2020年都是他们的赛题都是非常贴合真实业务的,也是非常经典的一个赛题。所以说我们把每个赛题进行一个复盘,进行一个拆解,就非常值得我们去深思和学习的。
同也同时也可以挖掘一些呃挖掘一些top选手,他们的一个解决方案的一个思路,和他们如何比如说提取特征工程,如何去挖掘一些强的一些信息,一些check,或者说他们使有哪些模型。
来去解决这个真实场景下的一个问题的。那么今天呢从5个部分进行呃就分享的一个赛题背景背背景,探索性数据分析特征工程CTR模型建模。扣件。以最后的模型融合。
那我们先去了解一下looklike它是具体是什么一个业务啊,场景,它是相似人群扩展。就比如说。客户的吧,客户他们会上传一部分指定的高质量的一些人群。那这个高质量人群呢就是我们的种子人群。
那么主要是去依托于种子人群,我们从里面去找到一些较为显显著的一些画像特征。然后像腾讯里面的话,他会嗯他们会在他们的大盘当中寻找一些嗯与其高度相似的人群,就扩展人群。就根据这些特征特征。
画像特征来去找到相似人群。那我们不可能说人呃依据人为的。所以说我们需要去去用建模的方式,对建模方式如何去对他进行一个扩展。那我们有了种子人群,有对他投放的一些广告。那这些种子人群。
他对应的种子包就是对应的这个广告。对,如果他点击这个广告的话,其来说我们依托这些点击和不点击,就是正向和呃负向的一些样本我们进行建模来去提取出来他一些正向的一些含义,就是说这群种子人群,对吧?
他们有哪种偏好,哪种兴趣,那我们依托依托于建模的方式来去提取。然后呢,我们再从我们的一个人群库里面,对吧?对,也给这些人群给他们推这类广告,那我们看他是否发生转化,那如果发生转化或发生点击的话。
那其他和我们种子人群就有一些相似的一些兴趣。那我们可以把它归为相似人群了。嗯嗯分为三点,他的一个业务一些作用,更好触达意向的用户。就是我们原有的人群是非常少的,所以我们需要扩展人群。
把那些具有相同意义向的用户进行扩展。第二个话就是说更高的互动转化可能性。啊,最后呢就是找到潜在的目标人群帮助拉新。那最后一个是非常关键的。因为现在来说的话,很多他们的公司都会在用户增长,就是说嗯拉新呀。
或者说就是一些对一些用户一些那种那种那种成成熟的用户吧,我们进行一唤醒。对,都会做一些用户增长相关的一些算法的啊。当然这也是其中一部分。当然我们这些就是推荐这些的,他也是也可以算为里面的一部分的。
呃,三部分种子人群,然后基于用户画像提取用户特征,然后我们再去扩大受众展示相关的一些广告。那第一个呢是先去上传,就是它这个业务背景嘛,就是说最开始他会就是在这个比如广告平台。
或者说我们这个类似一些系统平台里面提供一些上传一些种子用户啊,然后呢去筛选种子用户特征。那其实就是挖掘一些呃就有相关一些意向,相关一些兴趣,具有一些共性的一些特征。然后进行匹配。那根据上面的特征。
从全量活跃用户中筛选出另一批与种子人群最为相似用户。那就这就是整个流程了。嗯,这个赛题呢他其实是做了一个简化。对,不需要我们不需要我们从全量活跃用户里面来进行一个嗯。不需要我们去找到全量用户,对吧?
他其实已经给我们那啥了,已经给到我们这些全量用户了,对吧?给到我们这些用户不一定是全量,他给到这一部分用户了,同时也给到这个用户他对应所点击的广告了。其实就是说。嗯。就说他其实已经说给到了一个用户了。
优的ID对吧?U的 IDD然后又给到另外一个广告ID了。对,这起来说是他们本身是提供到的对,那我们需要做,就是说看这两个配合的下面,对吧?它是否发生转化,对吧?就是点击啊,或者说CVR这种的形式,对吧?
啊,有点击或者说有转化,还有正就是标为一,那反之的话就是零这样的一个一个一个形式了啊。
那赛题任务呢?赛题任务我刚才已经描述了5个月还是比较比较清楚啊。大家讲一下,本赛题呢是将为参赛选手提供几百个种子人群啊。嗯其实每个种子人群它对应的是一类广告特征。那比如说这种子人群。种子人群里面对吧?
它有很多的很多的用户ID那它对应的一个广告广告特征或者广告IDAID。啊,第二个也是一样的,很多种子人群对吧?它对应的AIDAE刚才是比如说按按按零算法账来,就这种形式嗯。然后出于业务数据安全保证考虑。
所有数据均为脱敏处理后的数据,整个数据集分为训练集和测试集。那测试集就需要我们最后要提交这个部分了,就它给到了user ID和对应的AID对吧?然后我们对它作为一个准确的一个呃预测。
那预测的话是最后给出是概率结果的啊,比如说0。760。76,就说它发生发生点击或发生转换的一个就发生点击的概率是0。0。76对就行了。不需要把它转换为一或者是零这种形式啊。呃,用户是否属于种子包用户。
那其实是否属于种子包用户,其实就是否去点击这个广告了,两个含义是一样的。所以说我们把这种是否属于可以转换成1个CTR问题。那我们知道。在广告排序里面对吧?就是说我们在做推荐的时候,对吧?一个排序环节。
那其实就是看它的1个CTICVR1个一个概率的对,然后做个排序。那其实它和经典这个问题其实说有很大的一个相似性的。所以说我们可以把它转换成CTR这个问题去解决。包括我们在高特征,还有一些用的模型。
也可以用CTR排序模型来去解决的,这是没有任何问题的。测试集将检测选手算马能否准确的。检测出用户是否属于现在种子包,训练数据有完全一致。训练数据测据总部完全一致。OK啊,这个是我们那个任务啊。
那我们来看一下评价指标啊,一般来说的话,常用的史其实这种二分类的话,包括在涉及到一些广告推荐这块的话,都是用AOC这种方式啊。对它具有那种那种。嗯,像正样本和副样本区分开来一个白一种排序能力啊。
对他不会受他前说不会受你的。他其实关注的不是咱们的一个准确率。对,不是关注准确率,而是关注的话就是一个区分性和排序性。对,我们来看一下嗯,对于扩展后的相似用户,如果在广告投放上有相关的效果行为。
就是点击或者是转换啊,则认为是正例。对,那其实点击的话就是我们对应的CTR问题,转换的话是CVR问题,其实就非常相似的啊。如果不产生效果行为,则认为是复利。呃,每个带苹果种子包会提供一个信息。
种子包对应的广告ID及其特征,以及对应的候选用户及就是用户呃用户ID及其特征。选手需要说就是针对于每个种子包,我们去计算它的AOC的啊。因为每个种子包每个广种子包里面对吧。
它起来说广告特性也是不一样的对,所以说我们为何为了更好来去有这种就是针对性,对吧?包括比较经典,就是说嗯我们现在前说很多的评估的话,其实说嗯不是来用AOC这种方式来进行评估,而是那种JAOC的方式。
对吧?啊,我们来我们具体在做精准这种推荐,精准的一些营销的时候,我们看到的不是说因为每个用户他这个行为习惯不一样。对,所以他最后得到概率结果的分布也是不一样的。所以说我们为了更好针对于某个用户。
来去看它AOC的一个效果。所以说才会有了JOC这种形式。那其实来说JOC和我们这次这个评价主要是蛮类似的。就说我们依托于按种子包,我们去分成多个,就是我们有M个种子包,对吧?
对我们看每个种子包下面它的一个嗯它这个AOC的一个效果如何,最后进行一个加权啊。这个AOC这个思想是非常类似的啊。也是现在就是说用的比较多的,而不是说不考虑种子包,它本身的一些一些数据的分布,一些效果。
一些它的一个概率情况,对吧?而是一股脑的只用1个AOC来进行评估,那肯定是不一样的。这是我们的评价指标。再往下是特征工程部分,哎,是探索性数据分析。探索性数据分析呢,这是我觉得是非常重要的环节。
因为我们最开始候对这数据完全不理解,对吧?他提供哪些数据啊,一个提供哪些数据,对吧?他给到数据对吧?有哪些数据。第二个,每个数据它大小。它大小它类型。它的分布。我们都是不不了解的。
所以说我们需要第一步就是说我们先去了解数据,读懂数据,才为了就是帮助我们更好的去开展接下来工作。不管是我们在做比赛也好,还是说在。接触到一个新项目,就工作中项目也好,都是按照流程来的。
本次竞赛呢他给到是脱敏后续,对吧?时间范围是30天,但是他没有给到每个样本的一个时间的。所以说他确实到时间这个部分了啊,所以我们不需要考虑时间相关的一些因素,因为本身没有给到这个因素的,给给到这个变量。
数据可以分为我们的训练集、测试集、用户特征以及种子包对应的广告特征四个部分啊。训练级的话就是已经给到label了,就是说AIDUIDAID的话就是用户ID。UID的话。
AID对应的是广告IDUID的话给到的是用户IDlabel的话就是嗯它是否发生是否属于这个种子包,或者它是否点击或者说是否转换啊,测级话需要我们去预测的一个一个一个pe尔队这种的嗯。
然后用户特征这块的话,他给到还是蛮多的。就是说一个用户案例的话,他给到一些filturegroup一group2group3,那这group什么意思呢?就是一个一个特征组。比如说他的一个有个兴趣啊。呃。
EREST啊兴趣一它里面对吧?也许有个125就逗号间隔这种类,然后八这种的形式,对吧?它其实是一种多值特征,就是他把这个兴趣这一类兴趣。比如说星期一的话,也许代表他嗯。嗯。
我们可以把它假设假设成一种运动的一个兴趣吧。对我们的运动兴趣其实说不止是一个的,是有很多的啊,所以我们可以假设为他运动兴趣啊那。interest二的话对。哦。
二的话对二的话我们可以把它展设成一个色彩分布,色彩兴趣对它也是分为各种的已经透明后的一个一个种数值的一个一个一个一个类别的一个多质特征了。比如说5100啊,里面也许可以代表一个颜色。
但其实他这个起来说兴趣还是蛮多的,也不确定是什么,但大致可以这样方式来进行理解。对。每个特征组里面是一个多的特征啊,我们要注意这点啊。对,就后面我们是来说关注怎么来去解决这个问题啊。
怎么来处理这个问题啊。对多的特征,我们该怎么进行一个拆开展开啊这种方式。也是在很多的一些很多业务城人中,其实见到的并不多的啊。广告特征文件对,就是对应的广告ID对吧?嗯,他的广告主ID。
他的一个什么ID啊,创建素材ID。嗯,他的一个素材大小。广告类别ID嗯。厂商生产这种ID啊,或者说生产那个类型的ID一种呢。对,大概就这样的啊,一共分为4个部分。
那么主要是围绕着围绕着呃围绕着AID和UID我们去展开来去构造我们的特征的。这基本的这个文件啊,我们一个了解啊。接下来我们来看一下,我们将这一些打开啊,就是数据打开,就说比有就是一个这是广告ID对吧?
广告ID对吧?它的一个我们直接就hard对吧?HED hardd来看它前5个对吧?前5个。前五个他的一个前五行,对他一个基本的一个数据的样子,什么样子的,我们先做初步了解啊。他其实全部做了脱明了。对。
而且已经帮我们做好了一个转换了。他不会说就是给我们那个字符串这种了,或者说object这种类型的,直接是按这种数字型的,已经给出来的啊,我们不需要再做label in的这种操作了嗯。那其实这样看的话。
其实只能看到大概的信息,我们也不了解它有个分布的啊。那我们继续往下看吧。用户的信息啊,这可能就是说给到了感觉更复杂一些哈。用户ID他的年龄。性别。嗯,婚姻状态。婚姻状态看蛮多的呀,111啊。
这也不清楚什么意思啊。我今天晚上看教育嗯他的一个。消费能力吧是消费能力吗?对,或者说这是它的一个呃LBS这个那该是个位置嘛,LBS位置什么兴趣2兴趣5,然后是KW,这也是个多日特征啊。
对我们他其实来说都是多日特征。我们端时处理方法都是一样的。直接上我们都按相同方式来进行处理就可以了啊嗯。哎,刚才几个可能说意思不太了解的,我们可以去去看一下他是什么意思啊。对。
那现在我听到就是说腾讯赛的一个官网,对已经举办了举办了四届了。对我们可以看网届赛题啊,网年赛题里面还有一些介绍的。
嗯。
18年的。
哎,直接可以看到了,它里面是可能对数据有更详细的一个描述啊嗯。婚姻消费能力,然后是地理位置兴趣。兴趣呃,它分别以12345有5个这种这种特征组,还有关键词。较兴趣类目更细力度的表示用户喜好啊。
那也是一种用户戏取兴趣,但可能说更细一些啊。还有topic就是主题。这用的是LADLDA挖掘的。LED这种这种方式,对吧?这是一种那种文本的挖掘这种方式。文本挖掘方式。对,来挖掘用户的喜好。
然后分为topic123,这应该也是都是特征了。还有APPAPP近期安装的行为。APP活跃。上网连接类型。那有不同上网方式。其实不同上网方式来说话,其说我们可能就是说我们在获取这种这种。嗯。
会理服务的时候也会有一些不一样的一些广告,或者说不一样的一些反馈啊,这可能也算差异性的。包括不同操作系统,其他系统其在也反映出。反映出人的一个。差异性对,不管你是安卓和IOS这个学说,你整体来看哈。
从宏观角度来看的话,它是存在差异性的。人的一个整体的一个兴趣呀,或者说其他的一些呃状态啊。移动运营商。移动联通电信。是否有房?
啊,这是我们的用户的信息啊。
那现在看呃,这块的话,我做了个基本统计啊。对,就是对于UID还有我们的广告ID对吧?AID我们来看这个un unique的话,就是说他在训练题里面,对吧?是里面有多少类用户有多少个用户。
多少个不同用户对吧?对啊。就是一个班有45人,他就是每个人都是不一样的。所以他按他俺有那个就45了,但在系统里面不一样,他可能有45个,但是可能。嗯,小红出现了10次,对。
那可能只是最后他Iunic只有30多。这个I的话就它唯一的一个属性有多少个,就是说唯一的这个用户,他有多少个。那就是780多万。对。那我们来看测试集,测试级的,un uniqueic的话。
它是有200多万的。嗯,总共的话是。90900多万900多万。对。啊,后面我统计一下就是说训练集和测试集对它的一个重复,就说我们的用户ID有多少重复的。我们可以发现重复的ID是非常少的啊。对,所以说你。
将AID的话,哎UID。本身不能作为特征的。怎么说呢?因为我们重复的并不多的,重复的并不多。所以说你用它的话会存在就是说你后面不存在UID的话。
对可能会出现那种呃一些一些新的一些UID就类似于感觉这种冷起的一个对用这的话是完全不起到这种泛化作用的。所以说我们在高特征的时候,我们是可以。围绕着UID去构造,而不能用UID本身的对。这一点需要注意。
先看一下我们的AIDAID的话就是我们的种子包。那每个种子包它有对应的一个广告ID那173虽然你173,测立173所以173。173百分百。啊,学习测试都是一样的啊,然后我们嗯。百分百重复啊。
这个就是说都是一样的,没有说它存在一种一定差异性的这是我们的AID的一个分布啊。是。嗯。这是其家说对我们数据基本的一个了解。Oh。那接下来我们看一下,就是我们该怎么去构造一些特征的啊。对。
这块我这块我是我当时参这个比赛,对吧?我是大概就是列举了一下。对,就是我们这块构造一个方式,对吧?第一个是。Space to, Sp, space。这种话主要就是说对那种那种那种那种那种那种多折疼。
对吧?那种多的特征对吧?我们可以用那啥用那种词频统计方式,对吧?con vectorctor那种那种方式来进行一个展开啊,还有一种的话是基础的特征,就是说原本的一些用户信息,对吧?原本的一些特征。
我们不做任何处理啊,直接把它当做一个类别特征,或者说当成一个数字特征来用。就用原本用特征,它的一个年龄呀、性别呀。对广告特征的话,它对应它一个广告位的一个广告展示的一个呃sizeize。对。
然后它的一个广告主ID这样的嗯。统计特征的话就是are unique collect的话就是说它点击,那我们可以把它看作一个就是一个count。countter类特征。theun对count就这样的。
还有一种话就是。艾ic克的话其实就说他的意思就是说。意思就是说呃比如说一个用户对吧,一个用户一个用户,他呃他那个兴趣,他的兴趣的一个一个一个范围,或者他所看到的一些。嗯。😊,看到一个呃兴趣,对不?
比如说原本的话可能说小红对吧,他可能说只有一个兴趣,对吧?一个兴趣对,一个兴趣。那小明的话他有很多兴趣,很多兴趣。对。就他按 uniqueic就高一些,它一个整体的一个兴趣的范围就更更广一些。对。
就可以描述出两个用户一个性别的兴趣的一个差异啊。点击的话就是说如果小红他可能就点击了一次呃,就护他的一个整体行为一次。那小明的话可能100次。啊,那其实也可以反映出用户他经常会登录。
我就很少登录这个平台使用我们这个产品。那这个话就很经常登录我们平台去点击我们广告,使用我们这个产品的啊,这也是从不通。角度统计来去反映出用户的一个信息的。再往下的话。
就是我们对于这种特征组这这种这种多轴特征对吧?我们也可以统计它的一个长度的啊长度,其实中反映它的一个信息的一个范围了哈,就和刚才那个unic蛮像的对。这种还有一种比例特征就是。组合交叉。
别特通话是刻画某类用户的一个偏好的对。哦。根据各类偏好更好区分区分用户。别听的话就是retail这种。啊,比如说我们来统计说嗯统计统计呃。AID对吧。AID和其他的一些。和其他一些ID啊。
其他一些呃比如说一些广告类的ID对吧?广告的对,就是UID对吧?UID啊。那这时候呃我可以不用UID,我用其他的吧,就是弄弄种其他的来看,我找一个吧。
有对应素材ID吧。是啥ID。素材ID对吧?素材ID对,我们来看可能这个广告对吧?这个用户对吧?用户对吧?他可能对应素材素材A的话啊,点了一次,素材B的话点了10次。点了。谁的话哎,点了5次。
他总共点多少次呢?总共点了有16次,那就一除以16。10除以16。5除以16。那最后这个这个这这个比例的一个大小就反映出他对这个这类ID的一个兴趣的一个。偏好重要性能。
其count本身的话是反映不出来的,反映不出来它对于具体的一个ID的吧一个一个程度,只是始能只能反映出这个广这个用户他整体的一个整体一个活跃度这样的一个信息的。再往下就是交叉组合特征啊。
这块对应的是转化率特征,这块后面会详细介绍,因为这是非常重要的一部分啊,在很多的场景下都会去用到的。下面我们来看就是我们对于多种特征,我们如何进行一个处理啊。对,就这种话应趣呃兴趣的话。
interest它里面很多这种这种这种数值,对吧?我们最简单方式的话是扎它展开,这种灵异这种形式进行一个展开,对吧?展开。对,就是其实oneho和因为它里面不存在重复的。所以说你不管是做oneho也好。
还是做那种那种那种那种词屏这种。统计也好,对吧?啊,它起来说都是一样的,都是这种0101的。因为里面不存在重复,所以不存在对哪个兴趣。可能比如不存在对兴趣其实,可能说它会出现二的。
因为本身都是不重复的啊。另外一种话是TFIDF啊。这话题来说就是说我们不仅统计说他在一个这个我们每个看成一个。看这个文本嘛,对吧?我把每一个好像看这个文本,那我把整个in一,我们看这个文档。对。
就是他不仅是看说在这个文本里面的一个出现频次,对吧?他还要考虑到在这个文档里面出现了一个频次。对,然后最后的话是上面统计结果。对,除以下面统计结果。对,一个是它这个文本里面的。另外他的文档里面的。啊。
是这种方式来进行来进行一个获取的。就TFITFIDF。同时呢它里面有一些参数,我们可以过滤,就说把一些出现比较少的,他们参就是me count,对吧?me count这种这种这种参数。对。
如果说我们等于5的话。等于我话,那我们就设定说在这些兴趣的一个属性里面,对吧?最少那个兴趣,比如说其实他在所的文档里面,他可能出现了出现了嗯4次。对。那我们可以看到它出现的频次哎。
小于我们这个最小的一个设定值,那我们会直接把70给过滤掉的。那这个意思就是说我们把那些非常稀疏非常稀疏的兴趣ID,对吧?我们直接过滤掉了,因为它不具备不具备统计意义,不好的去构造,去反映出用户兴趣。
因为它只针对于极少数些用户才具有一定区分性的啊。然后的话这样构的话之后,我们可以用种剧类的方式,对吧?一种就降维的方式对吧?这种话看IID啊NMF这种话,IIC的话,这种它是这种文本挖掘这种算法。对。
或者说我们也可以用PCA这种方式,对吧?啊,都可以说我们先展开这种高维稀数的,然后再经过再经过我们这种这种这种这种降维的方式,对吧?因为来说的话,它可能就维度非常高,就是这种这种上千上万。
可能还更高的对吧?所以我们经过降维方式处理的话,可能会。更友好一些啊,就是对多个特征我们如何处理啊?那家下去看。CTR目标编码就我们刚才讲的就是说转化率这种特征。嗯,因为它和我们的目标,对吧?
就是我们它是否属于或者是否点击有直接的关系的啊,但本次赛题它是没有给出时间相关特征的。我们如何去衡量这个特征,软如核量这个特征,它的一个转化率,我们是不是可以直接说,比如说我们衡量呃衡量AID吧。
我们可以用转化率直接描述AID它对待事物的一个。对待15个态度啊。比如说我们求的他,就是说他的他可能就行为非常多,对吧?有上百次对吧?上百滋张行为。最后它的转化率是。嗯,0点。七八对。这是AID1。
然后AID2的话。啊,也差不多就50次吧。转化率0。27。嗯。那其实可看出来。呃,UI啊抱歉,UID用户ID对吧?用户ID这可以看到。UID的话,它更容易去接受一个事物,对?他可能兴趣范围更广一些啊。
那UID2的话对他可能对这些事物可能接触比较缓一些,所以说造成他对它的一个转化率非常低,所以短时间内不可能去对它进行点击的,或对它进行一个转化。啊,这是对于两种事物的一个一个区别。
那因为它直接和label有直接关系,所以说我们不能直接。不能直接对他求命。命的话就是说我们领域的占比啊,就它的一个转化率。所以我们考虑就是说这是一个真实业务中的一个问题,就是说我们如何。
因为如果我们用全局刚开的命的话,我们用全局方式,对吧?全局方式来构造。那如果说这个用户他只在前面这段时间段,我们把它看成一个5个时间段吧,他是在第一个时间段出现了。但是你用。呃,他只在嗯。啊,怎么说啊。
我想想。呃,如果他只是在某个时间段用上,对吧?但是你在统计的时候,比如它只是用在时间段出现,对吧?你在统计的时候,你把哎券一也考虑进来了。对,但是我要统计这部分特征啊,你不要考虑对它了。
它是本身就有个结果,就属于说我们我们未来信,我们可以把它当做一个未来信息,对吧?未来信息我们要统计得到这部分信息,所以说我们就不能用这部分信息做统计。不然的话,你是数据穿越了,你要统计它。
你要又要去用它那两个是有矛盾的对吧?所以说我们在构造的时候一种很好方法。如果说这里面因为它不包含时间,对吧?和时间哎没有联系,所以我们用五指交叉方式。
我们可以去思考一下西瓜书里面呢还会讲到keyflow,为什么要用keyflow,我们来去做线下验证。对吧我们不可能说我们。要去得到train一对吧?它的一个结果。然后我们在训练的时候。
把 train一的数据我们也用上了。那这样的话。是不是出现了数据泄漏了?对。这也是K for的它的一个原本的一个其他验证原本的一个。意图吧,原本的一个就他的一个。目标。对,原本的一个目标。
所以说我们这时候才会用五的交叉方式。如果我们想要衬一的结果的话,另外四个做统计,那就是求它的。对,那刚再往下的话,我们要得到就是说嗯得到第二部分,就是说我们要得到train2的话。
我们要用就是train一和Te345,对吧?就除了圈之外,其他的四个部分来做统计,这样依次去得到我们训练集里面每个模块对应的转化率,那策略集就比较方便了。我们可以直接用训练集整体来进行构造。
因为这不出现泄漏。我是用这个数据以外的数据我们做统计的啊,跟这数据没有半毛钱关系的。所以这是这种方式。但是呢。但是呢在于推荐广这块话,也会出现个问题,数据非常的稀疏啊。比如说个冷品对吧?
他只被点击了四五次,对吧?或点击两三次,那恰巧这两次全都发生转化了。对,就百分百了。就百分百了。对。那百分百的话,我们难道我真的认为它的转化率是百分百吗?是不行的,因为它太过稀疏。
就不具备那种统计意义了。所以说我们一般方式就是说我们是否可以加入一些平滑的方式,就说类似于被A平滑。对我们加一个加一个加一个底数或不是加一个在分母上。在分子上同时加一个数,对吧?我们来平滑掉它。
就说我们没有哪个没有哪个人,对吧?没有哪个人我能够打跑票。就说我们看我们在做模型训练的时候,我们用数目型也好,我用财模型也好,是不是可以发现我们不管去预测什么样样本,对吧?把预测他得到他概率结果。
我没有找到出概率结果是一的这种结果。最大也就0。99几吧。对。对对,因为事物它不具备这种绝对性啊。所以说我们预测时候发现呃概始结果最小的也有0。00000几啊。对,再少也不会直接到达零的啊哈。
所以说这时候呢我们可以用一些就是说B斯平滑的方式来解决这个问题啊。啊,这里就不做细讲,大家可以去查这些相关的资料。对如何用BS平滑方式来去辅助我们做目标编码的。对。
这是我们做目标编码的时候需要去注意的问题啊。啊,因为这种方式用的是非常多的,不然在比赛来说,还是我们在做在工业界时候也会去遇到这种方式的。接下来的话就是我们的一个。交叉特征的一个组合。对。原本来说的话。
我们想要去了解一些更细利度的信息。原本的用户年龄、用户性别、用户等级。这些来说,他可能本身来说,可能说你如果说你做推荐对吧?做推荐啊,你只是考虑到用户性别了,对吧?用户性别了。女或者男来做推荐。啊。
那是不是这个非常粗糙呀?😡,我们这时候能不能考虑其他一些信息啊?对我们将将将将性别ho面年龄做一个组合。比如1234就年龄段这种578这种的。对这时候女性年龄段一,我们做个推荐,女性年龄段二做推荐。对。
这时候来说话,他是不是信息更加的细一些了。我们推荐的时候能够是不是更加精准了?对,个性化推荐它就要达到个性化。所以它的力度一定要细一些啊,但是事也不能太细啊,你直接就是说你直接完全针对于每个哎。
其实这个广告I啊,对于这个用户ID了,我们做推荐了。对,那如果用户ID是新的,我们怎么办你去解决个问题啊,肯定不行了,对,这个就太细了。对我们要就是说嗯在它之上吧,其实在这种UID之上对吧?
就比它粗一些的对吧?性别年龄啊,职接这样的一个一个方式,看这块的话我是将可以组合这个部分的吧?就它进行一个交叉组合了。我们可以两讲调叉组合啊,也可以生层的调叉组合,也是可以的啊。
这种是我们手动的去来构造一些特征了。这种方式对,然后呢。go完之后呢,我们可以去来得到我们的一些我们想要的一些最终的一些特征,就cant。
areun就是这个的话嗯 unique的话就是是unic count对就同它一个属性的一个个数retail呃,ge呃in就是说目标编码啊等等,这样都是可以的。这个就是我们一个加哈特征这块。
我们可以用到那种方式。刚才那些都是我们的一个特征部分了。对啊,需要去注意到的一些问题啊。接下来我们来看就是说我们的1个CTR模型构建的部分了。对我们可以用哪些模型?
包括这些大赛当中大家都在用的是什么模型?啊,首当其冲的letGBM其实我们大家如果去开go,对吧?卡给一看,大部分这种结构化数据的话,大家都会用LGB的,或者说用叉GB对吧?这种数模型的话肯定要用的。
而且非常的稳定啊。那其的时候的话就是说呃可以了解一下,就是说这种模型它的一个差异性的对。啊,只是对于这块的话,我给出就是叉GB和LGB它这个差异性。嗯,叉DV的话。
它是按层级就是按每一层每一层的话进行分裂。LTB的话是按夜节点进行分裂的对。然后很好的工程有啊,但是说呃学习模型的话不是特别的高效。对,然后T历的话可能就是说更高效一些,但可能会。嗯,不行。
同时也能去避免。避免这种这种过凝合。对。然后接下来就它的一个嗯不同的一些,比如参数位置啊或者其他的一些这块咱们下面做了解可以了啊。这块会做详细的一个介绍。
我们主要想就是说对这个赛题我们可以用到哪些模型呢?嗯。这话就是说他这个分裂的过程了。对。分裂过程其先说就是说我们要了解说分类过程中,我们如何去进行一个调它的一个参数的啊。
因为调参数它也是一个非常重要的一部分了。就说我们在做比赛时候,在后期时候,我们其实说遇达到一个平静手段,遇到一个平静的时候,对吧?那个平颈时候,我们无无法进行一个突破。无法进行突破。对。
那我们如何去做呢?这时候考虑。模型融合。调仓。或其他的一些转变思路这种方式。对调三也是里面一部分,就说嗯我们我们肯定要限制,就说我们分类越深,对吧?它的含义是什么?对。
那么为什么还要去限制限制它的一个深度啊,这又是为什么?这大家可以去思考的。这个话就是一个直方图优化算法,就是对于LGB这块来做的。原本的话嗯RGB的话,它是一个嗯。预处理的过程,对吧?
预处理过程就是对于我们去进行预排序的过程,就是它主要过程嗯数模型它一个比较耗时过程就是说我们来去寻找最佳的一个分裂点,对吧?啊,呃,XGB的话,它这个并情部分话在预排序这块的。
这时候啊其实来说呃数模型做了一个优化,就是说用直光图做算法。直方图算法对。他怎么做,就是说我们把一个它因为它里面就为的这些数值特征吧,word置这些数值特征,对吧?就1到10,对吧?对。
一到适量的或者什么的,我把它离散化了,分成几份了,比如分成三份了,这第一份第二份第三份。原本来说话,我们都是哎X式量样的。现在来说的话,我们唉。切分成了三部分了。对,切分成三部分了。
这时候我们哎每个作为一个离散部分了,我们这三个部分哎在就其就找两个部分,我们来看它的一个。呃,效果怎么样了?对它的一个切分,它的一个切分之后,它的一个呃它的增益效果怎么样?对,就大大的去缩短那个时间了。
同时呢也会增加一定的泛化性的对,一来说我们没有切分时候,我们再进行划分时候,没有说划分到具体到某个值,对我们只大概哎分成3块了,哎,我们进行一个划分这样的啊,这它一个优势啊。对。泛法性效率。没有。
这块呢是FFM啊那说为什么要FFM呢?原本我们家学叫学到那个啥,就FM嘛,就上面这个式子对吧?上面式子。啊。主要就要了了解到就是VI它的一个就它的影像量段,它影像量。相信大家都了解过这些模型。
它本身的一些理论,对吧?每个影像量对应一个特征的,就是唯一对应的这种这种这种关系。对,所以说我这个XI对吧?XI。不管和。哪个X哪类特征?我们进行交叉的时候都是VI对。那这时候他就忽略一点。看下面。
男性和篮球结合和男性和化妆品结合,两种潜在含义是不一样的,重要性也是不一样的。所以说我们不应该不应。将男性这个他的影像量对吧?完全用一个影像量来去表示它应该对应不同的不同的域。
这就是FMFFM提供提到的域这个概念。fe的这个废了废了概概废了这个概念废了这个他这个意思就是说我们可以说我们可以将就是说每个特征呢它其实不同域不同含义。那其实也可以说每几类特征,对吧?
它其来说是描述一类的一个一个一个含义,就是一个fe的这种这种这种含义的对啊,所以说我们这其来说是增加参数这个过程了。对,原本来说的话,我们只用就是一哎。呃,只用确定一个可以了。对,现在来说的话。
我们不仅要圈这个影像量的一个原本参数,同时也要考虑是说这影像量对应不同的fe的它的一个参数的一个呃嗯差异。对。所以这是FFM它的一个作用了。对,考虑到不同fe它的一个影像量。对它的一个重要性呢。
同时呢复杂度也是急剧的一个提升的。嗯。这是FFMFFM的一个嗯大概的一个解释啊。大概一个解释,这件是在这个比赛当中用的是比较多的一个模型。对。FFM那再往下呢,我们看哪个模型也用的比较多。NFFM对。
因为我没有找到就是说NFMNFFM这个结构图的,我先用NFM对吧?然后做了一个呃。呃,结构做了展示对吧?前说这个是将FM。和我们的一个嗯嗯就是我们的1个DN层做了一个结合。对。那其实NFM的话。
我们其实就是说我们讲的下面这个部分,对吧?对,做者升级就由原本的FM。哎,转变到FFM了,其实就可以了啊,打这个。那NFFM对于FM它有什么的一个优势呢?对。呃,原本的FFM的话。
它是考虑到一些这种二级的一些交叉,对吧?或者说这样的一个一个组合。对,那交叉完之后呢,起来说嗯DN的话,它起来说就是说能够获得更高阶的这种这种这种隐视的这种交叉的关系的啊。
这起来说就是在于交叉这块这种这种角度去考虑这个问题的,其实我们可以看到很多的广告排序,对吧?是吧?它都是考虑的这种交叉的这种方式的。不管你是显示也好,就FM这种这种这种显示也好。
还是说到我们这种DN的对吧?这种隐视也好,对吧?显示以后他还有那些就是说那种那种内机啊,外机这种方式啊,就是DCNDCN这种方式,对吧?啊,或者就是PEN这种方式。啊。都是考这种这种这种交叉的对。
当然交叉含义就是说在这个场景下起来之后你就非常需要这样的一个信息的,就是说非常高级的一个信息,非常细腻这种信息。这种组合我们可以去辅助我们做更好的一个推荐或者是排序啊。这是模型。
它在这个业务场景下面的一个优势。下面就是我们那个切分验证部分了啊,因为怎么说呢?我们是为了我们在我在做这个赛题的时候,对吧?我是提前来说,提前我已经按AID对吧?将数据进行切分了。因为为了保证向下一致。
对吧?为了防止这种这种出现过敏和这个这个问题出现,我直接按AID的形式的AD方式。进行的一个切分,就20%。作为啊验证级。对,来进行构造了嗯。就说20%,我们做验证集段,另外的80%,另外80%。
另外80%啊,我们可以直接就进行训练,也可以。也可以用它,我其实来说,我们这个做话可能思路有些有些有常规的,可能就是说有些偏差,对吧?我用80%。在做这种物折。
或者说用其他的一些将他看成一个完整的一个训练集了。对?来做接下来一个验证,对吧?但是来说话。从始至终的从始至终,我们将切出来的20%的这种AID和测试的AID。构造方式完全一致。对。
就说我们在验证这块的话,我们考虑的更细一些了啊。如果说你不最开始你不进行切分,对吧?你对那个百分之百对吧?这个训练级对吧?我们哎一样的构造特征,一样的在构造其他的方式,最后这时候再切分。
那是不是会有些影响了?对,这是从我们和训练机构在一块儿的时候,验证级和训练机在一块的时候构要特征了。而验证级是不是这样的,而不而测试集并不是这种方式。测题是另外一部分,我们单独去构造的。
并没有和我们训练集进行一个合并的。所以说我们不能保证它更加的一致性。我们先把20%切分出来。啊,我们就把它当这个测试题,因另外80%啊,我们不管怎么来弄。总是和他没有说一些嗯就跟和测机。嗯。
相处方式是一样的哈。对对对啊,这就更加就是从绝对角度吧,更加更加更加更加准确角度吧,来保证的就是线上线下一致性。对,不过这个话就比较麻烦一些了。最后引动完之后还要将数据做个拼接。其然说我们团队的。
我们团队在这块比较好时对,因为我们最后结果的,我们最后体验结果。呃,好像都没有没有将20%对吧?拼接进来啊,所以最后的一个训练。所为我们这个数据比其他的团队少了。大概20%的一个数据了啊。
这个是我们分数最后呃没有取得特别好的一个原因啊,但是它一致性是非常非常稳定的啊对。验证方式的话,除这个话就是说我们嗯用5折的方式,对吧?当然还5折还是要用的,因为它可能得能得到5个模型啊,对吧?
5个模型它可能就是说五个模型的效果更更稳定一些,对吧?这也算一是融合的过程了,其实。啊,这个其实不做细介绍,大家都可以都了解啊,这是西瓜树上面一个图啊。对。最后呢就是我们这个融合的部分了,模型融合。
那我觉得模型融合部分也是很多很多团队的吧,他们在后期的时候对吧?后期的时候绞尽脑汁或者说考虑不同方式的一个呃。最后的一次机会了啊,就在最后模型融合的部分。那既来说就是融合可能离离离不开。
就是说它的一些融合的一些我们的些理论,对吧?就是一些比如我们融合化,考虑一个特征差异啊,样本差异,还有我们的一个模型差异。那有了这些差异之后呢,才能保证我们模型结果融合会有一定的效果的啊。
更细的话就是从不同的一个,我们又细分成了5个样本扰动,就说样就是它的一个样本差异,不同特征组输出转换。这个话输转换一般来说,对于那些回归的问题可能更多一些。嗯。
参数调整就是我们利用不同参数的一个训练模型来进行融合。los选择啊,这也是一部分。训练过程中这个就不讲了,就是说我们训练模型嘛,就是说波ss电话这种这种题提升就是说那种数模型,对吧?其实我们可以考虑。
其实可以看到数模型本身它在不断的去迭代的时候,是不是它有个参数,就是说我们对于样本采样0。8列采样,就行采阳列采样都可以去设置的啊。那其实就是说保证我们每次分裂的时候,我们选择样本和特征啊。
都去都具有一定的差异啊,也是保证保证它一个泛化性的。因为最后的话我们是将。多个模型对吧?就是我们数分列对吧?数列多个数段吧,进行一个这种商家的对吧?啊,我们每次这个选择的样本和他们都不一样啊。
这也是就是用了一个理论分析这样一个角度,对吧?啊,跟这个完全是非常的一个match的比较一致啊。最话就是我们对训练结果。主要话就是平均法就我们加权平均,就根据剩下一个概率情况,剩下个分数情况。
我们来进行一个融合。还有一个stking堆叠,这种话是一定要尝试的。stking这种方式啊也需要我们要去掌握的。它提来说就是我们用模型对吧?我们原本训练的模型对吧?然后得到一个这是我们model对吧?
model对吧?model。得到我们的一个概率结果,不仅是我们的测计概率结果,同时也包含我们每个验证级的概率结果。因为我刚刚说到50的话,我们5次验证是得到5次的一个完整的一个概率,完整的一个训练集了。
是一列的一个一个一个一个长度了,对吧?这个加测极进行拼接,它其实就是一列特征了,将这些特征就作为这个模型它去学到的信息,对吧?和其他的一些比如数据也好,模型也好,哎,特征也好呀。
或者其他的一些输出的概率结果也好,我们进行个拼接,对,就是对你的一个简单的过程,大家可以去查相关资料。这块的话就是这块给到又说。很多选手对吧?他们考虑到方式,对吧?看最开始我们做特征工程的时候。
我们有基础特征。有新的特征工同特征,对吧?就我们说了原本的一些,比如说UID相关的对吧?或AID相关的新的一些。这的话就是我们通过一些,比如说一些count。哎有那克。ho是retail。
或者ge together in这种方式的得到的。然后。未入到多个模型里边,入入多个模型里面,它里面的话用到那个啥。with子30这个不太理解啊,可能就是说只是选取了top30一个特征吧。对。
然后是letLGB叉GBFFM对。然后可以看这块,它将三个预测结构的话作为特征了,其实就是tking的一个部分了。对。对,作为特征了,然后分别只将这个部分的做特征。然后同时呢。
我们和之前的一些原始特征对啊做了一个拼接,你看看是这种拼接过程啊,这也是个拼接过程,分别为入到LGB和叉GB里面了。对。还有一部分的话,我们用加庭的方式。哎,这也是作为我们的一个一个一个一个链路了。对。
然后tickking的话。这块这块就属于stking部分了。也是一个链路。这块的话其实就是另外一些用其他的模型,对吧?用其他的模型。这也是一个新的链路,对吧?啊。
最后融合你可以看来打比赛的话其实很复杂的。但是你做基本的工业阶的话,你其实一层搞定,一个模型就搞定了。对,但是你要不断的去追赶那些分数。叉DB的话,离散特征就能里别呃。
我们需要进行完后的这样的一个处理的对,对于类别特征的话,我们需要做做处理的对,如果不用到我们的数模型里面需要这样的。但是我们未用到NN里面的话。
我们直接经过这个inbed映层转换成那种稠密的向量就可以了。one后的转换可以了啊,如果说不是特别的特别稀疏的话,one后的可以了。那如果说非常稀疏的话。
这时候我们就用那啥其来说我们在做count慢编码,count and unique retailge这种en靠这种方式。其实count和get这种方式啊,其都是对那些类背特征做编码这种方式了。对。
都是为了尽量用那种数值的特征来去描述这个类背特征啊。其实对你如果这块做的比较好的话,我们就不需要将类别特征再放进去了。对,因为我们已经可以描述到哪些信息了,没必要再重复多此一举了啊。这块又也是给个例子。
就是说嗯也是其实经过sting方式看我们有基本的一个base filter,对吧啊。然后上一个commonFFM。FFM的话,这时候我们需要那个啥呢?
它有一个inbedding层型的inbedding层。对他起来说就得到这个啥它稠命善亮了。啊。不需要我们再做这种类似的一个转换了。对于AFF的话,FFFFFM的话,对吧?我们那些内边特征?内边特征的。
哎,就数特征。呃,数特征多啊?说实的话,我们可以进行分层的这种形式,把它转换成类别特征了,对吧?类别特征。然后哎当这边成灯,然后经过in蔽一层。得到宠币商量。真死。哦。真是这种这种这种这种这种商量着。
처明的。Vor, this vector。嗯。O。用户实时特征,然后和我们经过模型得到一个预测一个新特征段得到的特征对吧拼接。其就说这是一个哎概率特征评级。继续。然后哎转化特征对吧?
加个新特征继续新特征继续就我们不断的去进行stkingstaking这种stking对吧?来得特征,然后不断再去微位入新的特征。对,这种话就是链入非常长啊,所以说在非常远古比较早的时候。对。
一般来说的话是按照呃等距和等平这两种方式啊。这块就要需要看数据分布了啊,数据分布啊。就比如说它这个属成这样的形式,就非常平缓。这种这种这种曲线的话,哎,我们使用这种等平可以了。
但是数据中可能就哎这块有一段数据,哎,突然没有了,这有段数据哎低一点的哎,又变非常高了啊。对,就说这种不规则非常不规则的时候,对吧?我非常断断断断续续的话,我们可以用等平的方式来来进行构造啊。
当然两种不确定哪种方式更好一些,需要我们去去尝试去选择。啊,这个是我们模型融合部分。OK接下来就是我们这个完整的一个呃对于这个赛题的一个解析。包括我们在遇到这个问题时,我们该如何去提取特征,对吧?
我们首先需要第一点是我们理解业务为业务上关键的,先理解业务。啊,基本的数据的一个了解,对吧?再往下的话就是我们。做一些相关的一些分析了。然后构造特征特征是非常。呃。非常重要的一个部分啊。
所以说我这块展开的也比较多的对,然后模型呢模型前面我用不同模型去保证后面的一个融合。对,叉GB。LGB。然后是FMFFM这种。对,然后最后的话就是我们如何进行融合。对。
当然呢还有一种还有一些我这块没有讲的,就是说特征我们做非常多,对吧?我们如何进行一个特征选择的对吧?对。嗯,相关性对吧?相关性选择的相关性对吧?走旋关系方式,然后。过滤过滤或者说用那种。
weper这种we这种方式,或者这有那种。弄嵌入方式的。啊,inbed这种方式。对,进程选择嗯。那先把这套这一路走下来。另外的话大家可以去关注一下,就是我呃。
代码不封化,我看看。
嗯,这是我之前参加这个比赛时候,对吧?比赛时候开源代码。对,就是我每个部分所做的一些工作啊,每个部分其实每个部分就分的非常细了,对吧?这其来说在工业界里中面。是也这样的,就是分的可能就是比我们这种。
更在的就是呃。负数更加更更加高一些。对啊。嗯,比如说我们基本的一些合并,然后系数特征我们该怎么处理,然后特征选择方式。对,然后系数特征2选择2长度retailCVR特征,我们该怎么去去进行构造的。
然后点击只是cl这种我们进行count统计,对吧?retail。我们每个部分的话,我都做了一个特征选择的。大家可以接下去下面去详细的去了解一下嗯,我建议来说对于这种经典赛事,对吧?对腾讯赛这种经典赛事。
嗯,从第一阶段,我觉得从第一阶到目前就是到第四季吧,一期到2020对吧?大家大家都可以去尝试复现一下对。复现大家复现一下思路。如果说想做,就是说做推荐广告这块的部分的话,都需要做一下呃进行一复现。
对它里面涉到业务也是非常多的,也非常经典的一些业务的啊。其实很多的一些很多一些公司,他们也会关注我关注这种比赛的,像腾讯赛这种在国内影响力比较大的对。
但都会想就是说从里面去汲取一些比较好的一些方案来运用到他们的场景里面的。来大有什么问题啊?你看三种话其来说就是经过我们已经筛选过的一个特征了,对吧?啊,因为我们在起来在提交代码的时候。
我们不需要去说再去将我们这个筛选过程再去再去跑一遍了,那非常费时间的啊,所以说我们进行这样的一个一个一个处理啊就行了。就比较简便的一个处理。啊。
啊看一下就是说CVI这我们该如何去进行构造的一个大家了解一下。大家有什么问题可以提问啊?是的是的,任何操作的吧,我觉得就是看模型线下效果了。这也是最直接的。嗯。因V来说的话,你位零特征是非常多的啊。
有时候你看似非常合理特征,但它和其他特征不兼容啊。对,没什么效果啊。你如果只是看哎特征,哎呀,很有说服力,对吧?它的解释性也非常强,但是呢但是最后放下去却没有效果,啊,这其来说就这特征。
就是我们就很难很难用啊这种这种特征。对。那其同学还有没有问题啊?乔同学。这个比赛来说话就是我看有第三名,然后第7名,然后第10名、第11名都有都有开源的对,大家下面的时候一定要去看一下。
因为他们可以用更多一些不一样的方式来解决问题啊,包括我没有讲这么说就是word director或者说deepwork这种我们从网络角度对吧?或从一些序列角度来去考虑一些特征的一些信息提取啊。
对这块是没有讲到的嗯。我们现在解决的话只是其中一一小部分了一小部分了。对,关键的话,你先考虑需要对用户一个召回的过程了啊,你的活跃用户非常非常多,也部可一块儿就是一一起建个模吧。对。
我们需要先去召回一批用户的一批感觉就是说具有一定的一定相关性的用用户用户,然后我们再进行建模,做一个嗯做一个最终的一个筛选匹配啊。同时呢就是说我们嗯要考究是说刚开始我们输的一些一些。
因为这里面也也存在个问题,就是说好像就是说这个数据里面就是说用户一个用户ID对吧?1个UID的话,它只对应1个。对应1个AID1个种子群,没有这种一对多的关系,这也是比赛当中的把他们做了一个处理,对吧?
就是简化这个比赛了,就简化这个业务了。对。全都是一对一这种关系啊,没有这种一对多的关系的这是做了一个优化的做了一个简化一个处理啊。嗯。嗯。这个661628这个提的问题非常多啊,我觉得非常好。
OK那我们今天的分享就到此结束。大家还有什么问题的话。
七月在线-深度学习集训营 第三期[2022] - P1:在线视频:03-深入理解CNN、RNN和LSTM - 程序员技术手札 - BV1gW4y1x7j7
世界上有很多的东西,生不带来。
死不带去,你能带走的只有自己和自己的脾气。
你曾拥有最美的爱情。
你听过最美的旋律。
触摸过一个人孤独的恐惧,也看到过最美的风景嗯。
我跌跌撞撞奔向你。
你也不能一个人离去。
我们在一起说过,无论如何,一起经历了风雨,安安静静的老去,嗯,世界上有很多的东西,对我们的这个权值和偏置进行一个调整,这就最简单的一个过程,那我们看看就根据假设啊,假设啊,假设你拿到的一个模型结构。
就是我们现在材料里面所描述的,你怎么样把它更加的形式化啊,画出图来好吗,那首先我们可以看到我们拿到的数据集,是t对吧,我们的特征数据,以及我们的每一个特征数据,上的一个标记啊,数据集上的标记。
这个地方我强调一点啊,强调一点,有黑体,有非黑体,黑体代表的是什么,而y是一个呃我们的分类标记,它是一个标量,这个地方强调一点啊,强调一点,读论文的时候一定要分清楚啊,哪些量是向量,甚至是矩阵。
哪些量是标量,哪些量是如果是向量的话,多少v如果是矩阵的话,是几乘几,为什么这么说呢,因为在原理的,比如说数学公式当中啊,数学公式里面是没有所谓的数据类型的,这个地方多说一点。
而我们在代码里面必须要明确地指定,每一个数据的数据类型,这就造成了一个困惑,这也是有同学可能会不太啊,有的时候不太觉得不太顺畅的地方在于啊,都是x,有的时候甚至这一这里也有x一堆,x都是都是什么东西啊。
分清楚,有的是向量啊,是一个数据结构,有的就是个标量,是个数值,那么在此我们拿到的数据集里面,x就是我们的一个特征向量,由n维特征所组成的一个特征向量,注意商标转置矩阵,转置向量。
把它11转成一个列向量,通常情况下哈,所有的向量哈都是列向量啊,这是默认的啊,这是默认的,然后呢,它是属于r n n维的实数空间,里面的一个像素点,这是关于x的说明,我们以分类问题为主啊。
以分类问题为主,它作为一个x的标记,但是呢通常情况下,我们需要把这个啊标量的标记类型,转化成一个所谓的one hot编码,这个我觉得大家都应该能够理解了是吧,转换成一个mv的一个one hot编码啊。
那这样的话我们就有了啊,一个从n维向mv空间的一个,映射的一个需求啊,这时候就是我们用全连接,的神经网络来做这个工作,那下面我们拿到的神经网络,我们知道啊,全链接的最少分三层,输入隐藏和输出啊。
细节的地方呢嗯多少会有一些就是差异性,就是你可能看这篇论文,看待一篇paper不太一样,那就以我们现在的材料为主啊,就以我们现在材料的为主,我们看一遍,我们过一遍,首先呢你可以看到啊,是作为第一层啊。
作为输入层第一层他要做哪些工作,做的工作很简单,存储在我们的a当中,aj当中啊,这就是一个从x向aj的一个输入过程,然后呢这是一个特征啊,一个维度一个维度的进行输入,那最后组合成我们的一个输入向量a啊。
这上面上标的一代表的是第一层啊,第一层从一嘛,第一层用商标来表示,那下面有个问题啊,就是这段啊数学描述,你怎么样把它画出来的问题,我觉得这个个人不同有不同的画法,但是我们可以简单一点,我们先看一下。
首先是首先我们是有特征数据x,那这样的话它是由x1 d为x2 ,d2 为d。二,一直到x n d n为,然后呢每一个是由a一的d为a一的,第二为d a点,由a一的dn维,来组成很简单。
他只是做了一个简单的复制工作,所以我们直接就可以把它进行一个赋值,所以,ok啊,现在啊大家可以看一下qq里面啊,把这个图已经发过去了,大家能看到吗,可以吗,那大家看看是不是简单的。
我就可以按照这样的一种形式化的方式,把刚才那两行数学部分,把它转换成一个图示的部分对吧,就是从x向a的一个输入过程,没问题吧,那我们继续哈,这个我觉得问题不大,我们继续,那第二层怎么办。
第二层第二层是所谓的隐藏,这个时候我们需施需要稍微停一下啊,稍微停一下,因为我们知道,前面我觉得大家应该很清楚的,就在于,神经网络当中最核心的元素,是所谓的神经元啊,由若干个神经元进行层的一个排列。
然后各个层之间进行连接所构成的权利,全连接的神经网络,那这个时候神经每一个神经元,其实就是我们前面的一个logist回归是吧,那这个关于罗杰斯的回归啊,可能知道,那个时候我就一直一直在强调。
逻辑回归应该是怎么画出那个图来是吧,画出那个图来,那这个时候我们就把那个神经元,一个一个的啊,安到我们整个的神经网络当中去,这就可以了,那怎么怎么去表示这个过程,我们看一下,那你其实可以看到哈。
首先我们是有一个呃,我们知道啊,在神经元当中有线性部分,有非线性部分,那首先我们需要处理的是线性部分是吧,首先处理的是线性部分,线性部分呢我们把它放到z2 当中去啊,放到z2 当中去。
z2 呢也是也是一个向量啊,也是第二层的一个线性部分,也是个向量,展开以后是z r1 z2 ,一直到z2 p,那这个时候其实我们也可以把它画个图上,画个图,z r e z r i点点一直到z2 p。
稍微等,是这样在qq里面发过去了,z2 p,那现在问题就是,我们现在需要建立的是,刚才在第一层所接收的那个a1 ,和,现在在第二层这个线性部分的z2 ,之间的数值关系,这个数值关系其实是有表述的是吧。
是有表述的是怎么来算的,它是在a一的输入的基础上,乘以相对应的全值,这个时候这个全值的概念,我们在啊逻辑回归当中是有的是吧,输入之后成全值,然后进行我们的累加和累加,其实你会发现这个表达式。
就是我们逻辑回归当中的线性部分嘛是吧,线性部分上一层的输入,然后,乘以全职进行一个累加加偏执,作为我们的线性部分问题啊,我们看一下a2 g,说明的是在a2 这个线性向量当中,的第j个元素当中。
假设我们这个时候a2 g在这,啊a2 d,因为我们知道呃g作为一个循环变量,它是代表的是从一到p当中的,任意一个位置是吧,假设我们就在那个位置上好吧,它是怎么计算得到的。
它是由a1 k乘上它所对应的全值,这个时候那个k是谁,k很显然是第一层输入的下标是吧,假设呢我们还在这a1 ,ak那么ak所对应的那个全职,就是所谓的w2 j k注意下标啊,特别是注意下标。
那个时候w是在这先发送出去啊,看一下w是在那个地方,有没有同学注意过这个,下标的顺序的问题啊,来如果稍微一听,有没有同学注意过这个问题啊,或者说是啊直播软件里面,你会发现这个这个下标是怎么定义的。
这个w的下标是双下标是吧,是谁在前,谁在后注意过吗,那我,可能需要稍微等,没问题啊,就稍微等,很好啊,后一层的下标再签,上一层的下标在后,所以你会发现w的下标还是w j k对,wj k这是细节的地方。
因为你后面做做反向推导的结构之后,就反过来了,所以怎么回事,这个一定要清楚这处理的哈,这处理的仅仅是一个啊,就是a e k和a2 j这个它们之间的连接,很显然前面有一个西格玛里加。
所以这个时候我们应该清楚的是哎,正好我我顺便问一下啊,正好我顺便问一下,a一和a2 g之间的,那个全职w下标应该怎么表示啊,应该是w j1 ,第二层都在前嘛是吧,那么a e n那个w应该是w什么w j。
嗯对很好啊,所以应该是长这样是吧,长成这样,那么不要忘了还有一个谁来着,还有他否定的那个什么,兜里加起来啊,兜里加起来,还有那个a2 g它所对应的那个偏执啊,这个地方,你就是记着还有偏执是吧。
这样的话我们就处理完了线性部分,就处理完了线性部分,那线性部分处理完了以后,你会发现每一个z部分都计算出来了,它的上一层的线性部分,那非线性部分怎么办,也很简单,就是把它所对应的线性部分。
进行一个非线性映射,通过ci的函数扔给我们的a2 j是吧,这个时候怎么办,那么它所对应的a2 j前面是a21 ,a22 ,第2。21直到a2 j,然后第2。1直到a2 p,那这个时候非线性映射肉出来。
就可以了啊,这样的话我们就完成了第二层,第二层所谓的隐藏,从第一层的输入开始,进行线性部分的累加和,然后进行非线性部分的映射,那好了,有了第二层的这个逻辑关系以后,我们继续往下看,第三层类似哈。
第三层类似,同样还是我们的线性部分以及非线性部分,线性部分呢还是以上一层,第二层的输入作为我的输出,作为我的输入,然后乘以所对应的权值就可以了,所以应该是什么。
应该是z31 z z32 点点一直到z3 k,然后呃z3 g一样,z3 g点点一直到z3 m啊,z3 ,m同样,其中有一个叫做前面是a2 k的一个向量,那全值还是那个问题啊,还是那个问题。
来我们看看那个qq上的截图哈,q上的截图你会发现还是那个问题,就是嗯就是呃我们把这个呃后一呃,后一项的这个呃非线性部分,然后一项的线性部分,要和前一项的这个呃输入,作为一个全职的一个连接。
这个连接还是什么,还是那样注意下标还是那个w g k,这个时候呢为了区别是哪一层的全职,所以这个时候我们用上标,w3 来进行表示啊,用w3 来进行表示,那这样的话呢我们就完成,了。
那我们就完成了从第二层,向第三层的线性部分的一个累加,这样的话还是那样,我们需要把它累加起来,累加起来,那同样非线性部分怎么办,同样所对应的a31 a32 ,a。a到a3 j一直到a3 m。
这个时候我们只需要相对应的,一个一个的做线性映射就可以了是吧,做线性映射就映射出去了,o,那这样的话,我们就完成了第二层的线性部分,以及非线性部分的计算,那第三部分怎么把,然后输出怎么办。
我们总需要有一个输出吗,输出也很简单哈,预测输出也很简单,就是把我们,的a3 g直接赋值给我们的预测输出,作为我们的预测输出就可以了,那这个时候你怎么把它画出来啊,你赋值嘛,你只需要一个一个的对应。
对应的特征维度上,进行一个赋值就可以了是吧,所以应该是y hat 1,y hat 2点点,一直到y hat m,这样的话一个一个的输出数据就可以了,那这样的话到此为止,到此为止,我们就完成了。
从输入端x一直到预测输出y的一个,前项的计算过程,那你会发现啊,你回过头去啊,你回过头去再看一下这一大段代码,第二层,第三层以及预测输出层啊,这一大段代码我们可以通过一个图啊,通过一个图把它画出来了。
有同学说你这个图也画的花里胡哨的是吧,也不是特别的幸福,但是你会发现,整个图当中的每一个符号部分,都表明了我们数学公式当中的一部分啊,虽然说可能会有些乱啊,没问题啊,我建议同学们啊。
我建议同学们就像这样,你回去以后碰到一个新的模型或者,网络的时候,回去以后找张白纸,找支笔啊,你看代码的,看原理的同时,甚至有后面我们可以看到你看代码的同时,你大脑当中。
或者你你随手就可以把这个图把它画出来,那画出来之后你会发现诶,有了图就更加的形象化,那这个图干什么用,一方面啊,我们可以前项计算完成了,那下面其实大家可以看到啊,可以看到对我们的反向传播的理解啊。
是有很大帮助的,是有很大帮助的,为什么这么说呢,一会儿我们再看一下关于这一部分,关于这一部分有什么问题吗,我们可以稍微一听,有没有问题的这一部分,可以吗,ok,好那我们就继续哈,那我们就继续。
那当然在这个过程当中呢,那个映射函数啊,那个非线性映射函数,我们在这个地方就是一个贸易的函数啊,这个我们常见了是吧,常见了知道就可以,但是需要注意一点的是,给当我们给出了函数形式以后。
我们认为这个函数就是被确定了是吧,一会儿后面我们说为什么强调这一点,那一会儿我们再说好了,那好了,我们继续往下啊,下面其实就是呃,就我们就我觉得就很很正常了,因为我们有了预测输出y hat。
有了预测输出y hat,那么还有它所对应的实际的输出y,那这样的时候免不了我的预测输出,和实际输出之间就是有差值,那出现了误差,那是太好的一种情况了,我们就是要根据这些误差去调整。
我们整个模型当中的参数w和b对吧,那这样的话我们定义所谓的损失函数,我们我们先用平方损失啊,我们先用平方损失,平方损失展开以后应该是这样对吧,每一个特征维度上的实际输出。
y i y j和预测输出为hg之间的差,值的平方进行一个累加,然后乘以1/2,这样的话每一个x来了以后,我都会计算出一个它所对应的一个误差,那这样的话,当我在数据集当中,进行了误差的累加。
就作为我整个数据集的误差,没问题吧,这个关于这个损失函数的定义,这个也应该问题不大,那好了,当我们完成了前项计算,当我们完成了损失的定义以后,下面我们就可以来完成所谓的反向计算了,反向计算了。
那我有一个问题啊,我有个问题,反向计算的目标到底是在干什么对吧,一定是这样哈,因为特别是细节部分很繁琐啊,你大脑当中需要记很多东西,但是千万不要忘了你的目标,这个脑子里面一定要时时刻刻揪着这根弦。
我到底在干啥,有的时候有些算法模型很复杂,特别到了细节部分你都进,就像进入一个迷宫一样啊,你都不知道,有的时候偶尔就会发现,哎哟我看了半天到底在干什么。
所以到此为止啊,我就有个问题想问一下大家,当我们完成了啊,前项计算,整个的神经网络结构我们构建起来了,图已经画出来了对吧,误差函数,损失函数我们也已经定义完了,下面,一步我们当然是所谓的反向计算。
误差的反向传播,那误差反向传播的目的到底是为什么,来谁能给我简单的介绍一下嘛,qq里或者说是直播软件里面,能能简单的111句话,或者半句话能说明一下,反向传播传播误差没问题是吧。
那他最终的目的到底是干什么,就是误差的反向传播以后,我们到底拿着这个误差,到底拿它有什么用啊,来咱咱们在群里或者说是qq里面,我们简单的说明一下,我希望因为直播的时候,我希望能够和大家稍微有一点互动啊。
但因为我需要看一下大家的一个反馈,的一个情况好吗,看到了ok,修改每层的w对每层的权重的梯度求对,ok嗯很不错啊,我们的目标其实很明确,就是通过我们对误差哈,通过对误差的累积。
然后传播所谓的嗯传播传播误差向前传播,然后有了误差啊,有了所谓的误差,我们就可以再进行偏导计算以后啊,进偏导计算以后,对我们的全职也好,还是偏执也好,进行一个更新了是吧,所谓的梯度下降嘛。
梯度下降的目标就是所谓的求偏导,然后呢根据偏导方向,我们不断的去减小我们的这个啊,有全职所造成的误差是吧,很好啊,ok好了,有了这个认识以后啊,目标大方向没问题,那下面我们就是一些具体的细节的计算的。
过程了是吧,那好了,首先引出上一个很很讨厌这个东西,就是所谓的误差的一个一个定义啊,德尔塔怎么怎么怎么怎么怎么出来的啊,就是它是呢我们的x的损失,对我们的z l的一个偏导值,被定义为我们的所谓的误差。
这个地方的l啊,这个地方的l你可以看到l等于二三,很显然这个地方是,我们只是在第二层和第三层上有误差,第一层层上是没有误差的,因为它是直接是一个传值的赋值是吧,传值赋值是没误差的,那这个时候很显然。
在第二层,隐层和第三层输出层上产生了误差,那每一层的误差呢,我们都定义为损失函数,对我们的线性部分的一个偏导值啊,就是所谓的误差,那这个时候我再问一下同学们,这个东西我们经常见啊,也很经典。
这个东西他又是个什么东西啊,啊我直接说结论啊,这个我直接说结论,他只是为了我们求解最后的梯度的时候,中间的一个数学量,或者说是一个中间的一个数学符号而已,能明白什么意思吧,就是说他其实你就可以把它认为。
就是后面我再求偏导的时候啊,我对w或者对b求,偏导的时候那个数学公式太长了啊,不不太就是不太好理解,也不太好考,考好计算,那这个时候中间有两个值,我把它单独先提前计算出来。
为后面的计算带来一定的计算上的,形式上的简便啊,就就只是而已,仅此而已好吗,那好了,既然我们可以看到啊,既然可以看到我们的误差分两层,第二层,第三层,那我们就每一层讨论一下,它的具体形式就可以了啊。
那我们先看第三层误差的反向传播,那一定是先从最后第三层开始是吧,一定是先从最最后第三层开始,那这个时候看先看第三层误,差怎么计算,因为上面是个定义啊,上面是直接是个复制定义。
然后我们直接把它求一下就可以了,那么看一下c x对z3 ,这样的一个偏导计算怎么求,那这个时候的球呢,唉结合了图,我们再看一下,结合的图,有的我们再看一下cx在哪,cx是我们的实际输出和预测输出的差值。
所以它一定是出现在最后一层,你可以认为是在这儿,然后呢z3 g在哪,z3 是第三层的线性部分,换个颜色啊,对吧哎画图的好处啊,就在这个地方就体现出来了,你可以看到误差是在最后那一层上。
z呢是在第三层的线性部分,你发现没发现他们两个挨着不挨着,他们两个不是直接挨着,中间还有个谁,中间还有个a a3 a3 ,第三层的那个非线性部分是吧,所以从这一点上你也可以看到。
我要从c x要对z3 进行求偏导,那这个时候我直接过去过不去了,那怎么办,中间还有个a嘛,踩着他不就过去了嘛,所以链式法则在这个地方的实用,是非常自然的对吧,你从图上去看,我对z求偏导。
我可以先对a求偏导,a带对z求偏导不就完了吗是吧,所以你会发现那就是这样来干的,所以我们先用c x对a3 g进行偏导计算,求出来之后再乘以a3 g,对z3 g的一个偏导计算链式法则吗,结合了图。
这不显而易见嘛是吧,那好了,就分别讨论一下这两个乘积部分就可以了,c x等于3g,因为他俩紧挨着一定是有数学上的关系的,我们稍微一放,a3 g和z3 g也是紧挨着的,他们也肯定是有数学上的关系对吧。
我们只需要建立这些量之间的数学表达式,我觉得求偏导这就不是问题了,你只需要用我们的分母,表征成上面的分子部分,然后求偏导不就完了吗,那我们先以这个为例啊,先以后面这一部分为例。
a3 g和z3 g之间什么关系,这个时候就需要找一下a3 g和z3 g,数学上的公式告诉我们,他们直接就是一个非线性映射部分,那我们要对z3 j行求导怎么办,直接不就对肉求导不就可以了吗,所以你会发现。
所以你会发现这一部分的求导计算,因为有了数学公式在这里帮忙,所以我们直接就可以表示成a3 z,对z3 z的求导就是容易到z3 g,这没问题吧,然后继续往下往前看,这一部分可能稍微复杂一点啊。
可能稍微复杂一点,我们把c x展开,因为我们前面看到了,有标准的这个在这儿啊,我们前面已经定义了c x的形式,我们把它展开展开以后,你就会发现诶这个里面有y j和y hg,好像和a还没什么太大关系。
但是不要忘了前面我们还有一点什么来着,往前倒哈,往下看,你会发现y hg和a3 g是不是相等的,换句话说你就可以把所有的y hg用a,3g进行替换了,所以这个时候你会发现我们展开以后。
这个地方的one hg其实就是a3 j那好了,这不就是函数表达式,对其中的一部分变量部分求偏求,求偏导不就可以了嘛是吧,这个时候我们可以看到,二提前1/2约掉,然后其中西格玛这一展开。
其中dj向上对a3 g进行求偏导,这个时候这是个常量啊,前面有个-1,所以下来以后是a3 g减去y j没问题吧,啊这个地方有个负号的一个交叉是吧,然后再乘以前面那一部分。
那么我们得到的不就是这个量吗,啊细节部分其实,就仅仅使用链式法则,但是这个链式法则在图上一结合,你会发现他在图上的一个结合,你就会发现,其实我原来是插了中间插了一个同学。
那我直接过不去怎么办,我先对a求偏导,a在对z求偏导不就完了吗,是吧好了,这是在最后一层上啊,这是在最后一层上,输入层,第三层上,那么同样的原理啊,同样的原理我们在处理第二层可以看到啊。
在第二层的误差上,它是这么定义的,是c x对z2 这的一个偏导计算,我们还是那个老问题啊,就你先看看你在哪儿,然后你要到哪儿去,然后你再,讨论我们怎么过去的问题好吧,cx在哪,刚才我们可以看到啊。
c x还是在最后是吧,cx还是在最后,麻烦就麻烦在这个z2 g在哪,z2 g啊,跑前面去了,来大家看看是不是这样一个在后面,一个在前面更更往前更往前,那怎么办,没问题啊,你就这么往前倒呗是吧。
你不链式法则告诉我们,我们顺着这个顺着这个逻辑链,我们一点一点的往前倒就可以了,所以呢圆是一点呢,其实我们可以看到,我们可以先对a1 a3 求变的a3 ,对z3 求偏导,z3 对a2 求偏导。
a2 对z2 求偏导是不是就过去了,但是呢,哎,因为我们刚才已经把误差已经往前推进了,一部分,已经推进到了cx对z2 z3 的一个偏导计,算,这个值我们已经知道了,那其实也就是往中间这个这一部分啊。
中间中间这一部分其实我们已经求完了,那我们可以从这个地方,作为我们的起始位置开始,再往前求不就可以了吗,中间又插了个谁,差了一个a r,你可以看到不就差了个a2 这一层吗,那同样还是链式法则告诉我们。
我们只需要从z3 到a2 求偏导,a2 对z2 求偏导,这不就完了吗,那结合的代码部分,我们先不管这个西格玛,先先不管前面这个呃sam我们先看后面这嗯,先处理一下前面这个c some。
处理下前面这个some这个sam什么意思啊,这个地方需要稍微讨论一下,就在于因为我们在前项的计算过程当中呃,是有一个累加过程的,是有累加计算的,换句话说,一部分的体现,它是通过反通过这个非线性映射部分。
然后再进行线性部分的累加得到的,所以这个时候呢,叫做全导数公式的一个东西啊,全导数公式,全导数公式告诉我们,当我们在处理刚才上述问题,就是说我们在进行反向,就我们在进行这个梯度。
这个这个偏导计算的过程当中,如果啊我们要求偏导的那个量,它之前依赖依赖了多少的量,我们都需要把它们进行一个累加啊,这个呢这个全导数公式呢,有兴趣的同学可以查一下好吗。
就说这个这个sam是要进行一个累加的,那这个时候我们分别看一下,后面这两个乘积,后面这两个乘积,其中啊其中这个c x对z3 的偏导计算,我们刚才已经完成了,所以这个地方是达尔的三,是已知,的了。
那麻烦就麻烦在在z3 对z2 的求偏导上,那怎么办,我们可以把还是那样把它展开嘛,展开看一下z3 等于什么,z3 等于什么,我们往前倒啊,找找z3 在哪,v3 在这儿,它在形式上是等于这个公式是吧。
那我把公式就落下来,公式公式就落下来,落下来之后是落到这样哎,注意点不太一样的地方在哪儿,有同学注意到了吗,哪儿不一样,有有同学能不能给我解释一下,这个地方为什么是w3 kg啊。
你有同学前面不是说诶不都是jk jk吗,这个地方怎么变成k j了,来我们还是稍微一,停啊,就是但凡是咱们稍微一停的地方,都是一些细节上,所以需要特别注意的地方好吗,那还是那样,谁能给我呃,简单说明一下。
咱们稍微一停好吗,就是问题啊,我再重复一遍,就是问题是,为什么在这个地方的公式里面,变成了w k j下标变成这个东西了,我稍微一等好吗,嗯同学们可以组织一下,因为这个可能稍微稍微稍微稍微。
嗯有同学传播的方向变了,下一层是k所以k在前对这个没问题啊,就是我们的反向传播之后,你会发现我们在前面的循环变量,是用k来表示的是吧,前面是循环变量是用k来表示的,那么很显然我们k是作为我们第三层的啊。
第三层那个循环下标,这个时候他应该是放在前面,它应该放在前面,而它所连接的上一层的那个下标,我们是用g来表示的,所以一定是w3 kg很好啊,这个细节部分一定要注意啊,为什么这么说啊,这个地方先说明一下。
就是说我们学到这么细节到底有什么用,对吧,有你应该知道啊,当你把所有的数学原理搞清楚以后,甚至你可以不借助框架来实现一个,全链接的神经网络啊,后面哈,就是我明天或者后天我稍微整理一下,给大家发一份啊。
你看一下你是不是仅依靠,比如像南派这种基本的组件数组,你自己手写一个全链接的神经网络,这样的话你感受一下,你学这些原理部分能够通过代码复现出来,你会发现哦,原来确实是啊,它是按照这么一个逻辑的计算好吗。
ok啊花回来啊,我们再回来好了,展开以后啊。
展开以后,那好了,我们需要对z2 g求求偏导,你会发现哎,z2 g已经出现在我们的公式当中了是吧,公式当中了,你你就把他这秋天倒呗,反正这个式子里面只有他带着,那这样的话,我们知道前面当中其中某一项啊。
适合这下标是一样的,所以前面作为一个系数啊,作为一个系数提出来,然后这个地方其中若要求一倒,然后是z r g,然后面乘一个a2 的3k就可以了,那这样的话第二层和第二层跨了一层的。
这误差我们也已经计算完了。
那前面我们两步啊,前面两步我们,完成了第三层的误差和第二层误差的计算,还是那个老问题,这两层的误差计算,仅仅是为了后面我们对w和对这个b啊,对我们的权值和偏置啊,求梯度的时候啊。
为了计算方便而计算出了这两个误差,而计算是两个误差,那我们看看这两个误差值怎么用,那就看一下,那么损失函数在隐藏层,第二层和输出层,第三层关于偏执的梯度计算啊,为什么这个地方第二层和第三层。
我们可以一块儿算,其实你通过上面的分析,你会发现这两层是有一个呃非常类似的,就是非常非常像的一个关,系都是在进行线性部分的累加,然后非线性部分的一个映射,所以呢我们可以从形式上一次。
把第二层和第三层的偏执,以及这个全职的表达式都可以写出来,我们看一下cx对b的一个偏执的梯度,我们可以表示成还是那老问题啊,还是那个老问题,链式法则嘛,我们先可以对z求偏导,然后z对z求偏导对吧。
然后呢我们可以看到cx对z的偏导值,我们前面的那个对偏导值,我们前面通过误差值,其实都已经计算出来了,不管你是第二层还是第三层,我cx无非就是对二和对2~3的问,题是吧,好这一部分计算完了。
那么下面我们需要处理的就是,z对y的偏导值计算,我们前面也见也可以看到哈,那我只需要把z展开啊,我只需要把线性部分展开,展开之后,会发现前面这一部分是没有和b没有关系,只有一个b那这样的话。
一求偏导就变成了几,变成了一,所以这个时候和前面的单差一乘,只剩下了所谓的误差部分,也就是说,不管你是第二层还是第三层的偏置计算,只和当前层的误差是相等的,好这是关于b的梯度部分。
那么同样关于w的梯度部分,那么同样还是用,链式法则,先对z求偏导,然后z对w求偏导,展开以后,展开以后,我们会发现我们在每一次啊,每一个循环过程当中只有一个啊,al减1k就是上一层的非线性部分和。
是作为我们的系数部分,我们只需要把它提出来,那和我们的这个误差部分进行一个乘积,也就可以了,那这样的话我们就完成了对我们的偏执,以及对我们的全职的一个梯度计算,那有了梯度以后。
我们就可以按照梯度方向进行一个收敛,对吧,直到循环结束,我们就可以找到整个参数空间里面,所谓的最优解的位置。
好吧,那这样我们看一下这个误差,反向传播算法啊,首先第一步输入实例x,然后呢为输入设置所对应的激活值a1 ,就是我们把x输到a里面对吧,x复制a然后呢前向传播过程,对于每一个l我们有两层。
一层一层一层输出层,分别计算它的线性部分,以及它的非线性部分啊,第二层线性部分,第二层的非线性部分,第三层的线性部分,第三层的非线性部分,这样的话我们就把a通过前项计算,传播到了输出层。
有了输出层次以后,我们反过来通过计算所谓的损失啊,计算我们的误差计算先,计算第三层的误差,然后计算第二层的误差,有了这两个误差以后,根据前面的分析,我们可以得到损失函数。
分别对偏导而偏执以及全职的梯度方向,然后我们有了梯度方向就可以进行收敛。
所以梯度下降了,这样的话就完成了哈,完成了我们刚才所说的从数学原理公式,像我们整个的图示的整个的映射过程,你会发现在整个的分析过程当中啊,在整个的分析过程当中,我们其实是借助了这个图对我们的一个帮,助。
对我们原理的一个理解啊,而且呢这个图里面每一个符号你画图的时,候你脑子里那根弦儿一定要绷紧了,它到底是哪个符号,这个符号到底是怎么来的,一定要和你的数学公式,一个一个的严格对应起来。
这样的话你在进行分析的时候,有图有公式啊,这样都对你的这个理解是有帮助的,好吧好,那这样的话关于这一部分,我觉得应该问题不大,那继续往下继续往下哎,有意思的地方在下面啊,有意思的地方在下面,其实在啊。
有没有同学注意到啊,其实有没有同学注意到,其实我有意的在进行误差,反向传播的过程当中,使,用了两种不同的符号体系来说明这个问题,哪两个不同的符号体系,你会发现在第一步里面,因为非常简单哈,因为非常简单。
直接是实力x输入到我们的a1 ,第一层里面去,所以你会发现在第一步的时候,我用的所有的x也好,a也好,都是什么东西啊,都是向量,而从第二步开始,第二步,第三步,第四步,第五步开始,所有的量都是什么量。
都是标量,是这样吗,是这样吗,同学们啊,也就是说啊,什么叫细节啊,就是你把所有的量都展成标量形式,那这个时,你都必须要一个一个非常的仔细,才可以仔细到什么程度,就像刚才那样,你画完图以后。
你的数学公式不一样啊,这是标量展开非常的细节的地方,只有这样啊,你再把它映射成代码才可能是可能的,能明白什么意思吧,你你你想划水,你划过去,你想糊弄过去,糊弄不过去啊,你这东西怎么糊弄啊。
你整个算法你全乱套了,那下面就有个问题啊,下面有个问题,我既然可以使用标量形式,描述我的一个算法,那我是不是可以使用抽象,层次更高的向量形式来表示我们的算法呢,当然是可能的,我们看下面啊。
看下面刚才是误差计算啊,刚才是误差计算,那我们现在把误差计算,整合到我们的梯度下降算法里面去了,而且呢在梯度算法里面,我们借助向量形式来表示我们的算法好吗,一会儿啊为什么要这样做啊。
一会儿为什么要这样做,你我们再解释啊,先看第一步,我们用向量形式来表示我们的梯度下降,算法怎么表示,我们看梯度下降算法,第一步输入训练集合,你就不管,然后呢,对每一个训练里面的实例x来可以发。
现这里的x就是一个向量x黑体的向量x,但是你脑子里边应该很清楚的,就在于这不是一个值,这是一个很长的特征,一个特征维度的向量,然后呢设置对应的输入,激活ax 1,它等于x,换句话说。
你可以认为是把x赋值到ax一里面,或者换句话说这个地方x你可以不要的话,就把它赋值给a1 ,就是把x复制为一向量之间的赋值,要对每一个维度的对应位置进行复制,然后并执行下面的步骤,什么步骤诶。
继续往下看,前项计算倾向计算其中的线性部分,我们可以表达成a z x l很显,然这个地方的l是从第二层开始,第二层,第三层一直到最后一层大l层是吧,注意这些也是一个什么,这也是个向量。
向量里面每一个元素啊,向量里面的每一个元素都是,按照我们的w l乘以a x l减一,因为我们知道从第二层开始,它的线性部分都是一上一层的非线性部分,a作为输入乘以什么乘以全值,再加上偏置。
只不过呢哎我把它写成一个向量形式,但是需要注意一点,这里的w不是个向量,而是个什么东西,20个矩阵,20个矩阵应该是大写的,w王应该是大写的w啊,是个,矩阵,然后呢线性部分完了以后。
非线性部分就是对线性部分的一个映射,这个时候直接对向量z,进行一个非线性计算,那其实也就是对每一个元素,进行非线性计算,这样的话从第二层开始,第二层,第三层,第四层一直可以传递到第最后一层,第l层。
那么同样我们继续往下误差怎么计算,误差的计算,前面其实公式也也看到了,首先是cx对我们的a啊,线性非线性部分求偏导,然后呢我们的的映射函数求一阶导,然后呢进行所谓的大号码机,就是对应元素乘积就可以了啊。
然后呢就是我,们的在第二层,第三层一直到啊,这是最后一层啊,这是最后一层,我们的误差,有了这个作为基础以后,有了最后一层的误差,作为基础以后,我们就可以按照我们前面啊,这个公式呢稍微复杂一点。
但是会对应一下前面是没问题的,就可以计算l减一层,l减二层,一直到第二层的逐层的误差,这个时候的误差啊,其实你会发现,全部都是使用的矩阵和向量形式来表示的,最后有了这个误差以后。
我们可以计算我们的所谓的,就可以求他的啊梯度,然后有了梯度,我们就可以计算我们的梯度的,一个收敛的方向,在原在原有的基础上,按照收敛方向进行一个全职和偏执的调整,就可以得到了,梯度下降,算法不复杂。
我相信大家可能也都理解,我想说明的就是你会发现同样一个问题啊,同样一个问题,我既可以使用标量形式来表示,也可以使用向量形式来表示,那这个东西有什么用,有什么用,稍微一等啊,来啊,回过头来看一下啊。
我们看看啊,这是我们通常会看到的这个,神经网络结构输入层,隐层,输出层,三层是吧,但是你会发现,嗯稍微我们一会儿我再讨论,讨论这个问题啊,那是经常我们会看到这种图,看到这种图的时候。
你脑子里边应该很清楚的是,这很显然是一个什么形式,标量形式还是向量形式,标量形式,就像刚才我们看到他希望能够展示出来的,都是一些细节地方,那么大家想一下,如果按照向量的形式来表示。
我们的整个的这个模型的话,你会发现这其实就是谁,我一会儿啊,一会儿一会儿发送出去,你会发现我画框的这块其实就是谁,是不是就是x那个向量,x只不过向量里面的每一个维度,都是其中的一个所谓的数据。
那中间这个是谁,最后这个又是谁,中间这个我们作为隐藏,我们可以把它认为是谁,是不是可以认为是a2 ,可以吧,最后这一层是作为输出层,我们可以把它认为是谁,a3 其实a3 就是等于我们的y hat嘛。
没问题吧,啊a啊,其实是我们强调一点的话,他应该是第二层的那个a,然后呢,后面这后面这后面这个向量,应该是第三层的那个a对吧好了,那么你你你你你如果有了x a2 a3 ,就是用y以后。
你再把这个图再画画,你看看你这个图最后变成什么样了,x输入到谁啊,计算得到a2 ,由a2 计算得到a3 ,由a3 得到y hat,其实a3 就是y hat,所以呢我们再简化一下,发出去啊。
我先把把它发出去,那你会发现我是不是,最后就变成这个东西了,由x得到a2 ,由a2 得到y hat,因为这个地方的这个a2 和a1 ,a2 和a3 其实已经没有区别了,用过hhit已经表示了。
所以来同学们,最后你会发现哇塞,这么复杂的一个所谓的全链接神经网络,最后我们得到了个什么东西啊,就得到这个东西,这也就是为什么啊,就今天我们啊从开始到现在,得到了一个非常重要的结论。
就是细节部分就会大家回去,自己再扣细节去啊,我们的目的就是,从原来发现这么复杂的一个神经网络,全链接的神经网络,发现我们就得到了一个这么点东西啊,但是你你你脑子里边应该清楚。
这个黄框当中的每一部分都非常复杂,x这个向量它有n为,你可以把它展开,a呢是呃a是个隐藏的计算结果,它其实是非线性部分,它前面还有第三作为第三层,它也是由呃非线性部分进行线性部分累加。
之后的一个非线性映射所得到的对吧,你可以你可以把它再再转回去啊,啊你可以把它再展回去,但是这个东西啊,x a,然后是y hat,就这个东西以后啊,就是我稍微听,以后你会发现唉它就长这样了啊。
全链接的神经网络啊,全链接的人工神经网络就长就长这样,那好了,从这开始哈,我们稍微歪个楼啊,稍微歪个楼,你看一下啊,你你你自己看一下,你你你你自己想想,这是什么意思,同学们能想明白什么意思了吗。
稍微歪个楼啊,两分钟一会儿,我们其实这是这,这今天你会发现。
就这不就这不就是什么东西啊。
就是r我们费了半天劲哈,我们费了半天劲,你会发现,当你能够能够很自然地,把全链接的人工神经网络,抽象成所谓的向量表示形式以后,你在上面随非常非常随意的啊,画一条曲线,就从一个全连接神经网络。
非常自然的过渡到了循环神经网络,r n好吧,这就是今天啊。
我的目的其实就在这儿啊,我的目的就在这儿,核心细节的部分我们已经抠啊,就前面全链接已经扣完了,后面我们得到了这么个东西,那我们再把一些量啊标注上去啊,把一些量标注上去,比如说我们从x向a的输入。
我们用w来表示,然后呢这是全职啊,全职用w表示,然后呢a到y呢,我们用比如说我们用v来表示,然后a到a的自己呢,我们用u来表示,就是那个全职啊矩阵全值矩阵,那这样的话啊,一个rn就出来了。
一玩儿就出来了,但是还是那老问题啊,还是那个老问题,这这这是个r啊,但是非常非常复杂,你还需要你能够把这个向量形式,有点类似于什么呢,大家有大家应该有应该有常识啊,就是咱家的那个咱家那个绳子啊。
绳子是一根儿,但是是一鼓一鼓的,由若干股拧成的一根绳子,它才结实,非常类似于我们现在的这种场景啊,这个神经网络啊,你虽然看到的是由向量所表征的一条直线,一个一个一个一个一个一个一个线段。
但是呢这个线段是由n多条啊,连接关系所组成的一个关系,那你想想你在这么在这复杂的结果上,你再加上一个自己指向自己的结构,你怎么把它还原回去啊,一会儿我们再讨论这个问题好吗啊,我们先挖个楼再回来啊。
再回来,关于全战机的人工神经网络呢,我们可以做如下的一些改进哈,做,如下的一些改进啊,第一点改进损失函数,前面我们定义的损失函数适用的平方损失,然后呢我们更常用的是所谓的交叉商啊,更常用的是交叉商。
所以我觉得这也不是问题啊,关于交叉熵的定义我们应该常见了啊,这是第一点改进,第二点改进呢就是加上正则化项啊,加上正则化项l一或者l2 ,怎么加公式摆在这个地方,还是那个问题啊,自己抠一下细节。
到底这个正动画像是怎么加进来的,好吧,这是关于这个这个怎么说,就是损失函数的改进,第三点就是激活函数啊,第三点激活函,数我们在刚才的介绍当中,几乎函数用的是sigmoid是吧。
现在哈关于激活函数有大量的改进方法,a rule,然后你要soft soft,max等等的,这种这种各种各样的这种激活函数的,这个呃改进啊,这是第三点,第四点呢是关于全职初始化啊。
因为我们知道在一开始的时候,其实我们神经网络当中的全职是没有,是没有值的啊,这个时候需要面临着初始化的问题,那初始化怎么办呢,我们我们这个经验值经验值,我们要求他啊满足一个所谓的一个呃分布。
然后这个分布呢,按照这个计算就可以得到了啊,这是,个经验值啊,这是个经验值就可以了好了,我们从嗯一开课到现在啊,我们简单的回顾一下这一段,这一段就是我们引入了所谓的全链接的,神经网络的一个原理。
部分的一个细节分析啊,回去以后啊,我非常建议大家抽出一点时间,结合了咱们的课件啊,拿着张笔,拿着张纸,拿着纸笔,自己根据这个公式把图画出来,这是第一步啊,有公式有图第一步,然后呢画完图以后,画完图以后。
你再把公式,我别看这公式啊,你都跟看着图把公式再画出来,你这个过程啊一次两次都很溜了,你的原理就没,问题了啊,然后呢模型结构里面无非就是正向计算,反向传播,那反向传播里面定义完损失函数以后。
关于误差的定义啊,误差的定义呢使用到了链式法则,稍微有一点坑啊,就是在于所谓的那个全导数公式,全导数公式,全导数公式里面,说明的就是我们在求偏导的时候,我们影响到当前偏导量计算的时候。
所有的量都需要进行一个累加,就在这个地方啊,看一下公式里面的这个这个说明,然后还有一个问题,不要忘了我们求两个误差,德尔塔不是为了求他们,而是因为它作为我们整个对,偏执和全职的呃。
导数计算过程当中的一个中间结果而已,要你我们可以把它提前计算出来,再对我们进行偏导和全职计算的过程当中,会使用到这两个值好吗,然后呢呃算法啊,算法的向量化表示,以及算法的向量化表示啊,这又是一个问题。
就是今天有两个映射哈,第一个映射就是原理到图的映射,第二个映射就是向量表示到呃,标量表示向向量表示的映射,当然也需要返回去,向量表示向标量表示的映射,你都得非常六啊,有了向量表示以后。
你再把向量表示映射成图,你会发现对吧,很复杂的问题已经抽象,非常抽象程度很高了对吧,这几个问题的转化都很重要,改进刚才已经简单说了,就不讨论了,好吧好了,我们第一个阶段啊。
就今天关于全链接的人工神经网络,这一部分呢,我们先告一个段落啊,我们休息中间休息五分钟,我们到7~9点到09:15,我们下一部分开始循环神经网络好吧,有什么问题,这一段时间我们也可以。
中间也可以交流一下啊,啊有什么问题我们也可以讨论一下,嗯,趁这段时间有有有需要休息一下的,也没问题好吧,明后天我把代码发给大家啊,你可以敲一遍,过一遍练练手,嗯对啊,我上次我记得我说要回去查一下的。
我应该是查了,但是没有带到北京来,然后然后嗯周末吧,周末我回去的时候再看一下好吗,这个问题我记得好的,全链接的神经网络,是不是与mlp同一个概念,是的啊,这是个老,这是个遗留问题啊,这是个遗留问题。
m l p呢全称是啊,mlp是只有一个隐藏的dn吧,啊这些概念呢大家嗯怎么说呢,就是因为你同学们对它的发展过程,可能不太了解,所以有些概念呢你不能说是混着用了,就是用的时候就不那么的准确。
m l p叫做多层感知机对吧,多层感知机为什么当年要起这个名字呢,是因为当年感知机是个很火的一个概念,为了蹭热点啊,为了蹭热点,就引入了所谓的多层感知机这个概念,其实呢它和感知机没太大关系。
其实你就认为就是全链接的神,经网络就是所谓的mp好吧,这是一个m l p是只有一个隐藏的dn吧,是这样啊,m l p呢其实嗯不是m l p啊,就是全链接的人工神经网络呢,其实你可以看到啊。
你可以把它嗯横向的扩展到很多的层,刚才其实也可以看到呃,你可以有两层,可以有三层,甚至可以有n层,这都没有问题,但是呢数学上有一个叫做叫做什么呢,叫做啊,我印象里面叫做叫做就好像就逼近定理。
就是呃可以证明哈,可以证明再复杂的函数啊,很多的前提条件啊,前前提条件很多,什么可导呀,什么什么什么连续啊,我记不太清楚了,就说再复杂的函数,也可以仅使用三层的全连接神经网络,进行任意精度的拟合。
所以呢你可以把层数全链接啊,我只是说了全链接,你可以把全链接的人工神经网络,设计成很多层,但是没有必要啊,理论上对啊,对万能进是万能b进四还是万能必进啊,我记不太清楚了,所以我也可以查一下。
理论上证明的是说,你你五层的这个近似能力,和三层的近似能力其实是其实是一样的,但是呢那那从这个角度上你会发现,其实我们就没有必要再设计那么多层了,对吧,而且你层,数多了嗯。
还有这个所谓的梯度消失的问题对吧,所以我们就基本上在最开始的,比如说最开始啊,就在前几之前,关于全年级的人工神经网络,它就是三层啊,输入隐层输出,因为他在理论上来说。
已经证明这个任意精度都可以进行拟合了,但是啊你往往就是说它存在这个呃,所谓的最优解啊,但是你不一定找得到啊,这是一个另外一个话题啊,就是存在啊,你可以任意精度拟合,但是你并不一定那个参数你找得到啊。
这是技术上的一个困难好吗,嗯另外一点呢这个,mlp和dn啊,就是深度神经网络呢,其实我觉得还是有区别的,就是我们经常会把全链接的这种事情,网络仅仅是作为,其实不太好把它作为深度网络。
对它只是作为最后一层我们进行,不管是进行分类也好啊,你其实大家可以看到啊,就像我们的cn,我们的cn其实是在最后那一部分,进行完了特征,前面进行完了特征提取之后,在最后一层进行所谓的这个分类对吧。
所以单独的拿出来呢,是这样,哎对刚才你这个问题我觉得很好啊,就是那为什么还在不断的探索,深层次的神经网络,对啊我觉得这是好问题啊,什么问题什么意思呢,到底在干什么,我不知道同学们学了这么多时间了。
到底在干什么,就是你说前面我们已经搞定了三层网络,任意逼近,那你还搞四层干啥还搞,现在弄弄弄不弄就就几百层是吧,我们到底在干什么,对特征提取这是关键,以前我们为什么为什么以前不叫端到端啊。
因为以前我们是把整个的过程,拆成了几个阶段,通过人工的方式,你比如说cn之前啊,我们各种各样的什么边缘特征提取,各种各样的那种奇奇怪怪的一些一些计算,然后最后把特征提取出来了,扔给全站界。
但是现在呢我们就干脆不让干了啊,什么特征提取啊,是不是搞不懂,那怎么办,人给整个的网络,有网络进行特征的提取和预训练,然后最后再交给你,像像这种全链接的神经网络在做,在做分类也好啊,再做会不会也好啊。
是这么一个逻辑好吗,复杂网络需要非常多的神经元嗯这倒是啊,我们其实你可以看到啊,就是,之前我们做项目的时候,其实我们为了为了讲的,其实不能说讲笑话,就是为了复杂而复杂,我们因为因为你模型复杂了以后。
你显得你工作的这个这个这个怎么说,工作的投入量比较大吧,特别是给甲方做做讨论的时候,所以有的时候这个也是需要一点技巧啊,这不就不多说了好吧,ok嗯嗯,那我们回来哈,ok我们回来。
ok那我们就嗯嗯正式的开始,我们下一部分就是关于循环神经网络,什么是循环神经网络,其实刚才我们已经简单的分析到了,就是,这是我们前面的全链接,现在你会发现全链接神经网络,我们只需要这样画。
大家都应该达成共识,它应该长什么样,然后每一部分的细节,计算部分都应该很清楚了,是这样吗,我们在全链接的神经网络的基础上,做一个调整,做什么调整呢,所谓的循环神经网络其实,嗯,其实就是这样。
我们只是在所谓的隐藏层的一部分,我们引出一个啊指向自己的一个连接啊,指向自己的一个连接,这就是循环神经网络就完了没没了,这就是情怀型网络,但是当然细节部分怎么办,扣我们的原理部分。
那么下面你会发现代码部分,要不是那个原理部分又很复杂,还是能看这个图哈,还是看这个图,因为有了循环,那就不是一步,那你是不是按照这些步,你可以把整个的模型结构再展开呢,这就是今天为什么我们说一直强调。
一直强调,你你你你画完,图以后对你的帮助,有没有同学能试着对吧,看到这个红色箭头了是吗,你试着能不能从这个黄色的这个,这个结构当中推一下,能够把它展开一下,它应该怎么办,因为我刚才说过。
循环是分步骤的是吧,你会发现当前隐藏层的输出输出给了y,不仅仅是输出给了y啊,当前隐藏层s的输出啊,不仅仅是输出给了y,而且更重要的是他还输出了给了谁,更重要的是他叔叔的给他自己,而且这个很显然输入啊。
输输入进来以后,我需要影响到下一次的输出,是这样吗,但是呢是分步骤是分步的,就是一步两步啊,这就是所谓的引入所谓的时间的一个概念,假设举例子啊,假设我们在第t减一部,x t减一部作为输入输入到了s里面。
当然这个时候的s也是s t减一。
然后呢相对应的输出到了y y也是t减一,那大家想一想,在下一个时刻或者下一步当中,dt步xt作为输入进来以后那个s t,大家看看是不是应该长这样,看看这个图啊,看看这个图,对吧,在上一步t减一步。
然后呢计算得到了s t减一,然后呢输出给了y t减一,然后呢再d txt输入进来以后,然后呢得到了s t,s t呢不光是由xt来所决定的,还是由谁啊,还有这个s t减一所决定。
然后再进行一个y t的一个输出,然后这个过程一直会怎么样,比如说下一步应该是谁了,x t加一作为输入输入进来之后,那个s t加一不光是由xt加一所决定,还由上一步的那个s t所所决定,然后y t加一。
当然哈当然等等等,大家想想是不是应该长这样了,对吧我们现在啊现在你看模型复杂了吧,从原来是一根线啊,原来是一根一线全链接,然后现在呢找了一个回头线啊,回头线呢构成了循环结构。
把我们把循环结构再把它按照时间序列,会按照布展开,就构成了一个一个的神经网络啊,千万不要忘了再提个醒,这个图里面的每一根线都不是标量,而都是向量,向量都是由n维的组成的,如果你感兴趣啊。
如果你闲得实在是没事干,找张大一点的纸,你把它画一下,你看看那个连接结构有多复杂,但是我们有了向量表示形式以后,再结合这图示这种抽象层次以后,你会发现对我们的理解还是有帮助的,当然这上面的全职啊。
我们做一下定义,我们我们回过头来,回过头来,再看一下这个这个数学表达形式啊,数学表达形式,那你看有的图,你是不是能够从图上,再把数学表达形式再写回来啊,这也是一个能力啊,这也是一个能力来看看。
首先我们得到的是什么,我们首先得到的是数据集,数据集还是xt和y t嗯,还是那样,xt是我们前面这个向量x t,这里的y t直接就写出了向量形式了啊,直接就是向量形式,然后从一到大t的不管。
然后其中t时刻的输入数据xt是n维的,是n维的,然后呢t时刻的输出y t是个mv的啊,也就是说在我们图当中的,每一个输入都是由n都是个n维向量,每一个输出y都是一个mv的向量,然后呢再往下模型啊。
模型就是这么定义的,你看看你能不能啊,你能不能结合这图,结合着公式把它搞清楚,来我们看看啊,首先我们看一下x t乘以w,输入x t乘以它所对应的权值矩阵w,那我们看看在图当中。
我们在图中找找w应该在哪儿找找,稍微等w应该在这儿,我,发出去啊,w是不是应该在这儿x t乘以w,然后往上走是吧,往上走,按说哈按说如果在全链接里面,如果在全链接的神经网络里面。
s t是不是就直接等于xt w乘以xt了,当然再再加偏执,我们收音,这不管是吧,那现在呢还没有完,除了在t时刻我受到xt的影响之外,还受到上一个时刻s t减一的影响,所以你会发现在公式当中啊。
在公式的线性部分啊,在公式的线性部分,除了w乘以xt之外,还有一个u乘以一个x减一,那你告诉我这个又是谁,或者又在哪儿,又在哪u注意啊,是s t减,一乘以一个u是吧,又是在这又在这儿,我一会发出去。
又在那个地方,s t减又乘以x减,一加上w乘以xt啊,再加上偏置b啊,再加上偏置b作为当前时刻s的线性部分,然后再进行再进行一个非线性映射啊,得到s然后s我们知道了啊,s t在这。
然后s t s t乘以v,然后再加上c作为我输出的线性部分,再通过softmax的非线性映射,得到我所对应的y,所以这个地方s t的系数全职系数全职取,这样是位在这儿,对吧。
同学们如果把它划到前面那个里面去啊,画到前面里面去,x所对应的是w,然后呢呃s t减一所对应的是u,然后s t所对应的是v,对吧,应该长这样啊,长这样,但是每一个都不再是标量,而是向量和矩阵了啊。
但是形式上它就是你会发现诶,这个形式虽然模型我们觉得更复杂了,但是形式上要比我们全链接的形式,简单多了对吧,其中我们分别看一下,其中输入层到隐藏层的权值是w,输入层x向隐藏层st t的全职是w。
这个没问题是吧,然后呢t时刻啊,t时刻隐藏层的输出s t啊,t 10个也是也是t,也是我们的这个lv的是吧,然后呢,从t减一时刻,到t 10克的隐藏层的权值是右t减一时刻。
就是上一个时刻到我,当前时刻的全职是又又在哪儿,又在这儿上,一个时刻的s t乘以u,作为我线性部分的一部分,然后呢隐藏层的偏执就是b嘛,隐藏层的圈子就是b,然后呢隐藏层的集中函数可以可以选择。
我们的smode a u都可以是吧,然后呢从隐藏层到输出层的全职是v,从隐藏层到输出层的全职是v在这,然后输出层的偏置是c啊,输出层的激活函数sigmoid,就是我们的软最大就可以了。
那这样的话这是我们的数学公式啊,然后我们的图,这样的话我们就可以对应起,来了是吧,就可以对应起来了,那好了,到此为止,到此为止,稍微一停,有什么问题吗,我觉得应该是后面的训练过程当中。
自己对自己的一个要求啊,你你今后你碰到的模型,这才是刚开始的r n,这还是小儿科的复杂程度,你想想,如果你碰到更加复杂的那那一坨东西,如果你还用标准形式,基本上你就不能处处理复处理这个问题了。
特别是你比如说现在像那种bt模型,然后transformer甚至都不要了,那个attention啊,注意力机制以后,你这么复杂的模型,你必须要通过这种抽象形式来,表示出来啊,又为w分别都是几乘几的啊。
这是个好问题啊,都是几乘几的,你不是他们自己所决定的,你会发现它是和什么相关的,就是先先解决第一个问题啊,先解决第一个问题啊,几乘几的是由谁决定的吧,这是个好问题啊,我们先分析一下u a w都是几乘几。
它它是由谁决定的,x值和x相关吗,不要忘了啊,一会儿我们我们先讨论这个问题啊,我觉得这个这个问题和x相关没问题,他只和x相关吗,这个w不要忘了它是一个矩阵是吧,它这个矩阵是几乘几的,你刚才也提到了。
只和x相关吗,还和谁相关,对它和隐藏层是不是也相关,所以说啊你要确定它是几乘几的,其实不用问我,你你只要你只要看公式就可以了,他肯定是和x相关,这是肯定铁定没问题的,不要忘了它乘完了以后。
做非线性映射出去以后,它是和隐藏层是不是相关对吧,还是那个问题啊,就是啊我上网上找啊,不是网上找一张图,往上找哪张图啊,把它找出来啊,画了这么多图啊,我建议其实大家可以把它稍微存嗯,这个吧,这个挺好。
不知道怎么分享出去呢,发转发都是自然发生,已发送回去,来看看看看这张图,看看这张图里面是不是有w,没问题吧,是有w吧,这个w是几乘几的,他和谁有关,它和我们上一层的输出有关。
和本层的线性部分谁是不是也有关,所以这个你只需要数清楚,每一层到底是几个,是不是它的下标就清楚了啊,这个问题很好,你可以自己先解决啊,如果还有问题,我们在群里讨论好吗,这个问题先先交给交给你。
你其实你自己数数,我觉得应该没问题啊,我们再看其他问题啊,对smode呢这个应试函数啊,要我看看,下面有些问题都是关于映射函数的问题了,是吧,倒不是嗯倒不是不能用,是因为我们通过分析啊。
就是现在大量的做了分析以后,发现一些传统的英式函数嗯,有很多问题,有些问题,比如说就像梯度消失这种问题啊,因为他的表演c贸易,它的激活区其实到了到了到了饱和区以后,它其实每一次的梯度。
计算的量都非常非常有限,即使到了最后基本上就不再更新了,所以呢我们就设计了新的一些技术啊,激活函数啊,就是这样,就是因为啊对,为什么呢,其实你会发现rn引入了这个时间维度以后,它的层数是非常多的对吧。
它的层数会非常多的,直接导致了一个问题,就是梯度消失啊,就是到最后直接梯度就不动了,就死在那个地方啊,就是因为这些机构函数,它的这个呃这个饱和区嗯,没有办法再进行这个梯度的更新了。
那这个时候我们就大量的换个新的,机构函数上,ok s t的维度是我们定义的吧,对s t作为隐藏层,这些都是我们自己定义的,懂吗,这个rn就是一个神经元,这个结论是怎么得到的呢,这个我不是特别同意。
好吧嗯,我们可以有问题,我们可以讨论一下,就是你是怎么认为rm是一个神经元呢,你会发现它的整个模型结构是非常复杂的,我觉得是不是这个原因,有可能我觉得,嗯我们我们继续往下啊,我们继续往下。
有问题我们再讨论行吗,其实哈其实大家可以看到啊,当我们模型定义完了以后,看我们的材料啊,当我们模型定义完成以后,其实我们其实就可以完成所谓的,前项计算了对吧,同学们,因为数学公式摆在这个地方。
你给我一个x,我乘以w,然后呢我乘以上一个时刻的u,然后加上全是b进行非线性映射,就是s t,有了s t乘以v加上c做非线性映射,就是y t,当然其中的w u v,b和c作为我们的全职和呃。
这个偏置和全职我们都是先先初始化一遍,那这样的话不管初始化生多少,我至少是可以进行前项计算了对吧,有了公式,前向计算就都不是问题了,麻烦就麻烦在什么上,也就是误差的反向计算过程当中去。
这是rn最麻烦的地方,那我们首先看一下啊,首先看一下目标函数,这个时候呢,我们的目标函数一般就是交叉商啊,一般我们就采用所谓的交叉熵函数,再往上注意我们还是那样问题,有的时候复杂,你需要确定目标。
我们现在到底要干什么,当我们进行了前项计算过程以后,现在我们的所有的权值和偏置,都是随机初始化的,那些值都不靠谱,所以造成的误差会非常大,下面我们的工作就是通过反向传播算法,要对所有的参数。
分别求它的偏那个,分别求他们的梯度,然后按照梯度方向进行收敛计算就可以了,所以下面的工作啊,所以下面的工作我们最优化目标,使我们的误差要最小,使误差最小,我们就采用了所谓的还是梯度向量法。
那么在梯度下降法当中,就需要对刚才那五个啊,五个可以认为五参数分别求它的梯度方向,如果梯度方向都求出来了,我们就随机梯度下降法就可以解出来了,实际上这目标啊目标一定不要错。
但是呢你会发现,现在的问题就比刚才所谓的全链接的问题,要复杂一些了啊,为什么复杂一些呢,因为我们前面只碰到了两个两个w啊,第二层的w和第三层的w两个偏置,b2 和b3 啊,第二层和第三层的偏置。
那么现在呢因为我们有了一个啊,从隐藏层引向指向自己的这么一个连接啊,这么一个连接,所以这个时候我们还多了一个谁多,了一个u啊,多了一个u,这就是为什么我们现在不是四个还是五个。
最核心的就是在这个u的偏导计算上,其他的几个呢都很好啊,不是说都很好吧,至少都好,都是很正,就是我们之前都处理完了,唯一一个就是中间这个u自己指向,自己怎么去算好吗啊,这还这还这还是那下面的地方。
还是就是秋空,就是细节部分了,就是细节部分了,我们继续啊,我们继续,因为我们,因为我们,因为我们刚才给出的这个模型部分啊,因为我们刚才给出的模型部分,直接就是从x直接计算出了y啊,计算机,计算计算除外。
中间关于线性部分和非线性部分连续了,所以并没有严格的划分,哪一部分是线性部分,哪一部分是非线性部分对吧,你有有印象的同学,我们可以看到在我们全链接的过程当中,我们非常严格的划分为了z就是线性部分。
a就是非线性部分对吧,但是呢在循环神经网络r里面呢,我们就没这样做啊,我们把它统一到一个公式里面,这样更简洁一些,可以吗,我把刚才的内容再稍微重复一遍啊,是这样,严格的区分了线性部分和非线性部分对吧。
但是呢为了简洁一些呢,我们在rn里面就没有这样做,我们把它直接统一到了,可以吗,现在,嗯我做个测试啊,1234512345,可以了吗,可以了,ok我们继续啊,老虎不吃面,非要吃排骨是吧,ok嗯。
到哪了啊,我们刚才说啊,在全链接的神经网络当中,我们严格的划分了非线性部分和线性部分,而在rn当中呢,为了形式上简洁哈,因为你学的多了嘛,所以这个部分就没有再强调,但是呢很显然你会发现呃。
非线性部分和线性部分的划分,对我们进行误差的计算啊,就是那些偏导的计算还是有帮助的,所以呢一上来我们还是定义一些符号,定义一些符号,首先我们定义o t,o t呢其实就是v乘以s t加c。
我们看看这个部分在哪,v乘以s t加c是在哪,v乘以s t加c,在这v乘以s t加c,换句话说我们在隐藏层之后啊,就是输出层那一部分,我们把它的线性部分定义成了o t好吧,就是输出层的线性部分。
我们用ot来进行表示,那么在ot的我们对ot的一个误差,定义呢是损失函数对ot的一个偏导,对o t的偏导,我们就是这样来定义的啊,就来定义的,我再重复一遍,我们把输出层为什么是o啊。
就是输出层的线性部分用ot来进行定义,然后呢在ot上我们进行一个误差的计算,它被定义为损失函数对ot的一个偏导值,还是那样,你会发现这个定义的,没什么,就是为什么为什么,就是他就是这样来定义好吗。
定义了这两个值以后,我们就可以计算一下,我们首先把看看这个o t上的误差,能不能表示出来,o t上的误差呢,就是损失函数对o t的偏导啊,嗯那还是按照链式法则啊,就是这个时候可能还是画画图啊。
画画图这个时候啊在哪来着,这是xt,然后往上是s t,然后再往上是i t对,ok那我把它发出去,发出去啊,这是我们已经把他啃没完啊,这个这个这个是这样,循环神经网络,那我问一下同学们。
ot在哪能找到他在哪吗,在这个图上很显然看不太清楚是吧,o t在哪,o t在我们,我们可以把这个y t稍微再再查一下,他应该是在y的前面啊,对是对,但是这个前后看看看看参照系是吧对啊。
就是呃如果我们要上下划的话,他应该是在y的下面对吧,就是前一步,我们需要先把ot这个线性部分计算出来,然后再进行一个soft soft max的一个飞行映射,才能得到mt。
所以它大体上应该是在这个位置上是吧,他在这现在呢因为中间还有一个嗯,ok那他在这个地方我我我我我们可以看到,那他这样的话,我们的这个这个怎么说,就是还是嗯求偏导,那这个时候的偏导。
我们会发现我们的e t c塔,是在最后我们计算出来的误差,那这样说,我们要对o t进行求偏导,对其实呃呃不是不是是不是c有毛病,是我们soft max,你可以看到啊,来看这儿。
看这儿y t是不是就是就是soft max o t吗,啊这个偏执啊,o t加c啊,o t加等,看看看看那o t定义o t加c对,就是o t啊,就是y t等于soft max o t没问题啊,是这样。
不是你那个写的写的写的是个贸易,也不是soft max啊,啊到哪了到哪了,到这那还是那样,我们直接求求不过来,先求谁先对外t求,然后外t对o踢球,这样的话,我们就可以借助我们的链式法则就可以了,是吧。
那我们知道etc塔对y t求偏导,有了这个所谓的怎么说呃,损失函数以后,我们损失函数对外地求偏导,因为所y het是作为损失函数当中一部分,不管是交叉熵也好,还是还是你的平方损失也好,我总能求出来。
然后呢后面y t对t求偏导,其实就是smax一导o t这个没问题吧,ok那这样的话,dt o t我们是可以表示出来的,好吧,还是那样,它只是个中间量啊,中间量继续往下,那下面就开始那五个偏导。
我们就一个一个的求败,一关一关的过呗,看下面啊,第一步,目标函数ec它关于从隐藏层到输出层,全职v的梯度,从隐藏层到输出层位,隐藏层到输出层位,位是在往前倒倒,上位在你看看v在哪位在哪,v在v在这点。
看到图了,位在哪位,在我们连接的是我们的s和y,其实是靠近我们的这个输出层,是这一层的偏导值怎么算,我觉得这个有前面的套路了,应该问题不大吧,首先需要稍微注意一点啊,稍微注意一点。
这个ec它是在整个数据集上的误差,所以呢在前面做了个累加和,就是每一个数据过来以后,每一个x过来以后,我都是计算了一个误差,然后进行一个累加,这个问题不大,这个问题不大。
然后呢sm sum提前就变成了一个元素对位,对位的一个偏导,那这个时候怎么办,还是那个老问题啊,还是老问题,我们对位求我们看看v在哪啊,刚才看到了v在哪,v在v在这儿,它是它其实是我们的这个啊,怎么说。
就是我们的线性部分的一,就是线性部分里面的一部分,就是ot的一部分,我们知道这个这一部分是o t,o t的一部分是吧,那这个时候我们还是得记住链式法则,我们怎么办。
先e t对t求o t对位球是不是就可以了,e t对o t求,我们刚才是不是已经已经搞定了,就前面这个式子,然后呢o t对位求o t对位,求o t对位求,我们看看o t ot是这个式子。
然后最最为求是不是剩下的s t是这样,我觉得这一部分是搞得定的啊,搞得定的,其实从后往前还没跳层,我觉得这都问题不大好了,对c的偏执,我觉得这也不是问题啊,这也不是问题,怎么说,还是那个老问题。
先对o t求o t对c求,然后只剩下了一个误差部分啊,因为你会发现它靠着误差进,所以它只只需要做一点啊,链式法则求导就ok了,这都不是问题啊,我觉得这个不是问题,麻烦就麻烦在下面好,我们继续往下。
德尔塔,s t呢被定义为是e t对s t的偏导,那我们求求这个东西呗,e t对s t还是那个问题啊,你还是看图看图,e t在哪,s t在哪,还是画个图啊,还是画图在图上都找不着。
在哪1t在这稍微得e t在这,s t在这儿发过去啊,你会发现这就跳的有点远了是吧,就跳的有点远了啊,跳的再远也不晚,因为中间还隔了一个o t,所以我们可以借助它作为一个跳板,还是链式法则。
可以先用e e t对t求ot,在对s t求是吧,同样啊,我们看看e t对s t求等于e t对t求,然后ot对s t求偏导,首先前面这一部分刚才已经处理掉了,o t对s t求,我们看看啊。
o t对s t求,这是o t对s t求,剩下的就是v吧是吧,那这个表达式也已经也已经出来了啊,这个表达式已经出来了,那好了,继续往下,还是那个老问题啊,所有的灯塔都是中间量,只是求出来放在这儿用。
用的时候我们直接滴了过来就可以了,那继续往下啊,这是个麻烦的东西,最麻烦的就在这儿,目标函数e theta,关于从t减一时刻隐藏层,到t时刻隐藏层的全职u的梯度,又在哪儿,又在这儿,稍微等啊。
啊这是个麻烦的,现在我们跨过千山万水啊,跨过千山万水,不是往直接往回求,求了一个带循环的一个右上了,要对它求偏导,这东西怎么弄,来吧我们继续看啊,看代码,看代码这个东西呢还是那样,把累加的csm提前。
不管,它其实就是etc的对u的一个偏导值计算,这东西呢这个求和不管继续看中间这一坨,先先看两眼啊,先看两眼再说,先看两眼再说,那好了,我们刚才已经把这个德尔塔s t求出来了,他是e t对s t的求导。
那我们可以看到sk哪有sk啊,没有sk吧,哪有s k s t,k有k k稍微一等啊,对这个k先稍微一放啊,这个k先稍微一放,我们先我们先对这是个仔细看了啊,我们现在这样,我先稍微放啊,到哪儿了啊。
到这啊,我我们一看又要又又又要跨过千山万水,那这样的话我们先从e到s t,然后s t对u套路嘛都是一样的,求偏导的套路,我就顺着这个条件一直往下求,好像很正常,好像很正常,但是麻烦就麻烦。
在我们到s t的时候会发现了一个问题,什么问题呢,s t不光是和当前这个时刻有关,s t是不是还和上一个时刻有关,你会发现这个s t啊,你会发现它是它是转转圈的,就是s t不光是就是得到s7 的时候。
我们知道它不光是和x相关,还是和黑,还是还是和我们的s t减一相关,那st减一又和谁相关,s t减一是不是又和s t减二相关,s t减二又和s t减三相关,直接往后倒,我们前面讲到过,讲到过上一次。
就刚才上一节课,我们讲到那个全链接的时候,讲的出现过这个问题,就是所谓的什么全导数公式还还有印象吗,对变量求偏导的时候,影响当前变量的所有的因素,我们都需要考虑到,那这个时候我们都需要把啊。
就像刚才那个问题啊,就是e t对s t求偏导,这没问题,s t要对s k求偏导,这个k是谁,这个k就是我们之前所累积的上一个时刻,上上一个时刻再上,再上上一课,直到那个第一个时刻。
那些st所累积的那些量能明白意思吧,这些量都是需要进行一个累加和的,全导数公式是这样来定义的,然后sk在对u进行一个求偏导好吧,那这三个量哈,这三个量其中第一个量我们已经嗯啊,为什么是加哈。
全导数公式就是让来定义的,这是数学上的东西,嗯,你可以可以可以查一下,所以呢你会发现你仔细看一下,你会发现这个k这个下标啊,k的循环是从一开始一直到谁,一直到小t小t不就是当前时刻吗。
也就是说我需要从第一个时刻开始,倒到第七个时刻啊,达到当前这个时刻不是不是dt的时刻,倒到当前这个时刻啊,因为当前时刻就是t所以到了t对吧好了,这是关于这一部分啊,这三个量呢,这三个量。
第一个量我们刚才已经通过s德尔塔,s t已经搞定了,已经搞定了,放在这儿了,麻烦就麻烦在啊讨厌啊,就在这个地方,这个s t,要对s k就看到大家想一想,这个地方想两分钟,想两分钟。
s是当前时刻的st没问题,这个sk啊,因为它前面有一个领夹呀,你想想这个s k是个什么东西,因为它是从第一个时刻到第七个时刻,没问题吧,那你说我s t分别要对dt减一个时刻,求偏导,对t t减20克。
求偏导,t减三,求偏导,t减四,求偏导,一直到第一个时刻求偏导没问题吧,啊而且呢你会发现,而且他们是一个什么关系啊,是不是一个垒成的关系啊,是不是一个不断的在里程的关系。
那你想想我每一次是不是都在当前时,刻对下一个时刻都在求偏导,你看我s t对s k求偏导,那么s k是不是还有他的上一个时刻,他的上一个时刻,是不是也是sk对sk减一求偏导。
那么sk减一还有它的一个上的一个时刻,还是这样进行一个链式求导的一个过程,那把这个过程呢再把它通过循环的形式,就不再是个累加,而变成一个累成了,嗯嗯嗯是这样的嗯,s5 怎么对s3 就变到。
我们可以借助s4 吧对吧,我们先对s4 求偏导,s4 可以对s3 求偏导吧,因为正义两个零相邻的时间,我偏导值是可以计算出来的,中间我不管隔多远,我只需要一步一步,借助中间的那些量是不是都可以求出来。
所以你会发现,中间这个地方才是一个里程吗,才是一个类型的关系啊,这是这是非常重要的一个理解啊,就是说啊,这是这就是循环神经网络的,最核心的一个地方啊,就这两行啊,就这两行公式。
第一行公式的求和是全导数公式,第二行公式,这个累加是在于,我s t要对一到t当中的任意一个时刻,都需要求偏导,而一到t这个时刻呢,t。一是和我相邻,所以我直接可以求偏导就可以了。
就像刚才这个同学提出了这个很好的问题,这个s4 s5 怎么对s3 求偏导啊,中间隔了一个,那怎么办,那不就是s5 相对s4 求偏导,s 10再对s3 求偏导,这样的话s5 对s3 的偏导。
我是不是就求出来了,那我有一个问题,那么s5 对s一怎么求偏导,那同样的道理就是s5 先对s4 ,s4 对s2 ,s2 对s1 ,中间把所有的偏导值进行一个里程,是不是结果就出来了。
所以这个累乘的符号啊,为什么,这是从k加一开始到t的,原因也就在此,好吧,这些细节啊,就是说还是那样需要需要一点时间啊,需要一点这个这个投入一点精力去去去,去分析一下。
你从s t要对前面一到t的任意一个时刻,都需要把偏导值去计算出来,那任意一个偏导值呢,我都可以把它拆分成中间介入,借助中间变量的偏导值的里程体现出来,这就是这其实就是链式法则,这一段是链式法则。
就是这个里程是链式法则来,的这个c个冒号是全导出公式来的好吧,那么最后一步,sk到u的偏导值计算就放在这个地方了,其实呢所以说实在的sk是个向量,又是一个矩阵,这还是矩阵论里面啊,需要讨论这个问题。
需要需要深入的去讨论问题,你怎么去定义向量对矩阵的偏导值计算啊,这个我们今天就不展开讲了啊,有兴趣的同学呢,查一下那个矩阵论,里面是有挺挺挺多的讨论的,好吧好了,这两行这两行啊,我回去好好琢磨琢磨。
有什么问题咱在群里讨论好吧,那有了这这继续往下啊,继续往下,我觉得前面都,没问题啊,sg对sj减一是个什么东西,往前倒哈,sg对sj减一在哪啊,ok你可以认为s j在这,s j减一在这。
你会发现它们两个之间,是有数值上的公司联系的是吧,那怎么能够从他对sj减1000求偏导,无非就是先对它求一下,求一下导,然后再再对它求下导嘛,只不过呢这里边又有向量,又有矩阵,那这个时候呢。
数据上告诉我们求出来之后是什么东西啊,这是个对角矩阵啊,这是个对角矩阵,但是和我们刚才分析的是一样的,你无非就是先对sd减一求一档,就那个非线性函数求极导,然后再,对右乘起来就可以了是吧。
只不过呢这个时候矩阵要转一个,要做一个转化,这个地方的肉,求出来之后是一个对角线矩阵,那么至于为什么还是那样,矩阵论里面有详细的讨论这个地方,今天我们就不展开了,那不管怎么样,我们得到这个表达式以后。
你会发现在整个这个表达式里面,所有的量啊,所有的量都是已知量啊,所有的量都是在正向计算过程当中,都已经求出来的量,所以这个时候我们就可以把当前时刻,关于u的偏导值计算出来了好吧。
那么同样同样下面关于w和b的是类,似的啊,是类似的,我们稍微看一下啊,稍微看一下,首先看看w在哪,w在哪,w在哪,w在这是吧,我1e c它要要对w求偏导,然后呢其实你会发现w的位置和右的位置。
其实是其实是一样的位置,其实是一样的位置,你不过就是一个一个是x的这个这个全值,一个是s t减一的全职嘛,所以你会发现它的整个的求导过程,和对u的求导过程是非常非常类似的,其实你都可以认为是一样的啊。
只不过仔细一点还是那样,我要跳好几层啊,我要直接对w求偏导,还是呢我看w在哪,用用另外一个颜色w应该在这,w在这儿说,所以你会发现我直接跳还是跳不过来,那怎么办,还是先对嗯,还还还是先对s t求偏导。
s t再对w求偏导,但是中间还是那个老问题,一旦牵扯到s t,它都是在都是在循环的,所以你需要把s t处理完了之后,才能再对w求偏导,所以中间的执行过程,和我们对u的执行过程是一样的。
那同样对b的执行过程也是一样的好吧,所以这两步呢回去自己看一下,可以自己看一下,这样的话,我们关于循环rn的这个正向计算,和反向误差计算,也就算是介绍完了,也就算是介绍完了。
有有同学可能会敏锐的发现有个问题,什么问题中间注意过有一个很大的计算量,在里程上发现了是吧,反向的计算一旦出现累成,马上第一反应就会出现什么问题,梯度消失误差小时啊都一样是吧,你累成,然后你小数点0。
1乘完全就没有了,换句话说啊,我们通过分析啊,通过分析,如果我们把刚才哈定义的这个量啊,定义成一个所谓的小伽马,然后呢我们知道对它的一个里程啊,最后发现对他的一个里程,这个量会得到这个式子。
如果啊如果伽马的谱半径大于一,就是你可以认为就是绝对值大于一,我们可以得到它这个式子越长越大,就所谓的梯度爆炸,如果这个这个式子刚刚的谱半径小于一,这个式子趋近于零,那就是梯度消失,这种循环神经网络啊。
他虽然说是能够提取所谓的时间特征,但是这个时间特征的提取呢非常有限,因为一旦时间长了,要么就梯度爆炸,要么就梯度消失,那怎么办,其实也很好办啊,我只需要严格的要求他的谱半径等于一。
1x1x1这东西就总好了吧,换句话说我只是只需要保证所谓的对,只需要保证它所谓的线性部分,不要它的非线性部分了,那这事不就好办了嘛,但话又说回来,如果你把非线性部分取消掉了。
那他就不能够体现出这种非线性映射的,这个能力了是吧,它只能处理线性问题,那这个时候怎么办,那好了,我引入一个新的状态c,用这个c来保留它的线性部分,然后呢,用s t来进行它的非线性映射部分的计算。
这样的话其实这是作为一个桥梁啊,有兴趣的同学读论文的时候,你会发,现中间其实从rn到l s t m,中间其实有大量的工作,就是大人们在大量的实验,就是说改改这行不行啊,改改那儿行不行啊,为什么啊。
就反正是想就是想到的,想不到的都是最后发现哎,顺着这个思路会发现,我们就可以引入所谓的门控机制或者,门线机制,来完成,所谓的l s t m长短期记忆神经网络,它很复杂啊,它复杂到这个程度。
所谓的三个门遗忘门,但是我们稍微分析一下啊,稍微分析一下三个门,所谓的遗忘门也是线性部分的累加,进行飞行映射,换句话说你可以认为它就是一,个神经元没问题吧,线性部分的累加非线性部分的映射。
我可以保证某些量通过,不就是这样吗,那么同样输入门也是线性部分的累加,非线性部分的一个应用设,使某些数据输入过去,使某些输入数据就就没有了,同样同样啊输出门也是这样来设计的,换句话说啊。
就是l o s t m,之所以它的这个时间特征的提取的优势,就在于它允许部分数据通过,因为我们知道我们随着,这个累加量的不断的积累,这个量会越来越大,或者会越来越小,那这样的话。
我只需要有针对性的把一些信息记住,有针对性的把一些信息就遗忘掉,没价值的就不记了,那这样的话我整个的时间序列的特征,提取的就更加的准确,那就构建了所谓的l o s t m,限于时间原因啊,介于时间原因。
l s t m的反向传播是一个,更复杂的过程大家可以想象得到,就是直rn都已经长这样了,你看看这一坨公式,在这个复杂结构下反向传播应该长什么样,更恐怖哈,说一下要求啊,说一下要求,首先呢第一步。
同学们先在当前的公式情况下,结合着今天我们将教讲的这种方法,你先把这个模型的正向计算过程,通过图示的方法自己看看能不能画得出来,如果画出来的同学在在群里啊,你你截个图发出来,咱们可以一块讨论谁画的好。
谁画的不好,哪些有问题,哪些没有问题,我们可以一块讨论,这作为一个小作业啊,在画图回去以后,这一坨这一坨就是l s tm,你先把它的正向计算过程先画出来啊,反向计算呢我就不建议大家看了,那些东西更鬼畜。
那有兴趣的同学可以看一眼好吧,如果有兴趣咱们可以再讨论,但是我觉得这个东西看时间吧好不好,ok啊我们今天啊回过头来我们顺一遍啊,我们顺一遍今天的内容,今天的内容说实在的没有什么新东西啊,在我看来。
这没有什么都不是,都不是你拿过什么新东西啊,都是同学们现在都已经应该掌握的,非常熟练的东西,只不过今天我们过一遍的目的,是介绍这种方法,带来帮助,能明白了吧,咱这每堂课哈不是为了学这些东西啊。
这东西还用学吗,这不是这些东西还应该现在学嘛,你们应该搞的非常溜了才可以的,只是呢看一下今后你应该模型怎么学好吧,这是端正目标,然后呢在端正目标的同时,我们讲到了几个关于就是几个工具的使用。
第一个工具啊,第一个工具就是模型的标量化展开,这种展开,助的,因为它已经细节到每一个量是和数值了,他已经没有任何的再划分的余地了,他就是到了,你可以认为到了原子层面上了是吧,只有当你对这个标量形式。
都搞得非常清楚的时候,你下面就可以做另外一个工作,做什么工作,你因为你原理都用通了,所以你直接可以不借助任何的框架,手写一遍神经网络模型啊,第二个作业啊,第二个作业嗯,我把代码给大家,你先把它跑通了。
自己理解了,我觉得就ok了,有什么问题咱们在群里讨论好吗,就是留了第二个作业啊,那么回到我们这里面来,就是标量展开形式,标量展开形式的优点就在于它的细节部分,但是细节特别多。
对我们的理解造成了很大的困惑,那再怎么办,把它图示化出来啊,把它图示画画出来,画成每一个符号,就是数学上的每一个标点符号,你都不在图上把它画出来,一个个的严格映射出来。
这样的话在后面你才发现求偏导的时候,分母上在哪,中间怎么过去,至少有这个图,总比你说这么一堆符号,你上哪儿找去是吧,c x在最后是误差,w在前面啊,w2 是第二层的隐藏,的这个全职,那中间隔了若干层。
怎么办,想办法一层一层的往前推推过来了,ok没问题了,所以呢第二个映射啊,第二个工具就是图示啊,就是图示,然后再往下再往下标量,形式很好,有细节,但是不够抽象,细节太复杂,当我们处处理更复杂问题的时候。
就没办法处理了,人的大脑处理毕竟有限是吧,那怎么办,向量化表示向量化表示把它抽象成向量,把它抽象成矩阵啊,你会发现我们前面画,再把这个矩阵形式画成图,你你比较一下,你会发现它就很简单了。
但是你脑子里的印象应该很清楚,他,其实是展开更复杂,有了这两个工具以后,标量化的形式图以后,相对来说啊,相对来说啊,就效率可能会提高一点,你像像rn这种东西,无非就是在隐藏层上引出一个。
指向自己的结构吗,然后后面还是那样求偏导,谁在哪,谁在哪,找清楚位置啊,找清楚位置,求偏导,仔细一些,我觉得问题都不大,无非就是链式法则和全导入公式,这两个工具使用熟了就没问题了,当然最后我们分析一点。
因为它存在所谓的梯度爆炸和梯度消失,就是因为累成哈,中间累成怎么办,我们就引,出了所谓的l s p这个东西啊,工具先放在那个公式先放在这儿啊,把图画出来啊,有问题我们再讨论好吧,ok今天我们的内容呢。
大体上是这么多的内容啊,留了两个作业啊,留了两个作业,一个把rs tm的图画出来,第二个把代码调通跑通,如果你调通跑通了,或者说有的同学,你觉得诶,我自己是不是现在就可以自己动手,自己写一下也可以。
也没问题啊,嗯都可以,但是你需要把这个工作做完,了解一下它的底层实现,那话说回来啊,话说回来,我知道同学们现在已经开始使用框架,解决一些,很复杂的问题了啊,但是呢在这个过程当中,关于框架的使用。
我非常建议同学们啊,就是详细的去一些基础组件啊,一些基础组件,详细的去读一下它的a p i啊,这个跑不了啊,嗯有的同学说诶我我就代码调通了,调通了原理还是不理解为什么,就是因为他的抽象层次更高对吧。
一个刚才有同学提到了一个r n c,要下去参数一设置哦,好像rn就出来了,但是它是一个网络啊,它是一个神经元,它是个什么东西,而且后面这个sl还有很多什么l s t m,什么双向l s t m。
什么一坨一坨的,东西到底是个什么东西,在app当中都有详细的介绍,原理不清楚是因为你这个抽象层次太高,中间缺了好多层,所以你就不能够理解他到底在干什么,把这个过程补起来啊。
当然并不一定要求你像今天所说的这么细,都展成标量,没这个也没,咱也没这个能力去处理这么复杂的问题啊,抽象之间啊,缺少缺少一些关键的东西,所以你造成了你对原理的这个理解,可能会有些问题,好吧ok啊。
我啰嗦了不少啊,我啰嗦了不少,我们呢可能如果我们再留出一,点时间来,比如说十分钟我们可以再讨论一下,有什么问题的话,我们可以在现在讨论一下好吗,今天我要讲的内容大体上就是这么多,好不好,ok啊。
我们可以再讨论一会儿,有什么问题的话,就是特别是基础性的工作,还是要把它搞清楚,嗯我觉得是这样,就是l s t m的反向求导呢,一定不会在面试的时候问,如果他问,我觉得有一点出生的啊。
这个rn呢我觉得可能偶尔会问道,至少我在面试的时候会偶尔提一句,这个东西,特别是刚才所说的就是那个核心的问题,比如说为什么rn会出现所谓的梯度消失,或者梯度爆炸,它一定会讲到反向传播的时候。
再进行循环垒成的时候会造成这个问题,那为什么会循环里程,他这一系列我们就都引出来了对吧,所以呢这个嗯,至少我理解i s t m的反向求导,不会作为要求,感觉矩阵求导这一块挺难的。
其实我觉得不是要看你怎么定义难了,就是我认为这个难呢可能是繁琐嗯,你说这东西就是数据结构,因为它数据结构挺复杂是吧,要么是矩阵,要么是向量弄一弄,就各种一坨一坨的方向的地方,所以呢我觉得倒不一定是。
就需要细心去分析一个你要矩阵里面对吧,横竖坐标的每一个位置对,比,如说向量求导的时候的每一个位置的求导,仔细一点,我觉得都不是问题,你我个人觉得不好说的,是难更难的还更多啊。
等着同学们的更难的问题更多好吧,后面可能会讲到lp的部分是吧,特别是现在同学们,可以沿着rn这个这条线啊,可以沿着这条线啊,这个往往往后倒,往后倒,你比如说有了r i n以后有i s t m,然后呢。
这是我们在比如说时间序列特征提取上,一个很好的工作了,但是后面我们有有sequence to quence,然后有attention,然后有transformer,然后有bt,然后有g pg。
然后有g p t two等等等等等等,其实这都是一条线嘛,就是把时间序列上的提取过程,所以呢这是刚刚开始好吧,刚刚开始,特别是到了后面更复杂的模型结构了,你特别是需要仔细一些啊。
就是要在草稿纸上细细的推,那你需要碰到的呃,就是一些仔细嘛,这都没什么问题,需要耐心啊,lp部分不是我讲好吗,嗯应该是有其他的老师来负责,这部分的内容,当然如果有什么问题的话,我们可以讨论。
这都不是问题,就是我觉得嗯这都不是事对吧,有的人有的人什么心里想,幸亏不是卡酱是吧,我觉得这也挺好,开个玩笑啊,但是这这这没什么问题,对代码我会给大家嗯,今天是没有时间了,嗯明天吧,明天啊。
明天上午我在北理工,我争取明天给大家发出来好吗啊,明天我给大家给大家发嗯,那个代码哈,我非常建议大家,结合着今天全连接神经网络的计算流程,手敲一遍,你能够感受一下,神经网络到底在细节部分的执行过程。
至少我我觉得我敲完敲完以后,对我当时对神经网络的理解是有帮助的,因为现在我们有了工具,特别是工具带来的一些问题,就在于很多的困惑,就是我们好像把握的不是那么的深刻是吧,对直十合了,南派就是高位数组。
有什么问题吗,我没get到你的问题是什么,啊这其实是个好问题啊,就是,怎么说呢,嗯到了越往后发展呢,嗯更多的不再是从模型的角度上去,梳理这个线索和脉络,更多的呢可能是从应用角度上去,梳理这些线索。
比如说我做目标检测,它的一个这一个方向啊,这这就是凸面恢复,因为后面的专业方向会越分越细,所以呢你需要针对某一个方向去梳理,这一个方向的发展脉络,因为你不可能啊,即使是cv方向对吧。
你你你也不可能说我我都输了一遍,基本上不可能,你说你只能说我在比如说目标检测方向上,我怎么去梳理一下它的发展的一个脉络啊,呃这是可能的嗯,怎么梳理啊,我觉得这个就是嗯一点一点的去看,一点一点的去摸索。
当然如果有有经验,就比如说你可以向像赛文老师啊,或者像其他的嗯老师都可以去请教嘛,我觉得每一个方向都有很多的很好的工作,嗯同学们还有什么问题吗,如果没有什么问题的话,我们就可以先呃,今天到这儿可以吗。
好的谢谢各位同学们,那么我们今天就到这儿,还是那样,我觉得这只是开始有什么问题的话,我们可以在群里进行充分的沟通和讨论,嗯,我我我我给大家稍微提点意见啊和建议啊,就是好像咱们的群不是特别活跃啊对吧。
还是大家有什么问题,咱们及时沟通好吗,好多说两句哈,我们在群里再聊吧好吧。
七月在线-深度学习集训营 第三期[2022] - P2:在线视频:02-神经网络压缩技术:工业界业务上线.部署的大杀器! - 程序员技术手札 - BV1gW4y1x7j7
我们先开始上课喽,那各位同学大家啊,晚上好,我是在问老师,然后呃今天呢是我们的第三次课程,然后在前天和昨天的时间,我们分别去跟大家讨论了,神经网络,以及这个卷积神经网络这么一个呃。
呃大体的这么一个结构啊,当然当中我们还是分享了非常多的一,些小的细节,比如说对这个线性分类器的位置,对整机神经网络的future的这么一个呃,物理的意义的这么一个理解。
我们也给了神经网络训练时候的这些啊,实际调参的这么一个,逻辑的这么一个判断的这么一个准则,并且呢我们也给了,昨天也给了这么一个,图像分类的这么一个啊案例啊,帮助大家去尽快的熟悉起来。
然后为后面的这样一个呃,大的这么一个作业或者实训,来做铺垫,这个昨天和今天的课程,其实啊相对来说,至少赛文老师觉得啊,从我的这样一个从业的就是人员角度来说,以及我的这样一个教学经验的这么一个呃。
角度来说,应该是相对来说会比较啊基础的啊,我不知道大家的感受会怎么样啊,希望大家都能够跟得上,那从今天开始呢,啊我们的这样一个内容,就会直面这样一个更这么一个,更有深度的这样一个内容啊。
比如说我们昨天和前天的课程,也会有一些啊这样一个两门的基础课程,但是从今天开始呢,其实啊非常多的内容我们都会要啊,卖的更加的深了,因为我们的title我们的名字对吧,同学们,深三的同学。
尤其在今天的课程啊,今天的课程内容啊,不会出现在其他任何的培训班里面,只有我们会讲,因为这次的topic我跟大家再三强调过了,是我们这个啊工业界,工业界啊非常实用的这门技术啊,一点都不花哨。
就是每一个项目要落地,要上线部署的时候,我们都要走这个流程啊,都要走这一步,那我们来看一下今天我们的内容,做这个啊神经网络的这么一个结构的压缩。
ok我们先来看一下这个啊,神经网络的这样一个压缩,或者说啊一个轻量级的这么一个神经网络,会有什么样的这么一个motivation的提出啊,事实上是这样,有同学问lp通用吗,通用其实它也是通用。
就是只要是神经网络结构,它其实就是通用的啊,只不过在cv领域,我们会显得更加的这么一个重要,因为很多时候我们面对的这样的一个,项目的这么一个场景啊,其实会面向在这种高性能计算,在手机上等等。
这些需要用到的这么一个环境,至于n o p似乎没有说一定是啊,像cv这样需求来得这么强好吧,啊这位同学是不是对lp这个非常有兴趣了,好我们继续,嗯那事实上来说可以这样,通常来说我们的模型。
尤其是在modivision领域,像我们上次讲了vg g net啊,还有一些rene还等等的这些大模型,对不对,动动不动就是几百兆的这么一个model上来,那几百兆的这么一个model,这么大的参数。
其实在这个运算起来啊,其实有gpu的帮助,其实也是非常吃力的,对不对,更何况如果到时候你要去做这个啊,线上的这样一个部署啊,或者我们这样一个手机端的这么一个运算,其实都会有非常大的问题。
这里给了一个这样一个啊表格呢,其实说的是什么样的事情呢,这个表格其实说的就是说,sorry,拿纸笔出来这只表,这张表格其实说的就是说,我们把bgg net这样,你的网络结构用不同的这样一个显卡啊。
去跑了一遍,然后呢,啊给出他的这么一个运行的这么一个时间,效率的这么一个参数,然后最后一个呢,我们还给了这么一个cpu的这么一个时间啊,可以看到它的这么一个预测的时间,几乎是大概在三秒钟左右。
那有同学会说,为什么我还会这里给出一个cpu的,这么一个时间呢,是这样,尽管我们在训练的时候,我们作为算法的从业人员,可以在我们的gpu上来进行大量的训练,这是没,有任何任何问题的,对不对啊。
这是我们的这样一个工具,但是在线上部署的时候有这么一个考虑,就是假设我们需要做大规模的,线上的部署的时候,其实在当前的这么一个结构环境中,尤其是工业界中,从性价比的角度来说。
其实cpu部署其实来说会来得更加的性价比,更加的高啊,也就是说我们的这样一个部署的成本,要相对来说低的很多,所以即使在现在的这么一个大厂,互联网的这样一个,随机的这么一个大厂来说,很多的这样一个业务。
我们还是会倾向于部署的时候,用大规模的,比如说上几十台的这么一个cpu的这样一个,计算的机型去部署啊,这是啊真实的这么一个情况,所以如果是这样的一个情况下,我们很难去把这种几秒钟的这么一个啊。
一次的这么一个呃运算的这么一个model,去部署大规模的这样一个上限,所以这个时候通常我们会面临两种选择,第一种选择就是,你就不要用这样一个大模型来做,你的这样一个网络的训练了嘛。
啊这是啊这这个第一个选择,那第二个选择是什么呢,第二个选择是说,既然你用了一个很大的这么一个model,那我能不能去把我这个model来进行压缩呢,这一支是两条路,第一条路就是我不要用大的模型了。
我直接用一个更小的模型来开始,进行训练吧,第二个model啊,第二条路的意思就是说,我直接把我大的模型试图尝试去啊,压缩成更小的这么一个模型,这就是两条路,那所以第一条路通常意味着什么呢。
我们要design,我们要设计一个更加什么呢,轻量化的这么一个网络的这么一个结构,这是我们的第一条路啊,第二条路我们要用到一些模型,减脂或者模型压缩的这样一个技术,所以在今天的这节课中。
我们就分这两个主题来对应的,这样一个课程的前半内容和后半部分内容。
那在我们这样一个实际的这么一个啊,生产环境中啊,用哪些场景会经常会用到呢,啊,可以看到在,尤其是在我们移动端设备的时候啊,做的这样一些图像分类,图像分割啊,图像检测啊等等这些情况下。
那会大量地使到我们使用到,我们这些轻量级的这些神经网络的结构,而在近2年的这么一个轻量级的这么一个,神经网络的结构中呢,最有代表性的就叫做mobile net,大家从他的名字上就可以看到对吧,顾名思义。
mobile mobile它都已经是为移动设备取名的,这么一个啊应运而生的这么一个网络结构,那它的这个代表性就已经非常强了对吧,mobile net a mobile net呢啊我们有两个版本。
第一个叫v e virgin one,第二个叫vr virgin two,那接下来我们来回来去看一下,v一和v one的啊,sorry,v一和v2 的这么一个基本的结构。
另外一个为什么要选mobile net,除了它是非常常见的经典的,甚至在用在非常多的这么一个啊,实际的项目中都会用到啊,为什么还选这个呢,是因为在他的设计思想里中啊,它的这样一个呃。
设计理念是非常非常具有代表性的,也就是说它核心的那,么两个特点被借鉴,用在了设计其他的网络结构上去啊,所以为什么我们讲他讲了他这两个点,大家get到了,其实去看更多的轻量级的网络。
就非常非常啊容易去能够理解了,这就是啊我们为什么要去说这个啊,把mobile net这个网络结构给理清楚的,这么一个最大的这么一个初衷。
在具体介绍这个mobile net的这个网络结构,之前呢,我们先来看一件事情。
这件事情呢,其实就是我们昨天学的这些内容,不知道大家还记不记得,这件事情说的是什么呢,这件事情说的起算了这件事,这件事情,其实就是我们的卷积的这么一个网络,好,我们来看一下卷积网络中的。
卷积的这样一个操作,大家是否还记得,这是转基层啊,未给转基层的这样一个input,还有多少个呢,还有三个channel对吧,然后这些是我的卷积的kernel,所以我说我有两个卷积的kernel。
也就是我有两个filter,那这个filter的大小是多少呢,3x3对不对,所以针对红色黄颜色的这样一个filter啊,我其实会有一组这样的一个啊,这样一个卷积的厚度在这里,这个厚度是不是。
其实就是对应到前一层的,这样一个channel的个数,对不对啊,对于第二个卷积的模板也是这样,所以这其实是两个卷积的模板,但是注意到这里并不是一个二维的模板,对不对,我们昨天说了。
它其实会啊是三维的这样一个情况,所以我们把左边的这样一个这样一个input,未进来之后,使用了这样一个卷积的模板,乘出来的结果是不是这个,我的output channel个数是二,为什么是二呀。
是因为我的filter个数是二,对不对,然后每一组的这样一个结果,都是拿某一个filter跟什么呢,转机去进行划窗得到的这样一个结果,所以这个就是昨天我们说的卷积的,这么一个操作对吧。
所以刚才我们说的每一组卷积,都是这样一个三维的这么一个情况,就会跟输入的这张图片来进行点乘,点乘之后,我们第一个结果就放到这里来,然后不断不断把这样一个这张图输出完了,这个就是我们卷积的输出,没毛病。
对不对,没毛病,有同学问每组是三个通道的和相加吗,我们的船长同学,我不知道大家有没有同样的这样一个疑问,大家看我的输出是不是其实是两组输出,两组输出,它其实是对应到两个filter的这么一个结果。
对不对,其实每一组就是某一个filter卷积的结果,没毛病,对不对,没有任何毛病,所以每一组它又是一个二维的这么一个,matrix的输出,那这一为arm为the matrix怎么输出呢。
那一定是随着我的滑窗不断的滑滑滑滑滑,得到的,对不对,所以我怎么去滑滑滑得到呢,每一次划是不是都有3x3x39个,这么一个立方体进行堆叠在一起的重合,到了我重合在一起。
那就相当于我这3x3x339 27,27个元素做向量的内积,我第一次就写到这儿,对不对,那我的这个立方体会往右边滑和往下滑,那么我的这一组的输出就被计算出来了,对不对,所以这是对应的什么呢。
这一组输出就好比,对应到这个土黄色的输出,然后我又有一组输出是什么呢,又一组输出是不是,其实是对应到这个紫色的输出,这是第二张ma,所以这三个通道的和你说是相加也没毛病,但其实不是因为它三个通道要相加。
而是我要把它拉成一个,拉成一个多少3x3的,这么一个乘三的,27的这样一个长度的列限量,这三二十七个元素做内积乘出来求和,能够理解吗,这样讲的话,这个有没有问题,同学们,我看刚刚qq同学提了一个。
卷积的这样一个定义的问题,其实我们昨天就应该讲过了,各位同学有没有问题理解的对吧啊,理解很好,那我们往下走。
那我们来看一下,在这个bgg net和inception v3 ,昨天这题我们都讲了,这两个网络结构,对不对,那它其实在这个网络结构里面,有一些什么样的特点呢,其实我们也已经提到了。
第一个特点是说mgg net网络结构,其实它相比于前面的alex net等等,他只使用了3x3的卷积,以及padding为一的这么一个情况,使得输入和输出的尺寸保持大致一样,对不对,然后因为这个原因。
所以呢它会有更少的这些参数啊,这个啊在整个网络结构里面啊,转基层会有更少的参数,那对于inception v3 呢,对于inception v3 ,昨天我们其实没有讲,他一些啊实现内部的这样一个细节。
但是大家只要去看它的这样,一个网络的结构,它的这样一个啊细节呢,其实就会发现,他跟啊密基金有一个很类似的,这样一个想法,就是他也会去减少它的一个卷积的参数,只不过它的这样一个卷积的参数。
也会把大的这样一个卷积核,分成小的卷积核,这也是它的一个思想,所以总而言之,其实啊我们在这个卷积的具体的这么一个,网络结构实现里面中。
其实就已经有一些这样一个呃大的卷积核,逐渐去进行降解的这么一个过程,那接下来我们来看一下,在轻量级的这么一个啊,lightweight这样一个网络结构里面啊,非常行之有效的一种啊,把卷积这样一个分解的。
这么一个思想是什么啊,这个思想就大量的用在了mobile net等等,这些轻量级的闪击神经网络的结构中,这个思想是非常非常重要的啊,请大家要注意去理解,这是我们刚才说的。
regular的这么一个卷积的这么一个,实现的方式,对不对,3x3x3对,输入的这一张图片,和我的这样一个filter的这样一个东西,完全去重合啊,做卷积会映射到某一个数字,随着我的不断的滑,不断的话。
那我的记忆一个filter在这个channeled啊,在这个输入的上的这么一个啊,输出就已经得到了,也就是刚才我们qq同学问啊,提的这么一个问题,对不对,这个就是我们输出的结果,那重点就来了。
接下来我们就要讲。
怎么把这么一个参数给降下来,怎么降呢,啊是这样的,我们的mobile net这个lightweight,这样一个网络结构里面中最重要的一个啊,最重要的这么一个核心的点。
就叫做deswise and point wise convolution,大家要记得啊,就是这个东西你要牢牢记,牢牢的记在脑海里。
stepwise and point wise convolution,记住了吧,那depth wise和point wise convolution,他说的是一件什么样的事情呢。
他说的其实就是这样一件事情,首先我把一个正常的转机,我会把它拆成两个东东,第一个叫death wise,第二个叫point wise ution啊,这是从大的层面的这么一个情况。
那具体到stepwise convolution,什么叫deswise呢,这个就比较啊,其实比较容易理解,根据它的字面意思,wise对不对,wise就是沿着什么什么什么的,对不对。
那depth是说沿着我深度的意思,对不对,是沿着深度的这么一个词,那这是我们的这个强行的这样一个,英语的直译,对不对,那实际上是说我输入的这一章图片,或者这么一个啊tensor。
它是一个三维的tensor,对不对,对于这个而言是一个三个通道的,没错吧,所以本来我的卷积核是不是就应该是三乘,3x3这么一个卷积核进行去转机的对吧,但是在这里呢,在这里呢我们是这样的一个说法。
它一共有三个通道对吧,三个通道,所以我这里就设置三个filter,三个不同的filter,每一个filter呢是一个3x3的,所以我每一个filter都会只跟它某一层,slice。
某一层channel去做卷积,也就是二维的转机,大家看这个颜色,这个怎么来的,蓝色的怎么来的,冰蓝色的怎么来的,冰蓝色的这一层是由一个冰蓝色的转机的,kl 3乘以三滑窗,对什么划窗呢。
对冰蓝色输入的这个冰蓝色的第一层,第一个channel进行滑窗得到的结果,就是他,那中间这个浅绿色怎么来的呢,浅绿色的这样输出的这么一层,是由一个浅绿色的3x3的这么一个kernel,为什么呢。
对输入的这样一个浅绿色的,这一个第二个channel cancer来进行划窗得到的,而红色的这个怎么来的呢,红色的也是一样,我会有一个新的红色的这样一个channel啊,红色的上面一个kernel。
对输入的这样一个红色的channel,进行划窗得到的,换一句话说,在point vice convolution这个里面,我输入层有几个这么一个channel,在我的这么一个point啊。
deswise这里面我就会有几个二维的,注意是二维的卷积的kernel,分别对它进行划创,得到,所以我们假设我们的输入是,比如说224x2,24x3的这样一个大小。
那经过一个depth wise convolution,那么depth wise的convolution,我这里又是3x3的这样一个大小,那我这一层的参数有多少个呢,那就是3x3,然后有三个3x3。
对不对,就是3x3x3这么多个,然后这是我们的输出,对不对啊,这是我经过deswise的convolution的输出,请问大家,现在你们明白了,stepwise这个convolution怎么做的吗。
张明老师讲清楚了吗,大家都get到了吗,如果get到了,给我一个回馈,大家都听听听明白了,那接下来我们要看point wise,convolution是怎么做的。
point wise convolution,这个处于的位置是紧接着deswise convolution的,所以deswise convolution的输出。
就是point wise的volution的输入,记住什么叫point wise convolution呢,所谓的point wise convolution,它是1x1的卷积,1x1的卷积。
point wise convolution,它到底是怎么做的呢,它其实是这么做的,我是为了把什么呢,刚才不是我每个deswise都是什么呢,对不对,因为我们每一个二维的卷积只管他自己,对不对。
可是大家别忘了,那之前我们在做这个通常的转机的时候,对不对,我会把整个通道也去学一遍,所以point with就是这样一件事情,他的意意思是说,哦前面你stepwise是分通道进行转机的,对不对。
都没有用到我之间的correlation的信息,那么point在这个基础之上,我把你这个整个跨通道的这个这个信息,我把你给补回来,补偿回来,所以在point ones这里,我加一个跨通道的这么一个信息。
所以我会加一个叫1x1的转机,这件事情在这里面,所以我会把什么呢,我会把1x1卷及这件事情,跨通道对它进行这个操作,这个就是point wife要做的事,所以pom其实就是一个1x1的卷积啊。
我会把这个东西给拉过来学过来,如果大家对这个还有疑问的话,或者说还觉得理解得不够,这个仔细的话会还不够自信,自己有没有get到。
接下来我们来算一算啊,我们来这个啊实际的来看一下这件事情,我们把刚才的那个结果,用更加overall的这么一个形式,把它进行给展示出来,这是我们的,输入对不对,这是我们的输入。
然后wise说的这件事情是什么呢,wise这件事情说的是,我对每一个不同的slice都有一个卷积,从二维的卷积去卷积它对吧,都会得到这个得到它也会得到哈,所以我把这些东西组合在一起,叠在一起。
叠个烧饼就在这里,point wise是说,我希望用1x1的这样一个卷积,把跨通道的这个东西给组合出来,这就是我想做的事情,并且什么呢,并且stepwise的输入和输出的channel个数。
是不是一定是一致的,对不对,但是在point wise这个convolution里面,我并不是一致的,我可以随意进行改变,对不对,是不是我可以进行改变,比如说1x1乘多少。
我的这样一个我可以设置成比如说我要学,这里是指三个fter,那其实我就可以把1x1的卷积啊,用1x1减来卷积去进行降维。
左边这个是通常的这么一个卷积的filter,对不对,假设我要学大n个feature map,大n个filter,而我每一个filter map,每一个这个filter,是不是都是一个三维的这样一个卷积。
然后m是什么呢,m是我的输入的那个东东的维度,就是书的channel的个数,dk是什么意思呢,dk就是在我这个我的这个filter的,这样一个长和宽,所以我的这个卷积的这样一个参数。
其实就已经可以计算出来了,对不对啊,其实就是这是我的卷积核,对不对,这是我的卷积核,那我的deth wise的这样一个卷积核,是什么呢,depth wise的卷积核,是不是这个我一共有m个卷积核。
因为我要对应到什么呢,对应到输入的这么一个channel的个数,对不对,而每一个输入个数的sorry,每一个输入的啊,slice呢,每一个channel呢我都是dk成dk的。
而对于point wise来说呢,对于point wise来说,是不是我是一个1x1的大小的,这样一个卷积,那每一个1x1大小的卷积,它的深度是多少呢,它的深度其实就是不是对应的m,是不是对应的是m。
那我有多少个1x1乘m的这样一个呢,will n个输出,对不对,是不是有n个输出,有同学问我们的dk是dk,为什么是一,那就说明你对deth wise,刚才的东西根本就没有理解,如果是rgb的话。
m是应该三对不对,而不是这里的一是三对不对,你有没有搞错了,混淆了,还是说刚才的depth wise,你没有这个理解透,这部分有问题吗,其他同学明白了是吧,o,这里有没有问题,wise和point。
wise的转机的这么一个内在有没有问题,有同学问没错,其实我们就是把卷积,其实普通的卷积分拆成了两部,大家先不用管这两步的好处,首先这两步明白了没有,接下来我们再从理论分析上啊,再看它的好处。
首先这两步大家看懂了吗,怎么具体的做法,先不要着急问为啥啊,一会儿我们再说,都明白这么做了,对不对啊,一定要弄明白,很有可能你们接下来去求职考试的时候,说不定这个面试官就会让你们解释。
什么是device,point wise,这个东西让你手画一下。
如果大家都能get到了,那接下来我们来算一算,来看一看我们的这样一个卷积,变成wise和point wise有啥好处,那我们来先来看一下,我们的通常意义上的这个卷积啊,通常意义上的卷积。
那通常意义上的卷积,我是不是假设输入是m输出是大n,然后我有啊这个输入时的这么一个呃,就是filter是这个dk成dk,然后啊到这个啊,输出的时候是这个df乘df。
那是不是我总的这么一个sorry,我总的这么一个计算量是大概是这么多,那与对于depth wise和point wise来说,我的计算量是多少呢,是不是这么多,这对于这个,desy而已啊,对于我的。
对于我的这样一个呃,point wise而言,那我的计算量是不是这个,什么是dk呢,大家看一下右下角的这样一个说明,dk dfm和n,m是输入的channel个数,n是输出的channel的个数。
所以我一旦把我的这样一个输入啊,sorry,regular convolution和depth wise和point,wise convolution,我来做一次比较,我一锄,我就除出来了。
我的这么一个computation的这样一个降低量,所以大概是n分之一,加上一除以dk的平方,那这是什么意思呢,这个意思是说,大家想,如果我用3x3的这么一个卷积的大小。
那就意味着是不是我的是大n分之一,加上1÷3的平方,分之,那也就是大n分之1+1/9,所以如果大家你可以把大n分之一,这个东西给忽略的话,所以基本上你的计算量的这么一个降低,就是原来的1/9。
所以这就是一个非常直观的啊,直观的这么一个啊下降。
那接下来我们来具体看一下,stepwise和point wise这件事情,到底它的具体的网络结构长什么样子,那左边其实就是我们通常意义上的一个,转机的这么一个building block实现。
是不是我先来一个3x3的卷积,然后经过一个b n b n是什么意思呢,b是batch normalization啊,b n其实是一个啊normalization啊。
这个规范化的这么一个词normalization,那么来这个bn的这么一个产生的意思,是什么意思,就是就是我希望我的网络的输输出啊,其实是更加什么呢,更加具有这个啊,我不希望我的这样一个一输出。
是一个乱七八糟,或者说啊就天花乱坠的这么一个结果,我希望我网络的这样一个输出的这么一个,每一层输出的这样一个结构,比如说啊是类这个啊,高线的或者某种这个分布的啊,所以其实说白了是这件事情。
我不希望我的这样一个网络的值太分散,到什么乱七八糟的,这样一个不同的这么一个程度上去,它是一个标准的这样一个组件,有了bn,通常来说,有了bn加这个normalization的这样一个。
规范化的这么一个来源,会把我的这样一个网络的这样一个性能呢,可能会再提高一点,我会把我的这样一个收敛的,这样一个好处呢,啊把我的这个收敛的这样一个效果呢,保证的更好啊,你就好比就好像我的这样一个。
网络的输入的时候,是不是也会要做一些规范化的,这样一些处理啊,是类似这样把我的量纲放得更加的接近,在同一样一个维度上,那如果是有了deswise和point wise这件事情呢。
那通常来说会是这样做一件事情,所以其实是不是我把我的整个卷积过程,分成了两大部分,那第一趴是不是,其实就是刚才我们讲的3x3的,depth wise,第二趴其实就是我们刚才讲的1x1的。
point wise,那还有一个background需要跟大家交代一下,就是啊大家记清楚啊,通常stepwise加上point wise,很多时候我们又称为叫stepwise separable。
convolution,separable的意思就是可分离,那很多时候中文会被翻译成叫深度可分离,卷积啊,其实大家说的玩意儿其实都是在讲这些啊,这一类摊子事情,这一摊子的事情,所以我们花了这些时间讲。
啊point was convolution,那接下来我们就要看一看我们的mobile ne,到底是怎么去进行这个啊。
使用这个东西来进行结合的,首先我们给一张mobile net,virgin one的这么一个网络的大致的结构嗯,看上去会非常复杂,但事实上啊没有那么没有那么难,没有那么难,网络的最右边这一列是我的输啊。
输入的这样一个tensor的大小,所以这个的输入是接受224乘,24x3的这张图片大小,而最后我的输出是不是分image net 1000类,这样是非常好理解的,对不对,所以即使你不理解它的实际的内在。
你只要理解它的输入输出,它其实就是你可以去用起来,对不对啊,用起来,然后它中间呢啊,每一个sr ride 2的意思就是,我要把我的resolution,就是把我的这样一个长和宽来进行砍半啊。
这是啊这个意思,然后这个啊,每一个的这个还有一个这个的意思五乘以,就是说我要进行去若干次进行重复啊,若干词来进行重复,这个是我们mobile net的这么一个基本结构,只是在这个基本结构的里面呢。
每一个卷积我会把它拆成什么呢,拆成把regular的这个convolution,替换成刚才我们说的stepwise和point,wise的convolution,这是mobile net要做的事情。
其实mobile net做了两件事情,对不对,第一件事情,我设计了一个网络的基本的这么一个结构,第二我用stepwise和point wise,convolution。
去替代了原来的convolution的这样一个layer,这是他要做的事情。
那除此之外呢,在这个mobile net,v version一的时候呢,它还有两个超参数,这两个超参数是干什么的呢,这两个参数其实是用来控制我的,light with the model的这样一个程度。
我希望它能够降得更加的低一点,就是它的这样一个啊计算量也好,它的这样一个啊瓶颈也啊,它的这样一个啊轻量级化的程度也好,哪两个超参呢啊一个我们称之为叫阿尔法,另一个我们称之为叫肉,这两个超三是干嘛用的呢。
这两个超餐是这么干的,阿尔法是说我控制我这个layer channel的个数的,还是少,所以太称之教网络的这么一个,thinner的这么一个概念,就是啊我用了这个阿尔法,我可能会让我的网络更加的瘦啊。
show的意思就是我的channel的个数变少了,那不就更瘦了嘛对吧,所以我可以取这么多不同的这些参数对吧,如果取0。75的意思,就是,我希望我现在的这样一个啊,输出的那一个结果。
要比现在标准的这个情况下,是它的3/4倍,砍掉了1/4,第二个套餐是什么呢,第二个套餐是我保持,我要去控制,我的spatial的这么一个resolution,就是我的这么一个分辨率的这样一个长啊。
长宽的这么一个大小,所以我输输入的这个分辨率,是不是我也可以去进行控制,比如说对于224,它是如果24,它的比例也就是等于一的话,那是不是后面我会有不同的这些比例,对应到它。
所以这两个东西是能够帮助我去进一步,裁剪我啊,不是裁剪,进一步去控制我整个网络的参数量,和计算量的这样一个啊变化的,我可以取不同的这个参数的比例,所以刚才的这个公式,我们是不是就可以去进行了一个啊替换。
我说我们的这样一个,把我的这个阿尔法用上去,然后再把我的这么一个啊,肉对应的肉用上去,大家想为什么肉会跟这个filter乘在一起啊,是因为当我的这个输入的这个,resolution变了。
那不就相当于我后面的这个肉啊也会改变。
对不对,所以换一句话说是什么呢,换一句话说,我可以通通过控制两个超参数,来达到控制我这个网络轻量化及的啊,轻量化的程度的这么一个啊目的,这个就是我们要做的事情,那这里给了一个例子,这个例子是什么呢。
这个例子是说,当我们使用普通的卷积的时候,在如上这些操作的,参数的基础之上,我们给出的两个计算量啊,然后当使用正常的depth wise,separable convolution。
也就是刚才的stepwise和punch wise的时候,我的计算量已经会下降了,对不对,下降了,但是我去进一步控制,我阿尔法和roll的时候,我还能够进一步下降,这是很合乎逻辑的,对不对。
我们都能够在我们的预料之中。
第二个第二个是什么呢,第二个是我们把我们的这样一个mobile net的,这样一个网络结构来做一些实验对比,那第一个时间,这个时间对比对比的是什么呢,我把我的这样一个mobile net网络。
用正常的卷积来实现,和用mobile net的deswise,深度可分离的这样一个卷积,来实现他俩的这样一个计算量,我的准确率降低的却没有那么高,对不对,所以它的性价比会比较高,那这个呢。
其实就是把我们的这个更多的参数去变化,不同的这个参数给进行实现,对不对,然后这个是说我要变换我的网络的,瘦身程度啊,这个是要变换我的网络的肉的,这么一个程度啊,我都会有不同程度的计算量降低的时候。
瘦身的时候,那我的这样一个网络的效果,可能也会有一些些许的下降。
那我们还可以把我们的mobile net v1 ,跟我们的深度网络来进行比较,比如说跟我们昨天学的bgg net网络结构啊,标准的这个mobile net没有做任何的啊,roll和阿尔法上的裁剪。
那是不是我的计算量是从呃,计算效果是从71。5%的分类,准确率掉到70。6%啊,但是我的这样一个,其他的这样两个参数的数量等等,我都下降了非常多的这样一个倍,这是我们要说的啊。
那这是我们刚才说的这样一些事情。
然后最后呢还有一个还有一个这个,一个刚才我们有提到的一个点,就是在mobile net version one这件事情里面啊,我这件事情里面,我所有的rio都会换成一个叫ro 6的,激活函数。
那real 6跟reload有什么区别呢,没有任何区别,我本来不是real函数,是这个东西嘛,对不对,只是在这个时候我给它限制了一下,我把它限制到最大是六,就这么简单啊,也就顶多是六了啊。
这就是rr 6这个函数这个实验证明啊,我们的作者为什么要提到,是说ru 6 t用ro 6,要比rio收敛的这个结果来更加的鲁棒,这个就是啊mobile net virgin one要做的事情。
然后在我们的cs里面呢,tensorflow里面是给了这个一个,mobile net的这么一个接口,在pf。cars点,application点,在这里面有一个,应用,然后大家看看是不是在这个接口里面。
也会提到了,这些不同的这些套餐给我们用到,对吧啊,这两个对应的我们的是不是阿尔法跟肉啊,大家可以去看看。
好那我这个我们先稍微喝点水休息一下啊,所以就seven老师要上个厕所去喝点水,然后一会儿我们再继续听一首歌,然后我们继续,好我们继续啊,我刚刚看了一眼大家讨论的问题啊。
还有必要去学less night这个less night吗,啊那当然是啊,需要了啊,其实在这个recite跟mobile net其实就是less night,尤其是刚才的同学都在讨论。
有没有一些什么链接什么之类的啊,我没记错的话,一会儿我们会有一张图大致分析一下rn,主要的思想,就是说,resnet其实是一个很深的这么一个model,它其实是一个大模型,它其实可以理解为是一个大的。
更加重量的heavy的这么一个model,那这个model的这么一个,在某些数据集的这么一个上限啊,还是要比mobile net要来得更加的高的,所以从这个意义的角度来说啊。
你总归很多时候还是会去需要一个什么呢,需要一个高精度的这样一个模型啊,给你去去去指路,比如说在一些一些情况下,那好那么个五六个点拿多少个点,其实是还是有非常大的意义的,对不对啊,你不能说啊。
你有着一个小的,你不要一个啊更深更好的这么一个网络,其实并不是这样的,但不同的需求的这么一个情况下,你还是有它的一个很好的这样一个作用啊,这个就是就是deep model,我们要去掌握。
其实你不是说你要去啊,盯着那个paper也好好的复现,你只要能够了解它的这样一个基本的,这样一个结构,能够去在实际的工作中或者比赛中,或者我们的project中去用起来,其实这个力度其实就ok了啊。
我觉得就挺ok了。
好我们继续,刚才我们说的是mobile net 1,对不对,那我们看一下mobile net,还有一个v2 ,v2 跟v一什么区别呢,我们在一张图上先来直观地感受一下。
我们把这个呃这个accuracy和这个latency,把它给拼在一起去,这个啊进行打印了一下,当然会发现,我们的v2 比v一会来的更加的好,对不对啊,什么叫更加好呢,在相同的这个latency上。
我们的vr的效果更好,在相同的准确率上。
我们的mobile net更快,那vr其实啊也是一个backbone了,就是vr的这么一个应用的这样一个场景,还是可以去用在非常多的不同的这个,任务中去啊。
这其实是vr的这么一个啊啊这个这个作用,然后v一跟v2 其实还是有一些啊实验啊,更多的实验来进行啊,比对的,比如说啊在这个啊s s d啊,这不用先不用说s s d是什么,我们下周就知道了。
我们要学这个object detection,也就是说在object detection这个领域里面,然后我们对比了v一和vr作为backbone,也就是作为那个feature。
jector的那样一个结构,就是前面的那个卷积的这样一个结构。
然后会有一些实验结果,然后呢在这个这个image的这样一个segmentation,就是图像分割的这样一个领域,demb,就是一个图像分割的这样一个网络结构,然后也用v一跟v2 作为它的特征提取器。
然后我们的这样一个结果啊,如下所示,我们发现在这个效果差不多的时候,我的vr又进一步的进行,这个参数的这样一个降低,那接下来我们来看一下,v一跟v2 到底有哪些区别呢,它的区别其实是这样的。
那区别一共有两点啊,左边是我们的v,右边是我们的v2 ,哪两点呢,第一点是有没有发现外面会来了一根连线,这个连线我们称为叫residual connection。
或者叫skip connection connection,这个连线是由resnet带来的,这么一个启发啊,也就是刚才同学们提到的,那第二点是说第二点是说有没有发现,这一趴跟这一趴是一样的,对不对。
我唯一不同的是这一趴,对不对,绿色的那绿色的是什么呢,绿色的看到没有,它其实就是多了一个1x1的计算器部分,所以它只有两点不同,一我加了一个residual connection,我把原来是这个哦。
stepwise加point wise,变成point wise,加deswise,再加point wise,大家先花这个三分钟的时间,把这张图再看一下,如果这一块没问题了,那我们接下来举一个例子啊。
举一个例子,来帮助大家去理解这两件事情的这个啊,来理解这两件事情的这个这个啊含义所在,我们举个例子,假设是是这个56x6x24,然后第一个1x1的东西,我们称之为叫什么。
我们不是有一个1x1的卷积在最上面吗,绿色那个东西,那个东西我们称之为叫扩展层,也叫expansion layer,扩展层的意思,通常我要把我的channel的这个维度,再扩得更加的宽一些。
就比如说我的扩展的这个factor是六,也就是我要扩六倍,那我会把我的这样,一个1x1的卷积,有没有发现1x1这个东西啊,我会把我的长和宽不变,我可以随意去切换它的channel的个数,对。
不断的去进行升维和降维,这是1x1给我们带来的这样一个启示,好处,所以我先把我的维度先升高,然后呢在这个维度升高的基础上做一次,deswise convolution,这是我们刚才说的结果。
然后再呢把我的维度变回来,变到24,这块理解吗,就是这个东西能够想通知道怎么做的吧,就是啊,你你能够理解他为什么能够做到这一点吗,至于他为什么要做原理,或者它的直观上的想法。
我们后面解释就是这一块参数上,是不是都能够理解他怎么做的,如果能够理解,我们就往后面讲了,就其实这里的理解的点只有一个,就是伊利的point wise的实现,我可以随意去变化,我的channel。
不断的去随意进行升为和这个降维的,point vise的实现,我可以随意去变化,我的channel,不断的去随意进行升维和这个降维的,point one se的实现,我可以随意去变化。
我的channel不断的去随意进行升维和这个降维,对不对,卡了吗,hello,同学们,那如果卡哦,这个那就听明天的录播吧,就是或者后面的录播好不好,好,我们继续,芒果同学说1x1卷积怎么升为。
那1x1卷积怎么降维,它就怎么升为呀,我只是把那个n变得大一点还是小一点,不就完事了吗,能理解了吗,芒果同学,这个问题,我觉得问出来好像是不是比较简单,有同学问问课程在哪,在啥时候,你就等老师通知吧。
这个问题不要问讲师,就是等问这个群里的老师问你,我也不知道等等,这个通知,好我们继续啊。
有同学要问什么叫做1x1的卷积,是不是这个同学刚来之前没听到,那如果是这样的话,你就听录播吧,不然我得又再讲很久了,同学说有多少个1x1的卷积核,就变成多少维,没错,这个理解就很棒了。
就是即使我的channel的个数啊,是可以随意进行变换的,对不对,其实你的这样一个channel个数,也可以去进行变换的,那我们继续一下继续,那刚才不是说到mobile net version to。
那我们继续下继续,那刚才不是说到mobile net version to,那我们继续下继续,那刚才不是说到mobile net virgin two。
是有一个residual connection的东东,对不对,那接下来我们来看一下,接下来我们来看一下,接下来我们来看一下这zero的connection是什么东。
西,是什么东西,这个东西其实就是跟我们的什么呢,跟我们的啊,reon其实就是跟我们的什么呢,跟我们的啊,reon其实就是跟我们的什么呢,跟我们的啊,recent的这么一个相关的这么一个概念。
也就是我们的这样一个残差神经网络,残差神经网络的这样一个提出的,这样一个motivation,是这样,就是我在这个啊训练的这样一个时候,我发现我深层的这么一个网络呢啊,就是56层的这个网络训练。
要来得比这个浅层的这样一个网络,来得更加的这样一个呃这个高啊,不管它是在训练还是在测试的时候。
这是,这样一件事情哦,看一下,对没错,这个信同学说,每次最后1x1的卷积,会到最后一个的channel的维度上带来,没错,是因为什么呢,因为我的1x1的卷积,一定是跨通到融合的。
所以我一乘以所谓第11x1的卷积,它背后还有一个深度,对不对,它的深度,其实就是那个depth wise的这样一个深度,然后他在定义周,我要输出有多少多少个那个channel个数。
好我们继续讲这个rene,那react其实刚才说到,它是一个训练困难的问题,因为我更深的网络,却没有得到一个更加好的这么一个结果,这是更加困难的这么一个啊。
difficult training这么一个问题。
那为了什么呢,为了保证这么一个,哈哈哈哈,你们不要引我笑,这上课很这个严肃的,有同学说目测三位老师八零后对吧,谁跟你说的,啊我们继续,我们继续,那为了解决这样一个问题呢,海明和海明和海明。
他其实就提出了这样一个,残差神经网络的这样一个概念,什么叫残差神经网络呢,它其实是有这么一个,sorry啊,等我一下,它其实就是说有这么一个residual的,这么一个block。
这个residual block可能是这样,大家看这个东西输入是一个x,然后我经过两个3x3的这么一个卷积的,weight layer,然后到达我的ru啊,也就是我的这样一个这个。
非线性的这么一个激活函数变换,那这个残差网络,其实就是我跳过这两个3x3的卷积,拉一根线,直接去连接,这是什么意思呢,这个意思就好比好比什么呢,好比我本来要学一个fx的变化,对不对。
那这个时候我的fx加x,是不是我新的这么一个函数,的这样一个变化,这是啊我要做的事情,对不对,那现在fx等于什么呢,fx是不是通过这样一个等式的变化,就变成hx减去,所以现在我本来要学fx直接来学。
现在我要学一个残差,一个差哪个长呢,是h x减x。
那举一个直观的例子,我们来看一下这个是什么意思呢,这个意思就好比,我们假设我们的h x是等于x啊,也就是假设我的这样一个啊网络,要学一个输入等于输出啊,通过刚才的这么一个啊卷积。
正常的这样一个卷积是不是这个东东啊,经过两个啊wait layer 33的卷积,然后到达这个x输入和输出嘛,hx我要学它,刚才我们说了,假设用残差网络的形式,用hx等于fx加x这样一个形式。
所以这个时候其实本质上是不是,其实我们要学fx是为零的这么一个情况,所以事实上我现在网络变成了,对不对,那最后其实我的目标是零,那是不是对于这个case而言,因为本来你要学一个映射,那这个映射是说。
我要把v一和v2 都要变成一,对不对,那这个时候我其实只要变成什么呢,只要变成我的位置,一和位置,其实只要是有一个是零,那其实你的结果就学到了这样一个结果,零对不对,这是举了一个直观的这样一个例子。
要更加的容易,但事实上呢除了解释这么一个例子,还有一个很重要的残杀的原因是这样,大家试想一下,当你的网络的深度非常非常之深的情况下,啊,非常深的情况下,那么你如何去避免你的梯度消失的问题呢,我们都知道。
当网络越深,你传回前面的这个appropagation,那其实越家的困难对不对,因为每一个梯度你都有一个小数点,小数点,小数点,那多个小数点后面的这样一个float,那乘出来就非常小了,对不对。
那大家想想看,我有很多个这样一个residual,这么一个block堆叠在一起,串联在一起,那是不是我很容易,我后面一层的梯度就会越过什么呢,越过这些不同的层,去传到越前面的这些block去,是不是。
所以我会把我的这样一个梯度,不断地往前到更前面喘,所以这个时候会避免我这样一个梯度,消失的问题,这是它的这样一个残差,连接的这么一个作用。
我们这里这节课不是来讲啊,这个react我们只是为了解释我们mobile net to啊,v to是,有这么一个啊residual connection这么一个东东。
所以总结下来我们的这样一个啊mobile net,其实就是刚才我们说的这几件事情啊,这这几件事情,由expansion,然后再接两个separable a bad deswise。
以及我的这样一个啊1x1的tion。
那这个东西呢是我们这个这个东西,是我们说这个啥来着,是我们的这个这个这个啊,mobile net v two的这么一个网络的这么一个结构,这里的tcn这些变量是啥意思呢,但是在下面写的t。
就是我expansion的这个一个factor,也就是我要扩大我的多少倍,然后c是我number of啊,这样一个输出的这样一个channel个数,n是我要重复n次,这个s strike的意思就是啊。
我是不是要进行这个谈判谈判。
然后接下来我们尝试来进行一个解读,这个解读是什么呢,我们尝试为什么要这个有这个expansion,就是为什么我一开始要把我的这样一个啊,卷积的这样一个维度啊,这么一个维度给升为,大家想想看。
在如果我不深为的情况下,是不是我的这么一个转机的这样一个维度,通常来说是这么一个情况啊,36 24,32 64,96等等这样一个变化的幅度,那其实它的这么一个channel的这样一个维度。
还是相对来说比较低的,对不对,还是比较啊不够丰富的这样一个特征。
那especially啊,其实就是针对啊这么一个呃,刚才说的这样一个点啊,它尝试什么呢,他尝试先把我的这么一个特征的维度,升到一个高维的空间,去,在高维的空间上做一些特征的变换啊,再去把它再下降成低位。
这就好比什么呢,你可以理解成为在我的s b m的这里面,是不是,我要把它映射到一个更高维的,这样一个空间去,在高维的特征空间,我可能做一些线性的这些分类器,它可能就已经是可分了,就是在高危的情况下。
那我的特征其实啊可以被提取的更加的啊,好这个就是他想做的这样一件事情啊。
那mobile net也有非常多的这些参数实验啊,比如说他用这个啊v一和v2 ,在不同的mobile device上去进行了这样一个,啊跑啊,不不同的情况下来进行了这么一个呃,呃呃呃啊对比。
有同学问为什么要这样回来,降回来,是保持我的这样一个参数的这样一个啊,这个简化呀,如果你不降回来,那是不是你越升上去,那你这还叫light with model吗,大家想想看,那能够理解吗。
啊如果你不这样回来,那那你叫就叫light with,那你不就是更大的一个网络结构吗,这个初衷大家居然居然忘记了。
mobile net v two,是不是在我的同样的tensfo上,也有可以直接调的这些东东,这个就是跟大家share这个lightweight这个model,啊啊。
接下来我们要来看我们这个,神经网络压缩技术这么一个章节。
我们这个一个motivation就不用再赘述了,对不对啊,其实啊原因就是刚才我们说了,在很多时候mobile device上我们有很多限制啊,很多限制啊。
需要用到我们的更小的这么一个网络,对不对,更小的网络,不管是啊网络的带宽啊,啊能耗的消耗等等等等等等。
那我们的神经网络的这样一个压缩技术,就可以给我们带来啊如上这些好处啊,既可以变小model。
提升速度啊等等。
那首先我们来看一下deep啊,compression这件事情啊,也就是啊说啊deep deep compression呢啊,它其实是一类方法,就是啊一类思想一类目的啊,把网络进行压缩。
那通常来说有两两种方式,第一种方式,我们称之为叫网络的减脂的方式,什么叫减脂呢啊很简单,其实就是我要把那些没有用的,那些神经元给扔掉啊,比如说左边是这样一个神经元,而左边是这样一个网络结构。
我要把它变到右边这个网络结构,那怎么把它变成右边这个网络结构呢,记得在我们说drop的时候,它是随机进行采样的,对不对,而在pruning这个这个方式里面呢,我是把那些作用不高的神经元给截掉。
什么叫作用不高呢,比如说很多的这样一个权重位置,它会比较小,可能都是在零点几的时候,那大家想你权重很都很小,不就相当于你这个feature,根本就没有去使用到它嘛,那当然是可以被扔掉,对不对。
所以我们用一个很直观的这么一个示例图。
就可以帮助大家来进行这个啊,get这个点,这是一个正常的这么一个神经网络,那其实虚线的这部分就是被我裁剪掉的啊,这个实现的部分是被我保留下来的,所以实现的其实是还是有一些大多都是啊。
离离比较远的这些啊wei的权重,所以通常来说我会设定一个阈值,那这个阈值可能是比如说零点点零一,小于0。01的,我都直接扔掉,当然了,这里会说认真调这些参数之后,那当然会可能会下降一些。
那如果下降的这个结果没有那么明显,比如说下降了两个百分点啊,但是可以给你带来1/10的这么,一个压缩比,那你做不做呢,这个在业务的场景上,你可能就想要做了,对不对,这个就是你想做的事,想做的这件事情。
那我们再举个例子来说,如果是对于神经卷积,神经网络要进行这个减脂,那是不是也是一样,我要看哪个channel是要被我扔掉,对不对,那这里的channel,比如说我把我的这样一个啊。
l one的这样一个norm,或者l to the norm给打印出来啊。
比如说这啊我第一层啊,我第一层不是要有32个这样一个啊,filter嘛,那32个filter,我把他的这个l one的这样一个norm,打印出来,会发现大概有十个,几乎都是为什么呢。
其实都为零啊的这么一个大小,所以我们会发现我们的filter,其实还是有很多的冗余的空间对吧,哎可能有很多的冗余空间。
所以当我把卷积神经网络的某一个filter,给扔掉的时候,那是不是这个filter,参与后面计算的那些东西都被我砍掉了,都被我砍掉了。
所以我们总结一下我们的这个pruning,这个step,就是我们的这样一个裁剪,剪枝的这么一个步骤,那一我们根据我的这样一个,啊这个减脂的规则呢啊,比如说我是卡一个阈值,或者说啊把我的这样一个啊啊。
fter或者某一些位置,通过某些阈值给裁剪掉扔掉,我要把我的这个网络,既然你扔掉了,那可能我还要进行这个训练,对不对,我要进行return f,然后第三步我要把我训练之后的这个结果。
在我的这样一个验证集上去做一次测试,看看这个是不是值得去啊啊,是不是去去能够接受的,如果他几乎不掉,那说明这个被我扔掉也是ok的,对不对,然后从此进行往复啊。
从此进行反复,然后接下来有同学说直接扔掉filter,不是winter某些数变零吗,是直接扔掉filter了,变脸,你不是还有一个东西存在能力吗,是不是。
那那第二步我们要进行这个weight sharing,什么叫wait sharing呢,wait sharing的意思就是,我希望把我权重里面的一些东西啊,用cluster的一些东西来进行表述。
什么叫caster呢,就好比我需要用某些数字去近似它啊,比如说1。11。2,1。3~1。1,1。2,1。3,我就直接用1。2来表示,1。1和1。3啊,这个就是啊我要做的事情,如果我们把这件事情做了之后。
是不是所有这部分的数字,我只要去找什么呢,找四个数字来进行代替它就ok了啊,这个就是第二步。
我可以用quantization和量化的思想去做,第三步,大家还,记得本科学的哈夫曼编码吗,我可以把越多的那个出现频率越高的,那些with用更短的编码来进行表表示,对不对。
这还可以进一步进行压缩和这个啊降低。
然后我们可以看一下啊,这类方法得到的这个结果,给我们带来的之前压缩比还是非常具有啊。
效果的,那除了刚才减脂这类方式,我们还有啊一类这个啊,另外这个啊跟这个减脂相关的这个问题啊,这个相关的这样一个方法,并不是说它的目的是完全是为了减脂,他是什么意思呢,他的意思出发点是说,ok。
前面我们不是说把一个dance的网络,变成sparse的网络嘛,那这个工作很有意思的,就是我把这个sparse的网络再变成dance,会出现什么样的情况啊,这个就叫做sparse and dance。
也称之为简称为叫dsd,这个model and sparse and dance。
就这个这个工作,那d啊dsd这个工作啊。
其实啊理解起来也非常好的理解啊,我们看一下它的伪代码,dsd的这样一个工作啊,是什么意思呢,啊是这样,首先我initial了对吧,然后接下来我sps了这个spars怎么做的,还不是卡一个阈值去做的。
对不对,还是卡一个阈值去做的,接下来我要再把它这个重置回来再dance,这就好比我原来使用这个spars,来做一个初始化,其他都为零,然后再进行训练。
那这个时候我又回到原来的结果,那有什么作用呢,有同学也提了这个问对吧,所以我们的同学是非常心急的,很多时候三位老师的讲课啊,都会给你们循序渐进,对不对,循循善诱啊,你们不问这个问题,我也会问这个问题。
对不对,我会来进行回答,所以不用着急好吗,不用着急,那总结下来dsd是有这几个作用,就是说通过dsd这个方式,我可以达到比原来dance更好的一个效果,这个是这个啊。
d s d的这么一个实验的这么一个结果,它分析下来有几个作用,第一个作用,我通过这种方式,我可以escape,我的观点啊,就是set up point。
这个第二个我会给我的这个space training啊,可能会是一个一个正则化的这样一个作用,类似正则化的这样的作用,第三个我是在我redance的那个基础上,我会有一个什么呢。
我会有一个更加robust这样一个初始化,相比普通的转机而言,dsd其实是啊,有两次初始化的这样一个机会,对不对,它是有两次初始化的机会,很有可能第二次初始化的这么一个结果,其实就帮助你能够去找到一个。
更加的这么一个解,那我们把dsd给可视化出来,是不是,其实这是最开始的情况,然后prom一下对吧,然后再串一下,然后这个这个啊回到原来,这个是很好理解的,这样一个几个权重的这么一个变化。
然后dsd我们看一下它的实验结果啊,dsd的版本啊,通常来说啊,很多时候d s d还是有一定的,这么一个效果的,对不对,我的error基本上都还在下降,这个就是dsd的这么一个结果啊。
dsd放在这里只是一个补充啊,就是啊帮助大家去扩展一下,就是pruning之后,还有没有一些可操作的这些空间,但它不是dsd,不是为了去做我的特征,网络的这个压缩去做的。
那接下来我们要看另外一个工作,另外一个工作方向了,这个工作方向就是我们的这个神经网络的,啊,刚才我们不是说pruning吗,直接去进行减脂,可以得到这样一个结果,这个是什么意思呢,这个意思是这样。
很多时候我们会用ensemble这个东西来做,什么是ensemble呢,就是昨天的课上跟大家讲,来进行模型的平均进行,进行这个来进行组合嘛,但是很多时候竞赛可以这么玩儿,但是在做这个大规模的这样一个。
部署上限的时候,我们并不能这么玩,对不对,因为每一次的新用一个model的zb,都是费时间的。
所以我们是不是能够想这样一件事情,就是我能不能够把我的enzo的,这样一个结果啊,也就是我的网络的大模型的这样一个。
输出的结果,更加浅层的小模型。
这是我们想做的事情,那这个事情呢我们称之为叫knowledge distil,也称之为叫知识蒸馏模型,要记住啊,这个单词knowledge dist,知识蒸馏模型,那这个knowledge就是指的。
我这个大模型的这样一个参数啊,把它蒸馏出来,提取出来,把它的精华给提出来,所以通常来说你会有两个model,第一个model叫大模型,好比叫rn的这样一个,比如说200层的网络。
然后你要学一个小浅层的么网络,比如说是一个recite 50的model,你希望remodel resnet 50的model去什么呢,这就好比啊我们的一个高中生啊,比如说我们高中数学老师的。
这样一个解题的思维啊,这是一个类比的概念,那首先我们来看一下,也就是大模型,我们称之为叫teacher,那刚才那个小模型称之为叫student,我们看大模型跟小模型啊。
teacher model跟student model是来做什么样的事情,那首先你要有一个teacher,对不对,就好比你的老数学老师,要比你先会解数学题,对吧啊,所以这个没有问题啊。
你在这个训练数据上跑一个i嗯,这个bgg或者rest night,这是我们昨天说的内容,对不对,所以你是有这么一个大模型的这么一个啊,参数在这里的,也就是给定x你会输出一个y啊。
这个东西是已经存在这里的,那接下来你要去训练一个什么呢,训练,小模型的给定x输出y小模型的分类器,对不对,所以怎么学呢啊通常来说是这么学的,另一批的这个数据啊,另一批的这个数据给拿过来。
也就是你大模型可能是在a训练数据上,训练出的这个结果,然后现在呢啊你拿一批数据啊,这个数据可能是b数据,然后b数据喂给teacher,teacher会产生一系列的概率的分布,对不对。
probability,那这一些probability,其实你就要当做什么,student要学的那一个结果,也就是你的student学的这么一个目标,是你teacher的输出。
有同学问这个跟知识图谱有什么关系吗,没什么关系,我们在讲知识蒸馏这件事情,跟知识图谱没关系,知识真流只是这个这个技术的这个名称。
我们也可以把teacher和model来进行,比如说在训练大模型的时候,小模型也一定来进行认了啊,就是他们的这样一个data flow啊,这里我们先不用讲这个事情,然后我们接着刚才啊。
这个刚才的这个知识真流这个概念,继续往下讲,那知识蒸馏是怎么去进行实现的呢,就是刚才我们讲了他的思想,对不对,大模型的概率的输出,但是还不够直接去理解它到底怎么操作的,对不对啊。
那现在我们来进行把这个东西给搞定,给解解出来,首先我们回忆一下我们的概率输出是什么,我们的概率输出是不是,通过一个soft max函数得到的,大家还记得那个soft max函数,对不对啊。
那接下来我们把概率函数这个soft max啊,给它扩展一下,我们把一个soft的这么一个啊,target的概念给介绍大家,就事实上我们会有一个更加generalized,soft max函数。
就是这里的特征的表达,也就是原来的这个z后面,其实可以处于一个大t,而大t我们称之为叫temperature,通常来说大体设置为一的时候,就是刚才大家看到的soft max函数的东东。
那大家想想t越大我的概率分布会怎么样,t越小越趋近于零的概率分布又会怎么样,大家想一下这个事情,大家想想看,当t越大的时候,是不是q的这样一个变化越加的平缓了,越没有区分度,对不对。
当t越趋近于零的时候,我的概率分布越具有很强的区分度,这个总结may不make sense,所以我们的总结就在这里。
如果大家不能够想象这个问题的话。
我们啊给一个直观的例子,这个直观的例子是这样,我们假设什么呢,我们假设我们这个大气呀一共有三种,五二十五跟50,它对应什么呢,对应这张图中的红色,绿色蓝色的概率分布,那大家想想看,大t等于50的时候。
是哪个颜色,大t等于五的时候又是哪个颜色,如果这个问题已经搞明白了,那刚才seven老师的问的那个问题,其实也就是一样的,对不对,大家能不能想通,大家的分析是不是应该这样,先看这个红色。
红色是不是在第一个这个圆柱体上,好少的分量,前面三个都好少的分量对吧,所以红色的这个东西,区分度应该是最明显的那个,对不对,是不是最明显的,如果红色的这个东西,它区分度是越明显的。
我们刚才说越discriminations,区分度越大的大气是越小还是大气越大呀,是不是大气越大,或者说大家进趋近于近似,对不对,那t越小,那我的区分度才能够得到更好的区分对吧。
那结果就非常明显了啊是吧啊。
我们继续,那接下来我们要讲一个概念,这个概念我们称之为叫dark knowledge,那这也不是一个新的概念,这个不是新的概念,这个概念是什么呢,这个概念是什么呢,这个概念就是我们刚才要用到那个大t。
有同学说我们的这个明显点不是好吗,以后这个不着急好不好啊,sam老师既然要铺明显还是不明显,一定是一个铺垫,对不对,后面就会解释了,所以萌萌同学,你的思维可以稍微再放缓一点点啊,放缓了一点都那么着急啊。
我们后面就会提到这所有东西都是铺垫,我们继续这个,我们假设one hot,one hot encoding那个形式,one hot encoding,那个形式是不是其实就是独热编码,某一个为一。
其他都为零,假设它是狗的话,那大家想想看,假设你通过大模型或者说大模型的聚合,an example得出来的这个结果很有可能是他,对不对,也是狗视为0。1的概率,而猫和car是其他的这么一个情况,对不对。
大家想想看,我把我的刚才的这么一个结果,把那个大t重新设置一下,设置成一个更加soft一个结果,是不是可以得到这个输出,那刚才有同学说,这个输出的结果跟上面那个有什么不同吗,首先我表达的事情是一样的。
对不对,这个事情是说狗它这张图片是一个狗对吧,狗和猫的相似度比起来要比狗更靠,以及狗跟car要来的还要高,卡了吗,同学们,不卡了,那我们继续了啊,我们继续讲课,刚才我们说到说到什么呢,我们说到。
这张图片最大是狗,对不对,没错是狗,其次呢猫的这个这个信息含量是0。2,所以这张图片不仅揭示了它是一个狗,并且还揭示了label和class,label之间的这些信息,比如说狗和猫的相似度相关度非常高。
并且狗这个跟猫的这样一个相似性,要大于狗和这个call和奶牛,并且狗和靠这样一个相关度,要远远远要大于ca,所以它其实带来的这个信息量,是来得更加的要丰富的。
这就是soft targets的这样一个好处,这就回答了刚才这个同学的问题。
有没有一种办法是能够帮我去融合,hard和soft这两个同时的这样一个,想要表达这些信息,这个其实就是我们知识蒸馏想要做的事情,所以呢我们来总结一下啊。
知识真流,他实际上要干的事情,大家要听清楚,接下来我对这张图的描绘,你就能够明白,你就知道怎么去实现了,首先我要有一个model,这个model呢是一个大的一个model,什么叫大的model呢。
就是我要有一个teacher,建立一个teacher,就好比我要学一个先要训练一个resnet,200层的这么一个大模型,当做我的teacher啊,这就是我的这么一个teacher。
这说的这件事情是在训练一个teacher啊,说训练一个teacher,然后呢,接下来我要训练一个训练一个什么students,对不对,这个student通常来说是以这个更加,shallow的模型。
更加浅的这么一个模型,更加小的这样一个模型,比如说刚才是200层,现在我选550层,然后呢我要把什么呢,我要把我注意刚才训练好的那个teacher,是不是已经训练完了,他已经有分类的能力了,对不对。
然后接下来我是不是要训练我的teacher,student,所以这个时候,student是要重新开始进行训练,对不对,那student这么一个训练的目标是什么,我们说了student训练的目标是什么呢。
是teach了student训练的目标是什么呢,是teacher student训练的目标是什么呢,是teacher,teacher的输出是不是经过刚才的这么一个,说法啊这么一个解释啊。
teacher的输出是一个概率什么呢,概率分布对吧,所以我希望我的这么一个,a student要去student的输出,要去你和teacher的输出,并且teacher的输出,根据刚才我们的这个啊分析。
是要用一个更加soft的这么一个结论,所以本质上大家只要记住这样一句话,又卡了,不会吧,哈喽同学们,好我们继续,大家只要记住这么一句话,就能记住我们知识真理的本质,这句话是说大家自己记下来啊,做好笔记。
小模型是去用来你和大模型的输出的,就这么一句话,那接下来这句话,背后给我们带来的损失函数的指示,就是既然你要去拟合大模型的输出,对不对,拟合的损失函数是什么,某个人身高是多少。
我要去拟合它明天的股价是多少,我要去进行拟合他,那我的分类的啊,我的sorry,m s或者什么呢,或者这个回归的这样一个损失函数,是不是其实就是一个回归回归器,而不是分类损失函数,对不对。
不是cross entroy,对不对,如果是cross entroy,不就相当于在训练从头开始训他自己吗,所以它的损失函数一定是regressor,是回归,所以如果以后在面试过程中。
老这个面试官问大家这么一个点的时候,它通常会是一个点啊,所以在教授大家这些相关的新的,算法知识的时候,我会把一些重要的点帮大家给拎出来啊,容易搞错的点拎出来,所以你的损失函数,你输出实现的时候。
要去用这个啊回归的这么一个损失函数,去回归它,在这个具体的啊实现的时候,你可以什么呢,你可以有两两种loss,第一种loss是这个任务这样一个student model,同时在做分类,并且在分类的时候。
我要去拟合我的这个大模型的输出,这也是ok的,但是至少你不能只有什么呢,只有cross hy,只有输出啊,只有那个啊分类的损失函数,这个就是我们小模型要做的事情,那小模型一旦学完了这个事情。
那其实就可以去用来去用来做预测了,所以实际上我们会怎么做呢,我们实际上会这么做,假设一个大模型你觉得不够,那你可能要训练十个大模型,这十个大模型,比如说一个v gg,一个rn一个啊,alex net。
再来一个inception v3 ,一个inception v4 ,那所有的这些这些刚才这些model,你进行加权求和处,这个得到平均,得到一个更加精准的一个model,的一个输出的结果,概率分布。
就好比昨天我们有十个模型求平均,啊有同学说我们的课件你不用管,课件是什么,听seven老师讲的好吗,这张图可能是啊画的有些问题,大家能够理解刚才我说的事情吗,所以我们的model。
我们的teacher可以是一个大模型,也可以是多个大模型的,这个啊融合这样的一个结果,总之它的精度有多高,我把它垒得多高,对吧啊。
这个就是我们teacher和student model要做的事情,所以接下来我只要初始化一个小模型,把我的损失函数,把我的这个预测的这样一个,我把我的这个训练数据用大模型跑一遍。
那我的这样一个输出的结果,概率输出就有了,把这个概率输出作为我小模型想要学的,这么一个目标函数去进行拟合,这就是teacher student model要做的事情。
那刚才呢给了一个例子,就是说。
有时候我要把我的这个啊就是加一些噪声,就是我的这个啊,teacher这个啊,加一个这个政策化的这么一个噪声,其实也是一样的。
那最后呢给大家啊类比了一个工作,这个工作是什么呢,啊其实这个东西也不在我们的什么呢,会给大家介绍一个工作。
就是这个工作叫这个disturb labe,是一个正则化的这么一个,像这个disturb label呢啊有点像啊,我们刚才说的这个这个事,就是有一点点像啊,这个意思就是我把每一个batch。
把某一个训练数据的这个y呀,训练的这样一个标注啊,随机替换一下,就好比这个时候是零,然后把7x5,然后这个是四,我把它提成二,这个实现起来非常简单,对不对,把每一个batch的时候,我随机搞错一个嘛。
就好像引入新的噪声啊,去降低它的过拟合啊,有兴趣的同学可以去看一下这个工作。
这个就是我们啊今天学的这样一个topic,这个topic就是说,我们是不是今天讲了,如何在工业界这一个啊模型的这么一个,实际部署上线的这样一个事情啊,大模型很多时候啊是啊。
不能够符合我们的这样一个需求的,那小模型是ok的,那小模型这里面有很多方式,对不对,一,我们直接用一些更加尽量轻量化的,这些模型啊,去得到这样一个模型上限的这么一个结果,那在轻量化的这些模型里面。
最重要的就是deswise和separate啊,那个deswise point wise的这么一个理解,那depth wise,separable a depth wise和point wise。
是不是会用到,刚才我们分析了,分析了啥,mobile net一和二,对不对,然后同时然后我们还讲了什么大模型,进行减脂的思想啊,减脂的思想啊,给一个阈值,然后去进行减脂,然后再进行重新训练。
然后这个最后我们还讲了一个什么呢,知识蒸馏的这么一个作用,就是大模型去弄一个小模型,再给大家再补充一个扩展一个思维,那什么时候我们这是蒸馏会用到呢,比如说啊这样的一个情况,大家想想看。
假设假设你在开展一个新的一个业务,你入职一个新的公司,或者新的负责一个项目,那这个项目呢你苦于你没有训练数据,那为什么呢,是因为你刚刚白手起家,你一个人做的算法工程师,你又申请不到那么多标注的经费。
申请不到老板的标注心费,可是你惊喜地发现,你在一些竞争对手上,你可以看到他们的这样一个能力,已经上线了,比如说商汤旷世啊等等这些独角兽的公司,他们已经把他们能力布在云端了,并且你可以去申请一些账号。
免费进行调用对吧,可能每天可以有个开发量,开放量,每天调用个1000次啊,是免费的,那这个时候很容易你可以做这么一件推测,对不对,你直接把人家的云上的这个api调回来。
结果人家一定是一个很好的一个模型吧,不然人家怎么去卖呢,对不对,所以把他的那个结果,当做你的teacher model的输出,这个时候你再起一个模型,去学它的这样一个结果。
所以你可以快速的去构建一个新的一个,线上的这么一个新的这样一个能力啊,而不使用你的,占用你的老板的这个标注资源啊,这个时候你可以快速的去,去构建一项新的业务啊,就是教大家一个啊一个trick啊。
一个新的一个trick,当然你们在面试过程中也可以去提啊,展现出这些思维啊,博得这个面试官的这样一个欢心好吗,那行,那这个有同学问,他们会提供soft那层的输出吗,会呀,他会提供这个啊。
我标签预测的这个结果,比如说你要预测好几个类,它这个时候他会说啊,每个类的知心度是多少,它也会暴露给你的吗,那这个这就是seven老师,今天给大家上的这门课程,然后我没记错的话,线下课是周六吧。
周六的上午应该是那上海同学,应该有同学会给你们去进行一个啊,老他老师会给你们发给你们的地址在浦东,然后呃我会去啊,上新的这个啊,这个wide and residual这个model的这个topic。
然后这个好吗,那今天的内容大家有没有一些北京,那我就不管了,北京是你们自己这个老师去解决的,你们有新的老师给你们上这部分的内容,新的那个线下的内容,因为线下的话一般都是老师当场去上,深圳也是一样啦。
这个都是你们有你们自己的老师,给你们进行上,ok你们到时候就听你们老师的安排,跟他们这个跟着老师学就好了好吗,然后上海这部分是赛文老师会来进行,普通地址当然有了,你等你们老师通知就好了好吧,详细地址吗。
就你们等等等等通知就好了,那我们今天的课程就这样了啊,大家这个,希望今天这周的三次算法课程啊,大家都有都有所收获,好不好,我今第一次给大家,第一周给大家上了三次算法课程,希望大家每一节课都有收获。
那这个收获呢,听录播啊,去理解我们的内容,做后面的啊配套作业对吧,昨天给了一个比较大的作业啊,等等等等等等啊,希望大家有所长进,然后下周我们还会在文老师,继续给大家上三次线上的这个课程。
我们会沿着我们的deep learning继续往下走好吗,什么广州深圳同学,这个我就管不了你们了是吧,我也不能跟你们face face交流,然后上海同学。
我可以给大家去face to face的进行交流和讨论,那就这样咯,大家拜拜,希望大家有所收获好吗好,我们下周见。
七月在线-深度学习集训营 第三期[2022] - P3:在线视频:03-深度学习在物体检测中的应用(下) - 程序员技术手札 - BV1gW4y1x7j7
啊行那我们先开始上课喽,哦按照今天的这样一个教学大纲啊,我们就应该要进入到我们detection部分最后的一次内容了啊,那其实就是啊我们的fbi还有这个and free的一些方法,嗯。
大家还记得在呃我们本周开始啊,周一和周三大概都学了一些什么样的啊,不同的内容呢,对其实周一开始啊,我们开始讲了这个,fast r cn家族模型对不对,从slide window。
然后到anchor的理解,然后以及这个在发这个r cn里面,是不是啊,我们从最开始的original ascen到fast as cn到faster r cnn,再到mask r cn,对不对。
基本上都是r cn的啊,这个所以我们称之为加叫这个cn的家族模型,那在这个cn的家族模型里面最重要的一个点啊,其实就是要对于anchor的理解,在我们的呃cn r cn和fast r cn。
其实他的这个proposal都其实还是用传统的tradition的方法去生成的,对不对,比如说这个selective search,那这个在啊faster cn里面呢。
它其实是看到了除了啊region proposal生成这一部分,我没有用到and and learning这样一个网络啊,网络的这样一个方式,那么啊其他部分它其实都是已经啊开始做这个神经网络的这样一个。
结构和预测了,那因此呢从faster r cnn开始,他就有了这样一个想法,就是我希望能够region proposal这件事情直接给用网络,用这个deep learning直接可以预测出来。
所以啊基于这样一个词呢,fast森林里面就引入了啊anchor的这样一个机制,每一个这样一个啊fish map上面啊,每一个点或者每一个element,它对应到。
一些predefined的一些bounding box对吧,为什么有这些bbox,我们啊强调了多次啊,其实他的这ituation它的这样一个背后的这样一个想法。
其实就是为了让我的网络去学这样一个bounding box的时候,不至于就啊这个黑灯瞎火的这样一个随便摸,而是应该还是要去从这个predefined这样一个bonding box的角度出发。
去做这样一个呃有针对性的这样一个训练和回归,这样的话我其实学的并不是整个这样一个图像的,一个所有的区域的这样一个范围,而是从predefine的那些一预定义好的这些bonnie box去做啊。
真实的那个bonnie box,的这样一个offset啊,我们称之为叫偏差,所以这个其实是,hanker要做的事情,那我们说了还强调了一点是什么呢,就是我们的anchor。
其实你不应该把它只想象在一个特征图上的这么一个,表达方式和表达的区域,它其实你要把anchor对应到这样一个原始的图像的空间,对不对,因为你整个cn的这样一个过程,其实就是从啊越高的分辨率。
往越低的分辨率啊,这样一个去慢慢的做done something,那随着down somebody,你的感受也就不断的去增加,对不对,所以你很容易从一个特征图上的啊一个这样一个表达,然后再回到原图上。
对不对,无非就是啊上采样,或者说在进行扩大嘛,所以其实你的这些anchor都是应该是要聚集在,或者说他应该要把它想象在表达到这个原图的空间里面去,所以你的这样一个i o u的计算。
说白了其实就应该是在原图的坐标系上去进行计算对吗,而不是海原图的这样一个hinbox,再通过比如说down sample的方式下采样到某一个fish map上,这是不对的啊。
你应该把它想象到是在原图的空间上,这才是make sense,所以啊我们还讲了非常多的那个anchor的这样一个调大调小,调大调小的这么一些呃,这个理解对不对,然后那上节课我们学的是什么。
上节课我们其实讲的跟大家讨论的是onstage的一些方式,前面的r cn的家族模型基本上都是two stage,那one stage最大的这样一个优势。
其实就是说我能够在考虑这样一个预测bounding box的这么一个效果的同,时,我还能够要考虑到一些效率,我希望能够啊在我这样一个比如说在mobile device上能够跑起来的。
这些detection算法能够有更好的这样一个效率,那为了有更好的效率,其实很大一部分就是之前这样一个anchor啊,或者说region proposal有一个rpn的这样一个存在。
会限制了我们这样一个呃大部分检测算法的这么一个,时效的这么一个瓶颈,所以呢啊为了去做这样一个啊更更更高,更高效的这么一个检测的这样一个算法,所以会有把这个,one stage给引入进来。
那再说one stage的这样一个时候,我们是不是其实讲了好几个不同的这样一个onstage啊,其实最开始我们从yo开始讲起,对uo开始讲起啊,优柔算法是什么。
优柔算法是说我每一个就是我我要我要去做物体检测的时候,我要把每一张图去割成s s啊,这个就是啊那个s行列的这么一个大小对吧,也就是这个啊不同的啊,sl一共有s s个。
那么excel呢它只负责检测一类object,然后并且呢他只预测两个pony box,这是uo算法的这么一个预测的这么一个输出对吧,然后啊除了yo。
我们是不是还讲了这个s s d s s d跟yo最大的一个区别就是啊,因为我通过这样一个转机的神经网络,我会把这个bh啊,这个啊分辨率resolution从高到低不断的进行下采样。
那么与此同时呢啊我的这一感受也就不断断变大,所以像yo或者其他的一些方式,从最后一个feature map输出的话,对不对,所以为了考虑这么一个情况,我们的ssd其实是说。
我希望能够把网络中间的那些不同大小的分辨率都能够背景出来,这样能够去试图去缓解一些这样的问题,但是事实上s s d的想法是好的,对不对,但是它效果是不是有呢,它其实也有一定的这样一个局限性。
最大的问题是什么,大家还记得吗,最大的问题是不是,其实你的这样一个uo是经si s s d,是经过这个bgg net的这么一个输出,但是上bg nt输出从224~24的input,经过若干个档。
sam已经变成一个比较小的feature map,比如说是28~28,所以即便是ssd想用这个多分支的这样一个预测,不同大啊分辨率大小的feature map去做预测,那么它一定程度上也就受限于什么呢。
受限于了这样一个上限,也就是28x28,28x28,往后面他可能可以去做多分辨率,所以它其实是有六个分支,大家还记得吧啊不同的每一个不同的分辨率,它都会有这样一个分支啊,去做检测算法。
我们上节课还提到了,就是再买一个分支怎么去算绑定box,对不对,有些分支它是预测六个是吧,有次有些分支它是预测四个funny box,所以它加起来大概是8000多个,那个绿色的bbox要比之前的。
比如说7x7x2,因为我要yo是7x7的格子分身,对不对,然后每一个又是两个的这样一个预测两个bbox,那yo其实就是预测98个,但因此s s d要比yo其实啊效果或者是照汇率上要跑一查。
那除了讲这个啊,这两个我们是不是还讲了一个工业界,现在当今当前时代是不过时,还用的比较多的一类啊,方法其实就是一个升级版本,有了b3 优乐v3 最大的啊几个改进的点是什么。
第一个最有第一个最大的一个改进点就是牛b3 ,其实啊像ssd引入了这样一个多分辨率的这么一个思想,但是他用的,会更加的这个用的更加的一个极致。
就是它其实design的这么一套大概100多层的这样一个神经网络结构,用到了非常多的residual啊,ip nation等等等等,然后在这个当中呢,他把整个这样一个scale分成了啊三个scale。
对不对啊,在这个28x28,56x56,128x18,好像是这三个啊,然后去做这样一个啊预测,他希望这三个不同的skill对应到了小物体中,物体和大物体啊,对不对,然后这些啊每一个小啊。
这个小物体中物体大物大,物体不同的这个scale会有不同的anchor来进行作用上去,那这,个anchor怎么来的呢,这anchor其实就是通过聚类举出来的,比如说我所有的anchor,我要去酒类。
那么按照它的这样一个面积的这么一个排序,可能最小的三类,那它就对应到我们的啊这个啊最小的这样一个三类,它其实就对应到什么呢,我的感受也这个,最小的最上面,然后呃这个啊越大的这样一个这个面积。
也就是large,我就对应到啊后面的这样一个分支啊,这是我们这个啊说的事情,然后这个呃那今天我们其实就是要去把检测算法里面,更多更高级的一些网络。
或者说一些feature extraction给大家来进行讨论和讲解啊,在这里面呢我们今天讲三部分的这样一个内容,ok的啊,那我们继续,那今天的这样一个三部分的内容是这样啊,第一部分我们是要解决。
或者说我们跟大家来讨论的是物体检测这个领域里面,非常臭名昭著的一个问题,因为你想想看你的这样一个检测器的算法,你不可能对于小物体说,你要啊有一个很牛逼的检测器,然后对于大物体说。
你也来一个很好的这么一个检测器,然后对于中物体来说,你也有另外一个额外的检测设计,这不现实,对不对,你当然是希望某一个算法,但是呢恰恰是因为这一个卷积神经网络设计的这么一个问题。
它的这么一个天然的特性导致啊,这个检测算法就会在啊不同大小的物体上的表现会不一样,那其中各种的原因,刚才我们已经跟大家再次去分析到了,对不对,他都试图去解决这样的问题。
那今天我们从啊另外一个角度来看待啊,还有什么样的一些更新的方式来解决这个问题,我们今天这个最新的方式会讲两个,第一个是这个f p n啊,feature pyramid networks。
这个解决了思路呢相对来说要早一点点,大概是在17年18年,17年左右的这样一个解决的这么一个新的这么一个思路,然后另外一个要来的更加的新,大概是在今年的年后,可能34月份的时候啊。
有一个新的一个最新的这么一个工作,叫啊这个trident network,然后这个工作基本上是现在的一个啊单模型的state of de的,就是最好的这么一个效果,我们一会儿来看看这两个方式是什么样子。
然后讲完第一章的section one的内容呢,啊我们会讲这个and free的一些方法,尤其我们会提到啊两个最最有名的方法,这些其实都是今年的这么一个新的工作。
csp简称是这个center scale prediction,然后他是在,行人检测,还有这个人脸检测上的数据集,都达到了这样一个最好的这样一个效果指标的这么一个方式。
大概也是45月份时候出的一个最新的这一个工作,这个工作应该是刷新了非常多的这样一个像coco啊,等等一些数据集的这么一个啊表现,然后这两个工作呢为什么放在一起讲。
是因为这两个工作有非常非常大的这么一个相似度,相似性有很强的这个异曲同工之妙,所以我们把它放在这里一起讲,也非常的经典,也足够具有这个啊适应啊,广度的适应性。
那最后呢我们是从这个物体检测训练的这么一个啊实践的角度,跟大家炫耀大概三个不同的技巧啊,从这个标题上其实大家就可以看到啊,我每一个非常小的这么一个技巧的这样一个变化呢,对整个网络性啊。
对整个检测的这样一个性能提升帮助非常非常大,对不对,我只动一个小小的trick,其他不动,我其实我可以达到的这样一个s,可以达到的这么一个指标是非常大的啊,比如说这个啊第一个是有啊3。
5个点的这样一个map,然后第二个2。1,第三个是1。4啊,这是非常大的提升,那今天我们就开始我们今天的这样一个fp的这样一个呃,这样一个思路,那刚才我们说到了在这个检测算法里面嗯。
非常非常臭名昭著的一个问题,如何能够在同样一套检测算法框架里面去能够work,这个我们的这个算法人员提出更新的这些工作之前呢,那大家会是怎么做的这样一套思路呢,大家很容易想到是什么呢,那很简单嘛。
对不对,那怎么建呢,哎这个就很好理解了,我让我的网络未进去的时候,那具体来说我我让我的这个网络我可以是说什么呢,我可以把一张原始的图片喂进来,我也可以把原始的图片缩小50%,未进来缩小75%,喂进来。
这个就叫做这个图像的金字塔的这样一个方式,就好比是这样,那这个思路其实我们用在了不仅是deep learning的这样一个思路,我们这个大概这周啊,不是这对,就这周吧。
明天我明天不是也会讲图像搜索的这样一个嗯实践的这样一个课程嘛,那其实我们就会讲到在呃back off,back off visual words这样一个呃这个这个呃领域里面。
或者叫bg bg vidual words这么一个方式里面啊,它是什么,是bo bo v,这words呢它其实是称霸了计算机视觉算法的这么一个。
10年的这么一个经典的模型是在2000年和两啊2100 0年,然后其实是在那个年代就有了这么一个金字塔式的这么一个思想,那回头讲到那个点的时候,我们再跟大家一起说,那这个方式固然是ok的啊,没问题。
但是一个最大的问题就是这样的操作的代价会有点高,大家想想看是不是第一方面又time consuming,第二方面又是我需要的这样一个内存,可能会消耗的会比较多啊,非常容易想象,对不对。
所以这个呃很多时候会不太不太去这个不切实际,然后第二个呢第二张图呢,第二张图说啊,既然你这个pyramid of image会比较这个不太可信,那其实就有点像什么。
大家写是不是有点像叫cn和fast r cn的那个事情,对不对,左边这个是不是有点像发这个r cn,我把每个图来截过来,都送到这个cn里面去啊,算法模型里面去跑,结果。
然后右边这张图是不是其实有点像这个fast a cn,我只提取一个特征图啊,对有点像一个类似的味道,所以右边这张图其实就是提取啊,通过一个正常的一个cn,从这样一个original这样一个分辨率。
然后不断的去当当some到更小的feature map和更大的感受,也那其实大家很容易听了上节课的内容,其实就容易想到这个思路,是不是有点像c4 d这样一个思路啊,但是这个思路啊不是最好的一个。
不是更好的一个方式,对不对,它基本上其实就是单一方向的这样一个work,所以我们可以看看更多的这样一个不同的这样一个结构啊,在这个检测算法里面有什么样的一些这个啊啊。
一统那第一个和这个啊a图我们刚才其实已经说了,对不对,然后c图其实我们基本上也说了,然后b图那就不用想了啊,大家其实都知道它就是一个cn的这么一个结构,对不对,然后地图呢那地图其实就是我们想说的。
今天的这部分内容就是啊其实就是fpn的这样一个思路,那地图跟b图啊,也就dog to跟boy to最大的这样一个区别,其实就是啊我不仅会有什么呢,bottom up,什么叫bottom。
bottom up呢,就是自底向上的这部分的这样一个啊这条路径,第一就是我的原图,也就是橘颜色的这个框,然后啊bottom,这就bottom up就是我的这样一个感受。
也最大的这么一个分辨率最小的这么一个feature map啊,也就是down siracial最大的这么一个动作,然后他不仅有这个自底向上bottom up的这个信息,它还有什么呢。
top down的这么一个路径,然后并且他会把bottom up和bottom,bottom up和top down这部分的这样一个两部分的feature来进行融合,再去做我的这样一个输出。
这个就是啊dog to,也就fpn我们今天要讲的这个部分的内容,而意图呢意图跟这个啊dog图有非常相似的部分,大家看看啊,它这个啊你们找找看有什么不同,其实是不是其实就是。
他其实只在最后一个这个特征图上来进行预测,他没有在像这个有multiscale或者multic branch这么一个输出,对不对,这部分少了,这个就是意图跟doctor的区别。
当然fpn在它的这样一个作用里面,它可以非常这个快速的去把意图来进行囊括进来,对不对,很简单,我只在最后一个去进行我的这样一个预测就好了嘛,这其实就是意图跟dog to的这样一个区别。
好这个就是啊我们刚才跟大家分析的几个点,对不对啊,这个地图就是啊我们不仅会用low resolution,也会有这个high resolution。
其中这个low resolution是有更好的这样一个语音信息,因为它更加的靠近输出层,对不对,就是它的这个语音分类的这个层,然后越高的分辨率,它其实越具有一些更加low level的一些啊。
beach,它可能它的这样一些特征能够更加的细腻,那我们把这个fp这张图再拉大来看一下啊,其实这个就是我们刚才说的啊,这个两个特点,第一个特点就是啊bottom up从底向上的这个箭头啊。
这个线头其实就是一个cn的这么一个正常的啊传导的这么一个路径,对不对,原始的这样一个图像的这个pixel data去转化成啊,越越来越高阶语义信息的这部分的特征,而另外一个方式其实就是top down。
就是从刚才的这个bottom bottom up的一个啊反方向来进行传输,那具体来说传输我们一会儿可以讲,但这里跟大家先提一下。
就是为什么这个啊这个从bottom up传输的方式是done something,对不对,那么从talk down的这样一个传输的方式,那又是什么呢,那很显然其实就是down sampling的逆操作。
或者说反向操作,对不对,那又是什么呢,既然都是答案,down的反义词,在英文里面是不是其实就是up,所以一个是done something。
一个是up some来进行这个top down的这个信息的传导啊,传输,好那这里其实我们跟大家也已经提到了,就是啊为什么ssd,其实咱们这个,就是他尽管有了多次啊多分支的这么一个预测,对不对。
在这个呃bg network输出之后,为什么它还是不够好的原因,对不对,刚才我们已经说了,它其实啊它的这样一个多分支的这样一个预测啊,它受限于它的这么一个上限,对不对,一个是上限。
然后另外一个其实就是它只有什么呢,bottom up的这个路径,对不对,它没有top down啊,它没有一个更好的信息融合的这么一个方式,那接下来我们就来看一下fpn的这两条路径到底是怎么去进行玩转的。
它里面怎么是不同层的这个特征给进行传达和这个进行融合的啊,我们来看一下,那首先我们先来看一下bottom,bottom这一条这个路径,那boarm其实任何一个cn基本上你其实都可以做到这么一个啊。
类似的这么一个方式,对不对,当然在这个啊最original的这个f p n里面,其实都已经,都已经会用的比较多的一个方式,其实就是resident 50啊,大家都要记得啊,网络结构的这么一个选择中啊。
去尝试任何一个新的这么一个业务的尝试啊,基本上最顺手,也就是说最顺手,最具有高性价比的,其实就是把resonate 50和inception v3 给调出来去进行一个尝试啊。
各中的原因其实我们在上节课已经跟大家分析了,对不对,像recite 50和这个inception v3 ,在那一张就是就是state of death的这个cn的结构网络图里面,是不是有一些对比。
我们还说他把他的那些什么参数啊,模型的大小啊,这是不是都画成一张图对吧,然后他的那个面积越大,然后又怎么样,面积越小怎么样,然后是不是我们跟大家提了啊,exception v3 那个东西。
seven老师一直认为是一个高性价比的这么一个选择,跟大家提到,那如果是right night的情况下,那其实我们都知道rene是有不同的stage,对不对,然后每一个不同的stage呢。
它其实就对应到这个系列一系列的这个residual,residual的这样一个building block,那这里面其实就会有不同的啊,on somebody,也就是说不同的strike。
第一次stride 2,第二次strike,然后,直到最后啊一个这么一个building block是stride 32,所以其实有几次,那就是二的四次方等于16,二的五次方等于32。
那就是当sampling了五次,这就是啊bottom up的这一条路径,那第二个我们要看到从右边往下滑,是不是是top down的这一条路径,那top down的路径它是怎么做的呢,我们来看一下。
大家要看仔细了啊,building block的这么一个结果的输出,也就是什么呢,也就是这个东东它会产生一组feature map图,对不对,那产生的这一组feature map图呢。
它会过一个1x1的这样一个卷积,就是在这里过一个,他有同学会问为什么要过一个1x1的卷积啊,大家想想看,为什么要过一个1x1的卷积,1x1的卷积在这里可能会是什么作用呢,大家猜一下,大家看一下啊。
对有同学share了一下,他的想法,就是将夏夏同学,他说感觉神经网络结构都喜欢结合,都喜欢从左到右,从右到左,这个嗯,夏同学,你其实已经深得了这个cnn design的这么一个精髓啊。
我其实没有找到任何任何一个瑕疵点来反驳你的话,因为你这句话已经涵盖了整个全集对吧,从左到右,那当然这句话是对的,对不对啊,对其实是这样了啊,那个你说的没错,其实啊就是这样了。
不然你还能选择什么样的其他的维度方向吗,一共就这个,当然还有一个就是从这个不同的宽度,对不对啊,我们是不是讲了一次,就是啊inception网络结构这样的其实还可以去,不仅有深度,还有网络的宽度,对吧。
好,我们继续刚才这个呃sp n的讲解,这里为什么有1x1的呢,大家想想看啊,是这样的原因,随着我当z的次数增加,我们是不是所有的cnn其实本着这么一个设计的原则。
这个设计的原则就是我希望在每一层的计算的开销,几乎是不要差异太大,那为了解决这样的一个问题,是不是其实我们会什么呢,会做这样一件事,情,在done something的时候对吧,分辨率我进行砍半的时候。
那我特征图的通道的个数是不是我会相应的增加呀,这就好比我特征图从24x24下采样到幺幺啊,112x112,那我原来的channel的个数从128我可能会增加到256,对不对。
所以随着我五次的当something,那么大家想想看,我的通道的个数,就是我特征图的个数,我很容易造一个非常大的数量级,对不对,这里的1x1实际上其实就是一个降维的这么一个操作,所以在fpn的设计中。
比如说256x256的这个东东啊,也就乘二,也就是256x256的这么一个通道的个数,这是它的作用,所以m5 其实就是256x256啊,sorry 256的这样一个深度。
它的这么一个特征图的这样一个feature map,其实就是strike 32的那个东东啊的这个这个东西对吧,然后这个东西呢会去做一次什么呢,会去做一次预测。
那这个预测输出的这样一个结果是大家想想看会是什么呢,是我的这样一个感受也应该还是比较大的,对不对,感受也比较大的,会是预测大物体还是小物体,大物体对不对,所以其实这个p5 的输出。
其实理论上我期待它预测大物体预测的效果要比较好才make sense对吧,这就是我们第一个m5 的输出,我相信这个应该大家都能够理解,那m4 或者ps 4的这样一个输出是啥呢。
那p4 的输出大家要看了啊,大家看了,p4 的输出对于这张图而言,是不是它其实是通过一个3x3的卷积从m4 传过来的,大家如果是这个男生的话,看到m4 不要太激动啊,不知道大家有没有过这个。
估计你们都没有,你们这个都是年龄太小了,赛文老师就从这个初中那个时候是流行这个初中小学吧,初中高中是流行这个cs的年代,我最喜欢用m4 ,然后右键,然后消音器啊,这个啊大家不要想象这个我们先先先上课啊。
回头再说啊,m4 这里面啊,他的这么一个输出经过3x3的卷积到达p4 ,那m4 怎么来的呢,m4 怎么来的,mson就要看上面这个箭头有几个箭头喂进去的,对不对,那有几个箭头位进去呢,有几个箭头喂进去。
是不是有两个箭头喂进去,所以这两个箭头是什么呢,一个是从m5 留下来的对吧,一个是从c4 流过来的对吧啊,这是两个东东,所以从m5 和c4 流过来的东西,它是不是有一个加号。
是不是这里有一个加号要进行加的操作,那我们知道两个矩阵甚至两个tensor,两个张量要做加法,减法的时候,这两个矩阵的维度必须要一致,对不对,不然是不合法的,所以两个维度要一致。
那ok那我们来看看两个维度是什么,那m5 的维度是什么,m5 的分辨率跟什么呢,跟c5 是一样的,对不对,c5 是什么,c5 是on sa 32倍的这个东东,那c4 是c4 是什么呢,c4 很简单嘛。
c4 c5 是c4 的这样一个基础上,上面砍一半的,对不对,因为它是strike是16,所以所以这两个维度是不match的。
要他们两个match只有两种方案一我要把大的那个东西up something一下,but sorry,把大的那个东西当一下,把小的东西给up something一下,那既然我这里是top down。
那当然我是要做up something一下,对吧啊,我才能够符合top down的这样一个路线了,所以m5 会经过一次up something上采样,这就是这里的二的意思。
然后另外一个c4 会经过一个这样一个1x1的卷积,它不会改变它的这么一个呃大小,对不对,然后这两个东东进行相加,这两个东东相加,其实它的这样一个resolution是什么。
其实就是这个stride away 16的这样一个resolution,对不对,然后相加之后是得到m4 ,那相交得到m4 ,是不是接下来还要再做一个3x3的卷积,3x3的卷积不会改变它的这么一个大小。
对不对,那么问题来了,为什么要经过3x3的卷积呢,大家想想看,为什么这里要加一个3x3的卷积呢,啊其实他的这样加的这样一个原因很简单,也非常直观,容易make sense,是因为在这一次加法中。
我其实是比较硬生生地把低分辨率和高分辨率的特征来进行相加了,对不对,所以这两个相加,很有可能其实是代表了两种不同的这么一个特征来进行组合,那可能会带来一种叫我们特。
我们称之为叫这个特征的这么一个不match的这么一个形式,因为它其实不是同源的这组特征,所以我要加一个3x3的卷积,把这个特征的不match这件事情给消。
除掉其实你可以理解为是一种更加平滑的这么一个操作过程啊,这个其实就是啊就是他design的这么一个想法,那刚才我们说到这个m4 的这样一个输出,经过3/3就得到p4 ,对不对。
那p4 就是一组比p5 来说特征图要更大的一个特征对吧,所以这个时候我去做网络预测输出的时候,是不是我期待来说,讲完了m4 是不是m3 其实就是一样的道理啊,m2 和p2 这个其实就非常清楚了。
所以这个其实就是top,down的这样一个计算的这么一个细节,所以我们再来讲再来看一下啊,我们把刚才那张图给放大一下啊,看这张图,这其实是我们刚才讲的c4 ride为16的这么一个case情况对吧。
然后m5 是上面c5 过来的这个特征图对吧,然后当然经过3x3的这样啊,1x1的这样一个卷积来进行降维,降到256,然后m5 经过一次上采样,这里的上采样是比较简单的。
就是我没有经过什么类似那种反转机的东东啊,我直接把长和宽啊,这个啊行和列的这部分的数据来进行这个啊扩增一下,其实复制扩增一下就ok了,然后就可以对啊前面的这个啊c4 的这样一个部分的特征进行相加。
相加之后就得到m4 m4 经过一个3x3的这样一个卷积来去消融,来进行不同源的这样一个特征来进行消融啊,就得到p4 ,那刚才我们讲完了这个top down的这样一个through。
那其实我们把top down的这样一个思路去放到整体的这样一个,网络结构图中,那其实就会比较好理的理解,对不对,这部分是我们的bottom up,这部分是我的top down。
那bottom up和top down是不是其实就是我不同的这么一个啊,c n的这么一个方向的这么一个路径,那在top down里面是不是,其实我的前一层和下面这一层的这个融合方式,刚才我们已经讲过了。
对不对啊,一方面其实就是up something,另一方面呢就是经过1x1的卷积来进行相加,相加,完了之后,然后再进行33的卷积进行消融,ok那我们需要指出一点啊,指出一点,这一点是什么呢。
其实就是说所谓的fpn其实不是指的某一种检测的网络,大家一定要搞清楚这个概念,所谓的fpn其实就是这是一种特征哎提取的这么一种方式,可以理解为在这种方式这种思维的方式下,多力度的这么一个特征。
这其实是fcn的这么一个想法和思想,但它本身并不是一个完整的这么一个检测的网络,所以通常来说,fpm是要融在我们已有的检测框架中去进行提升和改进的啊,这是fp n的这么一个本质的作用。
所以千万不要有一个概念性的一个问题,就是啊fp n你认为它其实就是跟类似于游乐v3 ,fast cn或者这样等等ssd这样一个东西是一个检测的网络本身啊,其实不是的。
所以通常来说我们fpn其实可以啊跟这个rpn来进行啊,进行很快的进行联动,怎么样进行联动呢,就是啊rpm的这么一个输入,你可以理解为我可以放到fpn的这样一个输出啊。
这边其实就是刚才我们看到的fpm对吧,然后这个f p n得到的这些不同的特征,那其实我可以去大家还记得i pn是怎么做的吗,在fast cn里面88。
c里面rpn其实是不是其实就是通过一个3x3的这样一个卷积,然后得到一个256位的这么一个特征,然后再进去过两个这个啊fc的这么一个变换,然后一方面我要去输入给这个检测class分类。
然后又另外一方面我要去得到那个bonding box的回归,所以在这里我可以把f p n的这样一个输出的结果,然后经过同样的3x3的这样一个卷积啊,一方面通去做class。
一方面去做我的这么一个b box的这样一个回归,这其实就是fpn跟rpm的这样一个联动,那我们来看一下fast time cn的这么一个呃网络结构去啊,融合了fpn之后是什么样子的。
那上面这张图其实就是从啊我们第一次课,也就是周一那天那个系统结构图摘下来的,这个都很容易理解的,对不对,fast time cn,这里面有一个a p n a p n。
就是预测我的这样一个啊proposal的这样一个case,然后另外一部分就是一张图过来,经过一个cn得到一个特征图,那接下来就是会有一个r i pulling的东东,对不对,这个ioi铺里动用。
是指把这张特特征图上呢啊某一些proposal诶给提取出来,并且去通过这样一个ii pin得到一组固定的这样一个特征向量,特征向量之后一方面去做分类,一方面去做回归,那fpn来了之后怎么搞呢。
fpn来了之后是不是就在这里了,不同的这些feature嘛,不同的feature,然后我的r p n过来之后,是不是其实就是我就知道了,在不同就是哪些object。
哪些li我去提取哪一层不同的这些feature对吧,这个是我可以得到的这个很make sense吧,很make sense啊,因为通过rpm我天然我得到的那些不同层的这个特征图。
那我的feature map resolution就不一样了,就是不一样,然后我们又说了,不同的resolution其实就对应到不同的感受,也不同的感受也其实就对应到我要去提取。
或者说去检测不同大小的这样一个特征嘛,啊不同大小的这么一个object,那在在这个这个啊这个大小上啊,比如说这个上面的这样一个对应到的这样一个object,它其实就是嗯这个可能跟他的size最为吻合。
然后这个其实就是fpn跟这个fast sn的这么一个进行了联动,所以我们把f n我们刚才讲的,然后他把他的这样一个details带给大家,mining再总结一下,那有大部分的思想都跟大家已经介绍了。
但是有一些小的detail,比如说这些啊anchor到底是他的,或者说他的这个object到底是怎么分布的啊,然后呃我们跟大家再说一说哪个这个proposal的大小。
就应该是对应到每一个这个resolution的这么一个输出呢,对吧,刚才我们不是说了,有p3 p4 p5 等等不同的吗,那第一个其实就是刚才我们已经说到了,对吧啊。
我们的这个fpm跟ipn是要进行来进行联动的,对不对,然后第二个就是啊在这个原始的original的这样一个,f啊rpn里面我是不是其实刚才说了,是通过这个33的卷积。
然后后面再接这个全连接去做的这件事情,那fbn其实就是后面直接跟两个这样一个1x1的这样一个卷积,直接就去做这样一个零一的这样一个分类,和这样一个b box的这样一个回归了。
那接下来一点呢其实就是说呃f p n跟原始的rpn有一点不同啊,有有一个很大的不同,就是大家还记得original,这个rpn是不是,我们没有说是有多个不同的这样一个层次,对不对。
我的那个3x3的这样一个anchor,不同面积不同,长宽比例的这样一个,and or是不是都是定义在最后的那样一个特征图上面的,但是fpm并不是这样,fpm既然我是有多个不同的分辨率的大小。
那我就会像uo v3 那样的一个思想,就是我会把我的anchor会分布在,不同的分辨率的这么一个维度上面去,所以具体来说我们刚才不是说到了这个p2 p3 p5 p6 嘛对吧。
它对应到不同的这个object大小呢,其实就是32 64 128256和512,这个是呃它对应的这样一个情况,所以对于p6 而言,那我对应到的这个结果。
它的这样一个proposal的大小就是512就越高,然后在不同的这个level上面,我采取跟这个fast cn一样,它有这样一个比例,一比二,二比一,还有一比一,那后面这个anchor哪些是这样的。
哪些事,positive anchor和negative一样,anchor其实就跟原来的其实是类似的啊,0。7和0。3的一个不同,sorry。
不是这个金字塔fpn不同的这样一个啊pyramid level上面,我这些这个head检测的这个head我是这样的,这很make sense嘛,啊检测的当然是这样的,那这这一点我们刚才已经说了,对不对。
去定义它的这样一个anchor,然后在fpn这里面是不是其实啊我会有多个不同的情况,那ok假设我们fpn已经训练好了对吧,那现在新来了一张图片,那这张图片来了之后。
我怎么我会有这个啊这个这个这个一张图片来了之后,我怎么去选择某一个这个object,它对应到的这个feature上面呢,我怎么去进行选择呢,那ok总结了一个公式,就是fpm里面总结了这样一个对应的公式。
就是这么一个公式,w乘以h然后除以224啊,k0 呢在im g net这个里面,这个数据集上取了224,所以大家可以算一下,你把w和h用r4 来代替一下,看一下k等于多少,那很简单嘛,你想w和h是2s。
那w乘上h开根号一下就是二四,24÷24就是一,对不对啊,log一不就是零嘛,那所以它的结果就是零了,那k0 又是说等于四,那就是k0 加零就是四楼,那其实它就是用p4 的这个对吧。
那p4 的feature是哪个,p4 的feature就是这里对吧,这里有一个p4 的feature,那这个是刚才我们说的这个prediction,还有detection的那些参数。
是要进行被shared,然后r i pin这件事情还是啊还是仍然是一致的,所以我们来看一下fpm的效果到底是有多少的这样一个提升,那fp的效果其实是在这里,那上面这一组其实就是啊举了三个实验。
第一个实验就是c也就是这个ip n,那a和b其实就是我在不同层次上的这么一个卷积层,得到这么一个结果的输出,就是我只用c5 ,只用c c4 的这么一个效果啊,以及我用这个p4 ,p5 啊。
p3 这些等等不同的这个项链,大家想想看,那我的anchor当然要来的更加少,那我多去读m p,那我得到我的anchor数拥有的是n or数,当然要更多,对不对,然后可以看到这么一个趋势。
就是我在这个呃整体的这样一个效果上要来的更加的这个出色,那我在这个小物体啊出色,那在小物体上未来的这样一个提升更加的明显,从32~44点九,对不对,然后这个接下来一组实验啊。
这个其实就是看fpm里面的一些不同的参数,带来的这么一个效果的提升,啊这是更多的这么一个实验的这样一个结果,然后这里也提到了,其实就是说在这个呃fast r cnn这个里面。
带了这个f p n的fast cn经过的这个influence间时间是零点第四八秒,而这个last night 50也就是原始的这个ip n啊,i原始的这个ip n是00:00:32。
大家看到这一组数字的话,有没有一些疑惑,就seven老师一开始看到这样一个实验结果的话,我会想尼玛你这个f p n不是引入了那么多卷积操作,然后那么复杂,有btoup。
有btom up又top down吗,你为什么这里的时间还变短了,应该是个type,大家会不会有这样的疑惑对吧,这显然不符合直觉嘛,你前面搞了那些乱七八糟的东西,你看你的这样一个呃谱这个这个fpn。
你看你的这个fp n前面你告诉我你的and or数度还增加还挺多的对吧,那这是什么原因呢,大家想仔细思考一下,能把这个问题回答清楚,其实你们各位同学对fpn的理解就要高于同龄人,这个问题抛出去。
基本上可以秒杀了95%以上的这个高级的算法研究员啊,其实很多人也没有想想明白这件事情,或许他们没忽略了这件事情,你让他们解释,他未必能解释清楚的,那大家想想看这是什么样的原因呢。
夏同学提了一个思路并行计算,我觉得非常好,他已经开始在思考这件事情了,并且他思考的这个方向是非常非常,接近了这么一个方向,但其实他的想法和他的这样一个原因其实是这样。
不仅是你们其实啊有人在这个原始的这样一个呃fp n的这样一个github,当主页上也问了这样一个问题啊,就是同样的刚才森文老师问的这样一个问题,那这里呢其实有两个原因。
第一个原因其实就是r sn和fpn,它两者是对rpn的这样一个实现的机制,有一些不一样的地方,那我们先来看fast r cn,fast r cn它的这样r p n的机制是啊,首先过来。
然后拿到这样一个7x7x1024,然后经过这样一个啊变换啊,这样一个卷积的变换,得到7x7x20148,再经过这个average polly,然后一方面去接这个class。
一方面去接我的bonding box,而对于fp的这样一个实现的机制来说,它其实相对来说不需要再去搞什么2048,1024,这么多的是channel,他过来205这个256之后,然后就直接去进。
经过两次的这样一个回归,可以看到它的这样一个实现要来得更加的轻量级,更加lighter啊,这是一个点,那另外一个点啊,这个点并不足以带来刚才两倍以上的这样一个差距,对不对,那另外一个点其实是这样。
其实是在哪呢,其实是在,ms那件事情上大家还记得吗,n m s是什么,nm是非极大值抑制,对不对,这个是什么呢,这个是不是我检测算法中的一个后处理对吧,为什么要后处理。
是因为我要把那些冗余的框框给消除掉嘛,这就是nm 4要做的事情,让大家想想看原来的fast r cn,他要去做这个nm,他怎么办,他是不是要得到整个整套算法所有的输出的proposal,结束之后。
他再去做nm呀,那假设是有1万个,那么他当然是要去做1万个框框的n m r n m s算法,我们都知道,对于某一个框而言,我要去找其他所有框对它的这样一个情况,对不对。
然后它的算法的复杂度是n的平方对吧,而对于,我要来得更加的简单,因为fp n是有多个不同的大小的分支,对不对,所以我会把所有的proposal几乎去均分到不同的分支上,刚才一共有五个分支。
但事实上可能有一些差异对吧,可能有些差异,但是差异不会说非常非常的明显,我们来分析这个问题,那其实就是说你一共有1万个框框,那也就是说每一个分支,每个分辨率它的框框它是多少,大概是2000对吧。
它的算法的复杂度是多少,你想大框框和小框框,每一个框框它的nm需要等到一起再进行做,是不是不需要,因为你想想看大框框跟小框框,我最差的一个情况就是大框框和小框框来进行重合,这是它的i o u最大。
对不对,但是即便如此,它的i o u两个的也会远远小于我们那个阈值,对把握的阈值可能会定到0。5,那大家想想为什么这一点能想通吗,应该能想通,对不对,应该能想通,你看你刚才说了。
你的这样一个域大小都是三二乘326 14,128和256啊,你举个例子,你64和r56 这样一个东西,它的i o u什么时候最大,它的i o u最大,那即使再大再大也要小于它的这样一个阈值0。5。
对不对,所以这个时候其实跟他没有任何关系,nm所以总结下来,在nm对fpn里面来说,我所有的分支nm可以去并行去做,都没有任何的问题,所以换句话说你们说n的平方o10000 的平方大呢。
还是说o2000 的平方加o2000 的平方加大加加五次,o2000 的平方大,并且这个我还可以做定型的计算对吧,所以其实就是o2000 的平方的这样一个时间。
那显然要圆于小于这个啊o10000 的平方对吧,这个其实就是fpn做influence,其实要来的相对来说更小,因为我把这样一个啊object框框我分布在不同的情况下。
而那些转机的操作确实我要比原来这个fast r cn来的更加的多,可是卷积操作在cpu上是非常非常快的呀,而我们的n m s基本上是在cpu上去预算的对,然后我又进行了这样一个并行。
这一点大家能够想通吗,能够理解到吗,啊这一点是非常重要的,理解这一点啊,我们就往下走,这个那我们继续啊,没有看到有同学有一些疑问,那这个fpm我们说他这个提出的那个时候是2017年,对不对。
2017年他提出来之后,自然而然要跟当时的stage of the art的方式来进行类比了对吧,那在coco这样一个数量级上,你的这样一个啊类比的这么一个目标是什么呢。
类比的目标当然就是15年和16年的这么一个coco的冠军,对吧啊,你看从数据上这样的一个结果要来的好很多,对不对,然后以及在小物体的情况下,在这一栏上基本上也是要秒杀其他的case对吧。
然后这个ip的这样一个情况啊,其实就是有两条路径,第一条路径是cnn的bottom up的路径啊,第二条就是top down的路径,那其实fpn其实就是利用好了这两条路径来进行up sampling。
然后再加卷积的这样一个进行组合,这就是他做的这样一个事情,然后在这个qq上的这样一个数据集,对于小物体上,它提升了将近13个,这样一个点是非常非常具有这样一个amazing的这么一个效果的。
那接下来我们再来看更新的这样一个工作,也就是今年这个啊新的这么一个工作叫on network,那这个方法其实啊要比fp n来的更加的什么,更加的简洁和漂亮,你可以可以想象到fpn那一套东西。
其实还是有非常强的这些网络设计的这些工作在这里面,对不对,又是要done something啊,又是要up something了,又是要加啊这个呃一些啊1x13x3的卷积来进行啊。
不同源的特征的这个消融了等等,但是在这个啊trade network呢,它其实来得更加的啊简洁和这样的一个大一统好,我们稍微休息个几分钟,然后上上个厕所,然后喝点水,然后我们接下来啊继续,好同学们。
我们继续啊,我们接下来接下来我们来讲啊,处理多次啊,另外一个最新的这么一个工作叫trident network,那讲trident network之前呢,我们先来一个介绍一个一个背景知识。
这个背景知识就啊就是我们在我不知道有没有之前有没有铺垫,大家提醒我一下,就是啊空洞卷积dation这件事情是不是在做讲那个神经网络的呃,压缩减脂那个工作里面,我做了一次铺垫。
就是什么是dation convolution啊,有吗啊,大家有印象,嗯我不太记得有没有讲过,然后我们来看一下所谓dation或者说deleted convolution是一件什么样的事情呢。
其实它是一种新的一种不一样的这个卷积操作,我们以一维卷积为例啊,一维卷积为例,在一维卷积的这样一个时候呢,嗯大家看,假设我的卷积的kernel是这个三啊3x13的这样一个卷型的kono。
那从这一行到这一行很容易理解,对不对,这就是我们正儿八经正常的卷积的操作,那从这一行开始,这一行开始往上走,是不是我其实隔了一个东东来进行卷积操作的是吧,对于他而言。
我选了他以及它那中间空的这三个白颜色的东东,那就是空的东西咯,那空的东西那其实就是空洞的卷积啊,所以这个方式叫空洞卷积叫bated convolution啊。
也是那deleted convolution跟普通的convolution有什么不一样的点呢,最大的不一样的点就是我的感受也会随着我的violation的这样一个程度,空洞的程度来进行增加,很明显嘛。
大家看本来我的感受也这里只有三对吧,因为我的转机的kl就是三,那当我的dlation为二的时候,也就是我,每隔一个feature去进行啊一次采样去做我的这样一个卷积的操作。
那这个时候我的感受也就不再是删了,对不对,我的感受也其实很快了,这样一些对不对,这里到这里,那再往上走,那其实就是越来越大,这是e d one d的这样一个情况,那我们来看一下2d的case。
2d的case,如果左边这张图是general的卷积,正常的这个卷积dlation为一,其实就是通常意义上的卷积,而二维dation为二的情况下,我的感受也还是3x3吗,大家说这个时候你的感受也是多少。
来大家看一下感受也是多少来啊,这个群里回答我,一下,诶对了,其实就是7x7,那你想想看,你都感热点是多少,其实就是这一圈东东,对不对,这全能懂,所以啊我们接下来继续。
那在deleted convolution这个东东里面,他其实用的最多的地方,用的最多的地方,它其实是用在语义分割那个任务里面用的是非常非常多的,为什么呢,因为大家想你要做语义分割。
其实就说白了是要对图像的每个pixel来进行分类对吧,所以你在分每一个pixel的时候,你当然要参考周围的那些信息了,所以这个时候就是啊啊这个dation会用的非常多,所以类似于一种叫unit的结构啊。
什么叫unit呢,就是看看这是不是这个网络有点像uo字形,所以是一个unit,那unit其实最早就是提出来是用在这个语音分割里面,它最有的这样一个特点,就是首先我从这个unit啊。
u的这个方向走这个方向走,写第一笔的时候,他有点是这个down sample里的感觉,我从这里往上走,其实就是一个up suing的过程,但是在up su的过程呢,它又有点像fpn这样的一样的结构。
就是把这个东西给连过来,也就是把这部分的信息给拿过来进行,这里只是做concat啊,可能未必是做这个啊,直接相加,然后在下面这一部分呢,就是我的百雷神变换不同的这个呃打雷神的这样一个commotion。
好这个就是我们dation的一些背景知识,就大家要知道什么是deleted convolution,什么是dilation,随着dation的这样一个只增加,我的感受也就会增加。
因为我会横跨更多的这样一个特征码啊,这个啊trients that work呢做了一个非常非常有意思的这样一个实验,这个实验是什么呢,他做了这样一个实验,对于resnet 50而言呢,他把。
他的最后这样一个feature map上做不同的这个dation,去看一下它检测算法的评价的指标,然后他非常惊讶地发现发现了这么一个规律,这个规律就是我检测的这样一个效果会和什么呢。
会和我的这样一个dilation会有关系的,并且呢我的dation的这样一个数值越大,我的卷积会来得更加的多,s是small me,就是m就是medium,l就是large,就是小物体中的物体和大物体。
所以总结下来dation值越大,我的大物体检测的效果来的要更好,bilation越小,小物体来的更好,诶,这是符合我们的直觉的,对不对,是不是符合我们的直觉,因为白类型越大,意味着感受也越大嘛。
resnet 11101居然也有这样的一个,这样一个分布,所以trident network其实想的就是说,既然dilation有这样的一个效果,那我能不能够设计一种网络结构,在这个网络结构上面呢。
我bation越大的这么一个结果,idation越小呢,这个就是带这个这个tradition network的这样一个核心的,这样一个基本的思想,所以他的这样一个想法。
就直接导致了他说想要去design这么一个网络的结构,所以我们来看一下这个trident network的网络结构图,当确定network经过某一个cn的这个bbb,比如说renet 50。
拿到这样一张特征图之后,ok他去分三个分支,这三个分支其实就对应了大物体,小物体和中等物体,那这个小物体其实就是我的这样一个dlh值要来的最低的地方,对不对啊,比如说是一,然后第二个呢是打雷神为二。
第三个分支呢是delegans分支为三的这样一个特征图,然后这所有的这样一个不同的分支去做我的这个结果的预测,然后最后合起来,然后再去算我的这样一个比如说n m s,所以换句话说我通过什么呢。
我通过这样一个不同变换它的这样一个dilation,检测的这么一个效果啊,这样就是它的这样一个想法,来源于前面我们的这样一个基本的这样一个实验的这样一个结果,当然在这个啊三个不同的分支里面。
我的位置还是来进行share,来进行不同的这样一个特征的获取,好这是这个trident network的一些实验的这些结论啊,当然右半部分其实就是不同的这些刚才我们说的多分支啊。
然后这个wait sharing,还有scare,where are来做这件事情,什么是scare,we are,其实就是说我小物体和中物体。
大物体其实是分别在不同的这个分支上去看不同的这样一个object,由不同的object得到训练得到的,所以基本上啊一个结论其实就是在resonance 101作为backbone上,我得到一个效果。
其实是在这个整个目前为止啊,我们的这样一个检测算法里面,单模型不用其他的trick最高的这么一个结果,那如果你用其他的各种的这些不同的trick啊,你会得到一个更好的这么一个结果。
这其实就是trade network的这样一个核心的这么一个想法,是不是其实理解起来非常的easy,对不对,因为它非常的统一,非常的漂亮,它的这样一个design的这么一个过程的这么一个理念呢。
非常非常的自然和直观啊,其实就是基于刚才的这样一个实验结论啊,这就是刚才说的事情,我们有很多很多不同的这个啊trick可以把结果给列的更加的高,那在这里,在这里还有一点可以跟大家炫耀的。
就是在train network,不是它有三个分支嘛,对不对,那如果他有三个分支,想想看在实际的业务落地当中,是不是它的效率有可能是一个瓶颈,因为我会有不同的这个计算量,我有三倍的计算量在这里。
所以呢trident这样一个network其实是做了这么一个实验,或者说设计了这么一个啊实验比对,这个意思就是我只取中间这个分支,我想看一下它的网络的这样一个预测的效果能到多少。
如果有这个网络的预测的效果不至于下降的太大的话呢,那我要就用这一个分支就得了,我不要再用更多的这个分支啊,我又不是去做我的这样一个检测物体的比赛,对不对,如果我是要去做这样一个业务落地。
那当然我要考虑到我的性能,当然你要考虑到最终的这样一个结果,那肯定是三个分支用得更好了,那所以他做了这样一个实验比对这个实验的比对,就是如果他用三个不同的分支呢,那其实就是他得到的结果是这个啊40。
6a p,然后它只用一个中间那个的分支呢,它可以得到的结果是40点,那这个得到的这样一个结果其实就是它把分支为二,本来分支为二,object嘛本来啊就是分之二,分之3/1,那其实他把分之二进行一个打开。
所以说白了他其实就是放开了branch 2的这样一个情况,那对于这个case i am,其实就是啊它几乎是可以取得一个类似近接近的这么一个效果的,那有同学会说了,诶,你为什么只用三个不同的分支。
而不是四个五个六个呢,ok那这个其实原作者也做了这样一个实验,就是取更多的这个分支呢,其实已经跟有饱和了,三个基本上就鉴定了,然后并且它还有更多的不同的trident block的这样一个实验。
的这么一个结果也在这里啊,基本上在这里其实也进店鉴定,对不对,十个啊,顶多十多个十个十个出头一点,那刚才不是说了fpn,然后又trident吗,对不对。
那其实这个很容易我们的trident这样一个网络的呃,设计它要跟fpn来进行比对,对不对啊,你对的,结果就在这里,它会在fp n的这样一个baseline基础上,还有一步的进一步的提升。
这个就是trident network,它其实就是用了我们bilation这件事情,这样一个测试的结果会有这样一个正相关的这么一个假设啊,这么一个现象,然后基于这个现象去design。
刚才这样一套比较简单又漂亮又好用的这么一个结果,那大家可以去试一下,就是在这个train network,可能它其实已经在这个网络上进行开源,然后大家可以去泡泡开。
好除了这个物体检测,其实在物体检测对这么一个领域里面是有一个什么呢,更加垂直的这么一个垂直的领域的,这么一个物体形态检测的这么一个任务,就是行人检测,行人检测我要去检测不同的人啊。
行人检测其实还是非常具有挑战的,对不对啊,尤其是这个啊不同这样一个远近啊,等等这些光照变化等等不同的这些啊,但是在行人检测里面有一个非常有名的几个数据集,其中一个其实就是cartec数据集。
在去年呢啊旷世就是face加加开源了一个啊。
目前最大的这么一个数据集要crowd human exce,大家看看它的这样一个数据集,来得更加的challenge,更加具有挑战性,那ok我们要为什么要讲这个行人检测呢。
是因为我们接下来就要讲在行人检测和人脸检测这里面啊,有一个刷新的这么一个啊,anchor free的这些方法叫csp,那其实csp它的这样一个pipeline是非常非常简单直接的啊,我们可以看到。
其实基本上我们算法领域里面那些work的好用的,这些方法基本上都是简单漂亮的,没有搞得你非常非常超级复杂的对,比如说刚才的on network,它其实就是非常简单和漂亮。
要比这个fp n来得更加的easy好用,那在这个啊原本上我们的这样一个情人节的,基本上还是采取了这个,cn这样一套思路就是不同的这个anchor,然后去去做这样一个检测的这么一套思路。
那这个csp是什么呢,csp其实就是说ok你不要给我整那些虚的那些anchor,对于我来说是非常不友好的,我怎么去调节那个anchor的大小,怎么让它去对应到小物体中,物体和大物体对吧。
都是一些非常烦烦躁的一些不同的这些实验的setting啊,不同的这样一些参数的设置,所以呢啊csp这样一个and free的方法就是ok那既然你这么繁琐好吧,那我们就直接让他这个直接一点。
本来你这个啊网络是要去预测你的这样一个bounding box对吧,那ok那我就预测两件事情,哪两件事情一我希望我的网络能够预测准我的bonny box的中心点,我能预测出我网络的长和宽。
因为一旦预测了网络的中心点和网络的长和宽,那其实我得到的结果不就出来了吗,对不对,其实就出来了,所以这其实就是csp的想要做的事情,c就意味着center也就是中心点,而s其实就是scale。
就是csp,那csp更啊这个细节的pipeline呢其实就是在这张图也非常好的理解,非常容易理解,一张图过来,经过一个cn得到一个feature map对吧,比如说在这里。
然后呢我会经历不同的这样一个stage,不同的stage其实就是不同的这个什么down simply,然后每一个stage来进行这个up simply,然后在这里进行所有特征图的concat。
然后得到一个更加多为丰富的这样一个特征图,在这个基础之上呢,经过一个3x3的这么一个卷积,得到256个通道的特征,就有点像什么的,有点像啊法斯塔c的阿p那个动作一样,那接下来做两,个分支。
什么叫预测我的中心点,其实就在这里,这张图是不是其实就是两个bbox的框框对吧,那我希望网络怎么做呢,我希望我的网络其实就是k,第一个就是我希望我的网络预测出它的中心点,在这里,发中心点在这里。
然后接下来呢我要预测一下我的网络的什么呢,网络的高是多少,a有同学说,为什么你要预测你的高是多少,而不是高和宽呢,是因为csp这个工作做了这么一个假设,这个假设就是长和宽的比例啊,基本上是在四左右。
所以预测出来了一个高,其实宽也就意味着基本上就定死了,就定住了,所以这个是它的这么一个假设啊,当然你啊他也做了不同的实验,就是到底是预测一个h好还是h和w都预测好啊,后面也会提到。
但是对于这样一个网络的分支而言,你加一个预测h和再加一个h和w其实对网络的整体的这么一个解决,其实没有太大的影响,这个我加一个分支不就完事了,但是预测中心点的话是不是有些难度,大家想想看,为什么呢。
是因为假设你的网络要进行训练的话,那中心点周围的是不是其实都是那些负样本,其实都你要预测为零对吧,只有这个东西才是这样的,是一而且偏一点点,他就不对了,所以就会给网,你想想看。
对网络会带来非常非常大的训练的困难,为什么呢,因为你整张图比如说是600x800个bonding box呢,可能只有两个人对吧,所以只有两个点是这样的,而周围的都是600x800的减二,都是负样本。
那当然你的正负样本的比例就非常悬殊了,你怎么去指望你的网络能够非常非常去学得很好,所以在这里啊,我们的作者是用了一个叫gin mask东西去逼近了,去去去去。
这个降低了一个不同的这样一个正负样本的比例的这样一个权重,换句话说它其实是在这,他意思是说你不要直接非零即一来进行看待,就好比用一个高斯的这样一个方式,渐渐渐渐的来进行过渡,最中间的那个东西。
当然是我权重最大的那周围呢一下子偏离一个像素点,你不要把它一下子就降下来,而是减缓减缓减缓一点啊,啊慢慢的去降下来,这个其实就是出于我训练更加容易的这么一个考虑。
而第二个呢就预测我的这样一个h其实就是说我对应的那个中心点,那个上面我要去做这样一个h的这么一个啊这个预测。
然后其他呢其实就是零了,所以接下来我们来看一下我们的这个损失的这样一个函数,是不是能够看懂,其实都能够看懂啊,都能够看懂,我会产生,一个高斯的mask也是高斯的mask是就在这里,然后呢对于整张特征。
整张原图而言,我不是要组织一个训练的label给他,对不对,本来的情况是对于这一个这一张image而言,他有两张图,那其实它只有两个点是唯一,其他都为零,对不对,那好了。
接下来现在我说为了减轻他的训练困难,那我有了这个高高的mask,那问题就来了,假设我有两张两个绑定box,两个行人框框,并且这两个行人框框可能还重合了一部分,那重合的那部分你怎么算这个高斯的mask呢。
ok那很容易想到重合的那一部分,你就选你那个高线生成mask中大的那个数字不就完了吗,这个其实就是mask要做的事情啊,叫max,但他想做的事情就是凡是有重合的框框,你就设置它它更大的那个值就ok了。
所以接下来我们给了这么一个啊,按样例就是高in mask长这样对吧,对大家想想就知道对吧,周围是越低的数字越小,然后中间越中间用的数字越大,那损失函数呢损失函数其实就用了我们上周啊,sorry。
前天的那个focal loss那件事情,focal loss大家还记得是做一件什么样的事情吗,pollos解决两个问题,一正负样本悬殊的问题,二难易样本的这么一个不均衡的这样一个情况的问题对吧。
所以它是通过阿尔法和伽马来进行把这个问题给解决了,大家看在这里的公式五中是不是有一个阿尔法和伽马对吧,这个几乎其实不是几乎,但这个就是focal loss的那个我们那天讲的,那个前天说的一模一样的东东。
只是在这个里面,阿尔法和伽马到底是什么,其中伽马这里通过实验室说是跟上一次的这个结果是二,那阿尔法是什么呢,阿尔法在这呢,阿尔法如果是正样本是一,如果是这个不是这样的情况下,那我要进行一个缩放。
缩放的比例,大家看看是一减m i j的这样一个贝塔次方,什么叫一减m i j的bt次方呢,m i j是什么,m i j不就是刚才我们通过那个mask生成的那个东东吗,那大家想想看,越远离中心点。
也就是越远离我的positive,那我m i j的值其实就越小对吧,那一减m i j的值就越大,对不对,e g m j又会有一个贝塔自发,那其实它就会,越来越大对吧,这个也是一样的情况。
那外面有一个负号,那是不是其实实际是越来越小,那这是符合我们的趋势,对不对,我们想要的就是越远离中心点的情况,你的权重越来得更加小的,要来跟他,不要去进行太大的权重,因为大的权重要放在中间的那些啊。
positive data上面,所以这个就是刚才我们说的这个,损失函数,然后另外一个是刚才是center的那个损失函数,就是对于中心点的那个东西,我要去正负样本对吧。
另外是我们的这个scale的这样一个损失函数,scale是做什么样的事情,scale是作为那个logo h的那个h的那个预预测,对不对,这里我们是用这个smooth and one的这样一个形式。
其实就是去做这样一个回归,我希望我的这样一个回归的职业接近也好,那smooth l one,其实我们啊you v3 游乐v2 其实很多都用到了它的这么一个损失函数,那我们这里再稍微补充一句。
其实就是在这,那为什么smooth l one会通,常会用在物体检测算法的这么一个作为损失函数呢,它背后的逻辑又是什么呢,它其实是这样,smooth l y它其实是不是一个分阶段的这么一个函数。
当x小于一的时候,是0。5的x平方,否则的话它是xx的绝对值减0。5,那大家想想看为什么,当这个x的绝对值大于一的情况下,它是x,它是这个x的绝对值减0。5的,是因为x减0。5。
它对x求梯度是不是正-1啊,取决于它左边还是右边,对不对,正-1如果说不是正-1的情况下,它还是比如说是这个,比如说就是l two的这样一个损失名词,quare air。
那如果它就是x平方的这样一个损失函数,那x平方对x求梯度不就x啊,这个x吗,如果是x的话,就相当于你越偏离得越远,我给你的损失的权重,而损失损失的值就越大,对不对,这个是合理吗,听上去是合理的。
可是你在实际上训练你的这样一个rpn和物体检测的时候是有问题的,对不对,因为一开始你的这样一个结论,你的这样一个预测的值都不准对,如果对于一开始你都不准,你的损失这么大,你很难去进行训练,去优化。
去迭代,对不对,所以这个时候我们就希望我们的检测算法有这样的一个效果,是不是当你训练刚开始比较困难的时候,你的这样一个损失是需要有,但不应该有太大,对不对,不然我怎么去训练点单。
而当你训练的越来越加准的时候,那么你的这样一个损失应该要反映出你,越准越好,那其实这个反应其实就是在0。5x平方x越小的时候,你损失就越来越小,这个就是smooth l one的这样一个想法。
那最后的这样一个实验的结论呢相对来说也比较正面啊,他在caltech这个数据上,csp表现的效果是最好的,那大家想想看,对于csp这个东东,有没有办法把csp提得更加的好呢,通过刚才的这样一个啊理解。
为什么姜文老师办了这张图在这里,而不是别的图,这张图跟别的图有什么样的区别吗,那眼尖的同学其实就能够发现这张图跟其他图最大的区别在哪呢,最大区别图是不是就在于每一个人体的框框,我还有一个什么呢。
还有在对应他的人脸对吧,所以要去把我的csp算法扩展得更加的强,很简单,在你csp预测那个分支的框框上,我加一个人脸的这个长和宽以及中近点,那我的用到的信息就更加的多,对不对,那怎么去做这件事情呢。
那这意味着你的训练数据都要有人脸的框框呢,那刚才其实提到的那个crowd human的一个数据集,是不是其实就有这个这样一个标注的信息,所以啊大家如果对检测这个问题有兴趣的同学。
我们可以把现在最牛逼的这样一个and pray的方式去进行一个扩展,来做更多的实验,那这样的话你在这样一个面试过程中,你不仅可以去反馈到你已经follow了前沿的这样一个基础。
并且你还可以根据自己的理解去改变,去升级现有的最牛逼的这样一个技术,这个就会给大家啊会有一个不一样的这样一个提升,那这件事情啊通常在面试的过程中啊,是一个huge plus。
好接下来我们再讲一个更加通用的这样一个center net这件事情,那center net其实可以理解为就是csp,只不过我是用在一些更加general的应用的场景上。
比如说人物ms coco这样一个数据集上,然后在这个人物这些不同的情况下呢,啊我还是损失函数跟原来一模一样,只是我不再停留在用什么呢,什么物体是这个啊,人脸检测还是这个起源检测啊。
我用在ms coco这样的一种场景上,然后并且他也是用mask,也是用focus啊,这两篇工作其实真的是一模一样,你看它也有一个高级的mask这样的一个生成。
然后有这个明天应该你们会有一个时序的这么一个啊环节,然后这个啊同学可以去把csp这个工作再仔细想想看,给大家参考了一些啊,这个原作者提供了这么一个,开源了它的这样一个实现的方式啊,大家可以去看看。
那最后呢给大家去啊,分享几个非常实用的这么一个物体检测训练的,这么一个实践的这么一个技巧,嗯这个技巧是这样,这个技巧是今年啊amazon吧。
应该是amazon的这个啊提出来的这么几个有效的这么一个技巧啊,它在不同的这样一个检测的框架上都看到了,用这个技巧和不用这个技巧,它的提升分别在一个点到四个点,不同的均点,不过不同的啊是非常有效果的。
那第一个技巧称之为叫mix up,其实mix up不是物体检测的这么一个独有的这么一个技巧,而是在啊图像分类的那个时候,其实就有了这么一个mix up的这么一个想法,他是这样的。
mix up是说我有了data a又有了db,我能不能把data a和db进行组合,生成一个dc再扔到我的网络进行训练,那比如说我把0。9倍的这样一个da,和0。1倍的这样一个db进行融合。
得到一个dc,把这个c扔到我的网络中进行去训练,那对于图像检测,物体检测而言,很容易想,对不对,我把这两张图融合在一起,那生成一个新的这么一个训练数据啊,在这,那对于刚才的这样一个图像融合。
那自然而然我融合的这样一个参数是不是其实是可以进行调的,他其实可以取不同的这样一个数据分布,那我们来看一下贝塔这个数据分布,贝塔这个数据分布有两个超3d一和d2 ,那大家看看红颜色这根线。
它的这样一个数据分布,是不是说,为这个比较小的和比较大的这个数据的时候,大部分的这个数据分布在这儿,那其实红颜的数据是不是对应到,刚才我们说0。9倍的a和0。1倍的这样一个b生成一个c。
他的这么一个情况是比较相似,诶没错,红线其实就是我们做图像分类的这样一个结果,实际在物体检测里面用到的这个分布呢,其实会用橘色的这根线,它会用物体检测用的多,那有同学会说,为什么你橘色的这根分布啊。
这样的这样一个融合的比例会来得更好呢,是因为做了实验得出来的结果,首先你用五五来新进,分成的时候是83。05,然后如果你只有1。5,1。5的分成的时候是83。54,他是做了一个实验得到更好。
然后这个是这张图呢,其实是反映了什么呢,反映了我做这个实验啊,这个融合之后的效果,让大家看融合之前是不是有一些这个elephant是没剪出来,会被误解,而融合之后啊,我的一些测试的结果来的更加的好。
好第二个点,第二个点是这样的,第二个点其实是说我希望我的网络算法能够去冗余,而容容忍一些噪音和噪啊,不同的这样一个噪音吧,啊比如说啊对于这个数据集来说,它有一个错误的这样一个标签啊。
一个猫被目标了一个狗,那如果说你的网络算法没有容忍噪音,那有什么样的一些方法可以缓解这样的问题呢,那其实这个问题呢这个思路呢也不仅仅只是物体检测它首创,而是在图像分类。
其实就已经有了这样的一个label smoothing的这么一个概念,label smoothing是什么样的概念,是这样,就本来我们去做这样一个,损失的时候不是会有那个one encoding吗。
那one号in coding这种编码的方式,其实就会把所有的这个信息集中在某一个编码维度上啊,使得我的这样一个,优化算法非常容易去过拟合啊,比如说刚才那个情况。
但很多时候我就把我的这样一个编码信息量给打得更加的散,不要去容易只集中在某一个编码的这样一个维度上,比如说之前的这样一个编码是10万对吧啊,现在呢我会把这个一变成0。9,然后剩余的这个维度会均分。
刚才的这样一个雨下的这么一个0。1的这样一个分量,这个就叫做label smoothy平滑标签,还给了一个平滑标签的这么一个实现啊,是非常非常简单的,其实就是刚才我们说的这个事情啊。
平滑的这么一个一直用这个呢相对来说会更加的有效,但大家要千万注意到你平滑标签可以,ok没问题,平滑标签千万你不要去做,太过了啊,如果你太过了,很容易就得到另外一个极端,不仅是过,不是过拟合。
而是欠拟合了,对不对,你想想看,你本来都是猫,这只分类猫是一,然后你变成0。9k还还ok挺好的,然后你把一变成了0。4,然后接下来去均分,那是这个就不太好了啊,所以这是需要进行大调参用的。
那接下来还有一个方式啊,一个一个一个技巧是叫这个啊训练的这么一个learning rate这么一个结果,any rate是这样,就是很容易啊,我们的any rate其实是过大过小。
或者说呃这样一个不同的情况啊,大家看看这个是过小对吧,这是过大导致来回折腾,这个是真的很好对吧,所以learning rate其实是说啊,假设我们从不同的learning rate打印出来。
然后它的这样一个lost的反馈的情况,那其实这一段的内容是相对来说比较合适的,对不对,所以这里给了这么一个参考的这么一个实现。
就是啊linuate呢有一种叫cosine linuate的这么一个啊是表达的方式,而随着不同的这样一个时刻,我的这么一个不同的这个时刻,对应到的这个。
大家看看对于蓝颜色这根线是原来step size step这样一个decay,其实就是前十轮用0。1,后十轮用0。01等等啊,这个啊cos in dk,其实去黄啊,红色的这根线来的变化得更加的平滑一些。
然后就是cos的这么一个变化的这么一个结果,然后刚才我们说最后一张slice好,没看到,是不是大家自己已经有了啊,在这里,最后一张slide,我们是说我们对刚才的那一些不同的trick来进行总结。
那总结什么叫总结呢,就是你把coco的这个所有的这些类上,把它的这样一个检测效果都打印出来,这是你的横坐标啊,纵坐标大家看到是不是有一些这个绿颜色以及红颜色的点。
绿颜色的点就是使用了一些trick之前的这些结果,而红颜色的呢其实就是用了一些trick之后的这样一个涨幅,可以看到这个效果还是比较明显的,对不对。
所以这三个效果啊是seven老师觉得又简单又有效果的这么一个trick,大家不妨可以去多多尝试,然后如果是大家后面去选这个就业的这些,如果是选cv方向,然后又要选,又要想去做这个物体检测这部分的内容。
我觉得可以把今天的这个呃这个呃一些的这些内容,再好好再整整消化一下,比如说fp的这样一个理解对吧,然后为什么这样一个它的这样一个influence的时间。
反而要比这个general的这个啊发达还要来得更加的快呢,这个问题啊大家再想想看,然后另外其实就是呃我们在这个ak free的一些理解上啊,其实讲的就是一件事情啊,所有的这个sc sp其实没有任何的这。
样一个特别的这么一个难理解的点对吧,其实就是要去预测那个中心点和它的scale,而预测中心点的时候,他有一个天然的正负样本不均衡的问题,所以我引入了一个高斯的mask去做这样的一个环节。
而在这个loss函数的时候,我又使用了这个focal loss来进行进一步的环节,那有同学问什么叫这个跟embedding有什么区别,哪个有embedding有什么区别。
这三个trick是在物体检测上用的多,还是cv任务上都能用的嗯,这三个任务其实在cv任务上都能够用,只是在这个刚才汇报了一些不同的这些提升是在检测任务上用的,其实在general的cv任务上。
图像分类都可以用,还有其他的问题吗,那个夏同学说的是啥意思,哪个跟embedding有什么作用,smooth,那你的这个理解差远了,smooth跟embedding完全是不一样的,懂不懂呀。
label smoothing只是在one hot encoding上的那个结果,做一次平滑,它是一个固定的东西,比如说一共有三个物体,然后他的外号encoding是100。
然后你做label smooth smooing的这样一个结果,那其实就是把那个一的权重降到0。9,剩下来均分那就是0。05,0。05,它是一个固定的过程啊,用它作为gt能够理解了。
然后有同学说物体检测很难,怎么说呢,物体检测因为它涉及的面相对来说会比较广,因为不仅是一个图像分类的吧,你做一个cross entroy就结束了,它会有不同的这些model,其实物体检测嗯,这个。
其实物体检测呃,最大的一个点就是你对它的整个技术结构和框架的理解,那英肖老师不是帮大家去拎了一下啊,对不对,这就对应这三个篇章嘛啊two stage,one stage这个ana free。
然后这里最大的一些问题的理解,其实基本上都已经给大家给布置开来了,但是接下来确实需要大家就是去跑一跑我们的这样一个物体的检测,不仅是比如说你理解了ub 3是吧,然后它有三个不同的scale。
那这个时候你就要去试一试这三个不同的scale啊,怎么样,并且呢还要尝试去进行在不同的数据集上进行更改,因为开源的这个情况可能时候都会用到一些m coco,这个数据就上它对应的那个skill。
它放到你的业务场景上,那是不是还适用呢,对吧,你可能要再跑一次这个came in的这样一个聚类,去采取更好的这样一个anchor,那在这个cn里面,我们是不是还说要去选择不同的这个安or的大小。
怎么去定义它的这样一个最小的还是最大的,以及中间的那个这些物体的这样一个不同的anchor,这些其实我觉得才是大家需要去敲代码去做一些的理解,就是大家去做物体检测的这样一个实际的这么一个业务训练。
不是说面试官或者说在工作的场景中,需要考察大家如何一行行代码去敲出来的,而是说如何用现有的这些技术去follow这些前沿的技术,快速的去进行一些改动和变动,是用在你的这样一个新的场景上。
那seven老师其实已经有意的去训练大家,比如说刚才问的这个问题,csp怎么去啊,提升的更加的好啊,这个时候啊你有人脸的信息,你怎么用上来,这个时候大家能够很快速的去进行一idea上的想法。
就是比刚才想到这样一个点,我加一个分支,这个分支是预测的人脸的框框,另外一个就是你要有这样一个能力,把开源的这一段代码首先跑通,这是第一点,第二点就是把刚才的这个东西给实现上去加进去。
这才是需要大家都有这样一个代码能力,一行行代码要去抢啊,不是说让你从零开始去去构建,嗯其他同学对今天还有什么样的一些问题吗,对今天的这样一个课程的内容,嗯没错,这个chris是这个呃。
觉得cp还挺有意思的,对不对,sa老师也这么觉得,不然为什么我不会从这个学生的生涯和工作都还集中在cv,因为cv其实要比一些其他的ai的算法的方向能够,比如说随就是能够看到对吧。
很直观的看到你的这样一些啊技术的这么一个输出啊,不管是检测分类对吧,你都可以很快的进行可视化,然后他又去它又有非常广泛的这样一个应用的场景,不管是工业还是啊啊我们的安防场景,还是实际的这个生活场景中。
因为视觉去理解这个世界的这么一个啊入口嘛,对吧啊,是非常广泛的,所以后面的这些发展,我觉得cv一定会越来越发展的会更加的好,这就是我自己还挺坚信这件事情,我不是说让大家全部来转c去学c v啊。
就你们还是要找到你们自己的那个兴趣点啊,seven老师就是自己有兴趣去学,去选择这样一个方向,但是不否认我们的nlp,我们的金融啊,我们的推荐系统也是大有可为的啊。
好吧就是后面就是你们选择不同的这些老师,或者一些想要去做的一些project的形式啊,你们还是更follow你们自己的内心深处的这些兴趣啊,兴趣才是最好的老师。
不然真的是你只是觉得诶seven老师好像听了赛文老师的这几堂课,你觉得好像cv还挺有意思,还挺能够听得懂吗,那那你就去做,其实啊原来你更有兴趣去做这个np,三位老师这样建议你还是不要去做cv。
你还是去follow的这样一个兴趣,那行,那我看群里也没有其他的同学提问了,那我们就先这样啊,后面我还会给大家上课的,然后我们后面就有问题再进行交流好吧,然后那今天的内容就这样,祝大家周末愉快好吗。
嗯拜拜,然后明天不要忘了。
明天还有线下的课程。