线性回归(Linear Regression)中的数学推导--到损失函数求导

1.假设条件

x 1 , x 2 , … , x N , x i ∈ R n x_1,x_2,\ldots,x_N,x_i\in R^n x1,x2,,xN,xiRn (x为样本, R n R^n Rn表示样本的维度为n,此小n是一个方程中未知数的个数的n,而大N为样本的个数。)
y 1 , y 2 , … , y N , y i ∈ R 1 y_1,y_2,\ldots,y_N,y_i \in R^1 y1,y2,,yN,yiR1 (y为实际值,因为实际值每个方程只有一个,所以 R 1 R^1 R1表示只有1维。)

2.使用线性规划根据样本x预测y:

y 1 = x 11 a 1 + x 12 a 2 + ⋯ + x 1 n a n y_1=x_{11}a_1+x_{12}a_2+\cdots+x_{1n}a_n y1=x11a1+x12a2++x1nan
y 2 = x 21 a 1 + x 22 a 2 + ⋯ + x 2 n a n y_2=x_{21}a_1+x_{22}a_2+\cdots+x_{2n}a_n y2=x21a1+x22a2++x2nan
⋮ \vdots
y N = x 21 a 1 + x 22 a 2 + ⋯ + x 2 n a n y_N=x_{21}a_1+x_{22}a_2+\cdots+x_{2n}a_n yN=x21a1+x22a2++x2nan

3.写成矩阵形式:

[ x 11 x 12 … x 1 n x 21 x 22 … x 2 n ⋮ ⋮ ⋱ ⋮ x N 1 x N 2 … x N n ] [ a 1 a 2 ⋮ a n ] = [ y 1 y 2 ⋮ y N ] \left[\begin{matrix} x_{11}&x_{12}&\ldots&x_{1n}\\ x_{21}&x_{22}&\ldots&x_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ x_{N1}&x_{N2}&\ldots&x_{Nn} \end{matrix}\right] \left[\begin{matrix} a_1\\a_2\\\vdots\\a_n \end{matrix}\right]= \left[\begin{matrix} y_1\\y_2\\\vdots\\y_N \end{matrix}\right] x11x21xN1x12x22xN2x1nx2nxNna1a2an=y1y2yN

符号表示矩阵乘法:
X N × n a n × 1 = Y N × 1 X_{N\times n}a_{n\times 1}=Y_{N\times 1} XN×nan×1=YN×1
i.当 N = n N=n N=n,且 X N × n X_{N\times n} XN×n可逆时, a = X − 1 Y a=X^{-1}Y a=X1Y

ii.当 N ≠ n N\neq n N=n时(一般情况下N和n不相等),最小二乘法计算损失函数(loss)
m i n ∣ ∣ X a − Y ∣ ∣ 2 = m i n J min||Xa-Y||^2=minJ minXaY2=minJ
(这里为2-范数,即||Xa-Y||表示Xa-Y矩阵中每个元素的平方和再开平方根。)

4.求损失函数 J J J

矩阵的结构: X N n , a n 1 , y N 1 X_{Nn},a_{n1},y_{N1} XNn,an1,yN1

i. 如果 X N n X_{Nn} XNn可逆,则 N = n N=n N=n,此时:
X N × n a n × 1 = Y N × 1 X_{N\times n}a_{n\times 1}=Y_{N\times 1} XN×nan×1=YN×1
a n × 1 = X N × n − 1 Y N × 1 a_{n\times 1}=X_{N\times n}^{-1}Y_{N\times 1} an×1=XN×n1YN×1

ii.如果 N ≠ n N\neq n N=n X N n X_{Nn} XNn不可逆,方程 X N × n a n × 1 = Y N × 1 X_{N\times n}a_{n\times 1}=Y_{N\times 1} XN×nan×1=YN×1不一定有解,所以就要让预测值Xa和实际值Y的差距尽量小,所有要让 X a − Y Xa-Y XaY的范数尽可能小,即: m i n ∣ ∣ X a − Y ∣ ∣ 2 = m i n J min||Xa-Y||^2=minJ minXaY2=minJ

J J J求导: ∂ J ∂ a = X T ( X a − Y ) \frac{\partial J}{\partial a}=X^T(Xa-Y) aJ=XT(XaY)

即: X T X a = X Y X^TXa=X^Y XTXa=XY

此时要分情况讨论: X T X X^TX XTX是否可逆

1.N>n时(样本数大于参数维度),如N=5,n=3, ( X T X ) 3 × 3 (X^TX)_{3\times3} (XTX)3×3一般是可逆的
此时: a = ( X T X ) − 1 X T Y a=(X^TX)^{-1}X^TY a=(XTX)1XTY
( X T X ) − 1 X T (X^TX)^{-1}X^T (XTX)1XT是伪逆。

2.N 要解决过拟合的问题,可以加入正则项:
J = ∣ ∣ X a − Y ∣ ∣ 2 + λ ∣ ∣ a ∣ ∣ 2 = J=||Xa-Y||^2+\lambda||a||^2= J=XaY2+λa2=
λ ∣ ∣ a ∣ ∣ 2 \lambda||a||^2 λa2为正则项
则:
∂ J ∂ a = X T ( X a − Y ) + λ a = 0 \frac{\partial J}{\partial a}=X^T(Xa-Y)+\lambda a=0 aJ=XT(XaY)+λa=0

