【Python深度学习(第二版)(2)】深度学习之前:机器学习简史

文章目录

  • 一. 深度学习的起源
    • 1. 概率建模--机器学习分类器
    • 2. 早期神经网络--反向传播算法的转折
    • 3. 核方法 -- 忽略神经网络
    • 4. 决策树、随机森林和梯度提升机
    • 5. 神经网络替代svm与决策树
  • 二. 深度学习与机器学习有何不同

可以这样说,当前工业界所使用的大部分机器学习算法不是深度学习算法。深度学习不一定总是解决问题的正确工具:有时没有足够的数据,深度学习不适用;有时用其他算法可以更好地解决问题。

如果第一次接触的机器学习就是深度学习,那么你可能会发现手中只有一把深度学习“锤子”,而所有机器学习问题看起来都像是“钉子”。为了避免陷入这个误区,唯一的方法就是熟悉其他机器学习方法并在适当的时候进行实践。

这里我们将简要回顾这些方法,并了解这些方法发展的历史背景。这样一来,我们便可以将深度学习放入机器学习的大背景中,更好地理解深度学习的起源和重要性。

 

一. 深度学习的起源

1. 概率建模–机器学习分类器

概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。在概率建模中,最著名的算法之一就是朴素贝叶斯算法。

朴素贝叶斯是一类机器学习分类器,基于对贝叶斯定理的应用。它假设输入数据的特征都是独立的(这是一个很强的假设,或者说是“朴素”的假设,其名称正来源于此)。贝叶斯定理和统计学基础可以追溯到18世纪,只要学会这两点,就可以开始使用朴素贝叶斯分类器了。

另一个密切相关的模型是logistic回归(logistic regression,简称logreg),它有时被认为是现代机器学习的“Hello World”。不要被它的名称所误导——logreg是一种分类算法,而不是回归算法。与朴素贝叶斯类似,logreg的出现也比计算机早很长时间,但由于它既简单又通用,因此至今仍然很有用。面对一项分类任务,数据科学家通常首先会在数据集上尝试使用这种算法,以便初步熟悉该分类任务。

 

2. 早期神经网络–反向传播算法的转折

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

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

 

3. 核方法 – 忽略神经网络

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

SVM是一种分类算法,其原理是寻找划分两个类别的“决策边界”,如下图所示。

SVM通过以下两步来寻找决策边界。

  • (1)将数据映射到新的高维表示,此时决策边界可以用一个超平面来表示(如果数据像图那样是二维的,那么超平面就是一条直线)。
  • (2)尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好的决策边界(分离超平面)。这一步叫作间隔最大化(maximizing themargin)。这样一来,决策边界便可以很好地推广到训练数据集之外的新样本。
    在这里插入图片描述

将数据映射到高维表示从而使分类问题简化,这一方法可能听起来很不错,但实际上计算起来很棘手。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。

核技巧的基本思想是:要在新的表示空间中找到良好的决策超平面,不需要直接计算点在新空间中的坐标,只需要计算在新空间中点与点之间的距离,而利用核函数可以高效地完成这种计算。核函数(kernel function)是一个在计算上容易实现的运算,它将初始空间中的任意两点映射为这两点在目标表示空间中的距离,从而完全避免了直接计算新的表示。

SVM刚刚出现时,在简单的分类问题上表现出非常好的性能。当时只有少数机器学习方法得到大量的理论支持,并且经得起严谨的数学分析,因此非常易于理解和解释,SVM就是其中之一。由于SVM具有这些有用的性质,因此它在很长一段时间里非常流行。

但事实证明,SVM很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM是一种浅层方法,因此要将其应用于感知问题,首先需要手动提取出有用的表示(这一步骤叫作特征工程)。这一步骤很难,而且不稳定。如果想用SVM来进行手写数字分类,那么你不能从原始像素开始,而应该首先手动找到有用的表示(比如前面提到的像素直方图),使问题变得更易于处理。

 

4. 决策树、随机森林和梯度提升机

决策树(decision tree)是类似于流程图的结构,可以对输入数据进行分类或根据输入预测输出值,如下图所示。决策树的可视化和解释都很简单。

在21世纪前10年,从数据中进行学习的决策树开始引起研究人员的浓厚兴趣。到了2010年,决策树往往比核方法更受欢迎

在这里插入图片描述

  • 决策树:需要学习的参数是关于数据的问题。举个例子,问题可能是:“数据中第2个系数是否大于3.5?”

  • 随机森林(random forest)算法引入了一种稳健且实用的决策树学习方法,即首先构建许多专门的决策树,然后将它们的输出集成在一起。

  • 与随机森林类似,梯度提升机也是将弱预测模型(通常是决策树)进行集成的机器学习技术。它使用了梯度提升(gradient boosting)方法,这种方法通过迭代地训练新模型来专门弥补原有模型的弱点,从而可以提升任何机器学习模型的效果。将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果更好。它可能是目前处理非感知数据最好的算法之一(如果非要加“之一”的话)。

 

