BP Algorithm for CNN

本文深入探讨了BP算法在卷积神经网络(CNN)中的应用。从CNN的各层开始,包括Loss层、Softmax层、FC层、Conv层、Pooling层和ReLU层,详细解析了每一层的前向传播和反向传播过程,特别是如何计算梯度。通过矩阵运算,阐述了卷积层和全连接层中参数更新的导数计算,以及池化层和ReLU激活函数的反向传播。
摘要由CSDN通过智能技术生成


版权声明:本文为个人原创文章,转载请注明出处

概述

开门见山!
令第 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)),MaxAvg,W(l)x+b(l),i=1cexp(xi(l))exp(x(l)),ConvReLUPoolingFCSoftmax(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^)={ 21y(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=00yj(L)100(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))=p1p2pc(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)={ pipi2,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值