[Recommandation] Réglage du modèle de tri

Sélection du modèle de tri

  LR, GBDT, LR+GBDT, FM/FFM, modèle profond (large et profond, DeepFM, DCN, etc.)

Méthodes d'entraînement courantes pour classer les modèles

méthode
Méthode 1 : entraînement T+1 (quantité totale de données dans une fenêtre glissante de temps fixe pour l'entraînement)
Méthode 2 : Entraînement incrémentiel quotidien
Méthode 3 : combinez la méthode 1 et la méthode 2, c'est-à-dire effectuez un entraînement incrémentiel dans la journée (comme un entraînement incrémentiel au niveau de l'heure) et effectuez un entraînement complet T + 1 à la fin de la journée.

Exemple de tentatives de gestion des déséquilibres de classe

  Pour l'ensemble de données de tâche de classement dans le domaine de la recherche et de la promotion, les échantillons positifs et négatifs sont sérieusement déséquilibrés, c'est-à-dire que le nombre d'échantillons négatifs est souvent des centaines ou des milliers de fois le nombre d'échantillons positifs. Pour un déséquilibre de catégorie d'échantillon aussi grave, si aucune solution n'est prise pour atténuer ce problème, il sera très difficile pour le modèle d'acquérir des connaissances. Pour les tâches de tri, les méthodes courantes pour atténuer le déséquilibre des catégories sont les suivantes :

  Sous-échantillonnage des échantillons négatifs :Le but est d'échantillonner certains échantillons négatifs à partir d'un grand nombre d'échantillons négatifs d'une certaine manière, de sorte que la proportion d'échantillons négatifs puisse être réduite. Après avoir échantillonné les échantillons négatifs, dans la tâche de classement dans le calcul du champ publicitaire, l'étalonnage doit être effectué lors du calcul de la formule de classement à la fin (l'étalonnage se produit lors de l'inférence en ligne et l'étalonnage n'est pas pris en compte lors de la formation hors ligne). Pour les systèmes de recherche et de recommandation personnalisés, ils se concentrent uniquement sur l'ordre relatif des probabilités de notation, et l'ordre relatif des probabilités de notation avant et après l'échantillonnage ne changera pas, donc aucun étalonnage n'est requis.

  L'échantillonnage d'échantillons négatifs gaspillera beaucoup d'échantillons négatifs.

  Suréchantillonnage des échantillons positifs :Le but est d'augmenter le nombre d'échantillons positifs par une méthode. Si l'échantillon positif est suréchantillonné à la même ampleur que l'échantillon négatif, la taille globale de l'échantillon d'apprentissage sera trop grande et le temps d'apprentissage sera beaucoup plus long que le temps avant que l'échantillon positif ne soit suréchantillonné. Si les échantillons positifs sont échantillonnés, la probabilité de notation doit également être calibrée dans la tâche de classement consistant à calculer les publicités, tandis que les tâches de classement dans les systèmes de recherche et de recommandation personnalisés n'ont pas besoin de calibrer la probabilité de notation.

  En copiant simplement les échantillons positifs et en modifiant le nombre d'échantillons positifs à la même taille d'échantillon que les échantillons négatifs, l'effet hors ligne du modèle n'est pas mauvais, mais le temps de formation est relativement long. Par exemple, il faut 4 à 5 heures pour s'exécuter. une seule époque sur une seule machine. Pour cette raison, nous avons fini par ne pas utiliser cette solution.

  · Chaque époque échantillonne le nombre d'échantillons négatifs et d'échantillons positifs 1:1 :De cette façon, les échantillons négatifs ne sont pas gaspillés et le nombre d'époques peut être pesé en fonction du nombre d'échantillons négatifs et du temps de formation.

  La méthode ressemble à ceci, en utilisant l'API tf.keras + tf.data.experimental.sample_from_datasets pour échantillonner à partir d'un grand nombre d'échantillons négatifs, et en les associant à des échantillons positifs pour former l'ensemble d'apprentissage final. vérification définie après chaque époque ne change pas. Si le modèle a complètement convergé, c'est-à-dire que la perte est fondamentalement inchangée et que les paramètres du modèle sont fondamentalement inchangés. À ce stade, il est possible que l'AUC de l'ensemble de vérification ne change pas, mais le modèle devrait pouvoir voir différents les échantillons négatifs dans les premières époques. , devraient continuer à apprendre sans converger, de sorte que l'AUC des premiers ensembles de validation d'époque devrait changer. L'inférence peut être la fosse de Tensorflow/TF. Il est possible que chaque époque corresponde au même échantillon négatif et que le modèle converge essentiellement après la première époque.

  Utiliser le poids de la classe ou le poids de l'échantillon :Le but est de faire en sorte que le modèle accorde plus d'attention aux échantillons positifs en fixant des poids. Cette méthode est utilisée dans de nombreux projets et l'effet réel est également très bon.

  · Utilisez la perte focale :La perte focale peut rendre difficile l'apprentissage des échantillons et atténuer le déséquilibre des échantillons de catégorie. En raison de contraintes de temps, ce projet n'a pas essayé cette solution.

