我们首先来看单一样本的表示,假设输入的样本为 x x x,那么我们可以将其表示为一个向量,即 x = [ x 1 , x 2 , ⋯ , x n ] T x = [x_1, x_2, \cdots, x_n]^T x=[x1,x2,⋯,xn]T,其中 x i x_i xi表示第 i i i个特征, n n n表示特征的个数。输出我们可以表示为 y y y,即 y = [ y 1 , y 2 , ⋯ , y m ] T y = [y_1, y_2, \cdots, y_m]^T y=[y1,y2,⋯,ym]T,其中 y i y_i yi表示第 i i i个输出, m m m表示输出的个数。那么,线性模型可以表示为:
y = W x + b \begin{equation} y = Wx + b \end{equation} y=Wx+b
其中, W W W表示权重,是一个 m × n m \times n m×n的矩阵, b b b表示偏置,是一个 m × 1 m \times 1 m×1的向量。在上式中,我们将样本特征向量 x x x乘以权值矩阵 W W W,也就是对 x x x进行了拉伸变换,然后再加上了一个偏置 b b b,也就是做了一个平移变换。最后得到了一个输出 y y y,那么 y y y就是 x x x经过变换后的表示。由于拉伸和平移都是线性变换,所以 y y y是 x x x的线性变换。这就是线性模型的基本思想。
如果想要对 x x x进行更加丰富的表示,我们可以在线性模型的基础上加入非线性变换,这样我们就可以先把 x x x在线性空间中进行一次映射,再进行非线性映射,最后得到一个新的表示。这样的模型称为非线性模型。假设我们的非线性模型为 f ( x ) f(x) f(x),那么我们可以将其表示为:
a = W x + b \begin{equation} a = Wx + b \end{equation} a=Wx+b
y = f ( a ) \begin{equation} y=f(a) \end{equation} y=f(a)
对于上面的模型,我们应该怎么去确定权重 W W W和偏置 b b b呢?考虑回归问题,输入和输出都是已知的,我们需要确定参数 W W W和 b b b,使得输入映射到输出误差最小。这个问题可以用最小二乘法来求解,即:
y ^ = f ( W x + b ) \begin{equation} \hat{y} = f(Wx + b) \end{equation} y^=f(Wx+b)
L ( W , b ) = ∑ i = 1 n ( y i − y ^ i ) 2 = ( y − y ^ ) T ( y − y ^ ) \begin{equation} L(W,b)= \sum_{i=1}^n (y_i - \hat{y}_i)^2=(y-\hat{y})^T(y-\hat{y}) \end{equation} L(W,b)=i=1∑n(yi−y^i)2=(y−y^)T(y−y^)
其中, L ( y , y ^ ) L(y,\hat{y}) L(y,y^)表示损失函数, y y y表示真实的输出, y ^ \hat{y} y^表示预测的输出。现在这个问题就变成了一个优化问题,我们需要找到一个最优的 W W W和 b b b,使得损失函数最小,即:
arg min W , b L ( y , y ^ ) \begin{equation} \arg\min_{W,b} L(y,\hat{y}) \end{equation} argW,bminL(y,y^)
这个问题可以用梯度下降法来求解,即:
W ← W − η ∂ L ∂ W \begin{equation} W \leftarrow W - \eta \frac{\partial L}{\partial W} \end{equation} W←W−η∂W∂L
b ← b − η ∂ L ∂ b \begin{equation} b \leftarrow b - \eta \frac{\partial L}{\partial b} \end{equation} b←b−η∂b∂L
其中, η \eta η表示学习率,是一个超参数,用来控制参数更新的幅度。这样,我们就可以通过梯度下降法来求解参数 W W W和 b b b。
假设 f ( x ) f(x) f(x)是sigmoid函数,即:
f ( x ) = 1 1 + e − x \begin{equation} f(x) = \frac{1}{1+e^{-x}} \end{equation} f(x)=1+e−x1
其导数为:
f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) \begin{equation} f'(x) = f(x)(1-f(x)) \end{equation} f′(x)=f(x)(1−f(x))
那么,根据链式法则,梯度下降法中的 ∂ L ∂ W \frac{\partial L}{\partial W} ∂W∂L和 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L的计算过程如下:
∂ L ∂ W = ∂ L ∂ y ^ ∂ y ^ ∂ a ∂ a ∂ W \begin{equation} \frac{\partial L}{\partial W} = \frac{\partial L}{\partial \hat{y}} \frac{\partial \hat{y}}{\partial a} \frac{\partial a}{\partial W} \end{equation} ∂W∂L=∂y^∂L∂a∂y^∂W∂a
∂ L ∂ y ^ = ∂ ∂ y ^ ∑ i = 1 n ( y i − y ^ i ) 2 = 1 2 ( y ^ − y ) \begin{equation} \frac{\partial L}{\partial \hat{y}}=\frac{\partial}{\partial \hat{y}}\sum_{i=1}^n (y_i - \hat{y}_i)^2=\frac{1}{2}(\hat{y}-y) \end{equation} ∂y^∂L=∂y^∂i=1∑n(yi−y^i)2=21(y^−y)
∂ y ^ ∂ a = f ′ ( a ) = f ( a ) ( 1 − f ( a ) ) = y ^ ⊙ ( 1 − y ^ ) \begin{equation} \frac{\partial \hat{y}}{\partial a}=f'(a)=f(a)(1-f(a))=\hat{y}\odot(1-\hat{y}) \end{equation} ∂a∂y^=f′(a)=f(a)(1−f(a))=y^⊙(1−y^)
∂ a ∂ W = ∂ ( W x + b ) ∂ W = [ x 1 x 2 … x n x 1 x 2 … x n ⋮ ⋮ … ⋮ x 1 x 2 … x n ] m × n = [ 1 1 ⋮ 1 ] m × 1 x T \begin{equation} \frac{\partial a}{\partial W}=\frac{\partial (Wx+b)}{\partial W}={\begin{bmatrix}x_1 & x_2 & \dots & x_n\\ x_1 & x_2 & \dots & x_n\\ \vdots & \vdots & \dots & \vdots \\ x_1 & x_2 & \dots & x_n\end{bmatrix}}_{m \times n} = {\begin{bmatrix}1\\1\\\vdots \\1\end{bmatrix}}_{m \times 1} x^T \end{equation} ∂W∂a=∂W∂(Wx+b)=⎣ ⎡x1x1⋮x1x2x2⋮x2…………xnxn⋮xn⎦ ⎤m×n=⎣ ⎡11⋮1⎦ ⎤m×1xT
将(12)(13)(14)式代入式(11)中,写成最终的矩阵形式:
∂ L ∂ W = 1 2 ( y ^ − y ) ⊙ y ^ ⊙ ( 1 − y ^ ) x T \begin{equation} \frac{\partial L}{\partial W}=\frac{1}{2}(\hat{y}-y)\odot\hat{y}\odot(1-\hat{y})x^T \end{equation} ∂W∂L=21(y^−y)⊙y^⊙(1−y^)xT
这个 ⊙ \odot ⊙符号表示对应位置元素相乘。
由于系数不会影响梯度下降法的结果,所以我们可以将系数 1 2 \frac{1}{2} 21去掉,得到:
∂ L ∂ W = ( y ^ − y ) ⊙ y ^ ⊙ ( 1 − y ^ ) x T \begin{equation} \frac{\partial L}{\partial W}=(\hat{y}-y)\odot\hat{y}\odot(1-\hat{y})x^T \end{equation} ∂W∂L=(y^−y)⊙y^⊙(1−y^)xT
同理, 对于 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L可得:
∂ L ∂ b = ( y ^ i − y i ) ⊙ y ^ i ⊙ ( 1 − y ^ i ) \begin{equation} \frac{\partial L}{\partial b}=(\hat{y}_i-y_i)\odot\hat{y}_i\odot(1-\hat{y}_i) \end{equation} ∂b∂L=(y^i−yi)⊙y^i⊙(1−y^i)
在实际使用中,我们的样本往往有很多,而且我们更新参数的时候,通常也是一小批样本来更新,而不是一个样本。所以,我们需要将上面的公式进行一些修改,使得它能够适用于多样本的情况。假设我们有 p p p个样本,我们的式(2)(3)(4)(5)重新表示为:
A m × p = W m × n X n × p + B m × p \begin{equation} A_{m \times p} = W_{m \times n}X_{n \times p} + B_{m \times p} \end{equation} Am×p=Wm×nXn×p+Bm×p
Y m × p = f ( A m × p ) \begin{equation} Y_{m \times p}=f(A_{m \times p}) \end{equation} Ym×p=f(Am×p)
Y ^ m × p = f ( W m × n X n × p + B m × p ) \begin{equation} \hat{Y}_{m \times p} = f(W_{m \times n}X_{n \times p} + B_{m \times p}) \end{equation} Y^m×p=f(Wm×nXn×p+Bm×p)
L ( W , b ) = 1 2 p ∑ j = 1 p ∑ i = 1 n ( y i j − y ^ i j ) 2 = 1 2 p t r ( ( Y − Y ^ ) ( Y − Y ^ ) T ) \begin{equation} L(W,b)= \frac{1}{2p} \sum_{j=1}^p \sum_{i=1}^n (y_{ij}- \hat{y}_{ij})^2=\frac{1}{2p} tr((Y-\hat{Y})(Y-\hat{Y})^T) \end{equation} L(W,b)=2p1j=1∑pi=1∑n(yij−y^ij)2=2p1tr((Y−Y^)(Y−Y^)T)
这里的 t r tr tr表示矩阵的迹, B m × p B_{m \times p} Bm×p为:
B m × p = [ b 1 b 1 … b 1 b 2 b 2 … b 2 ⋮ ⋮ … ⋮ b m b m … b m ] m × p = b m × 1 ⊗ [ 1 1 … 1 ] 1 × p \begin{equation} B_{m \times p}={\begin{bmatrix}b_1 & b_1 & \dots & b_1\\ b_2 & b_2 & \dots & b_2\\ \vdots & \vdots & \dots & \vdots \\ b_m & b_m & \dots & b_m\end{bmatrix}}_{m \times p}=b_{m \times 1} \otimes {\begin{bmatrix}1 & 1 & \dots & 1\end{bmatrix}}_{1 \times p} \end{equation} Bm×p=⎣ ⎡b1b2⋮bmb1b2⋮bm…………b1b2⋮bm⎦ ⎤m×p=bm×1⊗[11…1]1×p
这里的 ⊗ \otimes ⊗符号表示克罗内克积,上面就是将 b b b进行横向延拓
让我们来重新计算下 ∂ L ∂ W \frac{\partial L}{\partial W} ∂W∂L和 ∂ L ∂ b \frac{\partial L}{\partial b} ∂b∂L。首先,我们来计算 ∂ L ∂ W \frac{\partial L}{\partial W} ∂W∂L。根据链式法则,我们可以得到:
∂ L ∂ W = ∂ L ∂ Y ^ ∂ Y ^ ∂ A ∂ A ∂ W \begin{equation} \frac{\partial L}{\partial W} = \frac{\partial L}{\partial \hat{Y}} \frac{\partial \hat{Y}}{\partial A} \frac{\partial A}{\partial W} \end{equation} ∂W∂L=∂Y^∂L∂A∂Y^∂W∂A
先计算 ∂ L ∂ Y ^ \frac{\partial L}{\partial \hat{Y}} ∂Y^∂L:
∂ L ∂ Y ^ = ∂ ∂ Y ^ 1 2 p ∑ j = 1 p ∑ i = 1 n ( y i j − y ^ i j ) 2 = 1 p ( Y ^ − Y ) \begin{equation} \frac{\partial L}{\partial \hat{Y}} = \frac{\partial}{\partial \hat{Y}}\frac{1}{2p} \sum_{j=1}^p \sum_{i=1}^n (y_{ij}- \hat{y}_{ij})^2 = \frac{1}{p}(\hat{Y}-Y) \end{equation} ∂Y^∂L=∂Y^∂2p1j=1∑pi=1∑n(yij−y^ij)2=p1(Y^−Y)
接下来计算 ∂ Y ^ ∂ A \frac{\partial \hat{Y}}{\partial A} ∂A∂Y^:
∂ Y ^ ∂ A = ∂ ∂ A f ( A ) = f ( A ) ⊙ ( 1 − f ( A ) ) \begin{equation} \frac{\partial \hat{Y}}{\partial A} = \frac{\partial}{\partial A}f(A) = f(A) \odot (1-f(A)) \end{equation} ∂A∂Y^=∂A∂f(A)=f(A)⊙(1−f(A))
再计算 ∂ A ∂ W \frac{\partial A}{\partial W} ∂W∂A:
∂ A ∂ W = ∂ ∂ W ( W X + B ) = [ 1 1 … 1 1 1 … 1 ⋮ ⋮ … ⋮ 1 1 … 1 ] m × p X n × p T \begin{equation} \frac{\partial A}{\partial W} = \frac{\partial}{\partial W}(W X + B) = {\begin{bmatrix} 1 & 1 & \dots & 1\\1 & 1 & \dots & 1\\\vdots & \vdots & \dots & \vdots \\1 & 1 & \dots & 1 \end{bmatrix}}_{m \times p} X^T_{n \times p} \end{equation} ∂W∂A=∂W∂(WX+B)=⎣ ⎡11⋮111⋮1…………11⋮1⎦ ⎤m×pXn×pT
将上面的三个式子代入(23)中,得到:
∂ L ∂ W = 1 p ( Y ^ − Y ) ⊙ f ( A ) ⊙ ( 1 − f ( A ) ) X T \begin{equation} \frac{\partial L}{\partial W} = \frac{1}{p}(\hat{Y}-Y) \odot f(A) \odot (1-f(A)) X^T \end{equation} ∂W∂L=p1(Y^−Y)⊙f(A)⊙(1−f(A))XT
同理,我们可以得到:
∂ L ∂ b = 1 p ( Y ^ − Y ) ⊙ f ( A ) ⊙ ( 1 − f ( A ) ) [ 1 1 … 1 ] 1 × p T \begin{equation} \frac{\partial L}{\partial b} = \frac{1}{p}(\hat{Y}-Y) \odot f(A) \odot (1-f(A)) {\begin{bmatrix}1 & 1 & \dots & 1\end{bmatrix}}_{1 \times p}^T \end{equation} ∂b∂L=p1(Y^−Y)⊙f(A)⊙(1−f(A))[11…1]1×pT