22 Nov

基于Amos优化器思想推导出来的一些“炼丹策略”

如果将训练模型比喻为“炼丹”,那么“炼丹炉”显然就是优化器了。据传AdamW优化器是当前训练神经网络最快的方案,这一点笔者也没有一一对比过,具体情况如何不得而知,不过目前做预训练时多数都用AdamW或其变种LAMB倒是真的。然而,正如有了炼丹炉也未必能炼出好丹,即便我们确定了选择AdamW优化器,依然有很多问题还没有确定的答案,比如:

1、学习率如何适应不同初始化和参数化?

2、权重衰减率该怎么调?

3、学习率应该用什么变化策略?

4、能不能降低优化器的显存占用?

尽管在实际应用时,我们大多数情况下都可以直接套用前人已经调好的参数和策略,但缺乏比较系统的调参指引,始终会让我们在“炼丹”之时感觉没有底气。在这篇文章中,我们基于Google最近提出的Amos优化器的思路,给出一些参考结果。

点击阅读全文...

25 Oct

圆内随机n点在同一个圆心角为θ的扇形的概率

这几天网上热传了一道“四鸭共半圆”题目:

四鸭共半圆问题

四鸭共半圆问题

可能有不少读者看到后也尝试做过,就连李永乐老师也专门开了一节课讲这道题(参考《圆形水池四只鸭子在同一个半圆里,概率有多大?》)。就这道题目本身而言,答案并不算困难,可以有很多方法算出来。稍微有难度的是它的推广版本,也就是本文标题所描述的,将鸭子的数目一般化为$n$只,将半圆一般化为圆心角为$\theta$的扇形。更有趣的是,当$\theta \leq \pi$时,依然有比较初等的解法,但是当$\theta > \pi$后,复杂度开始“剧增”...

点击阅读全文...

9 Oct

“十字架”组合计数问题浅试

昨天在这个公众号文章看到了一道据说答案有争议的“十字架”组合计数问题:

一个正方形中,如果四条边有两条是$i$色,另外两条是其他两种不同颜色,那么称这个正方形是“$i$色主导”的。考虑如下由16条线段、5个正方形组成的“十字架”图形,每条边染上红、黄、蓝三色之一,使得横向和竖向三个正方形的主导色均不相同,问有多少种不同的染色方法。
“十字架”示意图

“十字架”示意图

链接的文章有两个答案:吴康老师的54432,以及王慧兴老师的27216。本文先通过编程确认王慧兴老师的27216是正确答案,然后给出自己的理论分析过程。

点击阅读全文...

28 Sep

生成扩散模型漫谈(十二):“硬刚”扩散ODE

《生成扩散模型漫谈(五):一般框架之SDE篇》中,我们从SDE的角度理解了生成扩散模型,然后在《生成扩散模型漫谈(六):一般框架之ODE篇》中,我们知道SDE对应的扩散模型中,实际上隐含了一个ODE模型。无独有偶,在《生成扩散模型漫谈(四):DDIM = 高观点DDPM》中我们也知道原本随机采样的DDPM模型中,也隐含了一个确定性的采样过程DDIM,它的连续极限也是一个ODE。

细想上述过程,可以发现不管是“DDPM→DDIM”还是“SDE→ODE”,都是从随机采样模型过渡到确定性模型,而如果我们一开始的目标就是ODE,那么该过程未免显得有点“迂回”了。在本文中,笔者尝试给出ODE扩散模型的直接推导,并揭示了它与雅可比行列式、热传导方程等内容的联系。

微分方程

像GAN这样的生成模型,它本质上是希望找到一个确定性变换,能将从简单分布(如标准正态分布)采样出来的随机变量,变换为特定数据分布的样本。flow模型也是生成模型之一,它的思路是反过来,先找到一个能将数据分布变换简单分布的可逆变换,再求解相应的逆变换来得到一个生成模型。

点击阅读全文...

15 Jul