sous-équipement

  Pour le sous-ajustement, tout simplement, le modèle n'apprend pas assez. Les méthodes de traitement courantes sont les suivantes :

  Avec plus de fonctionnalités améliorées :

  Traitement de mise à l'échelle des entités des entités continues (le modèle de profondeur est très sensible au changement d'amplitude des entités continues, donc si le modèle de profondeur est utilisé pour la modélisation, le processus de mise à l'échelle des entités doit être effectué sur des entités continues). Il existe de nombreuses méthodes de mise à l'échelle des caractéristiques, telles que la normalisation du score Z, la normalisation MinMax, le journal, les méthodes de lissage (telles que le lissage bayésien), etc. Pour les caractéristiques de ratio telles que le ctr historique, le lissage de cette caractéristique est souvent pris en compte dans la tâche de tri. Le but est de rendre les valeurs obtenues après lissage de ces éléments avec le même ctr historique mais plus d'expositions et plus de clics que ceux avec de longues queues . (par exemple, un article cliqué 1 fois en 7 jours et exposé 2 fois et un article cliqué 50 fois en 7 jours et exposé 100 fois, bien que leurs taux de clics soient les mêmes, leur popularité est très différente, donc pour le moment, il n'est pas reconnaissable pour eux d'utiliser directement ctr dans les 7 jours en tant que fonctionnalité, et il est très significatif de faire le lissage ctr à ce moment).

  Il est également possible d'ajouter progressivement plus de fonctionnalités croisées côté appareil et côté publicité en fonction de la sémantique métier. Nous avons également essayé cette méthode dans le projet, et le sous-ajustement a été encore atténué.

  Augmenter la complexité/capacité du modèle :

  Dans le cas du modèle de tri large et profond actuellement utilisé, il existe deux façons d'augmenter la capacité du modèle. La méthode 1 consiste à augmenter le nombre de couches entièrement connectées ou à augmenter le nombre de neurones dans chaque couche. La méthode 2 consiste à augmenter le la longueur du vecteur d'intégration devient plus grande. En règle générale, la couche entièrement connectée utilisée dans le modèle de classement de l'industrie est généralement constituée de couches 3. Ce projet utilise également des couches 3. Nous avons essayé d'augmenter le nombre de neurones dans chaque couche. De plus, j'ai vu de nombreux articles qui définissent généralement la dimension du vecteur d'intégration de la table d'intégration itemid/usrid utilisée dans le modèle de tri à 8 ou 10 (ce qui est considéré comme une valeur empirique).

  En plus des méthodes mentionnées ci-dessus pour atténuer le sous-ajustement, l'ajustement du taux d'apprentissage et de la taille du lot, ainsi que la méthode de traitement du déséquilibre des catégories d'échantillons peuvent atténuer le sous-ajustement. Par conséquent, on peut voir qu'il existe de nombreux facteurs de combinaison pour atténuer le sous-ajustement. La méthode recommandée est de ne changer qu'un seul facteur à chaque fois pour comparer les effets après l'entraînement. La mise à l'échelle des fonctionnalités doit être effectuée en premier. En plus des trois facteurs de taux d'apprentissage, de taille de lot et de déséquilibre des catégories d'échantillons, nous pouvons essayer les méthodes suivantes étape par étape pour atténuer le sous-ajustement : caractéristiques statistiques), puis augmenter la complexité du modèle (augmenter principalement le nombre de couches ou le nombre de neurones), et enfin augmenter progressivement les caractéristiques croisées significatives.

