一、Why sequence models
所有上述问题都可以认为是监督学习,给X打标签。
但其中的情况也各有不同,如输入和输出都是有顺序的,但X和Y的顺序不同或有相同的情况
二、Notation
索引t来指示序列中的位置
在一个序列中如何表示一个单词
在句子中表示某个单词,首先准备一个包含所有词的字典,即把将要用到的单词放在一起做一个清单
在商业规模下,常用的字典规模一般为3到5万词汇,10万级词汇的字典也较为常见
如果构建一个1万词的字典,方法一:是从训练集中查找,找到出现频率最高的1万个词;方法二是查找一些网上的字典,将最常见的1万词作为拟构建的字典
然后用one-hot构建单词的representation,每个词的维数就是1万
如果遇到不在词汇表中的单词,就创建一个新的标志,即伪词,记为unknown word
三、Recurrent Neural Network Model
RNN缺点是只使用先前的信息来做出预测,即在预测y3时,是使用x1,x2,x3的值,而不会使用词语x4,x5,x6等信息
即对某一个词进行预测时,仅仅使用之前输入信息而不使用序列后的信息
具体所做的计算为:
四、Backpropagation through time
标准的逻辑回归loss也叫交叉熵损失即cross-entry loss
上述为一种特殊情况,即输入序列的长度等于输出序列的长度(判断句子中的每一个单词是否为名字)
五、Different types of RNNs
讨论输入和输出序列不等情况的RNN
1.many to one:如情感分类,不对输入的每个词做输出,而只在最后做预测输出y^.
2.one to many----music generation
输入喜欢的音乐类型(用一个整数代替),输出是对应一段音乐的乐谱
六、Language model and sequence generation
语言建模是nlp 中最基础和最重要的任务之一——适合用RNN解决
讨论如何用RNN构建一个语言模型(如生成莎士比亚风格或其他风格的文字)
语言模型的功能就是输入一个句子,然后给出判断是否是某一句子的概率
将输入句子映射成各个标记或表中单词的集合
然后使用RNN为不同序列的概率建模
七、Sampling novel sequences
nlp中很多还是在处理字符级语言模型
在News上进行训练得到的是news的版本,如果在莎士比亚类型的文字上训练就会得到莎士比亚类型的小说文字
八、Vanishing gradients with RNNs
RNN会存在比较严重的梯度消失的问题
出现梯度爆炸时参数会显示Nan或非数字之类的,意味着神经网络计算中数值溢出
如果出现梯度爆炸,解决办法是使用gradient clipping,这样会重新缩放梯度
梯度消失的问题很难消失
九、Gated Recurrent Unit (GRU)
对RNN的隐藏层进行修正,捕捉长范围的连接,帮助解决梯度爆炸的问题
而在GRU中的门责任是判断是否要更新某些值
十、Long Short Term Memory (LSTM)
LSTM比GRU更强大且更为泛化
对于存储在记忆单元的某些实数值可以维持很多步骤
peephole connection即c<t-1>会被用来影响门控的数值
LSTM的发源较GRU早,在解决不同问题中两个算法的优劣不一
GRU模型简单(只有两个门控),更适合于构建较大的网络
LSTM更加强大和灵活(有三个门控),可以把LSTM作为默认第一个去尝试的方法
十一、Bidirectional RNN
在一个时间点同时获得序列中前部分和后部分的信息
对于NLP问题,输入一个句子,可以首先使用Bi-LSTM进行实验
对基本的RNN、GRU、LSTM的结构进行修改,预测任何地方甚至是序列的中间
BRNN的缺点是需要整个数据序列才能在任何地方进行预测
十二、Deep RNNs
对于学习非常复杂的函数时,把多层RNNs堆在一起形成更深层的这些模型版本会有很大帮助
对于RNN来说3层已经很深了,因为有时间这一维度的存在,而对于普通的NN来说,100层也是可以的