深度解剖(3):矩形运算,神经网络前向传播

以下是链接我个人关于深度学习的所有见解,其后会对深度学习思想,正反向传播,损失函数,正则惩罚,梯度下降,矩阵求导,网络搭建,等等都进行详细的讲解!只有你想不到的,没有我讲不到的。让我用最通俗的语言,为你留下最深刻的印象,后来的年轻人以及我徒弟,好好加油!
深度解剖(0):最通俗易懂,详细无死角的深度学习讲解(目录)
如果有说得不对的地方,欢迎大家指出,我会第一时间进行更正,有兴趣可以加微信a944284742一起讨论技术,如果觉得喜欢,一定要点赞,因为这是对我最大的鼓励。

矩阵运算

接触过深度学习的的人知道,其中需要大量的矩阵运算。在讲解反向传播之前,我们先来讲讲矩阵的运算把。在上小节中我们讲解的:
在这里插入图片描述
f ( x , y , z ) = ( x + y ) ∗ z f(x,y,z) =(x+y) * z f(x,y,z)=(x+y)z,无论是 x , y , z x,y,z x,y,z以及 f ( x , y , z ) f(x,y,z) f(x,y,z)代表的都是一个数值,其链式法则也没有什么复杂或者难以理解的地方,这小节,我们讲解矩阵的前线传播。就以普通的神经网络DNN为例子(其实没有想那么复杂)吧,如下图(不要被图示吓到,花些心思认真看):
在这里插入图片描述
初步看起来这个图是比较复杂的,但是没有关系,首先解释一下上面的相关表示符号,

x x x:表示的是输入,这里要注意的是, x 1 , x 2 , x 3 x_1,x_2,x_3 x1x2x3他们合在一起表示的仅仅是一个样本,为了大家方便理解,这里先从单个样本开始讲解,可以表示为
X = { x 1 x 2 x 3 } X = \left\{ \begin{matrix} x_1 & x_2 & x_3 \end{matrix} \right\} X={x1x2x3}实际呢,在训练的时候,单次训练中,会使用多个样本,看了之前的博客,大家应该对batch_size有了一些概念,假设batch_size为 i i i,也就是每个批次我们训练 i i i个样本,矩阵具体表示形式应该如下: X = { [ x 11 x 12 x 13 ] [ x 21 x 22 x 23 ] [ x 31 x 32 x 33 ] . . . . . . . . . . . . [ x i 1 x i 2 x i 3 ] } X= \left\{ \begin{matrix} [x_{11} & x_{12} & x_{13}]\\ [x_{21} & x_{22} & x_{23}]\\ [x_{31} & x_{32} & x_{33}]\\ ......\\ ......\\ [x_{i1} & x_{i2} & x_{i3}] \end{matrix} \right\} X= [x11[x21[x31............[xi1x12x22x32xi2x13]x23]x33]xi3]
可以很明显的知道,batch_size有多大,我们的样本矩阵就有多少行,为了方便下面的讲解,我们暂且假设batch_size=1,也就是说我们训练数据的表示方式为 X = { x 1 x 2 x 3 } X=\left\{ \begin{matrix} x_1 & x_2 & x_3\end{matrix} \right\} X={x1x2x3},但是大家要注意,其是一个二维的数组,为了不让大家误解,虽然其只是一个样本,表示如以下形式(大家注意以下,后面大写的 X X X,代表的是输入矩阵): X = { [ x 1 x 2 x 3 ] } X = \left\{ \begin{matrix} [x_1 & x_2 & x_3\end{matrix}]\right\} X={[x1x2x3]} ,

通过前面的介绍,我们了解了图中 x x x的含义,下面我们了解以下图中 w w w的含义:
在这里插入图片描述
可以看到,所有的 w w w都是标记在直线上面的, w w w是一个重中之重的东西,在机器学习中,我们一般称之为权重,反向传播的目的,就是对 w w w进行更新,可想而知其是有多么的重要。那么 w w w z z z是什么关系呢?再这之前,先陈述几个概念。

如上图所示,神经网络DNN中,一般分为3个部分:输入,隐藏,以及输出层,这里为了大家方便理解,所以只有一个隐藏层,一般来说,实际的网络中是存在多个层的,但是输入输出一般都是各一个层次。我们可以看到图中的 w w w存在上标和下标:
上标:表示的该权重是在第几层
下标:左下标,表示输入的第几个 x x x,及与 x x x的下标相同,右下标,表示隐藏输出结果的第几个 z z z,及和 z z z的下标相同。
简单 w w w下标可以理解为输入层和隐藏之间对应元素的联系(即第几个输入连接第几个神经元)。

