深度学习-第三章 RNN 面试题(大厂必问,历经半年整理)

1.NN

神经网络最全面面试题

2.CNN

卷积神经网络最全面面试题

3.RNN

核心思想:像人一样拥有记忆能力。用以往的记忆和当前的输入,生成输出。
RNN 和 传统神经网络 最大的区别:
在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。
在这里插入图片描述
RNN应用场景:
1.文本生成 2.语音识别 3.机器翻译 4.生成图像描述 5.视频标记
在这里插入图片描述

缺点:
RNN 有短期记忆问题,无法处理很长的输入序列
训练 RNN 需要投入极大的成本
RNN 是一种死板的逻辑,越输入影响越大,越输入影响越小,且无法改变这个逻辑。

3.1 RNNs训练和传统ANN训练异同点?

相同点:都使用BP误差反向传播算法。
不同点:
RNNs网络参数W,U,V是共享的,而传统神经网络各层参数间没有直接联系
对于RNNs,在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,还依赖于之前若干步的网络状态。

3.2 为什么RNN 训练的时候Loss波动很大?

​ 由于RNN特有的memory会影响后期其他的RNN的特点,梯度时大时小lr没法个性化的调整,导致RNN在train的过程中,Loss会震荡起伏,为了解决RNN的这个问题,在训练的时候,可以设置临界值,当梯度大于某个临界值,直接截断,用这个临界值作为梯度的大小,防止大幅震荡。

3.3 RNN中为什么会出现梯度消失?

梯度消失现象:累乘会导致激活函数导数的累乘,如果取tanhsigmoid函数作为激活函数的话,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。
实际使用中,会优先选择tanh函数,原因是tanh函数相对于sigmoid函数来说梯度较大收敛速度更快且引起梯度消失更慢。

3.4 如何解决RNN中的梯度消失问题?

1.选取更好的激活函数,如Relu激活函数。ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,但设定合适的阈值可以解决这个问题。
2.加入BN层,其优点:加速收敛.控制过拟合,可以少用或不用Dropout和正则。降低网络对初始化权重不敏感,且能允许使用较大的学习率等。
3.改变传播结构,LSTM结构可以有效解决这个问题。

3.5 CNN VS RNN

在这里插入图片描述
不同点
1.CNN空间扩展,神经元与特征卷积;RNN时间扩展,神经元与多个时间输出计算
2.RNN可以用于描述时间上连续状态的输出,有记忆功能,CNN用于静态输出。

3.6 Keras搭建RNN

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cc13186851239/article/details/114217983