K = X a − Y K=Xa-Y K=XaY为N行1列的向量,
求列向量的模:
∣ ∣ K ∣ ∣ = K ⃗ ⋅ K ⃗ = X T X ||K||=\sqrt {\vec {K}\cdot\vec {K}}=\sqrt {X^TX} K=K K =XTX
J = ∣ ∣ K ∣ ∣ 2 = K T K J=||K||^2=K^TK J=K2=KTK
所以:
J = J ( a ) = ∣ ∣ K ∣ ∣ 2 = K T K = ( x a − y ) T ( x a − y ) = ( a T x T − y T ) ( x a − y ) = a T x T x a − a T x T y − y T x a + y T y J=J(a)=||K||^2=K^TK=(xa-y)^T(xa-y)=(a^Tx^T-y^T)(xa-y)=a^Tx^Txa-a^Tx^Ty-y^Txa+y^Ty J=J(a)=K2=KTK=(xay)T(xay)=(aTxTyT)(xay)=aTxTxaaTxTyyTxa+yTy

(矩阵转置的性质: ( A + B ) T = A T + B T , ( A B ) T = B T A T (A+B)^T=A^T+B^T,(AB)^T=B^TA^T (A+B)T=AT+BT,(AB)T=BTAT
(J看成a的函数,因为要拟合的是储存有系数信息的a矩阵)

4.对损失函数 J J J求导

求导:
J = J ( a ) = a T x T x a − a T x T y − y T x a + y T y J=J(a)=a^Tx^Txa-a^Tx^Ty-y^Txa+y^Ty J=J(a)=aTxTxaaTxTyyTxa+yTy

第一项:
∂ a T x T x a ∂ a = ( x T x + ( x T x ) T ) a = 2 x T x a \frac{\partial a^Tx^Txa}{\partial a}=(x^Tx+(x^Tx)^T)a=2x^Txa aaTxTxa=(xTx+(xTx)T)a=2xTxa,
( x T x 为 A , a 为 x x^Tx为A,a为x xTxAax x T x x^Tx xTx为对称矩阵)

(矩阵求导公式: f ( x ) = x T A x , ∂ f ( x ) ∂ x = ∂ ( x T A x ) ∂ x = A x + A T x = ( A + A T ) x f(x)=x^TAx,\frac{\partial f(x)}{\partial x}=\frac{\partial (x^TAx)}{\partial x}=Ax+A^Tx=(A+A^T)x f(x)=xTAx,xf(x)=x(xTAx)=Ax+ATx=(A+AT)x,当 A A A为对称矩阵时, ∂ ( x T A x ) ∂ x = 2 A x \frac{\partial (x^TAx)}{\partial x}=2Ax x(xTAx)=2Ax )

第二项:
a T x T y = a T ( x T y ) = ( x T y ) T a = y T x a a^Tx^Ty=a^T(x^Ty)=(x^Ty)^Ta=y^Txa aTxTy=aT(xTy)=(xTy)Ta=yTxa,与第三项相同

第三项:
∂ y T x a ∂ a = ∂ [ ( x T y ) T a ] ∂ a = x T y \frac{\partial y^Txa}{\partial a}=\frac{\partial [(x^Ty)^Ta]}{\partial a}=x^Ty ayTxa=a[(xTy)Ta]=xTy,

因为 y N 1 y_{N1} yN1 y 1 N T y^T_{1N} y1NT x N n x_{Nn} xNn,则 ( y T x ) 1 n (y^Tx)_{1n} (yTx)1n a n 1 a_{n1} an1,则 ( y T x ) a (y^Tx)a (yTx)a为1x1的标量;
因为 a n 1 a_{n1} an1是列向量,而 ( y T x ) 1 n (y^Tx)_{1n} (yTx)1n不是列向量,不能用列向量求导公式:见例3
所以取其转置:
( x T y ) n 1 (x^Ty)_{n1} (xTy)n1, ( x T y ) 1 n T (x^Ty)^T_{1n} (xTy)1nT, a n 1 a_{n1} an1,所以 ( x T y ) T a (x^Ty)^Ta (xTy)Ta为1x1的标量
( x T y ) n 1 (x^Ty)_{n1} (xTy)n1为列向量,可用列向量求导公式:
∂ y T x a ∂ a = ∂ [ ( x T y ) T a ] ∂ a = x T y \frac{\partial y^Txa}{\partial a}=\frac{\partial [(x^Ty)^Ta]}{\partial a}=x^Ty ayTxa=a[(xTy)Ta]=xTy,

第四项:
y T y y^Ty yTy为常数项,求导为0.

综上:
∂ J ∂ a = 2 x T x a − 2 x T y \frac{\partial J}{\partial a}=2x^Txa-2x^Ty aJ=2xTxa2xTy,
J = 0 J=0 J=0,则有:
x T x a = x T y x^Txa=x^Ty xTxa=xTy

你可能感兴趣的:(机器学习,深度学习)