前面提到了 z z z的上标,和 w w w一样,表示所在的层次,及第几层。其下标表示的是隐层第几个神经元。如 z 1 ( 2 ) z^{(2)}_1 z1(2)表示的是第二层(隐层)的第一个神经元的结果。

前面说到结果,那么什么是结果,他是通过计算得到的结果,那么又是怎么计算的呢?我们就拿一个神经元(除了输入层,其他的每一个圈,都可以代表是一个神经元)来说吧。这里我们拿 z 1 ( 2 ) z^{(2)}_1 z1(2)开刀,假设我们要获得 z 1 ( 2 ) z^{(2)}_1 z1(2)的结果,是这样计算的: z 1 ( 2 ) = x 1 w 11 ( 2 ) + x 2 w 12 ( 2 ) + x 3 w 13 ( 2 ) + b 1 ( 2 ) z^{(2)}_1=x_1w^{(2)}_{11}+x_2w^{(2)}_{12} +x_3w^{(2)}_{13} + b^{(2)}_1 z1(2)=x1w11(2)+x2w12(2)+x3w13(2)+b1(2)这里呢,有出现了 b b b b b b代表的是偏置,反正就是加上这个数值(这样理解就行了)。在上面我们求出了 z 1 ( 2 ) z^{(2)}_1 z1(2)这个神经元,但是我们后面还有两个神经元,计算的方法是一样的: z 2 ( 2 ) = x 1 w 21 ( 2 ) + x 2 w 22 ( 2 ) + x 3 w 23 ( 2 ) + b 2 ( 2 ) z^{(2)}_2=x_1w^{(2)}_{21}+x_2w^{(2)}_{22} +x_3w^{(2)}_{23} + b^{(2)}_2 z2(2)=x1w21(2)+x2w22(2)+x3w23(2)+b2(2) z 3 ( 2 ) = x 1 w 31 ( 2 ) + x 2 w 32 ( 2 ) + x 3 w 33 ( 2 ) + b 3 ( 2 ) z^{(2)}_3=x_1w^{(2)}_{31}+x_2w^{(2)}_{32} +x_3w^{(2)}_{33} + b^{(2)}_3 z3(2)=x1w31(2)+x2w32(2)+x3w33(2)+b3(2)通过这种方式,我们就得到 z 1 ( 2 ) , z 2 ( 2 ) , z 3 ( 2 ) z^{(2)}_1,z^{(2)}_2,z^{(2)}_3 z1(2)z2(2)z3(2),这样写起来比较不好看,我们使用矩阵来表示 Z ( 2 ) = { [ z 1 z 2 z 3 ] } Z^{(2)}=\left\{ [\begin{matrix} z_1 & z_2 & z_3]\end{matrix} \right\} Z(2)={[z1z2z3]},注意后面大写Z代表着该矩阵,其是一个1行3列的矩阵。

我们在来看看权重,重图中我们可以知道有很多权重,根据上面的式子,我们也能知道有一起是九个权重,使用矩阵表示如下:
W ( 2 ) = { [ w 11 ( 2 ) w 12 ( 2 ) w 13 ( 2 ) ] [ w 21 ( 2 ) w 22 ( 2 ) w 23 ( 2 ) ] [ w 31 ( 2 ) w 32 ( 2 ) w 33 ( 2 ) ] } W^{(2)} = \left\{ \begin{matrix} [w^{(2)}_{11} & w^{(2)}_{12} & w^{(2)}_{13} ]\\ \\ [w^{(2)}_{21} & w^{(2)}_{22} & w^{(2)}_{23} ]\\ \\ [w^{(2)}_{31} & w^{(2)}_{32} & w^{(2)}_{33} ]\\ \end{matrix} \right\} W(2)= [w11(2)[w21(2)[w31(2)w12(2)w22(2)w32(2)w13(2)]w23(2)]w33(2)]
注意后面为了简单的讲解,我使用大写的 W 2 W^{2} W2代表权重这个矩阵(输入层和第二层-隐层连接的权重)。可以知道 W ( 2 ) W^{(2)} W(2)是一个3x3的矩阵。

