AI从业者需要应用的10种深度学习方法(上)

2024-04-12 19:48

本文主要是介绍AI从业者需要应用的10种深度学习方法(上),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif

在过去十年中,人们对机器学习的兴趣激增。几乎每天,我们都可以在各种各样的计算机科学课程、行业会议、华尔街日报等等看到有关机器学习的讨论。在所有关于机器学习的讨论中,许多人把机器学习能做的事情和他们希望机器学习做的事情混为一谈。从根本上讲,机器学习是使用算法从原始数据中提取信息,并在某种类型的模型中表示这些信息。我们使用这个模型来推断还没有建模的其他数据。

神经网络是机器学习的一种模型,它们至少有50年历史了。神经网络的基本单元是节点(node),基本上是受哺乳动物大脑中的生物神经元启发。神经元之间的连接也以生物的大脑为模型,这些连接随着时间的推移而发展的方式是为“训练”。

在20世纪80年代中期和90年代初期,许多重要的模型架构进步都是在神经网络中进行的。然而,为了获得良好性能所需的时间和数据越来越多,这极大的降低了研究人员的兴趣。在21世纪初期,计算能力呈指数级增长,研究人员看到了计算机技术的“寒武纪爆发”。作为该领域的一个重要竞争者——深度学习,因为计算能力的爆炸式增长,赢得了许多重要的机器学习竞赛。截至目前,这种趋势仍然没有减退;今天,我们看到机器学习的每个角落都提到了深度学习。

为了让自己赶上潮流,我参加了Udacity的“深度学习”的课程,这个课程很好的介绍了深度学习的动机以及如何从TensorFlow中学习对大规模数据集学习的智能系统设计介绍。在课堂上,我开发了用于图像识别的卷积神经网络、用于自然语言处理的嵌入式神经网络,以及使用循环神经网络/长短期记忆网络的字符级文本生成。你们可以在Jupiter Notebook适用代码,所有代码都能在这个GitHub存储库中找到。

最近,我又开始阅读有关该深度学习的学术论文。根据我的研究,以下是一些对该领域的发展产生巨大影响的出版物:

· 纽约大学基于梯度的学习应用于文档识别(1998),它将卷积神经网络引入机器学习世界。

· 多伦多大学的Deep Boltzmann Machines(2009),它为Boltzmann机器提供了一种新的学习算法,包含许多隐藏变量层。

· 斯坦福和谷歌使用大规模无监督学习构建高级功能(2012),解决了仅使用未标记数据构建高级,类特定功能检测器的问题。

· Berkeley的DeCAF-一种用于通用视觉识别的深度卷积激活功能(2013),它发布了DeCAF,这是一种深度卷积激活功能的开源实现,以及所有相关的网络参数,使视觉研究人员能够进行深度实验跨越一系列视觉概念学习范例的表示。

· DeepMind使用Deep Reinforcement Learning(2016)播放Atari,它提供了第一个深度学习模型,可以使用强化学习直接从高维感觉输入成功学习控制策略。

通过研究和学习论文,我学到了很多关于深度学习的丰富知识。在这里,我想分享AI工程师可以应用于机器学习问题的10种强大的深度学习方法。但首先,让我们来定义深度学习是什么。深度学习对于许多人来说是一个挑战,因为它的形式在过去十年中逐渐发生了改变。为了向各位更好的说明深层学习的地位,下图说明了人工智能,机器学习和深度学习之间关系的概念。

 

640?wx_fmt=png

 

人工智能领域很广泛,并且已经存在了很长时间。深度学习是机器学习领域的一个子集,而机器学习只是人工智能的一个子领域。将深度学习网络与之前的前馈多层网络进行区分:

· 深度学习比以前的网络更多的神经元;

· 深度学习中有更复杂的连接层的方式;

· “寒武纪爆炸”的提供的计算能力;

· 深度学习可以自动进行特征提取。

当我说到“更多神经元”时,是指近年来神经元的数量不断增加,深度学习就可以表示更为复杂的模型。层也从多层网络中每一层的完全连接,进化成卷积神经网络中神经元片段的局部连接,以及与递归神经网络中的同一神经元的循环连接(与前一层的连接除外)。

深度学习可以被定义为具有大量参数和层数的神经网络:

· 无人监督的预训练网络;

· 卷积神经网络;

· 循环神经网络;

· 递归神经网络。

在这篇文章中,我主要对后三种网络进行讲解。卷积神经网络(CNN)基本上式已经跨越使用共享权重的空间延伸的标准神经网络。CNN旨在通过在内部的卷积来识别图像,该卷积看到图像上识别对象的边缘。递归神经网络基本上是一个使用时间延伸扩展空间的标准神经网络,它提取进入下一时间步的边沿,而不是在同一时间进入下一层。RNN进行序列识别,例如语音或文本信号,因其内部具有循环,意味着在RNN网络中存在短时记忆。递归神经网络更类似于分层网络,其中输入序列实际上与时间无关,但输入必须以树状方式分层处理。下面的10种方法可以应用于所有这些架构。

