前言
最近在看《Neural Network Methods for Natural Language Processing》就顺手纪录了下来读书笔记方便后续查看,也希望能分享给大家一些重点,这本书的作者是Yoav Goldberg,曾任EMNLP、EACL会议领域主席,而这本书也有中文版叫做《基于深度学习的自然语言处理》,由车万翔、郭江等哈工大顶尖教授与学者翻译,目标是对于深度学习在自然语言处理中的各项应用进行说明。
本文
第一章 - 引言
主要对自然语言处理领域的挑战与深度学习进行介绍,并对术语、本书覆盖与未覆盖层面进行说明。
第二章 - 学习基础与线性模型
监督式机器学习:通过观察样本进行统计归纳后产生泛化机制。
数据切分法
留一法:做K个不同参数的模型,分别留一个样本作为测试集后剩余样本进行训练,只会在样本数非常小(小于100)的时候才会使用。
留存法:将数据分成训练集与测试集两个部分调配出最优参数组合。
三路划分:将数据集分成训练集、验证集与测试集,训练集负责学习参数,验证集负责调整超参数,最后再直接套用测试集查看效果。
激活函数
Sigmoid:
可将值映射至0~1之间,可以设定阈值作为二分类使用。
Softmax:
用于多分类。
损失函数
看模型预测值是否贴近真实值。
0-1损失函数:
若预测值与真实值不相等则为1,否则为0。
为非凸函数,不太实用。
感知机为其变种:
绝对值损失函数:
log对数损失函数:
逻辑回归的损失函数。
Hinge损失函数:
SVM的损失函数。
平方损失函数
多用于回归问题。
指数损失函数
感知损失函数
交叉熵损失函数
二分类形态
多分类形态
相关高频问题:
1.交叉熵函数与最大似然函数的联系和区别?
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
怎么推导的呢?我们具体来看一下。
设一个随机变量
则
因为我们只有一组采样数据
对于采样数据
可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):
这个式子揭示了交叉熵函数与极大似然估计的联系,最小化交叉熵函数的本质就是对数似然函数的最大化。
现在我们可以用求导得到极大值点的方法来求其极大似然估计,首先将对数似然函数对
消去分母,得:
所以:
这就是伯努利分布下最大似然估计求出的概率
2. 在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?
其实这个问题求个导,分析一下两个误差函数的参数更新过程就会发现原因了。
对于均方误差损失函数,常常定义为:
其中
然后更新参数
因为sigmoid的性质,导致
那么为什么交叉熵损失函数就会比较好了呢?同样的对于交叉熵损失函数,计算一下参数更新的梯度公式就会发现原因。交叉熵损失函数一般定义为:
其中
另外,
所以有:
所以参数更新公式为:
可以看到参数更新公式中没有
所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。
正则化
对模型的参数进行约束,常用的有L1正则化与L2正则化。
L1正则化:
也叫做稀疏先验或lasso。
模型会因低参数值与高参数值而受到惩罚,偏向将所有非零的参数值减少到0。
L2正则化:
也叫做高斯先验或权值衰减。
会偏向把有高权重的参数的值减少。L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的正则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。所以大家比起1范数,更钟爱2范数。
凸函数是二阶导数总是非负的函数,因此有一个最小值点。
凹函数是二阶导数总是负的或者为0的函数,因而有一个最大值点。
参考资料
损失函数:
yyHaker:常见的损失函数(loss function)总结zhuanlan.zhihu.com