既然说到这里了,我为前面的东西做一个简单回顾,在输入层(第一层)和隐层(第二层)的运算等式: X ⋅ W ( 2 ) = Z ( 2 ) X · W^{(2)} = Z^{(2)} XW(2)=Z(2)
展开之后为
{ [ x 1 x 2 x 3 ] } ⋅ { [ w 11 ( 2 ) w 12 ( 2 ) w 13 ( 2 ) ] [ w 21 ( 2 ) w 22 ( 2 ) w 23 ( 2 ) ] [ w 31 ( 2 ) w 32 ( 2 ) w 33 ( 2 ) ] } + { [ b 1 2 b 2 2 b 3 2 ] } = { [ z 1 z 2 z 3 ] } \left\{ \begin{matrix} [x_1 & x_2 & x_3\end{matrix}]\right\}· \left\{ \begin{matrix} [w^{(2)}_{11} & w^{(2)}_{12} & w^{(2)}_{13} ]\\ \\ [w^{(2)}_{21} & w^{(2)}_{22} & w^{(2)}_{23} ]\\ \\ [w^{(2)}_{31} & w^{(2)}_{32} & w^{(2)}_{33} ]\\ \end{matrix} \right\} + \left\{ [\begin{matrix} b^{2}_1 & b^{2}_2 & b^{2}_3]\end{matrix} \right\} =\left\{ [\begin{matrix} z_1 & z_2 & z_3] \end{matrix} \right\} {[x1x2x3]} [w11(2)[w21(2)[w31(2)w12(2)w22(2)w32(2)w13(2)]w23(2)]w33(2)] +{[b12b22b32]}={[z1z2z3]}
其中在前面已经推导出:
z 1 ( 2 ) = x 1 w 11 ( 2 ) + x 2 w 12 ( 2 ) + x 3 w 13 ( 2 ) + b 1 ( 2 ) z^{(2)}_1=x_1w^{(2)}_{11}+x_2w^{(2)}_{12} +x_3w^{(2)}_{13} + b^{(2)}_1 z1(2)=x1w11(2)+x2w12(2)+x3w13(2)+b1(2) z 2 ( 2 ) = x 1 w 21 ( 2 ) + x 2 w 22 ( 2 ) + x 3 w 23 ( 2 ) + b 2 ( 2 ) z^{(2)}_2=x_1w^{(2)}_{21}+x_2w^{(2)}_{22} +x_3w^{(2)}_{23} + b^{(2)}_2 z2(2)=x1w21(2)+x2w22(2)+x3w23(2)+b2(2) z 3 ( 2 ) = x 1 w 31 ( 2 ) + x 2 w 32 ( 2 ) + x 3 w 33 ( 2 ) + b 3 ( 2 ) z^{(2)}_3=x_1w^{(2)}_{31}+x_2w^{(2)}_{32} +x_3w^{(2)}_{33} + b^{(2)}_3 z3(2)=x1w31(2)+x2w32(2)+x3w33(2)+b3(2)
这里注意他们的维度变化:(1,3)·(3,3)=(1,3),如果细心的朋友可以知道,假设矩阵A乘以矩阵B,得到的矩阵大为A的行B的列。我们在来看看前面的图片:
在这里插入图片描述
我们发现,我们发现每个神经元(红色的框)都还有一个 a a a,其代表的是 z z z经过一个激活函数得到 a a a,暂时我们先忽略到激活函数(后续为大家讲解),下面我们些一个通用的公式。

假设我们训练的网络每个批次送入数据batch_size= ( x i ) (xi) (xi),输入层的的输入大小为 ( x j ) (xj) (xj),也就是说,输入矩阵 X ( x i ) ( x j ) X_{(xi)(xj)} X(xi)(xj)表示的是一个 ( x i ) ⋅ ( x j ) (xi)·(xj) (xi)(xj)大小的矩阵。 ( x i ) (xi) (xi)表示行,也表示每个批次的样本数目, ( x j ) (xj) (xj)表示列,也表示每个样本数据的维度。

