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}

点击阅读全文...

29 Dec

SquarePlus:可能是运算最简单的ReLU光滑近似

ReLU函数,也就是$\max(x,0)$,是最常见的激活函数之一,然而它在$x=0$处的不可导通常也被视为一个“槽点”。为此,有诸多的光滑近似被提出,比如SoftPlus、GeLU、Swish等,不过这些光滑近似无一例外地至少都使用了指数运算$e^x$(SoftPlus还用到了对数),从“精打细算”的角度来看,计算量还是不小的(虽然当前在GPU加速之下,我们很少去感知这点计算量了)。最近有一篇论文《Squareplus: A Softplus-Like Algebraic Rectifier》提了一个更简单的近似,称为SquarePlus,我们也来讨论讨论。

需要事先指出的是,笔者是不建议大家花太多时间在激活函数的选择和设计上的,所以虽然分享了这篇论文,但主要是提供一个参考结果,并充当一道练习题来给大家“练练手”。

定义

SquarePlus的形式很简单,只用到了加、乘、除和开方:
\begin{equation}\text{SquarePlus}(x)=\frac{x+\sqrt{x^2+b}}{2}\end{equation}

点击阅读全文...

10 Oct

用狄拉克函数来构造非光滑函数的光滑近似

在机器学习中,我们经常会碰到不光滑的函数,但我们的优化方法通常是基于梯度的,这意味着光滑的模型可能更利于优化(梯度是连续的),所以就有了寻找非光滑函数的光滑近似的需求。事实上,本博客已经多次讨论过相关主题,比如《寻求一个光滑的最大值函数》《函数光滑化杂谈:不可导函数的可导逼近》等,但以往的讨论在方法上并没有什么通用性。

不过,笔者从最近的一篇论文《SAU: Smooth activation function using convolution with approximate identities》学习到了一种比较通用的思路:用狄拉克函数来构造光滑近似。通用到什么程度呢?理论上有可数个间断点的函数都可以用它来构造光滑近似!个人感觉还是非常有意思的。

点击阅读全文...

20 May

函数光滑化杂谈:不可导函数的可导逼近

一般来说,神经网络处理的东西都是连续的浮点数,标准的输出也是连续型的数字。但实际问题中,我们很多时候都需要一个离散的结果,比如分类问题中我们希望输出正确的类别,“类别”是离散的,“类别的概率”才是连续的;又比如我们很多任务的评测指标实际上都是离散的,比如分类问题的正确率和F1、机器翻译中的BLEU,等等。

还是以分类问题为例,常见的评测指标是正确率,而常见的损失函数是交叉熵。交叉熵的降低与正确率的提升确实会有一定的关联,但它们不是绝对的单调相关关系。换句话说,交叉熵下降了,正确率不一定上升。显然,如果能用正确率的相反数做损失函数,那是最理想的,但正确率是不可导的(涉及到$\arg\max$等操作),所以没法直接用。

这时候一般有两种解决方案;一是动用强化学习,将正确率设为奖励函数,这是“用牛刀杀鸡”的方案;另外一种是试图给正确率找一个光滑可导的近似公式。本文就来探讨一下常见的不可导函数的光滑近似,有时候我们称之为“光滑化”,有时候我们也称之为“软化”。

max

后面谈到的大部分内容,基础点就是$\max$操作的光滑近似,我们有:
\begin{equation}\max(x_1,x_2,\dots,x_n) = \lim_{K\to +\infty}\frac{1}{K}\log\left(\sum_{i=1}^n e^{K x_i}\right)\end{equation}

点击阅读全文...

21 Jul

从“0.999...等于1”说开来

从小学到大学都可能被问到的但却又不容易很好地回答的问题中,“0.999...究竟等不等于1”肯定也算是相当经典的一个。然而,要清楚地回答这个问题并不容易,很多时候被提问者都会不自觉地弄晕,甚至有些“民科”还以这个问题“创造了新数学”。

本文试图就这个问题,给出比较通俗但比较严谨的回答。

什么是相等?

要回答0.999...等不等于1,首先得定义“相等”!什么才算相等?难道真的要写出来一模一样才叫相等吗?如果是这样的话,那么2-1都不等于1了,因为2-1跟1看起来都不一样啊。

显然我们需要给“相等”做出比较严格但是又让人公认的定义,才能对相等进行判断,显然,下面的定义是能够让很多人接受的:

$a = b$等切仅当$|a-b|=0$。

点击阅读全文...

2 May

寻求一个光滑的最大值函数

在最优化问题中,求一个函数的最大值或最小值,最直接的方法是求导,然后比较各阶极值的大小。然而,我们所要优化的函数往往不一定可导,比如函数中含有最大值函数$\max(x,y)$的。这时候就得求助于其他思路了。有一个很巧妙的思路是,将这些不可导函数用一个可导的函数来近似它,从而我们用求极值的方法来求出它近似的最优值。本文的任务,就是探究一个简单而有用的函数,它能够作为最大值函数的近似,并且具有多阶导数。下面是笔者给出的一个推导过程。

在数学分析中,笔者已经学习过一个关于最大值函数的公式,即当$x \geq 0, y \geq 0$时,我们有
$$\max(x,y)=\frac{1}{2}\left(|x+y|+|x-y|\right)\tag{1}$$
那么,为了寻求一个最大值的函数,我们首先可以考虑寻找一个能够近似表示绝对值$|x|$的函数,这样我们就把问题从二维降低到一维了。那么,哪个函数可以使用呢?

点击阅读全文...

22 Sep

实数集到无理数集的双射

集合论的结果告诉我们,全体实数的集合$\mathbb{R}$跟全体无理数的集合$\mathbb{R} \backslash \mathbb{Q}$是等势的,那么,如何构造出它们俩之间的一个双射出来呢?这是一个颇考读者想象力的问题。当然,如果把答案给出来,又似乎显得没有那么神秘。下面给出笔者构造的一个例子,读者可以从中看到这种映射是怎么构造的。

为了构造这样的双射,一个很自然的想法是,让全体有理数和部分无理数在它们自身内相互映射,剩下的无理数则恒等映射。构造这样的一个双射首先得找出一个函数,它的值只会是无理数。要找到这样的函数并不难,比如我们知道:

1、方程$x^4 + 1 = y^2$没有除$x=0,y=\pm 1$外的有理点,否则将与费马大定理$n=4$时的结果矛盾。

2、无理数的平方根依然是无理数。

根据这些信息,足以构造一个正实数$\mathbb{R}^+$到正无理数$\mathbb{R}^+ \backslash \mathbb{Q}^+$的双射,然后稍微修改一下,就可以得到$\mathbb{R}$到$\mathbb{R} \backslash \mathbb{Q}$的双射。

点击阅读全文...

19 Sep

Cantor-Bernstein 定理(给出双射!)

学过集合论的朋友应该会知道,按照定义,判断两个集合的“势”相同的最直接的方法就是给出这两个集合之间的一个双射。然而,这样的双射往往不容易想到,比如

请给出一个$[0,+\infty)$到$(0,+\infty)$的双射

但是,直观地看,这两个集合的势一定是相当的,而且这两个集合之间的双射有无穷多个。然而,大多数的我们却很难想出一个双射来。当我们看到构造出来的双射时,第一反应往往是:这样的证明是怎么想到的!?比如,上述问题的答案之一是:

点击阅读全文...