机器学习第十八周周报

机器学习第十八周周报

  • 摘要
  • Abstract
  • 一、导数
  • 二、计算图
  • 三、使用计算图求导数
  • 四、逻辑回归中的梯度下降
  • 五、m 个样本的梯度下降
  • 六、总结

摘要

本周开始学习吴恩达的梯度下降法,梯度下降法在机器学习中常常用来优化损失函数,是一个非常重要的工具。

Abstract

This week we began to learn Wu Enda’s gradient descent method, which is often used to optimize the loss function in machine learning and is a very important tool.

一、导数

机器学习第十八周周报_第1张图片

二、计算图

一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。计算图解释了为什么我们用这种方式组织这些计算过程。机器学习第十八周周报_第2张图片
我们尝试计算函数J,J是由三个变量a,b,c组成的函数,这个函数是 3(a+bc)。计算这个函数实际上有三个不同的步骤,首先是计算 b乘以c ,我们把它储存在变量u中,因此u=bc; 然后计算v=a+u;最后输出J=3v,这就是要计算的函数J。我们可以把这三步画成如下的计算图,我先在这画三个变量a,b,c,第一步就是计算u=bc,我在这周围放个矩形框,它的输入是b,c,接着第二步v=a+u,最后一步J=3v。 举个例子: a=5,b=3,c=2,u=bc就是6,v=a+u ,就是5+6=11。J是3倍的 ,因此即3*(5+3*2)。如果你把它算出来,实际上得到33就是J的值。 当有不同的或者一些特殊的输出变量时,例如本例中的和逻辑回归中你想优化的代价函数J,因此计算图用来处理这些计算会很方便。从这个小例子中我们可以看出,通过一个从左向右的过程,你可以计算出J的值。为了计算导数,从右到左(红色箭头,和蓝色箭头的过程相反)的过程是用于计算导数最自然的方式。

三、使用计算图求导数

机器学习第十八周周报_第3张图片
机器学习第十八周周报_第4张图片
机器学习第十八周周报_第5张图片
当你编程实现反向传播时,通常会有一个最终输出值是你要关心的,最终的输出变量,你真正想要关心或者说优化的。在这种情况下最终的输出变量是J,就是流程图里最后一个符号,所以有很多计算尝试计算输出变量的导数,所以输出变量对某个变量的导数,我们就用dvar命名
机器学习第十八周周报_第6张图片
机器学习第十八周周报_第7张图片
机器学习第十八周周报_第8张图片
机器学习第十八周周报_第9张图片
机器学习第十八周周报_第10张图片
所以这是一个计算流程图,就是正向或者说从左到右的计算来计算成本函数J,你可能需要优化的函数,然后反向从右到左计算导数。

四、逻辑回归中的梯度下降

机器学习第十八周周报_第11张图片
为了使得逻辑回归中最小化代价函数,我们需要做的仅仅是修改参数w和b的值。前面我们已经讲解了如何在单个训练样本上计算代价函数的前向步骤。现在让我们来讨论通过反向计算出导数。
机器学习第十八周周报_第12张图片
机器学习第十八周周报_第13张图片
现在已经知道了怎样计算导数,并且实现针对单个训练样本的逻辑回归的梯度下降算法。但是,训练逻辑回归模型不仅仅只有一个训练样本,而是有个训练样本的整个训练集。

五、m 个样本的梯度下降

机器学习第十八周周报_第14张图片
机器学习第十八周周报_第15张图片
但之前我们已经演示了如何计算这项,即之前幻灯中演示的如何对单个训练样本进行计算。所以你真正需要做的是计算这些微分,如我们在之前的训练样本上做的。并且求平均,这会给你全局梯度值,你能够把它直接应用到梯度下降算法中。

所以这里有很多细节,但让我们把这些装进一个具体的算法。同时你需要一起应用的就是逻辑回归和梯度下降。

我们初始化J=0,dw1=0,dw2=0,db=0
代码

J=0;dw1=0;dw2=0;db=0;
for i = 1 to m
    z(i) = wx(i)+b;
    a(i) = sigmoid(z(i));
    J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
    dz(i) = a(i)-y(i);
    dw1 += x1(i)dz(i);
    dw2 += x2(i)dz(i);
    db += dz(i);
J/= m;
dw1/= m;
dw2/= m;
db/= m;
w=w-alpha*dw
b=b-alpha*db

但这种计算中有两个缺点,也就是说应用此方法在逻辑回归上你需要编写两个for循环。第一个for循环是一个小循环遍历m个训练样本,第二个for循环是一个遍历所有特征的for循环。这个例子中我们只有2个特征,所以n等于2并且nx等于2。 但如果你有更多特征,你开始编写你的因此dw1,dw2,你有相似的计算从dw3一直下去到dwn。所以看来你需要一个for循环遍历所有n个特征。
当你应用深度学习算法,你会发现在代码中显式地使用for循环使你的算法很低效,同时在深度学习领域会有越来越大的数据集。所以能够应用你的算法且没有显式的for循环会是重要的,并且会帮助你适用于更大的数据集。所以这里有一些叫做向量化技术,它可以允许你的代码摆脱这些显式的for循环。

六、总结

本周学习了吴恩达的梯度下降,下周将开始学习向量化技术。

你可能感兴趣的:(机器学习,人工智能)