V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
James369
V2EX  ›  机器学习

怎么理解 RNN 循环神经网络工作原理?

  •  
  •   James369 · 1 天前 · 1346 次点击
    对于简单的网络(网络结构是固定不变的,静态的),比如全连接的我可以理解,就是训练一个函数:
    y = f(x, θ)
    这里函数 f 的定义是固定的。那么,只要输入一组 x 和 y ,就可以训练出θ。


    但是对于 RNN ,我不大理解的是:
    1. 它的网络结构是不定的,多重的。假如循环了 n 次,相当于要训练 n 个函数: f1(x,θ), f2(x,θ),,, fn(x,θ).
    2. 对于这样多重的网络结构,它是怎么训练收敛的?
    3. 后面输入进来训练的 x ,是否会对前面已经训练好的θ产生影响(类似灾难性遗忘)
    11 条回复    2024-12-26 23:09:46 +08:00
    Int100
        1
    Int100  
       1 天前 via iPhone
    建议老老实实找份教材,系统学习一下
    James369
        2
    James369  
    OP
       1 天前
    @Int100 老老实实的系统学,估计得学一年多
    Sawyerhou
        3
    Sawyerhou  
       1 天前 via Android
    1 ,没有 n 个函数,只有一个函数,该函数被使用了 n 次
    2 ,并不一定收敛,有的数据用 rnn 就是跑不出来
    3 ,会,在这种情况下可以换用 lstm 或者 gru 之类的带记忆的门控模型
    lrigi
        4
    lrigi  
       1 天前 via iPhone
    建议 b 站找个视频看看
    Ericality
        5
    Ericality  
       1 天前   ❤️ 1
    (直接贴总结部分了)
    一下来源于 gpt:
    总结
    RNN 的网络结构是固定的,权重是共享的,所有时间步使用相同的参数 θ。
    通过时间的反向传播( BPTT ) 是 RNN 收敛的核心机制,优化整个序列的损失函数。
    后续输入会影响模型参数,但不会导致灾难性遗忘,LSTM/GRU 等机制可以进一步缓解序列过长导致的信息丢失问题。
    你这个问题 本身就是 rnn 基础结构可能都没搞清楚就问的 更多的是你就理解了个概念(当然可能是我理解的有问题) 就来提问 还不想系统学 那建议还是 gpt 问问吧 但是就算是 gpt 要解释这几个问题 也要牵扯到很多概念 比如反向传播 比如梯度爆炸/消失等 那其实为了理解他所说的 还是要先学习了才行
    所以建议如果想学的话 还是不要投机取巧 不然一个答案只会牵扯出更多问题.....
    JeffreyZhuang
        6
    JeffreyZhuang  
       1 天前
    业余人士回答下,

    1. 没有 n 个函数,他们的 θ 一致,举个简单的例子
    (y0, h1) = f(x1, θ, h0)
    (y1, h2) = f(x2, θ, h1)
    ...
    最后 y{0...N} 再经一 个 fc 网络得到最终的结果。其中 h 是 cell 输出的 hidden state; h0 是初始 hidden state 。
    2. 不保证
    3. 会。cell 之间传递的 h 会产生 vanishing gradient problem
    565656
        7
    565656  
       1 天前
    rnn 已经过时了,只能按照顺序执行,
    jimrok
        8
    jimrok  
       23 小时 38 分钟前
    1. RNN 是一种简单的网络结构,他只能应对一些简单的序列,并不是训练 n 个函数,而是尽量记住你给的序列,找到可能最好的θ,来预测输出。但这种简单的网络,只能记住一些简单的序列特征,跟 LLM 相比,就是草履虫和人脑的差别。

    2. 不太可能收敛,对简单的序列数据应该收敛。比如发送的信息是 SOS ,SOS ,识别出来就报警。这个可能能收敛,再复杂的序列,你用来预测客户的问询,基本效果不好。

    3. 会,本身网络简单,记不住那么多内容,继续变换输入,基本前面的θ会被干废掉。
    balalaFairty
        9
    balalaFairty  
       23 小时 30 分钟前
    @James369 一年多学会了,往后走基础更扎实岂不美哉。
    frayesshi1
        10
    frayesshi1  
       13 小时 48 分钟前
    rnn 已经过时了,用 LSTM ,LSTM 在 cnn 基础上加一层,或者直接使用 transform ,先"嵌入"把你输入的 token 转换成数组,再加"注意力",经过网络后算出下一个 token
    iambic
        11
    iambic  
       11 小时 31 分钟前
    CNN 是在空间维度上复用参数,RNN 则是在时间维度上复用参数
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 02:41 · PVG 10:41 · LAX 18:41 · JFK 21:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.