深度学习开端---BP神经网络

本文介绍了深度学习的基础——BP神经网络,包括其简介、原理和TensorFlow开发环境的搭建。BP网络是最基本的神经网络,是CNN、RNN等高级网络的基础。文章详细解释了网络的反向传播过程,并探讨了学习率的选择。最后,提供了在Linux上快速安装TensorFlow的方法。

0.学习路径示意图

640?wx_fmt=png

    Hello,各位小伙伴大家晚上好呀,这期开始,博主就开始给大家分享深度学习这一块的内容啦。至于为啥要先开始讲BP神经网络(Back Propagetion Networks 反向传播网络),而不是一上来就是高大上的CNN、RNN、LSTM blabla,原因非常简单,上述所说各种高大上的神经网络都是基于BP网络出发的,最基础的原理都是由BP网络而来,所以小伙伴们只要掌握了这章最基本的原理,接下来的各种网络也能学得得心应手,有没有一种BP在手,天下我有的感觉。

    废话不多说,这期的内容主要分为以下几点

        1.BP神经网络简介

        2.BP神经网络原理

        3.Tensorflow开发环境搭建

        4.总结


1.BP神经网络简介

    BP网络(Back Propagetion Networks 反向传播网络),相信很多小伙伴一听到这个“网络”二字,头皮就开始发麻,博主一开始学的时候也一样,觉得网络密密麻麻地,绝对难得一批,其实不然,这里的网络比我们现实生活中的网络简化了不止一丁点儿,但是它却能出奇地完成各种各样的任务,逐渐成为我们人类智能生活的璀璨明珠。当然,BP网络虽然并不是最耀眼的一颗,但却是每一个初学的小伙伴必须去了解的一颗,博主认为BP网络是每个小伙伴深度学习之旅的开端。


2.BP神经网络原理

    光看名字,可能小伙伴们并不了解这个网络是干啥的,那博主先给大家上个图,作为神经网络家族中最简单的一种网络,相信大家看完它的结构之后一定会对它有个非常直观的了解。

640?wx_fmt=png

    对,就是这么个东西,左边输入,中间计算,右边输出。可能这样还不够简单,博主给大家画一个更简单的。

640?wx_fmt=png

    不算输入层,上面的网络结构总共有两层,隐藏层和输出层,它们“圆圈”里的计算都是下图的计算组合

640?wx_fmt=png

    每一级都是利用前一级的输出做输入,再经过圆圈内的组合计算,输出到下一级。

    看到这里,可能很多小伙伴会疑惑,为什么要加上f(z)这个运算,这个运算的目的是为了将输出的值域压缩到(0,1),也就是所谓的归一化,因为每一级输出的值都将作为下一级的输入,只有将输入归一化了,才会避免某个输入无穷大,导致其他输入无效,变成“一家之言”,最终网络训练效果非常不好。


    此时,有些记忆力比较好的小伙伴可能会想,反向传播网络?反向去哪了?对的,这个图还没画完整,整个网络结果结构应该是这样。

640?wx_fmt=png

    那有些小伙伴又会提出新的问题了,那反向传播的东西到底是啥?目的又是啥呢?这里,所有小伙伴都要有这么一点认识,神经网络的训练是有监督的学习,也就是输入有着与之对应的真实值,神经网络的输出真实值之间的损失Loss 就是网络反向传播的东西。整个网络的训练过程就是不断缩小损失Loss 的过程。为此,就像高中一样,我们为了求解某个问题,列出了一个方程:

640?wx_fmt=png

 上述的公式经过化简,我们可以看到A、B、C、D、E、F都是常系数,未知数就是w b ,也就是为了让Loss 最小,我们要求解出最佳的w b 。这时我们稍微想象一下,如果这是个二维空间,那么我们相当于要找一条直线,让它与坐标轴上所有样本点距离最小。比如这样

640?wx_fmt=jpeg

    


    为此Loss 方程转化为一个三维图像求最优解的过程。三维图像就像一个“碗”(“嘿,你看这个碗,它又大又圆2_02.png”),它和二维空间的抛物线一样,存在极值,那我们只要将极值求出,那就保证了我们能求出最优的(w , b)也就是这个“碗底”的坐标,使Loss  最小。

640?wx_fmt=jpeg

那说了这么多,我们应该如何求解呢?

    小伙伴们是否还记得上高中的时候,当我们列完函数方程之后,做的第一件事就是对这个函数求导,是的,这里也一样,要求极值,首先求导。不过,我们高中没有接触过二元凸函数的求导,但是在场的小伙伴应该都是大学生,这时候要拿出高等数学这本书来了,偏导数在这里隆重登了场。偏导数简单来讲,也就是对X,Y分别求导,在求导过程中,把其他的未知量当成常数即可。

    好了,理论知识补充完了,这时候我们想象自己在一座山上,要想从山上最快地去到谷底,那就要沿着最陡峭的地方往下走。这个最陡峭的地方,我们叫做梯度,像不像我们对上面那个“碗”做切线,找出最陡的那条切线,事实上我们做的就是这个,求偏导就是这么一个过程。

