• 神经网络(六)循环神经网络


    一、增加记忆功能

            1.可计算问题

                    其中函数不涉及记忆问题,可以使用前馈神经网络计算

                    但是图灵机涉及记忆问题,需要为神经网络增加记忆能力

            2.如何增加记忆能力

                     ①时延神经网络

                            额外增加一个延时单元(用以存储网络的历史信息<输入、输出、隐状态等>)

                     ②自回归模型

                            用变量yt的历史信息来预测自己

                     ③有外部输入的非线性自回归模型

                                     f(.)为非线性函数,可以是前馈网络。Kx和Ky为超参数

     二、循环神经网络

            循环神经网络的神经元自带反馈,可以处理任意长度的时序数据

             循环神经网络比前馈神经网络更符合神生物经网络的结构,被广泛应用在语音设备、预言模型、及自然语言生成等任务。

            将循环神经网络按时间展开

                     其在时间维上极深,同样存在梯度消失问题。在非时间维上较浅,需要适度增加其模型复杂度。

            1.简单循环神经网络

                     一个完全连接的循环网络是任何非线性动力系统的近似器

                    循环神经网络通用近似定理

                             s_t=g(s_{t-1},x)        y_t=o(s_t)

                             St为每个时刻的隐藏状态,xt为外部输入,g(.)为状态转换函数,O(.)为连续输出函数

                    图灵完备

                            可以实现图灵机的所用功能(可以解决所有可以算问题),一个完全连接的循环神经网络可以近似于图灵完备

            2.应用到机器学习

                     ①序列到类别

                             将所有h进行平均/求和,再送入分类器之中

                    ②同步的序列到序列模式

                             例如:中文分词、信息抽取(文本中抽取信息,形成知识)、语音识别--等容易出现分歧的问题

                    ③异步的序列到序列模式

                             例如:机器翻译

            3.参数学习与长程依赖问题

                    ①参数学习

                            以同步的序列到序列循环神经网络为例,给定一个学习样本(x,y),长度均为T

                             时刻t的瞬时损失函数为:L_t=L(y_t,g(h_t))     g(h_t)为后验概率

                            总损失函数L=\sum_{t=1}^TL_t 

                            计算梯度Z_t=Uh_{t-1}+Wx_t+b       h_t=f(z_t)

                            \frac{\partial L}{\partial U}=\sum_{t=1}^T \frac{\partial L_t}{\partial U} =\sum_{k=1}^t\frac{\partial L_t}{\partial z_k}h^T_{k-1} =\sum_{k=1}^t \delta _t,h^T_{k-1}

                                    \delta_{t,k}为第t时刻的损失对第k步隐藏神经元的净输入Z_k的导数

                            \delta_{t,k}=diag({f}'(z_k))U^T\delta _{t,k+1}

                                    tips:diag(x,n):矩阵x上的第n条对角线上的元素

                            随时间的反向传播算法(BPTT)

                            \frac{\partial L_t}{\partial U}=\sum_{k=1}^t \delta_{t,k}h^T_{k-1}

                            \delta_{t,k}=diag({f}'(z_k))U^T\delta _{t,k+1}=\prod _{\tau =k}^{t-1}(diag({f}'(z_\tau)))\delta_{t,t}\approx \gamma ^{t-k}\delta _{t,t}

                                  \approx \gamma ^{t-k}\delta _{t,t}

                    ②长程依赖问题

                            当\gamma>1t-k\rightarrow \infty,\delta _t,k\rightarrow \infty时会出现梯度爆炸问题

                            当\gamma<1t-k\rightarrow \infty,\delta _t,k\rightarrow \infty时会出现梯度消失问题

                            梯度爆炸和梯度消失统称为长程依赖问题,由于此问题,实际上只能学习到短周期的依赖关系。

                            原因是循环神经网络在时间维度上非常深

                            1.修正梯度爆炸问题

                                    权重衰减、梯度截断

                            2.修正梯度消失问题

                                    改进模型,使h_th_{t-1}之间的线性关系移动到g(x_t;\theta)

                                    改进方法①:令梯度\gamma=1

                                            将循环边改为线性依赖关系:h_t=h_{t-1}+g(x_t;\theta)     会削弱非线性性能

                                                    其中g(x_t;\theta)=g(wx_t+b)

                                            增加非线性h_t=h_{t-1}+g(x_t,h_{t-1};\theta)

                                                    其中g(x_t,h_{t-1};\theta)=\delta(uh_{x-1}+wx_t+b)

            4.常见的循环神经网络

                    门控机制:控制信息积累的速度。(选择性的加入新的信息,选择性遗忘)

                    ①GRU(门控循环单元)

                            h_t=z_t\bigodot h_{t-1}+(1-z_t)\bigodot g(x_t,h_{t-1};\theta)

                            更新门z_t,值域为[0,1],用于选择性遗忘z_t=\sigma(w_zx_t+U_zh_{t-1}+b_z)

                            g(x_t,h_{t-1};\theta)=\hat{h_t}使用tanh实现\hat{h_t}=tanh(W_hx_t+U_h(h_{t-1})+b_h)

                            改进\hat{h_t},使h_t仅与x_t相关(去除与h_{t-1}的联系

                            重置门r_t

                    ​​​​​​​        ​​​​​​​        r_t=\sigma(W_rx_t+U_rh_{t-1}+b_r) ,\hat{h_t}=tanh(W_hx_t+U_h(r_t\bigodot h_{t-1})+b_h)

                    门控循环单元

                    ②LSTM(长短期记忆网络)

                     引入内部记忆单元c_{t-1}用于记忆,解放h_t,使其可以更好的进行非线性拟合

                    i_t=\sigma(W_ix_t+U_ih_{t-1}+b_i)     f_t=\sigma(W_fx_t+U_fh_{t-1}+b_f)

                    o_t=\sigma(w_ox_t+U_oh_{t-1}+b_o)

                    !!! 可以使得ht=o_t\bigodot tanh(c_t)

                    各种变体

             5.深层循环神经网络

                    ①堆叠循环神经网络

                    ②双向循环神经网络

     三、小结

            优点:引入记忆功能、图灵完备

            缺点:长程依赖问题、记忆容量问题、并行能力问题

    四、将循环神经网络扩展到图

            序列是最简单的数据结构,更复杂的结构还有

            1.递归神经网络

                    用于处理结构。

                     在一个有向无循环图共享一个组合函数

            2.图网络

                    用于处理结构。

                     更新序列:先更新点、再更新边、最后更新全局结点

                     对于任意图结构G(V,E)

                    更新函数m_t^{(v)}=\sum_{u \in N(v)}f(h^{(v)}_{t-1},h^{(u)}_{t-1},e^{(u,v)})        h_t^{(v)}=g(h^{(v)}_{t-1},m_t^{(v)}))

                    读出函数y_t=g(h_T|v \in V)​​​​​​​

  • 相关阅读:
    fastjson远程命令执行
    HarmonyOS学习 -- ArkTS开发语言入门
    Pytorch学习系列--01基础&安装
    Kotlin基本语法
    Linux-7-文件系统
    【项目】若依整合mybatisplus和lombok
    “华为杯”研究生数学建模竞赛2019年-【华为杯】F题:智能飞行器航迹规划模型(中)(附优秀论文及Pyhton代码实现)
    P8022 [ONTAK2015] Cięcie 题解
    结构体内存对齐详解
    数据库篇--八股文学习第十八天| MySQL和Redis的区别是什么;Redis有什么优缺点?为什么用Redis查询会比较快
  • 原文地址:https://blog.csdn.net/weixin_37878740/article/details/126460644