RNN的应用举例——基于RNN的语言模型

现在,我们介绍一下基于RNN语言模型。我们首先把词依次输入到循环神经网络中,每输入一个词,循环神经网络就输出截止到目前为止,下一个最可能的词。例如,当我们依次输入:

我 昨天 上学 迟到 了

神经网络的输出如下图所示:

其中,s和e是两个特殊的词,分别表示一个序列的开始和结束。

向量化

我们知道,神经网络的输入和输出都是向量,为了让语言模型能够被神经网络处理,我们必须把词表达为向量的形式,这样神经网络才能处理它。

神经网络的输入是词,我们可以用下面的步骤对输入进行向量化:

  1. 建立一个包含所有词的词典,每个词在词典里面有一个唯一的编号。
  2. 任意一个词都可以用一个N维的one-hot向量来表示。其中,N是词典中包含的词的个数。假设一个词在词典中的编号是i,v是表示这个词的向量,vj是向量的第j个元素,则:
vj={1j=i0j≠i(76)

上面这个公式的含义,可以用下面的图来直观的表示:

使用这种向量化方法,我们就得到了一个高维、稀疏的向量(稀疏是指绝大部分元素的值都是0)。处理这样的向量会导致我们的神经网络有很多的参数,带来庞大的计算量。因此,往往会需要使用一些降维方法,将高维的稀疏向量转变为低维的稠密向量。不过这个话题我们就不再这篇文章中讨论了。

语言模型要求的输出是下一个最可能的词,我们可以让循环神经网络计算计算词典中每个词是下一个词的概率,这样,概率最大的词就是下一个最可能的词。因此,神经网络的输出向量也是一个N维向量,向量中的每个元素对应着词典中相应的词是下一个词的概率。如下图所示:

Softmax层

前面提到,语言模型是对下一个词出现的概率进行建模。那么,怎样让神经网络输出概率呢?方法就是用softmax层作为神经网络的输出层。

我们先来看一下softmax函数的定义:

g(zi)=ezi∑kezk

这个公式看起来可能很晕,我们举一个例子。Softmax层如下图所示:

从上图我们可以看到,softmax layer的输入是一个向量,输出也是一个向量,两个向量的维度是一样的(在这个例子里面是4)。输入向量x=[1 2 3 4]经过softmax层之后,经过上面的softmax函数计算,转变为输出向量y=[0.03 0.09 0.24 0.64]。计算过程为:

y1y2y3y4=ex1∑kexk=e1e1+e2+e3+e4=0.03=e2e1+e2+e3+e4=0.09=e3e1+e2+e3+e4=0.24=e4e1+e2+e3+e4=0.64(77)(78)(79)(80)(81)(82)(83)(84)(85)

我们来看看输出向量y的特征:

  1. 每一项为取值为0-1之间的正数;
  2. 所有项的总和是1。

我们不难发现,这些特征和概率的特征是一样的,因此我们可以把它们看做是概率。对于语言模型来说,我们可以认为模型预测下一个词是词典中第一个词的概率是0.03,是词典中第二个词的概率是0.09,以此类推。

语言模型的训练

可以使用监督学习的方法对语言模型进行训练,首先,需要准备训练数据集。接下来,我们介绍怎样把语料

我 昨天 上学 迟到 了

转换成语言模型的训练数据集。

首先,我们获取输入-标签对:

输入 标签
s
昨天
昨天 上学
上学 迟到
迟到
e

然后,使用前面介绍过的向量化方法,对输入x和标签y进行向量化。这里面有意思的是,对标签y进行向量化,其结果也是一个one-hot向量。例如,我们对标签『我』进行向量化,得到的向量中,只有第2019个元素的值是1,其他位置的元素的值都是0。它的含义就是下一个词是『我』的概率是1,是其它词的概率都是0。

最后,我们使用交叉熵误差函数作为优化目标,对模型进行优化。

在实际工程中,我们可以使用大量的语料来对模型进行训练,获取训练数据和训练的方法都是相同的。

交叉熵误差

一般来说,当神经网络的输出层是softmax层时,对应的误差函数E通常选择交叉熵误差函数,其定义如下:

L(y,o)=−1N∑n∈Nynlogon

在上式中,N是训练样本的个数,向量yn是样本的标记,向量on是网络的输出。标记yn是一个one-hot向量,例如y1=[1,0,0,0],如果网络的输出o=[0.03,0.09,0.24,0.64],那么,交叉熵误差是(假设只有一个训练样本,即N=1):

L=−1N∑n∈Nynlogon=−y1logo1=−(1∗log0.03+0∗log0.09+0∗log0.24+0∗log0.64)=3.51(86)(87)(88)(89)

我们当然可以选择其他函数作为我们的误差函数,比如最小平方误差函数(MSE)。不过对概率进行建模时,选择交叉熵误差函数更make sense。

循环神经网络应用举例相关推荐

  1. 循环神经网络的主要特点,循环神经网络应用举例

    CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别? 如下:1.DNN:存在着一个问题--无法对时间序列上的变化进行建模.然而,样本出现的时间顺序对于自然语 ...

  2. 循环神经网络应用案例

    基础介绍可以参考: https://blog.csdn.net/lilong117194/article/details/82958326 https://blog.csdn.net/lilong11 ...

  3. 卷积神经网络的应用实例,卷积神经网络应用举例

    深度学习之损失函数与激活函数的选择 深度学习之损失函数与激活函数的选择在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结.其中使用的损失函数是均方差,而激活函 ...

  4. 神经网络应用较多的算法,图卷积神经网络应用

    神经网络原理及应用 神经网络原理及应用1.什么是神经网络?神经网络是一种模拟动物神经网络行为特征,进行分布式并行信息处理的算法. 这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从 ...

  5. 数学建模神经网络应用,构建神经网络模型方法

    数学模型的建立与求解 . 8.3.2.1数学模型的求解本次研究采用地下水数值模拟软件ProcessingModflow,利用美国地质调查局所开发的三维有限差分地下水流模型Modflow(Modular ...

  6. 人工神经网络技术及应用,人工神经网络应用场景

    人工智能应用在哪些方面? 人工智能应用:计算机科学.金融.医院和医药.重工业.顾客服务.1.计算机科学人工智能(AI)产生了许多方法解决计算机科学最困难的问题.它们的许多发明已被主流计算机科学采用,而 ...

  7. 吴恩达《神经网络和深度学习》第四周编程作业—深度神经网络应用--Cat or Not?

    吴恩达<神经网络和深度学习>- 深度神经网络应用--Cat or Not? 1 安装包 2 数据集 3 模型的结构 3.1 两层神经网络 3.2 L层深度神经网络 3.3 通用步骤 4 两 ...

  8. bp神经网络应用实例_自监督图神经网络

    近年来,深度学习在视觉以及自然语言处理等领域取得了革命性的进步,但是诸如图像与自然语言之类的数据往往是高度结构与顺序化的.然而实际中大多数数据并无此特性,例如人际关系.社交网络.蛋白质分子结构等等,这 ...

  9. 吴恩达深度学习笔记(109)-循环神经网络模型(RNN介绍)

    https://www.toutiao.com/a6652926357133066755/ 2019-02-06 20:15:53 循环神经网络模型(Recurrent Neural Network ...

  10. 时雨月五| AI机器学习实战の电磁导航智能车中神经网络应用的问题与思考

    "不愤不启,不悱不发.举一隅不以三隅反,则不复也". – <论语·述而> 再次将论语中的这句"不愤不启,不悱不发"引用在这里,说明学生的学习的活动部 ...

最新文章

  1. 64位IIS(IIS6/IIS7)上跑Asp + Jet.Oledb的设置要点
  2. LEDNET 实时分割
  3. flask基础(上篇)
  4. css文本居中的几种方式
  5. 第4章 Python 数字图像处理(DIP) - 频率域滤波11 - 使用高通滤波器锐化图像
  6. H.264 中的相关问题
  7. ubuntu 安装过程所需软件
  8. as真机调试_如何使用真机调试android程序
  9. 你能打动客户的C++理由,一定要先说服自己相信
  10. 对接第三方支付接口-记录
  11. 硬盘安装Debian
  12. 修改 (WSL)Windows Subsystem for Linux默认为root登录
  13. ROI Pool、ROI Align、PSROI Pool、PrROI Pool
  14. 基于单神经元的自适应PID算法实现步骤与MATLAB代码
  15. 【数据可视化应用】IDW插值计算实战案例(附Python和R语言代码)
  16. 爬取上交所公司信息,根据公司股票代码获取公司注册地址以及地址的经纬度
  17. ubuntu16.04根目录磁盘空间扩容及可能遇到的问题(亲测有效)
  18. python 均匀分布_python 实现生成均匀分布的点
  19. SpringMvc工作流程图讲解
  20. UIL圆形图片加载无效

热门文章

  1. 字节跳动面试题 问题定位
  2. xvid编解码器安装
  3. 计算机病毒教学评课,计算机病毒评课稿样稿.doc
  4. PCBLayout跳坑指南——PCB走线角度选择到底该不该90°?
  5. 小米盒子 smb Android,客厅里的多媒体 小米盒子SMB本地连接
  6. 电脑读卡器,读卡器在电脑怎么打开_读卡器插在电脑上显示不出来如何修复-win7之家...
  7. Linux应用层例程7 CAN 应用编程基础
  8. 六人扑克牌游戏 三先 规则
  9. c语言实现费诺编码csdn,香农编码 哈夫曼编码 费诺编码的比较
  10. 计算机网络技术——VLAN划分