【算法工程师的数学基础】系列将会从线性代数、微积分、数值优化、概率论、信息论五个方面进行介绍,感兴趣的欢迎关注【搜索与推荐Wiki】公众号,获得最新文章。
《算法工程师的数学基础》已更新:
导数(derivative)是微积分学中重要的基础概念。本篇主要介绍导数相关的知识,包括:概念介绍、导数法则、常见函数的导数、基本求导函数法则与导数公式。
概念介绍
对于定义域和值域都是实数域的函数f:R→R,若f(x)在点x0的某个邻域Δx内,极限:
f′(x0)=Δx→0limΔxf(x0+Δx)−f(x)
存在,则称函数f(x)在点x0处可导,f(x0)称为其导数,或导函数。
若函数f(x)在其定义域包含的某区间内每一个点都可导,那么也可以说函数f(x)在这个区间内可导。连续函数不一定可导,可导函数一定连续。例如函数∣x∣为连续函数,但在点x=0处不可导。
对于一个多变量函数f:Rd→R,它的偏导数(partial derivative)是关于其中一个变量xi的导数,而保持其他变量固定,可以记为$f_{x_i}’(x),\bigtriangledown {x_i} f(x),\frac{\partial f(x)}{ \partial x_i} 或\frac{\partial }{ \partial{x_i}}f(x)$。
对于一个d维向量x∈Rd,函数f(x)=f(x1,x2,...,xd)∈R,则f(x)关于x的偏导数为:
∂x∂f(x)=⎣⎢⎢⎢⎢⎢⎡∂x1∂f(x)...∂xd∂f(x)⎦⎥⎥⎥⎥⎥⎤∈Rd
若函数f(x)∈Rk的值也为一个向量,则f(x)关于x的偏导数为:
∂x∂f(x)=⎣⎢⎢⎢⎢⎢⎡∂x1∂f1(x)...∂xd∂f1(x).........∂x1∂fk(x)...∂xd∂fk(x)⎦⎥⎥⎥⎥⎥⎤∈Rd∗k
称为Jacobian矩阵。
导数法则
一个复杂函数的导数的计算可以通过一下法则来简化。
加减法则
y=f(x),z=g(x) 则:
∂x∂(y+z)=∂x∂y+∂x∂z
乘法法则
(1) 若 x∈Rp,y=f(x)∈Rq,z=g(x)∈Rq ,则:
∂x∂yTz=∂x∂yz+∂x∂zy
(2) 若 x∈Rp,y=f(x)∈Rs,z=g(x)∈Rt,A∈Rs∗t 和 x无关,则:
∂x∂yTAz=∂x∂yAz+∂x∂zATy
(3)若 x∈Rp,y=f(x)∈R,z=g(x)∈Rp ,则:
∂x∂yz=y∂x∂z+∂x∂yzT
链式法则
链式法则(chain rule)是求复合函数导数的一个法则,是在微积分中计算导数的一种常见方法。
(1) 若 x∈Rp,y=g(x)∈Rs,z=f(y)∈Rt ,则:
∂x∂z=∂x∂y∂y∂z
(2)若 X∈Rp∗q为矩阵, Y=g(x)∈Rs∗t,z=f(Y)∈R ,则:
∂Xij∂z=tr((∂Y∂z)T∂Xij∂Y)
(3)若 X∈Rp∗q为矩阵, y=g(x)∈Rs,z=f(Y)∈R ,则
∂Xij∂z=(∂Y∂z)T∂Xij∂y
(4)若 x∈R,u=u(x)∈Rp,g=g(u)∈Rq ,则:
∂x∂g=∂u∂g∂x∂u
(4)的文字部分,u=u(x)中左边的u表示向量, g=g(u)左边的g表示向量,g(u)表示函数,u表示向量
常见函数的导数
这里介绍常用的几个函数。
标量函数及其导数
指示函数 指示函数I(x=c)为:
I(x=c)={10ifelsex=c0
指示函数I(x=c)除了在c处外,其导数为0。
多项式函数 如果f(x)=xr(幂函数),其中r是非零实数,那么导数:
∂x∂xr=rxr−1
当r=0时,常函数的导数是0.
指数函数 底数为e的指数函数f(x)=exp(x)=ex的导数是他本身。
∂x∂exp(x)=exp(x)
对数函数 底数为e的对数函数 log(x) 的导数则是x−1
∂x∂log(x)=x1
向量函数及其导数
∂x∂x=I∂x∂Ax=AT∂x∂xTA=A
上面公式中涉及的字母都是向量
按位计算的向量函数及其导数
假设一个函数f(x)的输入是标量x。对于一组K个标量x1,x2,...,xK,我们可以通过f(x)得到另外一组K个标量z1,z2,...,zK
zk=f(xk),∀k=1,...,K
为了简单起见,我们定义x=[x1,...,xK]T, z=[z1,...,zK]
z=f(x)
其中,f(x)是按位运算的,即[f(x)]i=f(xi)
当 x为标量时,f(x)的导数记为f′(x)。当输入为K维向量x=[x1,...,xK]T时,其导数为一个对角矩阵。
∂x∂f(x)=[∂xi∂f(xj)]K∗K
logistic函数
Logistic函数是一种常用的S形函数,是比利时数学家Pierrs Francois Verhulst 在1844-1845年研究种群数量的增长模型时提出命名的,最初作为一种生态学模型。
Logistic的函数定义为:
logistic(x)=1+exp(−k(x−x0)L
这里exp(.)函数表示自然对数函数,x0是中心点,L是最大值,k是曲线的倾斜度。下图给出了几种不同参数的logistic函数曲线,当x→−∞时,logistic(x)→0,当x→+∞时,logistic(x)→L
当参数为(k=1,x0=0,L=1)时,logistic函数称为标准logistic函数,记为σ(x)
σ(x)=1+exp(−x)1
标准logistic函数在机器学习中使用得非常广泛,经常用来将一个实数空间的数映射到(0,1)区间。
标准logistic函数的导数为(推导过程可以参考《推荐系统开发实战》一书的第八章):
σ(x)′=σ(x)(1−σ(x))
当输入为K维向量x=[x1,...,xK]T时,其导数为:
σ′(x)=diag(σ(x)⊙(1−σ(x)))
softmax函数
softmax函数是将多个标量映射为一个概率分布。
对于K个标量x1,...,xK,softmax函数定义为:
zk=softmax(xk)=∑i=1Kexp(xk)exp(xk)
这样我们可以将K个变量x1,x2,...,xK转变为一个分布z1,...,zK,满足:
zk∈[0,1],∀k,i=1∑Kzk=1
当softmax函数的输入为K维向量x时,
z^=softmax(x)=∑k=1Kexp(xk)a⎣⎢⎢⎢⎢⎡exp(x1)...exp(xk)⎦⎥⎥⎥⎥⎤=∑k=1Kexp(xk)exp(x)=1KTexp(x)exp(x)
其中,1KT=[1,...,1]K∗1是K维的全1的向量。
其导数为:
∂x∂softmax(x)=∂x∂(1KTexp(x)exp(x))=diag(softmax(x))−softmax(x)softmax(x)T
基本求导函数法则与导数公式
基本初等函数求导公式
(C)′=0
(xu)′=uxu−1
(sinx)′=cosx
(cosx)′=−sinx
(tanx)′=sec2x
(cot)′x=−csc2x
(secx)′=secxtanx
(cscx)′=−csxxcotx
(ax)′=axlna
(ex)′=ex
(logax)′=xlna1
(lnx)′=x1
(arcsinx)′=1−x21
(arccosx)′=−1−x21
(arctanx)′=1+x21
(arccotx)′=−1+x21
函数的和、差、商、积的求导法则
其实上文中已经简单介绍了函数的求导法则,这里再用一种更加简要的方式说明一下:
设u=u(x),v=v(x),且都可导,则:
(u±v)′=u′±v′
(Cu)′=Cu′
(uv)′=u′v+uv′
(vu)′=v2u′v−uv′
反函数求导法则
如果函数x=f(y)在区间Iy内单调、可导且f′(y)=0,那么它的反函数y=f−1(x)在区间Ix=x∣x=f(y),y∈Iy内也可导,且
[f−1(x)]′=f′(y)1
或
dxdy=dydx1
结论可以简单表达为:反函数的导数等于直接函数导数的倒数。
复合函数求导法则
设y=f(u),而u=φ(x)且f(u),φ(x)都可导,则复合函数 y=f[φ(x)]的导数为:
dxdy=dudydxdu
或
y′=f′(u)φ′(x)
双曲函数和反双曲函数的导数
双曲函数和反双曲函数都是初等函数,可以用上边介绍的初等函数求导方式推导出来。
(1)双曲正弦函数和反双曲正弦函数
sinhx=2ex−e−xarsinhx=ln(x+x2+1)
他们的导数为:
(sinhx)′=coshx(arsinhx)′=x2+11
(2)双曲余弦函数和反双曲余弦函数
coshx=2ex+e−xarcoshx=ln(x+x2−1)
他们的导数为:
(coshx)′=sinhx(arcoshx)′=x2−11
(3)双曲正切函数和反双曲正切函数
tanhx=coshxsinhx
artanhx=21ln(1−x1+x)
他们的导数为:
(tanhx)′=(coshx)21
(artanhx)′=1−x21
还有几种不常用的双曲函数和反双曲函数如下(这里不再介绍其导数,感兴趣的可以自行根据上述介绍进行推导):
- 双曲余切函数和反双曲余切函数
cothx=tanhx1
arcothx=21ln(x−1x+1)
- 双曲正割函数和双曲正割函数
sechx=coshx1
arsechx=ln(x1+1−x2)
- 双曲余割函数和双曲余割函数
cschx=sinhx1
arcschx=ln(x1+∣x∣1+x2)
更多关于双曲函数和反双曲函数可以参考Wiki:
- https://zh.wikipedia.org/wiki/%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0
- https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!