logsumexp运算的几个不等式
By 苏剑林 | 2022-05-10 | 23229位读者 | 引用$\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}
SquarePlus:可能是运算最简单的ReLU光滑近似
By 苏剑林 | 2021-12-29 | 39422位读者 | 引用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}
用狄拉克函数来构造非光滑函数的光滑近似
By 苏剑林 | 2021-10-10 | 76834位读者 | 引用在机器学习中,我们经常会碰到不光滑的函数,但我们的优化方法通常是基于梯度的,这意味着光滑的模型可能更利于优化(梯度是连续的),所以就有了寻找非光滑函数的光滑近似的需求。事实上,本博客已经多次讨论过相关主题,比如《寻求一个光滑的最大值函数》、《函数光滑化杂谈:不可导函数的可导逼近》等,但以往的讨论在方法上并没有什么通用性。
不过,笔者从最近的一篇论文《SAU: Smooth activation function using convolution with approximate identities》学习到了一种比较通用的思路:用狄拉克函数来构造光滑近似。通用到什么程度呢?理论上有可数个间断点的函数都可以用它来构造光滑近似!个人感觉还是非常有意思的。
函数光滑化杂谈:不可导函数的可导逼近
By 苏剑林 | 2019-05-20 | 126045位读者 | 引用一般来说,神经网络处理的东西都是连续的浮点数,标准的输出也是连续型的数字。但实际问题中,我们很多时候都需要一个离散的结果,比如分类问题中我们希望输出正确的类别,“类别”是离散的,“类别的概率”才是连续的;又比如我们很多任务的评测指标实际上都是离散的,比如分类问题的正确率和F1、机器翻译中的BLEU,等等。
还是以分类问题为例,常见的评测指标是正确率,而常见的损失函数是交叉熵。交叉熵的降低与正确率的提升确实会有一定的关联,但它们不是绝对的单调相关关系。换句话说,交叉熵下降了,正确率不一定上升。显然,如果能用正确率的相反数做损失函数,那是最理想的,但正确率是不可导的(涉及到$\text{argmax}$等操作),所以没法直接用。
这时候一般有两种解决方案;一是动用强化学习,将正确率设为奖励函数,这是“用牛刀杀鸡”的方案;另外一种是试图给正确率找一个光滑可导的近似公式。本文就来探讨一下常见的不可导函数的光滑近似,有时候我们称之为“光滑化”,有时候我们也称之为“软化”。
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}
从“0.999...等于1”说开来
By 苏剑林 | 2015-07-21 | 60239位读者 | 引用从小学到大学都可能被问到的但却又不容易很好地回答的问题中,“0.999...究竟等不等于1”肯定也算是相当经典的一个。然而,要清楚地回答这个问题并不容易,很多时候被提问者都会不自觉地弄晕,甚至有些“民科”还以这个问题“创造了新数学”。
本文试图就这个问题,给出比较通俗但比较严谨的回答。
什么是相等?
要回答0.999...等不等于1,首先得定义“相等”!什么才算相等?难道真的要写出来一模一样才叫相等吗?如果是这样的话,那么2-1都不等于1了,因为2-1跟1看起来都不一样啊。
显然我们需要给“相等”做出比较严格但是又让人公认的定义,才能对相等进行判断,显然,下面的定义是能够让很多人接受的:
$a = b$等切仅当$|a-b|=0$。
寻求一个光滑的最大值函数
By 苏剑林 | 2015-05-02 | 133790位读者 | 引用在最优化问题中,求一个函数的最大值或最小值,最直接的方法是求导,然后比较各阶极值的大小。然而,我们所要优化的函数往往不一定可导,比如函数中含有最大值函数$\max(x,y)$的。这时候就得求助于其他思路了。有一个很巧妙的思路是,将这些不可导函数用一个可导的函数来近似它,从而我们用求极值的方法来求出它近似的最优值。本文的任务,就是探究一个简单而有用的函数,它能够作为最大值函数的近似,并且具有多阶导数。下面是笔者给出的一个推导过程。
在数学分析中,笔者已经学习过一个关于最大值函数的公式,即当$x \geq 0, y \geq 0$时,我们有
$$\max(x,y)=\frac{1}{2}\left(|x+y|+|x-y|\right)\tag{1}$$
那么,为了寻求一个最大值的函数,我们首先可以考虑寻找一个能够近似表示绝对值$|x|$的函数,这样我们就把问题从二维降低到一维了。那么,哪个函数可以使用呢?
实数集到无理数集的双射
By 苏剑林 | 2014-09-22 | 36478位读者 | 引用集合论的结果告诉我们,全体实数的集合$\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}$的双射。
最近评论