循环神经网络和LSTM模型

(由于平台稿件格式问题,公式格式不能正确写上;如若读写困难可评论区留言获取完整电子版)

1.1 循环神经网络模型详解

1.1.1 循环神经网络的基本原理

在本书前面讨论过的模型中,无论是简单的逻辑回归,还是复杂的DNN、CNN等,都是在单个样本上进行分类的,也就是说,样本之间缺乏联系。例如,在使用CNN进行手写体字符识别时,仅有单个字符的图像输入,没有字符前后的内容。然而,在语音处理、自然语言处理等领域,样本之间的时序关系是非常重要的,类别之间在时序上有很强的关联性。

随着深度学习理论和工程的发展,越来越多的自然语言处理场景开始使用深度学习模型代替传统模型来处理日益复杂的业务需求。例如,快递公司在进行地址解析时,需要对字符串中的每个词是否为地址进行判断。为了简化任务,模型通常会假设已经完成分词,这样,分类任务就是输入一个词,返回的类别将是“地址”“非地址”两类,示例如下。

我 住 在 朝阳区 苹果 社区

分类器(Classifier,例如逻辑回归、SVM、DNN)需要完成的任务是计算以下式子。

classifier(我)=?

classifier(住)=?

classifier(在)=?

classifier(朝阳区)=?

classifier(苹果)=?

classifier(社区)=?

在上述式子中,每个词都对应于一个embedding,这一点和Word2vec无异。分类器有多种选型,这些选型可以是传统的逻辑回归、SVM,也可以是流行的DNN、CNN。每种选型都有配套的参数,通过标注数据学习模型的参数和词的embedding。

分类器学习完成后,我们就可以用它来计算输入样本属于各个类别的得分了。因为在绝大多数场景中,“朝阳区”都是作为地址出现的,所以,训练样本中的大多数“朝阳区”将被标注成地址,classifier(朝阳区)=“地址” 的可能性较大,即得分较高。同理,classifier(我)

=“非地址” 的得分较高。

问题貌似很简单。不过,难点来了——classifier(苹果) 会是什么样的结果呢?在大多数语料中,“苹果”都不太可能对应于地点,因此在这里有很大的可能将 classifier(苹果) 判断为“非地址”,而这个结果显然是错误的。在本例中,“苹果”应该是一个地名,就像北京的“苹果园”一样。

我们分析一下造成这个问题的原因。无论是逻辑回归还是DNN,在对一个词进行类别判断时,都只使用这个词本身的信息。但是,在很多场景中,只有词本身的信息是不够的,如果不对分类器输入新的信息,就很难通过调整模型参数来解决问题。

大多数人工智能工具都会借鉴人类的思考方式。我们先想想看人类是如何解决这个问题的——对,就是上下文。人类在阅读文本时,除了看当前词,还会看上下文,当一个词的前后两个词都是地址时,这个词就八九不离十是地址了。在这里,我们给上一时刻的输出结果乘以一个待学习参数 k,作为下一时刻的输入,公式如下。

y^' (t)=classifier(x(t),ky^' (t-1))

以上模型,如图13-1所示。

图13-1

为了形象地理解这个问题,我们假设分类模型是全连接神经网络,x(t) 为 t 时刻的词所对应的embedding。不考虑前一时刻的输出结果,公式如下。

y^' (t)=f(Ux(t)+u_0 )

U 和 u_0 都是待学习参数。f 为Sigmoid函数。该模型为逻辑回归。

当模型考虑上下文时,会将前一时刻的输出结果注入模型。因此,可以给以上模型添加一些东西,写成下式。

y^' (t)=f(Ux(t)+ky^' (t-1)+u_0 )

y^' (t-1) 为前一时刻的输出。k 为待学习参数,用于控制前一时刻的结果对当前时刻分类的影响。

在大多数时候,直接将前一时刻的输出作为当前时刻的一个输入,并不是特别合适的。尽管我们需要前一时刻的信息,但我们不希望完全使用前一时刻的输出。为了满足这个需求,要对分类模型进行改造。

首先,将分类器由逻辑回归改造成单层神经网络,公式如下。

h(t)=g(Ux(t)+u_0 )

y^' (t)=f(Vh(t)+v_0 )

因为网络是单层神经网络,梯度消失问题不明显,所以 g 一般使用输出信息更为丰富的Tanh作为激活函数。当预测目标为二分类时,f 为Sigmoid函数。当预测目标为多分类时,f 为Softmax函数。

接着,将中间层 h(t) 作为下一时刻 t+1 的另一个输入。h(t) 称为状态向量。因为状态向量存在于模型这个“黑盒”中,外界不知道它的存在,所以,状态向量是被隐藏的。

根据以上分析,对模型进行细微的改造,公式如下,结果如图13-2所示。

h(t)=f(Ux(t)+Wh(t-1)+u_0 )

y^' (t)=g(Vh(t)+v_0 )

图13-2

可以看出,h(t) 包含当前时刻的输入 x(t) 和过往时刻的信息 h(t-1)。在每个时刻,待学习参数 U、W、V、u_0、v_0 为同一套参数,即在所有时刻参数是共享的。参数共享的好处在于能够减少参数数量:如果每个时刻都对应于一套参数&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值