sur-ajustement

  Le surajustement fait référence à l'effet/performance du modèle sur l'ensemble d'apprentissage, mais les performances sur l'ensemble de validation sont loin de l'ensemble d'apprentissage. Dans les projets de production réels, nous nous soucions davantage de savoir si le modèle fonctionne bien sur l'ensemble d'apprentissage et l'ensemble de vérification. Dans ce cas, nous ne nous soucions pas même s'il est surajusté. Par exemple, l'AUC sur l'ensemble d'apprentissage est de 0,95, et l'ensemble de vérification L'AUC sur l'ensemble est de 0,8, donc cette situation est un surajustement, mais l'AUC sur l'ensemble de validation est suffisamment élevée, donc nous pouvons accepter cette situation ; si l'AUC sur l'ensemble d'apprentissage est de 0,95, l'AUC sur le ensemble de validation Il est de 0,6, ce type de surajustement est ce dont nous devons nous soucier. Du sous-ajustement au sur-ajustement, c'est parfois une chose instantanée (par exemple, si plusieurs fonctionnalités sont ajoutées à la fois, il est facile de passer du sous-ajustement au sur-ajustement). Pour les scénarios où des modèles profonds sont utilisés pour les tâches de tri, les méthodes de traitement courantes pour le surajustement sont les suivantes :

  Collectez plus de données : 目的是让模型能更多的见到不同的数据分布,从而学习到不同的知识。比如T+1训练中的T常见的是7天的数据作为训练集(当然这个T取多少和训练集中的正样本量有多少有很大关系),在我们这个项目中,T取的是30天的数据,因此能获得更多的样本尤其是正样本。

  减少模型复杂度/容量: 也就是使用小一点的神经网络,包括小一点的embedding table,目的是让神经网络和embedding table的容量变小。在实际的项目中,见到过把itemid/userid embedding table的embedding向量的长度设置为几百几千的,不建议这样,太容易过拟合了,就像前面提到的,设置为8左右就是一个不错的起点。注意这里的embedding指的是input embedding,而关于output embedding以及文本embedding向量长度的选择可以参考我的github中的文章推荐系统概览。

  使用BatchNormalization (简称BN,本质是对神经元的激活值进行整形,它在Deep Learning中非常有用,建议尽量用):使用BN的话,batch size不能太小,而batch size的调整一般伴随着同方向的learning rate的调整(也就是把batch size调大的话,learning rate可以适当调大一点点)。虽然BN主要是在CNN卷积层用的比较多,但是MLP层也可以用,RNN的话要用LayerNormalization(简称LN)。在当前项目中,使用BN后的离线效果提升很明显。

  使用Early stopping早停: 监控模型在验证集的metric,并early stopping早停。Early stopping并不是必须的,如果设定模型固定跑的epoch数量,之后选择一个表现最好的epoch的checkpoint也是可以的,这个情况下就不需要early stopping。

  正则化方法: 在深度学习中,常用的正则化方法是Dropout,L1/L2正则,Label标签平滑等。当前项目使用了dropout和L1/L2正则。Dropout的比率以及L1/L2正则的超参数在调试的时候,都要小步调整,大幅调整很容易一下子就从过拟合到了欠拟合了。

  使用更少的特征: 在这个项目中,一下子增加了几种交叉特征后,模型从欠拟合到了过拟合。然后在去掉了几个交叉特征之后,过拟合得到缓解。因此加入新的特征要一点点加,小步走。

  在使用深度模型发生过拟合的时候,首先要检查验证集的数据分布(比如每个连续特征的统计分布,每个离散特征的覆盖度,和训练集中的数据分布做一下对比)。如果训练集和验证集的数据分布相差很多,考虑如何重新构造训练集和验证集;否则,建议尝试按照如下的顺序来缓解(每做完一步就训练看效果,如果验证集的效果能接受了,就先打住;否则继续下一步):使用BN(基本上是标配)——使用更少的特征(如果特征本身就不多,可以跳过;主要关注交叉特征是否很多)——收集更多的数据(如果正样本量已经足够多,可以跳过这步)——使用正则化方法——减少模型复杂度/容量(尤其要注意embedding table中embedding向量的长度)

其他问题

  数据集变了,模型的离线评估AUC变化很大:

  数据集变大可能会导致容量小的模型效果变差,发生欠拟合。对于CTR/CVR任务,训练流程跑通以后,用固定滑窗的数据集来训练调试模型;而一般固定滑窗内的数据集的量级差不多。数据集的清洗和预处理每天都要保证一致性的行为,否则出问题调试很花时间。

  要尽量保证特征的线上线下一致性。

  同样的数据集和同样的模型,两个实验对比,发现对验证集的评估指标AUC有差别:

  ML带入的随机性很多,所以最好在上下文尽量一致的情况下对比,包括超参数的设置,训练任务的相关参数和随机种子fix(这个非常重要,包括python random seed和tensorflow.random rseed都需要fix)。

  经常发现在分布式训练中模型的评估指标比单机训练的评估指标要差:

  这个是很常见的。使用分布式训练甚至只是单机多卡的时候,学习率可能不适合还用单机单卡训练的学习率,适当需要调整。对于horovod分布式训练方式,一般来说,把学习率变大一点就好,不能完全按照horovod官网建议的那样即用worker数量乘以之前单机单卡的学习率作为调整后的学习率(这个可能会得到很大的学习率,从而导致模型学习效果不好)。对于parameter server分布式训练的异步梯度更新方式,可能需要把学习率调小,为了让最慢那个stale model replica的更新对整体的影响小一些。

  特征的覆盖度问题:

  如果某些离散特征的特征值的样本出现频率很低比如少于10次,那么可以考虑特征向上合并或者把那些小类别统一归并为”Other”。

Je suppose que tu aimes

Origine blog.csdn.net/qq_43592352/article/details/131937450
conseillé
Classement