[Python人工智能] 四.神经网络和深度学习入门知识

从本篇文章开始,做者正式开始研究Python深度学习、神经网络及人工智能相关知识。前三篇文章讲解了神经网络基础概念、Theano库的安装过程及基础用法、theano实现回归神经网络、theano实现分类神经网络,这篇文章又回到基础知识,结合莫烦大神的视频学习,讲解机器学习基础知识、神经网络基础、CNN、RNN、LSTM RNN、GAN等知识,主要是学习"莫烦大神" 网易云视频的在线笔记,后面随着深刻会讲解具体的项目及应用。基础性文章和在线笔记,但愿对您有所帮助,也建议你们一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~html

"莫烦大神" 网易云视频地址:http://study.163.com/provider/1111519/course.html
python

同时推荐前面做者另外三个Python系列文章。

从2014年开始,做者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。web

这里写图片描述 这里写图片描述 这里写图片描述

前文参考:
[Python人工智能] 一.神经网络入门及theano基础代码讲解
[Python人工智能] 二.theano实现回归神经网络分析
[Python人工智能] 三.theano实现分类神经网络及机器学习基础
算法


目录:
一.机器学习
二.神经网络
三.卷积神经网络
四.循环神经网络
五.LSTM RNN
六.自编码
七.GAN

网络



一.机器学习

首先第一部分也是莫烦老师的在线学习笔记,我的感受挺好的基础知识,推荐给你们学习。对机器学习进行分类,包括:
    1.监督学习:经过数据和标签进行学习,好比从海量图片中学习模型来判断是狗仍是猫,包括分类、回归、神经网络等算法;

机器学习


    2.无监督学习:只有数据没有类标,根据数据特征的类似性造成规律,好比不知道类标的状况进行分类猫或狗,常见的聚类算法(物以类聚);


    3.半监督学习:综合了监督学习和无监督学习,经过少许有标签样本和大量没有标签样本进行训练和分类,有效提高了二者效果;
    4.强化学习:经常使用于规划机器人行为准则,把计算机置于陌生环境去完成一项未知任务,好比投篮,它会本身总结失败经验和投篮命中的经验,进而惩罚或奖励机器人从而提高命中率,好比阿尔法狗;


    5.遗传算法:和强化学习相似,经过淘汰机制去选择最优模型,好比本身玩超级马里奥,淘汰前面几代差的,基于强者的"遗传和变异",适者生存,弱者淘汰的原理。



二.神经网络

神经网络也称为人工神经网络ANN(Artifical Neural Network),是80年代很是流行的机器学习算法,在90年代衰退,如今随着"深度学习"和"人工智能"之势从新归来,成为最强大的机器学习算法之一。ide

神经网络是模拟生物神经网络结构和功能的计算模型,由不少神经层组成,每一层存在着不少神经元,这些神经元是识别事物的关键。神经网络经过这些神经元进行计算学习,每一个神经元有相关的激励函数(sigmoid、Softmax、tanh等),包括输入层、隐藏层(可多层或无)和输出层,当神经元计算结果大于某个阈值时会产生积极做用(输出1),相反产生抑制做用(输出0),常见的类型包括回归神经网络(画线拟合一堆散点)和分类神经网络(图像识别分类)。函数

以下图所示,它表示的是一我的工神经细胞。其中: 输入(Inputs):神经细胞的输入;权重(Weight):左边五个灰色圆底字母w表明浮点数;激励函数(Activation Function):大圆,全部通过权重调整后的输入加起来,造成单个的激励值;输出(Output):神经细胞的输出。
学习



进入人工神经细胞的每个input(输入)都与一个权重w相联系,正是这些权重将决定神经网络的总体活跃性。假设权重为-1和1之间的一个随机数,权重可正可负(激发和抑制做用)。当输入信号进入神经细胞时,它们的值将与它们对应的权重相乘,做为图中大圆的输入。若是激励值超过某个阀值(假设阀值为1.0),就会产生一个值为1的信号输出;若是激励值小于阀值1.0,则输出一个0。这是人工神经细胞激励函数的一种最简单的类型。涉及的数学知识以下图所示:优化



若是最后计算的结果激励值大于阈值1.0,则神经细胞就输出1;若是激励值小于阈值则输出0。这和一个生物神经细胞的兴奋状态或抑制状态是等价的。

再以下面的示例,经过海量图片学习来判断一张图片是狗仍是猫,经过提取图片特征转换为数学形式来判断,若是判断是狗则会反向传递这些错误信息(预测值与真实值差值)回神经网络,并修改神经元权重,经过反复学习来优化识别。

下面简单讲解"莫烦大神"网易云课程的一个示例。假设存在千万张图片,如今须要经过神经网络识别出某一张图片是狗仍是猫,以下图所示共包括输入层、隐藏层(3层)和输出层。




