zoukankan      html  css  js  c++  java
  • 循环神经网络视频学习

    循环神经网络

    绪论

    • 全连接网络->卷积神经网络

      • 全连接网络处理图像问题时,参数太多,容易出现过拟合现象。
      • 卷积神经网络使用“局部关联,参数共享”的方法
    • 卷积、特征图feature map、padding、深度channel以及池化概念

    • eg

      • 输入为7x7x3的图像,则卷积核的大小应为nxnx3(此处为3x3x3),即一个卷积核里面有三个矩阵,分别与输入的三个channel做运算,每一个矩阵运算得到一个结果,然后将这些结果求加和,再加上偏置项,得到feature map中的值。然后根据步长继续进行计算,最终得到完整的feature map(3x3)
      • 一个卷积核对应一个feature map,如果有m个卷积核,那么输出就会有m个feature map(3x3xm)
    • 卷积神经网络->循环神经网络

      • 传统神经网络、卷积神经网络,输入和输出之间是相互独立的
      • RNN可以更好的处理具有时序关系的任务
      • RNN通过其循环结构引入“记忆”的概念

    基本组成结构

    • 基本结构

      • 传统结构对于一些问题,只能处理当前输入,不能够结合之前的输入信息进行处理,所以神经网络需要“记忆”

      • 两种输入:正常输入,记忆单元的输入;

      • 两种输出:正常输出,输出到记忆单元中;

        • U:从输入到隐藏状态的参数;W:从前一隐藏状态到下一个隐藏状态的参数;V:从隐藏状态到输出的参数;
        • (x_t)是时间t处的输入
        • (h_t)是时间t处的记忆,(h_t = f(h_{t-1},x)),f可以是双曲正切(tanh)等
        • (h_t = tanh(Wh_{t-1}+Ux))
        • (y_t)是时间t时刻的输出,(y_t = softmax(Vh_t))
        • 函数f被不断利用;模型所需要学习的参数是固定的;这样的话就可以避免因为输入长度的不同而训练不同的网络。
    • 深度RNN

    • 双向RNN

    • BPTT算法

      • BP算法

        • 使用sigmoid函数时,可能在链式求导中的某一项为零,则整个求导为零,出现梯度消失

      • RNN的基本公式

        • (h_t = tanh(Wh_{t-1}+Ux))
        • (y_t = softmax(Vh_t))
        • 所以可以在此基础上继续展开,最终得到以下公式

    循环神经网络的变种

    • 传统RNN的问题

      • 当循环神经网络在时间维度上非常深的时候,会导致梯度消失或者梯度爆炸的问题

      • (h_t = tanh(Wh_{t-1}+Ux)) ,对其求偏导(= tanh' * W)

      • 梯度爆炸的改进

        • 权重衰减
        • 梯度阶段:检查误差梯度的值是否超过阈值,吐过超过了那么就截断梯度,并将梯度设置为阈值
      • 梯度消失导致的问题:长时依赖问题

        • 随着时间间隔的不断增大,RNN会丧失学习到链接如此远的信息的能力
        • 改进模型:LSTM,GRU
    • LSTM(long short-term memory长短期记忆模型)

      • LSTM拥有三个门(遗忘门,输入门,输出门)

        • 遗忘门:(f_t = σ(W_f[h_{t-1},x_t] + b_f)) σ为sigmoid函数
        • sigmoid层输出0-1之间的值,描述每个部分有多少量可以通过。0表示“不允许”,1表示“允许量通过”
        • 输入门:(i_t = σ(W_i[h_{t-1},x_t] + b_i)) $ overline C i = tanh(W_C[h{t-1},x_t] + b_C)$
        • 首先经过Sigmoid层决定什么信息需要更新,然后通过tanh层输出备选的需要更新的内容,然后加入新的状态中;0 代表“不更新”,1 就指“完全更新”
        • 得到新的(C_t)(C_t = f_t * C_{t-1} + i_t * overline C_t)
        • (f_t * C_{t-1})忘掉不需要的记忆信息;(i_t * overline C_t)加入需要更新的出入信息
        • 输出门:(o_t = σ(W_o[h_{t-1},x_t] + b_o)) $ h_t = o_t * tanh(C_t)$
        • 首先,通过sigmoid 来确定细胞状态的哪个部分将输出出去。然后,将细胞状态通过tanh进行处理并将它和sigmoid 门的输出相乘,最终仅仅会输出我们确定输出的那部分;0 代表“不输出”,1 就指“完全输出"
      • RNN的“记忆”在每个时间点都会被新的输入覆盖;但LSTM中“记忆”是与新的输入相加(各自乘上一定的比例),一种线性操作

      • LSTM:如果前边的输入对(c_t)产生了影响,那这个影响会一直存在,除非遗忘门的权重为0

    • LSTM变形

    • GRU(Gated Recurrent Unit 门控循环单元)

      • GRU只有两个门,分别为重置门和更新门

        • 重置门:控制忽略前一时刻的状态信息的程度,重置门越小说明忽略的越多
        • 更新门:控制前一时刻的状态信息被带入到当前状态中的程度,更新门值越大表示前一时刻的状态信息带入越多

    拓展

    • 基于attention的RNN

      • 受到人类注意力机制的启发,根据需求将注意力集中到图像的特定部分。
      • 首先输入图像通过CNN,得到特征图(14x14x512);
      • 然后根据当前记忆学习到一个attention的权重矩阵a1(14x14),并且权重矩阵在每个channel上是共享的
      • 然后将权重矩阵a1与每一个feature map做运算,得到一个向量z1(1x512)
      • 给出一个学习信号y1
      • 经过h1可以得到新的权重矩阵a2和输出d1,通过d1确定输出文字
      • 然后权重矩阵a2与feature map运算,得到向量z2
      • 通过这种形式一直运算下去,可以得到描述这幅图片的一句话
  • 相关阅读:
    浅谈Java中的equals和==与hashCode
    数组操作
    python-类
    javascript操控浏览器
    javascript_获取浏览器属性
    javascript_data
    python3_phantomJS_test
    python检测字符串的字母
    python百分比数比较大小
    selenium加载时间过长
  • 原文地址:https://www.cnblogs.com/hyzs1220/p/13538295.html
Copyright © 2011-2022 走看看