全连接神经网络详解(Full Connect Neural Network)

深度学习最基础的网络类型的之一,全连接神经网络(Full Connect Neural Network)是大多数入门深度学习领域的初学者必学的内容,充分体现深度学习方法相比于传统机器学习算法的特点,即大数据驱动、去公式推导、自我迭代更新、黑匣子训练等。

本文介绍单层神经网络、浅层神经网络和深层神经网络,循序渐进地加深对于深度学习基本概念的理解。需要注意的是所有代码基于飞桨PaddlePaddle架构实现。

Logistic回归模型是最简单的单层网络,常被用来处理二分类问题,它使一种用于分析各种影响因素( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n)(x 1 ​,x 2 ​,…,x n ​)与分类结果y y y之间的有监督学习方法。

1.1 正向传播

此计算过程等同于线性回归计算,即给每一个输入向量x分配权值,计算出一个结果向量z。同时,为了使神经网络具有非线性特点,引入激活函数来处理线性变换得到的数值。

  • 线性变换(加权和偏置):z = w T x + b z=w^Tx+b z =w T x +b
  • 非线性变换(激活函数):δ ( x ) = 1 1 + e − z \delta (x) = \frac{1}{{1 + {e^{ – z}}}}δ(x )=1 +e −z 1 ​

上式中w w w为权值,b b b为偏置,x x x为输入值,z z z为线性输出值,δ \delta δ为非线性输出值。

1.2 损失函数

模型需要定义损失函数来对参数w w w和b b b进行优化,损失函数的选择需要具体问题具体分析,以下为两种常见损失函数计算公式。

  • 平方损失函数:L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat y,y) = \frac{1}{2}{(\hat y – y)^2}L (y ^​,y )=2 1 ​(y ^​−y )2
  • 对数似然损失函数:L ( y ^ , y ) = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L(\hat y,y) = – [y\log \hat y + (1 – y)\log (1 – \hat y)]L (y ^​,y )=−[y lo g y ^​+(1 −y )lo g (1 −y ^​)]

上式中y ^ \hat y y ^​为计算结果,y y y为实际结果

1.3 梯度下降

梯度下降是一种前反馈计算方法,反映的是一种”以误差来修正误差”的思想,亦是神经网络进行迭代更新的核心过程。

  • 迭代更新:ω = ω − α d L ( ω ) d ω \omega = \omega – \alpha \frac{{dL(\omega )}}{{d\omega }}ω=ω−αd ωd L (ω)​
  • 链式法则:d L ( a , y ) d ω = d L ( a , y ) d a ⋅ d a d z ⋅ d z d ω \frac{{dL(a,y)}}{{d\omega }} = \frac{{dL(a,y)}}{{da}} \cdot \frac{{da}}{{dz}} \cdot \frac{{dz}}{{d\omega }}d ωd L (a ,y )​=d a d L (a ,y )​⋅d z d a ​⋅d ωd z ​

浅层神经网络相比单层网络的差别在于隐藏层有多个神经节点,这就使得其可以处理”多输入多输出”的复杂问题。每一层的每一个节点都与上下层节点全部连接,这种神经网络称作全连接网络。

2.1 正向传播

z [ 1 ] = ( z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] ) = ( w 1 ( 1 ] T ⋅ x + b 1 ( 1 ) w 2 [ 1 ] T ⋅ x + b 2 [ 1 ] w 3 [ 1 ] T ⋅ x + b 3 [ 1 ] ) = ( w 1 [ 1 ] T ⋅ x w 2 [ 1 ] T ⋅ x w 3 ( 1 ] T ⋅ x ) + b [ 1 ] = W [ 1 ] x + b [ 1 ] a [ 1 ] = ( a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] ) = ( t ( z 1 ( 1 ] ) t ( z 2 ( 1 ] ) t ( z 3 [ 1 ] ) ) = t ( z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] ) = t ( z [ 1 ] ) \begin{array}{c} z^{[1]}=\left(\begin{array}{c} z_{1}^{[1]} \ z_{2}^{[1]} \ z_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{(1] T} \cdot x+b_{1}^{(1)} \ w_{2}^{[1] T} \cdot x+b_{2}^{[1]} \ w_{3}^{[1] T} \cdot x+b_{3}^{[1]} \end{array}\right)=\left(\begin{array}{l} w_{1}^{[1] T} \cdot x \ w_{2}^{[1] T} \cdot x \ w_{3}^{(1] T} \cdot x \end{array}\right)+b^{[1]}=W^{[1]} x+b^{[1]} \ a^{[1]}=\left(\begin{array}{l} a_{1}^{[1]} \ a_{2}^{[1]} \ a_{3}^{[1]} \end{array}\right)=\left(\begin{array}{c} t\left(z_{1}^{(1]}\right) \ t\left(z_{2}^{(1]}\right) \ t\left(z_{3}^{[1]}\right) \end{array}\right)=t\left(\begin{array}{c} z_{1}^{[1]} \ z_{2}^{[1]} \ z_{3}^{[1]} \end{array}\right)=t\left(z^{[1]}\right) \end{array}z [1 ]=⎝⎜⎛​z 1 [1 ]​z 2 [1 ]​z 3 [1 ]​​⎠⎟⎞​=⎝⎜⎛​w 1 (1 ]T ​⋅x +b 1 (1 )​w 2 [1 ]T ​⋅x +b 2 [1 ]​w 3 [1 ]T ​⋅x +b 3 [1 ]​​⎠⎟⎞​=⎝⎜⎛​w 1 [1 ]T ​⋅x w 2 [1 ]T ​⋅x w 3 (1 ]T ​⋅x ​⎠⎟⎞​+b [1 ]=W [1 ]x +b [1 ]a [1 ]=⎝⎜⎛​a 1 [1 ]​a 2 [1 ]​a 3 [1 ]​​⎠⎟⎞​=⎝⎜⎜⎜⎛​t (z 1 (1 ]​)t (z 2 (1 ]​)t (z 3 [1 ]​)​⎠⎟⎟⎟⎞​=t ⎝⎜⎛​z 1 [1 ]​z 2 [1 ]​z 3 [1 ]​​⎠⎟⎞​=t (z [1 ])​

  • 上角标中括号用于区分不同层
  • 下角标数字表示神经元节点的映射关系
  • 一个神经元节点包含上一层节点数ω x ω_x ωx ​和b x b_x b x ​和下一层节点数z y z_y z y ​