1-反向传播

Back-prop反向传播只是一种简单计算函数的偏导数的方法,它具有函数组合的形式(如神经网络中)。当你使用基于梯度的方法解决最优化问题(梯度下降只是其中之一)时,你希望在每次迭代时计算函数渐变,这个时候它便可以发挥作用。

 

640?wx_fmt=png

 

对于神经网络,其目标函数具有组合的形式。你如何计算梯度?有两种常见的方法可以做到:(i)分析微分法。如果你知道函数的形式,你只需使用链式规则(基本微积分)计算导数。(ii)有限差分的近似微分。该方法在计算上是昂贵的,因为评估函数的数量是O(N),其中N是参数的数量。与解析微分相比,这种方法的计算成本是昂贵的。在调试时,通常使用有限差分验证反向传播的执行效果。

2-随机梯度下降

想象梯度下降的直观方式是想象一条源自山顶的河流的路径。梯度下降的目标正是河流努力实现的目标,即从山顶流到最低点。

现在,如果山的地形形状使得河流在到达其最终目的地之前不必完全停在任何地方,这是我们想要的理想情况。在机器学习中,这相当于说,我们已经从初始点(山顶)开始找到解决方案的全局最小值(或最优值)。然而,可能由于地形性质,导致河流路径出现若干的坑洼,会迫使河流困住和停滞。在机器学习方面,这种坑洼被称为局部最优解,这是我们不想要的情况。当然有很多方法可以解决局部最优解问题,这里我不打算进一步讨论。

 

640?wx_fmt=png

 

因此,梯度下降倾向于陷入局部最小值,这取决于地形的性质(或ML术语中的函数)。但是,当你有一种特殊的山地形状(形状像一个碗,用ML术语称为凸函数)时,算法始终能够找到最优值。你可以想象将这条河流可视化。在机器学习中,这些特殊的地形(也称为凸函数)总是需要优化的。另外,你从山顶开始(即函数的初始值)的位置不同,最终你到达山底的路径也完全不同。同样,根据河流的流淌速度(即梯度下降算法的学习速率或步长),你可能会以不同的方式到达目的地。你是否会陷入或避免一个坑(局部最小),都会被这两个标准影响。

3-学习速率衰减

 

640?wx_fmt=png

 

调整随机梯度下降优化程序的学习速率可以提高性能并缩短训练时间。有时这也被称为学习率退火或自适应学习率。在训练期间最简单且最常用的学习率调整是随时间降低学习率的技术。在训练初期使用较大的学习速率值,可以对学习速率进行大幅调整;在训练后期,降低学习速率,使模型以一个较小的速率进行权重的更新。这种技术在早期可以快速学习获得一些较好的权重,并在后期对权重进行微调。

两种流行且易于使用的学习率衰减如下:

· 在每个环节逐渐降低学习率。

· 在特定时期使用大幅下降来降低学习速率。

4-Dropout

具有大量参数的深度神经网络是非常强大的机器学习系统。然而,过度拟合是这种网络中的严重问题。大型网络使用起来也很慢,因此在测试时将许多不同的大型神经网络的预测结合起来很难处理过度拟合。Dropout就是一种解决此问题的技术。

 

640?wx_fmt=png

 

关键思想是在训练期间从神经网络中随机删除单元及其连接,这可以防止单元间的过度适应。在训练期间,从指数数量的不同“稀疏”网络中抽取样本。在测试时,通过简单地使用具有较小权重的单解开网络(untwinednetwork),很容易近似平均所有这些稀疏网络以达到预测的效果。这显着减少了过度拟合,并且比其他正则化方法表现的更好。Dropout已被证明可以改善神经网络在计算机视觉,语音识别,文档分类和计算生物学等领域的监督学习任务的性能,并在许多基准数据集上获得最先进的结果。

5-最大池化

最大池化是基于样本的离散化过程。目的是对输入表示(图像、隐藏层输出矩阵等)进行下采样,通过降低其维数并允许对包含在子区域中的特征进行合并。

6、通过提供表征的抽象形式,这种方法在某种程度上有助于解决过拟合。同样,它也通过减少学习参数的数量和提供基本的内部表征的转换不变性来减少计算量。最大池化是通过将最大过滤器应用于通常不重叠的初始表征子区域来完成的。
 

下期我们将介绍另外五种,敬请期待!

文章原文:《the-10-deep-learning-methods-ai-practitioners-need-to-apply

作者: James Le 译者:虎说八道  

来源:网络大数据

640?wx_fmt=gif

640?wx_fmt=jpeg


点击下方“阅读原文”了解【人工智能服务器】 ↓↓↓

这篇关于AI从业者需要应用的10种深度学习方法(上)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接