当前位置: 首页 > news >正文

网站主办者是谁欧美化妆品网站模板下载

网站主办者是谁,欧美化妆品网站模板下载,制作公司网页需求表,wordpress建设中插件注#xff1a;本文为《动手学深度学习》开源内容#xff0c;部分标注了个人理解#xff0c;仅为个人学习记录#xff0c;无抄袭搬运意图 6.7 门控循环单元#xff08;GRU#xff09; 上一节介绍了循环神经网络中的梯度计算方法。我们发现#xff0c;当时间步数较大或者… 注本文为《动手学深度学习》开源内容部分标注了个人理解仅为个人学习记录无抄袭搬运意图 6.7 门控循环单元GRU 上一节介绍了循环神经网络中的梯度计算方法。我们发现当时间步数较大或者时间步较小时循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸但无法解决梯度衰减的问题。通常由于这个原因循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。 门控循环神经网络gated recurrent neural network的提出正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可以学习的门来控制信息的流动。其中门控循环单元gated recurrent unitGRU是一种常用的门控循环神经网络 [1, 2]。另一种常用的门控循环神经网络则将在下一节中介绍。 6.7.1 门控循环单元 下面将介绍门控循环单元的设计。它引入了重置门reset gate和更新门update gate的概念从而修改了循环神经网络中隐藏状态的计算方式。 6.7.1.1 重置门和更新门 如图6.4所示门控循环单元中的重置门和更新门的输入均为当前时间步输入 X t \boldsymbol{X}_t Xt​与上一时间步隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht−1​输出由激活函数为sigmoid函数的全连接层计算得到。 图6.4 门控循环单元中重置门和更新门的计算 具体来说假设隐藏单元个数为 h h h给定时间步 t t t的小批量输入 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} Xt​∈Rn×d样本数为 n n n输入个数为 d d d和上一时间步隐藏状态 H t − 1 ∈ R n × h \boldsymbol{H}_{t-1} \in \mathbb{R}^{n \times h} Ht−1​∈Rn×h。重置门 R t ∈ R n × h \boldsymbol{R}_t \in \mathbb{R}^{n \times h} Rt​∈Rn×h和更新门 Z t ∈ R n × h \boldsymbol{Z}_t \in \mathbb{R}^{n \times h} Zt​∈Rn×h的计算如下 R t σ ( X t W x r H t − 1 W h r b r ) , Z t σ ( X t W x z H t − 1 W h z b z ) , \begin{aligned} \boldsymbol{R}_t \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xr} \boldsymbol{H}_{t-1} \boldsymbol{W}_{hr} \boldsymbol{b}_r),\\ \boldsymbol{Z}_t \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xz} \boldsymbol{H}_{t-1} \boldsymbol{W}_{hz} \boldsymbol{b}_z), \end{aligned} Rt​σ(Xt​Wxr​Ht−1​Whr​br​),Zt​σ(Xt​Wxz​Ht−1​Whz​bz​),​ 其中 W x r , W x z ∈ R d × h \boldsymbol{W}_{xr}, \boldsymbol{W}_{xz} \in \mathbb{R}^{d \times h} Wxr​,Wxz​∈Rd×h和 W h r , W h z ∈ R h × h \boldsymbol{W}_{hr}, \boldsymbol{W}_{hz} \in \mathbb{R}^{h \times h} Whr​,Whz​∈Rh×h是权重参数 b r , b z ∈ R 1 × h \boldsymbol{b}_r, \boldsymbol{b}_z \in \mathbb{R}^{1 \times h} br​,bz​∈R1×h是偏差参数。3.8节多层感知机节中介绍过sigmoid函数可以将元素的值变换到0和1之间。因此重置门 R t \boldsymbol{R}_t Rt​和更新门 Z t \boldsymbol{Z}_t Zt​中每个元素的值域都是 [ 0 , 1 ] [0, 1] [0,1]。 6.7.1.2 候选隐藏状态 接下来门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。如图6.5所示我们将当前时间步重置门的输出与上一时间步隐藏状态做按元素乘法符号为 ⊙ \odot ⊙。如果重置门中元素值接近0那么意味着重置对应隐藏状态元素为0即丢弃上一时间步的隐藏状态。如果元素值接近1那么表示保留上一时间步的隐藏状态。然后将按元素乘法的结果与当前时间步的输入连结再通过含激活函数tanh的全连接层计算出候选隐藏状态其所有元素的值域为 [ − 1 , 1 ] [-1, 1] [−1,1]。 图6.5 门控循环单元中候选隐藏状态的计算 具体来说时间步 t t t的候选隐藏状态 H ~ t ∈ R n × h \tilde{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h} H~t​∈Rn×h的计算为 H ~ t tanh ( X t W x h ( R t ⊙ H t − 1 ) W h h b h ) , \tilde{\boldsymbol{H}}_t \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xh} \left(\boldsymbol{R}_t \odot \boldsymbol{H}_{t-1}\right) \boldsymbol{W}_{hh} \boldsymbol{b}_h), H~t​tanh(Xt​Wxh​(Rt​⊙Ht−1​)Whh​bh​), 其中 W x h ∈ R d × h \boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h} Wxh​∈Rd×h和 W h h ∈ R h × h \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h} Whh​∈Rh×h是权重参数 b h ∈ R 1 × h \boldsymbol{b}_h \in \mathbb{R}^{1 \times h} bh​∈R1×h是偏差参数。从上面这个公式可以看出重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间步的隐藏状态可能包含了时间序列截至上一时间步的全部历史信息。因此重置门可以用来丢弃与预测无关的历史信息。 6.7.1.3 隐藏状态 最后时间步 t t t的隐藏状态 H t ∈ R n × h \boldsymbol{H}_t \in \mathbb{R}^{n \times h} Ht​∈Rn×h的计算使用当前时间步的更新门 Z t \boldsymbol{Z}_t Zt​来对上一时间步的隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht−1​和当前时间步的候选隐藏状态 H ~ t \tilde{\boldsymbol{H}}_t H~t​做组合 H t Z t ⊙ H t − 1 ( 1 − Z t ) ⊙ H ~ t . \boldsymbol{H}_t \boldsymbol{Z}_t \odot \boldsymbol{H}_{t-1} (1 - \boldsymbol{Z}_t) \odot \tilde{\boldsymbol{H}}_t. Ht​Zt​⊙Ht−1​(1−Zt​)⊙H~t​. 图6.6 门控循环单元中隐藏状态的计算 值得注意的是更新门可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新如图6.6所示。假设更新门在时间步 t ′ t t′到 t t t t ′ t t t t′t之间一直近似1。那么在时间步 t ′ t t′到 t t t之间的输入信息几乎没有流入时间步 t t t的隐藏状态 H t \boldsymbol{H}_t Ht​。实际上这可以看作是较早时刻的隐藏状态 H t ′ − 1 \boldsymbol{H}_{t-1} Ht′−1​一直通过时间保存并传递至当前时间步 t t t。这个设计可以应对循环神经网络中的梯度衰减问题并更好地捕捉时间序列中时间步距离较大的依赖关系。 我们对门控循环单元的设计稍作总结 重置门有助于捕捉时间序列里短期的依赖关系更新门有助于捕捉时间序列里长期的依赖关系。 6.7.2 读取数据集 为了实现并展示门控循环单元下面依然使用周杰伦歌词数据集来训练模型作词。这里除门控循环单元以外的实现已在6.2节循环神经网络中介绍过。以下为读取数据集部分。 import numpy as np import torch from torch import nn, optim import torch.nn.functional as Fimport sys sys.path.append(..) import d2lzh_pytorch as d2l device torch.device(cuda if torch.cuda.is_available() else cpu)(corpus_indices, char_to_idx, idx_to_char, vocab_size) d2l.load_data_jay_lyrics()6.7.3 从零开始实现 我们先介绍如何从零开始实现门控循环单元。 6.7.3.1 初始化模型参数 下面的代码对模型参数进行初始化。超参数num_hiddens定义了隐藏单元的个数。 num_inputs, num_hiddens, num_outputs vocab_size, 256, vocab_size print(will use, device)def get_params():def _one(shape):ts torch.tensor(np.random.normal(0, 0.01, sizeshape), devicedevice, dtypetorch.float32)return torch.nn.Parameter(ts, requires_gradTrue)def _three():return (_one((num_inputs, num_hiddens)),_one((num_hiddens, num_hiddens)),torch.nn.Parameter(torch.zeros(num_hiddens, devicedevice, dtypetorch.float32), requires_gradTrue))W_xz, W_hz, b_z _three() # 更新门参数W_xr, W_hr, b_r _three() # 重置门参数W_xh, W_hh, b_h _three() # 候选隐藏状态参数# 输出层参数W_hq _one((num_hiddens, num_outputs))b_q torch.nn.Parameter(torch.zeros(num_outputs, devicedevice, dtypetorch.float32), requires_gradTrue)return nn.ParameterList([W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q])6.7.3.2 定义模型 下面的代码定义隐藏状态初始化函数init_gru_state。同6.4节循环神经网络的从零开始实现中定义的init_rnn_state函数一样它返回由一个形状为(批量大小, 隐藏单元个数)的值为0的Tensor组成的元组。 def init_gru_state(batch_size, num_hiddens, device):return (torch.zeros((batch_size, num_hiddens), devicedevice), )下面根据门控循环单元的计算表达式定义模型。 def gru(inputs, state, params):W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q paramsH, stateoutputs []for X in inputs:Z torch.sigmoid(torch.matmul(X, W_xz) torch.matmul(H, W_hz) b_z)R torch.sigmoid(torch.matmul(X, W_xr) torch.matmul(H, W_hr) b_r)H_tilda torch.tanh(torch.matmul(X, W_xh) torch.matmul(R * H, W_hh) b_h)H Z * H (1 - Z) * H_tildaY torch.matmul(H, W_hq) b_qoutputs.append(Y)return outputs, (H,)6.7.3.3 训练模型并创作歌词 我们在训练模型时只使用相邻采样。设置好超参数后我们将训练模型并根据前缀“分开”和“不分开”分别创作长度为50个字符的一段歌词。 num_epochs, num_steps, batch_size, lr, clipping_theta 160, 35, 32, 1e2, 1e-2 pred_period, pred_len, prefixes 40, 50, [分开, 不分开]我们每过40个迭代周期便根据当前训练的模型创作一段歌词。 d2l.train_and_predict_rnn(gru, get_params, init_gru_state, num_hiddens,vocab_size, device, corpus_indices, idx_to_char,char_to_idx, False, num_epochs, num_steps, lr,clipping_theta, batch_size, pred_period, pred_len,prefixes)输出 epoch 40, perplexity 149.477598, time 1.08 sec- 分开 我不不你 我想你你的爱我 你不你的让我 你不你的让我 你不你的让我 你不你的让我 你不你的让我 你- 不分开 我想你你的让我 你不你的让我 你不你的让我 你不你的让我 你不你的让我 你不你的让我 你不你的让我 epoch 80, perplexity 31.689210, time 1.10 sec- 分开 我想要你 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不- 不分开 我想要你 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不要再想 我不 epoch 120, perplexity 4.866115, time 1.08 sec- 分开 我想要这样牵着你的手不放开 爱过 让我来的肩膀 一起好酒 你来了这节秋 后知后觉 我该好好生活 我- 不分开 你已经不了我不要 我不要再想你 我不要再想你 我不要再想你 不知不觉 我跟了这节奏 后知后觉 又过 epoch 160, perplexity 1.442282, time 1.51 sec- 分开 我一定好生忧 唱着歌 一直走 我想就这样牵着你的手不放开 爱可不可以简简单单没有伤害 你 靠着我的- 不分开 你已经离开我 不知不觉 我跟了这节奏 后知后觉 又过了一个秋 后知后觉 我该好好生活 我该好好生活6.7.4 简洁实现 在PyTorch中我们直接调用nn模块中的GRU类即可。 lr 1e-2 # 注意调整学习率 gru_layer nn.GRU(input_sizevocab_size, hidden_sizenum_hiddens) model d2l.RNNModel(gru_layer, vocab_size).to(device) d2l.train_and_predict_rnn_pytorch(model, num_hiddens, vocab_size, device,corpus_indices, idx_to_char, char_to_idx,num_epochs, num_steps, lr, clipping_theta,batch_size, pred_period, pred_len, prefixes)输出 epoch 40, perplexity 1.022157, time 1.02 sec- 分开手牵手 一步两步三步四步望著天 看星星 一颗两颗三颗四颗 连成线背著背默默许下心愿 看远方的星是否听- 不分开暴风圈来不及逃 我不能再想 我不能再想 我不 我不 我不能 爱情走的太快就像龙卷风 不能承受我已无处 epoch 80, perplexity 1.014535, time 1.04 sec- 分开始想像 爸和妈当年的模样 说著一口吴侬软语的姑娘缓缓走过外滩 消失的 旧时光 一九四三 在回忆 的路- 不分开始爱像 不知不觉 你已经离开我 不知不觉 我跟了这节奏 后知后觉 又过了一个秋 后知后觉 我该好好 epoch 120, perplexity 1.147843, time 1.04 sec- 分开都靠我 你拿着球不投 又不会掩护我 选你这种队友 瞎透了我 说你说 分数怎么停留 所有回忆对着我进攻- 不分开球我有多烦恼多 牧草有没有危险 一场梦 我面对我 甩开球我满腔的怒火 我想揍你已经很久 别想躲 说你 epoch 160, perplexity 1.018370, time 1.05 sec- 分开爱上你 那场悲剧 是你完美演出的一场戏 宁愿心碎哭泣 再狠狠忘记 你爱过我的证据 让晶莹的泪滴 闪烁- 不分开始 担心今天的你过得好不好 整个画面是你 想你想的睡不著 嘴嘟嘟那可爱的模样 还有在你身上香香的味道小结 门控循环神经网络可以更好地捕捉时间序列中时间步距离较大的依赖关系。门控循环单元引入了门的概念从而修改了循环神经网络中隐藏状态的计算方式。它包括重置门、更新门、候选隐藏状态和隐藏状态。重置门有助于捕捉时间序列里短期的依赖关系。更新门有助于捕捉时间序列里长期的依赖关系。 参考文献 [1] Cho, K., Van Merriënboer, B., Bahdanau, D., Bengio, Y. (2014). On the properties of neural machine translation: Encoder-decoder approaches. arXiv preprint arXiv:1409.1259. [2] Chung, J., Gulcehre, C., Cho, K., Bengio, Y. (2014). Empirical evaluation of gated recurrent neural networks on sequence modeling. arXiv preprint arXiv:1412.3555. 注除代码外本节与原书此节基本相同原书传送门
http://www.zqtcl.cn/news/714963/

