深度学习——全连接层(Fully connected dence layers)原理解析

时间:2024-05-22 22:36:55

深度学习——全连接层(Fully connected dence layers)原理解析

一、简介

  • 全连接层有多个神经元,是一个列向量(单个样本)。在计算机视觉领域正常用于深度神经网络的后面几层,用于图像分类任务。
    深度学习——全连接层(Fully connected dence layers)原理解析
  • 全连接层算法包括两部分:前向传播(Forward)和反向传播(Backward)

二、 算法解析

前向传播(Forward)

深度学习——全连接层(Fully connected dence layers)原理解析

  • 上图主要有5个变量,x,a,W,b,σx, a,W,b,\sigma,上图是单层的全连接层,只有一个神经元。
  • xx: 代表一个样本输入的特征的向量,上图xx是第L[0]L^{[0]}层输入,维度为(12287,1)
  • ww: 代表第1层全连接层的权重,维度为(12287,1)
  • bb: 代表偏置,维度为(1,1)
  • zz: 代表神经元的线性计算 z=WTx+bz = W^{T}x + b,维度(1,1)
  • σ\sigma: a=σ(z)a =\sigma(z) **函数
  • LL: 交叉熵
  • JJ: 损失函数
    图中公式(1)(2)(3)(4)就是前向传播过程,Loss Function 为交叉熵。

反向传播

  • 这里也讲解单层的全连接层的反传。反向传播算法是上世纪Hinton发表在nature上一对深度学习影响巨大的算法。读者需要具备点微积分的知识,主要用到链式法则(chain rule)。
  • 假设输入数据有m个样本,**函数为sigmoidσ(x)=11+ex,σ(x)=σ(x)(1σ(x))sigmoid \quad \sigma(x)= \frac{1}{1+e^{-x}}, \sigma(x)' = \sigma(x)(1-\sigma(x)),算法流程
    ——————————————————————————————————
    J=0,dW=0,db=0,dz=0J = 0, dW = 0,db =0,dz = 0
    foriinm:for \quad i \quad in \quad m:
    \quad// Forward coumpute
    zi=WTxi+b\quad z_i = W^{T}x^{i} + b
    ai=σ(zi)\quad a_i= \sigma(z_i)
    J+=(yilog(ai)+(1yi)log(1ai))\quad J += -(y_ilog(a_i) + (1-y_i)log(1-a_i))
    \quad// Backward
    dA=yiai1yi1ai\quad dA = \frac{y_i}{a_i} - \frac{1-y_i}{1-a_i}
    dZ=dAσ(z)=aiyi\quad dZ = dA*\sigma(z)'=a _i- y_i
    dW+=xidZ\quad dW += x_idZ
    db+=dZ\quad db += dZ
    J=1mJ,dW=1mdW,db=1mdbJ = \frac{-1}{m}J,dW = \frac{1}{m}dW, db=\frac{1}{m}db
    ——————————————————————————————————
  • dA=JaidA = \frac{\partial{J}}{\partial{a_i}}
  • dZ=JaiaizidZ = \frac{\partial{J}}{\partial{a_i}} \frac{\partial{a_i}}{\partial{z_i}}
  • dW=JziziWdW =\frac{\partial{J}}{\partial{z_i}} \frac{\partial{z_i}}{\partial{W}}
  • db=Jaiaibdb = \frac{\partial{J}}{\partial{a_i}} \frac{\partial{a_i}}{\partial{b}}
    在实际编程中需要注意变量的维度。
  • 可以看得出上面算法有个for循环,所以可以用矩阵把它优化,变为下面公式
  • dZ=JAAz=AYdZ = \frac{\partial{J}}{\partial{A}} \frac{\partial{A}}{\partial{z}} =A-Y
  • dW=JzzW=1mdZXTdW =\frac{\partial{J}}{\partial{z}} \frac{\partial{z}}{\partial{W}}=\frac{1}{m}dZX^{T}
  • db=Jaab=1mnp.sum(dZ,axis=1,keepdims=True)db = \frac{\partial{J}}{\partial{a}} \frac{\partial{a}}{\partial{b}}=\frac{1}{m}np.sum(dZ,axis=1,keepdims=True)