美文网首页
你真的弄懂算法面试必会的三个知识点了吗?

你真的弄懂算法面试必会的三个知识点了吗?

作者: CV算法恩仇录 | 来源:发表于2022-03-10 14:44 被阅读0次

原创:PinkFeet

一、引言

反向传播算法、随机梯度下降算法、Batch Normalization是深度学习算法的基本知识,是算法岗面试中的几乎必问的问题。但如果只能说出个大概,并没有吃透知识点,面试就会遭遇滑铁卢。所以,及时复习反向传播、随机梯度下降、Batch Normalization这三个基础知识点,才能在面试中做到不丢基础分。

二、反向传播算法

反向传播算法和前向传播的实现相辅相成。前向传播的实现相对简单,学过线性代数的知识就可以理解。

  1. 前向传播算法

假设输入X为N * m的矩阵,W为 m * m_1的矩阵,则h_1N*m_1的矩阵,b_1是含m_1个元素的向量。

图1:以MSE为例,前向传播求loss
  1. 反向传播算法

在开始复习反向传播时,假设出每个矩阵的具体元素,反向传播的原理会更加明显。

图2:求out

更新W:

图3:更新W

更新b:

图4:更新b

损失对Z的导数:

图5:损失对Z的导数

损失对h的导数:

图6:损失对h的导数

梯度更新:

图7:梯度更新

三、梯度下降法

梯度下降算法是解决损失函数最小化的问题的实现手段,反向传播算法是计算梯度的手段,主要是为了简化导数的计算,使用输出层的误差反向计算出之前层的误差。总之,梯度下降法是解决最小值问题的一种优化算法,而反向传播是梯度下降法在神经网络上的具体实现方式。
大多数机器学习算法都涉及到优化问题。优化是指在一个域中根据某个方向寻找最优解,例如,通过改变x以最小化或者最大化某个函数f(x)。常见的最优化问题通过最小化f(x)来完成,最大化f(x)则可以通过最小化-f(x)来实现。在优化过程中,需要最值化的函数被称为目标函数或准则,当我们对其进行最小化时,也常称之为代价函数、损失函数或误差函数。
假设一个损失函数形式为:

其中

要使损失函数最小,可以想到求导数并令其等于0,可以求得最值点和最值。这在低维特征前提下是可以实现的。但在许多现实场景中,多维特征不适用求导求解的方法,机器学习算法通常使用梯度下降算法进行优化。

  1. 梯度下降算法原理

假设大家都理解:曲面上方向导数最大值就代表了梯度的方向。我们在实现梯度下降的时候,应该沿着梯度的反方向进行权重的更新,可以有效地找到最优解。θ_i的更新过程可以描述为:

图8:梯度下降中的更新过程

最常听到的理解方法是用爬山与寻找山谷的比喻方法来解释。当θ维度为2时,J(θ)好像一片连绵起伏的山脉。我们最小化损失函数的过程,就好比寻找山谷的过程。一开始,我们在随机的位置,为了最快地到达山谷,每一步都以下降最多的方向来下山,学习率决定的是我们每一步的大小(通常,0<学习率≤1)。总之,为了找到最快下山的路,我们的每一步都要找到使J下降最陡的方向。
从数学的角度来说,以一元函数为例,梯度方向为沿着曲线的切线方向增长的方向,多元函数中,梯度向量为函数对每个变量的导数,该向量方向就是梯度方向,向量的大小就是梯度的大小。假设我们要采用梯度下降算法求函数y=x^2的最小值,那么这里的x就相当于前面待更新的θ。为了使函数y=x^2最小,可求y对x的导数。结合y=x^2的图像可知,假设x的初始值小于0,那么此时导数也为小于0,根据梯度下降公式, x向x轴正方向移动,越靠近0,y=x^2值越小。高维的情况类似。

  1. 三种常见的具体方法

总结一下,梯度下降算法中,批量梯度下降算法、随机梯度下降算法和mini-batch梯度下降算法的各自特点:

  • 梯度下降算法

在每次更新参数时,使用所有样本。理论上来说,一次更新幅度比较大,样本不多的情况下,收敛速度很快,适合使用该方法。样本很多的情况下,收敛速度很慢,不适合使用该方法。

  • 随机梯度下降算法

每次更新时,使用所有样本中的一个来调整参数。这样相当于用一个样本近似了所有的样本,每次迭代得到的损失函数不一定朝着全局最优的方向,最终的结果往往在全局最优解的附近。这个优化方法缺点是往往得不到全局最优解,但优点是最终结果往往也可以接受,而且速度比批量梯度下降方法要快。因此随机梯度下降算法要比批量梯度下降算法相对使用广泛。

  • Mini-batch梯度下降算法

