部分内容记录
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、梯度消失、梯度爆炸在深层的网络里都可能会存在,梯度爆炸易发现易解决,梯度爆炸基本上用梯度修剪就可以应对,但梯度消失比较棘手 |