机器学习中用到的微分
背景
机器学习中尤其是深度学习用到的数学基础首推微分。机器学习中优化问题的解决大多数情况下同微分有关,比如牛顿法,梯度下降法;深度学习中就更不用说了,整个深度学习框架(tensorflow,pytoch等等)的基石,或者说首要处理的问题就是自动微分,pytorch的前身Chainer名字的来源更是微分中的链式罚则。可见理解机器学习中的微分有多重要。这篇博客主要来自于链接内容。
现有常见微分方式梳理
常见的求解微分的方式有以下几种,各有各的特点:
-
手动微分:是指在较为简单的函数表达下通过手动推导出微分的形式,然后将具体点代入,比如 y = x y=x y=x它的微分我们通过微分定理推得出就是1
-
数值微分:数值微分是利用微分定义 d y = f ( d x ) dy = f(dx) dy=f(dx)的形式进行极限推导,注意这里的推导不是上述的手动推导形式,而是利用微分的定义
[ f ( x ) − f ( x + σ ) ] / ( σ ) [f(x)-f(x+\sigma)]/(\sigma) [f(x)−f(x+σ)]/(σ)
其中 σ \sigma σ趋近于0 -
符号微分:利用微分的链式法则进行微分求导
h ( x ) = g ( x ) f ( x ) h(x)=g(x)f(x) h(x)=g(x)f(x)
d h ( x ) d x = d f ( x ) d x g ( x ) + d g ( x ) d x f ( x ) \frac{dh(x)}{dx}=\frac{df(x)}{dx}g(x)+\frac{dg(x)}{dx}f(x) dxdh(x)=dxdf(x)g(x)+dxdg(x)f(x) -
自动微分法:现有的广泛运用于机器学习中的微分方法
这里罗列了几种微分方法,各有优缺点。
很明显第一种方法对操作者的数学能力以及函数的形式有一定的要求,仅仅是较为简单的函数可以用这样的方式进行处理,如果函数非解析或者函数形式过于复杂,采用这种方法就无从计算。第二种方法存在巨大的隐患,真正在计算机领域我们知道会存在截断误差与累积误差,并且一般情况下如下图所示:
假设采用的是中心求微分的方式(center difference)
∂ f ( x ) ∂ x i = f ( x + h ϵ ) − f ( x − h ϵ ) 2 h + O ( h 2 ) \frac{\partial f(x)}{\partial x_i} = \frac{f(x+h\epsilon)-f(x-h\epsilon)}{2h}+O(h^2) ∂xi∂f(x)=2hf(x+hϵ)−f(x−hϵ)+O(