二次代价函数、交叉熵(cross-entropy)、对数似然代价函数(log-likelihood cost)(04-1)
二次代价函数
$C = \frac{1} {2n} \sum_{x_1,...x_n} \|y(x)-a^L(x) \|^2$
其中,C表示代价函数,x表示样本,y表示实际值,a表示输出值,n表示样本的总数;整个的意思就是把n个y-a的平方累加起来,再除以2求一下均值。
为简单起见,先看下 一个样本 的情况,此时二次代价函数为:$C = \frac{(y-a)^2} {2}$
$a=\sigma(z), z=\sum w_j*x_j +b$ ,其中a就代表激活函数的输出值,这个符号$\sigma$代表sigmoid函数将变量映射到0-1的$S$型光滑的曲线,z是上一层神经元信号的总和
假如我们使用梯度下降发(Gradient descent)来调整权值参数的大小,权值w和权值b的梯度推到如下(求导数):
$\frac {\partial C} {\partial w} = (a-y)\sigma' (z)x$ $\frac {\partial C} {\partial b} = (a-y)\sigma' (z)$
其中,z表示神经元的输入,$\sigma$表示激活函数sigmoid。可以看出,w和b的梯度跟激活函数的梯度成正比,激活函数的梯度越大,w和b的大小调整越快,训练收敛的就越快。

假设我们激活函数输出的值目标是收敛到1,A点离目标较远,梯度较大,权值调整比较大。B点为0.98离目标比较近,梯度比较小,权值调整比较小,调整方案合理。
假设我们激活函数输出的值目标是收敛到0,A点离目标较远,梯度较大,权值调整比较大。B点为0.98离目标比较远,梯度比较小,权值调整比较小,调整方案不合理,B点要经过非常长的时间才会收敛到0,而且B点很可能成为不收敛的点。
交叉墒代价函数(cross-entropy)
由于上边的问题,我们换一种思路,我们不改变激活函数,而是改变代价函数,改用交叉墒代价函数:
$C = -\frac{1}{n} \sum_{x_1,,,x_n}, [y\ln a + (1-y) \ln(1-a)]$
其中,C表示代价函数,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。
$a=\sigma(z), z=\sum w_j*x_j +b $ $ \sigma'(z) = \sigma(z)(1-\sigma (x))$ sigmod函数的导数比较好求,这也是为什么大家用sigmoid做激活函数的原因,接下来我们看一下求导的过程

懒得敲了,直接贴个图过来,之后闲了在敲一遍,上边就是求导的推导过程,从最后的式子可以看出:权值w和偏执值b的调整与$\sigma '(z)$无关,另外,梯度公式中的$\sigma (z)-y$表示输出值与实际值放入误差。所以当误差越大时,梯度就越大,参数w和b的调整就越快,训练的速度也就越快。
总结:当输出神经元是线性的,那么二次代价函数就是一种合适的选择。如果输出神经元是S型函数,那么比较适合交叉墒代价函数。
对数似然代价函数(log-likelihood cost)
对数似然函数常用来作为softmax回归的代价函数,如果输出层神经元是sigmoid函数,可以使用交叉墒代价函数。而深度学习中更普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数似然代价函数。
对数似然代价函数与softmax的组合和交叉墒与sigmoid函数的组合非常相似。对数似然代价函数在二分类时可以化简为交叉墒代价函数的形式。
在TensorFlow中用:
tf.nn.sigmoid_cross_entropy_with_logits()来表示跟sigmoid搭配使用的交叉墒。
tf.nn.softmax_cross_entropy_with_logits()来表示跟softmax搭配使用的交叉墒。
二次代价函数、交叉熵(cross-entropy)、对数似然代价函数(log-likelihood cost)(04-1)的更多相关文章
- 最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络
最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写 ...
- 交叉熵cross entropy和相对熵(kl散度)
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...
- 深度学习中交叉熵和KL散度和最大似然估计之间的关系
机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...
- 『TensorFlow』分类问题与两种交叉熵
关于categorical cross entropy 和 binary cross entropy的比较,差异一般体现在不同的分类(二分类.多分类等)任务目标,可以参考文章keras中两种交叉熵损失 ...
- Sklearn中二分类问题的交叉熵计算
二分类问题的交叉熵 在二分类问题中,损失函数(loss function)为交叉熵(cross entropy)损失函数.对于样本点(x,y)来说,y是真实的标签,在二分类问题中,其取值只可能为集 ...
- [ch03-02] 交叉熵损失函数
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 3.2 交叉熵损失函数 交叉熵(Cross Entrop ...
- TF Boys (TensorFlow Boys ) 养成记(五): CIFAR10 Model 和 TensorFlow 的四种交叉熵介绍
有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输 ...
- 【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数
1. 二项分布 二项分布也叫 0-1 分布,如随机变量 x 服从二项分布,关于参数 μ(0≤μ≤1),其值取 1 和取 0 的概率如下: {p(x=1|μ)=μp(x=0|μ)=1−μ 则在 x 上的 ...
- 关于交叉熵(cross entropy),你了解哪些
二分~多分~Softmax~理预 一.简介 在二分类问题中,你可以根据神经网络节点的输出,通过一个激活函数如Sigmoid,将其转换为属于某一类的概率,为了给出具体的分类结果,你可以取0.5作为阈值, ...
随机推荐
- 关于C++指针、引用和const关键字的各种关系
#include <stdio.h> #include<iostream> using namespace std; typedef char *new_type; int m ...
- 负环--spfa
洛谷板子题 负环?是有负权边的环还是一个边权之和为负的环? 还没有准确的定义(那就先忽略吧qwq 判断负环的方法: 暴力枚举/spfa/mellman—ford/奇怪的贪心/超神的搜索 可惜我只会sp ...
- 2016 Google code jam 大赛
二,RoundC import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- document删除元素(节点)
不需要获取父id:document.getElementById("id").parentNode.removeChild(document.getElementById(&quo ...
- Python实现重命名一个文件夹下的图片
在网上查了一下python实现的图片重命名,工作中刚好用一下. # -*- coding:utf8 -*- import os path = '新建文件夹 (2)/' filelist = os.li ...
- Java面向对象编程 -6
数组的基本概念 数组的本质:一组相关变量的集合. 但是需要注意的一点是:在java里面讲数组定义为了引用数据类型,所以数组的使用一定要牵扯到内存分配,那么首先一定要想到使用关键字new来处理 数组的定 ...
- 提高Scrapy爬取效率
1.增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. 2.降低 ...
- Unable to create a debugging engine.
用QT Creator调试的时候报如下错误: Unable to create a debugging engine. QT里面打开Tools -> Options -> Kits 发现D ...
- 区块链学习——HyperLedger-Fabric v1.0 启动过程分析
本章我们从fabric v1.0的e2e_cli示例开始分析整个启动过程以及在过程中的一些配置文件 首先呢,还是确保你的基本环境已经搭建完成,v1.0源码和镜像也都下载完毕 fabric启动过程中的相 ...
- PyQt5窗口关闭问题---关闭主程序的窗口但子窗口仍显示的问题
使用PyQt5做界面开发时,如果做一个较复杂的程序时往往会涉及到在主程序中打开某个菜单弹出子窗口的问题,如果在打开很多子窗口的时候想一键退出关闭主窗口,但其它的子窗口仍然正常显示着,那么如何在代码中进 ...