吴恩达深度学习deeplearning.ai学习笔记(一)3.1 3.2 3.3

3.1 神经网络概览

一个典型的logistic回归如上图所,但这是计算图,并不是神经网络图;

为了简化,假设x是三维的即x=\begin{bmatrix} x_1\\ x_2\\ x_3 \end{bmatrix},并将logistic回归画成神经网络图:

输入层由输入特征组成,也叫第0层,一般不计入神经网络层数,所以单个logistic回归就是单层神经网络,一般将输入层记为:

x=a^{[0]}

圆形叫做节点,一个节点包含了两种运算:

第一层运算:z^{[1]}=w^{[1]}x+b^{[1]}

第二层运算:a^{[1]}=\sigma(z^{[1]})

并且这个节点的输入是a^{[0]},输出是a^{[1]}

方括号[]和它里面的数字表示了这是哪一层的参数;

不改变节点对应的计算,让它变得复杂一些:

第0层仍然是输入层;

第一层有三个节点,把这一层叫做隐藏层,如果层数更多,那么在输入层和输出层之间的所有层都叫隐藏层;第一层的三个节点都叫隐藏单元,每个节点都会带参数w,b,并且特别的,会将第一层所有参数组合起来,用两个矩阵表示,分别是w^{[1]},b^{[1]};并且第一层的计算可以统一表示为:

z^{[1]}=w^{[1]}x+b^{[1]}

a^{[1]}=\sigma(z^{[1]})

第二层叫做输出层,所带参数也可用两个矩阵w^{[2]},b^{[2]}表示,并且输出层只有一个节点,第二层计入层数的计算,但不是隐藏层;它进行的计算可以写为:

z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}

a^{[2]}=\sigma(z^{[2]})

最终将a^{[2]}=\hat{y}输出;我们只需要明白每一层有两个参数,这两个参数会经由训练不断学习调整,前一层的输出就是后一层的输入,就够了;至于w^{[1]},b^{[1]},w^{[2]},b^{[2]}的细节,在后面会详细讨论;

下面是这个单隐层神经网络(也叫双层神经网络)的计算图:

不仅仅可以求在图上标示的导数,还可以求dw^{[1]},db^{[1]},da^{[1]},dz^{[1]}

3.2 神经网络表示

为什么叫隐藏层?因为这些层的隐藏节点的参数我们并不知道,学习训练过程中它可能一直在不断调整,参数众多,我们没必要也不太可能完全知道每一个节点的参数;

在这个例子中,a^{[1]}是什么?

a^{[1]}=\begin{bmatrix} a_1^{[1]}\\ a_2^{[1]}\\ a_3^{[1]}\\ a_4^{[1]} \end{bmatrix}

a^{[1]}是一个4\times 1的矩阵,也可以说是一个4维列向量;

a_1^{[1]}则表示第一层从上往下数隐藏层第一个单元的激活函数值,a_1^{[1]}=\sigma(z_1^{[1]})

z_1^{[1]}是什么?

z_1^{[1]}=w_1^{[1]T}x+b_1^{[1]}

这里w_1^{[1]T}表示w_1^{[1]}的转置矩阵,而w_1^{[1]}表示的就是隐藏层第一个节点所带的参数,实际上,w_1^{[1]}是一个3维列向量,我们可以将它表示为:

w_1^{[1]}=\begin{bmatrix} w_{11}^{[1]}\\ w_{12}^{[1]}\\ w_{13}^{[1]} \end{bmatrix}

w_2^{[1]},w_3^{[1]},w_4^{[1]}也是如法炮制的:

w_2^{[1]}=\begin{bmatrix} w_{21}^{[1]}\\ w_{22}^{[1]}\\ w_{23}^{[1]} \end{bmatrix},w_3^{[1]}=\begin{bmatrix} w_{31}^{[1]}\\ w_{32}^{[1]}\\ w_{33}^{[1]} \end{bmatrix},w_4^{[1]}=\begin{bmatrix} w_{41}^{[1]}\\ w_{42}^{[1]}\\ w_{43}^{[1]} \end{bmatrix}

b_1^{[1]}表示一个数,因此,计算后z_1^{[1]},a^{[1]}也是实数;

a^{[2]}是怎样产生的?

a_1^{[1]},a_2^{[1]},a_3^{[1]},a_4^{[1]}这四个第一层的输出当作第二层的输入,进行计算:

z^{[2]}=w^{[2]T}a^{[1]}+b^{[2]}

a^{[2]}=\sigma(z^{[2]})

