2011年5月20日,星期五

双向重要性意识更新:第二部分

实施的目的和目的

原来我在我讨论过的二元模型 以前的帖子 比通常使用的要简单一些。更典型的模型结构是\ [
p = a ^ \ top b + a ^ \ top 1 + 1 ^ \ top b + w ^ \ top x
\]但是更改了变量\ [
\ begin {aligned}
\ tilde a(h)&= a(h)+ 1 \\
\波浪号b(h)&= b(h)+ 1 \\
\ tilde p&= p + 1 ^ \顶部1
\ end {aligned}
\]恢复原始方程式。这也具有使梯度动力学的鞍点从零移开的效果。但是,将所有模型参数初始化为零仍然存在问题,因为没有任何东西可以破坏模型参数之间的对称性。 (我选择在第一次更新时对二进参数施加较小的扰动来破坏对称性。)在下文中,我将引用原始方程式以简化说明,但实际上使用变量的更改。

数值计算特定步长\ [
p(s)= a_0 ^ \ top b_0 \ cosh(2 s)-(|| a_0 || ^ 2 + || b_0 || ^ 2)\ cosh(s)\ sinh(s)+ x ^ \ top( w-sx)
\]和隐式定义的逆$ p ^ {-1}(y)$显得很重要。这种形式非常方便,因为只需要$ a_0 $和$ b_0 $的范数及其内部乘积来模拟特定步骤。在软件方面:损失函数的接口需要增加两个额外的标量输入($ || a_0 || ^ 2 + || b_0 || ^ 2 $和$ a_0 ^ \ top b_0 $;以及变量的变化,$ 1 ^ \ top 1 $)。

在向前的方向上,$ p(s)$是 灾难性的取消 因此在计算时需要格外小心。一旦解决了这个问题,反向$ p ^ {-1}(y)$的行为通常就很好,可以使用 牛顿法回溯线搜索。但是,当$ a ^ \ top b \ approx \ frac {1} {2}(|| a_0 || ^ 2 + || b_0 || ^ 2)$和$ x \ approx 0 $时,精度问题占主导地位。本质上,当没有线性特征($ x \ approx 0 $)时,二进角项位于双对角线附近(例如,$ a_0 \ approx \ pm b_0 $),并且预测是错误的符号,那么它花费的时间非常大$ s $更改预测的符号。幸运的是,在模型中放置恒定的线性特征可确保$ x ^ \ top x \ geq 1 $。在这种情况下,遇到超对角线本质上意味着不学习二进位模型参数,但是希望将二元组在训练序列中``充分随机地''配对,这在实践中不是问题。

函数$ p ^ {-1}(y)$直接用于增强铰链损耗的边界。它也与最小重要性权重相关,该最小重要性权重将导致预测改变符号,即主动学习期间出现的数量。 (在线性模型的主动学习中会出现这种情况;尚不清楚同一理论是否适用于二元模型,但我希望在``边界附近''进行采样并使用重要性权重会做一些合理的事情。)当标签为$ y $时导致模型输出为$ x $的权重由$ h_ {min}(x,y)= s ^ {-1}(p ^ {-1}(x); y给出)$。利用变量技巧的分离 Karampatziakis和Langford,更新函数$ s(h; y)$可以通过\ [求解而无需求解初始值问题。
\ begin {aligned}
s'(h; y)&= \eta \frac{\partial l (p, y)}{\partial p}\biggr|_{p = p (s)} = \eta F (s; y), \\
dh &= \frac{1}{\eta F (s; y)} ds \\
s ^ {-1}(x; y)&= \frac{1}{\eta} \int_{0}^x \frac{d s}{F (s; y)}.
\ end {aligned}
\]对于铰链损失,可以归结为$ h_ {min}(x,y)= -p ^ {-1}(x)/(\ eta y)$;对于其他损失,必须在数值上进行积分,但是出于主动学习的目的,大概只需要进行粗略的数值积分。

它行得通吗?

好吧,有很多方法可以回答这个问题:)

我有一些二元数据,与来自Mechanical Turk HIT的结果相对应,其中我要求用户根据其公开资料猜测Twitter用户的种族:共有10,000个任务和5个评估者,总共50,000个数据点。我将数据拆分,在大部分数据上进行训练(15/16分),在其余数据上进行测试(1/16分)。我仅将标识符用作功能,例如,输入行可能看起来像
2 2 |评分器r_2737 |任务t_89 | id r_2737 t_89
对于具有一个潜在维度的模型
2 2 |评分器r_2737 r2_2737 |任务t_89 t2_89 | id r_2737 t_89
如果输入看起来很有趣,那是因为现在我不为点积在一起的要素空间发出线性要素(在这种情况下,“评估者”和“任务”是点积的)。这违反了 干燥 所以我可能会改变这一点。 (此外,我不必重新生成输入来更改潜在维数,因此需要更改。)

