2020-5-7 吴恩达-NN&DL-w3 浅层NN(3.3 计算神经网络的输出,3.4 多样本向量化)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

3.3 计算神经网络的输出 Computing a Neural Network’s Output

本节将会介绍NN的输出究竟是如何计算出来的。

以上节输入单个特征向量X(包含x1,x2,x3三个元素)的双层NN为例。
最终只需要4行代码就可以完成计算输出。
在这里插入图片描述

观察下图
在这里插入图片描述

图中的圆圈代表了我们介绍过的,逻辑回归计算的2个步骤。

  • 第一步计算出z
  • 第二步就算出激活函数a

而NN只不过重复计算这些步骤很多次。

我们先来观察NN隐藏层的一个节点。
在这里插入图片描述

上面的图在上节已经出过,我们暂时只保留隐藏层的一个节点,把其他节点隐去。
这个节点的计算和逻辑回归类似。我们把它分成2个步

  • 第一步,节点的左边计算 z 1 [ 1 ] = w 1 [ 1 ] T x + b 1 [ 1 ] z^{[1]}_1=w_1^{[1]T}x+b_1^{[1]} z1[1]=w1[1]Tx+b1[1]
  • 第二步,节点的右边计算 a 1 [ 1 ] = σ ( z 1 [ 1 ] ) a_1^{[1]}=\sigma(z_1^{[1]}) a1[1]=σ(z1[1])

符合约定
上面公式中z,w,b,a的上标表示它们所在层(layer),[1]表示隐藏层;下标表示所在层中的第几个节点(node in layer)。

然后再看NN隐藏层中的第二个节点
在这里插入图片描述

类似的,也是分成2步计算

  • 第一步,节点的左边计算 z 2 [ 1 ] = w 2 [ 1 ] T x + b 2 [ 1 ] z^{[1]}_2=w_2^{[1]T}x+b_2^{[1]} z2[1]=w2[1]Tx+b2[1]
  • 第二步,节点的右边计算 a 2 [ 1 ] = σ ( z 2 [ 1 ] ) a_2^{[1]}=\sigma(z_2^{[1]}) a2[1]=σ(z2[1])

注意:上标和第一个节点一致,也是[1],表示隐藏层;但是下标变成了2,表示是隐藏层的第二个节点。

同样的,隐藏层的第三和第四个节点(单元)的计算步骤也是一样的。
在这里插入图片描述

如果执行NN的程序,用for循环来做上面这些计算,那会很低效,所以下面就要实现向量化计算。

向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中参数w的纵向堆积起来变成一个4x3的矩阵,用符号W[1]表示。
另一个方法是,隐藏层有四个逻辑回归单元,且每一个逻辑回归单元都有相对应的参数w向量,把这四个向量堆积在一起,就会得出这4x3的矩阵。

然后把W矩阵乘以输入特征x1,x2,x3,也就是W乘以X矩阵转置。

最后再加上b。
在这里插入图片描述

最终得到了上图中的公式,它和上面4个节点的等式是完全相等的。最终计算得到了 z 1 [ 1 ] z^{[1]}_1 z1[1], z 2 [ 1 ] z^{[1]}_2 z2[1], z 3 [ 1 ] z^{[1]}_3 z3[1], z 4 [ 1 ] z^{[1]}_4 z4[1]

向量化时候有一条经验法则:当在NN一层中有不同的节点,就把它们纵向堆叠起来。所以在这里我们把隐藏层的4个节点 z 1 [ 1 ] z^{[1]}_1 z1[1], z 2 [ 1 ] z^{[1]}_2 z2[1], z 3 [ 1 ] z^{[1]}_3 z3[1], z 4 [ 1 ] z^{[1]}_4 z4[1]堆叠起来构成一个列向量 Z [ 1 ] Z^{[1]} Z[1]。类似的,还可以得到矩阵W[1]和b[1]
最终概括如下
Z [ 1 ] = W [ 1 ] X + b [ 1 ] Z^{[1]}=W^{[1]}X+b^{[1]} Z[1]=W[1]X+b[1]

同样,概括a如下
a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] = σ ( z [ 1 ] ) a^{[1]}=\left[ \begin{array}{c}a^{[1]}_{1}\\ a^{[1]}_{2}\\ a^{[1]}_{3}\\ a^{[1]}_{4} \end{array} \right] = \sigma(z^{[1]}) a[1]=a1[1]a2[1]a3[1]a4[1]=σ(z[1])

我们把本例中NN向量化公式汇总如下
在这里插入图片描述

