神经网络和深度学习(二) ——从logistic回归谈神经网络基础

神经网络和深度学习(二)——从logistic回归谈神经网络基础

(原创内容,转载请注明来源,谢谢)

一、概述

之前学习机器学习的时候,已经学过logistic回归,不过由于神经网络中,一些思想会涉及到logistic,另外会拿一些神经网络用到的解决方案,以logistic来举例,更浅显易懂(例如BP算法)。

因此,这里就再次复习logistic回归及其梯度下降、代价函数等,主要是讲述和后面学习神经网络有关的内容,其他部分会快速略过。

二、logistic输出函数

logistic是解决二分分类问题,即假设结果只有两种,这是一个大前提。

由于是二分分类,需要输出的是y的概率,故要求y的值在0~1之间,故不能用线性回归的那种wx+b,而是套上一层激励函数,称为sigmoid函数,f(z)=1/(1+e-z),这个函数的区间在0~1,满足这个要求,且z=0.5时函数为0,正好对半分。

通常有两种方式表达logistic,一种是用w和b,此时x在1~n(样本特征值个数);另一种是设x0=1,则只需要用一个θ就可以来表示,其中θ0对应的x0=1,即表示了b的值。本文用的是w和b的方式。

三、logistic代价函数与梯度下降

单个样本求出来的损失函数用L表示,样本集的代价函数用J表示。

这个J不直接用预测结果和实际结果的平方差求和公式,是因为这样会导致代价函数是非凸函数,后面的梯度下降对于非凸函数只能求到极小值,无法求到最小值,故加上log,让其变换成了凸函数,以便后面的梯度下降。

公式如下图所示:

梯度下降,目的是为了求,当给定w和b时,代价函数J取得最小值。故需要用J对w和b求偏导数,并令其为0,再用w-α*偏导数(同理b-α*偏导数),其中α为学习函数,表示其迈向最小值的步伐。

经过若干次求偏倒,并且递减后,会得到一个最优化的J,并且此时的w和b就是所要求的参数。

四、计算图

1、概念

计算图是后续理解神经网络的前向传播、反向传播算法的基础。这里先抛开logistic,讨论一下计算图的概念。

1)前向传播

假设a=5,b=3,c=2,且u=bc,v=a+u,J=3v,则很容易求得j的结果,其画图后如下图所示:

2)反向传播——求导

现在要求J对参数a的导数dJ/da。可以先求J对v的倒数dJ/dv,将结果记录起来;再求J对a的导数,dJ/da = (dJ/dv)* (dv/da),其中dJ/dv的值直接用上一步计算的结果,不需要再次计算。

同理,可以求出J对参数b、c的导数。如下图所示:

计算图对于后面理解反向传播算法很重要。当初学ng的机器学习的课,那时候他没讲到这个,我去理解反向传播算法,理解了好久。现在看到这个,有种突然恍然大悟的感觉。

2、计算图优化logistic(单个样本)

现在再来看logistic。实际上对于logistic,并不需要用计算图,可以直接进行优化,但是这里拿logistic举例,是为了便于以后理解神经网络的算法。

现在假设有三个参数w1、w2、b(即样本有两个特征),则如下图所示,可以正向求得该样本的损失函数L:

根据上面的推论,可以反向来求的损失函数L对w1、w2、b的偏导数。此时就用w1=w1-αdw1(w2、b同理),则就完成了一次优化。

可以用优化了的w1、w2、b再次前向计算L,再反向计算偏导数,再计算减法,以此类推,多次计算后,可以得到最小L情况下的w1、w2、b。

3、样本集计算

当考虑整个样本集的代价函数,实际上就是每个样本损失函数的和,这里为了调整数值大小,会将和除以样本容量m。但是其正向、反向求解过程和上面是一样的。

用伪代码描述,如下图所示:

五、向量化

1、概念

向量化要解决的问题是,求解上述logistic的过程中,会出现太多的for循环。这里使用numpy的矩阵运算,避开手工去写for循环,而是调用现有的函数,让计算机内部去执行for循环。

由于numpy的矩阵运算,是可以并行执行的,且numpy是用C语言写的python库,其运行效率比python原生写法快得多。

故所有能用numpy函数的,建议都要用,避免自己去写函数。

向量化本身概念很简单,即把w、x、z、y等变量,都用numpy的矩阵表示,而不用单个数字或者普通的数组,这样做的好处就是可以调用numpy的矩阵处理函数了。

2、简单举例

下图左边是没有用向量化,使用了for循环;右边是向量化,可以看到仅仅一行np.exp(v),即可实现对向量v的每个元素的求e次幂的操作,非常快捷,且运算速度快得多。

ng讲课的时候演示过,当数量级在1百万时,numpy处理矩阵的速度约是原生for循环处理速度的200倍。

