当前位置: 首页 > article >正文

深度学习面试题二

66、通过一张张动图形象的理解LSTM

LSTM ——是一种特殊 RNN 类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多应用问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。然而LSTM结构复杂,初学者难于理解,本文通过动图形象直观的理解LSTM。

一、短时记忆

RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。

因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。在反向传播期间,RNN 会面临梯度消失的问题。 梯度是用于更新神经网络的权重值,消失的梯度问题是当梯度随着时间的推移传播时梯度下降,如果梯度值变得非常小,就不会继续学习。

因此,在递归神经网络中,获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。

67、如何理解反向传播算法BackPropagation
一 前言

最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进行补充,但是补充的又是错的,难怪觉得有问题。

反向传播法其实是神经网络的基础了,但是很多人在学的时候总是会遇到一些问题,或者看到大篇的公式觉得好像很难就退缩了,其实不难,就是一个链式求导法则反复用。如果不想看公式,可以直接把数值带进去,实际的计算一下,体会一下这个过程之后再来推导公式,这样就会觉得很容易了。

二、简单的神经网络

说到神经网络,大家看到这个图应该不陌生:

这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,我们现在手里有一堆数据{x1,x2,x3,…,xn},输出也是一堆数据{y1,y2,y3,…,yn},现在要他们在隐含层做某种变换,让你把数据灌进去后得到你期望的输出。如果你希望你的输出和原始输入一样,那么就是最常见的自编码模型(Auto-Encoder)。

可能有人会问,为什么要输入输出都一样呢?有什么用啊?其实应用挺广的,在图像识别,文本分类等等都会用到,我会专门再写一篇Auto-Encoder的文章来说明,包括一些变种之类的。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据,也就是我们今天要讲的话题。

68、请问什么是softmax函数?

69、通俗理解BN(Batch Normalization)
深度学习流程简介

1)一次性设置(One time setup)

  • 激活函数(Activation functions)

  • 数据预处理(Data Preprocessing)

  • 权重初始化(Weight Initialization)

  • 正则化(Regularization:避免过拟合的一种技术)

  • 梯度检查(Gradient checking)

2)动态训练(Training dynamics)

  • 跟踪学习过程 (Babysitting the learning process)

  • 参数更新 (Parameter updates)

  • 超级参数优化(Hyperparameter optimization)

  • 批量归一化(BN:Batch Normalization:解决在训练过程中,中间层数据分布发生改变的问题,以防止梯度消失或爆炸、加快训练速度)

3)评估(Evaluation)

  • 模型组合(Model ensembles)

(训练多个独立的模型,测试时,取这些模型结果的平均值)

神经网络学习过程本质就是为了:学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低,所以需要使用输入数据归一化方法,使训练数据与测试数据的分布相同。

  1. 激活函数(Activation Functions)

总结:

1)使用ReLU时,使Learning Rates尽量小

2)尝试使用Leaky ReLU/Maxout/ELU

3)可以使用tanh,但期望不要太高

4)不要使用sigmoid

70、批量归一化BN到底解决了什么问题?
BN是由Google于2015年提出,这是一个深度神经网络训练的技巧,它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散”的问题,从而使得训练深层网络模型更加容易和稳定。所以目前BN已经成为几乎所有卷积神经网络的标配技巧了。

从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化,确实如此,对于训练中某一个batch的数据{x1,x2,…,xn},注意这个数据是可以输入也可以是网络中间的某一层输出。在BN出现之前,我们的归一化操作一般都在数据输入层,对输入的数据进行求均值以及求方差做归一化,但是BN的出现打破了这一个规定,我们可以在网络中任意一层进行归一化处理,因为我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化操作就成为Batch Normalization。

我们为什么需要BN?我们知道网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。

以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。BN的提出,就是要解决在训练过程中,中间层数据分布发生改变的情况。

71、如何理解随机梯度下降,以及为什么SGD能够收敛?
本题解析来源于:如何理解随机梯度下降(stochastic gradient descent,SGD)?

理解随机梯度下降,首先要知道梯度下降法,故先介绍梯度下降法:

梯度下降法

大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变以最小化或最大化某个函数的任务。 我们通常以最小化指代大多数最优化问题。 最大化可经由最小化算法最小化来实现。

我们把要最小化或最大化的函数称为目标函数或准则。 当我们对其进行最小化时,我们也把它称为代价函数、损失函数或误差函数。

72、模拟退火算法能解决陷入局部最优的问题么
著名的模拟退火算法,它是一种基于蒙特卡洛思想设计的近似求解最优化问题的方法。

一点历史——如果你不感兴趣,可以跳过

美国物理学家 N.Metropolis 和同仁在1953年发表研究复杂系统、计算其中能量分布的文章,他们使用蒙特卡罗模拟法计算多分子系统中分子的能量分布。这相当于是本文所探讨之问题的开始,事实上,模拟退火中常常被提到的一个名词就是Metropolis准则,后面我们还会介绍。