相关文章:

  • 山东省双体系建设网站wordpress 帮助 主题
  • 手机怎么做三个视频网站网站建设协议一百互联
  • 创建一个网站一般步骤有哪些安徽软件定制开发
  • 网站建设平台协议书模板下载佳木斯建网站的
  • 部队网站建设招标二级域名注册平台
  • 做网站怎么调用栏目织梦搞笑图片网站源码
  • 开个小网站要怎么做南宁seo外包服务商
  • 济宁做网站的企业app网站开发学习
  • 哪个网站可以做危险化学品供求html静态网站作品
  • 豪圣建设项目管理网站创建网站的视频
  • 网站做接口自己做的网站只能用谷歌浏览器打开
  • 建设网站具体步骤python 做 网站
  • 网站源代码怎么上传wordpress标题字体大小
  • 营销型网站哪家好网页设计一张多少钱
  • 怎么搭建购物网站山东德州网站建设
  • 网站 404 错误页面是否自动跳转太原网站建设王道下拉惠
  • 美仑-专门做服装的网站淘宝详情页制作
  • 网站商城制作策划公司组织结构图
  • 商务网站建设教程企网
  • 北京做网站推广多少钱丽水网站建设公司排名
  • 淄博网站关键词优化安丘网站建设公司
  • 教育建设网站wordpress 创建模板文件
  • 门户网站开发视频教学百度关键词怎么刷上去
  • 做网站搞流量挂联盟广告变现新媒体营销心得体会
  • 网站做信息流网站如何做担保交易平台
  • php网站后台访问统计分析互联网营销师题库
  • 提供建站服务的网络公司的比较注册网站域名后免费建站
  • 颍上建设网站长江商学院 网站建设
  • 做酒店销售上哪个网站好东莞出租车公司
  • 如何在记事本中做网站链接好看的wordpress文章模板下载