测试函数法推导连续性方程和Fokker-Planck方程
By 苏剑林 | 2023-02-11 | 27718位读者 | 引用在文章《生成扩散模型漫谈(六):一般框架之ODE篇》中,我们推导了SDE的Fokker-Planck方程;而在《生成扩散模型漫谈(十二):“硬刚”扩散ODE》中,我们单独推导了ODE的连续性方程。它们都是描述随机变量沿着SDE/ODE演化的分布变化方程,连续性方程是Fokker-Planck方程的特例。在推导Fokker-Planck方程时,我们将泰勒展开硬套到了狄拉克函数上,虽然结果是对的,但未免有点不伦不类;在推导连续性方程时,我们结合了雅可比行列式和泰勒展开,方法本身比较常规,但没法用来推广到Fokker-Planck方程。
这篇文章我们介绍“测试函数法”,它是推导连续性方程和Fokker-Planck方程的标准方法之一,其分析过程比较正规,并且适用场景也比较广。
翻到新的维度,把积分解决!
By 苏剑林 | 2014-02-25 | 36166位读者 | 引用一般来说,如果原函数容易找到的话,牛顿-莱布尼兹公式是定积分的通用方法。但是牛顿-莱布尼兹公式只适合连续函数的积分,如果积分区间含有奇点,那就不成立了。比如,我们考虑积分
$$\int_{-1}^1 \frac{1}{x^2}dx$$
当然,从严格的数学上来说,这种写法是不成立的,因为被积函数在原点没有意义。当然,从物理的角度来考虑,由于对称性,我们确信
$$\int_{-1}^1 \frac{1}{x^2}dx=2\int_{0}^1 \frac{1}{x^2}dx=\lim_{\varepsilon\to 0}2\int_{\varepsilon}^1 \frac{1}{x^2}dx$$
从而得出积分发散的结论。这种处理某种程度上是可以接受的,但是却不是让人满意的,因为它导致了分段。有什么办法可以直接处理这种情况呢?确实有的,同样引入参数,并且最终让参数为0,考虑带参数的积分
$$\int_{-1}^1 \frac{1}{x^2+\varepsilon^2}dx$$
只要参数为正,这个被积函数就在$\mathbb{R}$上处处连续了,也就是奇点消失了,这样子就可以用牛顿-莱布尼兹公式了
$$\int_{-1}^1 \frac{1}{x^2+\varepsilon^2}dx=\left.\frac{1}{\varepsilon}\arctan\left(\frac{x}{\varepsilon}\right)\right|_{-1}^{1}$$
考虑$\varepsilon\to 0$的情况,就自动得到了积分发散的结论。
闲聊:神经网络与深度学习
By 苏剑林 | 2015-06-06 | 65856位读者 | 引用在所有机器学习模型之中,也许最有趣、最深刻的便是神经网络模型了。笔者也想献丑一番,说一次神经网络。当然,本文并不打算从头开始介绍神经网络,只是谈谈我对神经网络的个人理解。如果希望进一步了解神经网络与深度学习的朋友,请移步阅读下面的教程:
http://deeplearning.stanford.edu/wiki/index.php/UFLDL教程
http://blog.csdn.net/zouxy09/article/details/8775360
机器分类
这里以分类工作为例,数据挖掘或机器学习中,有很多分类的问题,比如讲一句话的情况进行分类,粗略点可以分类为“积极”或“消极”,精细点分为开心、生气、忧伤等;另外一个典型的分类问题是手写数字识别,也就是将图片分为10类(0,1,2,3,4,5,6,7,8,9)。因此,也产生了很多分类的模型。
文本情感分类(二):深度学习模型
By 苏剑林 | 2015-08-04 | 592916位读者 | 引用从动力学角度看优化算法(一):从SGD到动量加速
By 苏剑林 | 2018-06-27 | 152672位读者 | 引用在这个系列中,我们来关心优化算法,而本文的主题则是SGD(stochastic gradient descent,随机梯度下降),包括带Momentum和Nesterov版本的。对于SGD,我们通常会关心的几个问题是:
SGD为什么有效?
SGD的batch size是不是越大越好?
SGD的学习率怎么调?
Momentum是怎么加速的?
Nesterov为什么又比Momentum稍好?
...
这里试图从动力学角度分析SGD,给出上述问题的一些启发性理解。
梯度下降
既然要比较谁好谁差,就需要知道最好是什么样的,也就是说我们的终极目标是什么?
训练目标分析
假设全部训练样本的集合为$\boldsymbol{S}$,损失度量为$L(\boldsymbol{x};\boldsymbol{\theta})$,其中$\boldsymbol{x}$代表单个样本,而$\boldsymbol{\theta}$则是优化参数,那么我们可以构建损失函数
$$L(\boldsymbol{\theta}) = \frac{1}{|\boldsymbol{S}|}\sum_{\boldsymbol{x}\in\boldsymbol{S}} L(\boldsymbol{x};\boldsymbol{\theta})\tag{1}$$
而训练的终极目标,则是找到$L(\boldsymbol{\theta})$的一个全局最优点(这里的最优是“最小”的意思)。
bert4keras在手,baseline我有:百度LIC2020
By 苏剑林 | 2020-04-02 | 88012位读者 | 引用百度的“2020语言与智能技术竞赛”开赛了,今年有五个赛道,分别是机器阅读理解、推荐任务对话、语义解析、关系抽取、事件抽取。每个赛道中,主办方都给出了基于PaddlePaddle的baseline模型,这里笔者也基于bert4keras给出其中三个赛道的个人baseline,从中我们可以看到用bert4keras搭建baseline模型的方便快捷与简练。
思路简析
这里简单分析一下这三个赛道的任务特点以及对应的baseline设计。
积分梯度:一种新颖的神经网络可视化方法
By 苏剑林 | 2020-06-28 | 86315位读者 | 引用本文介绍一种神经网络的可视化方法:积分梯度(Integrated Gradients),它首先在论文《Gradients of Counterfactuals》中提出,后来《Axiomatic Attribution for Deep Networks》再次介绍了它,两篇论文作者都是一样的,内容也大体上相同,后一篇相对来说更易懂一些,如果要读原论文的话,建议大家优先读后一篇。当然,它已经是2016~2017年间的工作了,“新颖”说的是它思路上的创新有趣,而不是指最近发表。
所谓可视化,简单来说就是对于给定的输入$x$以及模型$F(x)$,我们想办法指出$x$的哪些分量对模型的决策有重要影响,或者说对$x$各个分量的重要性做个排序,用专业的话术来说那就是“归因”。一个朴素的思路是直接使用梯度$\nabla_x F(x)$来作为$x$各个分量的重要性指标,而积分梯度是对它的改进。然而,笔者认为,很多介绍积分梯度方法的文章(包括原论文),都过于“生硬”(形式化),没有很好地突出积分梯度能比朴素梯度更有效的本质原因。本文试图用自己的思路介绍一下积分梯度方法。
最小熵原理(六):词向量的维度应该怎么选择?
By 苏剑林 | 2020-08-20 | 95501位读者 | 引用随着NLP的发展,像Word2Vec、Glove这样的词向量模型,正逐渐地被基于Transformer的BERT等模型代替,不过经典始终是经典,词向量模型依然在不少场景发光发热,并且仍有不少值得我们去研究的地方。本文我们来关心一个词向量模型可能有的疑惑:词向量的维度大概多少才够?
先说结论,笔者给出的估算结果是
\begin{equation}n > 8.33\log N\label{eq:final}\end{equation}
更简约的话可以直接记$n > 8\log N$,其中$N$是词表大小,$n$就是词向量维度,$\log$是自然对数。当$n$超过这个阈值时,就说明模型有足够的容量容纳这$N$个词语(当然$n$越大过拟合风险也越大)。这样一来,当$N=100000$时,得到的$n$大约是96,所以对于10万个词的词向量模型来说,维度选择96就足够了;如果要容纳500万个词,那么$n$大概就是128。
最近评论