部分内容记录
1.2 | 数学符号 | 1、一个样本是一个句子,一个句子里含有若干个词语 2、根据一个词典,假设词典中有10,000个词,则可以将样本句子中的每个词根据在词典中的位置表示为one-hot编码向量,每个词都是10,000维 |
1.3 | 循环神经网络 | 1、为何不用传统标准NN结构: (1)每个样本的词语量不同,输入神经单元数目就不定; (2)没有信息传递共享,例如判定了某个词是人名,无法将这个信息传给后面的时间步 (3)如果按照标准结构,假设一个样本句子含有t个词语,每个词语表示成10,000维,那就是t*10,000,隐含层需要调节的参数就巨多了 2、理解RNN的关键: (1)句子中的每个词本身都相当于传统NN的输入,预测是否为人名相当于传统NN的输出,但这样是孤立的尽管它们存在于一个句子中,就浪费了前后的信息关系,所以就有了单向RNN 和双向RNN,区别在于是将预测词的前向信息传入预测词步骤做预测,还是预测词前后的信息都要传入当前预测词步骤做预测 (2)理解传统NN 和 RNN 到底做了什么,一定要结合着各自的网络结构和公式: 对于传统NN,简写为 各隐含层 a1 = g1(w*a0+b),最后的输出层求y时 换一个激活函数,可能sigmod 可能softmax; 对于RNN,每个词的预测相当于传统NN结构的改进,加上了预测词前后的激活值,a1 = g1(waa*a0+wax*x +ba) y=g2(wya*a1 +by);比较下来,加了一个输入信息,加了一层激活函数 (3)循环神经网络用的激活函数经常是tanh,不过有时候也会用ReLU,但是tanh是更通常的选择 |
1.5 | 不同类型的循环网络 | 多对多(x,y长度相等如命名实体识别、不等如机器翻译)、多对一(情感分类)、一对多(音乐生成)、一对一 |
1.6 | 语言模型和序列生成 | 1、语料库:很长的或者说数量众多的英文句子组成的文本 2、构建语言模型:建立一个合适的RNN结构、输入、输出,识别语音 (1)标识化过程-one-hot表示 (2)训练,“延迟输入” x<2> = y<1>, P(average|cats) 3、关于语言模型的“延迟输入”理解了好久,终于结合传统NN记录如下: (1)传统NN: 损失函数、 学习关系(1->1 other) 其中损失函数是关键,损失函数+梯度下降法就使得预测趋近于现实,再加上输入,我们就得到输入到输出的映射关系;所以这里就是我原来理解偏颇的地方,虽然形式是从前向后的传播,但是别误解了输入到输出关系学习过程的关键其实还是损失函数;P(y|x1,x2,x3) (2)RNN: 损失函数、 学习关系(概率关系、“延迟输入”)x<2> = y<1>, P(average|cats) |
1.8 | 循环神经网络的梯度消失 | 1、长期依赖问题: 例如,The cat .....was full; The cats.....were full. 需要根据前期的cat或cats 决定后面用的是was还是were 2、梯度消失、梯度爆炸在深层的网络里都可能会存在,梯度爆炸易发现易解决,梯度爆炸基本上用梯度修剪就可以应对,但梯度消失比较棘手 |
1.9 | 门控循环单元GRU | 1、从1.9-1.12 讲了4种不同的RNN结构,其中GRU和LSTM 解决深度神经网络梯度消失的问题,形成深度网络记忆; 2、GRU是常见的RNN结构之一,主要解决深度神经网络记忆的问题,因为网络越深前面的系数对后面的影响就越小; 3、GRU的原理就类似于算法编程课上的“哨兵”设置,在传统NN结构的基础上增加了一个C变量用于记忆主语单复数(0或1),增加另一个变量“门”用来控制何时更新C变量 |
1.10 | 长短期记忆LSTM | 1、LSTM(long short term memory) 2、是另一种常用的RNN结构,ufo:更新门、遗忘门、输出门 |
1.11 | 双向循环网络 | 1、Bidirectional RNN: 解决标准RNN网络在进行命名实体识别时仅能获取之前信息,无法获取后面信息的局限 2、双向RNN,其基本构件可以是标准RNN、GRU、LSTM 3、双向RNN的缺点是需要获取完整句子,在某些语音识别的场景中要等一个人讲完话才能运行双向中的从右到左传播,满足不了时效性 |
1.12 | 深层循环神经网络 | 1、deep RNNs:每一个时间步上将标准RNN的单个控件变成多层控件,最终整体形式上看像一个二维网络一样 |
2.1 | 词汇表征 | 1、之前的介绍对于单个字的表示,都是利用一张“词汇表”,然后one-hot表示,这种表示的缺点是每个字的表示都是独立孤立的,向量的距离都是一样的,看不出来相似相近 2、新用一张N维“特征词表”,每个元素都是词语特征,建立要标记词跟特征词表中每个元素的权重系数,这样就可以比较标记词1与标记词2的相似度 |
2.2 | 使用词嵌入(词编码,word embeddings) | 用词嵌入模型把它迁移到新的只有少量标注训练集的任务中,解决NLP问题 |
2.3 | 词嵌入的特性 | 1、补充知识:两个向量相似度的表示常用向量间的夹角来表示,夹角越接近于0表示两个向量越相似,而夹角越接近于0从余弦曲线上来看就是余弦值越接近于1;向量余弦值计算公式; 2、通过词嵌入可以进行相似性词语类比推理,例如男对女,意味着国王对 王后 |
2.4 | 嵌入矩阵 | 假设特征词300维,之前的词汇表1000维,就行成一个300*10000的矩阵,表示对于词汇表中的每一个词都可以用特征维度来表示 |
2.5 | 学习词嵌入 | 1、建立一个语言模型是学习词嵌入矩阵的好方法,通常是利用语料库句子的固定历史窗口例如前4个词作为上下文,预测输出,通过这种方式将词嵌入矩阵E作为参数,学习得到 |
2.6 | word2Vec | 1、word2Vec,生成词向量的一类算法,常见有skip-grams,cbow,视频里讲了skip-grams 2、建立一个监督学习过程,x是context也就是任意指定一个词,而target y是在context前后范围内的某个词语,学习x和y之间的映射关系,构造这个监督学习问题的目标并不是想要解决这个监督学习问题本身,而是想要使用这个学习问题来学到一个好的词嵌入模型。 3、在skip-grams 模型中softmax计算单元中按公式分母需要求和计算,费时长,为了解决这个问题,有个分级分类器和负采样 |
2.7 | 负采样 | 1、负采样:新定义的一个监督学习问题,用于学习词嵌入模型 2、训练集组成:x是context和target词对,y是1或0,代表两种来源方式一种是target来源词附近,另一种是来源文本随机获取 3、训练过程:context词one-hot向量-->E-->Ec-->多个2分类logistic分类器,就是这里跟之前的方式不一样,将softmax费时计算方式转换成了logistics计算方式,效率高; 4、K取值:一般数据集越大,取的K越小,4-20 5、负采样方式:常用经验值吧,也没用词频高低来排序也没用均匀分布,介乎两者之间吧 |
2.9 | 情绪分类 | 1、情绪分类问题:一段文字进行评价打分;简单的方式是每个字的特征向量进行平均或加和形成新的特征向量,然后进行softmax计算 2、1的方式有个弊端就是没有考虑词的顺序,例如not good 指的是不好而不是好,所以改进方式是用RNN |
3.1 | 基础模型 | 1、seq2seq模型:机器翻译类型 2、image captioning:图像描述 |
3.2-3.10 | 其他序列问题结构:机器翻译、语音识别、触发字检测(例如 小度小度) |