算法岗面试——深度学习总结

  • BatchNormalization介绍

参考知乎深度学习中 Batch Normalization为什么效果好?
参考CSDN对Batch_Normalization的理解

神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。而BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。

定义:批规范化。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1。

作用:1. 加速训练,加快收敛;2. 降低过拟合风险;3. 提高模型的泛化能力

原理:为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的例子:

在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。

算法:
  • Mini-batch

参考CSDNMini-batch 和batch的区别

深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。

第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent批梯度下降

另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。

为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。

  • 梯度消失

在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习速率,即随着隐藏层数目的增加,分类准确率反而下降了。这种现象叫做消失的梯度问题。

  • BP算法

原文反向传播算法(过程及公式推导)

1.反向传播的思想
(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。

2.变量定义


上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
表示第层的第个神经元连接到第层第个神经元的权重;
表示第层的第个神经元的偏置;
表示第层的第个神经元的输入,即
表示第层的第个神经元的输出,即
其中表示激活函数。

3.代价函数
代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):C=\frac{1}{2n}\sum_x ||y(x)-a^L(x)||^2
其中x表示输入的样本,y表示实际的分类,a^L表示预测的输出,L表示神经网络的最大层数。

4.公式及推导
首先,将第l层第j个神经元中产生的错误(即实际值与预测值之间的误差)定义为:


以一个输入样本为例进行说明,此时代价函数表示为:

公式1(计算最后一层神经网络产生的错误):
其中,表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:

公式2(由后往前,计算每一层神经网络产生的错误):

推导过程:

公式3(计算权重的梯度):

推导过程:

公式4(计算偏置的梯度):

推导过程:

5.反向传播算法伪代码

①输入训练集
②**对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值a^1:
  (1)前向传播:
z^l=w^la^{l-1}+b^l,a^l=\sigma(z^l)
  (2)计算输出层产生的错误:


  (3)反向传播错误:

③使用梯度下降(gradient descent),训练参数:

  • 误差逆传播算法(error BackPropagation,简称BP)

参考:周志华西瓜书

前向传播算法

给定训练集D{(x_1,y_1),(x_2,y_2),...,(x_m,y_m),x_i\epsilon R^d,y_i\epsilon R^l},即输入示例由d个属性描述,输出l维实值向量。
给定一个拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,其中输出层第j个神经元的阈值用\theta _j,隐层第h个神经元的阈值用\gamma _h表示。
输入层第i个神经元与隐层第h个神经元之间的连接权为v_{ih},隐层第h个神经元与输出层第j个神经元之间的连接权为w_{hj},记隐层第h个神经元的接收到的输入为\alpha _h=\sum_{i=1}^d v_{ih}x_i,输出层第j个神经元接收到的输入为\beta _j=\sum_{h=1}^q w_{hj}b_h,其中b_h为隐层第h个神经元的输出,假设隐层和输出层的神经元都是用Sigmoid函数。
对训练例(x_k,y_k)假定神经网络的输出为\hat{y}_j^k=(\hat y_1^k,\hat y_2^k,...,\hat y_l^k),即\hat y_j^k=f(\beta_j-\theta_j)
则网络在(x_k,y_k)上的均方误差为E_k=\frac{1}{2}\sum_{j=1}^l(\hat y_j^k-y_j^k)^2

反向传播算法

BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。对上述所说的均方误差E_k,给定学习了\eta,有\Delta w_{hj}=-\eta \frac{\partial E_k}{\partial w_{hj}}

待更新....

  • 各种激活函数对比

转载自深度学习激活函数比较
深度学习中常用的激活函数详解及对比分析(sigmoid)

激活函数的作用:如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

1. Sigmoid

公式:f(z)=\frac{1}{1+exp(-z)}
曲线:


导数:
特点:用于隐层神经元输出,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。在特征相差比较复杂或是相差不是特别大时效果比较好。
缺点:
激活函数计算量大,反向传播求误差梯度时,求导涉及除法;
反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练;
Sigmoids函数饱和且kill掉梯度;
Sigmoids函数收敛缓慢。

sigmoid 原函数及导数图形如下:



由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度消失”现象

2. Tanh

公式:f(z)=tanh(z)=\frac{e^z - e^{-z}}{e^z + e^{-z}} tanh(x)=2sigmoid(2x)-1
曲线:


特点:也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。
缺点:Tanh 激活函数与sigmoid函数一样也具有软饱和性,没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。

3. ReLU

Rectified Linear Unit(ReLU) - 用于隐层神经元输出
公式:\phi(x)=max(0,x)
曲线:


特点:输入信号 <0 时,输出都是0,出现硬饱和,梯度消失为0;>0 的情况下,输出等于输入。
优点:
使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多;
解决了梯度消失的问题 :在正区间当输入值大于0时,梯度保持不变,没有sigmoid及Tanh函数的梯度消失的问题;
计算速度快
缺点:训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0。如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

4. Leaky ReLU

公式:\phi(x)=max(0.1x,x)
曲线:


特点:解决ReLU函数的Dead ReLU Problem而提出的激活函数。
理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

5. ELU

公式:\left\{\begin{matrix}x,x>0 \\\alpha (e^x -1),x\leq 0 \end{matrix}\right.
曲线:


特点:
不会有Dead ReLU问题;
输出的均值接近0,zero-centered。
它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。

  • 残差网络

转自残差网络(Deep Residual Learning for Image Recognition)

残差的思想都是去掉相同的主体部分,从而突出微小的变化。

1.退化问题的直观理解

随着网络层数的加深,会导致梯度弥散或梯度爆炸。对于该问题的解决方法是正则化初始化和中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting,因为overfit应该表现为在训练集上表现更好才对。退化问题说明了深度网络不能很简单地被很好地优化。

深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易

  • RNN

转载自循环神经网络(RNN)模型与前向反向传播算法
循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别手写识别以及机器翻译等领域。

如果训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN、CNN进行训练。

1.模型


符号解释:
1)代表在序列索引号t时训练样本的输入。同样的,和代表在序列索引号和时训练样本的输入。

2)h^{(t)}代表在序列索引号t时模型的隐藏状态。h^{(t)}x^{(t)}h^{(t-1)}共同决定。

3)o^{(t)}代表在序列索引号t时模型的输出。o^{(t)}只由模型当前的隐藏状态h^{(t)}决定。

4)L^{(t)}代表在序列索引号t时模型的损失函数。

5)y^{(t)}代表在序列索引号t时训练样本序列的真实输出。

6)U,W,V这三个矩阵是我们的模型的线性关系参数,它在整个RNN网络中是共享的,这点和DNN很不相同。 也正因为是共享了,它体现了RNN的模型的“循环反馈”的思想。

2.前向传播算法

隐藏状态h^{(t)}:由x^{(t)}h^{(t-1)}得到
h^{(t)}=\sigma(z^{(t)})=\sigma(Ux^{(t)}+Wh^{(t−1)}+b)
\sigma 为激活函数,一般为tanh,b为线性关系的偏倚

模型输出o^{(t)}:由隐藏状态h^{(t)}得到
o^{(t)}=Vh^{(t)}+c

在最终在序列索引号t时我们的预测输出为:
\hat{y}^{(t)}=\sigma (o^{(t)})
通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax
通过损失函数L(t),比如对数似然损失函数,我们可以量化模型在当前位置的损失,即\hat{y}^{(t)}y^{(t)}的差距。

3.反向传播算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容