【机器学习】 - 激活函数与交叉熵Sigmoid, Softmax, binary_crossentropy, categorican_crossentropy区别
Content:
- 为什么需要激活函数;
- 一个神经元在做什么;
- 激活函数
- Sigmoid
- Softmax
4. 交叉熵损失函数
- Binary cross-entropy
- Categorican cross-entropy
为什么需要激活函数:
Ans: 为了引入非线性变换。
如下图所示的红线和蓝线,在这个二维空间中,我们不能用一条线完整的将这两个区域分割开。但如果我们将这个二维空间扭曲变换,那么在高维空间中,就可以用一条线完整的分割出红色和蓝色区域。(这也就是打破线性变换的局限性,通过非线性变换在高维空间解决分类问题,也是神经网络要做的事情)
Fig 1. A neural network can distort the input space to make the classes of data (blue and red regions) linearly separable [1].
Fig.2. The hidden layer learns a representation so that the data is linearly separable [1]
一个基本的神经元在做什么:
y:神经元的输出;
W*x: 就像我之前说的,神经网络目的就是将低维空间映射到高维空间从而实现线性可分。所以这一项的目的就是空间变换(实现升维或者降维, 空间的放大或者缩小, 旋转)的目的;
b: bias, 实现空间平移的目的;
a: 空间的弯曲;
基本神经元各个部分的解释
激活函数:
sigmoid, softmax主要用于神经网络输出层的输出。
总结:激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
1. Sigmoid
Sigmoid 将一个实数映射到 (0,1)
的区间,可以用来做二分类。Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好。Sigmoid不适合用在神经网络的中间层,因为对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况(在 sigmoid 接近饱和区时,变换太缓慢,导数趋于 0,这种情况会造成信息丢失),从而无法完成深层网络的训练。所以Sigmoid主要用于对神经网络输出层的激活。
2. Softmax
可以看作是Sigmoid的一般情况,用于多分类问题。
Softmax函数将K维的实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于 (0,1)
之间。常用于多分类问题。
交叉熵损失函数:
交叉熵可在神经网络(机器学习)中作为损失函数。 如下公式所示:y表示真实标记的分布,a则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量y与a的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
- Binary Cross Entropy
常用于二分类问题,当然也可以用于多分类问题,通常需要在网络的最后一层添加sigmoid进行配合使用,其期望输出值(target)需要进行one hot编码,另外BCELoss还可以用于多分类问题Multi-label classification.
定义:
For brevity, let x = output, z = target. The binary cross entropy loss is
loss(x, z) = - sum_i (x[i] * log(z[i]) + (1 - x[i]) * log(1 - z[i]))
对应的代码为:
def binary_crossentropy(t,o):return -(t*tf.log(o+eps) + (1.0-t)*tf.log(1.0-o+eps))
2. Categorical cross-entropy
p are the predictions, t are the targets, i denotes the data point and j denotes the class.
适用于多分类问题,并使用softmax作为输出层的激活函数的情况。
This is the loss function of choice for multi-class classification problems and softmax output units. For hard targets, i.e., targets that assign all of the probability to a single class per data point, providing a vector of int for the targets is usually slightly more efficient than providing a matrix with a single 1.0 per row.
References:
[1] Neural Networks, Manifolds, and Topology
链接:https://www.zhihu.com/question/36307214/answer/364963552
贴几个不错的链接:
用sigmoid作为激活函数,为什么往往损失函数选用binary_crossentropy 而不用mse
各大损失函数的定义:MSE,MAE,MAPE,hinge,squad_hinge,binary_crossentropy等
【机器学习】 - 关于合适用均方误差(MSE)何时用交叉熵(cross-entropy)
https://www.cnblogs.com/lijie-blog/p/10166002.html
sigmoid和softmax是神经网络输出层使用的激活函数,分别用于两类判别和多类判别。
binary cross-entropy和categorical cross-entropy是相对应的损失函数。
对应的激活函数和损失函数相匹配,可以使得error propagation的时候,每个输出神经元的“误差”(损失函数对输入的导数)恰等于其输出与ground truth之差。
(详见Pattern Recognition and Machine Learning一书5.3章)
链接:https://www.zhihu.com/question/36307214/answer/66899792
【机器学习】 - 激活函数与交叉熵Sigmoid, Softmax, binary_crossentropy, categorican_crossentropy区别相关推荐
- 【机器学习】 二次损失函数的不足及交叉熵损失softmax详解
二次代价函数的不足: 以sigmoid激活函数为例,由于初始化是随机的,假设目标值为0,第一次随机初始化使得输入为0.82,那么还可以,多次迭代之后可以收敛到0.09,但如果第一次随机初始化到0.98 ...
- 机器学习中的各种损失函数(Hinge loss,交叉熵,softmax)
机器学习中的各种损失函数 SVM multiclass loss(Hinge loss) 这是一个合页函数,也叫Hinge function,loss 函数反映的是我们对于当前分类结果的不满意程度.在 ...
- (Tensorflow之四)激活函数、交叉熵及优化器
一.激活函数 激活函数的主要作用是提供网络的非线性建模能力.如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的.因此也可以认为,只有加入了激活函 ...
- 熵,交叉熵与softmax
经常说交叉熵+softmax(或者交叉熵损失函数),应该是对多分类下,softmax作为最后一层输出,交叉熵再判断这softmax的概率和真实值之间的差异(感觉不对,应该是用softmax的公式去求交 ...
- 一文了解机器学习中的交叉熵
https://www.toutiao.com/a6654435108105224712/ 2019-02-05 16:46:49 熵 在介绍交叉熵之前首先介绍熵(entropy)的概念.熵是信息论中 ...
- 交叉熵 和 softmax 公式及 python 实现
交叉熵损失函数:实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近. Python 实现: def cross_entropy(a, y):return np.sum ...
- 关于交叉熵(Cross Entropy)与Softmax
目录 写在前面 KL散度 交叉熵 Softmax 交叉熵与Softmax的关系 交叉熵损失 Softmax的求导 堆叠+向量化 其他关于Softmax函数的问题 赠品 写在前面 Softmax.交叉熵 ...
- 神经网络学习中的SoftMax与交叉熵
简 介: 对于在深度学习中的两个常见的函数SoftMax,交叉熵进行的探讨.在利用paddle平台中的反向求微分进行验证的过程中,发现结果 与数学定义有差别.具体原因还需要之后进行查找. 关键词: 交 ...
- Keras【Deep Learning With Python】逻辑回归·softmax多分类与交叉熵
文章目录 1 逻辑回归 1.2 Sigmod函数 1.2 逻辑回归损失函数 2 交叉熵 3 softmax分类 1 逻辑回归 回答0或1 1.2 Sigmod函数 0.9是好人 0.1是坏人 二分类 ...
最新文章
- 企业级监控软件Zabbix搭建部署之使用mutt+msmtp配置Zabbix邮件报警
- 用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目
- 如何在UIAlertView中显示进度条
- C代码开发遇到的问题 变量初始化和结构体指针移动
- python3多进程写时拷贝_Python实现多进程的详解(附示例)
- 洛谷P7515:矩阵游戏(差分约束)
- 点击回车事件(登录)
- html5中的行高元素,详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理
- 午睡还要被骂?新东方旗下公司被曝禁止午休引热议 CEO回应...
- android申请多个运行时权限,Android 6.0(API 23) 运行时权限(二)之权限申请
- 电脑磁盘空间不足怎么办_Mac磁盘总是提示空间不足?学会这几招,瞬间腾出几个G...
- 洛谷 1429 平面最近点对(加强版) 快排 非点分治或kdtree
- 软考程序员-C专题(2)
- 基于三菱PLC的全自动洗衣机控制系统设计
- python有趣小程序代码-一个可以套路别人的python小程序实例代码
- word2019标题序号显示为黑色小方块-解决办法
- 同质化游戏做出不同点在于背景音乐
- 触摸操作(单手旋转双手缩放)
- 学习视频、高清影视下载
- ExcelVba_调用jQuery计算Md5和CRC32
热门文章
- jQuery图表插件 JS Charts
- 【IE大叔的嘴歪眼斜】之—— 由hasLayout引发的临床CSS Bug表
- linux 视频学习
- DipperRiver.Net通信协议设计
- A. Arithmetic Array Codeforces Round #726 (Div. 2)
- linux系统时间函数,Linux时间时区详解与常用时间函数
- Linux I2C核心、总线与设备驱动(二)
- python程序怎么修改_python文件如何修改
- angular4输入有效性_Angular 2 用户输入
- 【转】c#数字图像处理(一)Bitmap类、 Bitmapdata类和 Graphics类