网易课程DeepLearning.ai 吴恩达深度学习课程笔记:第三周①:神经网络概述、神经网络的表示、计算一个神经网络的输出

神经网络概述(Neural Network Overview)

本周你将学习如何实现一个神经网络。在我们深入学习具体技术之前,我希望快速的带你预览一下本周你将会学到的东西。如果这个视频中的某些细节你没有看懂你也不用担心,我们将在后面的几个视频中深入讨论技术细节。

现在我们开始快速浏览一下如何实现神经网络。上周我们讨论了逻辑回归,我们了解了这个模型(见图3.1.1)如何与下面公式3.1建立联系。

图3.1.1 :

公式3.1:

如上所示,首先你需要输入特征x ,参数wb ,通过这些你就可以计算出z ,公式3.2:

接下来使用z 就可以计算出a 。我们将的符号换为表示输出y⟹a=σ(z) ,然后可以计算出loss function L(a,y)

神经网络看起来是如下这个样子(图3.1.2)。正如我之前已经提到过,你可以把许多sigmoid单元堆叠起来形成一个神经网络。对于图3.1.1中的节点,它包含了之前讲的计算的两个步骤:首先通过公式3.1计算出值z ,然后通过σ(z) 计算值a

图3.1.2

在这个神经网络(图3.1.2)对应的3个节点,首先计算第一层网络中的各个节点相关的数z[1] ,接着计算α[1] ,在计算下一层网络同理; 我们会使用符号[m] 表示第m 层网络中节点相关的数,这些节点的集合被称为第m 层网络。这样可以保证[m] 不会和我们之前用来表示单个的训练样本的(i) (即我们使用表示第i个训练样本)混淆; 整个计算过程,公式如下: 公式3.3:

公式3.4:

类似逻辑回归,在计算后需要使用计算,接下来你需要使用另外一个线性方程对应的参数计算z[2] , 计算a[2] ,此时a[2] 就是整个神经网络最终的输出,用 y 表示网络的输出。

公式3.5:

我知道这其中有很多细节,其中有一点非常难以理解,即在逻辑回归中,通过直接计算z 得到结果a 。而这个神经网络中,我们反复的计算za ,计算az ,最后得到了最终的输出loss function

你应该记得逻辑回归中,有一些从后向前的计算用来计算导数dadz 。同样,在神经网络中我们也有从后向前的计算,看起来就像这样,最后会计算da[2]  、dz[2] ,计算出来之后,然后计算计算dW[2]db[2]  等,按公式3.4、3.5箭头表示的那样,从右到左反向计算。

现在你大概了解了一下什么是神经网络,基于逻辑回归重复使用了两次该模型得到上述例子的神经网络。我清楚这里面多了很多新符号和细节,如果没有理解也不用担心,在接下来的视频中我们会仔细讨论具体细节。

那么,下一个视频讲述神经网络的表示。

 神经网络的表示(Neural Network Representation)

先回顾一下我在上一个视频画几张神经网络的图片,在这次课中我们将讨论这些图片的具体含义,也就是我们画的这些神经网络到底代表什么。

我们首先关注一个例子,本例中的神经网络只包含一个隐藏层(图3.2.1)。这是一张神经网络的图片,让我们给此图的不同部分取一些名字。

图3.2.1

我们有输入特征x1x2x3 ,它们被竖直地堆叠起来,这叫做神经网络的输入层。它包含了神经网络的输入;然后这里有另外一层我们称之为隐藏层(图3.2.1的四个结点)。待会儿我会回过头来讲解术语"隐藏"的意义;在本例中最后一层只由一个结点构成,而这个只有一个结点的层被称为输出层,它负责产生预测值。解释隐藏层的含义:在一个神经网络中,当你使用监督学习训练它的时候,训练集包含了输入x 也包含了目标输出y ,所以术语隐藏层的含义是在训练集中,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在训练集中应具有的值。你能看见输入的值,你也能看见输出的值,但是隐藏层中的东西,在训练集中你是无法看到的。所以这也解释了词语隐藏层,只是表示你无法在训练集中看到他们。

现在我们再引入几个符号,就像我们之前用向量x 表示输入特征。这里有个可代替的记号a[0] 可以用来表示输入特征。a 表示激活的意思,它意味着网络中不同层的值会传递到它们后面的层中,输入层将x 传递给隐藏层,所以我们将输入层的激活值称为a[0] ;下一层即隐藏层也同样会产生一些激活值,那么我将其记作a[1] ,所以具体地,这里的第一个单元或结点我们将其表示为a1[1] ,第二个结点的值我们记为a2[1] 以此类推。所以这里的是一个四维的向量如果写成Python代码,那么它是一个规模为4x1的矩阵或一个大小为4的列向量,如下公式,它是四维的,因为在本例中,我们有四个结点或者单元,或者称为四个隐藏层单元; 公式3.7

