设为首页 加入收藏

TOP

学习笔记TF035:实现基于LSTM语言模型(一)
2017-09-30 17:00:23 】 浏览:8148
Tags:学习 笔记 TF035: 实现 基于 LSTM 语言 模型

神经结构进步、GPU深度学习训练效率突破。RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息。

卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息。RNN最大特点,神经元某些输出作为输入再次传输到神经元,可以利用之前信息。

xt是RNN输入,A是RNN节点,ht是输出。对RNN输入数据xt,网络计算得输出结果ht,某些信息(state,状态)传到网络输入。输出ht与label比较得误差,用梯度下降(Gradient Descent)和Back-Propagation Through Time(BPTT)方法训练网络。BPTT,用反向传播求解梯度,更新网络参数权重。Real_Time Recurrent Learning(RTRL),正向求解梯度,计算复杂度高。介于BPTT和RTRL之间混合方法,缓解时间序列间隔过长带来梯度弥散问题。

RNN循环展开串联结构,类似系列输入x和系列输出串联普通神经网络,上层神经网络传递信息给下层。适合时间序列数据处理分析。展开每层级神经网络,参数相同,只需要训练一层RNN参数。共享参数思想与卷积神经网络权值共享类似。

RNN处理整个时间序列信息,记忆最深是最后输入信号。前信号强度越来越低。Long Sort Term Memory(LSTM)突破,语音识别、文本分类、语言模型、自动对话、机器翻译、图像标注领域。

长程依赖(Long-term Dependencies),传统RNN关键缺陷。LSTM,Schmidhuber教授1997年提出,解决长程依赖,不需要特别复杂调试超参数,默认记住长期信息。

LSTM内部结构,4层神经网络,小圆圈是point-wise操作(向量加法、点乘等),小矩形是一层可学习参数神经网络。LSTM单元上直线代表LSTM状态state,贯穿所有串联LSTM单元,从第一个流向最后一个,只有少量线性干预和改变。状态state传递,LSTM单凶添加或删减信息,LSTM Gates控制信息流修改操作。Gates包含Sigmoid层和向量点乘操作。Sigmoid层输出0到1间值,直接控制信息传递比例。0不允许信息传递,1让信息全部通过。每个LSTM单元3个Gates,维护控制单元状态信息。状态信息储存、修改,LSTM单元实现长程记忆。

RNN变种,LSTM,Gated Recurrent Unit(GRU)。GRU结构,比LSTM少一个Gate。计算效率更高(每个单元计算节约几个矩阵运算),占用内存少。GRU收敛所需迭代更少,训练速度更快。

循环神经网络,自然语言处理,语言模型。语言模型,预测语句概率模型,给定上下文语境,历史出现单词,预测下一个单词出现概率,NLP、语音识别、机器翻译、图片标注任务基础关键。Penn Tree Bank(PTB)常用数据集,质量高,不大,训练快。《Recurrent Neural Network Regularization》。

下载PTB数据集,解压。确保解压文件路径和Python执行路径一致。1万个不同单词,有句尾标记,罕见词汇统一处理为特殊字符。wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examplex.tgz 。tar xvf simple-examples.tgz 。

下载TensorFlow Models库(git clone https://github.com/tensorflow/models.git),进入目录models/tutorials/rnn/ptb(cd)。载入常用库,TensorFlow Models PTB reader,读取数据内容。单词转唯一数字编码。

定义语言模型处理输入数据class,PTBInput。初始化方法__init__(),读取参数config的batch_size、num_steps到本地变量。num_steps,LSTM展开步数(unrolled steps of LSTM)。计算epoth size ,epoch内训练迭代轮数,数据长度整除batch_size、num_steps。reader.ptb_producer获取特征数据input_data、label数据targets。每次执行获取一个batch数据。

定义语言模型class,PTBModel。初始化函数__init__(),参数,训练标记is_training、配置参数config、PTBInput类实例input_。读取input_的batch_size、num_steps,读取config的hidden_size(LSTM节点数)、vocab_size(词汇表大小)到本地变量。

tf.contrib.rnn.BasicLSTMCell设置默认LSTM单元,隐含节点数hidden_size、gorget_bias(forget gate bias) 0,state_is_tuple True,接受返回state是2-tuple形式。训练状态且Dropout keep_prob小于1,1stm_cell接Dropout层,tf.contrib.rnn.DropoutWrapper函数。RNN堆叠函数 tf.contrib.rnn.MultiRNNCell 1stm_cell多层堆叠到cell,堆叠次数 config num_layers,state_is_truple设True,cell.zero_state设LSTM单元初始化状态0。LSTM单元读放单词,结合储存状态state计算下一单词出现概率分布,每次读取单词,状态state更新。

创建网络词嵌入embedding,将one-hot编码格式单词转向量表达形式。with tf.device("/cpu:0") 计算限定CPU进行。初始化embedding矩阵,行数设词汇表数vocab_size,列数(单词向量表达维数)hidden_size,和LST单元陷含节点数一致。训练过程,embedding参数优化更新。tf.nn.embedding_lookup查询单对应向量表达获得inputs。训练状态加一层Dropout。

定义输出outputs,tf.variable_scope设名RNN。控制训练过程,限制梯度反向传播展开步数固定值,num_steps.设置循环长度 num-steps,控制梯度传播。从第2次循环,tf.get_varible_scope.reuse_variables设置复用变量。每次循环,传入inputs、state到堆叠LSTM单元(cell)。inputs 3维度,第1维 batch第几个样本,第2维 样本第几个单词,第3维 单词向量表达维度。inputs[:,time_step,:] 所有样本第time_step个单词。输出cell_output和更新state。 结果cell_output添加输出列表outputs。

tf.concat串接output内容,tf.reshape转长一维向量。Softmax层,定义权重softmax_w、偏置softmax_b。tf.matmul 输出output乘权重加偏置得网络最后输出logits。定久损失loss,tf.contrib.legacy_s

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇day5模块学习--re正则模块 下一篇Python 3 学习笔记(四)----字符..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目