深度学习6 -- LSTM/GRU

文章介绍了LSTM如何解决RNN的长距离依赖问题,LSTM通过添加额外的c状态来保存长期信息,以克服梯度消失。LSTM的结构包括输入门、前向计算等,虽然复杂但能有效处理序列数据。此外,GRU作为LSTM的简化版,也能达到相近的效果。
摘要由CSDN通过智能技术生成

引言

  • 在上一篇种介绍的循环神经网络,由于其只计算前一项和后一项距离较短,所以很难处理长距离依赖场景,所以本文将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但是个人理解的时候发现结构还是比较复杂的,所以部分公式不理解的地方会有标注,以后自己手动实现的时候会继续补充。

关于RNN为何无法解决长距离依赖问题的原因

  • 进一步详情请看参考资料,此处只作个人理解,可能有错误,酌情理解
    • 首先上篇结尾已经说过RNN存在的关于梯度消失和梯度爆炸的问题
      RNN篇

  • 我们就可以看到,从上图的t-3时刻开始,梯度已经几乎减少到0了。那么,从这个时刻开始再往之前走,得到的梯度(几乎为零)就不会对最终的梯度值有任何贡献,这就相当于无论t-3时刻之前的网络状态h是什么,在训练中都不会对权重数组W的更新产生影响,也就是网络事实上已经忽略了t-3时刻之前的状态。这就是原始RNN无法处理长距离依赖的原因

LSTM的结构

  • 简单来说LSTM就是在隐藏层只有h状态的基础上,又加入了一个c,用来保存长期状态

LSTM的前向计算:

  • 接下来是输入门:以及对应图解

LSTM的训练

  • 和之前的训练没有什么不同,但是不同的是LSTM的变量有些多,计算量更大,不过都是重复操作,最好抽出一个理解,再类比记忆
    • 两个损失函数,8个参数,以及符号o的计算方式

  • 一下全导数公式需要看完,整体去理解,作者有分开写偏导的表达式

  • 继续往下看,就知道该全导数怎么计算的了

  • 同理可得

  • 截图并非全部,但是可以类比得出,此处不做完整截图,可以发现只要最上面第一个全导数公式理解后,后面就跟以前的文章类似了,比较容易理解。

GRU

  • 关于GRU为啥结构简单了却能实现和LSTM不相上下的效果,可以看参考资料,个人觉得对于保存过去信息这一概念在数学公式上的表达,简答理解能相通即可,太复杂的去想反而容易无解,LSTM保留信息部分还有GRU保留信息部分可以参考下图。

参考资料

1 主要参考资料

2 包含GRU与LSTM异同的原因介绍

3 辅助理解LSTM结构图(有动图)

### Vue3 中 Vuex 的使用教程 #### 安装 Vuex 对于 Vue 3 应用程序,推荐安装最新版本的 Vuex。可以通过 npm 或者 yarn 来完成安装[^3]。 ```bash npm install vuex@next --save yarn add vuex@next --save ``` #### 创建 Store 实例 在 Vue 3 和 Vuex 结合使用的场景下,创建 store 实例的方式略有不同。下面是一个基本的例子来展示如何设置一个 Vuex store: ```javascript import { createStore } from 'vuex' const store = createStore({ state () { return { count: 0 } }, mutations: { increment (state) { state.count++ } }, actions: { increment ({ commit }) { commit('increment') } } }) export default store; ``` 这段代码展示了如何初始化一个新的 Vuex store 并导出它以便可以在应用中使用[^1]。 #### 集成到 Vue 应用 为了让 Vuex store 能够被整个应用程序访问,在创建 Vue 实例时需要传递 `store` 参数给根组件选项对象: ```javascript import { createApp } from 'vue' import App from './App.vue' import store from './store' // 假设上面的 store 文件位于 src/store.js createApp(App).use(store).mount('#app') ``` 这样做的目的是让所有的子组件都可以轻松地获取状态数据以及触发相应的操作。 #### 组件中的使用方式 当 Vuex 已经集成到了项目里之后,就可以很方便地读取全局状态或是提交变更请求了。比如在一个 `.vue` 单文件组件内部可以直接利用计算属性和方法来进行交互[^2]: ```html <template> <div class="example"> {{ count }} <button @click="increment">Increment</button> </div> </template> <script> export default { computed: { count() { return this.$store.state.count } }, methods: { increment() { this.$store.dispatch('increment') } } } </script> ``` 此部分介绍了如何在单文件组件中通过 `$store` 访问共享的数据源并执行相应的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矮人三等

秀儿,是你吗秀儿?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值