版权声明:本文为个人原创文章,转载请注明出处
概述
开门见山!
令第 l l l层输入为 x ( l ) x^{(l)} x(l),参数为 W ( l ) W^{(l)} W(l)和 b ( l ) b^{(l)} b(l),输出为 y ( l ) y^{(l)} y(l),那么对CNN中各层可以表示如下:
(1) y ( l ) = f ( x ( l ) ; W ( l ) , b ( l ) ) = { c o n v ( W ( l ) , x ) + b ( l ) , C o n v 层 m a x ( 0 , x ( l ) ) , R e L U 层 M a x 或 者 A v g , P o o l i n g 层 W ( l ) x + b ( l ) , F C 层 e x p ( x ( l ) ) ∑ i = 1 c e x p ( x i ( l ) ) , S o f t m a x 层 y^{(l)} = f(x^{(l)}; W^{(l)},b^{(l)})= \left\{ \begin{array}{lr} conv(W^{(l)}, x)+b^{(l)}, & Conv层\\ max(0, x^{(l)}), & ReLU层\\ Max 或者 Avg, & Pooling层\\ W^{(l)}x+b^{(l)}, & FC层\\ \frac{exp(x^{(l)})}{\sum_{i=1}^c exp(x_i^{(l)})}, & Softmax层\\ \end{array} \right. \tag{1} y(l)=f(x(l);W(l),b(l))=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧conv(W(l),x)+b(l),max(0,x(l)),Max或者Avg,W(l)x+b(l),∑i=1cexp(xi(l))exp(x(l)),Conv层ReLU层Pooling层FC层Softmax层(1)
x ( l + 1 ) = y ( l ) x^{(l+1)} = y^{(l)} x(l+1)=y(l)
令 y ( L ) y^{(L)} y(L)表示最后一层的输出, y ^ \hat{y} y^表示网络输入数据 x ( 1 ) = x x^{(1)}=x x(1)=x对应的正值。则损失函数定义为:
(2) l o s s ( y ( L ) , y ^ ) = { 1 2 ∥ y ( L ) − y ^ ∥ 2 2 , 最 小 均 方 误 差 , 回 归 问 题 − ∑ i = 1 c 1 ( y ^ i = 1 ) l o g ( y i ( L ) ) , 交 叉 熵 损 失 , 分 类 问 题 loss(y^{(L)},\hat{y})= \left\{ \begin{array}{lr} \frac{1}{2}\left\|y^{(L)}-\hat{y}\right\|_2^2, & 最小均方误差,回归问题\\ -\sum_{i=1}^c 1(\hat{y}_i=1) log(y^{(L)}_i), & 交叉熵损失,分类问题\\ \end{array} \right. \tag{2} loss(y(L),y^)={
21∥∥y(L)−y^∥∥22,−∑i=1c1(y^i=1)log(yi(L)),最小均方误差,回归问题交叉熵损失,分类问题(2)
BP算法
BP算法起点为损失函数。
Loss层
损失函数无可学习参数,只需计算向后传播的偏导数 ∂ l ∂ y ( L ) \frac{\partial l}{\partial y^{(L)}} ∂y(L)∂l
对最小均方误差:
(3) ∂ l ∂ y ( L ) = y ( L ) − y ^ \frac{\partial l}{\partial y^{(L)}}=y^{(L)}-\hat{y} \tag{3} ∂y(L)∂l=y(L)−y^(3)
对交叉熵损失:
对多分类+单标签(每张图像只能属于一个类别)问题,真值向量 y ^ \hat{y} y^中只能有一个元素值不为0,假设为 y ^ j \hat{y}_j y^j,即类别为j。
(4) ∂ l ∂ y ( L ) = [ 0 ⋮ 0 − 1 y j ( L ) 0 ⋮ 0 ] \frac{\partial l}{\partial y^{(L)}}= \left[ \begin{matrix} 0 \\ \vdots \\ 0 \\ -\frac{1}{y^{(L)}_j} \\ 0 \\ \vdots \\ 0 \\ \end{matrix} \right] \tag{4} ∂y(L)∂l=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0⋮0−yj(L)10⋮0⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(4)
中间层
Softmax层
Softmax层后通常紧跟交叉熵损失用于分类问题。
该层的前向计算为:
此时 x ( l ) x^{(l)} x(l)和 y ( l ) y^{(l)} y(l)均为c维的列向量
(5) y ( l ) = [ y 1 ( L ) y 2 ( L ) ⋮ y c ( L ) ] = [ e x p ( x 1 ( l ) ) ∑ i = 1 c e x p ( x i ( l ) ) ⋮ e x p ( x c ( l ) ) ∑ i = 1 c e x p ( x i ( l ) ) ] = [ p 1 p 2 ⋮ p c ] y^{(l)}= \left[ \begin{matrix} y^{(L)}_1 \\ y^{(L)}_2 \\ \vdots \\ y^{(L)}_c\\ \end{matrix} \right] = \left[ \begin{matrix} \frac{exp(x^{(l)}_1)}{\sum_{i=1}^c exp(x^{(l)}_i)} \\ \vdots \\ \frac{exp(x^{(l)}_c)}{\sum_{i=1}^c exp(x^{(l)}_i)} \\ \end{matrix} \right] = \left[ \begin{matrix} p_1 \\ p_2 \\ \vdots \\ p_c \\ \end{matrix} \right] \tag{5} y(l)=⎣⎢⎢⎢⎢⎡y1(L)y2(L)⋮yc(L)⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎡∑i=1cexp(xi(l))exp(x1(l))⋮∑i=1cexp(xi(l))exp(xc(l))⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡p1p2⋮pc⎦⎥⎥⎥⎤(5)
反向传播在已知 ∂ l ∂ y ( l ) = ∂ l ∂ y ( L ) \frac{\partial l}{\partial y^{(l)}}=\frac{\partial l}{\partial y^{(L)}} ∂y(l)∂l=∂y(L)∂l[公式(4)]的情况下,需要计算 ∂ l ∂ x ( l ) \frac{\partial l}{\partial x^{(l)}} ∂x(l)∂l。
反向传播如下:
令E表示单位矩阵。
对 y i ( l ) y^{(l)}_i yi(l),有:
(6) ∂ y i ( l ) ∂ x j ( l ) = { p i − p i 2 , j = i − p i p j , o t h e r w i s e \frac{\partial y^{(l)}_i}{\partial x^{(l)}_j} = \left\{ \begin{array}{lr} p_i-p_i^2, & j=i \\ -p_i p_j , & otherwise \end{array} \right. \tag{6} ∂xj(l)∂yi(l)={
pi−pi2,−pipj,j=iotherwise(6)
进一步可得:
(7) ∂ y ( l ) ∂ x ( l ) = [ ∂ y 1 ( l ) ∂ x 1 ( l ) ∂ y 1 ( l ) ∂ x 2 ( l ) … ∂ y 1 ( l ) ∂ x c ( l ) ∂ y 2 ( l ) ∂ x 1 ( l ) ∂ y 2 ( l ) ∂ x 2 ( l ) … ∂ y 2 ( l ) ∂ x c ( l ) ⋮ ⋮ … ⋮ ∂ y c ( l ) ∂ x 1 ( l ) ∂ y c ( l ) ∂ x 2 ( l ) … ∂ y c ( l ) ∂ x c ( l ) ] = − [ p 1 2 − p 1 p 1 p 2 … p 1 p c p 2 p 1 p 2 2 − p 2 … p 2 p c ⋮ ⋮ … ⋮ p c p 1