zoukankan      html  css  js  c++  java
  • 理解RNN

    RNN与FNN的不同之处在于隐含层各个神经元之间是相互连接的,隐含层的输入包括正常输入和反馈输入(也就是上一个时刻隐含层的输出反馈个下一个时刻隐含层的输入),其他结构和BP神经网络相似

    开始RNN的学习:

    输入层的输出:x

    隐含层的输入:Ih

    隐含层的输出:Oh

    输出层的输入:Io

    输出层的输出:Oo

    输入层到隐含层的权值:WIh

    隐含层到输出层的权值:WHo

    隐含层到隐含层的权值:WHh

    隐含层的阈值:bh

    输出层的阈值:b0

    第t时刻隐含层第j个神经元的输入:

    Ihj=(∑i=1 to m WIhixi+∑j=1 to n WHhjOhj(t-1))

    第t时刻隐含层第j个神经元的输出:

    Ohj=f(Ihj)

    第t时刻输出层第k个神经元的输入:

    Iok=∑j=1 to m WHoOhj

    第t时刻输出层第k个神经元的输出:

    Ook=g(Iok)

    第t时刻输出层第k个神经元的误差:

    ek=(dk-Ook)

    网络总误差为:

    E=1/2∑k=1 to s (ek)2

    RNN的学习算法是BPTT算法,与Bp的不同之处就是在隐含层的反馈上,按梯度下降更新权值和阈值:

    ΔWHo=α*e*Oh*d(g(Io))

    设输入层的局部梯度为δ=e*d(g(Io))

    ΔWIh=α*df(Ih)*x*∑k=1 to s WHoδ

    同样地

    ΔWHh=α*df(Ih)*Oh(t-1)*∑k=0 to s WHoδ

    推导方法都是链式求导法,容易得到上面三式

    RNN容易出现梯度消失问题,具体就是当时间步t很大时,激活函数就会被多次累积,及其容易趋于0,导致梯度消失,RNN能记忆很长时间段的内容,例如,“他的名字叫李明,他姓X",RNN需要记住上一个句子,才能准确的预测X,但是需要很长的时间步才能做到,梯度容易趋于0,”水是X色",RNN只需要记住前面几个词即可预测X,一般不会出现梯度消失的情况,所以在RNN的t不适宜太大

  • 相关阅读:
    Spring IOC(控制反转)思想笔记
    实战SpringBoot Admin
    包及权限配置&java存储机理绘制
    极验验证(滑动验证)的使用
    Java基础知识之this关键字知识讲解
    bean生命周期
    笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞 练习
    JAVA 进行图片中文字识别(准确度高)!!!
    Java 面试题关于包装类
    HashMap底层实现原理及面试常见问题
  • 原文地址:https://www.cnblogs.com/semen/p/6862319.html
Copyright © 2011-2022 走看看