GELU的两个初等函数近似是怎么来的
By 苏剑林 | 2020-03-26 | 50139位读者 | 引用函数光滑化杂谈:不可导函数的可导逼近
By 苏剑林 | 2019-05-20 | 122136位读者 | 引用一般来说,神经网络处理的东西都是连续的浮点数,标准的输出也是连续型的数字。但实际问题中,我们很多时候都需要一个离散的结果,比如分类问题中我们希望输出正确的类别,“类别”是离散的,“类别的概率”才是连续的;又比如我们很多任务的评测指标实际上都是离散的,比如分类问题的正确率和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}
当Matlab遇上牛顿法
By 苏剑林 | 2013-05-22 | 58706位读者 | 引用牛顿法是求方程近似根的一个相当有用而且快捷的方法,我们最近科学计算软件课程(Matlab)的一个作业就是编写求方程近似解的程序,其中涉及到牛顿法。我们要实现的目标是,用户输入一道方程,脚本就自动求出根来。这看起来是一个挺简单的循环迭代程序,但是由于Matlab本身的特殊性,却产生了不少困难。
Matlab是为了数值计算(尤其是矩阵运算)而生的,因此它并不擅长处理符号计算。这就给我们编程带来了困难。在网上随便一搜,就可以发现,网上的Matlab牛顿法程序都是要求用户同时输入方程及其导函数,这显然是不方便的,因为Matlab本身就具备了求导功能。下面我们来分析一下困难在哪里。
我们要实现的最基本功能是定义一个函数,然后可以根据该函数求具体的函数值,并且自动求该函数的导数,接着求导数值。这些看起来很基本的功能在Matlab中却很难调和,因为Matlab的“函数”定义很广,一个具有特定功能的M文件叫“函数”,一个运算式$f(x)$也可能是一个函数,显然后者是可以求导的,前者却不行,所以Matlab一刀砍——不能对函数求导!!
单摆运动级数解:初试同伦分析
By 苏剑林 | 2013-03-13 | 20609位读者 | 引用开始之初,我偶然在图书馆看到了一本名为《超越摄动:同伦分析方法导论》,里边介绍了一种求微分方程近似解的新方法,关键是里边的内容看起来并不是十分难懂,因此我饶有兴致地借来研究了。果然,这是一种非常有趣的方法,在某种意义上来说,还是非常简洁的方法。这解决了我一直以来想要研究的问题:用傅里叶级数来近似描述单摆运动的近似解。当然,它带给我的冲击不仅仅是这些。为了得出周期解,我又同时研究了各种摄动方法的技巧,如消除长期项的PL(Poincaré–Lindstedt)方法。这同时增加了我对各种近似解析方法的了解。从开学到现在快三周的时间,我一直都在研究这些问题。
轻微的扰动——摄动法简介(3)
By 苏剑林 | 2013-03-07 | 38476位读者 | 引用微分方程领域大放光彩
虽然微分方程在各个计算领域都能一展才华,不过它最辉煌的光芒无疑绽放于微分方程领域,包括常微分方程和偏微分方程。海王星——“笔尖上发现的行星”——就是摄动法的著名成果,类似的还有冥王星的发现。天体力学家用一颗假设的行星的引力摄动来解释已知行星的异常运动,并由此反推未知行星的轨道。我们已不止一次提到过,一般的三体问题是混沌的,没有精确的解析解。这就要求我们考虑一些近似的方法,这样的方法发展起来就成为了摄动理论。
跟解代数方程一样,摄动法解带有小参数或者大参数的微分方程的基本思想,就是将微分方程的解表达为小参数或大参数的幂级数。当然,这是最直接的,也相当好理解,不过所求得的级数解有可能存在一些性态不好的情况,比如有时原解应该是一个周期运动,但是级数解却出现了诸如$t \sin t$的“长期项”,这是相当不利的,因此也发展出各种技巧来消除这些项。可见,摄动理论是一门应用广泛、集众家所大成的实用理论。下面我们将通过一些实际的例子来阐述这个技巧。
轻微的扰动——摄动法简介(2)
By 苏剑林 | 2013-02-06 | 38551位读者 | 引用为了让大家更加熟悉摄动法的基本步骤,本文再讲一个用摄动法解代数方程的例子。这是从实际研究中出来的:
$$\begin{eqnarray*} x=\frac{k(1+k^2+k^4+l^2)}{2(1+k^2)^2} \\ k=\frac{dy}{dx}\end{eqnarray*} $$
这是一道微分方程。要求解这道方程,最好的方法当然是先从第一式解出$k=k(x)$的形式然后再积分。但是由于五次方程没有一般的显式解,所以迫使我们要考虑近似解。当然,一般来说熟悉mathematica的人都会直接数值计算了。我这里只考虑摄动法。
我们将原方程变为下面的形式:
$$x=\frac{k}{2}[1+\frac{l^2}{(1+k^2)^2}]$$
轻微的扰动——摄动法简介(1)
By 苏剑林 | 2013-01-16 | 47002位读者 | 引用为了计算实际问题,我们总会采用各种各样的理想模型。一般而言,一个模型越接近实际现象,它往往会越复杂。而忽略掉多数微小的干扰,只保留一些主要的项,这通常可以得到一个相当简单、能够精确解出的模型。以这样的一个可以精确解出的近似模型为基础,逐渐地把微小项的影响添加进去,使得我们的答案越来越准确,这就是摄动法的思想,也称作“微扰理论”。这种方法源于求解天体力学的N体问题,而现在已经发展成为一门相当系统的学科,并应用到了相对多的领域,如量子力学、电子理论等。
其实不难发现,实际问题中存在不少这样的例子,即当我们要计算某个现象时,先考虑最突出的,然后再考虑细节。比如说,要计算地球的轨道,先把它看成一个与太阳组成的纯粹的二体系统,然后把各种微小效应加进去,比如月球的影响、各大行星的影响甚至由于地球的不规则形状所产生的影响等。当然,不仅仅是这一类复杂的“大问题”,我们平常可能会遇到的一些“小问题”有可能也让摄动法派上用场。本文试图将摄动法介绍给各位读者。
摄动法的主要步骤是先忽略微小影响(令小参数为0),求出精确解;然后把所要求的解表达为关于小参数的幂级数。这个方法可以用于解答代数方程、微分方程等等各种领域。下面先以一个简单的代数方程来说明:
一、求解方程:$\varepsilon x^3+x^2=p^2$
最近评论