作者|The AI LAB
编译|VK
起源|Medium

对SparseNN模型的过拟合进行钻研,并摸索了多种正则化办法,如嵌入向量的max-norm/constant-norm、稠密特色id的dropout、参数的freezing、嵌入膨胀等。然而,据咱们所知,在单次训练中,没有显著的缩小过拟合的成果。

正则化全连贯层和稠密参数

随机梯度降落优化器应用小批量样本来更新全连贯层和稠密参数。给定一个小批量的例子,通常所有的全连贯层参数都会被更新(假如没有gate或dropout),而只有一小部分稠密参数会在正向流传中被激活,从而在反向流传中被更新。例如,假如一个稠密特色对用户在过来一周内单击的广告id进行编码,尽管咱们可能有数百万个惟一的广告id,然而在一个小型批处理中(通常是100个样本)呈现的广告id的数量与基数相比十分无限。

正则化稠密参数与全连贯层参数的不同之处在于,咱们须要在运行时辨认小型批处理中已激活的稠密参数,而后仅对这些参数进行正则化。

在正则化全连贯层参数时须要留神的一点是,全连贯层中的偏差通常不须要正则化。因而,须要辨认这些偏差,并将它们主动排除在正则化之外。

L2正则化

J(W)是教训损失,||W_dense||²是全连贯层稠密参数(也称为L2正则化器)的L2范数的平方;||W_sparse||²也是如此。

参数W_i的损失L的梯度被合成为教训损失J和所谓的“权重衰减”项*W_i的梯度。

为了实现L2正则器,可通过增加lambda*W_i来更新L对于W_i的梯度。lambda在实现中称为权重衰减。

L2正则化 vs max-norm正则化

  • L2正则化可同时利用于全连贯层和稠密参数,这两个参数都可能会过拟合。而max-norm仅实用于稠密参数,因为在全连贯层中,权值矩阵的向量范数没有很好的定义。
  • 损失函数中的L2正则化项是可微的,等效于增加一个衰减项以惩办梯度降落中的大权重;而max-norm突破了前向-后向流传框架,因为如果更新后的嵌入向量的范数大于1,它将嵌入向量进行归一化。

这里有几个试验是由察看到的sparseNN在屡次传递训练数据时过拟合引起的。训练设置非常简单,咱们只思考一个用户特色和一个广告特色,而不思考全连贯层特色。

试验概述分为两局部:

(a)形容试验

(b)进一步的假如和测验它们的办法。

让咱们以以下设置为例。

设置

  • 用户端特色(SPARSE_USER_CLK_AD_IDS)和广告端特色(SPARSE_AD_OBJ_ID)。
  • n_train = 1代表训练的天数,n_test = 1天代表测试的天数进行测试;在一次比拟中,训练的天数和测试的天数是固定的。
  • 第二天绘制测试(均匀)标准化熵曲线以模仿生产条件。

Shuffling:将取得雷同的后果。

对across_ts_shuffle, shuffle_all, shuffle_within_partition 进行Shuffling

升高学习速率是逻辑回归的一种正则化办法。但这对sparseNN没用。

学习率升高,num_passes = 2

通过限度嵌入范数进行正则化(此处阐明const_norm; max_norm后果类似)。这里,老本函数与所利用的正则化无关。

const范数

以最小的容量升高学习率:

当你尝试将尺寸减小为2且num_replicas = 1以最小化模型容量时,你会看到

num_passes=1/sparse_alpha=0.002 时为0.8711

num_passes = 2时为0.8703。

最初,在num_passes> 1的状况下,咱们获得了胜利!

然而,num_passes = 3毁坏了咱们短暂的高兴;咱们始终试图超过0.8488,也就是以后的sparseNN参数可能生成的值(dimensionality=~32, learning rate=0.04 和 num_replicas=2).

最小容量的学习率num_passes = 1

最小容量的学习率,num_passes = 2

最小容量的学习率,num_passes = 3

SGD优化器

如果学习率被重置,该怎么办?对于这个试验,能够复制间断分区中一天的数据。图(a)示意num passes=1的数据,图(b)示意训练数据的多遍训练,其中num_passes=1示意间断分区上雷同的数据;num_passes=2示意同一分区上的多遍训练。后果是一样的。

就dropout而言,sparseNN提供dropout_ration和sparse_dropout_ratio。稠密的dropout将从嵌入层到全连贯层的连贯去掉;而全连贯层的dropout会在网络中失落连贯。


Dropout num_passes = 1


Dropout num_passes = 2

最大熵正则化器?

你能够尝试对嵌入的熵进行正则化,这样嵌入的维数能够保留,而不是记住用户-广告对。例如,在用户-电影举荐问题中,如果电影是用(动作、戏剧、情感、悲剧)来示意,它能够很好地概括,然而如果用户-电影对被记住,它在测试数据中会失败。

通过这些试验:

  • 嵌入将用户与广告分割起来。当维数减少时,对于用户对广告的嵌入网络会更好(并且性能会进步,对于测试的维数没有限度)。相同,当维数较低时,广告就会与更多用户相干(并且性能较低)。
  • 当哈希值较小时,行将多个广告解析为一个嵌入。他们这样做没有任何语义哈希,即齐全不相干的广告被解析为雷同的嵌入,因而,性能降落。兴许减少维度会复原性能。兴许语义哈希将使咱们解决这一难题。
  • 训练数据依照每个广告看到的印象进行分层:频繁的广告、中等规模的广告、小批量的广告。。
  • 频繁的广告被完满地记住,即每个用户的均匀点击率由广告和用户维度来编码。对他们来说,再训练没有害处,因为他们曾经记住了。
  • 中等规模的广告引起较大的方差,但它是由大数定律均匀进去的。在继续的训练中,中等规模的广告能够取得更多的训练数据并失去改良。在单遍训练中,广告以初始随机性(因为初始化)记忆大量用户;在多遍训练中,广告只记住多数用户,不能推广到其余用户。

通过开始尝试应用这些ML参数进行正则化和存储,你能够成为ML的高级工程师。谁说ML很难学习?

原文链接:https://medium.com/swlh/the-s...

欢送关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/