科技匠|从理论到实践分析分类问题中为什么不使用均方误差损失函数
导读在神经网络中 , 回归问题通常都是使用均方误差(meansquareerro)MSE作为代价函数 , 而在分类问题中通常都是选择最大似然函数或softmax作为代价函数 , 最大似然函数用于二分类 , softmax用于多分类 , softmax是最大似然函数对于多分类的推广 。
不知道大家有没有想过 , 为什么在分类问题中不使用MSE作为代价函数呢?那么这篇文章就让我们来分析一下为什么在分类问题中不使用MSE作为代价函数 。 本篇文章的结构形式以理论+代码实践的方式来证明 。 代码实践以MXNet来实现 , 所以需要一点基础 。
明确讨论的问题为了帮助大家更好的理解 , 先简单介绍一下分类问题是如何实现的 , 为了简化分析问题我们使用一个单层的二分类模型来分析问题 , 一个单层的二分类模型结构图如下
而分类问题 , 在全连接层之后还需要通过sigmoid函数 , 目的是将输出归一化到(0,1)范围内 , 然后通过最大似然函数来计算预测值与实际值的误差 , 从而计算梯度更新参数 。 所以 , 模型最终输出是一个(0,1)范围内的概率值 。 sigmoid函数图像如下
我们本篇文章讨论的问题是 , 通常对于分类问题而言在sigmoid后是通过最大似然函数损失来作为代价函数 , 而我们能不能将最大似然函数替换为均方误差 。
理论分析在分析一个函数是否能作为代价函数的时候 , 我们主要考虑的是代价函数是不是连续可导 , 从而通过计算梯度来更新参数 , 最小化代价函数 。 除此之外 , 还需要考虑一些代价函数是否具有一些其他的特性 , 如更新参数的速度 , 误差大更新的速度快 , 误差小更新的速度小 。 所以 , 我们主要是通过分析参数的更新来判断代价函数是否合适 , 在推导参数更新的时候需要知道下面几个公式
接下来我们来看看参数的梯度变化 , 然后再计算绝对误差A与参数梯度之间的关系
最大似然代价函数参数的更新
接下来我们分析最大似然函数代价函数的梯度随误差的变化
代码实践上面我们通过理论分析了当代价函数分别为均方误差函数和最大似然函数时 , 损失值随着输入的变化和梯度与误差之间的变化关系 。
接下来 , 我们通过一个二分类来实践一下 。 代码主要是基于mxnet来实现的
首先我们随机生成1000个样本 , 每个样本包含两个特征 , 样本服从均值为0方差为0.5的正态分布 。 然后 , 通过定义边界 , 将1000个样本分为两个不同的类别 , 对于不满足条件的样本直接剔除 。 然后 , 分别定义了最大似然代价函数和均方误差代价函数 。
在理论分析中 , 我们发现当z值过大时 , 以均方误差为代价函数的参数的梯度会接近于0 , 从而会导致模型难以收敛 , 所以接下来我们将w参数的初始化改为均值为10 , 代码如下
w=mx.nd.random.normal(loc=10,scale=0.1,shape=(input_x.shape[1],1),dtype=np.float64)可以发现 , 当以均方误差为代价函数时 , 经过10个epoch之后模型在测试集上的准确率只有19% , 而且模型的收敛速度很慢 。 当以最大似然函数为代价函数时 , 经过大约6个epoch模型在测试集上的准确率就可以达到100% , 而且模型的收敛速度非常快 。
- 无趣科技谈|X2凭实力拿下冠军,京东手机周销量榜单出炉,Find
- 毛毛科技说|三星S20+出现“小米价”,总算等到了,三星扛不住了
- 简简科技|余承东称鸿蒙体验已达安卓7成多,鸿蒙手机新进展
- ITheat热点科技|2020 | 坚持创新 舒尔带来MXA710音频解决方案,SSOT
- 空心|招聘丨山西千沐云物联科技有限公司
- LeoGo科技|科沃斯除菌地宝N8和米家扫拖机器人横评——两款解放双手的精品
- 小绿叶子科技|半年跌1000元,适合捡漏,iPhoneSE2扛不住了
- 电科技|“吃鸡”手游老是瞄不准?不妨选这款游戏外设配件
- 科技日日说|realme真我X7全方位评测:不一样的颜值,不一样的体验!,原创
- 硅谷聊科技|就不愿再用华为、小米了?,答案确认了!为啥很多人用了iPhone后