【每周一文】Supervised Sequence Labelling with Recurrent Neural Networks
概述
序列化标注是NLP领域非常常见的问题,很多问题都可以归结为序列化标注问题,例如分类可以看做多对一的标注;词性标注属于一对一的标注;机器翻译属于多对多的标注。
深度学习在NLP上取得不错的效果,常用的模型有前向神经网络(FNN)、卷积神经网络(CNN)、循环神经网络(RNN、BIRNN)、LSTM、关注度模型(AM)等,对于特定任务还有相关变形
本文主要科普下各个模型的结构,方便在后续NLP任务中应用。
RNN技术演化
常见激活函数
在多层神经网络中,一般先进行线性变换,然后进行非线性变换。如果多层神经网络只进行线性变换可以证明和一层网络一致。常见的非线性变换函数,也叫激活函数,如下:
常用的以sigmoid和tanh为主,他们都是将实数区间转换为固定区间(0,1)或者(-1,1)
前向神经网络(FNN)
FNN也称之为多层神经网络,主要结构如下:
- FNN 整体分为三层,输入层、隐含层和输出层,可以理解为输入层为原始特征层常常表示为向量结构;隐含层为特征非线性变换层;输出层为特征变换后的结果。
- 输入层表示为:x
- 隐藏层表示为
ah=∑i=1Iwihxibh=θh(ah)
a_h=\sum_{i=1}^I w_{ih}x_i \\ b_h=\theta_h(a_h)
- 输出层表示为
ao=∑i=1HLwiobi
a_o=\sum_{i=1}^{H_L} w_{io}b_i
- 模型层:一般会根据不同的问题选择不同的模型或者损失函数,对于回归问题均方差;二分类问题采用sigmoid变换采用对数损失;多分类问题采用softmax;以二分类为例
y=sigmoid(ao)−l(zi,xi)=ziln(y)+(1−zi)ln(1−y)
y=sigmoid(a_o) \\ -l(z_i,x_i)=z_i ln(y) + (1-z_i)ln(1-y)
- 模型计算,可以采用标准的BP算法进行求解,即采用链式规则求解,这里不再赘述。
循环神经网络(RNN)
简单的FNN不太适用于NLP,主要原因是没有考虑上下文特征,如果仅仅考虑前一个词特征,可以考虑使用RNN,结构如下:
1. 该图看上去比较复杂,可以简单的理解为计算某个神经元时,除了考虑当前输入外,还要考虑上一时间点隐藏状态值,从公式看一目了然
a_h^t=\sum_{i=1}^I w_{ih}x_i^t + \sum_{h'=1}^H w_{h'h}b_{h'}^{t-1} \\ b_h^t=\theta(a_h^t)
2. 输出层保持不变,将RNN按照时间序列展开如下所示
3. 相当于共享参数,每次均是输入不同,参数都是相同的。
4. 模型训练可以采用BPTT算法,即按照时间序列从后向前、从输出到输入进行梯度传递。
双向循环神经网络(Bi_RNN)
单向的RNN只考虑了上文特征,有些问题还会用到下文特征,一个简单的变换就是进行双向神经网络,每次得到隐藏神经元值,需要先前向遍历,在后向遍历,将结果只累加,在进行线性变换。
BI_RNN结构图展开如下:
- 前向过程可以表示为
前向计算:apth=∑i=1Iwihxti+∑h′=1Hwh′hbt−1h′后向计算:abth=∑i=1Iwihxti+∑h′=1Hwh′hbt+1h′bth=θ(apth+abth)
前向计算:ap_h^t=\sum_{i=1}^I w_{ih}x_i^t + \sum_{h'=1}^H w_{h'h}b_{h'}^{t-1} \\ 后向计算:ab_h^t=\sum_{i=1}^I w_{ih}x_i^t + \sum_{h'=1}^H w_{h'h}b_{h'}^{t+1} \\ b_h^t=\theta(ap_h^t+ab_h^t)其中前向计算过程和后向计算过程中,参数矩阵式不同的。
- 模型求解也需要通过BPTT计算两遍。
LSTM(Long Short-Term Memory)
双向的RNN已经可以解决很多NLP问题,但是RNN有一个问题,随着输入序列变长,靠前的上下文对后面的影响越来越小,如下图所示
因此LSTM提出通过逻辑门进行输入、输出控制,每一个神经元表示为一个内存块,每一个块都有一个输入门控制输入选择;遗忘门控制上下文特征;输出门控制该神经元对结果的影响。
一个内存块表示如下
- 一个神经元相当于普通神经网络中的一个隐藏节点,其中包括一个或者多个cell(一个为主)、输入(和普通类似)、输出(相当于非线性变换后结果)、三个逻辑门(相当于三个非线性变换,值域在0-1之间)
- 三个逻辑门的功能简单理解为,如果输入门为0,则屏蔽此特征对输出的影响;如果遗忘门为0则屏蔽上下文特征对输出影响;如果输出门为0表屏蔽该内存块对输出影响
- 输入门(input Gates)
atτ=∑i=1Iwiτxti+∑h=1Hwhτbt−1h′+∑c=1Cwcτst−1cbtτ=f(atτ)
a_\tau^t=\sum_{i=1}^I w_{i\tau}x_i^t + \sum_{h=1}^H w_{h\tau}b_{h'}^{t-1}+\sum_{c=1}^Cw_{c\tau}s_c^{t-1} \\ b_\tau^t=f(a_\tau^t)线性变换主要包括三块,一是基础特征输入;二是上下文隐藏层影响;三是上下文中间状态影响(上图中虚线箭头参数);
- 遗忘门(Forget Gates)
atϕ=∑i=1Iwiϕxti+∑h=1Hwhϕbt−1h′+∑c=1Cwcϕst−1cbtϕ=f(atϕ)
a_\phi^t=\sum_{i=1}^I w_{i\phi}x_i^t + \sum_{h=1}^H w_{h\phi}b_{h'}^{t-1}+\sum_{c=1}^Cw_{c\phi}s_c^{t-1} \\ b_\phi^t=f(a_\phi^t)和输入门类似;
- 神经元(Cell):
atc=∑i=1Iwicxti+∑h=1Hwhcbt−1h′stc=btϕst−1c+btτg(atc)
a_c^t=\sum_{i=1}^I w_{ic}x_i^t + \sum_{h=1}^H w_{hc}b_{h'}^{t-1} \\ s_c^t=b_\phi^t s_c^{t-1}+b_\tau^tg(a_c^t)神经元输入线性变换和RNN计算类似,不同的是其状态有两部分构成,输入门控制本次特征;遗忘门控制上下文的状态值
- 输出门(output Gates)
atω=∑i=1Iwiωxti+∑h=1Hwhωbt−1h′+∑c=1Cwcωstcbtω=f(atω)
a_\omega^t=\sum_{i=1}^I w_{i\omega}x_i^t + \sum_{h=1}^H w_{h\omega}b_{h'}^{t-1}+\sum_{c=1}^Cw_{c\omega}s_c^{t} \\ b_\omega^t=f(a_\omega^t)
- 内存块输出
btc=btωh(stc)
b_c^t=b_\omega^th(s_c^t)
- 模型计算依然采用BP算法,可能会更复杂一下,通过LSTM能够达到的效果如下即通过门的打开和关闭控制影响程度。
- LSTM也可以扩展到Bi_LSTM
其他模型
CTC
CTC是一种输出控制,他解决的问题是输入和输出是多对多的情况,但是输入和输出的对应关系不确定,需要枚举输入到输出的所有路径得到预测结果。
多维RNN
将1-D的输入向量,展开成多维。相当于对RNN进行扩展,需要在每一个维度都进行一次RNN,然后累加得到线性变换结果,累加时可能需要注意上下文的选取,不是简单的上一个词。例如
层次RNN
解决的主要问题是如果输入序列很长,采用RNN或者LSTM时计算复杂度比较大,层次RNN采用分组概念,展开如下图所示
关注度模型(AM)
在计算每一个特征对应的输出时,考虑上下文的词分布概率,进行加权求和得到线性变换结果,示例如下
总结
本文概述NLP领域常用的几种深度学习模型,如何应用需要根据具体问题应用,后续会逐渐展开。
【每周一文】Supervised Sequence Labelling with Recurrent Neural Networks相关推荐
- A Critical Review of Recurrent Neural Networks for Sequence Learning-论文(综述)阅读笔记
A Critical Review of Recurrent Neural Networks for Sequence Learning 阅读笔记 //2022.3.31 下午15:00开始 论文地址 ...
- LSTM对比GRU:Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
先说结论:不论是machine translation还是music datasets.speech signal modeling,GRU和LSTM的performance差别不大,但GRU往往比L ...
- Teacher Forcing for Recurrent Neural Networks
Teacher Forcing是一种用来快速而有效地训练循环神经网络模型的方法,这种方法以上一时刻的输出作为下一时刻的输入. 它是一种网络训练方法,对于开发用于机器翻译,文本摘要和图像字幕的深度学习语 ...
- Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...
- Paper:RNN之《Generating Sequences With Recurrent Neural Networks用循环神经网络生成序列》的翻译和解读
Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...
- Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记
Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras 序列分类是一种预测建模问题,其中在空间 ...
- 【论文研读】【医学图像分割】【FCN+RNN】Recurrent Neural Networks for Aortic Image Sequence Segmentation with ...
[FCN+RNN]Recurrent Neural Networks for Aortic Image Sequence Segmentation with Sparse Annotations Ab ...
- 第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks)
第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...
- [C5W1] Sequence Models - Recurrent Neural Networks
第一周 循环序列模型(Recurrent Neural Networks) 为什么选择序列模型?(Why Sequence Models?) 在本课程中你将学会序列模型,它是深度学习中最令人激动的内容 ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(13)序列模型(Sequence Models)-第一周 循环序列模型(Recurrent Neural Networks)
第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...
最新文章
- ubuntu12.04下NFS链接开发板并测试交叉编译的第一个应用
- Jenkins 笔记
- 基于webpack的react脚手架
- loadrunner11完整卸载
- mysql设置用户权限
- 神龙 X-Dragon,这技术“范儿”如何?| 问底中国 IT 技术演进
- 泰山JDK8升级u302,找到了更好的整合mips办法
- 老司机带你用python爬取妹子图,接稳这波福利
- 有限差分法的基本思想
- C# Udp测试工具开发
- envi查看灰度直方图_ENVI实习直方图匹配校正分类.doc
- 计算机视觉将打造中国技术的“胜利者效应”
- 巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...
- 个人免签码支付源码|服务监控模块强大后台功能全面
- 【用Python学习Caffe】7. 网络结构的修剪
- mysql 怎么同时删除两张表的数据库,mysql怎样删除多个表格数据库数据_数据库
- 抖音内容选题怎么做?有哪些找选题的办法?
- Linux部署springboot项目(从安装java开始)
- Linux 下 screenfetch 安装
- word中MathType公式不能 二次编辑解决方案