【第22期】观点:IT 行业加班,到底有没有价值?

机器学习之——神经网络学习

原创 2016年05月31日 16:41:09

很久没更新博客了,这一次我们继续之前的机器学习的课程,这一节我们讨论机器学习里面重要的一个算法——神经网络(Nerual Network)的学习部分。

神经网络的代价函数

首先我们要引入一些标记,以便在后面讨论中使用:


我们回想一下,在逻辑回归(Logistic Regression)问题中,我们的代价函数(Cost Function)如下:


在逻辑回归中,我们只有一个输出变量,又称作标量(Scalar),也只有一个因变量y,但是在神经网络中,我们可以有很多输出变量,我们的hø(x)是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,如下所示:


这个代价函数看起来复杂很多,但是背后的思想还是一样的。我们希望能够通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同的结果,然后再利用循环在K个预测中选择可能性最大的一个,将其与y中的实际数据进行对比。

归一化的哪一项只是排除了每一层的ø0后,每一层的ø矩阵的和。最里层的循环 j 循环所有的行(由si +1层的激活单元书决定),循环 i 则循环所有的列,由该层(si 层)的激活单元数所决定。


反向传播算法(Backpropagation Algorithm)

之前我们在计算神经网络预测结果的时候,我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的hø(x)。

现在,为了计算代价函数的偏导数:


我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。

我们用一个例子来说明反向传播算法。

假设,我们的训练集只有一个实例(x(1), y(1)),我们的神经网络是一个四层的神经网络,其中:K=4,SL=4,L=4 


我们从最后一层的误差开始计算,误差是激活单元的预测()与实际值(yk)之间的误差(k=1:K)。我们用来表示误差,则:


我们利用这个误差值来计算前一层的误差:


其中g'(Z(3))是S形函数的导数,g'(Z(3))=a(3).*(1-a(3))。而则是权重导致的误差的和。

下一步是继续计算第二层的误差:


因为第一层是输入变量,不存在误差。我们有了所有的误差的表达式之后,便可以计算代价函数的偏导数了,假设λ=0,即我们不做任何归一化处理时有:


重要的是清楚地知道上面式子中上下标的含义:


如果我们考虑归一化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用来表示这个误差矩阵。第 l 层的第 i 个激活单元收到第 j 个参数影响而导致的误差。

我们的算法表示为:


即首先使用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:


在Octave或者Matlab中,如果我们使用 fminuc 这样的优化算法求解求出权重矩阵,我们需要将矩阵首先展开为向量,再利用算法求出最优解后再重新转换回矩阵。

假设我们有三个权重矩阵,theta1,theta2和theta3,尺寸分别为10*11,10*11和1*11,下面的代码可以实现这样的转换:


这一次我们讨论到这里,下一回我们继续学习神经网络的梯度检验(Gradient Checking)随机初始化(Random Initialization)

版权声明:本文为郭了个治浩(http://ninty.cc)原创文章,未经允许不得转载。 举报

相关文章推荐

《三体》读后思考-泰勒展开/维度打击/黑暗森林

前言两个月前,老婆不知道吃错了什么药,心血来潮买了几本书,全是什么给孩子讲数学,量子物理之类的,小小才六岁啊…还有一部小说《三体》,当然,这肯定是她自己想看的了,也许是看到了有人总拿《三体》跟《盗墓》...
  • dog250
  • dog250
  • 2017-07-22 16:35
  • 37945

每周荐书:分布式、深度学习算法、iOS(评论送书)

每周荐书:分布式、深度学习算法、iOS(评论送书)感谢大家对每周荐书栏目的支持,先公布下上周中奖名单 steveygtiny_cellKotlin实战 daMao2 AresCarry架构探险:从零开...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

机器学习之——初识神经网络

在讨论神经网络之前,我们先回顾一下之前的一系列讨论。 之前我们已经讨论过,非线性假设(Non-Linear Hypothesis),使用非线性的多项式能够帮助我们建立更好的分类模型(Classifi...

神经网络学习 之 M-P模型

M-P模型的来源所谓M-P模型,其实是按照生物神经元的结构和工作原理构造出来的一个抽象和简化了的模型。 下图是生物神经元结构。 大家可以查一查一些生物方面的书籍,了解一下这个神经元是如何工作的...

机器学习之——神经网络模型

之前我们了解了神经网络模型(Nerual Network),这一次,我们来具体讨论一下神经网络模型的表达。 我们知道,神经网络模型是许多逻辑单元(Logistics Unit)按照不同的层级组织起来...

系统学习机器学习之神经网络(四) --SOM

转自:http://blog.csdn.net/xbinworld/article/details/50818803,其实内容更多的是百度文库里叫《SOM自组织特征映射神经网络》这篇文章上的,博主增加...

神经网络聚类方法:SOM算法原理

一个神经网络接收外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。其特点与人脑的自组织特性类似。SOM的目标是用低维(通常是二维或三维)目标空间的点来表...

BP神经网络算法学习

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP...

机器学习实战——python实现SOM神经网络聚类算法

算法基础SOM网络结构输入层:假设一个输入样本为X=[x1,x2,x3,…,xn],是一个n维向量,则输入层神经元个数为n个。 输出层(竞争层):通常输出层的神经元以矩阵方式排列在二维空间中,每个神经...

系统学习机器学习之神经网络(五) --ART

原文:http://blog.sina.com.cn/s/blog_7671b3eb0100xnk1.html 分析的方法主要有两种—统计聚类法和神经网络法。统计聚类法包括系统聚类法、动态聚类法、模糊...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)