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}

点击阅读全文...

14 Dec

关于“微分”的理解

我从来不想在教科书上的定义上纠结太多,因为我知道,真正对定义的理解,需要在长期的实践应用中慢慢感悟的,所以我们唯一需要做的是继续我们的研究。

但是前些天有些朋友问到我关于微分的理解,比如“dx是不是一定很小”等等,所以决定在此写写我的理解。

与微分联系很紧密的,也是我们很熟悉的东西,当然是“增量 ”啦,比如$\Delta y$、$\Delta x$等等,增量显然是可以任意大的(只要自变量还在定义域内)。那么考虑一个函数$y=f(x)$,函数的微分是怎么出现的呢?那是因为我们直接研究函数的增量是比较麻烦的,所以就引入了微分dy,当$\Delta x$很小时,它代表增量的主项:$\Delta y=dy+o(\Delta x)=A \Delta x+o(\Delta x)$,A是一个常数。

点击阅读全文...

12 Sep

微积分学习(二):导数

自从上次写了关于微积分中的极限学习后,就很长的时间没有与大家探讨微积分的学习了(估计有20多天了吧)。启事,我自己也是从今年的9月下旬才开始系统地学习微积分的,到现在也就一个月的时间吧。学习的内容有:集合、函数、极限、导数、微分、积分。不过都是一元微积分,多元的微积分正在紧张地进修中......

现在不妨和大家探讨一下关于微积分中的最基本内容——“导数”的学习。

其实,用最简单的说法,如果存在函数$f(x)$,那么它的导数(一阶导数)为
$$\lim_{\Delta x->0} f'(x)=\frac{f(x+\Delta x)-f(x)}{\Delta x}$$

点击阅读全文...