5. 神经网络替代svm与决策树

自2012年以来,深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法。更一般地说,它适用于所有感知任务。在2015年之后的主要计算机视觉会议上,绝大多数演讲或多或少与convnet有关。与此同时,深度学习也在许多其他类型的问题上得到应用,比如自然语言处理。它已经在大量应用中完全取代了SVM与决策树。

举个例子,欧洲核子研究中心(CERN)多年来一直使用基于决策树的方法来分析来自大型强子对撞机(LHC)ATLAS探测器的粒子数据,但CERN最终转向基于Keras的深度神经网络,因为后者的性能更好,而且在大型数据集上易于训练。

 

二. 深度学习与机器学习有何不同

主要不同

  • 深度学习让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。
  • 先前的机器学习技术(浅层学习)仅涉及将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。但这些技术通常无法得到复杂问题所需要的精确表示。因此,人们不得不竭尽所能让初始输入数据更适合于用这些方法处理,不得不手动为数据设计良好的表示层。这一步叫作特征工程(feature engineering)。
  • 与此相对,深度学习将这一步完全自动化:利用深度学习,可以一次性学习所有特征,而无须自己手动设计。这极大地简化了机器学习工作流程,通常用一个简单、端到端的深度学习模型取代复杂的多级流程。

<连续应用浅层学习方法的问题>

  • 你可能会问,如果问题的关键在于有多个连续表示层,那么能否重复应用浅层方法,以实现与深度学习类似的效果呢?在实践中,如果连续应用浅层学习方法,那么其收益会随着层数增加而迅速降低,因为三层模型中最优的第一表示层并不是单层模型或双层模型中最优的第一表示层。
  • 深度学习的变革之处在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,每当模型修改某个内部特征时,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督:模型中的每一处变化都是为最终目标服务。这种方法比贪婪地叠加浅层模型更强大,因为它可以通过将复杂、抽象的表示拆解为多个中间空间(层)来学习这些表示,每个中间空间仅仅是前一个空间的简单变换。

深度学习从数据中进行学习时有两个基本特征:

  1. 通过逐层渐进的方式形成越来越复杂的表示;
  2. 对中间这些渐进的表示共同进行学习,每一层的修改都需要同时考虑上下两层。

这两个特征叠加在一起,使得深度学习比先前的机器学习方法更成功。

 

参考:
《Python深度学习(第二版)》–弗朗索瓦·肖莱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/595156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器端口怎么查,服务器端口查看方法详解

服务器端口是网络通信的关键组件&#xff0c;对于网络管理员和系统管理员来说&#xff0c;了解和掌握如何查看服务器端口是非常重要的。接下来介绍两种常用的方法来查看服务器端口。 方法一&#xff1a;使用命令提示符&#xff08;CMD&#xff09; 1. 首先&#xff0c;点击电脑…

JavaScript百炼成仙自学笔记——12

函数七重关之五&#xff08;自执行函数&#xff09; 什么时候用它&#xff1f; 很多时候&#xff0c;我们只想执行一个函数&#xff0c;却无所谓这个函数叫什么名字。那么这种情况下就可以考虑使用自执行函数。 {function(){console.log(123);} }(); 这就是一个简单的自执行的…

视频剪辑:视频文件元数据修改工具,批量操作提升效率和准确性

在视频剪辑和后期处理的过程中&#xff0c;除了对视频本身的编辑和修改&#xff0c;元数据的管理和修改同样重要。元数据&#xff0c;如标题、艺术家、专辑封面等&#xff0c;不仅提供了视频文件的基本信息&#xff0c;还有助于更好地组织、搜索和共享视频内容。而针对视频文件…

dumpsys meminfo 流程中细节

源码基于&#xff1a;Android U 参考&#xff1a; dumpsys meminfo 详解(R) dumpsys meminfo 详解(U) 1. 命令入口 MemBinder frameworks/base/services/core/java/com/android/server/am/AMS.javastatic class MemBinder extends Binder {ActivityManagerService mActivity…

原型模式和建造者模式

1、原型模式 1.1 概念 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 1.2 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽…

链表经典面试题01

目录 引言 面试题01:返回倒数第k个节点 题目描述: 思路分析: 代码展示: 面试题02:链表的回文结构 题目描述: 描述 思路分析: 代码展示: 面试题03:相交链表 题目描述: 思路分析: 代码展示: 小结: 引言 这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示…

二.Django--创建多个APP路由映射

