mse函数(均方误差函数)_二次代价函数有什么用

mse函数(均方误差函数)_二次代价函数有什么用MSE均方误差(L2loss)1.代码展示MAE和MSE图片特性importtensorflowastfimportmatplotlib.pyplotaspltsess=tf.Session()x_val=tf.linspace(-1.,-1.,500)target=tf.constant(0.)#计算L2_lossl2_y_val=tf…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

MSE均方误差(L2 loss)

1.代码展示MAE和MSE图片特性
import tensorflow as tf
import matplotlib.pyplot as plt
sess = tf.Session()
x_val = tf.linspace(-1.,-1.,500)
target = tf.constant(0.)

#计算L2_loss
l2_y_val = tf.square(target - x_val)
l2_y_out = sess.run(l2_y_val)#用这个函数打开计算图

#计算L1_loss
l1_y_val = tf.abs(target - x_val)
l1_y_out = sess.run(l1_y_val)#用这个函数打开计算图

#打开计算图输出x_val,用来画图
#用画图来体现损失函数的特点
x_array = sess.run(x_val)
plt.plot(x_array, l1_y_out, 'b--', lable = 'L1_loss')
plt.plot(x_array, l2_y_out, 'r--', lable = 'L2_loss')

这里写图片描述

2.MSE公式及导数推导

损失函数:

mse函数(均方误差函数)_二次代价函数有什么用

以单个样本举例:
[外链图片转存失败(img-PAQ9mnqd-1562394972088)(http://i.imgur.com/D4n2Dsz.jpg)] ,a=σ(z), where z=wx+b

利用SGD算法优化损失函数,通过梯度下降法改变参数从而最小化损失函数:
对两个参数权重和偏置进行求偏导(这个过程相对较容易):
这里写图片描述

参数更新:
这边就说一种简单的更新策略(随机梯度下降):
[外链图片转存失败(img-pTU7Q58r-1562394972090)(http://image107.360doc.com/DownloadImg/2017/06/1400/101675026_3)]

3.分析L2 Loss的特点

根据上面的损失函数对权重和偏置求导的公式我们发现:

这里写图片描述

其中,z表示神经元的输入,σ表示激活函数。从以上公式可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整得越快,训练收敛得就越快。但是L2 Loss的这个特点存在的缺陷在于,对于我们常用的sigmoid激活函数来说,并不是很符合我们的实际需求。
先介绍下sigmoid激活函数的特性:
sigmoid函数就是损失函数的输入:a=σ(z) 中的σ()的一种。这是一个激活函数,该函数的公式,导数以及导数的分布图如下图所示:
mse函数(均方误差函数)_二次代价函数有什么用
mse函数(均方误差函数)_二次代价函数有什么用
mse函数(均方误差函数)_二次代价函数有什么用
mse函数(均方误差函数)_二次代价函数有什么用

我们可以从sigmoid激活函数的导数特性图中发现,当激活值很大的时候,sigmoid的梯度(就是曲线的斜率)会比较小,权重更新的步幅会比较小,这时候网络正处在误差较大需要快速调整的阶段,而上述特性会导致网络收敛的会比较慢;而当激活值很小的时候,sigmoid的梯度会比较大,权重更新的步幅也会比较大,这时候网络的预测值正好在真实值的边缘,太大的步幅也会导致网络的震荡。这我们的期望不符,即:不能像人一样,错误越大,改正的幅度越大,从而学习得越快。而错误越小,改正的幅度小一点,从而稳定的越快。而交叉熵损失函数正好可以解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187690.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland 激活码2021.5[在线序列号]

    goland 激活码2021.5[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    65
  • java安装以及配置环境变量详细步骤

    java安装以及配置环境变量详细步骤java安装以及配置环境变量详细步骤一、安装JDK(JavaDevelopmentKit开发工具包)下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html选择然后选择然后等待下载安装。下载完成之后开始点击安装(安装的路径尽量不要有中文出现,否则后期可能出现问题)一般安装路径默认就好…

    2022年7月8日
    21
  • 计算机组成原理期末总结「建议收藏」

    文章目录写在前面计算机系统概论知识点习题运算方法和运算器知识点习题写在前面临近期末,总结了下知识点,供个人复习使用,仅供参考(近期不间断更新)。计算机系统概论知识点1.时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。2.主频(时钟频率):每秒钟含有多少个时钟周期(1.2GHz即每秒钟含有1.2×10^9个时钟周期)。3.CPI:一条指令所需要的时钟周期个数。4.MIPS:每秒钟能执行多少个100万条指令。5.MFLOPS:每秒百万次浮点操作次

    2022年4月12日
    48
  • activiti工作流开发_flowable工作流

    activiti工作流开发_flowable工作流深入理解Activiti工作流Activiti作为一个流行的开源工作流引擎,正在不断发展,其6.0版本以API形式提供服务,而之前版本基本都是要求我们的应用以JDK方式与其交互,只能将其携带到我们的应用中,而API方式则可以服务器独立运行方式,能够形成一个专网内工作流引擎资源共享的方式。Activiti执行的BPMN2.0,这个规范中有几个要素见下图:其实最经常使用的是开始结束事件和任务,本文就以…

    2022年10月6日
    0
  • Random的nextInt方法[通俗易懂]

    Random的nextInt方法[通俗易懂]Random类中的nextInt()方法(注:不带参数)会随机产生所有有效的整数,包括正数,负数和零。Random类中的nextInt(intn)方法会产生[0,n)之间的随机int值(包含0,不包含n)两种生成介于[0,100)的随机数的方法:方法一:用Random类中的nextInt()方法packagech06;importjava.util.Random;…

    2022年7月22日
    11
  • STL库简介_库喜龙电话

    STL库简介_库喜龙电话一、前言STL是c++中的一个标准模板库,作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。二、什么是STL”什么是STL?”,假如你对STL还知之甚少,那么我…

    2022年10月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号