递归神经网络 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)}(\theta) = 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(\theta)\) 的期望即 \(exp (J(\theta))\)

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

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 懂东西, 了解一下.

posted @ 2020-03-14 18:13  致于数据科学家的小陈  阅读(359)  评论(0编辑  收藏  举报