RNN循环神经网络原理解读

我们把循环神经网络想象成一个有记忆的助手,特别擅长处理按顺序出现的信息,比如句子、语音、股票价格、音乐旋律等。

核心思想:记住过去的信息,帮助理解现在。

普通神经网络的局限(没有记忆)

想象一个普通的神经网络(比如用于识别图片的):

  1. 输入: 你给它一张图片
  2. 处理: 它分析这张图片的像素。
  3. 输出: 告诉你图片里是“猫”还是“狗”。

问题: 它每次只看一个独立的输入(一张图片),输入之间没有联系。给它看一个视频(连续很多帧图片),它只能一帧一帧地看,完全不知道前一帧发生了什么,后一帧会怎样。它没有记忆

循环神经网络(RNN)的解决方案(有记忆!)

RNN 聪明地给自己加了一个**“记忆小本本”(技术上称为隐藏状态**)。

  1. 输入序列: 你给它一系列按时间顺序排列的数据。比如:

    • 一个句子:["我", "爱", "深度", "学习"]
    • 一段股票价格:[100, 102, 105, 103, ...]
    • 一段语音信号。
  2. 逐步处理(关键!):

    • 时刻 t=0 你输入第一个词 "我"
      • RNN 结合这个输入 ("我") 和它当前的“记忆小本本”(初始状态通常是空的或随机的)。
      • 它进行一些计算。
      • 更新它的**“记忆小本本”(隐藏状态 h0),把关于 "我"有用信息**记下来(比如这个词是主语)。
      • (可选)它可能输出一些东西(比如这个词的词性)。
    • 时刻 t=1 你输入第二个词 "爱"
      • RNN 不再只看 "爱" 本身!它同时会看它更新过的“记忆小本本” (h0),里面记录了 "我" 的信息。
      • 它结合 "爱" h0(关于 "我" 的记忆)一起计算。
      • 更新它的**“记忆小本本”** 到 h1,这次记下 "我""爱" 组合起来的信息(比如“主语+动词”)。
      • (可选)输出(比如动词)。
    • 时刻 t=2 输入 "深度"
      • 结合 "深度" h1(包含了 "我爱" 的记忆)一起计算。
      • 更新记忆到 h2(现在知道是“主语+动词+?”)。
      • (可选)输出(可能还无法确定词性,需要更多词)。
    • 时刻 t=3 输入 "学习"
      • 结合 "学习" h2(包含了 "我爱深度" 的记忆)一起计算。
      • 更新记忆到 h3(终于知道整个短语是“主语+动词+宾语”)。
      • 最终输出: 这时,它可以根据完整的记忆 h3 做出最终判断,比如预测下一个词是什么,或者理解整个句子的情感是积极的。

关键点图解:

想象一下折叠的手风琴:

时刻 0:  输入"我"  --> [RNN单元 (记忆h0)] --> (输出0?)
时刻 1:  输入"爱"  --> [RNN单元 (记忆h1)] --> (输出1?)   <-- 注意:h1 依赖于 "爱" 和 h0 (h0来自"我")
时刻 2:  输入"深度" --> [RNN单元 (记忆h2)] --> (输出2?)   <-- h2 依赖于 "深度" 和 h1 (h1来自"我爱")
时刻 3:  输入"学习" --> [RNN单元 (记忆h3)] --> 最终输出   <-- h3 依赖于 "学习" 和 h2 (h2来自"我爱深度")
  • 每个方框 [RNN单元] 结构相同,参数也相同(像复制粘贴的同一个模块)。
  • 记忆(隐藏状态 h_t)像一条线,把过去的信息一步步传递下去。 当前时刻的输入 x_t前一刻的记忆 h_{t-1} 共同决定了当前的记忆 h_t当前的输出 o_t
  • 公式简化表示:
    • h_t = f(x_t, h_{t-1}) // 新的记忆 = 函数(当前输入, 旧的记忆)
    • o_t = g(h_t) // 当前输出 = 函数(当前记忆)

为什么需要 RNN?它能做什么?

因为很多信息天生就是有顺序的!理解当前的部分往往依赖于前面的部分:

  1. 自然语言处理 (NLP):
    • 机器翻译: 翻译英语句子 “I love deep learning” 成中文。要翻译 “learning”,需要知道前面的 “deep” 修饰它,整个短语是 “deep learning”,而不是单独翻译每个词。
    • 聊天机器人: 回答你的问题需要理解你之前说了什么。
    • 文本生成: 写诗、写小说,下一个词的选择要符合前面的语境和风格。
    • 情感分析: 判断 “这个手机虽然贵但是真好用” 的情感是积极的,需要理解 “虽然…但是…” 的转折关系。
  2. 语音识别: 把声音信号转换成文字。一个音素的识别可能依赖于前面几个音素。
  3. 时间序列预测:
    • 股票预测: 预测明天的股价,今天的价格很重要,但昨天的、前天的…也很重要,它们构成了趋势。
    • 天气预报: 预测明天的天气,今天的天气状况是基础。
  4. 音乐生成: 创作连贯的旋律,下一个音符要和前面的音符和谐。

简单总结 RNN 的特点

  • 核心能力:记忆。 拥有内部状态(隐藏状态),可以记住之前处理过的信息。
  • 擅长处理序列数据。 输入或输出是按时间或顺序排列的(文本、语音、时间序列等)。
  • 参数共享。 同一个 RNN 单元(处理模块)在序列的每个时间步重复使用相同的参数。这大大减少了需要学习的参数量,也让它能处理不同长度的序列。
  • 信息流动: 信息像水流一样,沿着时间步从前往后流动(在基础RNN中)。

