Loading [MathJax]/jax/output/CommonHTML/autoload/mtable.js

神经网络学习笔记-02-循环神经网络

神经网络学习笔记-02-循环神经网络

本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记。

循环神经网络

循环神经网络适用于处理序列化信息,比如:语言翻译,语音识别等。

如果,我们要实现一个翻译功能。首先需要理解原句中每个单词的含义。
这就需要根据上下文来理解。
假如:原句中的每个单词,以此对应神经网络中一个隐藏层。
在传统的神经网络框架中,隐藏层直接传递的是一个矢量Out。
这个Out矢量是原句当前每个词的一个输出,比如:含义等等。
那么,如何保存和传递上下文这个信息呢?
循环神经网络提出一个状态(state)的概念,用于传递上下文

  • 折叠图
Recurrent Neural NetWork Recurrent Neural Network x N x->N U x y N->y V o N->N W s
  • 展开图
Recurrent Neural NetWork Recurrent Neural Network s_t = tanh(x_tU + s_{t_1}W) o_t = softmax(s_tV) T_0 T_1 T_0->T_1 W x_1 x_1->T_1 U X t-1 x_2 T_2 x_2->T_2 U X t x_3 T_3 x_3->T_3 U X t+1 T_4 y_1 y_2 y_3 T_1->y_1 V O t-1 T_1->T_2 W S t-1 T_2->y_2 V O t T_2->T_3 W S t T_3->y_3 V O t+1 T_3->T_4 W S t+1

循环神经网络框架的一点解释

与传统的神经网络架构有许多不同之处。

  • 输入方式不同
    传统的神经网络架构是静态输入,输入数据在开始前已经准备好了,并且一次全部从输入层导入。
    循环神经网络是动态输入,每个隐藏层有一个输入,表示在时间t上的输入。

  • 隐藏层,每层的节点数不同
    传统的神经网络架构,每个隐藏层有多个节点。
    循环神经网络,每个隐藏层有一个节点。

  • 输出不同
    循环神经网络,每个隐藏层有两个输出: output和state。

  • 权重
    循环神经网络需要计算三个权重(w, b),分别是U,V,WU,V,W
    这三个权重是在隐藏层上共享的。

原文的例子

原文中计划实现一个循环神经网络,用于发现自然语言句子中单词出现的模式,最终可以生成一些合理的句子。

  • 数据来源
    原文中,从网上下载了很多条句子(英文的)。

  • 数据的前期处理
    首先,统计了所有单词(包括标点符号)。
    取出最常见的7997单词,并且编号,每个单词有一个token。
    设置了3个特殊的token:
    UNKNOWN_TOKEN:匹配没有在8000列表中的单词。
    SENTENCE_START: 表示句子开始。
    SENTENCE_END: 表示句子结束。

  • 输入和输出
    输入x的维度是8000,意味着可以接受的句子长度最大是8000。
    输出y的维度是8000,和x一一对应。
    下面是一个句子构造后的实际例子:

x:
SENTENCE_START what are n't you understanding about this ? !
[0, 51, 27, 16, 10, 856, 53, 25, 34, 69]
y:
what are n't you understanding about this ? ! SENTENCE_END
[51, 27, 16, 10, 856, 53, 25, 34, 69, 1]

理解:y的每n位是x前n位的期望输出。

每个输入XtXt(尽管有8000维),只有一个维度有值且为1,代表第tt的单词的token的维度。
比如:what的token是51。那么XtXt只有第51位为1,其它都是0。
这个叫做one-hot vector。
输出:每个token的可能性。

state的维度是100。

  • 计算公式和维度

st=tanh(xtU+st1W)ot=softmax(stV)wherext.dimension=8000ot.dimension=8000st.dimension=100U.dimension=1008000:xtU is a 100 dimension vectorW.dimension=100100:st1W is a 100 dimension vectorV.dimension=8000100:stV is a 8000 dimension vector

  • 初始化U,V,W
    初始化很重要。跟激活函数(这里是tanh)有关。
    U,V,W每个元素是一个位于区间[n,n]的随机数。n是输入数的长度。

循环神经网络训练流程

Recurrent Neural NetWork - Training Process Recurrent Neural Network - Training Process P Prepare Data I Initialize Model {U, V, W} P->I FP Forward Propagation I->FP x L Calculate Loss FP->L y' BPTT Back Propagation Trough Time L->BPTT L(cross-entropy loss) GD Gradient Descent BPTT->GD {ΔL/ΔU, ΔL/ΔV, ΔL/ΔW} GD->FP iterate {U, V, W} UVW Result: {U, V, W} GD->UVW

长短期记忆网络 - LSTM (Long Short Term Memory) Network

i=σ(Uixi+Wist1+bi)i: input gate, defines how much of the newly computed state for the current input you want to let through.

f=σ(Ufxi+Wfst1+bf)f: forget gate, defines how much of the previous state you want to let through.

o=σ(Uoxi+Wost1+bo)o: output gate, defines how much of the internal state you want to expose to the external network.

g=tanh(Ugxi+Wgst1+bg)g: a candidate hidden state.ct=ct1f+gict: the internal memory of the unit.st=tanh(ct)o

门控循环单元 - GRUs (Gated Recurrent Units)

先看看计算公式:

xe=Extz=σ(Uzxe+Wzst1+bz)r=σ(Urxe+Wrst1+br)h=tanh(Uhxe+Wh(st1r)+bh)st=(1z)h+zst1ot=Vst+c

参照

posted @   SNYang  阅读(1120)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
点击右上角即可分享
微信分享提示