目录 1-创建项目 2-创建多个APP 3-注册APP 4-创建"前端页面"并做路由映射 各个APP里面的views.py写视图函数等等 1-创建项目 django-admin startproject 项目名 django-admin startproject my_project 2-创建多个APP python manage.py startapp app名 pyth…

HttpCilent进行Post请求form-data接口,服务方接收不到参数

结论先行 生成分隔标识boundary在HttpPost中设置Header时带上boundary创建MultipartEntity时需要设置boundary 实现代码如下 /*** param url 调用接口的地址* param paramMap 调用接口传入的方法体参数*/ public static String postDataByFormData(String url, Map<Strin…

【参赛总结】第二届云原生编程挑战赛-冷热读写场景的RocketMQ存储系统设计 - Nico

关联比赛: 2021第二届云原生编程挑战赛1&#xff1a;针对冷热读写场景的RocketMQ存储系统设计 引子 在一个浑浑噩噩的下午&#xff0c;百无聊赖的我像往常一样点开了划水交流群&#xff0c;细细品味着老哥们关于量子力学的讨论。嬉戏间&#xff0c;平常水不拉几的群友张三忽…

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…

OpenGL 入门(二)—— 渲染摄像头采集的预览画面

本篇主要内容&#xff1a; 将摄像头采集到的图像通过 OpenGL 绘制到屏幕上FBO 离屏渲染 在开始上述流程前&#xff0c;我们有必要对 SurfaceTexture 做一个简单了解&#xff0c;因为 OpenGL 需要通过它获取要绘制的图像。 1、认识 SurfaceTexture SurfaceTexture 是 Androi…

【XR806开发板试用】XR806与鸿蒙,创建任务,串口转发TCPServer收到的数据

很荣幸获得评测开发板的机会&#xff0c;XR806的程序资料做的还是挺不错的。 目标&#xff1a; 1、学习用鸿蒙创建2个任务&#xff1b; 2、创建TCP Server收发数据。 任务ledThread&#xff1a;LED每秒亮灭一次&#xff0c;代表程序在运行。 任务MainThread&#xff1a;创建TCP…

Leetcode—377. 组合总和 Ⅳ【中等】

2024每日刷题&#xff08;124&#xff09; Leetcode—377. 组合总和 Ⅳ 算法思想 实现代码 class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<unsigned long long>dp(target 1);dp[0] 1;for(int i 1; i < target;…

echarts柱状图实现左右横向对比

实现效果如上图 其实是两组数据&#xff0c;其中一组数据改为负数&#xff0c;然后 在展示的时候&#xff0c;在将负数取反 第一处修改坐标轴 xAxis: [{type: value,axisLabel: {formatter: function (value) {if (value < 0) {return -value;}else{return value;}}}}], 第…

如何修改图片大小?调整图片大小的几个方法介绍

当我们在不同的应用场景中使用图片的时候&#xff0c;常常会需要去调整图片尺寸来适应不同的要求&#xff0c;还有图片体积大小也会有要求&#xff0c;这时候就需要用到我们今天分享的这款图片在线处理工具了&#xff0c;不管是图片改大小或者图片压缩它都能快速解决&#xff0…

LVGL移植到STM32F4

1、LVGL简介 LittlevGL是一个免费的开源图形库&#xff0c;提供了创建嵌入式GUI所需的一切&#xff0c;具有易于使用的图形元素、漂亮的视觉效果和低内存占用。 1.1、LVGL特点 强大的构建模组&#xff1a;按钮、图表、列表、滑块、图像等先进的图形&#xff1a;动画、反锯齿…

【热门话题】ElementUI 快速入门指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 ElementUI 快速入门指南环境准备安装 ElementUI创建 Vue 项目安装 ElementUI 基…

自然语言(NLP)

It’s time for us to learn how to analyse natural language documents, using Natural Language Processing (NLP). We’ll be focusing on the Hugging Face ecosystem, especially the Transformers library, and the vast collection of pretrained NLP models. Our proj…

STM32单片机实战开发笔记-独立看门狗IWDG

嵌入式单片机开发实战例程合集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码&#xff1a;28ab IWDG模块测试 1、功能描述 STM32F10X内置两个看门狗&#xff0c;提供了更高的安全性&#xff0c;时间的精确下性和使用的灵活性…

微信答题链接怎么做_新手也能快速上手制作

在数字营销日新月异的今天&#xff0c;如何有效吸引用户参与、提升品牌曝光度&#xff0c;成为了每一个营销人都在思考的问题。而微信答题链接&#xff0c;作为一种新兴的互动营销方式&#xff0c;正以其独特的魅力&#xff0c;在营销界掀起一股新的热潮。今天&#xff0c;就让…