640?wx_fmt=png

我们每走一步,坐标就会更新

640?wx_fmt=png

当然,这是三维空间中的,假如我们在多维空间漫步呢,其实也是一样的,也就是对各个维度求偏导,更新自己的坐标。

640?wx_fmt=png

其中,w的上标i表示第几个w,下标n表示第几步,α是学习率,后面会介绍它的作用。


所以,整个求解过程,我们可以看做下山(求偏导过程),为此,我们先初始化自己的初始位置

640?wx_fmt=png

这样我们不断地往下走(迭代),当我们逐渐接近山底的时候,每次更新的步伐也就越来越小,损失值也就越来越小,直到达到某个阈值或迭代次数时,停止训练,这样找到(w, b)就是我们要求的解。

整个求解过程称为梯度下降求解法


这里还需要补充的是为什么要有学习率,学习率如何选择?

通常,学习率是用户自己随意设的,你可以根据过去的经验或书本资料选择一个最佳值,或凭直觉估计一个合适值,一般在(0,1)之间。这样做可行,但并非永远可行。事实上选择学习率是一件比较困难的事,下图显示了应用不同学习率后出现的各类情况:

640?wx_fmt=png

可以发现,学习率直接影响我们的模型能够以多快的速度收敛到局部最小值(也就是达到最好的精度)。一般来说,学习率越大,神经网络学习速度越快。如果学习率太小,网络很可能会陷入局部最优;但是如果太大,超过了极值,损失就会停止下降,在某一位置反复震荡。

也就是说,如果我们选择了一个合适的学习率,我们不仅可以在更短的时间内训练好模型,还可以节省各种云的花费。

如何选择?限于篇幅,博主这里补充一个链接,大家可以看一下,总的来说就是试出来的,看哪个学习率能让Loss收敛得更快,Loss最小,就选哪个

学习率的选择

https://m.jqr.com/article/000005


3.Tensorflow开发环境搭建

    说到深度学习,不可避免得会提及业界有哪些优秀的框架,TensorFlow神经网络框架便是其中之一,上面讲得这些原理,如何求解,TensorFlow已经对它们有了很好得封装,在后续的学习中,大家只要学会怎么去构建网络结构就没有什么问题了,至于如何求梯度,如何求解,框架会替我们去运算。

    当然啦,业界也有很多优秀的框架比如pytorch,不过博主更倾向于前者,前者的爸爸是Google,很多优秀的软件包括python都是这家公司开发的,是一家值得信赖的公司,再者TensorFlow已经比较成熟了,有良好的社区维护,小伙伴们在开发的过程中遇到的问题也能通过社区得到答案,因此,博主在此推荐使用TensorFlow。

    最后就是如何安装的问题啦

在此之前,博主已经介绍了我们的开发都尽可能在Linux平台上开发,理由在前期都有讲解,小伙伴们可以去翻一下之前的教程。

Python开发环境搭建----Linux基础

阿力阿哩哩,公众号:Python机器学习体系Python开发环境搭建----Linux基础

Python开发环境搭建----安装开发软件

阿力阿哩哩,公众号:Python机器学习体系Python开发环境搭建----安装开发软件

这里博主给小伙伴们来一手最快地安装TensorFlow方法

实验环境

a.Linux Ubuntu Anaconda python 3.6.8

b.0 打开终端(terminal)

b.1 有root权限

su	
source /etc/profile 	
conda install keras

b.2 无root权限,在自己的目录下

source .bashrc	
conda install keras

PS:Keras可以理解为对TensorFlow更为高级的封装框架,使用起来比TensorFlow还简单,直接安装keras就顺带安装了TensorFlow了,因为在Linux上Keras就是以TensorFlow为内核去驱动的。

c.讲解小视频

视频卡顿?bilibili值得拥有~(っ•̀ω•́)っ✎⁾⁾ 我爱学习

https://www.bilibili.com/video/av51592011/



4.总结

    可能很多小伙伴在看到第三节内容的时候会说,既然TensorFlow已经将求解过程都封装好了,为什么博主还要花这么长的时间去讲解呢?因为我们后续接触的CNN,RNN的原理和训练过程都是差不多的,无非就是网络结构改变罢了,在这里把最基本的原理掌握了,后续就算碰到再复杂的网络结构也不会怂。而且当小伙伴们学到深处的时候,需要自己弄一个网络结构去玩一下或者发论文的时候,对原理掌握的熟练度直接决定你的网络结构是否好用。

    希望各位小伙伴能在这一期都学有所成,下期我们就更新CNN啦~

PS:博主最近在学视频剪辑,为了给大家带来更好的教学体验,苦于不知哪款视频剪辑软件比较好,知道的小伙伴可以在评论区留言,有教程就更棒啦~

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值