对于神经网络的第一层(隐藏层),给予一个输入X,得到a[1],a[0]可以作为输入特征向量X的别名。通过相似的推导你会发现,下一层的表示同样可以写成类似的形式,得到a[2],即NN的预测结果 y ^ = a [ 2 ] \hat y=a^{[2]} y^=a[2]

总结:
为了计算输出或者说预测 y ^ \hat y y^,当你有一个单隐层(浅层)NN,你需要在代码中实现的就是计算上图右边的4个等式,这是一个向量化的计算过程。其中前2个等式是用来计算隐藏层的逻辑回归,而后2个等式是用来计算输出层的逻辑回归。

本节介绍了输入单个特征向量(单样本)如何通过4个公式计算得到双层NN预测结果。

3.4 多样本向量化 Vectorizing across multiple examples

本节将介绍如何将不同训练样本向量化并计算出预测结果。该过程与你在逻辑回归中所做类似。
在这里插入图片描述

上图是上一节的4个公式。对于单个训练样本,你可以用它们生成一个预测结果 a [ 2 ] = y ^ a^{[2]}=\hat y a[2]=y^

如果你有m个训练样本,你需要重复这个过程。

用第一个训练样本x(1)来计算得到 y ^ ( 1 ) \hat y^{(1)} y^(1)。这是对第一个样本的预测。
用第二个训练样本x(2)来计算得到 y ^ ( 2 ) \hat y^{(2)} y^(2)。这是对第二个样本的预测。
依次类推
用第m个训练样本x(m)来计算得到 y ^ ( m ) \hat y^{(m)} y^(m)。这是对第m个样本的预测。

用激活函数表示法,把它们写成
a [ 2 ] ( 1 ) = y ^ ( 1 ) a^{[2](1)}=\hat y^{(1)} a[2](1)=y^(1)
a [ 2 ] ( 2 ) = y ^ ( 2 ) a^{[2](2)}=\hat y^{(2)} a[2](2)=y^(2)
依次类推
a [ 2 ] ( m ) = y ^ ( m ) a^{[2](m)}=\hat y^{(m)} a[2](m)=y^(m)

符号约定
所以, a [ 2 ] ( i ) a^{[2](i)} a[2](i)圆括号中的i表示第i个样本,方括号[2]表示第二层。

在这里插入图片描述

如果用for循环遍历m个训练样本,那么方法如上图。

下面将介绍用向量化方法计算。
定义矩阵X,把训练样本横向堆到各列。这是 n x m 维的矩阵。
X = [ ⋮ ⋮ ⋮ ⋮ x ( 1 ) x ( 2 ) ⋯ x ( m ) ⋮ ⋮ ⋮ ⋮ ] X=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ x^{(1)} & x^{(2)} & \cdots & x^{(m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right] X=x(1)x(2)x(m)
定义矩阵Z[1],同样也是把所有z[1]向量以列向量横向堆叠起来。
Z [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ z [ 1 ] ( 1 ) z [ 1 ] ( 2 ) ⋯ z [ 1 ] ( m ) ⋮ ⋮ ⋮ ⋮ ] Z^{[1]}=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ z^{[1](1)} & z^{[1](2)} & \cdots & z^{[1](m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right] Z[1]=z[1](1)z[1](2)z[1](m)
定义矩阵A[1],同样也是把所有a[1]向量以列向量横向堆叠起来。
A [ 1 ] = [ ⋮ ⋮ ⋮ ⋮ a [ 1 ] ( 1 ) a [ 1 ] ( 2 ) ⋯ a [ 1 ] ( m ) ⋮ ⋮ ⋮ ⋮ ] A^{[1]}=\left[ \begin{array}{c} \vdots & \vdots & \vdots & \vdots\\ a^{[1](1)} & a^{[1](2)} & \cdots & a^{[1](m)}\\ \vdots & \vdots & \vdots & \vdots\\ \end{array} \right] A[1]=a[1](1)a[1](2)a[1](m)
类似的,还可以定义矩阵Z[2]和A[2]

现在我们可以得到神经网络多样本情况向量化的计算公式如下
在这里插入图片描述

矩阵Z[1],A[1],Z[2]和A[2]中的元素

  • 横向表示不同训练样本,从左向右扫描,可以遍历整个训练集。
  • 竖向表示NN中每一层的不同节点

例如,矩阵的最左上角元素,它是位于第一个训练样本上的第一个隐藏单元。它的下方的元素(第一列,第二行)对应于第一个训练样本上的第二个隐藏单元。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值