深度学习的发展历程

2024-09-05 12:28
文章标签 学习 发展 深度 历程

本文主要是介绍深度学习的发展历程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习的起源

       在机器学习中,我们经常使用两种方式来表示特征:局部表示(Local Representation)和分布式表示(Distributed Representation)。以颜色表示为例,见下图:

       要学习到一种好的高层语义表示(一般为分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到。深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力。因此,表示学习的关键是构建具有一定深度的多层次特征表示[Bengio et al., 2013]。在传统的机器学习中,也有很多有关特征学习的方法,比如主成分分析、线性判别分析、独立成分分析等。但是,传统的特征学习一般是通过人为地设计一些准则,然后根据这些准则来选取有效的特征。特征的学习是和最终预测模型的学习分开进行的,因此学习到的特征不一定可以提升最终模型的性能。

       为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率。所谓“深度”是指原始数据进行非线性特征转换的次数。如果把一个表示学习系统看作一个有向图结构,深度也可以看作从输入节点到输出节点所经过的最长路径的长度。这样我们就需要一种学习方法可以从数据中学习一个“深度模型”,这就是深度学习(Deep Learning,DL)。深度学习是机器学习的一个子问题,其主要目的是从数据中自动学习到有效的特征表示。

       深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示,并进一步输入到预测函数得到最终结果。和“浅层学习”不同,深度学习需要解决的关键问题是贡献度分配问题(Credit Assignment Problem,CAP)[Minsky, 1961]。

神经网络的发展

神经网络的发展大致经过五个阶段。

第一阶段:模型提出

第一阶段为1943年~1969年,是神经网络发展的第一个高潮期。在此期间,科学家们提出了许多神经元模型和学习规则。

        1943 年,心理学家 Warren McCulloch 和数学家 Walter Pitts 最早提出了一 种基于简单逻辑运算的人工神经网络,这种神经网络模型称为MP模型,至此开启了人工神经网络研究的序幕。1948 年,Alan Turing 提出了一种“B 型图灵机”。“B 型图灵机”可以基于Hebbian法则来进行学习。1951 年,McCulloch和 Pitts 的学生 Marvin Minsky 建造了第一台神经网络机SNARC。1958年,Rosenblatt提出了一种可以模拟人类感知能力的神经网络模型,称为感知器(Perceptron),并提出了一种接近于人类学习过程(迭代、试错)的学习算法。

       在这一时期,神经网络以其独特的结构和处理信息的方法,在许多实际应用领域(自动控制、模式识别等)中取得了显著的成效。

第二阶段:冰河期

第二阶段为1969年~1983年,是神经网络发展的第一个低谷期。在此期间,神经网络的研究处于长年停滞及低潮状态。

       1969 年,Marvin Minsky 出版《感知器》一书,指出了神经网络的两个关键缺陷:一是感知器无法处理“异或”回路问题;二是当时的计算机无法支持处理大型神经网络所需要的计算能力。这些论断使得人们对以感知器为代表的神经网络产生质疑,并导致神经网络的研究进入了十多年的“冰河期”。

        但在这一时期,依然有不少学者提出了很多有用的模型或算法。1974 年, 哈佛大学的 Paul Werbos 发明反向传播算法(BackPropagation,BP)[Werbos, 1974],但当时未受到应有的重视。1980年,福岛邦彦提出了一种带卷积和子采样操作的多层神经网络:新知机(Neocognitron)[Fukushima, 1980]。新知机的提出是受到了动物初级视皮层简单细胞和复杂细胞的感受野的启发.但新知机并没有采用反向传播算法,而是采用了无监督学习的方式来训练,因此也没有引起足够的重视。

第三阶段:反向传播算法引起的复兴

第三阶段为1983年~1995年,是神经网络发展的第二个高潮期。这个时期中,反向传播算法重新激发了人们对神经网络的兴趣。

       1983 年,物理学家 John Hopfield 提出了一种用于联想记忆(Associative Memory)的神经网络,称为Hopfield 网络。Hopfield 网络在旅行商问题上取得 了当时最好结果,并引起了轰动。 1984年,Geoffrey Hinton提出一种随机化版本的Hopfield网络,即玻尔兹曼机(Boltzmann Machine)。 

       真正引起神经网络第二次研究高潮的是反向传播算法。20 世纪 80 年代中期,一种连接主义模型开始流行,即分布式并行处理(Parallel Distributed Processing,PDP)模型[McClelland et al., 1986]。反向传播算法也逐渐成为PDP模型的主要学习算法。这时,神经网络才又开始引起人们的注意,并重新成为新的研究热点。随后,[LeCun et al., 1989]将反向传播算法引入了卷积神经网络,并在 手写体数字识别上取得了很大的成功[LeCun et al., 1998]。反向传播算法是迄今最为成功的神经网络学习算法。目前在深度学习中主要使用的自动微分可以看作反向传播算法的一种扩展。

       然而,梯度消失问题(Vanishing Gradient Problem)阻碍神经网络的进一 步发展,特别是循环神经网络。为了解决这个问题,[Schmidhuber, 1992]采用两步来训练一个多层的循环神经网络:

       1)通过无监督学习的方式来逐层训练每一 层循环神经网络,即预测下一个输入;

       2)通过反向传播算法进行精调。

第四阶段:流行度降低

第四阶段为 1995 年~2006 年,在此期间,支持向量机和其他更简单的方法(例如线性分类器)在机器学习领域的流行度逐渐超过了神经网络。

       虽然神经网络可以很容易地增加层数、神经元数量,从而构建复杂的网络, 但其计算复杂性也会随之增长。当时的计算机性能和数据规模不足以支持训练大规模神经网络。在 20 世纪 90 年代中期,统计学习理论和以支持向量机为代表的机器学习模型开始兴起。相比之下,神经网络的理论基础不清晰、优化困难、可解释性差等缺点更加凸显,因此神经网络的研究又一次陷入低潮。

第五阶段:深度学习的崛起

第五阶段为从 2006 年开始至今,在这一时期研究者逐渐掌握了训练深层神经网络的方法,使得神经网络重新崛起。

        [Hinton et al., 2006] 通过逐层预训练来学习一个深度信念网络,并将其权重作为一个多层前馈神经网络的初始化权重,再用反向传播算法进行精调。这 种“预训练 + 精调”的方式可以有效地解决深度神经网络难以训练的问题。随着深度神经网络在语音识别[Hinton et al., 2012]和图像分类[Krizhevsky et al., 2012]等任务上的巨大成功,以神经网络为基础的深度学习迅速崛起。近年来,随着大规模并行计算以及 GPU 设备的普及,计算机的计算能力得以大幅提高。此外,可供机器学习的数据规模也越来越大。在强大的计算能力和海量的数据规模支持下,计算机已经可以端到端地训练一个大规模神经网络,不再需要借助预训练的方式。各大科技公司都投入巨资研究深度学习,神经网络迎来第三次高潮。

总结

       深度学习以神经网络为主要模型,一开始用来解决机器学习中的表示学习问题。但是由于其强大的能力,其后深度学习越来越多地用来解决一些通用人工智能问题,比如推理、决策等,广泛应用于车牌识别、人脸识别、语音识别、智能助手、推荐系统、自动驾驶等领域。

这篇关于深度学习的发展历程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138954

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499