最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

theano-lstm源码算法分析v1.0

来源:动视网 责编:小OO 时间:2025-10-04 11:02:58
文档

theano-lstm源码算法分析v1.0

theano_LSTM源码算法分析一、网络参数本文档分析的源码来自于theano官网的一份LSTM源码(http://deeplearning.net/tUtorial/LSTM.html),用LSTM网络分析一条电影影评是赞赏还是批判。二、网络结构一个LSTM网络(dim_proj=128个LSTM节点)的结构如上图,计算公式和参数如下:该结构图是时间轴上的展开图,图中的所有LSTM网络其实是一个,输入xt为词向量,dim_proj=128维,n为句子的长度(即多少个单词),LSTM内部共有
推荐度:
导读theano_LSTM源码算法分析一、网络参数本文档分析的源码来自于theano官网的一份LSTM源码(http://deeplearning.net/tUtorial/LSTM.html),用LSTM网络分析一条电影影评是赞赏还是批判。二、网络结构一个LSTM网络(dim_proj=128个LSTM节点)的结构如上图,计算公式和参数如下:该结构图是时间轴上的展开图,图中的所有LSTM网络其实是一个,输入xt为词向量,dim_proj=128维,n为句子的长度(即多少个单词),LSTM内部共有
theano_LSTM源码算法分析

一、网络参数

本文档分析的源码来自于theano官网的一份LSTM源码(http://deeplearning.net/tUtorial/LSTM.html), 用LSTM网络分析一条电影影评是赞赏还是批判。

二、网络结构

一个LSTM网络(dim_proj=128个LSTM节点)的结构如上图,计算公式和参数如下:

该结构图是时间轴上的展开图,图中的所有LSTM网络其实是一个,输入x t为词向量,dim_proj=128维,n为句子的长度(即多少个单词),LSTM内部共有node=128个LSTM节点(节点数量必须与词向量维度相同,因为每个节点输出一个h t数值,所有节点组成的的维度要与x t保持一致),当一个句子计算完成后将每一step的取平均值,再经过softmax分类器得到最终的判断结果,计算公式如下:

三、源码数据流分析

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矩阵每一个元素是一个单词的索引值。

step=min(m axlen,最长的

句子长度)batch_size

x

step=min(m axlen,最长的

句子长度)

batch_size

mask

batch_size

y

Init_params 和param_init_LSTM 函数进行各项权值初始化,LSTM 层的参数用了鬼畜的正交矩阵方法初始化,其他参数用的是普通随机数。参数中的Wemb 存

放词向量集,词向量用随机数初始化,随着每次训练更新,即这里的语言模型是训练得到的。

lstm_W

dim_proj

node node

lstm_U

node

node node

lstm_b

node node

Wemb

dim_proj

U

node

b

bUild_model 函数建立各种计算公式,按照x中的词索引在Wemb中寻找对应的词向量,生成三维矩阵emb,注意我画的那么长就是为了说明这里是词向量而不是词索引值了。

emb

f_pred_prob 函数计算输出的2维概率向量,调用了最核心的lstm_layer 函数完成lstm 层的计算:

①由于每个step 间Wx 的操作是完全无关的,可以并行处理,第一步计算emb=emb*lstm_W ,这里是一个3维矩阵和2维矩阵的乘法,即emb 的每一个step 对应的二维矩阵都做一次和W 的乘法

emb*W

×

×

×

=

=

=

4*node

batch_size

step

②h 、c 先初始化为[batch_size,node]的零矩阵

③在每个step 内,i 、f 、c’、o 都需要计算Uh t-1,这之间也是完全并行的

h*U

×

=

4*node

batch_size

batch_size

node

④根据公式,计算出i 、f 、c ’、o ,这之间也是完全并行的

i 、f 、o 、c

node

batch_size

*

*

⑤计算c 、h ,注意这里的乘不是矩阵乘法,而是矩阵对应位置的两个元素相乘,其中还应用到mask 矩阵来解决batch 内每个句子长度不同的问题,用mask 矩阵中相应的元素做如下的计算:c t =mask*c+(1-mask)c t-1,如果句子已经结束,对应的mask 矩阵值为0,c t = c t-1,反之,c t =c ,细胞状态更新,h 同理

1011 (1)

1011 (1)

batch_size

*

*

*

tanh

+

*

*

batch_size

h、c

⑦迭代完成后,将每个step 对应的取平均值,这里要注意batch 内每个句子的长度都不一样,因此取平均值除数也不同

1111......11111......11111......11011......11011......11011 (11)

011 (11001)

(1)

000

1 (10)

……

1

按列求和

8

3

7

9 (10)

*

step

node

……

batch_size

batch_size

node

h n h n ……h n

h n

h n ……h n

h n h n ……h n

……………………

h n h n ……h n

step

h 2h 2……

h 2h 2h 2……

h 2h 2h 2……

h 2…………

……h 2h 2……h 21h 1……h 11h 1……h 1h 1h 1……h 1

………………

h 1h 1……h

1

batch_size

node

00……

0

00 0

……………………

h n h n ……h

n

step

h 2h 2……h 2h 2h 2……

h 2h 2h 2……

h 2…………

…………h 2h 2……h

21h 1……h 11h 1……h 1h 1h 1h 1

………………

h 1h 1……h 1

sumsum ……sum sumsum ……sum sumsum ……sum ……………………sumsum ……sum

所有step 的和

88 (83)

3......377 (79)

9 (9)

........................1011 (13)

node

÷

batch_size

h h ……h h h ……h h

h

……

h

……………………h

h

……

h

node

乘mask

⑧计算2维概率向量z

×=+2

batch_size z

f_pred 计算预测响应,即取2维概率向量中较大的那个,输出判断结果,再根据softmax 计算batch 内所有句子的误差函数,取平均值

最后对各权值求导,使用SGD 调整权值,然而theano 使用的是自动求导函数,求导公式不得而知 这踏马就很尴尬了

四、并行度措施分析

2、一次性计算所有step的Wx

文档

theano-lstm源码算法分析v1.0

theano_LSTM源码算法分析一、网络参数本文档分析的源码来自于theano官网的一份LSTM源码(http://deeplearning.net/tUtorial/LSTM.html),用LSTM网络分析一条电影影评是赞赏还是批判。二、网络结构一个LSTM网络(dim_proj=128个LSTM节点)的结构如上图,计算公式和参数如下:该结构图是时间轴上的展开图,图中的所有LSTM网络其实是一个,输入xt为词向量,dim_proj=128维,n为句子的长度(即多少个单词),LSTM内部共有
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top