|
|
卖萌的热水瓶 · 雷军:小米IoT联网设备量排世界第一-中国财富网· 6 月前 · |
|
|
大鼻子的山寨机 · 鳥哥私房菜 - 第十章、認識與學習BASH· 6 月前 · |
|
|
微醺的墨镜 · C# PNG Jpeg图片压缩 - ...· 1 年前 · |
|
|
腼腆的眼镜 · 切普特盖打破尘封15年一万米世界纪录,今年已 ...· 1 年前 · |
第二周:神经网络的编程基础(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 Regression's 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)
:表示第 组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;
:表示所有的训练数据集的输入值,放在一个 的矩阵中,其中 表示样本数目;
在这个视频中,我们会重温逻辑回归学习算法,该算法适用于二分类问题,本节将主要介绍逻辑回归的 Hypothesis Function (假设函数)。
在上个视频中,我们讲了逻辑回归模型,这个视频里,我们讲逻辑回归的代价函数(也翻译作成本函数)。
为了训练逻辑回归模型的参数参数 和参数 我们,需要一个代价函数,通过训练代价函数来得到参数 和参数 。先看一下逻辑回归的输出函数:
为了让模型通过学习调整参数,你需要给予一个 样本的训练集,这会让你在训练集上找到参数 和参数 ,,来得到你的输出。
损失函数又叫做误差函数,用来衡量算法的运行情况, Loss function: .
当 时损失函数 ,如果想要损失函数 尽可能得小,那么 就要尽可能大,因为 sigmoid 函数取值 ,所以 会无限接近于1。
当 时损失函数 ,如果想要损失函数 尽可能得小,那么 就要尽可能小,因为 sigmoid 函数取值 ,所以 会无限接近于0。
在你测试集上,通过最小化代价函数(成本函数) 来训练的参数 和 ,
如图,在第二行给出和之前一样的逻辑回归算法的代价函数(成本函数)
如图,代价函数(成本函数) 是一个凸函数( convex function ),像一个大碗一样。
如图,这就与刚才的图有些相反,因为它是非凸的并且有很多不同的局部最小值。由于逻辑回归的代价函数(成本函数) 特性,我们必须定义代价函数(成本函数) 为凸函数。 初始化 和 ,
可以用如图那个小红点来初始化参数 和 ,也可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该达到同一点或大致相同的点。
我们朝最陡的下坡方向走一步,如图,走到了如图中第二个小红点处。
我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如图,经过两次迭代走到第三个小红点处。
通过以上的三个步骤我们可以找到全局最优解,也就是代价函数(成本函数) 这个凸函数的最小值点。
假定代价函数(成本函数) 只有一个参数 ,即用一维曲线代替多维曲线,这样可以更好画出图像。
表示学习率( learning rate ),用来控制步长( step ),即向下走一步的长度 就是函数 对 求导( derivative ),在代码中我们会使用 表示这个结果
对于导数更加形象化的理解就是斜率( slope ),如图该点的导数就是这个点相切于 的小三角形的高除宽。假设我们以如图点为初始化点,该点处的斜率的符号是正的,即 ,所以接下来会向左走一步。
整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。
假设我们以如图点为初始化点,该点处的斜率的符号是负的,即 ,所以接下来会向右走一步。
整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。
我希望带给你一种感觉:什么是斜率?什么是导函数?对于一条直线,在例子中函数的斜率,在任何地方都是3。在下一个视频让我们看一个更复杂的例子,这个例子中函数在不同点的斜率是可变的。
在这个视频中我将给出一个更加复杂的例子,在这个例子中,函数在不同点处的斜率是不一样的,先来举个例子:
现在有个小细节需要注意,导数增大的值,不是刚好等于导数公式算出来的值,而只是根据导数算出来的一个估计值。
第二点,如果你想知道一个函数的导数,你可参考你的微积分课本或者维基百科,然后你应该就能找到这些函数的导数公式。
最后我希望,你能通过我生动的讲解,掌握这些有关导数和斜率的知识,下一课我们将讲解计算图,以及如何用它来求更加复杂的函数的导数。
在上一个视频中,我们看了一个例子使用流程计算图来计算函数J。现在我们清理一下流程图的描述,看看你如何利用它计算出函数 的导数。
假设你要计算 ,那要怎么算呢?好,比如说,我们要把这个 值拿过来,改变一下,那么 的值会怎么变呢?
在反向传播算法中的术语,我们看到,如果你想计算最后输出变量的导数,使用你最关心的变量对 的导数,那么我们就做完了一步反向传播,在这个流程图中是一个反向步骤。
我们来看另一个例子, 是多少呢?换句话说,如果我们提高 的数值,对 的数值有什么影响?
要解释这个计算过程,其中一种方式是:如果你改变了 ,那么也会改变 ,通过改变 ,也会改变 ,所以 值的净变化量,当你提升这个值(0.001),当你把 值提高一点点,这就是 的变化量(0.003)。
我们从这个计算中看到,如果你让 增加0.001, 也会变化相同的大小,所以 。事实上,如果你代入进去,我们之前算过 , ,所以这个乘积3×1,实际上就给出了正确答案, 。
这张小图表示了如何计算, 就是 对变量 的导数,它可以帮助你计算 ,所以这是另一步反向传播计算。
好,所以在程序里是 表示导数,你关心的最终变量 的导数,有时最后是 ,对代码中各种中间量的导数,所以代码里这个东西,你用 表示这个值,所以 ,你的代码表示就是 。
好,所以我们通过这个流程图完成部分的后向传播算法。我们在下一张幻灯片看看这个例子剩下的部分。
我们清理出一张新的流程图,我们回顾一下,到目前为止,我们一直在往回传播,并计算 ,再次, 是代码里的变量名,其真正的定义是 。我发现 ,再次, 是代码里的变量名,其实代表 的值。
所以我们还有一步反向传播,我们最终计算出 ,这里的 当然了,就是 。
好,这就是第二部分的推导,其中我们想知道 增加0.002,会对 有什么影响。实际上 ,这告诉我们u增加0.002之后, 上升了3倍,那么 应该上升0.006,对吧。这可以从 推导出来。
如果你仔细看看这些数学内容,你会发现,如果 变成3.001,那么 就变成6.002, 变成11.002,然后 ,对吧?这就是如何得到 。
为了填进去,如果我们反向走的话, ,而 其实是 Python 代码中的变量名,表示 。
我不会很详细地介绍最后一个例子,但事实上,如果你计算 ,这个结果是9。
视频中为了简化推导过程,假设 这个推导的过程就是我之前提到过的链式法则。如果你对微积分熟悉,放心地去推导整个求导过程,如果不熟悉微积分,你只需要知道 已经计算好了。
在之前的视频中,你已经看到如何计算导数,以及应用梯度下降在逻辑回归的一个训练样本上。现在我们想要把它应用在 个训练样本上。
所以这里有很多细节,但让我们把这些装进一个具体的算法。同时你需要一起应用的就是逻辑回归和梯度下降。