海盐县建设门户网站,马克·扎克伯格大学做的网站,云开发低码,asp网站整站下载器文章目录1. 为什么选择序列模型2. 数学符号3. 循环Recurrent 神经网络模型4. 通过时间的反向传播5. 不同类型的循环神经网络6. 语言模型和序列生成7. 对新序列采样8. 循环神经网络的梯度消失9. Gated Recurrent Unit#xff08;GRU单元#xff09;10. LSTM#xff08;long s…
文章目录1. 为什么选择序列模型2. 数学符号3. 循环Recurrent 神经网络模型4. 通过时间的反向传播5. 不同类型的循环神经网络6. 语言模型和序列生成7. 对新序列采样8. 循环神经网络的梯度消失9. Gated Recurrent UnitGRU单元10. LSTMlong short term memoryunit11. 双向循环神经网络Bidirectional RNN12. 深层循环神经网络Deep RNNs作业参考吴恩达视频课深度学习笔记1. 为什么选择序列模型 有些问题输入数据 X 和 输出数据 Y 都是序列X 和 Y 有时也会不一样长。在另一些问题里只有 X 或 只有 Y 是序列
2. 数学符号 3. 循环Recurrent 神经网络模型
为什么不使用标准的神经网络学习上面的 X 到 Y 的映射 atg1(Waaat−1Waxxtba)a^{t}g_{1}\left(W_{a a} a^{t-1}W_{a x} x^{t}b_{a}\right)atg1(Waaat−1Waxxtba)
y^tg2(Wyaatby)\hat{y}^{t}g_{2}\left(W_{y a} a^{t}b_{y}\right)y^tg2(Wyaatby) 4. 通过时间的反向传播
编程框架通常会自动实现反向传播但是还是要认识下它的运作机制 Lt(y^t,yt)−ytlogy^t−(1−yt)log(1−y^t)L^{t}\left(\hat{y}^{t}, y^{t}\right)-y^{t} \log \hat{y}^{t}-\left(1-y^{t}\right) \log \left(1-\hat{y}^{t}\right)Lt(y^t,yt)−ytlogy^t−(1−yt)log(1−y^t)
L(y^,y)∑t1TxLt(y^t,yt)L(\hat{y}, y)\sum_{t1}^{T_{x}} L^{t}\left(\hat{y}^{t}, y^{t}\right)L(y^,y)t1∑TxLt(y^t,yt)
最小化损失通过梯度下降来更新参数
5. 不同类型的循环神经网络 6. 语言模型和序列生成
语言模型所做的就是它会告诉你某个特定的句子它出现的概率是多少
得到一个句子后
建立一个字典将每个单词转成 one-hot 编码定义句子的结尾增加一个额外的标记 EOS更准确的识别结尾还有不存在的词都归为 unknow UNK 7. 对新序列采样
训练一个序列模型之后要想了解到这个模型学到了什么一种非正式的方法就是进行一次新序列采样 以上是基于词汇的RNN模型还可以基于字符
基于字符
优点不必担心会出现未知的标识缺点会得到太多太长的序列大多数英语句子只有10到20个的单词但却可能包含很多很多字符。基于字符的模型在捕捉句子中的依赖关系不如基于词汇的语言模型那样可以捕捉长范围的关系并且基于字符的模型训练成本较高。
自然语言处理的趋势就是绝大多数都是使用基于词汇的语言模型但随着计算机性能越来越高会有更多的应用。 在一些特殊情况下会开始使用基于字符的模型。除了一些比较专门需要处理大量未知的文本或未知词汇的应用还有一些要面对很多专有词汇的应用。
8. 循环神经网络的梯度消失 反向传播的时候随着层数的增多梯度不仅可能指数下降也可能指数上升。
梯度爆炸你会看到很多NaN数值溢出。解决方法就是用梯度修剪。如果它大于某个阈值缩放梯度向量保证它不会太大这是相对比较鲁棒的然而梯度消失更难解决
9. Gated Recurrent UnitGRU单元
门控循环单元 GRU它改变了RNN的隐藏层使其可以更好地捕捉深层连接并改善了梯度消失问题
普通的RNN单元结构如下 c~ttanh(Wc[ct−1,xt]bc)\tilde{c}^{t}\tanh \left(W_{c}\left[c^{t-1}, x^{t}\right]b_{c}\right)c~ttanh(Wc[ct−1,xt]bc)
Γuσ(Wu[ct−1,xt]bu)\Gamma_{u}\sigma\left(W_{u}\left[c^{t-1}, x^{t}\right]b_{u}\right)Γuσ(Wu[ct−1,xt]bu)
ctΓu∗c~t(1−Γu)∗ct−1c^{t}\Gamma_{u} * \tilde{c}^{t}\left(1-\Gamma_{u}\right) * c^{t-1}ctΓu∗c~t(1−Γu)∗ct−1
GRU单元的优点就是通过门决定是否更新记忆细胞
当你从左到右扫描一个句子的时候这时是要更新某个记忆细胞还是不更新不更新上图中间一直为0表示一直不更新直到你真的需要使用记忆细胞的时候这可能在句子之前就决定了。因为sigmoid的值现在门很容易取到0值只要这个值是一个很大的负数再由于数值上的四舍五入上面这些门大体上就是0或者说非常非常非常接近0。这非常有利于维持细胞的值。因为很接近0可能是0.000001或者更小这就不会有梯度消失的问题了。这就是缓解梯度消失问题的关键因此允许神经网络运行在非常庞大的依赖词上比如说cat和was单词即使被中间的很多单词分割开
如果门是多维的向量元素对应的乘积做的就是告诉GRU单元哪个记忆细胞的向量维度在每个时间步要做更新所以你可以选择保存一些比特不变而去更新其他的比特。比如说你可能需要一个比特来记忆猫是单数还是复数其他比特来理解你正在谈论食物你可以每个时间点只改变一些比特
FULL GRU
Γrσ(Wr[ct−1,xt]br)\Gamma_{r}\sigma\left(W_{r}\left[c^{t-1}, x^{t}\right]b_{r}\right)Γrσ(Wr[ct−1,xt]br)
上式告诉我们 c~t,ct−1\tilde c^{t}, c^{t-1}c~t,ct−1 有多少相关性 研究表明去尝试让神经网络有更深层的连接去尝试产生更大范围的影响还有解决梯度消失的问题GRU就是其中一个研究者们最常使用的版本也被发现在很多不同的问题上也是非常健壮和实用的
GRU结构可以更好捕捉非常长范围的依赖让RNN更加有效。 还有比较经典的是LSTM即长短时记忆网络见下节
10. LSTMlong short term memoryunit c~ttanh(Wc[at−1,xt]bc)\tilde{c}^{t}\tanh \left(W_{c}\left[a^{t-1}, x^{t}\right]b_{c}\right)c~ttanh(Wc[at−1,xt]bc)
Γuσ(Wu[at−1,xt]bu)\Gamma_{u}\sigma\left(W_{u}\left[a^{t-1}, x^{t}\right]b_{u}\right) Γuσ(Wu[at−1,xt]bu)
Γfσ(Wf[at−1,xt]bf)\Gamma_{f}\sigma\left(W_{f}\left[a^{t-1}, x^{t}\right]b_{f}\right) Γfσ(Wf[at−1,xt]bf)
Γoσ(Wo[at−1,xt]bo)\Gamma_{o}\sigma\left(W_{o}\left[a^{t-1}, x^{t}\right]b_{o}\right) Γoσ(Wo[at−1,xt]bo)
ctΓu∗c~tΓf∗ct−1c^{t}\Gamma_{u} * \tilde{c}^{t}\Gamma_{f} * c^{t-1} ctΓu∗c~tΓf∗ct−1
atΓo∗tanhcta^{t}\Gamma_{o} * \tanh c^{t}atΓo∗tanhct 用GRU用LSTM
GRU 更加简单更容易创建一个更大的网络它只有两个门在计算性上也运行得更快但 LSTM 更加强大和灵活因为它有三个门。大部分人会把 LSTM 作为默认的选择来尝试
无论是GRU还是LSTM都可以用它们来构建捕获更加深层连接的神经网络
11. 双向循环神经网络Bidirectional RNN
BRNN 模型可以让你在序列的某点处不仅可以获取之前的信息还可以获取未来的信息 上面的基本单元不仅可以是标准RNN单元也可以是 GRU 或 LSTM 单元。
NLP自然语言处理问题常用 有LSTM单元的双向RNN模型是用的最多。
上面的双向RNN网络模型的缺点你需要完整的数据的序列你才能预测任意位置
比如构建一个语音识别系统需要等待这个人说完获取整个语音表达才能处理这段语音并进一步做语音识别。实际的语音识别通常会有更加复杂的模块
12. 深层循环神经网络Deep RNNs 作业
05.序列模型 W1.循环序列模型作业手写RNN恐龙名字生成
本文地址https://michael.blog.csdn.net/article/details/108815992 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步