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

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

一、简介

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

二、 算法解析

前向传播(Forward)

深度学习——全连接层(Fully connected dence layers)原理解析_第2张图片

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

反向传播

  • 这里也讲解单层的全连接层的反传。反向传播算法是上世纪Hinton发表在nature上一对深度学习影响巨大的算法。读者需要具备点微积分的知识,主要用到链式法则(chain rule)。
  • 假设输入数据有m个样本,激活函数为 s i g m o i d σ ( x ) = 1 1 + e − x , σ ( x ) ′ = σ ( x ) ( 1 − σ ( x ) ) sigmoid \quad \sigma(x)= \frac{1}{1+e^{-x}}, \sigma(x)' = \sigma(x)(1-\sigma(x)) sigmoidσ(x)=1+ex1,σ(x)=σ(x)(1σ(x)),算法流程
    ——————————————————————————————————
    J = 0 , d W = 0 , d b = 0 , d z = 0 J = 0, dW = 0,db =0,dz = 0 J=0,dW=0,db=0,dz=0
    f o r i i n m : for \quad i \quad in \quad m: foriinm:
    \quad // Forward coumpute
    z i = W T x i + b \quad z_i = W^{T}x^{i} + b zi=WTxi+b
    a i = σ ( z i ) \quad a_i= \sigma(z_i) ai=σ(zi)
    J + = − ( y i l o g ( a i ) + ( 1 − y i ) l o g ( 1 − a i ) ) \quad J += -(y_ilog(a_i) + (1-y_i)log(1-a_i)) J+=(yilog(ai)+(1yi)log(1ai))
    \quad // Backward
    d A = y i a i − 1 − y i 1 − a i \quad dA = \frac{y_i}{a_i} - \frac{1-y_i}{1-a_i} dA=aiyi1ai1yi
    d Z = d A ∗ σ ( z ) ′ = a i − y i \quad dZ = dA*\sigma(z)'=a _i- y_i dZ=dAσ(z)=aiyi
    d W + = x i d Z \quad dW += x_idZ dW+=xidZ
    d b + = d Z \quad db += dZ db+=dZ
    J = − 1 m J , d W = 1 m d W , d b = 1 m d b J = \frac{-1}{m}J,dW = \frac{1}{m}dW, db=\frac{1}{m}db J=m1J,dW=m1dW,db=m1db
    ——————————————————————————————————
  • d A = ∂ J ∂ a i dA = \frac{\partial{J}}{\partial{a_i}} dA=aiJ
  • d Z = ∂ J ∂ a i ∂ a i ∂ z i dZ = \frac{\partial{J}}{\partial{a_i}} \frac{\partial{a_i}}{\partial{z_i}} dZ=aiJziai
  • d W = ∂ J ∂ z i ∂ z i ∂ W dW =\frac{\partial{J}}{\partial{z_i}} \frac{\partial{z_i}}{\partial{W}} dW=ziJWzi
  • d b = ∂ J ∂ a i ∂ a i ∂ b db = \frac{\partial{J}}{\partial{a_i}} \frac{\partial{a_i}}{\partial{b}} db=aiJbai
    在实际编程中需要注意变量的维度。
  • 可以看得出上面算法有个for循环,所以可以用矩阵把它优化,变为下面公式
  • d Z = ∂ J ∂ A ∂ A ∂ z = A − Y dZ = \frac{\partial{J}}{\partial{A}} \frac{\partial{A}}{\partial{z}} =A-Y dZ=AJzA=AY
  • d W = ∂ J ∂ z ∂ z ∂ W = 1 m d Z X T dW =\frac{\partial{J}}{\partial{z}} \frac{\partial{z}}{\partial{W}}=\frac{1}{m}dZX^{T} dW=zJWz=m1dZXT
  • d b = ∂ J ∂ a ∂ a ∂ b = 1 m n p . s u m ( d Z , a x i s = 1 , k e e p d i m s = T r u e ) db = \frac{\partial{J}}{\partial{a}} \frac{\partial{a}}{\partial{b}}=\frac{1}{m}np.sum(dZ,axis=1,keepdims=True) db=aJba=m1np.sum(dZ,axis=1,keepdims=True)

你可能感兴趣的:(计算机视觉,深度学习)