神经网络中常用的隐含层结构
一、全连接层
又称线性层,即 y = W x + b y = Wx + b y=Wx+b,其中W为权重矩阵,b为偏置向量,x为输入向量,y为输出向量。
可以加多层,也可以加激活函数以引入非线性信息。
pytorch实现:torch.nn.Linear(vector_dim,output_dim) # vector_dim为输入维度,1为输出维度
二、循环神经网络-RNN
将整个序列划分成多个时间步,将每一个时间步的信息依次输入模型,同时将模型输出的结果传给下一个时间步。
在做NLP任务时,RNN有捕捉输入的整个语句的上下文信息的能力,但是当序列长度过长时,RNN会出现梯度消失或梯度爆炸的问题,导致模型无法捕捉到长距离的依赖关系。
计算公式:
h t = tanh ( U x t + W h t − 1 + b ) h_t = \tanh(U x_t + W h_{t-1} + b)\\ ht=tanh(Uxt+Wht−1+b)
其中, h t h_t ht为隐藏状态, x t x_t xt为输入, U U U、 W W W分别为输入权重、隐藏状态权重, b b b为偏置。
pytorch实现:
import torch.nn as nn
rnn = nn.RNN(input_size, hidden_size, num_layers,batch_first=True)
#其中input_size是输入向量的维度,hidden_size是隐藏状态的维度,num_layers是RNN的层数,batch_first表示输入和输出是否以batch为第一维,默认为False。
output, hidden = rnn(input)
#这里的输出output是所有时间步的隐藏状态,hidden是最后一个时间步的隐藏状态。如果想要得到的是输入语句的向量,可以用output[0],再对其做pooling后进行一些具体的应用,如文本匹配等。
三、长短期记忆网络-LSTM
LSTM是一种特殊的RNN,将RNN的隐单元复杂化,一定程度上规避了RNN在处理长序列时梯度消失的问题。
计算公式:
f t = σ ( W f [ h t − 1 , x t ] + b f ) i t = σ ( W i [ h t − 1 , x t ] + b i ) C t ~ = t a n h ( W c [ h t − 1 , x t ] + b c ) C t = f t ∗ C t − 1 + i t ∗ C t ~ o t = σ ( W o [ h t − 1 , x t ] + b o ) h t = o t ∗ t a n h ( C t ) f_t = \sigma (W_f [h_{t-1}, x_t] + b_f)\\ i_t = \sigma (W_i [h_{t-1}, x_t] + b_i)\\ \tilde{C_t} = tanh(W_c [h_{t-1}, x_t] + b_c)\\ C_t = f_t * C_{t-1} + i_t * \tilde{C_t}\\ o_t = \sigma (W_o [h_{t-1}, x_t] + b_o)\\ h_t = o_t * tanh(C_t) ft=σ(W

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



