Python适合什么层次的人学习呀?难吗?

2020-03-31 15:09发布

2条回答
卡卡
2楼 · 2020-11-13 11:50





《DeepLearningwithPython》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(FrançoisChollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。本书以读书笔记的形式摘抄书中的重点,会加入一些自己的备注和理解(标红及斜体)。编程语言:Python深度学习框架:Keras书籍下载:《Python深度学习》注:这本书,偏重于快速上手,本身用keras写深度学习代码,就是类似搭积木一般,对于深度学习原理各部分讲解不多。如果想稍深入的了解深度学习中的反向传播算法、归一化、优化算法等问题,还需要学习吴恩达的机器学习教程:吴恩达老师的深度学习系列视频吴恩达老师深度学习笔记整理

人工智能、机器学习、深度学习

又是下面这个经典的图:

人工智能

人工智能诞生于20世纪50年代,人工智能的简洁定义如下:努力将通常由人类完成的智力任务自动化。

机器学习

人工智能先驱阿兰•图灵在其1950年发表的具有里程碑意义的论文“计算机器和智能”,图灵在这篇论文中介绍了图灵测试以及日后人工智能所包含的重要概念。机器学习系统是训练出来的,而不是明确地用程序编写出来的。将与某个任务相关的许多示例输入机器学习系统,它会在这些示例中找到统计结构,从而最终找到规则将任务自动化。

虽然机器学习在20世纪90年代才开始蓬勃发展,但它迅速成为人工智能最受欢迎且最成功的分支领域。

从数据中学习表示

为了给出深度学习的定义并搞清楚深度学习与其他机器学习方法的区别,我们首先需要知道机器学习算法在做什么。我们需要以下三个要素来进行机器学习。

输入数据点。例如,你的任务是语音识别,那么这些数据点可能是记录人们说话的声音文件。如果你的任务是为图像添加标签,那么这些数据点可能是图像。(输入)预期输出的示例。对于语音识别任务来说,这些示例可能是人们根据声音文件整理生成的文本。对于图像标记任务来说,预期输出可能是“狗”“猫”之类的标签。(输出)衡量算法效果好坏的方法。这一衡量方法是为了计算算法的当前输出与预期输出的差距。(损失\目标\代价函数)

衡量结果是一种反馈信号,用于调节算法的工作方式。这个调节步骤就是我们所说的学习。机器学习模型将输入数据变换为有意义的输出,这是一个从已知的输入和输出示例中进行“学习”的过程。因此,机器学习和深度学习的核心问题在于有意义地变换数据,换句话说,在于学习输入数据的有用表示(representation)——这种表示可以让数据更接近预期输出。

机器学习的技术定义:在预先定义好的可能性空间中,利用反馈信号的指引来寻找输入数据的有用表示。

深度学习之“深度”

深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的**层(layer)**中进行学习,这些层对应于越来越有意义的表示。

“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度(depth)。这一领域的其他名称包括分层表示学习(layeredrepresentationslearning)和层级表示学习(hierarchicalrepresentationslearning)。现代深度学习通常包含数十个甚至上百个连续的表示层,这些表示层全都是从训练数据中自动学习的。与此相反,其他机器学习方法的重点往往是仅仅学习一两层的数据表示,因此有时也被称为浅层学习(shallowlearning)。

在深度学习中,这些分层表示几乎总是通过叫作**神经网络(neuralnetwork)**的模型来学习得到的。**深度学习模型不是大脑模型。**没有证据表明大脑的学习机制与现代深度学习模型所使用的相同。

深度学习的技术定义:学习数据表示的多级方法。即深度学习,可以理解为利用深层神经网络的机器学习。

深度学习的工作原理

下面这张图是这一章的精华:

神经网络由其权重来参数化:神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize)。权重有时也被称为该层的参数(parameter)。注意参数与超参数的区别损失函数用来衡量网络输出结果的质量:损失函数(lossfunction)的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏。此处损失函数等价于目标\代价函数(objectivefunction\costfunction),不同于吴恩达课程将损失值作为反馈信息来调节权重:深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示例对应的损失值。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。