2.2 反向传播

  • 梯度下降法
    W = W − α ∂ L ∂ W b = b − α ∂ L ∂ b \begin{aligned} \boldsymbol{W} &=\boldsymbol{W}-\alpha \frac{\partial L}{\partial \boldsymbol{W}} \ b &=b-\alpha \frac{\partial L}{\partial b} \end{aligned}W b ​=W −α∂W ∂L ​=b −α∂b ∂L ​​
  • 向量表达式
    W [ 1 ] = ( w 1 [ 1 ] , w 2 [ 1 ] , w 3 [ 1 ] ) T = [ w 1 [ 1 ] T w 2 [ 1 ] T w 3 [ 1 ] T ] = [ w 11 [ 1 ] , w 12 [ 1 ] w 21 [ 1 ] , w 22 [ 1 ] w 31 [ 1 ] , w 32 [ 1 ] ] b [ 1 ] = [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] ] \boldsymbol{W}^{[1]}=\left(\boldsymbol{w}{1}^{[1]}, \boldsymbol{w}{2}^{[1]}, \boldsymbol{w}{3}^{[1]}\right)^{\mathrm{T}}=\left[\begin{array}{l} \boldsymbol{w}{1}^{[1]^{\mathrm{T}}} \ \boldsymbol{w}{2}^{[1] \mathrm{T}} \ \boldsymbol{w}{3}^{[1] \mathrm{~T}} \end{array}\right]=\left[\begin{array}{c} w_{11}^{[1]}, w_{12}^{[1]} \ w_{21}^{[1]}, w_{22}^{[1]} \ w_{31}^{[1]}, w_{32}^{[1]} \end{array}\right] \quad b^{[1]}=\left[\begin{array}{l} b_{1}^{[1]} \ b_{2}^{[1]} \ b_{3}^{[1]} \end{array}\right]W [1 ]=(w 1 [1 ]​,w 2 [1 ]​,w 3 [1 ]​)T =⎣⎢⎡​w 1 [1 ]T ​w 2 [1 ]T ​w 3 [1 ]T ​​⎦⎥⎤​=⎣⎢⎡​w 1 1 [1 ]​,w 1 2 [1 ]​w 2 1 [1 ]​,w 2 2 [1 ]​w 3 1 [1 ]​,w 3 2 [1 ]​​⎦⎥⎤​b [1 ]=⎣⎢⎡​b 1 [1 ]​b 2 [1 ]​b 3 [1 ]​​⎦⎥⎤​

随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是”边缘”的特征,第二个隐藏层学习到的是由’边缘”组成的”形状”的特征,第三个隐藏层学习到的是由”形状”组成的”图案”的特征,最后的隐藏层学习到的是由”图案”组成的”目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

3.1 ImageNet发展史

针对ImageNet数据集的图像分类任务,人们提出了许多重要的网络模型,生动形象地向我们展示了深层网络的巨大优势,回顾整个发展史能够发现,深度学习的网络层数从8层到152层逐步增加,网络分类的能力也越来越强。

年份算法错误率主要贡献1994LeNet5-卷积、池化和全连接,标志CNN的诞生2012Alex15.3%ReLU、Dropout、归一化2014GoogLeNet6.66%没有最深只有更深、Inception模块2015ResNet3.57%152层,深度残差网络2016、2017Soushen、Momenta2.99%、2.251%SE模块嵌入残差网络

3.2 网络参数

  • 参数:指算法运行迭代、修正最终稳定的值。权重W和偏置b。
  • 超参:开发者人为设定的值。学习率、迭代次数、隐藏层层数、单元节点数、激活函数等

全连接神经网络可以用来解决回归任务、预测任务和分类任务,在不考虑计算机性能的条件下,无脑设置更深层次的网络模型往往可以取得更好的效果。本质上它是一种线性神经网络,无法避免地要面临处理非线性数据集精度差的问题。优化主要集中在以下几个方面。

  • 非线性因素:围绕激活函数展开来说,提高计算速率就要使激活函数去积分化、去微分化、易求偏导,解决梯度消失和梯度爆炸的问题。
  • 迭代更新策略:围绕反向传播更新权值和偏置,如损失函数选择、优化器选择、学习率衰减策略等等,在一定程度上可以提高精度。这类问题本质上仍是一种寻优算法的探索,可以引入遗传算法、差分进化、多目标优化等寻找pareto最优解,
  • 骨干网络:网络应该设置多少层,每一层应该有多少个节点,从来没有一套标准的设计模板,毫无方向的在不断测试中摸索前进。

Original: https://blog.csdn.net/weixin_40928633/article/details/120088667
Author: CPones
Title: 全连接神经网络详解(Full Connect Neural Network)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613992/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球