当然这里由于第二层只有一个节点所以进行了一定的简化,并非说输出层就只能有一个节点,剧透一下比如softmax单元的输出层就会有多个节点,所以,如果严格书写最好还是要带右下角标,以表示它属于这一层从上往下数第几个单元:

z_1^{[2]}=w_1^{[2]T}a^{[1]}+b_1^{[2]}

a_1^{[2]}=\sigma(z_1^{[2]})

这里w_1^{[2]T}w_1^{[2]}的转置矩阵,而w_1^{[2]}是指第二层从上往下数第一个节点所带的参数,是一个4维列向量,写为:

w_1^{[2]}=\begin{bmatrix} w_{11}^{[2]}\\ w_{12}^{[2]}\\ w_{13}^{[2]}\\ w_{14}^{[2]}\end{bmatrix}

b_1^{[2]}也是一个数;

w^{[1]}w^{[2]}是什么?

w^{[1]}=\begin{bmatrix} w_1^{[1]T}\\ w_2^{[1]T}\\ w_3^{[1]T}\\ w_4^{[1]T} \end{bmatrix},w^{[2]}=w_1^{[2]T}

显然,w^{[1]}是一个4\times 3矩阵,w^{[2]}是一个1\times 4矩阵;

如果上述没看懂,根本没关系,因为后面优化调整时并不是针对某一层的某个或某些节点去调整参数的,而是调整可以代表整一层的参数,比如第一层就是w^{[1]},b^{[1]},第二层就是w^{[2]},b^{[2]}……

事实上,w^{[1]},w^{[2]}这些矩阵的维度和当前层以及上一层的隐藏单元数、输出单元数、输入特征x的维度等都有着密切的联系,后面会给出一般通式,检查它们的维度往往能够debug。

3.3 计算神经网络的输出

对于a_i^{[l]},右上角方括号的角标代表它属于第l(layer),右下角的角标代表它是层中从上往下数第几个节点的(node);

前面的a_2^{[1]},a_3^{[1]},a_4^{[1]}是怎么计算的?

z_2^{[1]}=w_2^{[1]T}x+b_2^{[1]},a_2^{[1]}=\sigma(z_2^{[1]})

z_3^{[1]}=w_3^{[1]T}x+b_3^{[1]},a_3^{[1]}=\sigma(z_3^{[1]})

z_4^{[1]}=w_4^{[1]T}x+b_4^{[1]},a_4^{[1]}=\sigma(z_4^{[1]})

b^{[1]}b^{[2]}是什么?

b^{[1]}=\begin{bmatrix} b_1^{[1]}\\ b_2^{[1]}\\ b_3^{[1]}\\ b_4^{[1]} \end{bmatrix},b^{[2]}=b_1^{[2]T}

b^{[1]}是一个4\times 1矩阵,b^{[2]}是一个数;

为什么要写成w^{[1]},w^{[2]}这样的形式?怎么将第一隐层当中的计算简化?

第一隐层中要计算z_1^{[1]},z_2^{[1]},z_3^{[1]},z_4^{[1]}的四个等式(上面已经给出),这四个等式能够通过w^{[1]},b^{[1]}来用一个式子代替,这才是我们一直追求简洁地用w^{[1]},b^{[1]}这样的表达的原因,说到底还是向量化;这个式子就是:

z^{[1]}=w^{[1]}x+b^{[1]}

因为:

z^{[1]}=\begin{bmatrix} z_1^{[1]}\\ z_2^{[1]}\\ z_3^{[1]}\\ z_4^{[1]} \end{bmatrix}=\begin{bmatrix} 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_4^{[1]T}x+b_4^{[1]} \end{bmatrix} =\begin{bmatrix} w_1^{[1]T}x\\ w_2^{[1]T}x\\ w_3^{[1]T}x\\ w_4^{[1]T}x \end{bmatrix}+\begin{bmatrix} b_1^{[1]}\\ b_2^{[1]}\\ b_3^{[1]}\\ b_4^{[1]} \end{bmatrix} 

       =\begin{bmatrix} w_1^{[1]T}\\ w_2^{[1]T}\\ w_3^{[1]T}\\ w_4^{[1]T} \end{bmatrix}x+\begin{bmatrix} b_1^{[1]}\\ b_2^{[1]}\\ b_3^{[1]}\\ b_4^{[1]} \end{bmatrix}=w^{[1]}x+b^{[1]}

第一隐层还要计算a_1^{[1]},a_2^{[1]},a_3^{[1]},a_4^{[1]}四个等式,也向量化:

a^{[1]}=\sigma(z^{[1]})

输出层做什么计算?

只有一个节点挺简单,做的计算也可按第一层的两个公式如法炮制:

z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}

a^{[2]}=\sigma(z^{[2]})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值