计算机经过训练或强化学习判断猫,将获取的特征转换为数学的形式。首先获得一堆数字,经过判断处理获得另外一堆数据,最终判断其是狗仍是猫。好比第一次正确识别的只有10%,下面那只猫被识别成了狗,它会将识别错误的信息(与真实答案的差异)反向传递回神经网络,并修改神经元权重,为下次更好地识别。



每个神经元都有一个激励函数,被激励的神经元传递的信息最有价值,它也决定最后的输出结果,通过海量数据的训练,最终神经网络将能够用于识别猫或狗。


三. 卷积神经网络

卷积神经网络英文是Convolutional Neural Network,简称CNN。它一般应用于图片识别和语音识等领域,并能给出更优秀的结果,也能够应用于视频分析、机器翻译、天然语言处理、药物发现等领域。著名的阿尔法狗让计算机看懂围棋就是基于卷积神经网络的。

神经网络是由不少神经层组成,每一层神经层中存在不少神经元,这些神经元是识别事物的关键,当输入是图片时,其实就是一堆数字。




首先,卷积是什么意思呢?卷积是指不在对每一个像素作处理,而是对图片区域进行处理,这种作法增强了图片的连续性,看到的是一个图形而不是一个点,也加深了神经网络对图片的理解。



卷积神经网络批量过滤器,持续不断在图片上滚动搜集信息,每一次搜索都是一小块信息,整理这一小块信息以后获得边缘信息。好比第一次得出眼睛鼻子轮廓等,再通过一次过滤,将脸部信息总结出来,再将这些信息放到全神经网络中进行训练,反复扫描最终得出的分类结果。以下图所示,猫的一张照片须要转换为数学的形式,这里采用长宽高存储,其中黑白照片的高度为1,彩色照片的高度为3(RGB)。



过滤器搜集这些信息,将获得一个更小的图片,再通过压缩增高信息嵌入到普通神经层上,最终获得分类的结果,这个过程便是卷积。以下图所示,它将一张RGB图片进行压缩增高,获得一个很长的结果。


研究发现:卷积过程会丢失一些信息,POOLING(持化2)能解决这些问题,卷积时不压缩长宽,尽可能保证更多信息,压缩工做交给持化。通过图片到卷积,持化处理卷积信息,再卷积再持化,将结果传入两层全链接神经层,最终经过分类器识别猫或狗。

以下图所示,从下往上依次经历“图片-卷积-持化(处理卷积信息)-卷积-持化-结果传入两层全链接神经层-分类器”的过程。




四. 循环神经网络

循环神经网络英文是Recurrent Neural Networks,简称RNN。假设有一组数据data0、data一、data二、data3,使用同一个NN(神经网络)预测他们,获得对应的结果。若是数据之间是有关系的,好比作菜下料的先后步骤,如何让数据之间的关联也被神经网络进行分析呢?这就要用到了RNN。


首先,想一想人类是怎么分析事物之间的关联吧,人类一般记住以前发生的事情,从而帮助咱们后续的行为判断,那么咱们就让计算机也记住以前发生的事情吧。



在分析data0时,咱们把分析结果存入记忆,而后当分析data1时,NN会产生新的记忆,可是此时新的记忆和老的记忆没有关联,咱们会简单的把老记忆调用过来分析新的记忆,若是继续分析更多的数据,NN就会把以前的记忆累积起来。


数学形式中,每次RNN运行完以后都会产生S(t),RNN分析X(t+1),而此时Y(t+1)是由S(t)和S(t+1)共同创造的,继续累加。多个NN的累积就转换为了循环神经网络,以下图的右边所示。



最后讲讲RNN的应用。分类,分析一我的说话情感是积极的仍是消极的?它有N个输入,最后一个时间点表明输出结果的RNN。



图像识别,此时有一张图片输入,N张对应的输出。



机器翻译,其中输入和输出分别两个,对应的是中文和英文,以下图所示:





五.LSTM RNN


RNN是在有序的数据上进行学习的,RNN会像人同样对先前的数据发生记忆,但有时候也会像老爷爷同样忘记先前所说。为了解决RNN的这个弊端,提出了LTSM技术,它的英文全称是Long short-term memory,长短时间记忆,也是当下最流行的RNN之一。


假设如今有一句话,以下图所示,RNN判断这句话是红烧排骨,这时须要学习,而“红烧排骨“在句子开头。

  


"红烧排骨"这个词须要通过长途跋涉才能抵达,要通过一系列获得偏差,而后通过反向传递,它在每一步都会乘以一个权重w参数。若是乘以的权重是小于1的数,好比0.9,0.9会不断地乘以偏差,最终这个值传递到初始值时,偏差就消失了,这称为梯度消失或梯度离散。


  
反之,若是偏差是一个很大的数,好比1.1,则这个RNN获得的值会很大,这称为梯度爆炸。


这也是RNN没有恢复记忆的缘由,LSTM就是解决这个问题而产生的。以下图所示:


LSTM RNN多了三个控制器,即输入、输出、忘记控制器。左边多了个条主线,例如电影的主线剧情,而本来的RNN体系变成了分线剧情,而且三个控制器都在分线上。