同理我们使用 ( w i ) , ( w j ) (wi),(wj) (wi),(wj)分别表示W权重矩阵的行和列,如果矩阵X能与矩阵W相乘,那么矩阵X的列一定要与W的行相等。即 ( x j ) (xj) (xj) = ( w i ) (wi) (wi),为了方便理解,我先编写如下等式:
X i j ⋅ W ( j q ) + B ( i ) = Z i j X_{ij}·W_{(jq)} +B_{(i)} = Z_{ij} XijW(jq)+B(i)=Zij
上面要表达的,就是 i i ix j j j大小的矩阵层以 j j jx q q q大小矩阵的结果,是一个 i i ix q q q大小的矩阵。相信大家到了这里已经明白了矩阵的运算过程,那么下面我们就来推导神经网络前向传播(做了那么多的铺垫,这里直接使用矩阵符号表示了),此图为经典,再次贴出,方便读者观察(注意下图是一个样本传播的图示):
在这里插入图片描述
这里的前向传播我们先忽略激活函数,设batch_size= i i i
第一层到第二层的传播: X ( i , 3 ) ⋅ W ( 3 , 3 ) ( 2 ) + B 3 ( 2 ) = Z ( i , 3 ) ( 2 ) 第一层到第二层的传播:X_{(i,3)}·W_{(3,3)}^{(2)} + B^{(2)}_{3}= Z^{(2)}_{(i,3)} 第一层到第二层的传播:X(i,3)W(3,3)(2)+B3(2)=Z(i,3)(2) 第二层到第三层的传播: Z ( i , 3 ) ( 2 ) ⋅ W ( 3 , 2 ) ( 2 ) + B 2 ( 2 ) = Z ( i , 2 ) ( 3 ) 第二层到第三层的传播:Z^{(2)}_{(i,3)}·W_{(3,2)}^{(2)} + B^{(2)}_{2}= Z^{(3)}_{(i,2)} 第二层到第三层的传播:Z(i,3)(2)W(3,2)(2)+B2(2)=Z(i,2)(3) 第一层直接到第三层的传播: ( X ( i , 3 ) ⋅ W ( 3 , 3 ) ( 2 ) + B 3 ( 2 ) ) ⋅ W ( 3 , 2 ) ( 2 ) + B 2 ( 2 ) = Z ( i , 2 ) ( 3 ) 第一层直接到第三层的传播:(X_{(i,3)}·W_{(3,3)}^{(2)} + B^{(2)}_{3})·W_{(3,2)}^{(2)} + B^{(2)}_{2}= Z^{(3)}_{(i,2)} 第一层直接到第三层的传播:(X(i,3)W(3,3)(2)+B3(2))W(3,2)(2)+B2(2)=Z(i,2)(3)

下标表示的是维度,上标表示层数这样就完成了多个样本前向传播的过程。但是大家不要忘记,前面提到, a a a z z z经过一个激活函数才获得的值,暂时我们的激活函数就使用符号 σ \sigma σ表示,那么第一层到第二层的传播可以表示为:
a ( i , 3 ) ( 2 ) = σ ( X ( i , 3 ) ⋅ W ( 3 , 3 ) ( 2 ) + B 3 ( 2 ) ) a^{(2)}_{(i,3)} = \sigma(X_{(i,3)}·W_{(3,3)}^{(2)} + B^{(2)}_{3}) a(i,3)(2)=σ(X(i,3)W(3,3)(2)+B3(2))
现在呢,为了等式的简单,下面使用 L L L代表层数,j代表输入的列数(单个样本对应神经元的数目,同时注意,第三次的输入是第二层,第二层的输入是第一层),把公式分层表示则是如下:
a ( i , q ) L = σ ( X ( i , j ) ⋅ W ( i , q ) ( L ) + B q ( L ) ) a^{L}_{(i,q)} = \sigma(X_{(i,j)}·W_{(i,q)}^{(L)} + B^{(L)}_{q}) a(i,q)L=σ(X(i,j)W(i,q)(L)+Bq(L))
下面是一个多层的神经网络
在这里插入图片描述
我们可以看到,上面的公式使用x来表示,已经不太合了,因为他仅仅代表的是输入,下面的公式我们把W的维度,以及输入X的维度忽略,并且令X= a 1 a^{1} a1,下面我们再重写公式为:
a ( i , L ) L = σ ( a ( i , L − 1 ) ⋅ W ( i , L ) ( L ) + B L ( L ) ) a^{L}_{(i,L)} = \sigma(a_{(i,L-1)}·W_{(i,L)}^{(L)} + B^{(L)}_{L}) a(i,L)L=σ(a(i,L1)W(i,L)(L)+BL(L))
可以看到,上标和下标有点重复的感觉,并且因为大小写不统一,看起来别扭,那么我们就再统一以下格式,这样书写:
a ( i , L ) = σ ( z L ) = σ ( a ( i , L − 1 ) ⋅ w ( i , L ) + b ( L ) ) a^{(i,L)} =\sigma (z^{L}) = \sigma(a^{(i,L-1)}·w^{(i,L)} + b^{(L)}) a(i,L)=σ(zL)=σ(a(i,L1)w(i,L)+b(L))这样的公式看起来就舒服了,再稍微介绍一下上面的参数, i i i表示有 i i i个样本,L代表输出层(隐层也能看成为输出层)对应的层数。大家记住上面的公式,上面的公式,是通用的公式,普遍适用神经网络的每一层。
到这里神经网络的前向传播已经讲解完成了,下小节我们终于可以正式讲解反向传播了。

最后给大家说一下,一定要明白,并且熟悉掌握上面的推导过程,无论再面试还是在实际工作中,都是非常重要的。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南才尽,年少无知!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值