深度学习AI面试问答必备50题-算法
(注:这不是面向初学者的文章。您需要一点基础知识来理解本文内容。)
本文精选50个深度学习高频问题,覆盖数据科学、机器学习工程、人工智能及研究科学家面试场景,助您全面应对。
深度学习,作为当今炙手可热的焦点,构筑了大型语言模型与生成式人工智能的基石。这一领域深度融合了线性代数、数学、微分理论等高深知识及前沿算法,是通往人工智能的核心路径。因此,若你有意在大型语言模型或人工智能行业谋职,务必充分备战面试,因为深度学习将是面试官检验你专业素养的关键考点,不容忽视。
在这篇文章中,我们将深入探讨深度学习的基石:前50个关键问题中的首10个基本概念。从深度学习与机器学习的核心区分出发,详解神经网络架构及其内部运作机制——神经元理念。进一步剖析反向传播原理,揭示其与梯度下降(GD)的不同之处及GD的工作原理。同时,我们会介绍各类优化器和激活函数,并深度解读饱和度概念,以及它是如何触发梯度消失问题的。全方位覆盖神经网络训练和测试环节的各个维度。
接下来的10个问题将深度解析反向传播概念,揭示其与梯度下降的紧密联系,并探讨在深度学习模型中常出现的梯度消失和爆炸问题。我们将覆盖面试现场可能遭遇的各种具体疑问,以及与损失函数相关的各类热门议题,包括但不限于深度学习面试中高频出现的多种损失函数解析。
接下来的10题,深度解读SGD算法——GD的尖端升级版。聚焦深度学习面试高频考点:批量GD、小批量GD与SGD的差异剖析,揭示批量大小的关键作用。深入探讨Hessian矩阵在优化算法中的应用,并揭开RMSProp及备受瞩目的Adam算法的神秘面纱。
接下来的10个问题,将深入探讨复杂主题,揭开Adam W算法的神秘面纱,并详解批量归一化的核心概念。我们将对比分析批量归一化与层归一化的差异,展示如何将层归一化无缝融入Transformer架构中。同时,深度解读剩余连接的工作原理及其在解决深度学习难题中的关键作用。还将涉及梯度裁剪、Cavier初始化等技术手段,以应对梯度消失与爆炸问题。最后,我们会揭示过度拟合的本质,助您从容应对深度学习面试挑战。
最后10问深度解析神经网络中的dropout与去正则化策略,直击过度拟合痛点并揭示解决方案。对比dropout与随机森林的差异,生动展现训练与测试阶段退出率调整的艺术。剖析L1、L2正则化的核心差异,深入解读它们对权重惩罚及模型性能优化的影响。进一步探讨维度灾难问题,揭示深度学习如何有效应对。最后,引领读者洞悉生成模型的创新理念。
1 什么是深度学习?
在这个问题中,面试官想了解您是否了解深度学习与机器学习、人工智能相比的优势。您可以简要提及神经网络的概念以及它与人脑的关系。深度学习是机器学习的一个子集,而机器学习又是人工智能的一个子集。这是人工智能的一个分支,涉及训练人工神经网络在大量数据上,以识别和学习数据中的隐藏模式、非线性关系,这是传统机器学习模型(如线性回归或逻辑回归或随机森林和XGBoost)无法做到的。
深度学习的核心是层的概念,因为人工神经网络和一般而言,深度学习试图复制人类大脑的工作方式以及当我们看到、听到或闻到某些东西时拦截和获取来自外界的输入信号的方式。他们利用这些信息进行学习,并据此决定是否得出结论或采取行动。这正是深度学习试图实现的目标。
深度学习尝试采用神经网络的思想,神经网络是深度学习模型的一种,以便在输入层中获取输入数据,然后通过激活函数对其进行转换以激活这些神经元,接着将其转换为激活状态。这一过程将在我们的隐藏层中进行。深度学习模型的神奇之处在于,它能够识别输入数据中的非线性关系,然后产生输出。这是一个非常高级的过程。
面试官并不希望你解释权重和参数的概念,这些我们稍后会讲。但是,面试官希望了解你是否对深度学习有较高的理解,也许还希望你能提供深度学习模型的例子。在讲述这些时,你肯定要提到人类大脑和神经网络之间的关系,以及输入数据、输入信号、激活和隐藏层的概念。不要过多讨论神经网络架构的细节,而是简要提及这些深度学习模型。
深度学习模型的示例包括人工神经网络、循环神经网络、长短期记忆网络(LSTM)、以及更高级的架构,例如变分自动编码器。这些模型都基于神经网络。
深度学习模型,作为人工智能领域机器学习的精英子集,专注于挖掘复杂且大规模数据中的隐藏模式与高级结构。此技术架构广泛应用于各类任务,如计算机视觉、精密机器翻译及自然语言处理,其中备受瞩目的ChatGPT、GPT系列和T5等大型语言模型,均是基于神经网络的深度学习杰作,生动诠释了其强大实力。
2 深度学习与传统的机器学习模型有何不同?
面试官期待你揭示深度学习相较于传统机器学习的核心优势。首先列举经典机器学习模型如线性回归、逻辑回归、支持向量机、朴素贝叶斯、K-means聚类、DBSCAN无监督学习等,以及广泛应用的GBM、XGBoost提升算法及随机森林。然后聚焦深度学习模型的独特之处:诸如能够捕捉复杂非线性关系,实现自动特征学习与提取,以及在大规模数据集上的卓越性能提升等优势。
然后,我们要提到深度学习模型,它与机器学习模型有根本的不同。并提及人工神经网络(ANN)、循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)和自动编码器等示例,所有这些都基于神经网络。还要提到卷积神经网络(CNN),它在计算机视觉领域非常流行。然后指出,第一个最大的区别是传统的机器学习模型依赖于手动特征提取,而在深度学习模型中,它们会自动执行此操作,并自动按原样获取输入数据。
我们不需要执行特征选择,我们不需要担心这一点,因为我们的模型由神经网络表示,特别是具有这些深层的模型,能够识别所有这些数据中的这些模式,然后为自己提取描述我们的数据的最重要的特征,然后使用它对于不同类型的任务,无论是回归还是分类。它实际上表现非常好。
因此,深度学习模型在大数据上表现得非常好,而我们已经看到机器学习模型受到了影响。众所周知,当数据量增加时,机器学习模型的性能会变得更差。当特征数量增加时,它们开始过度拟合,并且也开始变得不稳定并且无法准确预测输出。当我们增加数据中的观察数量时,我们也会在数据中包含复杂的特征。
这无疑有助于深度学习模型超越传统的机器学习模型,特别是在计算机视觉或语音识别、机器翻译和深度学习模型的思想等任务中。您可以通过观察不同技术领域中最新的各种应用程序,来理解为什么它们优于机器学习模型。
在这些应用程序中,大多数都是基于神经网络的算法,而非机器学习模型。这主要归因于深度学习模型的多种能力,包括处理大数据、处理复杂特征以及自我进行特征提取,而不是在模型之外进行,或者受到各种影响,如传统机器学习模型所面临的问题。
3 什么是神经网络?
面试官期待您深度解读神经网络与人类学习方式的内在联系,以及对组成结构及其运作机制的精通程度。能否阐述权重和参数在训练过程中的含义?您是否洞悉隐藏层的概念,以及其存在形式是单一还是多元?此外,您是否能揭示深度神经网络的本质,并描绘其信息传递的全过程,同时全面涵盖所有相关要素?
神经网络,深度学习与人工智能的核心构建块,仿生人脑的精妙模型。它模拟人类学习解析信息的方式,接收并处理输入数据,通过训练持续优化与更新知识库,不断摄取新信息,迭代可能结果,旨在将学习过程中的误差降至最低限度。
神经网络的核心架构仿照人脑神经元构建,由层层神经元交织而成。输入层如同数据的入口,通过权重这一关键要素,揭示了对各输入信号重要性的差异化赋值,这就是模型训练中亟待优化的参数。其中,隐藏层扮演着深度学习内核的角色,它潜藏在输入与输出之间,能捕获复杂模式,智能地激活相关神经元,抑制无关输入。这一系列动态转换过程,使得神经网络得以深入理解和解析信息。
在隐藏层之后,我们可以有另一个隐藏层,它将接收来自前一个隐藏层的信息,然后继续学习过程。反过来,它将能够学习和理解先前的隐藏层信息。例如,在输入中,我们有图像的这些不同像素,我们想要学习这些图像。为了让神经网络学习,它应该能够首先学习输入数据中的某种对象。
因此,在第一个隐藏层中,它可能会发现某些信号、某些边缘和某些信息。然后在下一个隐藏层,它将能够识别特定的物体,比如说猫的耳朵,如果我们想要识别图像是猫还是狗,然后把这个信息传递到下一层,传递到下一层,然后我们继续到最后一层,当我们产生输出。
假设您熟悉机器学习,并且正在阅读本教程,那么您应该熟悉分类、回归、监督学习的概念。对于传统的神经网络,我们会产生输出,例如,它可以识别概率,即 0 到 1 之间的值,比如说我们的分类任务。然后这个值应该与实际的类进行比较。例如,如果我们有概率,并将其转换为类别,那么我们可以更新相应的类别。因此,我们有每个时期神经网络的输出,然后我们使用这些信息与监督学习过程中的真实标签进行比较,然后计算误差。
我们试图了解我们的预测效果如何,然后使用这些信息来了解模型预测结果的准确度。这就是我们所说的损失。然后,我们使用这个损失函数来了解我们需要改变权重多少,我们对神经元的重视程度,我们需要更新这些权重以及模型中的其他参数多少,以便减少我们的模型所犯的错误量。神经网络的基本思想在于获取输入,将其放入隐藏层以从输入数据中学习。这个过程涉及到激活神经元,并可能包含一个或多个隐藏层。通过不断激活这些神经元,我们可以获得输出。
我们需要了解模型造成的损失,以及总体成本函数,然后计算我们所说的梯度。虽然我在这里简单地提到了梯度的概念,但并没有过多讨论它的细节。然后,我们使用这些梯度来了解需要更新多少权重才能改进模型参数。因为最终,我们关心的是这个模型,它具有参数、权重参数、偏差参数,最终将为我们生成最准确的预测。为了达到这个目标,我们需要不断学习,经历这个循环,以便正确学习,并生成一个误差最小的模型,以便能够正确地从输入数据中学习。
4 解释深度学习中神经元的概念
在这个问题中,面试官想了解权重的概念,偏差因子的概念,如何使用它们来获得所谓的 Z 分数,以及如何激活,激活函数用于获取激活,以及这些权重和偏差因素以及与学习过程的关系的意义是什么。深度学习中的神经元有时被称为人工神经元,它模仿人脑神经元的功能,但以一种自动且简单的方式实现。在神经网络中,模型获得不同的输入。这些输入信号我们称之为神经元,它接受输入数据,我们将其表示为 x。我们用这个x来乘以权重,因为这些权重可以告诉我们这个神经元应该有多少重要性,我们需要对这个神经元给予多少关注。
然后这些权重乘以这个输入数据,你称之为x,这些就是我们添加一个偏差因子,因为当我们执行学习过程时总是会引入偏差。权重乘以输入数据 x,然后在其上添加偏差因子,这将是我们的 Z 分数。但在下一阶段,在接近隐藏层之前,我们使用所谓的激活函数。激活函数,比如 sigmoid 函数、整流线性单元或 Leaky ReLU,所有这些激活函数,它们所做的就是在数学上将非线性引入到我们的神经网络中。这些激活函数基于权重、输入数据和偏差因子应用于所有这些不同的 Z 分数,以便了解每个神经元应该被激活多少。
在某些情况下,我们可能希望在查看对象并尝试根据像素了解该图像中的对象是什么时,我们可能需要激活与该特定区域或该特定对象相关的某些神经元,并且我们不应该激活其他神经元。这正是我们对这些神经元的激活所做的事情。因此,在这里,我们使用这些激活为神经网络引入非线性,以学习输入数据中的这些复杂结构。
5 用简单的方式解释神经网络的架构
鉴于我们已经回答了前面的问题,都提到了神经网络的架构和训练过程的某些部分,这个问题很容易回答,我将在这里使用一个简单的可视化来表示简单的神经网络,该神经网络仅包含一个隐藏层只是总结我们在之前的面试问题中提到的所有内容。神经网络就是这种多层结构的模型,每一层都在一步一步地对输入数据进行变换。把它想象成一条装配线。装配线的每个阶段都会比前一个阶段增加更多的复杂性,而细节和复杂性会为模型执行预测的能力增加更多的价值。
一开始,模型有这些输入层。正如您在这里所看到的,输入层由 Z1、Z2、Z3 直到 Zn 表示。在这里,您可以将这个元素、这个输入视为输入层的一部分,作为描述数据的特征。例如,我们可能想使用神经网络来估计房屋的价格。我们需要具有某些特征来估算该价格。我们需要学习才能了解如何区分不同的房屋以及这些特征如何影响房价。例如,Z1 可以是这所房子的卧室数量。Z2可以是这所房子的层数。Z3可以是房子是否有游泳池。
另一个可能的特征是房子是否已经建成。这栋房子是在哪一年建造的?房子的年龄是多少?所有这些特征描述了房子的某个元素或某个特征。这将帮助我们,也将帮助模型从这个特征中学习并理解。这栋房子的准确价格是多少?
随后,我们得到一系列独特的权重:权重1,1、权重1,2和权重1,3。同样地,针对第二个输入与第三个特征,我们拥有对应的Z3权重,如W3,1、W3,2和W3,3等。这些权重以动态箭头的形式呈现,直观展示了它们如何指向隐藏层,驱动模型深层运算的过程。
在该简洁架构中,虽仅设一层隐藏层,但通常可拓展至多层,正如深度神经网络的典型构造,故得名“深度”。这些权重的独特作用在于揭示输入特征如何不同程度地影响首、二、三隐藏单元。
在隐藏层中,三个圆圈代表着隐藏单元。这个简洁架构仅含三个隐藏单元,但其数量可根据您的需求自定义调整,在模型训练阶段灵活设定,此即我们常说的可调超参数。
在此,W1,1作为关键权重,揭示了输入层对Z1至H1的影响程度,决定了何时强化关注、助力首个隐藏单元的学习进程。至于H1,我们亟需确定其在Z1上的权重值,以挖掘首个特征的价值。接下来是W1,2,它精准描绘了在识别及向第二个隐藏单元H2传递信息时,应赋予首个输入特征的权重力度。
输入数据X、权重W及偏差因子B共同作用,精确计算出Z分数,表达式为:Z = W*X + B。这一关键指标揭示了数据的标准化表现。
获取Z分数后,我们将引入非线性激活机制,以揭示聚合过程的内在运作。在首个隐藏单元H1中,存在四条独特通路(W11、W21、W31和WN1)犹如四支箭矢瞄准H1。这意味着各不相同的输入特征各自携带着特定权重,共同塑造了H1。这一设计精妙地诠释了我们在生成H1——即首个隐藏层单元时,应如何依据不同输入特征的重要程度进行加权整合。
依据各异权重与输入信号,我们聚合各类 Z 分数,激活函数显著革新 H1 中激活值的计算方式。激活精髓,即在于此——激活函数的独特效用,彰显无疑。
一旦获取关键信息,我们即刻计算激活值,迅疾推进至输出阶段,历经 H1、H2 和 H3 的深度解析后精确生成输出。这些隐藏单元通过学习权重、偏差因子及激活函数,已深谙上层输入数据的精髓。最后,我们运用 WH1、WH2、WH3 这些核心权重,精准调控各隐藏单元对输出层的贡献度。
在输出层,我们精准获取所需格式的结果。进行分类时,目标是得到介于0到1之间的概率值,由此确定类别,并将其转化为实际类别标签(如0或1)。通过对比神经网络输出与真实标签,我们精确评估模型性能。
6 什么是神经网络中的激活函数?
激活函数在神经网络的核心地位无可替代,其选取直接关乎网络性能表现。我们在探讨过程中深度剖析了权重运用,如何结合输入数据、前层输入及输出构建Z值。引入偏置向量以生成Z分数后,激活函数即发挥关键作用,通过它精准调控每个神经元在下一层计算中的激活程度,实现神经网络的高效运作。
激活函数赋予神经网络非线性特性,若无此功能,模型仅相当于线性回归,只能解析线性规律,却对现实中普遍存在的复杂隐藏模式束手无策。激活函数的存在,让模型能够揭示并捕捉数据中的非线性关系。
因此,我们引入激活函数,这有助于我们将非线性引入神经网络。它们就像聚合函数一样,帮助我们理解如何组合这些不同的输入、这些不同神经元相应的Z分数,以获得最终的单个激活量。如果你看这个图,你可以看到我们正在使用x1、x2直到xn,它们是我们的输入点。
然后我们就有了相应的权重,它告诉我们每个输入需要激活多少。然后我们需要聚合这些值。我们需要获得一个单一的激活,然后该激活将基于激活函数。它基本上定义了在计算我们之前看到的隐藏单元的体积时,我们需要添加多少与特定输入相对应的值。
有不同种类的激活函数。我简单提一下,四种流行的激活函数是sigmoid激活函数、双曲Tang函数,简称为Tang函数。另外,我肯定会提到整流器线性单元激活函数,即ReLU。我还提到了Leaky ReLU,即整流器线性单元激活函数的Leaky版本。你也可以,如果你有时间,你也可以指定激活函数,它们就像看门人一样。因此,他们决定需要从该状态使用多少信息才能传递到下一个状态。这基本上就是激活函数背后的想法,它使神经网络能够正确学习数据中的非线性关系。
7 列出几个流行的激活函数并描述它们
在前一个问题中,我们浅谈了激活函数。现在,我将深度剖析各类激活函数并进行分类解析。当面对此类问题时,无需列举所有类型,只需挑选一个典型示例深入讲解即可。但这次,我将精选出业界广泛应用的四大激活函数全面呈现,并由您自主选择其中一个作为详解案例。
因此,我主张将这四种激活函数归为两类:一类包括sigmoid激活函数与Tang激活函数;另一类则是修正线性单元ReLU及其实现变种Leaky ReLU。这一分类背后的逻辑,我们即将揭晓。这两类中,sigmoid与Tang函数因其特性归为一类,而ReLU与Leaky ReLU则构成了第二类激活函数阵营,各具优势,值得期待。
让我们从sigmoid激活函数出发,若您对逻辑回归有所了解,定会对它深感熟悉。因其能输出0至1间的概率型结果,sigmoid在逻辑回归中扮演着核心角色。一窥其激活函数图像,呈经典的S形曲线形态。那么,究竟激活函数蕴含何种奥秘呢?
在运算流程中,首先通过计算得出关键的z分数,以x为例:将x与权重w相乘,并加入偏差b,生成z值。随后,我们将此z分数作为激活函数的核心输入,驱动后续输出决策。因此,转换至激活函数的这一步骤至关重要,让模型基于前一层数据精准预测。
在此次案例中,我们选用 sigmoid 激活函数,它将输入变量 z 转化为 (1 / 1 + e^-z) 的独特值,此特性与逻辑回归的核心机制紧密呼应。通过该函数,实现对输入的高效转化与精确建模。
揭示图中奥秘, sigmoid函数清晰展现:横轴涵盖所有z分数,纵轴映射其激活值。无论x取值从负无穷延展至正无穷,对应的激活值始终优雅地游走于0与1之间,最低触及0,最高达到1。尤为关键的是,曲线在0.5处转折翻转,这一拐点蕴含着激活变化的临界点。
该激活函数巧妙设计,确保负输入值映射至0至0.5区间,正z得分则转换为0.5至1的激活范围,精准区分信号强度。
在回答面试问题时,需要记住和提及的一个重要问题是sigmoid函数可能会遭受我们所说的饱和问题。那么,什么是饱和度呢?当我们采用非常大的负值或非常大的正值时,就会发生饱和,然后激活或值(在这种情况下是函数)收敛到相应函数的极值。这就是这里发生的情况。如果我们假设x等于负1,000,那么相应的y值很可能非常接近0,即最小值,因此它是该激活函数的极值。如果我们将x视为一个非常大的正数,例如加1,000,那么相应的激活值将非常接近1,这就是该函数的全局最大值。这就是我们所说的饱和度。
这意味着,当z分数取极大正负值时,该激活函数能生成逼近0或1的极限输出。尽管如此,将其作为隐藏层激活函数可能带来问题,我们后续会详述。但在获取0至1区间的连续输出时,sigmoid函数无疑是最佳选择。
接下来我们要讲的激活函数是双曲正切激活函数,简称tanh函数。如你所见,双曲正切函数的形状与sigmoid激活函数非常相似。唯一的区别是,它将所有值转换为-1和1之间的值,而不是像sigmoid函数那样转换为0和1。因此,正如其名称所示,tang函数是基于几何主题的概念。如果您对正弦、余弦、正切和余切的概念有所了解,那么您对tang函数也会有所了解,因为这个函数正是基于这些概念。tang函数的作用是将所有的z分数转换为-1到1之间的值。
代表此激活函数的fz是一个等于的函数,其分母是e的z次方减去e的负z次方,除以e的z次方加上e的负z次方。它的基本作用是进行转换,获取z分数,如果z分数为负,则将其转换为-1到0之间的值。然后,如果z分数是从0到正无穷大的正数,则相应的激活将在0和1之间。
与sigmoid函数一样,tang函数也是S形的,只有膨胀点,所以它改变其模式的点,即图形的行为方式,不是在0.5点,而是在0点。与sigmoid函数一样,tang函数也存在饱和问题。因此,对于大负数和大正数,相应的激活将非常接近极值点,因此该函数的-1和+1可能会出现问题,就像sigmoid函数的情况一样。因此,不建议将这两个函数用于隐藏层,而是将它们用于输出层。
在输出层运用这两个函数,源于其能高效转换结果以适应各类场景。当sigmoid激活函数输出0至1间的数值时,可视为概率表达,进而判断分类(如0或1)。通过将模型预测与实际类别对比,我们采用交叉熵等评估方式,精准度量模型性能,并可根据此计算其他评估指标。
随后,我们将深入探讨为何在多层深度神经网络中,尤其是隐藏层众多时,应避免使用这两种激活函数。鉴于篇幅所限,此处暂不展开详述,毕竟我们已涵盖丰富内容。届时,请关注整流线性单元(ReLU)与漏整流线性单元(Leaky ReLU)这两大激活函数。两者在正z值区域表现出高度相似性,而在负z值区域则呈现独特差异。
当我们查看整流器线性单元时,实际上是激活函数,您可以看到它看起来像这样。所以它适用于z时的所有情况,所以激活,如果z分数小于0,那么它是负数,那么相应的激活将为0。所以基本上,这个激活函数不会激活任何负神经元。而对于z分数为正的情况,则相应的激活将完全等于z分数。
因此,名称为线性。因此,如果您查看y等于x的线,并且可视化该线,您可以看到正数部分,因此对于x从0到无穷大为正数的部分,您可以看到y等于x线与我们这里的完全一样。这就是“线性”这个词的由来。它类似于线性函数的表示,但只适用于正数。对于正数,我们将得到z分数,并根据其确切数量进行激活。然而,如果z分数为负或神经元为负,则相应的激活不会发生,我们也不会激活这些负值。在所有这些情况下,激活函数会将激活值设置为0。因此,当我们确实想要输出、我们确实想要考虑这些负值、并且我们想要考虑这些负值并基于它们进行预测时,这可能会出现问题。在这些情况下,我们需要调整这个ReLU,这样我们就可以更好地使用我们所说的Leaky ReLU。
Leaky ReLU激活函数的作用是,它不仅激活正分数,还激活负分数。当然,与z为正数的情况相比,它是在不太极端的情况下实现的。正如您从消极的一面看到的那样,从我们图表的第三季度来看,但它仍然如此。而且从函数本身也可以看出,因为Leaky ReLU对应的激活函数可以用它的f-set来表示,f-set等于0.01。如果z小于0,则如果z大于或等于0,则等于z。
因此,对于所有正数,Leaky ReLU的行为与ReLU完全相同,如您在此处看到的,但对于负值,相应的激活值只是等于0.01。所以你可以看到就是图中的这一部分。因此,这两个激活函数都不会受到饱和的影响,这与sigmoid和Tank函数相比绝对不同。这就是为什么推荐它,并且已经证明,当我们将这两个激活函数用作隐藏层激活的一部分时,它们的性能要好得多,并且当涉及到输出层时,它们的使用并不多。因此,可以考虑将Leaky ReLU和ReLU用于隐藏层,但不要将它们用于输出层,反之亦然,用于sigmoid函数和Tank函数。将它们用于输出层,但不能用于隐藏层。
8 如果在神经网络中不使用任何激活函数会发生什么?
答案虽短却至关重要:缺乏激活函数,神经网络将退化为简单的线性回归模型,从根本上否定了神经网络的运用价值。因此,我们引入激活函数及非线性激活函数,以充分利用神经网络架构,挖掘数据中潜在的复杂、非线性模式,实现深度学习的目标。
9 描述基本神经网络的训练如何工作
面试官期待您能阐述对前向传播、后向传播原理的深度理解,揭示反向传播的内涵,并精辟解析这两者如何交织运作。同时,展示您对神经网络如何运用这些层级学习数据中复杂模式的独到见解。
你可以从描述神经网络的训练过程开始,一个非常基本的过程,通过我们所说的前向传递的过程。前向传递获取输入数据并通过我们之前看到的神经元进行处理,并使用此加权和和激活函数来产生输出。我们获取输入数据,将其乘以相应的权重,然后添加偏差因子。这些就是我们的z分数。然后,我们应用激活函数来引入非线性,当我们将信息传递到下一层时,就会使用这些激活值(即激活分数),因为我们将使用它作为输入。我们将其乘以相应的权重。
我们添加偏差因子,然后使用该隐藏层的激活函数,以便从这些复杂性中学习。这个过程一直持续到我们到达计算输出的输出层。然后使用该输出将其与我们的数据的真实值进行比较。例如,我们在处理分类问题时,会观察到的实际标签。接着,我们会计算所谓的损失函数或成本函数。例如,对于回归类型的问题,我们可能会使用均方根误差(RMSE)或均方误差(MSE)。对于分类类型的问题,我们可能会使用交叉熵。然后,我们利用这个损失函数进行所谓的反向传播。
反向传播,作为计算梯度的核心过程,精准定位模型权重与偏差的微小变动如何影响损失函数。一旦揭示出这一梯度秘密,便能预知对参数的调整将如何改变损失值,进而利用此梯度智慧优化模型中的各项参数。这一逆向操作,恰与前向传播过程相反而互补,实现模型迭代升级。
在前向传播阶段,我们沿模型由左至右运算以获取输出;而反向传播则逆向进行,旨在揭示隐藏的梯度信息。这些关键梯度被高效利用,充当包括随机梯度下降(SGD)、梯度下降(GD)、动量SGD、均方根(RMSProp)、Adagrad及Adam在内的各类优化技术的输入源。以此法,我们层层迭代更新模型的权重与偏置,实现精准调优。
核心任务在于获取梯度,运用如Adam等优化算法进行迭代升级,首先针对模型的最后一层权重进行精准更新。这一过程经过精密计算,随后逐层向左推进至浅层。我们巧妙采用权重间的乘积运算,高效利用梯度信息,同步更新权重与偏差项,旨在稳步调节权重以实现损失函数的显著降低。
至关重要的是,向面试官阐明为何更新权重与偏差因子:从数学角度看,梯度揭示了当微调权重或偏置时,损失函数的变化幅度。我们运用梯度这一关键工具,以调整旧的权重和偏差参数,旨在减少模型产生的损失,步步推进至更精确的模型。误差越小,损失越低,意味着神经网络性能越卓越。这就是神经网络训练的核心理念所在。
这一流程不断循环,包含前向传播、反向传播等环节,直至达到预设的停止阈值,如迭代次数、纪元数等特定标准为止。
10 什么是梯度下降?
梯度下降,作为机器学习与深度学习的核心优化策略,旨在逐次迭代精调模型参数,以实现损失函数最小化。通过这一过程,我们找寻最优模型参数组合,从而显著提升模型预测准确度。
要掌握梯度下降原理,首要理解其关键概念——损失函数(即成本函数),它是神经网络训练的核心指标。深入探索神经网络运作机制及训练流程,这是我们前期积累的知识基础。进而领悟通过迭代优化模型的理念及其背后的驱动因素。
从零开始,神经网络训练之旅首启前向传播:输入数据与各层专属权重参数、偏差向量交融,在隐藏层间穿梭流动。激活函数赋予神经元生机活力,层层递进,深度激活。经历这一系列过程,我们精准计算出每一次前向传递的独特输出结果。
在神经网络训练初期,初始化一组关键模型参数至关重要。我们关注两类核心参数——权重与偏差,如前所述。运用这套特定权重与偏差向量,初始误差几何?这些可调节的参数正是提升模型精准度的关键所在。通过微调权重与偏差,我们将不断优化模型性能,力求最小化预测误差。
探讨再度启程:当我们以模型参数的初始设定,即权重和偏差向量,计算预测输出y帽时,关键在于理解这套模型参数导致的误差程度。这就是“损失函数”,又名成本函数,它精准量化了我们运用这些权重和偏差进行预测时所产生的平均误差。
在机器学习领域,回归任务与分类任务并存,针对不同问题精准选用损失函数评估模型性能。神经网络训练的核心在于迭代优化权重和偏差参数,旨在寻求一组最优解,从而将模型误差降至最低。这一过程犹如探寻一把钥匙,解锁高度精确预测的神秘之门,而这正是我们运用神经网络的终极目标。
面对分类任务,首选交叉熵作为损失函数;同时,F1分数(即F beta分数)与精确率、召回率亦为可选项。处理回归问题时,均方误差(MSE)、RMSE及MAE等指标则成为评估模型性能的利器。每次调整模型参数,这些方法都能助您精准衡量其表现。
在神经网络训练的核心,运用反向传播算法,该算法揭示了参数微调对损失函数的微妙影响——即梯度。通过数学推导,我们精准计算每个模型参数对损失函数的一阶偏导数,在反向传播过程中,明确指示如何调整参数以最大程度降低损失,实现模型优化。
梯度下降如何优化?在训练流程中,全程遍历所有训练数据进行迭代更新。这意味着,在每一次权重和偏差因子调整时,都会基于全部训练样本执行一次完整前向传播:利用所有观察结果预测并计算损失函数,随后通过反向传播精确求解损失函数对每个模型参数的偏导数,以此动态更新参数,实现优化。
梯度下降法通过迭代优化,依据损失函数对模型参数的一阶偏导数(反向传播结果)调整模型。它巧妙地乘以学习率,然后从原始参数中减去这个调整量,步步为营,精准迭代至更新版的模型参数,实现参数优化的过程。
在优化过程中,我们通过反向传播精准计算梯度,并将此作为损失函数对权重参数的导数 dv。接着,我们将 dv 与学习率 eta 相乘,随后从当前权重参数 v 中减去这一结果,从而实现权重参数的更新迭代。同样地,我们以相同策略对待偏差因子,确保模型全面优化。
值得注意的是,我们在这里使用的步长,即学习率,也可以被视为一个单独的主题。我们可以深入探讨这背后的细节。但现在,将学习率视为一个步长,它决定了我们执行更新时步长的大小,因为我们确切地知道当我们对参数进行一定的更改时,损失函数将会发生多大的变化。所以我们知道梯度的大小。
首先,我们需要了解我们需要应用的更改的内容有多少。我们是否希望实现一个大的跳跃,还是我们希望在迭代改进模型参数时做出较小的跳跃?如果我们把学习率设定得很大,那就意味着我们将应用更大的变化,这意味着算法在走向全局最优时将迈出更大的一步。然而,我们也需要注意,当我们进行太大的跳跃时,尤其是如果这些跳跃不准确时,可能会出现问题。
因此,我们需要确保优化这个学习参数,这是一个超参数。我们可以对其进行调整,以找到最佳学习率,从而最小化损失函数并优化我们的神经网络。当涉及到梯度下降时,这个算法的质量非常高。它被认为是一个很好的优化器,因为它在执行梯度时使用整个训练数据,因此执行反向传播,然后利用它来更新模型参数。我们根据整个训练数据得到的梯度代表真实的梯度。所以我们不对其进行估计,我们没有犯错误。相反,我们在计算这些梯度时使用整个训练数据,这意味着我们拥有一个优秀的优化器,能够采取准确的步骤来寻找全局最优值。因此,梯度下降也被称为良好的优化器,它能够以更高的可能性找到损失函数的全局最优值。
然而,梯度下降的问题是,当它每次更新模型参数时都使用整个训练数据,这在计算上可能不可行或者非常昂贵,因为训练了大量的观察,使用整个训练数据对模型参数执行一次更新,每次将大量数据存储到内存中,对这些大数据执行这些迭代,这意味着当你有非常大的数据时,使用此算法可能需要几个小时才能优化。在某些情况下,甚至可能需要几天或几年,特别是当涉及使用非常大的数据或使用非常复杂的数据时。因此,虽然梯度下降被认为是一个很好的优化器,但在某些情况下,使用它是不可行的,因为它效率不高。
11 优化器在深度学习中的作用是什么?
在训练神经网络的过程中,我们追求的是寻找最佳超参数组合与参数集,旨在构建出误差最低的模型。毕竟,算法误差越小,预测结果的准确性越高。而当面对全新未知数据时,其表现更优。因此,这意味着我们能够信赖此算法,在各类应用场景中运用自如,无需担忧出现大幅误差。
运用多样化的优化算法,我们正致力于实现精准优化。其中,梯度下降扮演关键角色,它精妙地更新模型参数以最大程度减少误差输出。实质上,无论是在深度学习还是机器学习领域,优化器的核心使命始终如一:通过最小化损失函数,确保模型产生的损耗乃至成本降至最低。
我们的目标是运用迭代策略优化模型参数,精准调校权重与偏差参数,旨在构建出场景与模型的完美契合,实现算法错误量的最小化。或者,在特定条件下,我们将追求最大化目标函数的特性,这意味着我们需要挖掘出一组能最大化目标函数的模型参数。因此,依据目标性质的不同,我们将在算法中灵活决策,明确是以最小化还是最大化为目标来运用优化算法。
当谈到优化算法时,我们有非常原始的优化算法,但多年来也开发了许多其他梯度下降的变体,以克服梯度下降的一些缺点,但同时,也要尝试复制梯度下降的好处。例如,除了梯度下降之外,我们还有随机梯度下降(SGD)和小批量梯度下降。当引入动量来改进SGD等优化算法时,我们还有带动量的SGD。我们拥有基于自适应学习的优化技术,例如 RMSProp、Adam、AdamW 和 AdaGrad。这些都是在深度学习中使用的不同类型的优化算法,它们的目标是优化算法。因此,我们需要记住的另一个重要方面是,优化算法的目标是迭代地改进模型参数,以便我们最终找到全局最优值。
探讨梯度下降及各类优化器的方差时,术语“全局最优”将继续扮演关键角色。全局最优,即模型误差衡量的目标函数的真实极值点——最小或最大值。需警惕的是,实际求解过程中可能陷入局部极小或局部最大,而非全局最优。这意味着,在多元取值区间中,存在误差陷阱。在某些场景下,优化算法可能使我们错失全局最优,而止步于局部极值点。
在探寻最优解的过程中,优化算法不断调整策略以识别全局最小值。当它似乎找到一个极小点并宣布收敛时,实际上可能只是陷入了一个局部最小值陷阱。尽管这个局部最小值在附近区域显得极小,但它并非整个函数域中的绝对最小。算法可能会误以为已寻得理想参数组合,实则不然。因此,即使算法宣称收敛,仍需警惕其是否真正触及全局最小值,而非被局部最优所迷惑。
目标明确,我们追求全局最优而非局部极小。理想状态是实现模型的完全收敛,找到精准的权重和偏差设定,它们能确保损失函数达到理论上的最小值,而不仅仅是在某一数据集上表现看似最佳的解。
12 什么是反向传播以及为什么它在深度学习中很重要?
“反向传播,作为神经网络训练的核心机制,通过捕捉模型迭代过程中的每次误差反馈,洞悉权重与偏差等参数变动对损失函数的影响,助力深度学习与优化。”
反向传播算法作为训练流程的核心环节,始于输入数据流经神经网络的前向传播阶段,历经层层转化直至输出层生成预测结果。随即,通过计算所得预测值,精确量化本次迭代的损失函数。一旦锁定损失函数,我们就能够洞悉如何调整权重与偏置参数,以期在当前迭代中显著降低模型的误差率。
模型的平均误差,通过损失函数精确量化。算法核心步骤在于:微调权重和偏差参数,以揭示损失函数的具体变化幅度——即梯度。整个梯度计算过程,我们称之为反向传播,精准驱动模型优化。
反向传播基本上是指计算损失函数相对于我们每个模型参数(包括各种权重参数和偏差参数)的一阶偏导数的过程。这种反向传播是基础,因为它有助于算法理解改变每个不同的权重参数会导致损失函数中的多少变化。这是我们需要将这些信息提供给优化算法(例如 GADM)的方式。为了使优化算法能够更新模型参数,我们需要利用反向传播的输出,这是梯度下降(GD)、随机梯度下降(SGD)、Adam等优化算法的输入。以我们之前研究过的一个具体示例来看,这是一个非常简单的神经网络,它有少量的隐藏层和隐藏单元,只有几个输入信号。
在前向传播阶段,我们通过激活神经元完成所有转换,精准预测响应变量y帽。获取y帽的同时,我们会存储关键的z分数结果,它由输入x与权重参数相乘并累加偏置参数得出。此后,我们运用链式法则及求和、常数微分规则,巧妙更新损失函数相对于激活值的梯度dA,以驱动模型优化。
通过dA,我们精确计算出损失函数对z的梯度。进而,运用该梯度与dZ,精准推导出损失函数关于权重的梯度——dV。同样原理,巧妙结合dA与dZ,我们揭示了损失函数对于偏置的梯度,即为偏差因子。
核心在于,更新模型参数时,需明确损失函数对权重dV及偏置项的梯度——这是损失函数关于它们的一阶导数。然而,计算dV与dB的前提是求得激活函数和z值的梯度,因二者构成权重和偏置项的组成部分。为此,我们运用了一系列链式法则,这意味着在执行微分过程中,必须完整追溯这一微分链,方能精准获得权重和偏置项的梯度信息。
精炼后文案:在模型中,z通过权重矩阵转置与激活矩阵相乘并加入偏差项构建而成。为求解权重对损失函数梯度dV,首先对损失函数J关于z得分求偏导数,再乘以z相对于权重矩阵的偏导数,简化表现为dz与激活矩阵转置的乘积。同样原理,我们亦获取偏差因子的梯度,精准优化模型。
我不会过多讨论这些梯度的数学推导的细节,因为您需要深入研究这些不同的偏导数。当涉及到使用链式规则时,我们还需要刷新我们的记忆,当涉及到值的总和时,当涉及到常数与目标值相乘时,微分规则。当您学习深度学习主题时,我肯定会建议您刷新这些内容。但为了留在面试问题的范围内,我只是想分享这个只是为了刷新你的记忆,在每次我们尝试优化算法时,我们都在执行反向传播。
为了计算所有这些不同的梯度,我们首先需要计算相对于权重的梯度和相对于偏差因子的梯度。此外,我们还需要计算关于激活的梯度和关于z分数的梯度。然后,我们使用这些计算结果来计算权重的梯度和偏置因子的梯度。最后,反向传播就是计算损失函数相对于权重和偏置因子的偏导数的过程,以便将这些结果作为输入提供给我们的优化算法。这实际上引出了我们的下一个问题。
13 反向传播与梯度下降有何不同?
在深度学习面试中,您可能面临区分反向传播与梯度下降的挑战。这一问题微妙而复杂,因为它涉及到非直观的训练流程解析。首先,模型通过前向传播执行预测,随后利用损失函数评估性能及平均误差程度。接着,我们精确计算梯度以洞察参数变化如何影响损失函数值。基于此信息,模型参数将持续迭代更新,从深层至浅层,旨在精益求精,最终获得更优性能表现的模型。整个过程犹如层层回溯,优化不止。
那么梯度下降与反向传播有何不同?当涉及到反向传播和梯度下降时,具体有什么区别?这个问题的答案其实很简单。在我看来,这只是一个欺骗受访者的问题。反向传播是计算梯度的实际过程,了解当我们改变模型参数时损失函数有多大变化。然后反向传播的输出简单地用作梯度下降或任何其他优化算法的输入,以便更新模型参数。所以梯度下降只是使用反向传播的输出作为输入,因为它采用计算出的梯度来自反向传播作为输入,以便更新模型参数。所以反向传播发生在中间,一旦我们完成前传。然后反向传播就完成了。然后我们执行向后传递。因此,我们使用反向传播,然后不断迭代地将模型参数从较深层更新到较早层。这就是优化算法所做的事情。
14 描述什么是梯度消失问题及其对神经网络的影响
在网络训练过程中,当损失函数相对于权重和偏差等模型参数的梯度急剧减小时,即发生梯度消失现象。当梯度近乎为零时,意味着其在深层至浅层间的传播衰减严重。这一问题将导致网络无法有效捕捉数据中的依赖关系,从而严重影响模型的学习能力及更新效率。最终,算法优化受阻,模型无法精准学习并掌握数据的实际关联性。
目标明确,我们追求适宜的梯度,将其嵌入优化算法如梯度下降中,迭代求解模型参数,以期逐步最小化损失函数,从而实现模型的高度预测精度。那么,面对梯度消失难题,其根源何在?又该如何破解?
作为神经网络训练的一部分,我们看到在每次训练迭代中,例如,作为梯度下降算法的一部分,我们将使用整个训练数据训练我们的网络,然后从最早期的层到最后的输出层执行这些不同的转换,获取激活值,然后将其与权重指标相乘,然后添加偏差参数,以这种方式计算z分数,然后应用激活函数来激活这些神经元。然后这一切完成之后,在该特定的隐藏层中,网络能够学习数据中的不同依赖关系,然后学习结构,然后进入下一层,然后进入下一层,直到到达输出层。然后当我们有了输出层时,我们就可以计算我们的预测。
因此,我们首先计算预测值 y hat,然后将其与真实标签或真实值进行比较。接着,我们需要了解损失函数的性质,以及模型在使用这组参数时产生的平均误差是多少。然后,我们执行反向传播来计算梯度,并将其提供给优化算法,以便更新模型参数。优化算法的工作方式与前向路径相反。它计算并获取梯度,计算相应的更新,然后更新权重以及从深层到较早层的偏差因素。
挑战在于,我们在每一次转换中累积性地相乘这些数值,尤其在深度网络中凸显问题。当层级深达数层,中间层众多时,层层权重相乘后,梯度极易逼近零。一旦梯度过于接近零,我们将几乎无法有效更新权重与偏差参数。当模型权重无法继续更新时,意味着网络的学习能力严重受限,特别是在梯度消失的情况下,早期层的学习将尤为困难。
目标在于使模型持续学习并更新权重,以追求最小化损失函数、实现高精度预测的最优权重与偏差参数组合。为此,关键在于避免梯度消失现象,确保无论深度如何,网络都能精确捕获并理解数据中的复杂依赖关系,从而有效解决梯度消失问题,让网络深层次及早层皆能独立精准学习。
因此,在描述这个问题时,请尝试关注权重,因为当权重的梯度开始消失时,这是最大的挑战,特别是对于深度神经网络中的早期层。这是我们想要避免的,因为模型会出现梯度消失问题,无法有效学习。作为答案的一部分,您可以提到的另一件重要的事情是,某些架构本质上都受到这个问题的影响。尤其是 RNN、递归神经网络,以及 LSTM、GRU,它们本质上都是深刻的,因为不像人工神经网络这样原始的神经网络具有单个输入层,它们提供输入,然后神经元被激活并提供单一输出。和隐藏层,它们并不相互关联。所以它们不像 RNN 那样接受输入,然后为每个输入提供相应的输出。然后这个隐藏层,然后隐藏单元将被用作下一步和下一步的一部分。所以它们不像 RNN 那样基于顺序,那么它们比 RNN 更不容易出现梯度消失问题。
15 各种激活函数和梯度消失问题之间有什么联系?
因此,梯度消失问题与激活函数的选择高度相关,因为某些激活函数由于其固有的特性,会自动导致梯度消失问题。还有一些已知不会导致梯度消失问题的激活函数。当然,我们希望了解这样的激活函数,然后当我们意识到可能存在梯度消失问题时就不要使用它们。所以在这里我倾向于区分 sigmoid 激活函数和坦克激活函数与 ReLU,所以整流器线性单元,和 Leaky-ReLU 激活函数。其原因在于它们的固有属性,即我们所说的饱和度。这意味着,例如,在 sigmoid 激活函数的情况下,当激活 fz 等于 1 加 e 次方减 z 时,这意味着只要 z 或 z 分数是一个非常大的负数,比如说负 1000,然后进行相应的激活。
然后,fz将非常接近零,正如您所看到的,这被认为是sigmoid函数的最小值。当z为本例中的z分数时,x将是非常大的正数,因此它将在1000左右。接下来是相应的函数,即激活函数,其值约为1,非常接近1。正如您所看到的,在达到x的某个水平时,对于正值,无论x的大小如何,相应的激活值将非常接近1。而到了某个时候,这个领域甚至不会发生任何变化。
当输入值极端正负时,激活函数达到饱和状态,即无论输入如何增大,sigmoid函数的输出将稳定在1或0附近。这种饱和现象易引发梯度消失问题,特别是在面对极大数值的z平方时,无论是正值还是负值,梯度都将趋向于零,从而影响模型的学习效率与训练效果。
实际上,tang激活函数也遭遇类似的挑战:如同sigmoid函数一样,两者均呈现经典的S形特性。但同样地,tang函数存在饱和现象。当输入x为极大正值,如1,000时,激活值近乎固定在1附近;即使x增至2,000或3,000,该问题依旧存在,激活值变化微乎其微。
不论x数值多么庞大,激活结果始终如一,逼近该函数的最大值1。同样地,对于极为负数的x,如-1,000,激活值亦稳定在接近-1。此规律在x为-2,000乃至-10k时,均保持不变。
所以这意味着在tang激活函数的情况下,就像在sigmoid激活函数的情况下一样,当我们有非常大的正值或非常大的负值时,我们想看看使用这个激活函数可以激活它们多少,那么相应的激活值就在该函数的极值附近。所以在tang函数的情况下负1和1,以及sigmoid激活函数情况下的0和1。
因此,就像sigmoid激活函数的情况一样,我们说tang激活函数遇到了饱和。这意味着tang激活函数本质上会导致梯度消失问题,因为它导致梯度消失。这是我们想要避免的事情。
所以我们要记住的一件事是,当涉及到输出层时,sigmoid激活函数和tang激活函数非常有用,因为它们在某些范围之间转换值时具有这些很好的属性。就像sigmoid函数一样,它会转换值,0到1之间的任何值,当我们想要以概率形式输出时,这非常有用。问题的分类非常适合。然而,当我们谈论将激活函数用于隐藏层时,这是我们想要避免的。因此,我建议使用 Sigmoid 激活函数或双曲 Tang 激活函数于输出层,但不要将其用于隐藏层,因为它们容易出现梯度消失问题。
今日焦点:ReLU与Leaky ReLU激活函数。迥异于Sigmoid和Tanh,这两者无饱和特性,有效避免梯度消失问题,成为隐藏层的理想选择。ReLU直线激活,Leaky ReLU微小斜率处理负值,两者联手,深度学习模型训练更高效流畅。
观察发现,当输入 x 的数值极大时,激活值亦发生显著变化——从 1000 到 2000、再到 10k,激活变化明显,有效避免了梯度趋近于零的梯度消失问题。ReLU 函数因其不引发梯度消失特性,在隐藏层中运用时表现出众,这一优势尤为突出。
这同样适用于 Leaky ReLU,我们可以在这里看到这一点,因为两者非常相似。唯一的区别是,Leaky ReLU 在某种程度上确实考虑了负神经元的激活,这意味着当 x 为负值时,从负无穷大到零,您可以看到相应的激活不是零,而是等于 0.01。因此,与 Sigmoid 和 Tang 激活函数不同,这两个函数没有饱和,它们的激活值会改变,并且不会接近函数的同一个极值。
当我们提供非常大的正值或非常大的负值作为输入时,这意味着它们非常适合用作隐藏层的一部分,使网络能够持续有效地学习数据中隐藏的依赖关系。因此,我们建议使用 ReLU 和 Leaky ReLU 作为隐藏层的一部分来激活这些神经元,并且每当接近输出层时,对于输出层,请使用 Sigmoid 函数或 Tang 激活函数。
16 隐藏层中有一个神经元总是会导致反向传播产生很大的误差,可能的原因是什么?
作为神经网络反向传播的一部分,可能有很多原因导致该特定神经元或某些神经元始终产生较大误差。第一个可能的原因是权重初始化不当。这意味着在开始训练过程时,我们需要初始化权重参数和偏差参数,以便网络可以采用这些初始值,然后执行前向传递计算,然后将其用作梯度下降(GD)、随机梯度下降(SGD)等优化算法的输入,以便迭代更新这些权重参数。但是,如果我们没有以正确的方式初始化权重,这意味着我们没有使用正确的分布从中随机采样,或者我们只是为此权重和偏差参数提供了错误或不正确的值,这将从一开始就改变那些特定神经元的学习过程。
一旦学习过程以错误的方式起步,便会如多米诺骨牌般连锁反应:每一次迭代都基于首次错误积累,后续迭代亦将沿袭错误路径。这一恶性循环在每次迭代中加剧,误差不断累加并计入损失函数,反向传播进一步放大了偏差的影响。
另一个可能的原因是梯度消失或爆炸。如果梯度变得非常小,并且神经元的权重,特别是在深层网络中,不再开始更新那些不同的参数,这意味着,我们可能会在特定神经元中持续犯大错误,因为我们无法有效地学习模型中的依赖关系。这个特定神经元将无法被正确激活,相应的权重也无法得到更新,从而无法提高对这些特定神经元预测的准确性。
同样,这也适用于梯度爆炸问题。如果我们进行过多的更新,而神经元没有被正确激活,那么相应的权重也无法得到正确的更新,这将导致我们在这些神经元上持续犯大错误。
学习率设定不当,过高或过低,可能导致训练错过最优解,权重与偏差参数更新不足。因此,精细调整模型中超参数如学习率至关重要,以确保模型持续优化参数,推动学习过程不断改进,实现性能提升。
激活函数选择的精准性对学习过程至关重要,其独特作用直接影响神经网络能否有效捕获数据中的内在关联。错误的选择可能导致权重与偏差参数更新失效,阻碍优化进程。因此,激活策略是决定神经元激活方式、确保模型正确学习的关键因素。
17 你对计算图的理解是什么
计算图,作为一种强大的可视化工具,助力我们在模型训练中驾驭复杂操作与优化流程。它生动展示了从基础变量出发,历经层层变换,如何构建出精妙复杂的函数结构。尤其在神经网络的展现上,计算图的应用价值尤为凸显。
在计算图谱中,节点生动诠释对象或变量,而边则精确定义各类操作与转换。此处,输入信号x1、x2、x3作为初始层的节点代表变量源头。随后,箭头状的边缘揭示了正被施加的运算,它们汇聚流向首个隐藏层,构建深度学习的神秘开端。
在这一隐秘层级,展现的是各隐藏单元的z分数,随后生成对应的激活值。例如,首个隐藏层的第一隐藏单元即为z1与a1的配对;接下来是z2、a2,继而是z3、a3,以及z4、a4,共计四个独立隐藏单元构成了单层结构。再进一步,我们实施另一次转换运算,以实现从首层隐藏层向输出层的跃迁。
揭示过程:我们将x1、x2、x3输入转化为z分数,激活后生成关键的激活分数。以此激活分数为引导,从最后一层深度神经网络开始逆推,精确预测出y帽。此刻,我们正运用最终输出层的力量,精算出y帽的数值。
我们正在做的事情是为了可视化首先计算基于xi的z分数的过程,输入数据乘以权重矩阵w加b的转置。然后y-hat就等于ai等于sigma zi。我们在这里所做的是计算z分数,然后在z分数之后我们应用这个西格玛函数,这是我们得到的激活函数。首先,我们将激活函数应用于 z 分数,然后计算并获取激活分数。接着,我们使用这个激活分数来计算我们的预测值 yi-hat。一旦我们得到了 yi-hat,我们将其与真实值 yi 进行比较,然后计算损失,即模型产生的误差量。
正在探索的深度,我们不断拓展神经网络的隐藏层,层层递进至三层、四层乃至数十亿层。这一过程深邃而复杂,使得理解每一步骤及可视化各层结构变得极具挑战。但我们始终坚持,在数据输入与 z 分数转化之间,执行着指数级变化的精准转换。激活函数之后,即诞生了富含信息的激活分数。
通过计算图直观呈现复杂计算,摒弃繁琐矩阵与变换。从输入变量出发,可视化展现每一步转换过程,直至生成精准预测,化繁为简,尽在掌握,全程仅用一张图清晰解读。
然而,计算图通过揭示故事的隐藏维度,或许会呈现更深层次的复杂性。我们先获取预测结果,继而执行反向传播,再从反向传播深入至梯度的实际计算,并最终更新参数。为便于理解,我将借助一个简洁的神经网络实例来阐述:计算图不仅可视化前向传播过程,更全面展示整个网络架构,涵盖至关重要的反向传播与梯度计算环节。
18 谈谈梯度裁剪及其对神经网络的影响
深度神经网络,如 RNN、LSTM,在层数过多时易出现梯度消失问题。幸而,残差连接崭露头角,专为破解此难题而来,尤其针对具有复杂顺序特性的深层结构,有效缓解梯度消失现象。
梯度裁剪技术正有效应对深度神经网络中的梯度爆炸问题,尤其在RNN和LSTM中。每次运算,我们运用累积特性将权重逐层相乘,通过这一过程不断更新隐藏状态以生成下一个状态。优化过程中,在反向传播阶段深入网络层级时,反复执行此类转换至关重要。然而,随着前几层的计算完成,梯度爆炸风险随之增大。
梯度爆炸致使神经网络运行失稳,权重更新过大,严重影响训练效果和模型性能。为化解此困境,我们引入梯度裁剪技术。该技术设定一阈值参数,当梯度增长超出阈值时,自动进行裁剪处理,确保梯度不过于庞大,避免权重与偏差参数的过度更新,从而保证神经网络训练过程的稳健性与准确性。
我们运用独特方法稳固神经网络,对具有深度层序数据特性的LSTM、RNN、GRU等架构至关重要。此举旨在消除潜在的不稳定波动,在优化过程中,确保神经网络稳健学习并精准捕捉各因素间的内在依赖关系,最终成就一个稳定且高效的智能模型。
19 什么是交叉熵损失函数
交叉熵,也称为对数损失,它衡量分类模型的性能。具有概率输出的值介于0和1之间。因此,每当你处理分类问题时,例如,你可能想要对图像进行分类,判断它是否是猫,或者是狗,或者是房子,而房子又可以进一步分类为新房子和旧房子。在所有这些情况下,当你拥有这些标签并且想要模型提供一个概率,即每个观察到的类别的概率,你就会得到模型的输出。例如,房子A有50%的概率被分类为新的,50%的概率被分类为旧的,或者一张图片有70%的概率是猫,30%的概率是狗。在处理这类问题时,你可以应用交叉熵作为损失函数。
交叉熵被测量为这个负值:y log p 加上 (1 – y) log (1 – p) 的总和,其中y是实际标签。例如,在二元分类中,这可以是1和0,而p是预测概率。所以在这种情况下,p将是0到1之间的值,而y就是对应的标签。因此,当你处理猫图像时,假设标签为0;当你处理狗图像时,假设标签为1。这个公式背后的数学解释超出了这个问题的范围,所以我不会讨论这个细节。但如果你对此感兴趣,你可以查看逻辑回归模型,这是我在机器学习基础手册中的一部分内容。
通过将乘积转化为对数函数求和,我们构建出对数似然函数。为实现损失函数的最小化,我们引入负号进行运算,与最大化似然函数相反。这个过程揭示了模型在分类任务上的性能指标。交叉熵,则精准衡量模型能否出色地将观测数据正确分类到相应类别中。
20 为什么交叉熵优先作为多类分类问题的代价函数
当我们处理多类分类时,我们可以应用什么样的损失函数呢?在处理多类分类时,我们可以使用多类交叉熵,这通常被称为softmax函数。softmax损失函数是衡量模型性能的好方法,尤其是当你想要将观察结果分类为多个类别之一时。这意味着我们不再处理二元分类,而是处理多类分类。
例如,当我们想要将图像分类为夏季主题,春季主题,或冬季主题时。鉴于我们有三个不同的可能类别,我们需要有一种适当的方法来衡量执行此分类的模型的性能,而softmax正是这样做的。
因此,我们不会将配对观测值设置为不同的值,这会说明该观测值属于第一类或第二类的概率是多少,而是我们将拥有一个更大的向量,取决于你将要处理的类别数量。在这个具体示例中,我们最终将得到三个不同的值,因此一个向量具有三个不同的条目,说明这张图片来自冬季主题的概率是多少,来自夏季主题的概率是多少,以及来自春季主题的概率是多少。然后我们将得到具有相应概率的所有类别。在交叉熵的情况下,当我们的softmax值很小时,这意味着该模型在将观察结果分类为不同类别方面表现出色,我们得到的类别分离度也很好。
需要记住的一点是,当我们比较交叉熵和多类交叉熵或softmax时,这些都是在我们有超过两个类别的情况下使用的。您可能还记得在论文“Attention is All You Need”中介绍的Transformer模型,其中作为Transformer架构的一部分,还应用了softmax层,作为多类分类的一部分。因此,当我们计算激活分数时,最后,当我们想要将我们的输出转换为一个有意义的值并测量Transformer的性能时,我们会使用这些方法。
21 什么是随机梯度下降(SGD)?为什么我们要用它来训练神经网络?
SGD,作为深度学习的核心优化策略之一,旨在雕琢模型性能,寻求一组能最大程度减小损失函数的模型参数。它以迭代方式优化权重与偏差参数,独具特色地采用随机抽取的单个或少数训练样本进行参数更新。相较于梯度下降(GD)在整个训练集上一次性完成更新,SGD以更灵活、高效的方式,借由局部样本实现参数步步优化,展现卓越的适应性和效率。
SGD独到之处在于,它在每次训练迭代中利用单个或少量训练样本更新模型参数,而非遍历所有数据。这一随机性是算法的核心特征,也因此被称为随机梯度下降。SGD通过随机抽样,驱动前向传播:从计算z值、激活得分,直至网络输出y帽,并在此基础上衡量损失。然后仅针对这几个关键数据点执行反向传播,实现高效优化。
在SGD算法中,我们以有限的视角洞察全局——利用随机选取的少量数据点(甚至单个数据)来估算实际基于完整训练集的梯度。这种优化策略虽高效,但作为反向传播环节的一部分,不可避免地导致对梯度的估计存在一定的不精确性,从而引入了噪声因素。
优化后内容:我们创新的优化技术显著提升了效率,仅凭借少量数据点即可实现参数快速更新。相较于一次性使用全部训练数据,这一方法可在几个数据点上迅速训练神经网络,大大节省了时间。然而,这也意味着牺牲了SGD的部分精度:由于基于少数数据点估算梯度,导致估计值噪声较大,偏离真实梯度的可能性增高,进而影响模型参数的精确更新。
这意味着每次优化算法试图找到全局最优值并在每次迭代中进行这些移动时,向最佳状态更近一步,大多数时候,它最终会做出错误的决定,并且会选择错误的方向,因为梯度是它需要采取的方向选择的来源。每次它都会产生这些振荡,这会非常不稳定,大多数时候它最终会发现局部最优而不是全局最优,因为每次它只使用训练数据的一小部分,它正在估计梯度,这些都是有噪音的,这意味着它所采取的方向很可能也是错误的。当你每次都做出错误的方向和错误的举动时,你会开始摇摆不定。这正是SGD正在做的事情。在讨论优化方向时,该算法可能会做出错误的决策选择,最终找到的是局部最优而非全局最优。
因此,随机梯度下降(SGD)有时被认为是一个不佳的优化器。然而,它在收敛时间上表现出色,且在内存使用上也相当有效,因为存储模型基于非常小的数据,并将这些小数据存储在内存中,计算量并不大。然而,这是以优化器的质量为代价的。在接下来的讨论中,我们将学习如何调整 SGD 算法以提高优化技术的质量。
22 为什么随机梯度下降(即 SGD)会向局部最小值振荡?
造成这种振荡的原因有几个。首先,我们需要明确什么是振荡。振荡是我们在寻找全局最优值时所发生的运动。当我们尝试使用 GD、SGD、RMSProp、Adam 等优化方法来优化算法时,我们正在尝试最小化损失函数。理想情况下,我们希望迭代地改变我们的模型参数,以便我们最终得到一组参数,从而得到损失函数的全局最小值,而不仅仅是局部最小值。局部最小值可能看起来像是损失函数的最小值,但它仅适用于特定区域。而全局最优值实际上是损失函数的平均值,即实际最小值。这正是我们正在努力追逐的。
当我们有太多的振荡(即过多的运动)时,这可能会成为问题,因为我们每次都会做太多的动作。如果我们做出相反的动作或者方向错误,那么这最终将导致发现局部最优而不是全局最优。这正是我们试图避免的。与 GD 相比,SGD 中的振荡发生得更频繁。因为在 GD 的情况下,我们使用整个训练数据来计算梯度,需要计算损失函数相对于模型参数的偏导数。
而在 SGD 的情况下,我们了解到我们仅使用随机采样的单个或几个训练数据点来更新梯度并使用这些梯度来更新模型参数。这会导致出现过多的振荡,因为我们使用的随机子集比训练数据小得多,它们不包含训练数据中的所有信息。这意味着我们正在计算的梯度在每个步骤中,当我们使用完全不同且非常小的数据时,可能会有很大差异。这种巨大的差异,这种方向上的变化可能会导致这些振荡过于频繁。
在SGD中,步长(即学习率)是引发振荡的关键因素之二。它决定了权重和偏置参数的更新幅度,直接影响优化路径的波动程度和振荡时的跳跃大小,这一关键值关乎模型训练的步伐与稳定性。
第三个原因是 SGD 会遭受太多的振荡,这是一件坏事,因为这会导致太多次找到局部最优而不是全局最优,这是由于不完美的估计。当我们计算损失函数相对于权重参数或偏差因子的梯度时,如果这是在训练数据的小样本上完成的,那么梯度就会有噪音。然而,如果我们使用包含有关特征之间关系的所有信息并且仅在数据中一般性的整个训练数据,那么梯度的噪声就会少得多。他们的预测将会更加精确。我们正在使用基于小数据集的梯度作为实际梯度的估计,这是基于整个训练数据的。这种做法会引入噪声,因此在估计真实梯度时会存在缺陷。这种缺陷可能会导致更新并不总是直接指向全局最优值,从而导致随机梯度下降(SGD)出现振荡。在更高的层面上,我认为SGD出现过多振荡的原因有三个:第一个是随机子集,第二个是步长,第三个是梯度的不完美估计。
23 梯度下降(GD)与随机梯度下降(SGD)有何不同?
至今为止,深度剖析SGD后,我将从宏观层面提炼两者关键区别,通过四大核心要素揭示GD与SGD的差异:数据利用率、更新频率、计算效能及收敛模式。敬请跟随逐一解析。
在模型训练与梯度计算中,梯度下降全面运用整个训练数据集,反向传播时以此梯度精确更新模型参数。而SGD独辟蹊径,摒弃一次性全量使用训练数据的方式,转而采用随机抽取个别数据点进行训练,并以此两点为基础推算梯度以更新模型参数。这就是SGD与GD在数据利用规模与方式上的显著差异。
第二个关键区别在于更新频率。GD每次依据完整训练数据集调整模型参数,相比SGD,其更新次数显著较少。SGD则倾向于针对单个或少量数据点频繁更新模型。与之相反,GD必须遍历整个数据集进行批量更新。因此,面对极小规模数据时,SGD展现出更高的更新频率,这是两者在更新频率方面的核心差异。
另一个区别是计算效率。GD的计算效率低于SGD,因为GD必须使用整个训练数据进行计算或反向传播,然后根据整个训练数据更新模型参数。这可能会导致计算量很大,尤其是在处理非常大的数据以及非常复杂的数据时。与GD不同,SGD效率更高且速度非常快,因为它使用非常少量的数据来执行更新。
这意味着它需要较少的内存来对使用小数据的数据进行排序,然后花费的时间就会少得多找到全局最优值,或者至少它认为它找到了全局最优值。因此,与GD相比,SGD的收敛速度要快得多,这使得它比GD更有效率。
最后一个我要在这个问题中提到的因素是收敛模式。众所周知,GD的收敛过程比较平滑,作为优化算法,其质量比SGD更高。SGD是一个效率高但质量较差的优化器,其原因是SGD的效率是以牺牲其质量为代价的,寻找全局最优值。SGD会产生大量的振荡,因为在估计真实梯度时它只使用了训练数据的一小部分。与SGD不同,GD使用整个训练数据,因此不需要估计梯度。它能够确定精确的梯度,这会在SGD的情况下导致大量振荡。对于梯度下降(GD),我们并不需要进行所有的振荡。因此,算法所做的运动量要小得多。这就是为什么随机梯度下降(SGD)找到全局最优值所需的时间要少得多。然而,不幸的是,大多数时候,SGD会将全局最优值与局部最优值混淆。因此,SGD经过多次迭代后,最终可能只找到局部最优,并将其误认为全局最优,这显然是我们不希望看到的。
目标明确:寻找无可挑剔的全局最优解,为此,我们致力于优化参数集以最小化损失函数。不同于仅依赖真实梯度的SGD,我们力求在多数情况下精准锁定全局最优,实现更高精度求解。
24 如何改进梯度下降等优化方法?动量项的作用是什么?
每当提及”动量”与”GD”,应立即将焦点转向动量SGD——SGD的高效优化版。掌握SGD与GD的差异,将助您轻松理解动量SGD的独特优势。只需牢记:它是升级版SGD,融合了动量机制。
在研讨中,我们关注了GD受振荡效应的影响:过大的波动致使利用有限训练数据估算真实梯度,引发权重更新方向的多样化,这非我们所愿。因我们已证实并解析,此类过度波动易致优化算法混淆全局最优解与局部最优解,使其误选局部最优作为全局最优,而实际情况却非如此。
面对这一挑战,我们创新性地推出动量SGD算法,巧妙融合了SGD优势,并着力克服其振荡过频的核心短板。该算法独创性引入“动量”理念,借力动量精准导向优化路径,有力抑制振荡,引领算法稳健迈向更优解。
动量优化策略,在模型参数更新中发挥关键作用,它借鉴历史更新的累积效应,尤其侧重于时间步t的最近更新。在每一步优化中,动量算法智慧地整合过往所有调整,并优先参考最近变动,因为这些信息更可能精确指示当前所需的方向。通过捕捉并利用这种时间敏感性,我们得以在模型参数迭代过程中实现更精准、高效的优化。
带有动量的SGD试图加速这个转换过程,并且不是有太多朝向不同方向的运动,也不是有两个不同的经常梯度和更新,而是试图稳定这个过程,并且有更多的持续更新。在这里你可以看到,作为动量的一部分,我们获得了这个动量项,它等于vt加一,用于时间步长t加一的更新。它的作用是需要这个伽玛乘以vt,加上学习率eta,然后是梯度。你可以看到这个膨胀的三角形,然后在theta下方,然后j theta t只是表示损失函数相对于参数theta的梯度。
它基本上所做的是它说我们正在计算这个动量项,t的时间步长加一,基于之前的更新。通过将 gamma 乘以 VT 并加上我们之前看到的随机梯度下降(SGD)的常用术语,对于梯度下降(GD)来说,基本操作是使用 eta 学习率乘以损失函数相对于参数 theta 的一阶偏导数。因此,我们使用这个动量项简单地从我们的当前参数 theta t 获取新版本,更新版本为 theta t 加一,其中 theta 只是模型参数。
我们正以更一致的方式执行大量更新,引入方向性一致性,强化了名为“动量”的策略。重视近期调整,动量驱动向目标方向的加速冲刺,在更连贯的梯度中精准定位全局最优解,有效引导优化过程抵达损失函数的全局最小值,从而避免局部最优陷阱,显著提升算法整体性能。
概括来说,动量SGD在保留SGD算法核心的基础上,融入了动量项,使得在利用少量训练数据更新模型参数时,能借鉴GD的优化品质,高效找寻损失函数的全局最优解。这一改进有效增强了更新的一致性,显著减少了算法过程中的振荡现象,从而开辟出一条更为流畅的路径直达全局最优值。
25 比较批量梯度下降和小批量梯度下降,以及随机梯度下降
掌握三种梯度下降算法:批量GD(传统版)、小批量与随机SGD。虽本质相近,但三者在训练模型和更新参数的效率上各有千秋,尤其体现在对数据量的应用差异上,精准优化您的模型训练过程。
批量梯度下降是原始的 GD,该方法涉及使用整个训练数据的传统方法。对于计算梯度时的每次迭代,进行反向传播,然后将这些梯度作为优化算法的输入,以对这些模型参数执行单次更新。然后再次使用整个训练数据进行下一次迭代,计算梯度并更新模型参数。在批量梯度下降中,我们不是在估计两个梯度,而是实际上在计算梯度,因为我们拥有完整的训练数据。由于使用整个训练数据的这种质量,批量梯度下降具有非常高的质量,因此非常稳定,能够识别实际的全局最优值。然而,这是以效率为代价的,因为批量梯度下降使用每次都需要将整个训练数据放入内存中的整个训练数据,并且在执行优化时非常慢,特别是在处理大型和复杂的数据集时。
接下来我们有批量梯度下降的另一个极端,即 SGD。SGD 与 GD 不同,我们之前在讨论 SGD 随机使用的先前面试问题时看到了这一点,因此随机采样单个或少数训练观察结果,为了执行训练,计算执行反向传播的梯度,然后使用优化来更新每次迭代中的模型参数。这意味着我们实际上并不计算实际的梯度,但我们实际上正在估计真实的梯度,因为我们只使用了训练数据的一小部分。
这当然是以算法质量为代价的,尽管仅使用小样本是有效的,从进行反向传播时的训练数据中我们不需要存储训练,将整个训练数据放入内存中,但只是其中的一小部分,我们快速执行模型更新,然后我们更快地找到所谓的最佳值。但这是以算法质量为代价的,因为这样它就会开始产生太多的振荡。由于噪声梯度的存在,全局最优值和局部最优值往往会被混淆。这引出了我们的第三种优化算法,即小批量梯度下降。小批量梯度下降基本上是批量梯度下降和原始随机梯度下降(SGD)之间的一种折衷方案。小批量梯度下降的工作方式是试图在传统的梯度下降(GD)和SGD之间取得平衡。
小批量梯度下降试图利用SGD在效率方面的优势,并将其与GD在更新的稳定性和一致性以及寻找实际全局最优方面的优势结合起来。它的实现方式是将训练观察结果随机抽样到批次中,其中批次比SGD大得多,然后使用这些较小部分的训练数据在每次迭代中进行反向传播,然后更新模型参数。因此,当我们将训练数据采样到这k个不同的折叠(在本例中是批次)时,可以将其视为k折交叉验证,然后我们使用它来训练模型,然后在神经网络的情况下使用小批量梯度下降更新模型参数,例如权重和偏差向量。
面试官借此举测试你能否精准理解三种方法的共同点与差异,以及小批量梯度下降的独特优势,以期揭示你对这些关键技术深度认知。
26 如何在考虑小尺寸和大尺寸的情况下决定深度学习中的批量大小
面试官期待你深入剖析批量大小对梯度噪声、模型偏差与方差、泛化性能、收敛速度及内存效率的影响,特别是对比了批量梯度下降、小批量梯度下降与SGD的优劣,已展开详尽探讨。
-对此,您有什么看法见解?-
-欢迎在评论区留言探讨和分享。-
举报/反馈
原文链接:https://baijiahao.baidu.com/s?id=1794209566568172816&wfr=spider&for=pc