作者 |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/