我的 标称提取物 我整理来处理这些数据的模型类似于具有一个潜在维度的二进模型。使用上述框架,我可以轻松添加其他潜在维度,这让人联想到 Welinder等。等 多维嵌入。但是,这里的目标有些不同:在这种情况下,想法是提取``基本事实'',即任务的``真实''种族的概率分布。这里的目标仅仅是预测评估者将分配给任务的标签。这与任务的真实基础标签有关,但也与评估者的属性有关。

顺便说一句,在一定程度上可以根据训练集标签可靠地预测测试集标签,这意味着我为标签付出了太多钱,因为测试集中的标签是多余的。在此问题上使用主动学习技术可能会减轻冗余。然而,相反,这可能会奖励评分者随机回答更多工作。

我随机进行训练/测试拆分,在相同的训练集上训练每个模型,并在相同的测试集上测试每个模型。这个想法是使两个数据集之间的单个评分者和单个任务(但不是成对;每对最多出现一次)之间有一些(配对!)配对。我正在使用 评分过滤树 减少将多类简化为二进制,然后将铰链损失用于二进制分类器。这是一些结果。 \ [
\ begin {array} {c | c | c}
\ mbox {模型}&\ mbox {0/1测试集损失}(\ pm 0.007)&\ mbox {评论} \\ \ hline
\ mbox {最佳常数}&\ mbox {0.701}&\ mbox {最频繁发生的种族}大约是\ mbox {当时的30 %%} \\ \ hline
\ mbox {线性}&\ mbox {0.214}&\ mbox {预测为} \ alpha_ {rid} + \ beta_ {tid} + c \\ \ hline
\ mbox {Dyadic} k = 1&\ mbox {0.198}&\ mbox {预测是} a_ {rid} ^ \ top b_ {tid} + \ alpha_ {rid} + \ beta_ {tid} + c \\ \ hline
\ mbox {Dyadic} k = 2&\ mbox {0.198}&\ mbox {与之前的} a_ {rid},b_ {tid} \ mbox {作为2个向量}一样\\ \ hline
\ mbox {二进位} k = 3&\ mbox {0.199}&\ mbox {像以前一样,只有3个向量而不是2个向量}
\ end {array}
\]好吧,这并没有使我的袜子破灭,差异不是统计学上显着的(使用伪造的二项式方差估计)。当添加单个潜在维度时,似乎会产生一点点汁液,然后便会排出。回想起来,这是测试数据集的不佳选择,因为评估者缺乏对抗行为,重要的变量是评估者偏差和真实任务标签,两者都可以通过线性模型很好地捕获。顺便说一下,我选择了所有学习参数以为线性模型提供最佳结果,然后将其重新用于其他模型。

另一方面,从操作上看,事情看起来很有希望。首先,速度损失在二元$ k = 3 $和线性之间是很小的(80秒与50秒进行160次通过)。由于在二元$ k = 3 $情况下输入记录较大,因此我尝试在二元$ k = 3 $输入数据上训练线性模型,在这种情况下,差异消失了。我不认为区别在于解析;而是我怀疑每行访问更多的权重值,这导致更多的缓存丢失。无论如何,对于相等数量的有效特征,计算$ p ^ {-1}(y)$的开销并不明显。当然,铰链损耗对动力学有解析的解决方案。对于其他损失函数,我必须解决一个初始值问题,这可能会大大降低速度。

其次,关于学习率的设置,结果是可靠的。就最大程度地减少测试集损失而言,绝对有一个最佳的学习率,但是当我将学习率变化超过4个数量级时,就从来没有任何病理行为。也许在更复杂的模型中会遇到麻烦,或者在使用其他损失函数时(较大的学习率可能会使在数值上求解初始值问题变得复杂)。另外,我还没有实现正则化,这可能是使更复杂的模型工作所必需的。

因此,下一步是将其应用于Menon和Elkan中提到的某些测试数据集,例如 书本交叉 数据集并实现其他损失函数,看看我是否得到了不好的结果(由于用一维ODE逼近多维ODE),学习率的不稳定性(解决初值问题时上升)或吞吐速度令人无法接受(由于每次更新都包含所有其他数字)。

没意见:

发表评论