- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
theano_lstm源码算法分析v1.0教程
theano_LSTM源码算法分析一、网络参数本文档分析的源码来自于theano官网的一份LSTM源码(/tUtorial/LSTM.html), 用LSTM网络分析一条电影影评是赞赏还是批判。dim_proj128词向量维度lrate0.0001学习率n_Words10000词库单词数maxlen100最大句子长度batch_size16SGD的batch大小node128LSTM节点数二、网络结构一个LSTM网络(dim_proj=128个LSTM节点)的结构如上图,计算公式和参数如下:xdim_proj=128维向量输入Wdim_proj=128维向量,4组权重o数值输出门Udim_proj=128维向量,4组权重c数值细胞状态b数值,4组偏置f数值遗忘门h数值隐藏层输出i数值输入门该结构图是时间轴上的展开图,图中的所有LSTM网络其实是一个,输入xt为词向量,dim_proj=128维,n为句子的长度(即多少个单词),LSTM内部共有node=128个LSTM节点(节点数量必须与词向量维度相同,因为每个节点输出一个ht数值,所有节点组成的的维度要与xt保持一致),当一个句子计算完成后将每一step的取平均值,再经过softmax分类器得到最终的判断结果,计算公式如下:dim_proj=128维向量输入b数值偏置U[dim_proj=128,2]维矩阵权重z2维向量输出三、源码数据流分析1、数据准备原始数据集文件中封装了train_set和test_set两个集合,train_set[0]为二重list,train_set[0][n]是第n个句子,每个句子存为list[词索引1,词索引2,……]的形式,注意这只是索引而不是词向量,train_set[1]为一重list,存放n个句子的情感标签,以0/1表示批判/赞扬,test_set的格式和train_set相同。经load_data函数读出数据集,送入get_minibatches_idx函数,将数据集切成batch_size大小的若干个块,每次同时处理一个batch_size数量的句子。用prepare_data函数处理一个batch_size=16的句子集,标签转化为16维的y向量,同时生成mask矩阵,mask矩阵和x矩阵大小相同,在x矩阵有单词存在的地方为1,不存在的地方为0,如果有超过maxlen的句子,超过的部分会被舍弃,注意x矩阵每一个元素是一个单词的索引值。Init_params和param_init_LSTM函数进行各项权值初始化,LSTM层的参数用了鬼畜的正交矩阵方法初始化,其他参数用的是普通随机数。参数中的Wemb存放词向量集,词向量用随机数初始化,随着每次训练更新,即这里的语言模型是训练得到的。bUild_model函数建立各种计算公式,按照x中的词索引在Wemb中寻找对应的词向量,生成三维矩阵emb,注意我画的那么长就是为了说明这里是词向量而不是词索引值了。f_pred_prob函数计算输出的2维概率向量,调用了最核心的lstm_layer函数完成lstm层的计算:①由于每个step间Wx的操作是完全无关的,可以并行处理,第一步计算emb=emb*lstm_W,这里是一个3维矩阵和2维矩阵的乘法,即emb的每一个step对应的二维矩阵都做一次和W的乘法②h、c先初始化为[batch_size,node]的零矩阵③在每个step内,i、f、c’、o都需要计算Uht-1,这之间也是完全并行的④根据公式,计算出i、f、c’、o,这之间也是完全并行的⑤计算c、h,注意这里的乘不是矩阵乘法,而是矩阵对应位置的两个元素相乘,其中还应用到mask矩阵来解决batch内每个句子长度不同的问题,用mask矩阵中相应的元素做如下的计算:ct=mask*c+(1-mask)ct-1,如果句子已经结束,对应的mask矩阵值为0,ct=ct-1,反之,ct=c,细胞状态更新,h同理⑥迭代③~⑤step次⑦迭代完成后,将每个step对应的取平均值,这里要注意batch内每个句子的长度都不一样,因此取平均值除数也不同⑧计算2维概率向量zf_pred计算预测响应,即取2维概率向量中较大的那个,输出判断结果,再根据softmax计算batch内所有句子的误差函数,取平均值最后对各权值求导,使用SGD调整权值,然而theano使用的是自动求导函数,求导公式不得而知这踏马就很尴尬了四、并行度措施分析1、batch内并行执行,mask解决了句子长度不一的问题2、一次性计算所有step的Wx
文档评论(0)