右图其他的式子是其他的一些举例,例如所有元素求log、求绝对值、求最大值、求平方、求倒数等,都非常方便快捷。

3、logistic向量化

要进行向量化,要将多个dw合并成1个dw,同时对其进行的优化计算也合并成一个矩阵运算。同理,后续的除法运算也合并成矩阵运算。

可以理解成,对于样本的每个特征值,简化成一个x(i);接着,再将所有的x(i)整合到一个矩阵,最终简化成x来表示,且用整个x来参与运算。y同理。

这段讲解基本让我更理解了《机器学习实战》书上的代码,上面大量用到了向量化的技术。

第一次优化(把一个样本的所有特征整合到一个矩阵):

最终优化(把所有样本整合到一个矩阵):

六、logistic推导

这里主要讲解了为什么logistic的输出函数和代价函数会是那样的公式。

1、单个样本的损失函数

首先,要明确logistic的输出,是y=1的概率,故当y=1时输出的是y1,则y=0时输出的是1-y1(因为y只有0、1两种可能,故两者的概率和必定为1)。

为了简便,可以把这个函数整合成一个表达式y1y(1-y1)(1-y),将y=0、1带入,可以看到还是上面的公式。

logistic的损失函数,为了是一个凸函数,取了log函数,故表达式改写成ylogy1 + (1-y)log(1-y1),如下图所示:

上图没有加负号,实际上损失函数是加负号的,即表示要求最小的损失函数,会得到尽量大的logP。

2、样本集的代价函数

假设样本之间是独立的,则总的概率即为各个样本概率的乘积,由于乘积求log后,变成了加法,另外为了调整数量的大小,取了m个样本的平均值,且加上负号,最终就变成了代价函数的样子:

七、总结

本章还有讲到numpy、python的一些内容,我转到python的专题中。

这一章,重新学了logistic,我还是挺有收获的,感觉对logistic有了更清晰的认识,另外计算图部分我感觉对我理解BP有很大的帮助,向量化部分对理解其他机器学习编程书的python代码也有很大的帮助。

——written by linhxx 2018.01.31

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

我的R语言小白之梯度上升和逐步回归的结合使用

我的R语言小白之梯度上升和逐步回归的结合使用 今天是圣诞节,祝你圣诞节快乐啦,虽然我没有过圣诞节的习惯,昨天平安夜,也是看朋友圈才知道,原来是平安夜了,但是我昨...

2016
来自专栏企鹅号快讯

机器学习——神经网络代价函数、反向传播、梯度检验、随机初始化

机器学习(十二) ——神经网络代价函数、反向传播、梯度检验、随机初始化 (原创内容,转载请注明来源,谢谢) 一、代价函数 同其他算法一样,为了获得最优化的神经网...

2327
来自专栏机器之心

你是合格的机器学习数据科学家吗?来挑战这40题吧!(附解答)

选自 Analytics Vidhya 作者:ANKIT GUPTA 机器之心编译 参与:机器之心编辑部 目前机器学习是最抢手的技能之一。如果你是一名数据科学...

3499
来自专栏人工智能

神经网络的基础-逻辑回归

练习数据和代码那必须是每一期都有的,文末查看获取方式。 大家好,今天给大家介绍的算法叫做逻辑回归。 从名字入手,逻辑回归嘛,它肯定是回归的一种,还记得我们之前讲...

2076
来自专栏大数据文摘

特征工程:数据科学家的秘密武器!

1837
来自专栏算法channel

机器学习:谈谈决策树

? 前面谈了逻辑回归的基本原理及梯度下降推导过程,编码实现了逻辑回归的梯度下降算法,这是分类算法。今天,我们继续开启分类算法之旅,它是一种高效简介的分类算法,...

3679
来自专栏WD学习记录

机器学习 学习笔记(24) 序列建模:循环和递归网络

循环神经网络(recurrent nerual network)或RNN是一类用于处理序列数据的神经网络,就像卷积网络是专门用于处理网格化数据X的神经网络。循环...

851
来自专栏Small Code

【TensorFlow】学习率、迭代次数和初始化方式对准确率的影响

想必学过机器学习的人都知道,学习率、训练迭代次数和模型参数的初始化方式都对模型最后的准确率有一定的影响,那么影响到底有多大呢? 我初步做了个实验,在 Tenso...

2888
来自专栏大数据文摘

吴恩达机器学习中文版笔记:异常检测(Anomaly Detection)

2087
来自专栏大数据挖掘DT机器学习

你看到的最直白清晰的CNN讲解

这篇博客介绍的是深度神经网络中常用在图像处理的模型——卷积神经网络(CNN),CNN在图像分类中(如kaggle的猫狗大战)大显身手。这篇博客将带你了解图像在...

40510

扫描关注云+社区