关键词:
第二周:神经网络的编程基础(Basics of Neural Network programming)
文章目录
- 第二周:神经网络的编程基础(Basics of Neural Network programming)
- 2.1 二分类(Binary Classification)
- 2.2 逻辑回归(Logistic Regression)
- 2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
- 2.4 梯度下降法(Gradient Descent)
- 2.5 导数(Derivatives)
- 2.6 更多的导数例子(More Derivative Examples)
- 2.7 计算图(Computation Graph)
- 2.8 使用计算图求导数(Derivatives with a Computation Graph)
- 2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
- 2.10 m 个样本的梯度下降(Gradient Descent on m Examples)
- 2.11 向量化(Vectorization)
- 2.12 向量化的更多例子(More Examples of Vectorization)
- 2.13 向量化逻辑回归(Vectorizing Logistic Regression)
- 2.14 向量化 logistic 回归的梯度输出(Vectorizing Logistic Regressions Gradient)
- 2.15 Python 中的广播(Broadcasting in Python)
- 2.16 关于 python _ numpy 向量的说明(A note on python or numpy vectors)参考视频:
- 2.17 Jupyter/iPython Notebooks快速入门(Quick tour of Jupyter/iPython Notebooks)
- 2.18 (选修)logistic 损失函数的解释(Explanation of logistic regression cost function)
2.1 二分类(Binary Classification)
这周我们将学习神经网络的基础知识,其中需要注意的是,当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含个样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集,所以在这周的课程中你将学会如何处理训练集。
另外在神经网络的计算中,通常先有一个叫做前向暂停(forward pause)或叫做前向传播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播**(backward propagation**)的步骤。所以这周我也会向你介绍为什么神经网络的训练过程可以分为前向传播和反向传播两个独立的部分。
在课程中我将使用逻辑回归(logistic regression)来传达这些想法,以使大家能够更加容易地理解这些概念。即使你之前了解过逻辑回归,我认为这里还是有些新的、有趣的东西等着你去发现和了解,所以现在开始进入正题。
逻辑回归是一个用于二分类(binary classification)的算法。首先我们从一个问题开始说起,这里有一个二分类问题的例子,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用字母 来 表示输出的结果标签,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L1dLNc8n-1611150677505)(…/images/269118812ea785aee00f6ffc11b5c882.png)]
我们来看看一张图片在计算机中是如何表示的,为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。为了便于表示,这里我画了三个很小的矩阵,注意它们的规模为5x4 而不是64x64,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiFQ7tgW-1611150677507)(…/images/1e664a86fa2014d5212bcb88f1c419cf.png)]
为了把这些像素值放到一个特征向量中,我们需要把这些像素值提取出来,然后放入一个特征向量。为了把这些像素值转换为特征向量 ,我们需要像下面这样定义一个特征向量 来表示这张图片,我们把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等等,直到得到一个特征向量,把图片中所有的红、绿、蓝像素值都列出来。如果图片的大小为64x64像素,那么向量 的总维度,将是64乘以64乘以3,这是三个像素矩阵中像素的总量。在这个例子中结果为12,288。现在我们用,来表示输入特征向量的维度,有时候为了简洁,我会直接用小写的来表示输入特征向量的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量作为输入,然后预测输出结果为1还是0,也就是预测图片中是否有猫:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5QlgX3Ly-1611150677509)(…/images/e173fd42de5f1953deb617623d5087e8.png)]
接下来我们说明一些在余下课程中,需要用到的一些符号。
符号定义 :
:表示一个维数据,为输入数据,维度为;
:表示输出结果,取值为;
:表示第组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;
:表示所有的训练数据集的输入值,放在一个 的矩阵中,其中表示样本数目;
:对应表示所有训练数据集的输出值,维度为。
用一对来表示一个单独的样本,代表维的特征向量, 表示标签(输出结果)只能为0或1。
而训练集将由个训练样本组成,其中表示第一个样本的输入和输出,表示第二个样本的输入和输出,直到最后一个样本,然后所有的这些一起表示整个训练集。有时候为了强调这是训练样本的个数,会写作,当涉及到测试集的时候,我们会使用来表示测试集的样本数,所以这是测试集的样本数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99gnIs90-1611150677511)(…/images/12f602ed40ba90540112ae0fee77fadf.png)]
最后为了能把训练集表示得更紧凑一点,我们会定义一个矩阵用大写的表示,它由输入向量、等组成,如下图放在矩阵的列中,所以现在我们把作为第一列放在矩阵中,作为第二列,放到第列,然后我们就得到了训练集矩阵。所以这个矩阵有列,是训练集的样本数量,然后这个矩阵的高度记为,注意有时候可能因为其他某些原因,矩阵会由训练样本按照行堆叠起来而不是列,如下图所示:的转置直到的转置,但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wpcVSjb-1611150677512)(…/images/1661e545ce5fd2c27b15444d5b69ec78.png)]
现在来简单温习一下:是一个规模为乘以的矩阵,当你用Python实现的时候,你会看到X.shape
,这是一条Python命令,用于显示矩阵的规模,即X.shape
等于,是一个规模为乘以的矩阵。所以综上所述,这就是如何将训练样本(输入向量的集合)表示为一个矩阵。
那么输出标签呢?同样的道理,为了能更加容易地实现一个神经网络,将标签放在列中将会使得后续计算非常方便,所以我们定义大写的等于,所以在这里是一个规模为1乘以的矩阵,同样地使用Python将表示为Y.shape
等于,表示这是一个规模为1乘以的矩阵。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXLLCneD-1611150677513)(…/images/55345ba411053da11ff843bbb3406369.png)]
当你在后面的课程中实现神经网络的时候,你会发现,一个好的符号约定能够将不同训练样本的数据很好地组织起来。而我所说的数据不仅包括 或者 还包括之后你会看到的其他的量。将不同的训练样本的数据提取出来,然后就像刚刚我们对 或者 所做的那样,将他们堆叠在矩阵的列中,形成我们之后会在逻辑回归和神经网络上要用到的符号表示。如果有时候你忘了这些符号的意思,比如什么是 ,或者什么是 ,或者忘了其他一些东西,我们也会在课程的网站上放上符号说明,然后你可以快速地查阅每个具体的符号代表什么意思,好了,我们接着到下一个视频,在下个视频中,我们将以逻辑回归作为开始。
备注:附录里也写了符号说明。
2.2 逻辑回归(Logistic Regression)
在这个视频中,我们会重温逻辑回归学习算法,该算法适用于二分类问题,本节将主要介绍逻辑回归的Hypothesis Function(假设函数)。
对于二元分类问题来讲,给定一个输入特征向量,它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,你想要一个算法能够输出预测,你只能称之为,也就是你对实际值 的估计。更正式地来说,你想让 表示 等于1的一种可能性或者是机会,前提条件是给定了输入特征。换句话来说,如果是我们在上个视频看到的图片,你想让 来告诉你这是一只猫的图片的机率有多大。在之前的视频中所说的,是一个维的向量(相当于有个特征的特征向量)。我们用来表示逻辑回归的参数,这也是一个维向量(因为实际上是特征权重,维度与特征向量相同),参数里面还有,这是一个实数(表示偏差)。所以给出输入以及参数和之后,我们怎样产生输出预测值,一件你可以尝试却不可行的事是让。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hhVN06u2-1611150677513)(…/images/dfb5731c30b81eced917450d31e860a3.png)]
这时候我们得到的是一个关于输入的线性函数,实际上这是你在做线性回归时所用到的,但是这对于二元分类问题来讲不是一个非常好的算法,因为你想让表示实际值等于1的机率的话, 应该在0到1之间。这是一个需要解决的问题,因为可能比1要大得多,或者甚至为一个负值。对于你想要的在0和1之间的概率来说它是没有意义的,因此在逻辑回归中,我们的输出应该是等于由上面得到的线性函数式子作为自变量的sigmoid函数中,公式如上图最下面所示,将线性函数转换为非线性函数。
下图是sigmoid函数的图像,如果我把水平轴作为轴,那么关于的sigmoid函数是这样的,它是平滑地从0走向1,让我在这里标记纵轴,这是0,曲线与纵轴相交的截距是0.5,这就是关于的sigmoid函数的图像。我们通常都使用来表示的值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjijTgCs-1611150677514)(…/images/7e304debcca5945a3443d56bcbdd2964.png)]
关于sigmoid函数的公式是这样的,,在这里是一个实数,这里要说明一些要注意的事情,如果非常大那么将会接近于0,关于的sigmoid函数将会近似等于1除以1加上某个非常接近于0的项,因为 的指数如果是个绝对值很大的负数的话,这项将会接近于0,所以如果很大的话那么关于的sigmoid函数会非常接近1。相反地,如果非常小或者说是一个绝对值很大的负数,那么关于这项会变成一个很大的数,你可以认为这是1除以1加上一个非常非常大的数,所以这个就接近于0。实际上你看到当变成一个绝对值很大的负数,关于的sigmoid函数就会非常接近于0,因此当你实现逻辑回归时,你的工作就是去让机器学习参数以及这样才使得成为对这一情况的概率的一个很好的估计。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZv778SA-1611150677514)(…/images/f5049dc7ce815b495fbbdf71f23fc66c.png)]
在继续进行下一步之前,介绍一种符号惯例,可以让参数和参数分开。在符号上要注意的一点是当我们对神经网络进行编程时经常会让参数和参数分开,在这里参数对应的是一种偏置。在之前的机器学习课程里,你可能已经见过处理这个问题时的其他符号表示。比如在某些例子里,你定义一个额外的特征称之为,并且使它等于1,那么现在就是一个加1维的变量,然后你定义的sigmoid函数。在这个备选的符号惯例里,你有一个参数向量,这样就充当了,这是一个实数,而剩下的 直到充当了,结果就是当你实现你的神经网络时,有一个比较简单的方法是保持和分开。但是在这节课里我们不会使用任何这类符号惯例,所以不用去担心。
现在你已经知道逻辑回归模型是什么样子了,下一步要做的是训练参数和参数,你需要定义一个代价函数,让我们在下节课里对其进行解释。
2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
在上个视频中,我们讲了逻辑回归模型,这个视频里,我们讲逻辑回归的代价函数(也翻译作成本函数)。
为什么需要代价函数:
为了训练逻辑回归模型的参数参数和参数我们,需要一个代价函数,通过训练代价函数来得到参数和参数。先看一下逻辑回归的输出函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJxhuqFh-1611150677515)(…/images/4c9a27b071ce9162dbbcdad3393061d2.png)]
为了让模型通过学习调整参数,你需要给予一个样本的训练集,这会让你在训练集上找到参数和参数,,来得到你的输出。
对训练集的预测值,我们将它写成,我们更希望它会接近于训练集中的值,为了对上面的公式更详细的介绍,我们需要说明上面的定义是对一个训练样本来说的,这种形式也使用于每个训练样本,我们使用这些带有圆括号的上标来区分索引和样本,训练样本所对应的预测值是,是用训练样本的然后通过sigmoid函数来得到,也可以把定义为,我们将使用这个符号注解,上标来指明数据表示或者或者或者其他数据的第个训练样本,这就是上标的含义。
损失函数:
损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function:第二周:神经网络的编程基础----------2编程作业常见问题与答案(programmingassignmentfaq)
Pleasenotethatwhenyouareworkingontheprogrammingexerciseyouwillfindcommentsthatsay"#GRADEDFUNCTION:functionName".Donoteditthatcomment.Thefunctioninthatcodeblockwillbegraded.1)WhatisaJupyternotebook?AJu 查看详情 20165214第一次结队编程项目——四则运算第二周需求分析本周的结队编程想要实现一个四则运算系统,它可以自动生成n个计算题(本周不包括分数),其中n由我们输入。每输出一道题目,运行程序的人需要输入相应的答案,直... 查看详情 第14题考虑以下两个随机数组a和b:a=np.random.randn(2,3)#a.shape=(2,3)b=np.random.randn(2,1)#b.shape=(2,1)c=a+bc的维度是什么?答:b(列向量)复制3次,以便它可以和a的每一列相加,所以:c.shape=(2,3)第15题考虑以下两个随机数组a和b:a=np.random.... 查看详情 Java的第二周作业的思考总结,涉及的只是有static代码块的输出次序,面向对象的编程实战,字符串的拼接等java基本的关键的内容。是这样的,Java这门课没有给线上实验评测平台(我还专门上平台上看了看),第一周作业出得挺... 查看详情 一、码云链接二、需求分析实现一个命令行程序,要求:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率三、设计思路(同时输出UML类图)这周的总... 查看详情 目录基本组成结构一、卷积Convolutional1传统的神经网络VS卷积神经网络2概念3卷积层的计算卷积核如何工作?二、池化三、全连接四、小结卷积神经网络的典型结构一、AlexNet二、ZFNet三、VGG四、GoogleNet五、ResNet编程一、MNIST数... 查看详情 网络分为局域网(LAN)、城域网(MAN)、广域网(WAN)。我们接触更多是局域网,其分为接入层(星型网)、汇聚层(树型网)、核心层(分布式网络)。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层... 查看详情 PSP:C(分类)C(内容)S(开始时间)ST(结束时间)I(打断时间)△(净工作时间)(分钟)读书构建之法18:0019:25085读书构建之法9:3011:2010100项目实践编程13:0016:3015195读书构建之法18:0019:20080视频学习C语言基础20:3022:3010110读... 查看详情 20165104孟凡斌-结对编程练习(第二周)很不幸,这次的结对练习作业的难度,依然远远远超出我,我的搭档两人得能力范围。结对学习,变成了结对向同学请教学习。两个人一起问,确实效率高一点,每周保持这样的学习状态,... 查看详情 到今天接触结对编程差不多两周了,对于结对编程有了更加深刻地理解,通过结对编程,我们可以及时的发现并解决后面可能会出现的问题,并且还能提升我们与别人进行交流的能力,与人沟通对我们程序员来... 查看详情 今天花了2个多小时不断了改进,终于将一个日历的小程序做出来了,主要的内容还是利用循环和判断语句来完成的,视频和书的进程不一样,越看到书后面的内容越觉得自己现在编写的东西很麻烦,可能后面可以利用一些简单... 查看详情 本周学习了java的基础知识并完成了一些相关的,代码示例.1300个人围成一个圈,从某个指定的人开始报数,数到3的人退出继续开始数到3,求最后剩下的人的位置。packagej0413;publicclassMyTest4{publicstaticvoidmain(String[]args){ /* *300... 查看详情 数据的传输方式的分类 按照数据传输的顺序分 串行传输 并行传输 按照数据传输的同步方式分 同步传输 异步传输 按照数据传输的流向和时间顺序分 单工 半双工 全双工 &nb... 查看详情 程序实现的功能是统计文件中出现的词和每个词的频数。这里的词的规定和平时语言上的规定不太一样,但是更标准化,规定了长度、组成字符和分隔符,在实现中也从这几个方面来寻找词。/*判断字符是否是字母*/boolisAlphabetic(... 查看详情 一题目要求实现一个命令行程序,要求:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率。二需求分析1.用随机数随机生成数字,能够随机生成符号... 查看详情 本周作业是结对编写一个词频统计的程序,我们组是我(欧阳思琪)和贺晋飞同学共同完成这项任务。在仔细阅读了要求之后,我们... 查看详情 2018-2019-120175206《信息安全系统设计基础》第二周学习总结信息的进制与转换字节:计算机中最小的可寻址的内存单元虚拟内存:机器级程序将内存视为一个非常大的字节数组进制表示十进制:D=dndn-1...d1d0.d-1...d-m(m,n为正整数)二... 查看详情 2018-2019-120165327《信息安全系统设计基础》第二周学习总结一、进制及其转换如何获取二进制数的某几位:可以利用数字的算数右移,然后利用0XFF这样的数字做掩码运算,可以获取到一个数字的符号位。计算机的移位运算有一种... 查看详情 20165214结队编程项目-四则运算(第二周)(代码片段)
第二周:神经网络基础(代码片段)
程序语言与编程实践5-;java实操2|第二周作业及思路讲解|基础知识强化考察(代码片段)
20165202结对编程项目-四则运算第二周(代码片段)
第二周学习:卷积神经网络(代码片段)
第二周内容
第二周psp
20165104孟凡斌-结对编程练习(第二周)
第二周结对编程体会
学习编程第二周
第二周java基础学习内容
第二周ip通信基础回顾
第二周结对编程作业:词频统计
第二周结对编程-20165222
第二周结对编程作业——词频统计
2018-2019-120175206《信息安全系统设计基础》第二周学习总结
2018-2019-120165327《信息安全系统设计基础》第二周学习总结