神经网络和深度学习(五) ——深层神经网络基础

神经网络和深度学习(五)——深层神经网络基础

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

一、概述

本文是对深层神经网络的基础,主要讨论深层神经网络的算法、公式推导以及一些注意事项。

首先,符号表示上和之前的一样,用L表示总层数,上标[l]表示第l层,n表示数量,a表示每一层的输出,w、b是参数,输入层是第0层。

二、前向传播

前向传播,目的是计算出预测的输出结果。实际上,多层的神经网络,也是一步步向前进行计算,主要在于要把前一层的输出,当作下一层的输入。

这里每层,可以考虑用之前说的激活函数,对wTx+b的结果进行变换。现在仅考虑所有层都使用sigmoid,其他激活函数,区别在于计算结果不一样、反向传播的导数不一样,但是本质是一样的。

第一层,输入是3个x,则z[1]=w[1]Tx+b[1],且a[1]=g(z[1])=1/(1+e-z[1])。

第二层,输入则是第一层计算的结果a[1],则z[2]=w[2]T a[1]+b[2],且a[2]=g(z[2])=1/(1+e-z[2])。

后面的层同理。最后一层计算出来的a,即最终的预测结果y。

如果使用向量化,则是一次计算一层,把一层的神经元,整合在一起,进行矩阵运算,整合方式,例如A[1],是将第一层每个神经元计算出来的a[1],纵向并排在一起,形成一个大的矩阵A[1],参与运算。

三、参数w与b的维度

根据上面的讨论,可以看出,每一层的w和b,其维度是会变化的。w和b是为了辅助更好的预测结果的,故其数量是需要根据输入、输出的数量决定的。

1、w

先不考虑b,假设z=wx。考虑第一层,以下图为例。x的维度是(2,1),维度即行、列元素个数。

由于输出的a只是对z进行一层函数的处理,因此z的维度即a的维度,对于第一层而言,即第一层的神经元的数量(因为每个神经元就是一个输出),下图来看是(3,1)。

由wx=z,即(?,?) *(2,1)=(3,1),根据矩阵运算的原则,可以看出(?,?)=(3,2),即第一层的w,其是一个三行两列的矩阵。

再看第二层,(?,?)*(3,1)=(5,1),故(?,?)=(5,3),即第二层的w是一个五行三列的矩阵。以此类推,可以确定后面的w。

2、b

b是在wx的基础上,进行相加的,且由z=wx+b,可以看出,b和z的维度是一样的,即b的维度就是输出的维度。如第一层的b,即(3,1),第二层的b,即(5,1)。

3、确认维度的意义

在明确维度的情况下,后续调试代码、查找问题的时候,可以先清晰的看出,每一层的参数在个数上是否有误。

4、向量化的维度

上面提到的,都是一个样本的情况下,实际情况,输入的x的样本个数是m,即有m个x1、x2的输入,此时,输入的维度x变为(2,m),输出的维度a变成(3,m),则可以看出,w的维度是不需要变化的,仍是(3,2)。b的维度跟随a的维度,也变成(3,m)。

5、通用公式

设n[l]表示第l层神经元个数,m表示样本数量:

W的维度:(n[l],n[l-1]),b的维度=Z的维度=A的维度:(n[l], m)。

四、使用多层神经网络的原因

这个主要和业务场景有关,考虑到人脸照片处理。

人脸照片处理,过程大致为:接收图片;图片边界分析;边界组成(组成五官);组成人脸;输出。

这里每一步的处理结果,都是需要输出给下一步,因此,多层的情况下,每一层可以全责清晰,而且利于计算处理。

如果不用多层网络,只用1层的话,那一层需要非常多的神经元,这样计算量大而且不易调试。

五、搭建神经网络

1、反向传播

多层神经网络的反向传播,和单层没有本质上的区别,处理方式还是一个很长的链式求导法则,这里不细说,可以看上一篇文章,有详细的描述。建议大家都手工推导一遍,基本上就理解了。

2、构建网络

实际上,即针对输入(无论是样本输入,还是上一层网络的输出),结合本层的参数,整理成z=wx+b,再套用上激活函数,例如sigmoid、tanh、relu等,即可完成本层的计算输出。

在前向传播计算时,通常会缓存本层的z、w、b的结果,以便后面反向传播时使用,不用再次计算。

对于反向传播,最后一层的导数,要先考虑到损失函数L(a,y)=-(yloga + (1-y)log(1-a)),求出y对a的导数da=-y/a +(1-y)/(1-a),再计算本层的dw、db。然后再将da的结果往前一层传,逐层计算da、dw、db。

接着,将每一层的w、b减去本层对应的dw、db,即完成一次的优化。

重复上面的工作多次,直到整个系统足够优化。

六、参数与超参数

这个是个概念的说明,参数即实际参与需要优化的内容,即每一层的w、b。

而超参数,是协助优化w、b的参数,比如学习速率α、神经网络层数L、每一层的神经元的个数、激活函数的选择、正则化项系数等。这些参数,本身大部分不在设定后就不会变化(如L、神经元个数、激活函数等设定后不会变化,α可以变化但是变化也是为了优化更快)。

七、总结

前向和反向传播,最终的公式如下:

学习深层神经网络,实质就是浅层神经网络的堆叠,因此主要要学好单层、双层网络的推导和运用,后面多层的网络自然就融会贯通。

——written by linhxx 2018.02.03

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

原文发表时间:2018-02-03

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

卷积神经网络详解

注:看本文之前最好能构理解前馈圣经网络以及BP(后向传播)算法,可以看之前发的相关文章或者看知乎、简书、博客园等相关博客。 卷积神经网络(Convolution...

2718
来自专栏AI研习社

新手必看的十种机器学习算法

AI 研习社按:在神经网络的成功的带动下,越来越多的研究人员和开发人员都开始重新审视机器学习,开始尝试用某些机器学习方法自动解决可以轻松采集数据的问题。然而,在...

34910
来自专栏机器学习算法原理与实践

逻辑回归原理小结

    逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为...

622
来自专栏YoungGy

机器学习算法调优

BP 调优事项 BP对feature scaling很敏感,要先scale data。 经验来说,L-BFGS在小数据上收敛更快效果更好;Adam在大数据上表现...

2056
来自专栏算法channel

机器学习高斯混合模型(中篇):聚类求解

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

3367
来自专栏人工智能

UMCP提出对损失函数进行可视化,以提高神经网络的训练能力

原文来源:arxiv 作者:Hao Li、Zheng Xu、Gavin Taylor、Tom Goldstein 「雷克世界」编译:嗯~阿童木呀、KABUDA ...

1849
来自专栏IT派

最常用的十大机器学习算法都在这了,果断收藏!

导语:本文列出了数据科学家使用的十大机器学习算法,并且介绍了这十大算法的特点,供各位机器学习的新人们更好地理解和应用。

753
来自专栏云时之间

机器学习常用算法分类(2)

感谢大家的关注,在上一篇文章中发布后很多热心的小伙伴建议我可以改进下分类的方式,一种是根据学习的方式分类,另外一种是根据类似的形式或者功能进行分类,我几天一直在...

2568
来自专栏量子位

一文看懂各种神经网络优化算法:从梯度下降到Adam方法

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果...

4417
来自专栏WD学习记录

机器学习 学习笔记(22) 深度模型中的优化

用于深度模型训练的优化算法与传统的优化算法在几个方面有所不同。机器学习通常是简接作用的,再打所述机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能...

643

扫描关注云+社区