最后输出层将产生某个数值a ,它只是一个单独的实数,所以的y 值将取为a[2] 。这与逻辑回归很相似,在逻辑回归中,我们有y 直接等于a ,在逻辑回归中我们只有一个输出层,所以我们没有用带方括号的上标。但是在神经网络中,我们将使用这种带上标的形式来明确地指出这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络(图3.2.2)。原因是当我们计算网络的层数时,输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。

图3.2.2

最后,我们要看到的隐藏层以及最后的输出层是带有参数的,这里的隐藏层将拥有两个参数Wb ,我将给它们加上上标[1] (W[1] ,b[1] ),表示这些参数是和第一层这个隐藏层有关系的。之后在这个例子中我们会看到W 是一个4x3的矩阵,而b 是一个4x1的向量,第一个数字4源自于我们有四个结点或隐藏层单元,然后数字3源自于这里有三个输入特征,我们之后会更加详细地讨论这些矩阵的维数,到那时你可能就更加清楚了。相似的输出层也有一些与之关联的参数W[2] 以及b[2] 。从维数上来看,它们的规模分别是1x4以及1x1。1x4是因为隐藏层有四个隐藏层单元而输出层只有一个单元,之后我们会对这些矩阵和向量的维度做出更加深入的解释,所以现在你已经知道一个两层的神经网络什么样的了,即它是一个只有一个隐藏层的神经网络。

计算一个神经网络的输出(Computing a Neural Network's output)

在上一节的视频中,我们介绍只有一个隐藏层的神经网络的结构与符号表示。在这节的视频中让我们了解神经网络的输出究竟是如何计算出来的。

首先,回顾下只有一个隐藏层的简单两层神经网络结构

 

图3.3.1

其中,x 表示输入特征,a 表示每个神经元的输出,W 表示特征的权重,上标表示神经网络的层数(隐藏层为1),下标表示该层的第几个神经元。这是神经网络的符号惯例,下同。

神经网络的计算

关于神经网络是怎么计算的,从我们之前提及的逻辑回归开始,如下图所示。用圆圈表示神经网络的计算单元,逻辑回归的计算有两个步骤,首先你按步骤计算出z ,然后在第二步中你以sigmoid函数为激活函数计算z (得出a ),一个神经网络只是这样子做了好多次重复计算。

图3.3.2

回到两层的神经网络,我们从隐藏层的第一个神经元开始计算,如上图第一个最上面的箭头所指。从上图可以看出,输入与逻辑回归相似,这个神经元的计算与逻辑回归一样分为两步,小圆圈代表了计算的两个步骤。

隐藏层的第二个以及后面两个神经元的计算过程一样,只是注意符号表示不同,最终分别得到a2[1]a3[1]a4[1] ,详细结果见下:

向量化计算 如果你执行神经网络的程序,用for循环来做这些看起来真的很低效。所以接下来我们要做的就是把这四个等式向量化。向量化的过程是将神经网络中的一层神经元参数纵向堆积起来,例如隐藏层中的w 纵向堆积起来变成一个(4,3) 的矩阵,用符号W[1] 表示。另一个看待这个的方法是我们有四个逻辑回归单元,且每一个逻辑回归单元都有相对应的参数——向量w ,把这四个向量堆积在一起,你会得出这4×3的矩阵。 因此, 公式3.8:

 

公式3.9:

详细过程见下: 公式3.10:

公式3.11:

对于神经网络的第一层,给予一个输入x ,得到a[1]x 可以表示为a[0] 。通过相似的衍生你会发现,后一层的表示同样可以写成类似的形式,得到a[2]y=a[2] ,具体过程见公式3.8、3.9。

 

图3.3.3

如上图左半部分所示为神经网络,把网络左边部分盖住先忽略,那么最后的输出单元就相当于一个逻辑回归的计算单元。当你有一个包含一层隐藏层的神经网络,你需要去实现以计算得到输出的是右边的四个等式,并且可以看成是一个向量化的计算过程,计算出隐藏层的四个逻辑回归单元和整个隐藏层的输出结果,如果编程实现需要的也只是这四行代码。

总结:通过本视频,你能够根据给出的一个单独的输入特征向量,运用四行代码计算出一个简单神经网络的输出。接下来你将了解的是如何一次能够计算出不止一个样本的神经网络输出,而是能一次性计算整个训练集的输出。

猜你喜欢

转载自blog.csdn.net/qq_36552489/article/details/93379031