关于人工智能:SparseNN中的优化

46次阅读

共计 2640 个字符,预计需要花费 7 分钟才能阅读完成。

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

正文完
 0