Mini-batch梯度下降算法在每次更新时使用b个样本,是介于批量梯度下降算法和随机梯度下降算法之间的一种折中方法。当前两种梯度下降方法存在各自的问题时,折中的方法可以改善单样本更新的问题,同时减少批量样本带来的计算压力。在深度学习中,mini-batch梯度下降的方法是最常用的。
梯度下降可以收敛到的地方可能是:最小值、极小值、鞍点,这些点也是梯度为0的地方。

四、Batch Normalition

BN是常见网络中的标配,是面试中的高频问题,应该将其看作必会知识点对待,区分与数据的归一化之间的差别。

  1. 溯源

在神经网络的训练过程中,数据的分布会对训练产生影响。为了解决这个问题,有人对训练数据进行了标准化操作后输入网络。但随着前向传播的进行,数据分布又会产生变化,继续影响网络的训练,也就是说,数据分布变化在网络内部会不断发生。为了继续解决这个问题,就要在网络内继续进行标准化操作。
2015年,谷歌工程师们在论文 https://arxiv.org/pdf/1502.03167.pdf 中提出了Batch Normalization(以下简称BN),有效地应对了这个情况。

  1. 原理细节

BN中的B指批样本,是指将样本分批进行SGD。由于我们一次需要处理一批样本,所以一批样本若不进行标准化,经过激励函数后会大量饱和。但如果批样本进行了标准化,再经过激励函数后,批样本将会被有效地非线性化。所以说,在不单看一个样本的情况下,样本的分布对于激励函数来说很重要,直接影响其有效性。我们需要将样本分布调整到激励函数有效区间内,才能让数据传递更有效。因此BN非常重要。

根据上一段文字的分析可知,网络中的数据在进入激励函数之前有必要进行BN。所以在每批数据前向传播的过程中,BN层需要添加在每一个全连接和激励函数之间。

BN的原理所涉及的公式如下:

图9:BN公式

其中,γ、β是可训练参数,参与整个网络的反向传播。BN层使用的均值是在一个Batch内,按通道求和除以(N*H*W),方差的计算类似。

BN在训练和测试时有所不同,训练时有Batch,但测试时没有。所以训练时,均值和方差分别是Batch内数据各维度的均值和方差。测试时,均值和方差是基于所有样本的期望计算所得。

相关文章

  • 你真的弄懂算法面试必会的三个知识点了吗?

    原创:PinkFeet 一、引言 反向传播算法、随机梯度下降算法、Batch Normalization是深度学习...

  • 关于数据库事务和锁的必会知识点,你掌握了多少?

    关于MySQL数据库的这些核心知识点,你都掌握了吗? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据...

  • 面试必会算法

    冒泡排序(Bubble Sort) 核心思想: 相邻元素两两比较,大的往后放,第一次比较完毕后,最大值出现在最大索...

  • 前言

    写android面试必会知识点系列的目的,是因为每次一想到面试,心里总会想到底自己对知识点的掌握程度到哪一步了,总...

  • 面试必会算法之递归

    递归的基本性质就是函数调用,在处理问题的时候,递归往往是把一个大规模的问题不断地变小然后进行推导的过程。 递归(R...

  • fish的意思,你真的弄懂了吗?

    亲爱的同学们,今天是红杉树赵校长的英语小课堂坚持日更的第3天。 一天一个英语小知识,相信日积月累的力量。 今天带来...

  • Java 面向对象面试指导

    更详细Java面试请点击这里 Java 面向对象必会知识点 Java 的核心是面向对象编程,所有的 Java 程序...

  • 2019年5月份找工作面试知识点总结

    面试知识点 算法和数据结构 常用算法排序算法各种排序算法的时间复杂度,是否稳定内部排序快速排序 nlgn 不稳定冒...

  • 复盘

    21天学习结束,今天做作业还有好多知识点没有掌握,复盘真的很重要,可以快速的把不懂的知识点弄懂!

  • 浏览器同源策略及处理办法

    浏览器的同源策略一直是开发中经常遇到的问题,同时也是面试中面试官经常提到的。但是一直也没有完全弄懂这个知识点。得此...

网友评论

      本文标题:你真的弄懂算法面试必会的三个知识点了吗?

      本文链接:https://www.haomeiwen.com/subject/hzifdrtx.html