美国IBM公司物理学家 S.Kirkpatrick、C. D. Gelatt 和 M. P. Vecchi 于1983年在《Science》上发表了一篇颇具影响力的文章:《以模拟退火法进行最优化(Optimization by Simulated Annealing)》。他们借用了Metropolis等人的方法探讨一种旋转玻璃态系统(spin glass system)时,发觉其物理系统的能量和一些组合最优(combinatorial optimization)问题(著名的旅行推销员问题TSP即是一个代表例子)的成本函数相当类似:寻求最低成本即似寻求最低能量。由此,他们发展出以 Metropolis 方法为本的一套算法,并用其来解决组合问题等的寻求最优解。

几乎同时,欧洲物理学家 V.Carny 也发表了几乎相同的成果,但两者是各自独立发现的;只是Carny“运气不佳”,当时没什么人注意到他的大作;或许可以说,《Science》杂志行销全球,“曝光度”很高,素负盛名,而Carny却在另外一本发行量很小的专门学术期刊《J.Opt.Theory Appl.》发表其成果因而并未引起应有的关注。

Kirkpatrick等人受到Metropolis等人用蒙特卡罗模拟的启发而发明了“模拟退火”这个名词,因为它和物体退火过程相类似。寻找问题的最优解(最值)即类似寻找系统的最低能量。因此系统降温时,能量也逐渐下降,而同样意义地,问题的解也“下降”到最值。

73、请说下常见优化方法各自的优缺点(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢?
在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下:

https://arxiv.org/pdf/1609.04747.pdf
本文将梳理:
每个算法的梯度更新规则和缺点
为了应对这个不足而提出的下一个算法
超参数的一般设定值
几种算法的效果比较
选择哪种算法

74、Adam 算法的原理机制是怎么样的?它与相关的 AdaGrad 和 RMSProp 方法有什么区别
深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生!

Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了 Adam 优化算法的特性和其在深度学习中的应用,后一部分从 Adam 优化算法的原论文出发,详细解释和推导了它的算法过程和更新规则。

我们希望读者在读完两部分后能了解掌握以下几点:

Adam 算法是什么,它为优化深度学习模型带来了哪些优势。

Adam 算法的原理机制是怎么样的,它与相关的 AdaGrad 和 RMSProp 方法有什么区别。

Adam 算法应该如何调参,它常用的配置参数是怎么样的。

Adam 的实现优化的过程和权重更新规则

Adam 的初始化偏差修正的推导Adam 的扩展形式:AdaMax

75、什么是强化学习?
强化学习(Reinforcement Learning, RL),又称增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。

76、强化学习和监督学习、无监督学习的区别是什么?
监督学习一般有标签信息,而且是单步决策问题,比如分类问题。监督学习的样本一般是独立同分布的。无监督学习没有任何标签信息,一般对应的是聚类问题。强化学习介于监督和无监督学 习之间,每一步决策之后会有一个标量的反馈信号,即回报。通过最大化回报以获得一个最优策略。 因此强化学习一般是多步决策,并且样本之间有强的相关性。

77、强化学习适合解决什么样子的问题?
强化学习适合于解决模型未知,且当前决策会影响环境状态的(序列)决策问题。

78、使用tensorflow进行深度学习算法实验时,如何调节超参数?
一般是根据经验手动调参,二分查找,参考论文经验参数等。如果是搜索超参的话,可以使用的方法有:网格搜索、随机搜索、启发式算法搜索和遗传算法搜索。

79、深度学习中的batch的大小对学习效果有何影响?
谈谈深度学习中的 Batch_Size

Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。

首先,为什么需要有 Batch_Size 这个参数?

Batch 的选择,首先决定的是下降的方向。如果数据集比较小,完全可以采用全数据集 ( Full Batch Learning )的形式,这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用Rprop 只基于梯度符号并且针对性单独更新各权值。

对于更大的数据集,以上 2 个好处又变成了 2 个坏处:其一,随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。其二,以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。

既然 Full Batch Learning 并不适用大数据集,那么走向另一个极端怎么样?

所谓另一个极端,就是每次只训练一个样本,即 Batch_Size = 1。这就是在线学习(Online Learning)。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元、非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。


http://www.kler.cn/a/398945.html

相关文章:

  • 任意文件下载漏洞
  • HTML5+CSS前端开发【保姆级教学】+新闻文章初体验
  • JS的学习与使用
  • 【软件测试】设计测试用例的万能公式
  • SOP搭建:企业标准化操作程序构建与实施指南
  • LLMs 训练经验篇
  • JavaWeb--MySQL
  • 聚合查询(查询)
  • 使用 Prompt API 与您的对象聊天
  • [Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
  • 基于Java Springboot学生管理系统
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤
  • 2024 Visual Studio Code的下载与安装
  • NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】
  • 前端框架 详解遍历数组为何需要加Key
  • 简单的爬虫脚本编写
  • 每日计划-1117
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • 【MySQL-1】MySQL数据库的基本操作
  • 如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?
  • Linux:版本控制器git和调试工具cgdb
  • react+hook+vite项目使用eletron打包成桌面应用+可以热更新
  • 使用 Python 和 Selenium 解决 hCaptcha:完整指南
  • fastadmin常用操作
  • 推荐一款功能强大的光学识别OCR软件:Readiris Dyslexic
  • YOLO-SLD: An Attention Mechanism-ImprovedYOLO for License Plate Detection