zoukankan      html  css  js  c++  java
  • 递归神经网络 RNN 原理(下)

    基于对 RNN 的初步认识, 还是先回顾一下它核心的步骤:

    (1) words / onehot vectors : (x^{(t)} in R^{|v|})

    **(2) word embeddings: ** (e^{(t)} = Ex^{(t)})

    **(3) hidden states: ** (sigma(h^{(t)} = W_e e^{(t)} + W_h h^{(t-1)} + b_t)) 注: (h^{(0)}) is the initial hidden state.

    (4) output distribution: (y^{(t)} = softmax(Uh^{(t)} + b_t) in R^v)

    最后得到的 (y^{(t)}) 就是一个概率分布嘛. 值得注意的一点是, 这个 (W_e)复用的, 同样, 上面的 (W_h) 也是复用的, 这样做的特点是, RNN 对于输入向量的尺寸是没有限制的. 即可以用前面比如 5个单词来预测, 或者 10个单词来预测, 效果都是一样的.

    然后训练的过程, 也是采用 误差向后传递 BP 的方式, 损失函数用交叉熵.

    (J^{(t)}( heta) = CE (y^{(t)}, hat y^{(t}) = -sum limits _{w in V} y_w^{(t)} log hat y_w^{(t)} = -log y^{(t)}_{x(t+1)})

    RNN 如何做预测

    至于该神经网络的误差的反向传递, 以及权值如何更新, 就不想再谈了, 思路一样的, 可以翻翻我前面对 BP 算法的推导 2.0 版本的. 核心: 多元函数求偏导, 注意求导的链式法则 (chain rule), 降梯度值作为"error" 这块很关键的, 只有深刻理解了 BP , 后面这些都是差不多的套路而已.

    BP推导:

    是差别, 但核心思想没变, 改吧改吧, 就基本能推导了, 我现在在 RNN 这里确实不想推了, 就像搞搞怎么去应用先

    Just like a n-gram Language Model, you can use a RNN Model to generate text by repeated sampling. Sampled output is next step's input.

    就先对 "my" 这个单词, 进行 onehot, 在 encoding 或者 embedding 词向量化, 再变为稠密向量, 与 E 相乘; 初始化 h0 ( 可假设h0向量里面都是0, 你随意) 与 W 相乘, 然后再:

    (sigma(We + Wh + b_1) * U => y^{(1)}) 的概率分布, 然后进行采样 sample ( from Vocabulary) 得到 "favorite".

    于是就将 "favorite" 作为下一个状态的 "input" 跟上面一样的操作, 假如说取到的是 "season" .

    然后再作为下一个状态的 "input", 这种 递归 的方式去不断重复这个过程... 这样就能生成一个完整的句子了. (前提是已通过 BP 训练好了 权值矩阵 We, Wh 和 bais 哦)

    RNN 模型衡量

    The standard evluation mertric (度量标准) for Language Models is perplexity (困惑 或误解程度)

    (perplexity = prod limits_{t=1}^T (frac{1} {P_{lm} (x^{(t_1)} | x^t, ....x^1)})^{(1/t)})

    真实的是知道的嘛, 再用这个模型 来衡量 perplexity 的程度. This is eque to the exponential of the **cross-entropy loss ** (J( heta)) 的期望即 (exp (J( heta)))

    (= prod limits_{t=1}^T (frac{1} {y^t_{x+1}})^{1/t} = exp(frac{1}{T} sumlimits_{t=1}^T -log hat y^{(t)}x_{x+1}) = exp(J( heta)))

    Lower perplexity is better.

    从一些前人的试验来看 从2013 -> 2016 从 n-gram 到 RNN -> LSTM 等方式在不断地降低这个 perplexity.

    LM 的应用

    Language Modeling is a benchmark task (标准任务) that help us measure our progress on understanding language.

    同样呢,

    Language Modeling is a subcomponent (子任务) for many NLP tasks, especially those involving generating text or estimating the probability of text. 在一些生成文本, 和文本预测的场景.

    比如说, 输入法提示; 语音识别; 手写字符识别; 字词矫正; 文章作者猜测; 机器翻译; 自动写文章的简述 (summarization); 对话系统; 等, 应用还是蛮多的, 我很挺感兴趣的, 就目前还不太会, 也不知道靠不靠谱, 后面来试看, 我比较感兴趣的, 对话系统 和 自动文章;

    RNN : 中文翻译为 "递归神经网络" 我感觉, 只是在不断复用W , 和前一个输出作为后一个输入, 感觉也没有咱编程中 递归的意思, 感觉上还是差了那么一点, 但, 总听上去却觉得非常高大上.

    RNN 应用

    小结

    • Language Model: A system that predicts the next word

    • Recurrent Neural Network: A family of neural networks that:

      • Take sequential input of any length (RNN 对于输入的长度没有限制)
      • Apply the same weights on each step (权值矩阵 W 是复用的哦)
      • Can optionally produce output on each step (在每一步都可以产生输出)
    • RNN != LM (不完全等于 语言模型, RNN 还能有很多很多的应用场景, 如上面提到的什么机器翻译, 对话系统... 或者这 时序类预测 ... 理解核心是关键词: "神经网络, 权值复用, 上一状态输出作为下一状态输入" 这很强大的.

    • 应用真的可以蛮多的...

    更多应用

    • RNN can be used for tagging (给判断一段话的单词的词性) 也叫 part of speech tagging (词性标注)

    • RNN can be used for sentence calssification (给一段文本, 进行自动情感分析, 是 positive 还是 negative) 或者 0-5 李克特评分表来自动完成, (不由得又突然回到营销这块了)

    • RNN can be used as an encoder moduel (自动问答系统, 机器翻译)

    • RNN can be used to generate text (语音转文本, 自动生成文本)

    递归神经网络 RNN 就认识到这了, 本来是想就简单了解一波, 公式也不想推导的, 看了有很多很多应用之后, 突然感觉, 有点想去动手试一波的冲动... 然后, 再看看一下, 比较更厉害点的这种, NLP 懂东西, 了解一下.

  • 相关阅读:
    51nod1331 狭窄的通道
    noip2016 提高组
    noip2016 普及组
    noip车站分级 拓扑排序
    【NOIP1999】邮票面值设计 dfs+dp
    视频智能分析平台EasyCVR衍生版视频管理平台网页导航栏activeNav的背景照片异常的处理方式
    TSINGSEE青犀视频智能分析平台EasyCVR中性版本如何自定义平台内信息的变更?
    人脸识别/车牌识别视频智能分析系统EasyCVR通过接口GetApiV1Devices调用获取设备信息不成功原因分析
    超低延迟直播系统Webrtc编译android报错The installation of the Chrome OS default fonts failed问题
    超低延时安防直播系统webrtc-client测试推送多路视频流关闭其中一路后所有推流都关闭问题解决
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/12493401.html
Copyright © 2011-2022 走看看