递归神经网络 RNN 原理(下)
基于对 RNN 的初步认识, 还是先回顾一下它核心的步骤:
(1) words / onehot vectors :
**(2) word embeddings: **
**(3) hidden states: ** 注: is the initial hidden state.
(4) output distribution:
最后得到的 就是一个概率分布嘛. 值得注意的一点是, 这个 是复用的, 同样, 上面的 也是复用的, 这样做的特点是, RNN 对于输入向量的尺寸是没有限制的. 即可以用前面比如 5个单词来预测, 或者 10个单词来预测, 效果都是一样的.
然后训练的过程, 也是采用 误差向后传递 BP 的方式, 损失函数用交叉熵.
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 相乘, 然后再:
的概率分布, 然后进行采样 sample ( from Vocabulary) 得到 "favorite".
于是就将 "favorite" 作为下一个状态的 "input" 跟上面一样的操作, 假如说取到的是 "season" .
然后再作为下一个状态的 "input", 这种 递归 的方式去不断重复这个过程... 这样就能生成一个完整的句子了. (前提是已通过 BP 训练好了 权值矩阵 We, Wh 和 bais 哦)
RNN 模型衡量
The standard evluation mertric (度量标准) for Language Models is perplexity (困惑 或误解程度)
真实的是知道的嘛, 再用这个模型 来衡量 perplexity 的程度. This is eque to the exponential of the **cross-entropy loss ** 的期望即
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 懂东西, 了解一下.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通