若是分线剧情对于最终结果十分重要,输入控制器会将这个分线剧情按重要程度写入主线剧情,再进行分析;若是分线剧情改变了咱们以前的想法,那么忘记控制器会将某些主线剧情忘记,而后按比例替换新剧情,因此主线剧情的更新就取决于输入和忘记控制;最后的输出会基于主线剧情和分线剧情。

基于这些控制的机制,LSTM是延缓记忆的良药,从而带来更好的结果。



六.自编码

首先,什么是自编码(Autoencoder)?自编码是一种神经网络的形式,注意它是无监督学习算法。例如如今有一张图片,须要给它打码,而后又还原图片的过程,以下图所示:



一张图片通过压缩再解压的工序,当压缩时原有的图片质量被缩减,当解压时用信息量小却包含全部关键性文件恢复出原来的图片。为何要这么作呢?有时神经网络须要输入大量的信息,好比分析高清图片时,输入量会上千万,神经网络向上千万中学习是很是难的一个工做,此时须要进行压缩,提取原图片中具备表明性的信息,压缩输入的信息量,再把压缩的信息放入神经网络中学习。这样学习就变得轻松了,因此自编码就在这个时候发挥做用。


以下图所示,将原数据白色的X压缩解压成黑色的X,而后经过对比两个X,求出偏差,再进行反向的传递,逐步提高自编码的准确性。


训练好的自编码,中间那部分就是原数据的精髓,从头至尾咱们只用到了输入变量X,并无用到输入变量对应的标签,因此自编码是一种无监督学习算法。


可是真正使用自编码时,一般只用到它的前半部分,叫作编码器,能获得原数据的精髓。而后只须要建立小的神经网络进行训练,不只减少了神经网络的负担,并且一样能达到很好的效果。

下图是自编码整理出来的数据,它能总结出每类数据的特征,若是把这些数据放在一张二维图片上,每一种数据都能很好的用其精髓把原数据区分开来。自编码能相似于PCA(主成分分析)同样提取数据特征,也能用来降维,其降维效果甚至超越了PCA。


PS:强烈推荐你们去网易云学习莫烦大神的Python视频。



七.GAN生成对抗网络

神经网络分类不少,有普通的前向传播神经网络,有分析图片的CNN卷积神经网络,有分析序列化数据好比语音或文字的RNN循环神经网络,这些神经网络都是用来输入数据,获得想要的结果。咱们看中的是这些神经网络经过某种关系输入和结果联系起来。




但还有一种神经网络,不是用来把数据对上结果的,而是用来凭空捏造结果,这就是咱们要讲的生成网络,GAN(Generative Adversarial Nets)就是其中一种。



凭空并非没有意义的盒子,而是有一些随机数,经过这些没有意义的随机数来生成最终有意义的做品,好比蒙娜丽莎画做。

  
GAN只是其中的一部分,咱们能够把它想象成一个新手画家,他有灵感但绘画技术不高,会把画画得很糟糕。而后他去找了本身的一个好朋友,新手鉴赏家,但新手鉴赏家也没有什么能耐,分不出因此。此时电脑前的你实在看不下去了,拿起两个标签往电脑上一甩,被甩了不少次以后,也就划分好了。

  
重要的是两人是好朋友,总在一块儿分享东西,而后新手鉴赏家告诉画家,你画得太差了,应该这里要浓一点,那里要淡一点,就这样新手鉴赏家把从你这里学到的知识告诉给新手画家,新手画家也越画越像蒙娜丽莎,这就是GAN。


再来屡屡步骤,以下:新手画家用随机灵感画画,新手鉴赏家会接收一些画做,但他不知道这是新手画家画的仍是达芬奇画的,他说出了本身的判断,你来纠正他的判断。新手鉴赏家一边说出本身的判断,一边告诉新手画家要怎么修改才能画得像著名画家,新手画家从而学会如何从本身的灵感画更好的画做。

  
Generative会根据随机数来生成有意义的数据,Discirminator会学习判断哪些是真实数据,哪些是生成数据;而后将学习到的经验反向传给Generative,让Generative根据随机数训练出更像真实数据的数据。




最后讲讲GAN的应用,训练的GAN能够用来随机生成卧室图片,甚至能够作图片加减法,修饰图片,也能够根据随机画的几笔草图生成对应的图片,以下图所示。

  

讲到这里,神经网络入门知识已经普及完了,后面做者将结合原理及代码实现对应的神经网络,详见博客。同时推荐你们学习莫烦大神的视频,最近本身在疯狂的学习新知识,作好相关笔记和撰写代码。


一我的若是老是本身说本身厉害,那么他就已经再走下坡路了,最近很浮躁,少发点朋友圈和说说吧,更须要不忘初心,砥砺前行。珍惜每一段学习时光,也享受公交车的视频学习之路,加油,最近兴起的傲娇和看重基金之心快离去吧,日常心才是更美,固然娜最美,早安。

(By:Eastmount 2018-05-31 早上10点  http://blog.csdn.net/eastmount/ )