【1】深度神经网络的前向/反向传播算法

1.感知机

1.1 基本介绍

        神经网络的发展,最早可以追溯到感知机模型,我们不妨理解为当前的神经网络模型,都是从感知机进化而来的,因此,在正式学习神经网络之前,认识一下它的“祖先”还是很有必要的。
                       
        上图就是对感知机的完整诠释,这个名字有点误导,因为它根本上就是做决策用的。

       举个例子:
       你正在考虑今天要不要出去看电影,你主要考虑的有三个因素p1 、p2和p3。其中p1是你女朋友想不想去,p2是电影好不好看,p3是今天工作多不多,每一个因素对应于一个权重wi,有的人看重女朋友,有的人看重电影的质量…
       你把每一项pi和对应的wi相乘,然后累加求和得到一个结果,如果这个值大于设定的阈值,那么你就决定去看电影,如果小于等于设定的阈值,那么就不去看,这就是感知机做决策的例子。

1.2 感知机模型

        根据上面的叙述,我们大概知道,感知机的决策过程主要分两步,一是计算输入乘以权重的累加和,二是判断累加和与阈值之间的大小关系。我们可以把两个步骤合并在一起,把阈值b与累加和相加,再用 s i g n ( x ) sign(x) sign(x)函数得到输入结果。
        我们先计算累加和与bias项的和: z = ∑ i = 1 m w i x i + b z=\sum_{i=1}^{m} w_{i} x_{i}+b z=i=1mwixi+b        得到中间结果 z z z之后,我们可以再用激活函数 s i g n ( x ) sign(x) sign(x),得到最终的决策值:
