基于阈值的损失函数_读书心得 - 《基于深度学习的自然语言处理》 - 第一篇(第1章、第2章)...

296d8f6ee3077676a3cb29a747d5d613.png

前言

8ebda29f910948e5a703e1d9c99a4cab.png

最近在看《Neural Network Methods for Natural Language Processing》就顺手纪录了下来读书笔记方便后续查看,也希望能分享给大家一些重点,这本书的作者是Yoav Goldberg,曾任EMNLP、EACL会议领域主席,而这本书也有中文版叫做《基于深度学习的自然语言处理》,由车万翔、郭江等哈工大顶尖教授与学者翻译,目标是对于深度学习在自然语言处理中的各项应用进行说明。

本文

第一章 - 引言

主要对自然语言处理领域的挑战与深度学习进行介绍,并对术语、本书覆盖与未覆盖层面进行说明。


第二章 - 学习基础与线性模型

监督式机器学习:通过观察样本进行统计归纳后产生泛化机制。

数据切分法

留一法:做K个不同参数的模型,分别留一个样本作为测试集后剩余样本进行训练,只会在样本数非常小(小于100)的时候才会使用。

留存法:将数据分成训练集与测试集两个部分调配出最优参数组合。

三路划分:将数据集分成训练集、验证集与测试集,训练集负责学习参数,验证集负责调整超参数,最后再直接套用测试集查看效果。


激活函数

Sigmoid:

可将值映射至0~1之间,可以设定阈值作为二分类使用。

cbed2cb5b2309fd9c3a874c9c995644e.png

e8d9fd74b42204ee8f49e2c339098f94.png

Softmax:

用于多分类。

ca55de942e0f79c6df1d2edd712f4e1c.png

损失函数

看模型预测值是否贴近真实值。

0-1损失函数

若预测值与真实值不相等则为1,否则为0。

f98e1f18b236f22dca8176458b320d73.png

为非凸函数,不太实用。

感知机为其变种:

f7d4cfe7e30dba9580c0b45cb3a9c253.png

绝对值损失函数

442d84c2abd8d40f983eb78816e2f44c.png

log对数损失函数

8196b4949fa1f27613b58f49c28efc9c.png

逻辑回归的损失函数。

Hinge损失函数

ab861bd811ac0b238a19c78d4d9cdd00.png

SVM的损失函数。

平方损失函数

d8827e476629051f265ba5762c579f25.png

多用于回归问题。

指数损失函数

cfac421821d9392dc35293e0ffc7a7ec.png

感知损失函数

c8ffa350c0521fdfe41b55399ed77e9f.png

交叉熵损失函数

b2c259f9e4471014e214abf1dab94a90.png

二分类形态

634097ef600a6497de4c6ffee05b820c.png

多分类形态

ee5beb07a48fa651b74137e6f07bb592.png

相关高频问题:

1.交叉熵函数最大似然函数的联系和区别?

区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。

联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化

怎么推导的呢?我们具体来看一下。

设一个随机变量

满足伯努利分布,

的概率密度函数为:

因为我们只有一组采样数据

,我们可以统计得到
的值,但是
的概率是未知的,接下来我们就用
极大似然估计的方法来估计这个
值。

对于采样数据

,其
对数似然函数为:

可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):

这个式子揭示了交叉熵函数极大似然估计的联系,最小化交叉熵函数的本质就是对数似然函数的最大化。

现在我们可以用求导得到极大值点的方法来求其极大似然估计,首先将对数似然函数对

进行求导,并令导数为0,得到

消去分母,得:

所以:

这就是伯努利分布下最大似然估计求出的概率

2. 在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数

其实这个问题求个导,分析一下两个误差函数的参数更新过程就会发现原因了。

对于均方误差损失函数,常常定义为:

其中

是我们期望的输出,
为神经元的实际输出(
)。在训练神经网络的时候我们使用梯度下降的方法来更新
,因此需要计算代价函数对
的导数:

然后更新参数

因为sigmoid的性质,导致

取大部分值时会很小(如下图标出来的两端,几乎接近于平坦),这样会使得
很小,导致参数
更新非常慢。

e0efc90ce9a607b138af4fd0ad0147b2.png

那么为什么交叉熵损失函数就会比较好了呢?同样的对于交叉熵损失函数,计算一下参数更新的梯度公式就会发现原因。交叉熵损失函数一般定义为:

其中

是我们期望的输出,
为神经元的实际输出(
)。同样可以看看它的导数:

另外,

所以有:

所以参数更新公式为:

可以看到参数更新公式中没有

这一项,权重的更新受
影响,受到误差的影响,所以
当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。

所以当使用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
88e35c567b8e48d96b64a54d4bbc609f.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值