本笔记主要来自网易吴恩达的人工智能的视频,本笔记旨在提取最核心的部分形成数学理论,以高度
抽象概括的形式记录下来,这篇文章概括了 视频中 前 5章的 数学原理。
在介绍第一章线性回归之前,我们先建立向量,矩阵的求导法则,方便后续公式推导:
给定列向量x,列向量y, x'表示x的转置,(下文中类似),大写字母不加说明表示矩阵,
M(i,j)表示矩阵M的第i行,第j列元素;M(i,:)表示矩阵第i行的行向量,M(:,j)表示矩阵第j列
的列向量;
设x=(x1,x2,...,xn)' ; y=(y1,y2,...,ym)' ;z=(z1,z2,...,zl)';
设y=f(x) 表示向量y是向量x的一个函数 ,这意味着y的每个分量都是x的一个函数;这意味着
dyi/dxj有明确的定义;
我们设 dy/dx为m*n的矩阵,满足第i行,第j列为: dyi/dxj
那么此时,dy/dx表示一个有明确定义的m*n的矩阵(其实就是雅克比矩阵);
下面我们建立矩阵,向量的求导法则:
当y=M*x+b时(M为m*n矩阵,b为m*1向量) 显然 dy/dx=M;
当y=x'*x时 , dy/dx=2x';
设z=(z1,z2,...zl)';
且 y=f(x), z=g(y); 也就是 z=g(f(x));
下面我们证明 :dz/dx=(dz/dy)*(dy/dx);
(dz/dx)(i,j) = dzi/dxj;
因为zi是关于y1,y2,...,ym的函数;而每个yk又是xj的函数;
所以dzi/dxj= dzi/dy1 *dy1/dxj+dzi/dy2* dy2/dxj + ...+ dzi/dym*dym/dxj
= (dz/dy)(i,:) * (dy/dx)(:,j)
=> (dz/dx)(i,j)= (dz/dy)(i,:) * (dy/dx)(:,j)
=> dz/dx= dz/dy* dy/dx;
证明完毕;
说明向量函数也满足链式求导法则;
那么,概括以上我们得到3个公式:
d(M*x+b)/dx= M (1)
d(x'*x)/dx= 2*x'; (2)
dz/dx= dz/dy * dy/dx (3)
结合这三个公式,并设z= (Mx+b)'*(Mx+b) ,我们来求 dz/dx:
不妨设中间变量y=Mx+b;则 z=y'*y,;
dz/dx = dz/dy * dy/dx = (2*y') * M = 2* ( x'M'+b')*M = 2 (x'M'M+b'M)
最终我们得到:
d( (Mx+b)'*(Mx+b) )/dx =2*(x'M'M+b'M) (4)
后面我们将用到公式(4)
至此,矩阵向量求导公式建立完毕,开始进入线性回归主题:
线性回归可以概括为:
给定 数据集 (1,x(1,2),...,x(1,n)),(1,x(2,2),...,x(2,n))...,(1,x(m,2),...,x(m,n)); (1)
和对应的值 y(1),y(2),...,y(m); (2)
求满足某个条件(condition)的线性方程:y_=a1*x1+a2*x2+a3*x3+...+an*xn; (3)
为了简化书写:
我们记 (1)中依次按行排列而成的矩阵为X (m*n矩阵,m行,n列)
(a1,a2,a3,...an)' =a; ( ' 表示向量或矩阵转置,行转列,列转行,下同)
(x1,x2,x3,...xn)' =x;
(y(1),y(2),...,y(m))' =y;
那么 (3)简化为: y_=a'*x
=> y_=x'*a ;
引入观测误差w_,可设 w_=(y_-x'*a);
将x数据集 样本和对应的y依次代入,联立得到矩阵形式:
w=y-X*a;
现在使得w所有项的平方和最小,这个平方和可以记为:
J(a)=w'*w= (y-Xa)'*(y-Xa);
现在给出condition:
a必须使得 :J(a)= (y-Xa)'*(y-Xa) 取最小值;
那么令 dJ(a)/da =0 ,我们利用公式 (4),得到:
dJ(a)/da = 2*(a'(-X)'(-X)-y'X) =0
=> a'X'X=y'X
=> X'Xa=X'y
=> a= inv(X'X)X'y; (5)
公式(5)就是线性回归的正规方程。
下面给出梯度下降法的方程:
梯度下降实际上是求使得J(a)取最小值的 数值方法:
给定a的初始值 a[0],不妨设我们已经求得了a[i], 设d为迭代步长,迭代方程为:
a[i+1]= a[i] - d * dJ(a)/da|(a=a[i]);
这个方程表示每次向梯度最大的反方向移动;
以上,便概括了 课程 前5章的 主要原理。