一些神经网络的记录

RNN

RNN即Recurrent Neural Networks、循环神经网络,本质是一个全连接网络,但是因为当前时刻受历史时刻的影响。

RNN出现梯度消失和梯度爆炸主要体现在长句子中,因为在反向传播BP求导时,当前t时刻隐层输出的梯度包含了所有后续时刻激活函数导数的乘积,所以如果t越小、句子越长,就会出现问题。如果激活函数的导数特别小,累乘就会更小,则会出现梯度消失问题;反之,则是梯度爆炸问题。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
 

LSTM

LSTM即Long Short Term Memory、长短时记忆模块,是对RNN存在的梯度消失、梯度爆炸问题的一种优化模型。LSTM的三个门的作用:输入门决定何时让输入进入细胞单元;遗忘门决定何时应该记住前一时刻的信息;输出门决定何时让记忆流入下一时刻;

GRU

GRU即门控循环单元,相当于是LSTM的一种变种,将三个门变成了两个门,更新门:是用来控制前一个时刻的信息被带入到当前时刻状态的程度。 更新门的值越大说明前一时刻的状态信息带入越多。重置门:用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略得越多。

GRU和LSTM的比较

1:GRU参数比LSTM少,所以容易收敛。
2:在一般数据集上 GRU和LSTM的性能差不多, 数据集大的情况下,LSTM的表达性能还是比GRU好。
3:从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。

LSTM并不能解决梯度消失的问题,只是提高模型学习远距离依赖关系的能力。

还有哪些其它的解决梯度消失或梯度爆炸的方法?

  • 梯度裁剪gradient clipping,当BP时的梯度小于某个阈值或大于某个阈值时 ,直接裁剪,防止太小的梯度累乘带来的梯度消失或太大的梯度累乘带来的梯度爆炸。
  • 改变激活函数,例如减少使用sigmoid、tanh这类激活函数,改成使用Relu、LeakRelu等,参考 算法面试问题二(激活函数相关) 。
  • 残差结构,类似于CEC的模块,跨层的连接结构能让梯度无损的进行后向传播。
  • Batch Normalization,相当于对每一层的输入做了一个规范化,强行把这个输入拉回标准正态分布N~(0,1)。这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数的大变化,进而梯度变大,避免产生梯度消失问题。而且梯度变化大 意味着学习收敛速度快,加快模型的训练速度。

可以不用激活函数吗?

如果激活函数增加了许多复杂性,我们可以不用激活函数吗?

当然不行!当我们不用激活函数时,权重和偏差只会进行线性变换。线性方程很简单,但解决复杂问题的能力有限。没有激活函数的神经网络实质上只是一个线性回归模型。激活函数对输入进行非线性变换,使其能够学习和执行更复杂的任务。我们希望我们的神经网络能够处理复杂任务,如语言翻译和图像分类等。线性变换永远无法执行这样的任务。

激活函数使反向传播成为可能,因为激活函数的误差梯度可以用来调整权重和偏差。如果没有可微的非线性函数,这就不可能实现

残差

深度网络存在退化问题,例如56层的网络反而没有20层的网络效果好,假设后36层仅是恒等映射也至少能达到20层的效果,说明了 正是因为这种退化问题导致,深度网络的训练是很难的。

本质是跨层的网络连接结构,例如基础的网络结构是x-->f(x)-->loss,而梯度的传播是逆向的,如果梯度特别小,随着网络的后向传播就会出现梯度消失的问题。但现在的残差网络的结构是x-->f(x)+x-->loss,就算梯度后向传播到f(x)再到x时特别小也不用担心,因为还有一条路径是梯度直无损的传到x。

Batch Normalization和Layer Normalization的区别?

  • Batch Normalization,相当于对每一层的输入做了一个规范化,强行把这个输入拉回标准正态分布N~(0,1)。这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数的大变化,进而梯度变大,避免产生梯度消失问题。而且梯度变化大 意味着学习收敛速度快,加快模型的训练速度。
  • Batch Normalization处理的对象是一个batch的样本,所以效果会受batch size的影响;而Layer Normalization处理的对象是单个样本,是对特征维度的归一化,所以理论上不会受batch size的影响。即横向和纵向的区别。

你可能感兴趣的:(深度学习,机器学习,自然语言处理)