一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(trainingloop),将这种循环重复足够多的次数(通常对数千个示例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络。

深度学习已经取得的进展

不要相信短期炒作,相信人工智能的未来

**不要相信短期的炒作,但一定要相信长期的愿景。**人工智能可能需要一段时间才能充分发挥其潜力。这一潜力的范围大到难以想象,但人工智能终将到来,它将以一种奇妙的方式改变我们的世界。

深度学习之前:机器学习简史

了解这部分历史,对于各种算法的比较及其发展有很大帮助

概率建模probabilisticmodeling

概率建模(probabilisticmodeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。

其中最有名的算法之一就是朴素贝叶斯算法。这种数据分析方法比计算机出现得还要早,在其第一次被计算机实现(很可能追溯到20世纪50年代)的几十年前就已经靠人工计算来应用了。贝叶斯定理和统计学基础可以追溯到18世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。

另一个密切相关的模型是logistic回归(logisticregression,简称logreg),它有时被认为是现代机器学习的“helloworld”。面对一个数据集,数据科学家通常会首先尝试使用这个算法,以便初步熟悉手头的分类任务。注意,logistic回归是分类算法,名称中含回归是历史原因

早期神经网络neuralnetwork

虽然人们早在20世纪50年代就将神经网络作为玩具项目,并对其核心思想进行研究,但这一方法在数十年后才被人们所使用。在很长一段时间内,一直没有训练大型神经网络的有效方法。这一点在20世纪80年代中期发生了变化,当时很多人都独立地重新发现了反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法,并开始将其应用于神经网络。

贝尔实验室于1989年第一次成功实现了神经网络的实践应用,当时YannLeCun将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为LeNet的网络,在20世纪90年代被美国邮政署采用,用于自动读取信封上的邮政编码。1998年,经典的LeNet-5,对手写数字做分类。

核方法kernelmethod

上节所述神经网络取得了第一次成功,并在20世纪90年代开始在研究人员中受到一定的重视,但一种新的机器学习方法在这时声名鹊起,很快就使人们将神经网络抛诸脑后。这种方法就是核方法(kernelmethod)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM,supportvectormachine)。

SVM的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decisionboundary)来解决分类问题。SVM刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释,SVM就是其中之一。由于SVM具有这些有用的性质,很长一段时间里它在实践中非常流行。

但是,SVM很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。

SVM是一种强分类器,特别适用于解决二分类问题。对于数据量适中(1w-5w左右),表现的效果比较好。SVM的核心在于找到使间隔最大化的分隔超平面。

决策树DT、随机森林RF与梯度提升机GBM

决策树(decisiontree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值。在21世纪前十年,从数据中学习得到的决策树开始引起研究人员的广泛关注。到了2010年,决策树经常比核方法更受欢迎。

特别是随机森林(randomforest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题——对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。广受欢迎的机器学习竞赛网站Kaggle在2010年上线后,随机森林迅速成为平台上人们的最爱,直到2014年才被梯度提升机所取代。

与随机森林类似,梯度提升机(gradientboostingmachine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。随机森林和梯度提升机都是集成学习中的代表算法。

回到神经网络neuralnetwork

真正的转折性时刻出现在2012年,当年Hinton小组参加了每年一次的大规模图像分类挑战赛ImageNet(ImageNet大规模视觉识别挑战赛(ILSVRC))。

2012年,由AlexKrizhevsky带领并由GeoffreyHinton提供建议的小组,实现了83.6%的top-5精度——这是一项重大突破。经典的ALexNet网络此后,这项竞赛每年都由深度卷积神经网络所主导。到了2015年,获胜者的精度达到了96.4%,此时ImageNet的分类任务被认为是一个已经完全解决的问题。

深度学习有何不同

深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。其实也没有完全自动化,只是减化了特征工程,毕竟在其他机器学习算法中,特征工程师特别重要的一步,步骤繁多且重要。

深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督。

深度学习从数据中进行学习时有两个基本特征:第一,通过渐进的、逐层的方式形成越来越复杂的表示;第二,对中间这些渐进的表示共同进行学习。

机器学习现状

要想了解机器学习算法和工具的现状,一个好方法是看一下Kaggle上的机器学习竞赛。

要想在如今的应用机器学习中取得成功,你应该熟悉这两种技术:梯度提升机,用于浅层学习问题;深度学习,用于感知问题。用术语来说,你需要熟悉XGBoost和Keras,它们是目前主宰Kaggle竞赛的两个库。

为什么是深度学习,为什么是现在

深度学习用于计算机视觉的两个关键思想,即卷积神经网络和反向传播,在1989年就已经为人们所知。长短期记忆(LSTM,longshort-termmemory)算法是深度学习处理时间序列的基础,它在1997年就被开发出来了,而且此后几乎没有发生变化。那么为什么深度学习在2012年之后才开始取得成功?这二十年间发生了什么变化?总的来说,三种技术力量在推动着机器学习的进步:

硬件GPU以及TPU数据集和基准如今,大公司使用的图像数据集、视频数据集和自然语言数据集,没有互联网的话根本无法收集。例如,Flickr网站上用户生成的图像标签一直是计算机视觉的数据宝库。YouTube视频也是一座宝库。维基百科则是自然语言处理的关键数据集。算法上的改进更好的神经层激活函数(activationfunction)、更好的权重初始化方案(weight-initializationscheme)、更好的优化方案(optimizationscheme),比如RMSProp和Adam。


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问