LSTM学习总结

博客主要介绍了LSTM的相关内容,包括其一般结构,如遗忘门层、输入门层和输出门层的具体公式及作用,还提及了LSTM的一些变形,如将Ct−1考虑进来和默认it=1−ft的情况。此外,还介绍了门控循环单元(GRU)的特点和细节。

LSTM

一般结构

LSTM

Forget Gate Layer
Detail

f t = σ ( W f ∗ [ h t − 1 , x t ] + b f ) f_{t}=\sigma (W_{f}*[h_{t-1},x_{t}]+b_f) ft=σ(Wf[ht1,xt]+bf)
决定信息保留程度,“1”代表完全保留,“0”代表完全舍弃

Input Gate Layer
Detail

i t = σ ( W i ∗ [ h t − 1 , x t ] + b i ) i_t=\sigma (W_i*[h_{t-1},x_t]+b_i) it=σ(Wi[ht1,xt]+bi)
C t ′ = t a n h ( W i ∗ [ h t − 1 , x t ] + b i ) C_t^{'}=tanh (W_i*[h_{t-1},x_t]+b_i) Ct=tanh(Wi[ht1,xt]+bi)

Next

C t = f t ∗ C t − 1 + i t ∗ C t ′ C_t=f_t*C_{t-1}+i_t*C_t{'} Ct=ftCt1+itCt

Output Gate Layer
Detail

o t = σ ( W o ∗ [ h t − 1 , x t ] + b o ) o_t=\sigma (W_o*[h_{t-1},x_t]+b_o) ot=σ(Wo[ht1,xt]+bo)
h t = o t ∗ t a n h ( C t ) h_t=o_t*tanh (C_t) ht=ottanh(Ct)

一些变形

C t − 1 C_{t-1} Ct1考虑进来

f t = σ ( W f ∗ [ h t − 1 , x t , C t − 1 ] + b f ) f_{t}=\sigma (W_{f}*[h_{t-1},x_{t},C_{t-1}]+b_f) ft=σ(Wf[ht1,xt,Ct1]+bf)
i t = σ ( W i ∗ [ h t − 1 , x t , C t − 1 ] + b i ) i_t=\sigma (W_i*[h_{t-1},x_t,C_{t-1}]+b_i) it=σ(Wi[ht1,xt,Ct1]+bi)
o t = σ ( W o ∗ [ h t − 1 , x t , C t − 1 ] + b o ) o_t=\sigma (W_o*[h_{t-1},x_t,C_{t-1}]+b_o) ot=σ(Wo[ht1,xt,Ct1]+bo)

默认 i t = 1 − f t i_t=1-f_t it=1ft

C t = f t ∗ C t − 1 + ( 1 − f t ) ∗ C t ′ C_t=f_t*C_{t-1}+(1-f_t)*C_t{'} Ct=ftCt1+(1ft)Ct
Ha

Gated Recurrent Unit(GRU)

特点
  1. 使用update gate代替forget & input gate
  2. 合并cell state 和 hidden state
Details

GRU

From

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

### LSTM中的学习步长概念 在深度学习领域,特别是循环神经网络(RNN)及其变体如长短时记忆网络(LSTM),学习步长通常指的是训练过程中优化算法的学习率参数。学习率决定了模型权重更新的速度和幅度,在梯度下降法中起着至关重要的作用。 #### 学习率的作用 学习率是一个超参数,用于控制每次迭代中模型权重调整的程度。如果学习率过高,则可能导致损失函数波动剧烈甚至发散;反之,过低的学习率会使得收敛过程变得极其缓慢[^1]。 #### 常见的学习率设置策略 1. **固定学习率** 使用固定的数值作为整个训练期间的学习率是最简单的方法之一。然而这种方法可能无法适应复杂的误差曲面特性。 2. **自适应学习率方法** 自适应优化器可以根据历史梯度动态调整每一轮次或者每个参数对应的学习速率。常见的有Adagrad, RMSProp以及Adam等算法[^2]。 3. **学习率调度器 (Learning Rate Scheduler)** 动态改变学习率的技术称为学习率衰减或调度。这可以通过多种方式实现,比如逐步减少、指数衰减或是基于验证集表现自动调节。 以下是Python代码展示如何利用PyTorch框架定义并应用不同的学习率方案: ```python import torch.optim as optim # 定义模型和其他组件... model = SomeModel() optimizer = optim.Adam(model.parameters(), lr=0.001) # 方案一:手动修改学习率 for epoch in range(num_epochs): for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() # 手动降低学习率 if epoch % 5 == 0 and epoch != 0: for param_group in optimizer.param_groups: param_group['lr'] *= 0.9 # 方案二:使用内置scheduler from torch.optim.lr_scheduler import StepLR scheduler = StepLR(optimizer, step_size=7, gamma=0.1) for epoch in range(num_epochs): scheduler.step() # 更新学习率 ... ``` 上述例子展示了两种管理学习率的方式——通过周期性乘因子来缩减初始设定值的手工操作,还有借助`StepLR`类完成自动化进程。 ### 总结 对于LSTM而言,“学习步长”的实际含义即为学习率的选择与调控机制。合理配置这一参数能够显著提升训练效率及最终效果。除了基础的恒定模式外,采用更灵活高效的自适配技术往往可以获得更好的成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值