时间序列表示
波形
[ b, 100, 1 ] :b条线,100个时刻,每个时刻有一个价格。
图片
[b, 28, 28] :b副图,共28个时刻,每个时刻取28个像素点。
文字
序列表示:[b, seq_len, feature_len]
b个句子,seq_len每个句子单词数,feature_len每个单词的维度。
可以根据需要调整b的位置:
[words, word vec]
具有的特性:
1.矩阵形式
2.高维
3.可表示并可计算相关性
4.可进行训练
Word embedding
二维的embedding:
Embedding layer:
初始化一个语料库,里面有10个单词,若要表示的词在里面就可以对应序号取出向量。
其他常用的embedding方法:
循环神经网络
RNN
假设上图,会出现两个问题:一是网络参数量过大,二是没有考虑到句子整体语义。所以,按照权值共享的思想,有下图的循环神经网络。
一个序列的当前输出与前面的输出也是有关的。具体体现在后面层数的输入值要加入前面层的输出值,即隐藏层之间不再是不相连的而是有连接的。
RNN layer使用
单层RNN:
多层RNN:
最常用的,不用自己管理 RNN Layer:
梯度离散和梯度爆炸
Whh的k次方,Whh大于1趋近于无穷大梯度爆炸,Whh小于1趋近于0梯度离散。
梯度爆炸
当神经网络很深时,梯度呈指数级增长,最后到输入时,梯度将会非常大,我们会得到一个非常大的权重更新,这就是梯度爆炸的问题,在循环神经网络中最为常见。
如上图,如果出现loss值急剧增大的现象,就可能是梯度爆炸问题。
方法:
梯度裁剪:
把沿梯度下降方向的步长限制在一个范围之内,计算出来的梯度的步长的范数大于这个阈值的话,就以这个范数为基准做归一化,使这个新的的梯度的范数等于这个阈值就行了。
梯度检查:
梯度计算很不稳定,使用梯度检查来检查梯度计算是否出了错误。通过解析的梯度值与计算得到的梯度值进行对比计算相对误差,如果这个误差小于一个很小的下限值,那么就没什么问题。
梯度离散
解决:LSTM