• 机器学习:循环神经网络


    传统的机器学习算法非常依赖人工提取特征,使得图像识别、语音识别、自然语音处理等问题存在特征提取的瓶颈
    基于全连接神经网络的方法存在参数太多、无法利用时间序列信息等问题
      
    卷积神经网络解决图像的特征提取问题、参数太多问题
    循环神经网络解决利用时间序列信息的问题
      
    循环神经网络主要用于语音识别、语言模型、机器翻译、时序分析等等
    这些应用比如翻译、单词预测都需要考虑上下文关系,也就是说受时序的影响

    网络结构

                 O(t-1)      O(t)      O(t+1)
                 ↑           ↑         ↑
                 | V         | V       | V
             W   |       W   |     W   |
            ---> S(t-1) ---> S(t) ---> S(t+1)
                 ↑           ↑         ↑
                 | U         | U       | U
                 |           |         |    
                 X(t-1)      X(t)      X(t+1)
    

    X(t):是 t 时刻的输入,例如单词向量
      
    S(t):是 t 时刻的状态,由上一个时刻的状态和当前输入得到
      
       (small S(t) = f( X(t) imes U + S(t-1) imes W + b\_state))
      
       其中 (small f) 是非线性激活函数(一般是 (small tanh)),设 (small S(-1))0
      
    O(t):是 t 时刻的输出
      
       (small O(t) = softmax( S(t) imes V + b\_output ))
      
    每个时刻都使用相同的 U、V、W 参数,反应出 RNN 中每一步都在做相同的事,这样大大减少了参数
      
    假设 X 的维度是 (1, n),而 S 的维度是 (1, h),则
      U 的维度是 (n, h)
      W 的维度是 (h, h)
      b_state 的维度是 (1, h)
      
      V 的维度是 (h, 1)
      b_output 的维度是 (1, 1)
      
      共需要参数为 (n x h) + (h x h) + h + h + 1 = (n+h+2) x h + 1
      
    RNN 要求每一个时刻都有输入,但不是每一个时刻都要有输出(比如要接收完整的一句话才会有输出)
      
    RNN 的输入输出可以有多种情况
      1. 一个输入比如一张图像,输出是单词序列
      2. 输入序列比如一个句子,输出一个值,比如判断句子的分类或预测下一个单词
      3. 输入输出都是序列,比如翻译

    训练算法

    参数训练通过随时间进行反向传播(Backpropagation Through Time,BPTT)算法
    基本原理和 BP 算法一样,也包含三个步骤:
      1. 前向计算每个神经元的输出值
      2. 反向计算每个神经元的误差项值,它是误差函数对神经元的加权输入的偏导数
      3. 计算每个权重的梯度,最后再用随机梯度下降算法更新权重

    LSTM(Long Short Term Memory,长短时记忆)

    传统 RNN 在实际中很难处理长期依赖问题
    比如 "I grew up in France ...... I speak fluent ()" 要预测 () 中该填哪个词,跟很久之前的 "France" 有密切关系
    LSTM 就是为了解决这个问题,循环神经网络被成功应用的关键就是 LSTM
    很多任务采用 LSTM 比标准的 RNN 表现要好
      
    LSTM 是一个拥有三个门的结构
      门结构是一个使用 sigmoid 神经网络和一个按位做乘法的操作,这两个操作合在一起就是门
      
      sigmoid 作为激活函数输出 0 到 1 之间的数值
      当输出为 0 时,所有信息都无法通过,当输出为 1 时,所有信息都可以通过
      
      三个门分别是遗忘门、输入门、输出门
      
      遗忘门让 RNN 忘记之前没有用的信息
      比如一段文章先写了某地原来碧水蓝天,但后来被污染了,于是 RNN 应该忘记之前碧水蓝天的状态
      
      忘记部分历史信息后,应该从当前输入补充新信息,这就是输入门,比如把环境被污染这个信息写进去
      
      遗忘门和输入门后产生了新的状态
      输出门根据新的状态和输入信息决定该时刻的输出
      比如当前状态为污染,那么天空的颜色可能就是灰色的

                    C(t-1) ---> * ---------> + --- C(t) ----> 
                                ↑            ↑           ↓
                                |      S --> *           F
                                S      ↑     ↑           ↓
                                ↑      |     F     S --> *
                                |      |     ↑     ↑     ↓
                    h(t-1) -------------------------     --------- h(t) ------>
                            ↑                            |
                            |                            ↓
                           X(t)                         h(t)
    

    其中 C 是状态,h 是输出,X 是输入,S 是 sigmoid 函数,F 是激活函数(一般是 tanh)
      
    h(t-1) 和 X(t) 共同作为输入,被 3 个 S 和 1 个 F 使用,每个都有自己的 W 和 b 系数
      
    第一个 S 的输出和 C(t-1) 相乘,起到遗忘门的作用
    第二个 S 的输出和 F 的输出相乘得到要添加的新的信息,再和遗忘门的输出相加,起到输入门的作用,得到新的状态 C(t)
    第三个 S 的输出和 F 处理 C(t) 后的输出相乘,得到 t 时刻的输出

    RNN 的变种

    双向循环神经网络:有些问题中,当前的输出不仅和之前的状态有关,也和之后的状态相关
    深层循环神经网络:在每个时刻上将循环体结构复制了多次



  • 相关阅读:
    Vue.js进阶知识点总结
    测试初学
    gitee简单命令使用
    Ubuntu学习之alias命令
    Python turtle.right与turtle.setheading的区别
    Python-对Pcap文件进行处理,获取指定TCP流
    第八次作业
    第七次作业
    第八周作业
    第七周作业
  • 原文地址:https://www.cnblogs.com/moonlight-lin/p/12571442.html
Copyright © 2020-2023  润新知