算法工程师平常,训练的模型翻车了怎么办?

你们好,今天和你们聊一个算法工程师的职场平常——模型翻车算法

咱们都知道算法工程师的工做重点就是模型训练,不少人天天的工做就是作特征、调参数而后训练模型。因此对于算法工程师而言,最常常遇到的问题就是模型翻车了,好容易训练出来的模型结果效果还不好。不少刚入门的小白赶上这种状况都会束手无策,不知道到底是哪里出了问题。markdown

因此今天就和你们简单分享一下,我我的总结出来的一点简单经验,遇到这种状况的时候,咱们应该怎么处理。网络

检查样本

整个模型训练结果很差的排查过程能够遵照一个由大到小,由浅入深的顺序。也就是说咱们先从总体上、宏观上进行排查,再去检查一些细节的内容。框架

不少小白可能会有点愣头青,上来就去检查特征的细节,而忽略了总体的检查。致使后来花费了不少时间,才发现原来是样本的比例不对或者是样本的数量不对这种很容易发现的问题。不只会浪费时间,并且给老板以及其余人的观感很差。oop

因此咱们先从总体入手,先检查一下正负样本的比例,检查一下训练样本的数量。和往常的实验相比有没有什么变化,这种检查每每比较简单,可能几分钟就能有一个结果。若是发现了问题最好,没发现问题也不亏,至少也算是排除了一部分缘由。学习

检查完了样本的比例以及数量以后,咱们接下来能够检查一下特征的分布,看看是否是新作的特征有一些问题。这里面可能出现的问题就不少了,好比若是大部分特征是空的,那有两种状况。一种是作特征的代码有问题,可能藏着bug。还有一种是这个特征自己就很稀疏,只有少部分样本才有值。根据个人经验,若是特征过于稀疏,其实效果也是不好的,甚至可能会起反效果,加了还不如不加。spa

另一种可能出现的问题就是特征的值域分布很不均匀,好比80%的特征小于10,剩下的20%最多能够到100w。这样分布极度不平衡的特征也会拉胯模型的效果,比较好的方式对它进行分段,作成分桶特征。通常状况下特征的问题很容易经过查看分布的方法调查出来。3d

查看训练曲线

不少新手评判模型的标准就是最后的一个结果,好比AUC或者是准确率,而忽略了模型在整个训练过程中的变化。这其实也不是一个很好的习惯,会丢失不少信息,也会忽略不少状况。日志

比较推荐的就是要习惯使用tensorboard来查看模型训练的过程,tensorboard基本上如今主流的深度学习框架都有。经过它咱们能够看到一些关键指标在训练过程中的变化,它最主要的功能就是帮助咱们发现过拟合或者是欠拟合的状况。code

咱们常常遇到的一种状况就是在本来的特征集当中,模型没有任何问题,可是咱们一旦加入了一些新的特征以后,效果就开始拉胯。咱们查看日志发现模型快训练结束以前的这一段时间里AUC或者是其余指标仍是在上涨的,就误觉得没有问题。其实颇有可能模型在中途陷入过过拟合当中,只是因为训练时间比较长,因此被忽视了。

不少人常常吃这个亏,尤为是新手。浪费了不少时间没有发现问题,其实打开tensorboard一看就知道,模型中途过拟合或者是欠拟合了,那么咱们针对性地就能够采起一些措施进行补救。

参数检查

除了上面二者以外,还有一个排查的点就是参数。

这里的参数并不仅局限于模型的训练参数,好比学习率、迭代次数、batch_size等等。也包含一些模型自己的参数,像是embedding初始化的方差,embedding的size等等。

举个简单的例子,不少人实现的embedding的初始化用的是默认初始化,默认的方式方差是1。这个方差对于不少场景来讲实际上是有些偏大了,尤为是一些深度比较大的神经网络,很容易出现梯度爆炸,不少时候咱们把它调到0.001以后,效果每每都会有所提高。

虽说模型的结构才是主体,参数只是辅助的,但这并不表示参数不会影响模型的效果。相反,有的时候影响还不小,咱们不能忽视。固然要作到这一点,咱们不只须要知道每个参数对应的意义,也须要了解模型的结构,以及模型运行的原理,这样才能对参数起到的效果和意义有所推测。否则的话,只是生搬硬套显然也是不行的。

场景思考

上面提到的三点都还算是比较明显的,接下来和你们聊聊一点隐藏得比较深的,这也是最考验一个算法工程师功底的。

不少时候在某一个场景上效果很好的模型,换了一个场景效果就很差了,或者是一些很管用的特征忽然就无论用了。这也许并非由于有隐藏的bug,可能只是单纯地模型水土不服,对于当前的场景不太适合。

拿推荐场景举个例子,好比在首页的推荐当中,因为咱们没有任何额外输入的信息,只能根据用户历史的行为偏好来进行推荐。这个时候咱们就会额外地关注用户历史行为和当前商品的信息的交叉和重叠的部分,着重把这些信息作成特征。但若是一样的特征迁移到商品详情页下方的猜你喜欢当中去,可能就不是很是合适。

缘由也很简单,详情页下方的猜你喜欢召回的商品基本上都是同一类别甚至是同款商品,这就意味着这些商品自己的信息当中有大部分都是同样或者是高度类似的。既然这些信息是高度类似的,模型很难从这些差别化很小的特征当中学到关键信息,那么天然也就很难得到一样的效果。这并不是是特征或者是模型出了什么问题,可能就是单纯地场景不合适。

对于场景与特征以及模型之间的理解和思考才是最考验一个算法工程师能力和经验的部分,新人的注意力每每关注不到这个方面,更多地仍是局限在特征和模型自己。有的时候,咱们的思惟不能顺着一条线毫无阻碍地往下走,也须要常常停下来反思一下,我这么思考有没有忽略什么问题。

今天的文章就到这里,衷心祝愿你们天天都有所收获。若是还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原文连接,关注获取更多文章

相关文章
相关标签/搜索