可能有读者留意到,这次更新相对来说隔得比较久了。事实上,在上周末时就开始准备这篇文章了,然而笔者低估了这个问题的难度,几乎推导了整整一周,仍然还没得到一个完善的结果出来。目前发出来的,仍然只是一个失败的结果,希望有经验的读者可以指点指点。

在文章《将“softmax+交叉熵”推广到多标签分类问题》中,我们提出了一个多标签分类损失函数,它能自动调节正负类的不平衡问题,后来在《多标签“Softmax+交叉熵”的软标签版本》中我们还进一步得到了它的“软标签”版本。本质上来说,多标签分类就是“$n$个2分类”问题,那么相应的,“$n$个$m$分类”的损失函数又该是怎样的呢?

这就是本文所要探讨的问题。

点击阅读全文...

25 May

从重参数的角度看离散概率分布的构建

一般来说,神经网络的输出都是无约束的,也就是值域为$\mathbb{R}$,而为了得到有约束的输出,通常是采用加激活函数的方式。例如,如果我们想要输出一个概率分布来代表每个类别的概率,那么通常在最后加上Softmax作为激活函数。那么一个紧接着的疑问就是:除了Softmax,还有什么别的操作能生成一个概率分布吗?

《漫谈重参数:从正态分布到Gumbel Softmax》中,我们介绍了Softmax的重参数操作,本文将这个过程反过来,即先定义重参数操作,然后去反推对应的概率分布,从而得到一个理解概率分布构建的新视角。

问题定义

假设模型的输出向量为$\boldsymbol{\mu}=[\mu_1,\cdots,\mu_n]\in\mathbb{R}^n$,不失一般性,这里假设$\mu_i$两两不等。我们希望通过某个变换$\mathcal{T}$将$\boldsymbol{\mu}$转换为$n$元概率分布$\boldsymbol{p}=[p_1,\cdots,p_n]$,并保持一定的性质。比如,最基本的要求是:
\begin{equation}{\color{red}1.}\,p_i\geq 0 \qquad {\color{red}2.}\,\sum_i p_i = 1 \qquad {\color{red}3.}\,p_i \geq p_j \Leftrightarrow \mu_i \geq \mu_j\end{equation}

点击阅读全文...

10 May

logsumexp运算的几个不等式

$\text{logsumexp}$是机器学习经常遇到的运算,尤其是交叉熵的相关实现和推导中都会经常出现,同时它还是$\max$的光滑近似(参考《寻求一个光滑的最大值函数》)。设$x=(x_1,x_2,\cdots,x_n)$,$\text{logsumexp}$定义为
\begin{equation}\text{logsumexp}(x)=\log\sum_{i=1}^n e^{x_i}\end{equation}
本文来介绍$\text{logsumexp}$的几个在理论推导中可能用得到的不等式。

基本界

记$x_{\max} = \max(x_1,x_2,\cdots,x_n)$,那么显然有
\begin{equation}e^{x_{\max}} < \sum_{i=1}^n e^{x_i} \leq \sum_{i=1}^n e^{x_{\max}} = ne^{x_{\max}}\end{equation}
各端取对数即得
\begin{equation}x_{\max} < \text{logsumexp}(x) \leq x_{\max} + \log n\end{equation}

点击阅读全文...

15 Apr

GlobalPointer下的“KL散度”应该是怎样的?

最近有读者提到想测试一下GlobalPointerR-Drop结合的效果,但不知道GlobalPointer下的KL散度该怎么算。像R-Drop或者虚拟对抗训练这些正则化手段,里边都需要算概率分布的KL散度,但GlobalPointer的预测结果并非一个概率分布,因此无法直接进行计算。

经过一番尝试,笔者给出了一个可用的形式,并通过简单实验验证了它的可行性,遂在此介绍笔者的分析过程。

对称散度

KL散度是关于两个概率分布的函数,它是不对称的,即$KL(p\Vert q)$通常不等于$KL(q\Vert p)$,在实际应用中,我们通常使用对称化的KL散度:
\begin{equation}D(p,q) = KL(p\Vert q) + KL(q\Vert p)\end{equation}

点击阅读全文...