一点补充(知道即可)

  • 基础 RNN 的问题: 早期的简单 RNN 在处理很长的序列时,记忆能力有限(梯度消失/爆炸问题),很难记住很久以前的信息。比如理解一个长段落末尾的代词指代开头的主语。
  • 更强大的变体: 为了解决长序列记忆问题,科学家发明了更复杂的 RNN 结构,比如:
    • LSTM: “长短期记忆网络”。它有一个更精密的“记忆小本本”和几个“门”(输入门、遗忘门、输出门),能更有效地选择记住什么、忘记什么、输出什么。
    • GRU: “门控循环单元”。是 LSTM 的一个简化版本,效果通常也不错,计算更高效。

简单来说,RNN 就是一个能给神经网络加上“记忆”功能的巧妙设计,让它能够理解和处理那些前后有关联的序列信息,就像我们人类理解语言和事件一样! 它是让计算机能处理文本、语音等序列数据的基石之一。

wxh,whh,why三个参数矩阵的重要理解

我们用简单易懂的方式来解释 wxhwhhwhy 这三个参数矩阵在循环神经网络(RNN)中的含义,把它们想象成一个“记忆小本本”的工作流程:
RNN循环神经网络原理解读_第1张图片

核心比喻:
把 RNN 的循环核想象成一个有记忆的小助理。它每次接收新的信息(x_t),结合自己笔记本上之前记录的内容h_{t-1}),更新笔记(h_t),然后给出一个回答(y_t)。


1. wxh:新信息的翻译官

  • 作用: 负责处理当前时刻输入的新信息 (x_t)。
  • 怎么理解:
    • 你告诉小助理:“今天股价涨了 5%”(这就是 x_t)。
    • wxh 就像一个固定的规则或字典,负责把你这句话(原始输入数据)翻译成小助理笔记本上能理解、能记录的一种内部格式
    • 它决定了当前输入的信息有多少分量、以什么方式影响助理即将更新的笔记。
  • 公式体现: x_t @ wxh (输入向量 x_t 乘以矩阵 wxh)。

2. whh:记忆的调节器

  • 作用: 负责处理上一时刻的记忆 (h_{t-1})。
  • 怎么理解:
    • 小助理要写新笔记 (h_t) 前,会先翻看昨天写的笔记 (h_{t-1})。
    • whh 就像另一个固定的规则或滤镜,决定了昨天的笔记内容今天的新笔记有多大影响、哪些部分需要保留、哪些部分可以弱化。
    • 它控制着历史信息(记忆) 如何传递到当前时刻。这是 RNN 具有“记忆”能力的核心!
  • 公式体现: h_{t-1} @ whh (上一时刻状态向量 h_{t-1} 乘以矩阵 whh)。

3. why:输出的决策者

  • 作用: 负责根据更新后的当前记忆 (h_t) 生成最终的输出 (y_t)。
  • 怎么理解:
    • 小助理更新完今天的笔记 (h_t) 后,需要根据笔记内容给出预测或回答(比如“明天股价可能涨还是跌?”)。
    • why 就像一个决策指南或报告模板,负责把助理笔记本里那些复杂的内部记录 (h_t),转换成我们能理解的最终答案或预测结果 (y_t)。
    • 它决定了当前的记忆状态如何映射到最终的任务输出(比如预测的字母、预测的股价)。
  • 公式体现: h_t @ why (当前状态向量 h_t 乘以矩阵 why)。

核心计算过程回顾:

  1. 结合新信息与旧记忆: 小助理收到新信息 x_t,用 wxh 翻译它;同时翻看旧笔记 h_{t-1},用 whh 过滤它。然后把这两部分加在一起(再加上一个偏移量 bh,可以想象成助理的个人习惯或倾向)。
    • 临时结果 = x_t * wxh + h_{t-1} * whh + bh
  2. 更新记忆: 助理把上面这个临时结果用一种“压扁”的函数(通常是 tanh)处理一下,得到新的、更新后的笔记 h_t。这个函数让结果保持在合理范围内(比如 -1 到 1)。
    • h_t = tanh(临时结果)
  3. 生成输出: 助理看着自己刚写好的新笔记 h_t,用 why 这个决策指南把它转换成最终的预测或答案 y_t。如果是分类任务(比如预测字母),通常再用一个 softmax 函数把这个输出变成概率。
    • y_t = h_t * why + by (可能再经过 softmax 等函数)

关键点总结:

  • wxh 处理新输入 (x_t),决定新信息对内部状态的影响。
  • whh 处理旧状态 (h_{t-1}),决定历史记忆如何传递下去。这是 RNN 记忆功能的核心
  • why 处理当前状态 (h_t),把内部状态转换成最终的输出结果 (y_t)。
  • 共享参数: 这三个矩阵 (wxh, whh, why) 在所有时间步(t=0, t=1, t=2…)都是共享的、固定不变的!无论处理序列的第1个数据还是第100个数据,用的都是同一套 wxhwhhwhy。这就是“参数时间共享”,它大大减少了需要学习的参数量,也让模型能处理不同长度的序列。
  • 学习过程: 在训练网络时(反向传播),模型会根据预测结果和真实答案之间的误差,通过梯度下降算法来不断调整优化 wxhwhhwhy(以及偏移量 bh, by)这些参数的值,使得网络的预测越来越准。

简单来说:

  • wxh 告诉网络新的输入信息有多重要、怎么解读。
  • whh 告诉网络过去的记忆有多重要、怎么结合到当前。
  • why 告诉网络如何根据当前的内部状态做出最终的判断或预测

这三个矩阵共同协作,让 RNN 能够学习序列数据中的时间依赖关系,做出基于历史信息的预测。课件第 5 页和第 6 页的图示清晰地展示了它们之间的连接关系和计算流程。

你可能感兴趣的:(ai笔记,rnn,人工智能,深度学习)