sign ⁡ ( z ) = { − 1 z < 0 1 z ≥ 0 \operatorname{sign}(z)=\left\{\begin{array}{ll}{-1} & {z<0} \\ {1} & {z \geq 0}\end{array}\right. sign(z)={ 11z<0z0

1.3 逻辑回归

        不知道大家有没有和我一样的感受,看了感知机的原理之后,就想到了逻辑回归模型,因为二者的相似处实在太多,想想逻辑回归也是计算特征值的加权和,然后喂给了 S i g m o i d Sigmoid Sigmoid激活函数,得到最终的输出结果。

        从函数的判别模型角度来看,感知机和逻辑回归还是挺相似的,那么逻辑回归模型,是否也可以像感知机一样,理解为只含有一个神经元的神经网络模型呢?同理,由LogisicRegression拓展到多分类任务的SoftmaxRegression,是否也是一种特殊的神经网络呢?

        这个只是我目前的学习思考,之后学习的更深之后,再来解答此问题,不容否认的是,逻辑回归和神经网络之间一定是有着某种特别的联系的。

1.4 感知机到神经网络的演化

        上述的感知机模型,只能用于线性的二分类任务,无法用于复杂的非线性多分类任务,于是在此基础上进行一些扩展,得到了现在我们熟知的神经网络,主要有三点扩展:

  1. 增加了隐藏层,提升了模型的表达能力,隐藏层的层数以及每层神经元的个数需要自己设计,代价是增加了模型的复杂程度,计算量增加;
  2. 增加了输出层的神经元个数,有1个变为多个,带来的好处是可用于多分类任务、或其他机器学习领域如降维和聚类
  3. 增加了激活函数的种类,感知机的激活函数是 s i g n ( z ) sign(z) sign(z),虽然简单但是能力有限,常用的激活函数有 S i g m o i d 、 R e L U 、 t a n h 和 s o f t m a x Sigmoid、ReLU、tanh和softmax SigmoidReLUtanhsoftmax等,这里有详细介绍不同激活函数的区别和优缺点。

2.深度神经网络DNN

2.1 基本概念

        深度神经网络,也被叫做多层神经网络,偶尔也会被叫做多层感知机模型(Multi-Layer perceptron , MLP),我们只需要知道它们指的都是同一个东西即可,这里我们统称为DNN.

        深度神经网络的架构图如下:
                
        层与层之间是全连接的,即第(l-1)层的任意一个神经元一定与第l层的任意一个神经元相连接。DNN的结构看起来是很复杂,但是我们单独抽出某一个神经元以及它上一层中的所有神经元,就会发现它其实就是和感知机(还是说逻辑回归?)一样,首先是计算加权和,再加上偏置项b,最终将这个未激活值送到激活函数σ进行激活。

2.2 符号定义

         w 42 3 : w_{42}^3: w423: 表示第(3-1)层的第2个神经元到第3层的第4个神经元之间的连接的权重;

         z 4 3 : z_4^3: z43:   表示第3层的第4个神经元的未经激活函数激活之前的值,其中 z 4 3 = w 41 3 ⋅ a 1 2 + w 42 3 ⋅ a 2 2 + w 43 3 ⋅ a 3 2 + b 4 3 z_{4}^{3}=w_{41}^{3} \cdot a_{1}^{2}+w_{42}^{3} \cdot a_{2}^{2}+w_{43}^{3} \cdot a_{3}^{2}+b_{4}^{3} z43=w413a12+w423a22+w433a32+b43         a 3 4 : a_3^4: a34:   表示第3层的第4个神经元的激活值(输出值),其中
a 4 3 = σ ( z 4 3 ) a_{4}^{3}=\sigma\left(z_{4}^{3}\right) a43=σ(z43)         b 4 3 : b_{4}^{3}: b43:   表示第3层的第4个神经元所对应的偏置项,注意哦,每一层的每一个神经元都对应着一个b,我们把每一个神经元看成是一个感知机模型,所以每个模型对应的bias项是不一样的;

引申一个问题为什么要在未激活值的计算中加上bias项呢?这里引用知乎上的回答。

回答一:我们可以把问题先简化,为什么线性模型要加 bias?答案很简单,不加 bias 你的分类线(面)就必须过原点,这显然是不灵活的。有了bias我们就可以上下左右移动我们的线了,神经网络是一样的道理。

回答二:Bias的好处在于:可以使得神经网络Fit的范围得到左右的调整。
                
       没有bias项时,我们用不同的w来拟合数据,w越大,sigmoid函数越陡峭,分类效果越好!!可观察上图。但是如果要判断图中绿色点的类别呢?按照sigmoid函数的输出,绿色点的激活值小于0.5,应该判为蓝色类,这个时候,让sigmoid函数变得更陡也没办法解决了。
       这个时候,如果加入一个bias项呢?我们观察函数图像:
         
       w系数不需要学的很大,就可以提高学习的准确率,网络就能够非常灵活的拟合样本点的分布,并准确判断绿点所属的集合。
       简单来说,加上bias项能够更加灵活的fit数据样本点的分布!

2.3 DNN的前向传播算法

        假设一个神经网络共有三层,第一层(输入层)共有三个神经元x1,x2,x3,第二层也是有三个神经元,第三层为输出层,只有1个神经元。如下图所示:
                        
        那么第二层的三个神经元的输出分别为: a 1 2 = σ ( z 1 2 ) = σ ( w 11 2 x 1 + w 12 2 x 2 + w 13 2 x 3 + b 1 2 ) a 2 2 = σ ( z 2 2 ) = σ ( w 21 2 x 1 + w 22 2 x 2 + w 23 2 x 3 + b 2 2 ) a 3 2 = σ ( z 3 2 ) = σ ( w 31 2 x 1 + w 32 2 x 2 + w 33 2 x 3 + b 3 2 ) \begin{aligned} a_{1}^{2} &=\sigma\left(z_{1}^{2}\right)=\sigma\left(w_{11}^{2} x_{1}+w_{12}^{2} x_{2}+w_{13}^{2} x_{3}+b_{1}^{2}\right) \\\\ a_{2}^{2} &=\sigma\left(z_{2}^{2}\right)=\sigma\left(w_{21}^{2} x_{1}+w_{22}^{2} x_{2}+w_{23}^{2} x_{3}+b_{2}^{2}\right) \\\\ a_{3}^{2} &=\sigma\left(z_{3}^{2}\right)=\sigma\left(w_{31}^{2} x_{1}+w_{32}^{2} x_{2}+w_{33}^{2} x_{3}+b_{3}^{2}\right) \end{aligned} a12a22a32=σ(z12)=σ(w112x1+w122x2+w132x3+b12)=σ(z22)=σ(w212x1+w222x2+w232x3+b22)=σ(z32)=σ(w312x1+w322x2+w332x3+b32)        第三层的神经元输出为: a 1 3 = σ ( z 1 3 ) = σ ( w 11 3 a 1 2 + w 12 3 a 2 2 + w 13 3 a 3 2 + b 1 3 ) a_{1}^{3}=\sigma\left(z_{1}^{3}\right)=\sigma\left(w_{11}^{3} a_{1}^{2}+w_{12}^{3} a_{2}^{2}+w_{13}^{3} a_{3}^{2}+b_{1}^{3}\right) a13=σ(z13)=σ(w113a12+w123a22+w133a32+b13)        将上述例子一般化,假设第 ( l − 1 ) (l-1) (l1)层共有m个神经元,那么对于第l层的第j个神经元的输出值 a j l a_j^l ajl为: a j l = σ ( z j l ) = σ ( ∑ k = 1 m w j k l a k l − 1 + b j l ) a_j^l = \sigma(z_j^l) = \sigma(\sum\limits_{k=1}^mw_{jk}^la_k^{l-1} + b_j^l) ajl=σ(zjl)=σ(k=1mwjklakl1+bjl)

矩阵法表示】上面这个式子,给出了单个神经元的输出值用代数法如何计算,我们下面来推导更加简洁的矩阵法表示.(最终结果如下:)
a l = σ ( z l ) = σ ( W l a l − 1 + b l ) a^{l}=\sigma\left(z^{l}\right)=\sigma\left(W^{l} a^{l-1}+b^{l}\right) al=σ(zl)=σ(Wlal1+bl)        假设第 ( l − 1 ) (l-1) (l1)层共有m个神经元,而第 l l l层共有n个神经元,则第l层的权重系数w组成了一个n×m的矩阵 W l W^l Wl: ( w 11 l w 12 l … w 1 m l w 21 l w 22 l … w 2 m l . . . . . . … . . . w n 1 l w n 2 l … w n m l ) \left( \begin{array}{llll}{w_{11}^{l}} & {w_{12}^{l}} & {\dots} & {w_{1m}^{l}} \\ \\{w_{21}^{l}} & {w_{22}^{l}} & {\dots} & {w_{2m}^{l}}\\\\{...} & {...} & {\dots} & {...} \\\\ {w_{n1}^{l}} & {w_{n2}^{l}} & {\dots} & {w_{nm}^{l}}\end{array}\right) w11lw21l...wn1lw12lw22l...wn2lw1mlw2ml...wnml        第 ( l − 1 ) (l-1) (l1)层的输出 a a a组成了一个m×1的向量 a l − 1 a^{l-1} al1 ( a 1 l − 1 a 2 l − 1 . . . a m l − 1 ) \left( \begin{array}{llll}{a_{1}^{l-1}}\\ \\{a_{2}^{l-1}}\\\\{...}\\\\ {a_{m}^{l-1}}\end{array}\right) a1l1a2l1...aml1        第 l l l层的偏置向量 b b b组成了一个n×1的向量 b l b^{l} bl ( b 1 l b 2 l . . . b n l ) \left( \begin{array}{llll}{b_{1}^{l}}\\ \\{b_{2}^{l}}\\\\{...}\\\\ {b_{n}^{l}}\end{array}\right) b1lb2l...bnl        整个过程可以用矩阵和向量进行表示:
( a 1 l a 2 l . . . a n l ) = σ ( ( w 11 l w 12 l … w 1 m l w 21 l w 22 l

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值