人工智能算法数学基础之求导过程推导(单变量函数求导、多变量函数求导、向量求导、矩阵求导)
1、导数定义:
设函数y=f(x)在点x0的某个邻域内有定义,当自变量x在x0处有增量Δx,(x0+Δx)也在该邻域内时,相应地函数取得增量Δy=f(x0+Δx)-f(x0);如果Δy与Δx之比当Δx→0时极限存在,则称函数y=f(x)在点x0处可导,并称这个极限为函数y=f(x)在点x0处的导数记作
需要指出的是:
两者在数学上是等价的。
导函数
如果函数y=f(x)在开区间内每一点都可导,就称函数f(x)在区间内可导。这时函数y=f(x)对于区间内的每一个确定的x值,都对应着一个确定的导数值,这就构成一个新的函数,称这个函数为原来函数y=f(x)的导函数,记作y'、f'(x)、dy/dx或df(x)/dx,简称导数。
导数是微积分的一个重要的支柱。牛顿及莱布尼茨对此做出了贡献。
几何意义
函数y=f(x)在x0点的导数f'(x0)的几何意义:表示函数曲线在点P0(x0,f(x0))处的切线的斜率(导数的几何意义是该函数曲线在这一点上的切线斜率)。
2、简单函数的导函数推导过程:求导数的公式(微分高阶无穷小等于0)
前提,当△x->0 △x^2 == 0(微分公式的定义)
f(x) = x^2
f'(x) = (f(x+△x) - f(x))/△x
f'(x) = ((x+△x)^2 - x^2)/△x
f'(x) = (x^2 + 2*△x*x + △x^2 - x^2)/△x # 此处 △x^2 == 0
f'(x) = 2*△x*x/△x
f'(x) = 2*x
3、单自变量复杂函数求导
单自变量:f(x) = 2*x^2 + 2*x + 2*x^6
因变量:f(x)
4、多自变量复杂函数求偏导
多自变量:f(x,y,z) = 2*x + 2*y^2 + log2(z)(y=1,z=1)
偏导数:
f'(x) = 2
f'(y) = 4*y
f'(z) = (z*log(e)2)^-1
5、向量与向量的运算求导
对向量和向量的运算求偏导数(将向量的每个元素都认为是变量,因为两个向量的运算得到一个常量,所以函数f其实是常量对向量求偏导数):
f(w,x) = wx(dot) 因为两个向量的点积运算得到一个常量(一个数值)
f([w1,w2...wn],[x1,x2...xn]) = wx = c
f((w1,w2...wn),(x1,x2...xn)) = w1*x1 + w2*x2 + ... + wn*xn
f'(w1) = x1
f'(w2) = x2
...
f'(wn) = xn
f'(w) = x.T
f'(x) = w.T
6、矩阵和向量求偏导:
f(W,x) = Wx(dot) 矩阵和向量原酸得到一个向量,所以是向量对矩阵求偏导和向量对向量求偏导
f([[w11,w12...w1n],
[w21,w22...w2n],
.
.
.
[wm1,wm2...wmn]], [x1, x2,..., xn].T
)
f()1 = w11*x1 + w12 * x2 + w1n * xn
f()2 = w21*x1 + w22 * x2 + w2n * xn
.
.
.
f()m = wm1*x1 + wm2 * x2 + wmn * xn
对W求偏导数的推导过程
f'1(w11) = x1
f'1(w12) = x2
...
f'1(w1n) = xn
f'1(w21) = 0
f'1(w22) = 0
...
f'1(w2n) = 0
f‘(W) = [[[x1,x2...xn],[0,0...,0]...[0,0...0]],...,[[0,0...,0]...[x1,x2...xn]]] 函数f(W,x)对W的导数是一个三维矩阵
f'1(x) = [w11,w12....w1n].T
f'2(x) = [w21,w22....w2n].T
.
.
.
f'm(x) = [wm1,wm2....wmn].T
f'(x) = W.T # 得出对向量的偏导数是原矩阵的转置
7、矩阵和矩阵的求导 N*D D*M:
f(W,X) = WX(dot) 矩阵与矩阵的运算得到得到一个结果矩阵,则是矩阵对矩阵求导,会得到一个4维导数矩阵
f([[w11,w12...w1d], [[x11, x12...x1m],
[w21,w22...w2d], [x21, x22...x2m],
. .
. dot .
. .
[wn1,wn2...wnd]], [xd1,xd2...xdm]]
)
N*M个计算公式,产生N*M个计算结果:
f11() = w11*x11 + w12*x21 + ... + w1d*xd1
f12() = w11*x12 + w12*x22 + ... + w1d*xd2
.
.
.
f1m() = w11*x1m + w12*x2m + ... + w1d*xdm
.
.
.
fnm() = wn1*x1m + wn2*x2m + ... + wnd*xdm
f'11(w11) = x11
f'11(w12) = x21
.
.
.
f'11(w1d) = xd1
f'11(w21) = 0
f'11(w22) = 0
.
.
.
f'11(wnd) = 0
f'11(W) = [[x11,x21,...,xd1],
[0,0,.......,0]],
.
.
.
[0,0,.......,0]],
]]
f'12(W) = [[x12,x22,...,xd2],
[,0,.......,0]],
.
.
.
[0,0,.......,0]],
]]
f'1m(W) = [[x1m,x2m,...,xdm],
[,0,.......,0]],
.
.
.
[0,0,.......,0]],
]]
f'21(W) =
f'22(W) =
.
.
.
f'2m(W)
.
.
.
f'n1(W) =
f'n2(W) =
.
.
.
fnm'(W) =