softmax与交叉墒层的实现原理以及梯度计算
softmax,看名字就知道,就是如果判断输入属于某个类的概率大于属于其它类的概率,那么这个类对应的值就逼近于1,其它类的值就逼近于0,该算法的主要应用就是多分类,而且是互斥的,即只能属于其中一个类,和sigmoid类的激活函数不同的是,一般的激活函数只能分两类,所以可以理解成softmax是sigmoid类的激活函数的扩展。它的算法如下:
它的图形化原理如下:
也就是把所有的值用e的指数函数表示出来,求和后算每个值占的比率,保证总和为1,一般就可以认为softmax得出的就是概率.
抽象层面的原理如下所示:
在网络层面,它可以表示为:
c语言实现:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <stdint.h>void softmax(const float *input, const uint32_t dim_vec, float *output)
{float sum = 0.0f; for(int i = 0; i < dim_vec; i++){ output[i] = expf(input[i]);sum = sum + output[i];} for(int i = 0; i < dim_vec; i++){ output[i] = output[i] / sum;}
}int main(void)
{float input[10] = {1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1};float output[10]={0};softmax(input, 10, output);int i;for(i = 0; i < 10; i ++){printf("%f ", output[i]);}printf("\n");return 0;
}
编译:
gcc softmax.c -lm -o softmax
测试:
可以看到,最后输出的概率和值是成正相关的。
expf是libm.a中提供的库函数,实现的是指数函数,在musl libc中的实现如下:
图形化表示:
在实际的网络中,softmax通常和交叉熵误差(cross entropy error)联合在一起用,作为网络的最后一层,这一层没有训练参数,如下图所示.
变量之间的关系如下:
以上图为例,展开后:
进一步化简得:
由于是onehot标签,每组只有一个1,所以
所以:
所以:
过程虽然复杂,但是根据求导的链式法则,经过层层计算后,得到了非常具有美感的结果,实际上,这样漂亮的结果并非偶然,而是为了得到这样的结果,故意实际了交叉墒误差函数,神经网络中的误差函数很多都是人为设计的。
二维空间和三维空间中的交叉熵函数图示表达:
参考:
结束!
softmax与交叉墒层的实现原理以及梯度计算相关推荐
- matlab求梯度的原理,matlab 梯度计算原理
转自 http://blog.csdn.net/xiaojidan2011/article/details/7658366 [plain] view plain copy clc; x=[8, 9, ...
- 人脸识别-Loss-2010:Softmax Loss(Softmax激活函数 + “交叉熵损失函数”)【样本3真实标签为c_5,则样本3的损失:loss_3=-log(\hat{y}_5^3)】
一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等. 全连接层:等号左边部分就是全连接层做的事, W W W 是全连接层的参数,我们也称为权值, X X X 是全连接层的输 ...
- pytoch人工神经网络基础:最简单的分类(softmax回归+交叉熵分类)
softmax回归分类原理 对于回归问题,可以用模型预测值与真实值比较,用均方误差这样的损失函数表示误差,迭代使误差最小训练模型. 那么分类问题是否可以用线性回归模型预测呢.最简单的方法就是用soft ...
- 度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
概述 首先,我们把loss归为两类:一类是本篇讲述的基于softmax的,一类是基于pair对的(如对比损失.三元损失等). 基于pair对的,参考我的另一篇博客: https://blog.csdn ...
- 【机器学习基础】Softmax与交叉熵的数学意义(信息论与概率论视角)
经过我长时间的观察,发现很多人对人工智能/机器学习的理解只停留在"这是个经典/最新棒槌,我拿这个棒槌敲钉子贼6--"这个level.当然,如果真的敲得很6,那也是一个很厉害的大佬了 ...
- 神经网络适用于分类问题的最后一层-Softmax和交叉熵损失介绍及梯度推导
前言 传统机器学习中两大经典任务就是回归与分类.分类在深度学习中也很常见,令我印象最深的是图像分类.当然,在NLP中,分类也无处不在.从RNN与其变体,到Transformer.Bert等预训练模型, ...
- 神经网络学习中的SoftMax与交叉熵
简 介: 对于在深度学习中的两个常见的函数SoftMax,交叉熵进行的探讨.在利用paddle平台中的反向求微分进行验证的过程中,发现结果 与数学定义有差别.具体原因还需要之后进行查找. 关键词: 交 ...
- 机器学习 Softmax classifier (无隐含层)
程序实现 Softmax classifer, 没有隐含层, f=wx+b y=efi∑jefj %% Softmax classifierfunction Out=Softmax_Classifie ...
- DL之DNN:利用numpy自定义三层结构+softmax函数建立3层完整神经网络全部代码实现(探究BP神经网络的底层思想)
DL之DNN:利用numpy自定义三层结构+softmax函数建立3层完整神经网络全部代码实现(探究BP神经网络的底层思想) 目录 输出结果 代码实现 输出结果 代码实现 #DL之NN:利用numpy ...
最新文章
- 网上几种常见校验码图片分析
- 前置机上如何地址转换_canvas原生层级较高,遮盖自定义tabbar,转换为图片解决...
- 查看python安装路径-Mac查看Python安装路径和版本
- ( function(){…} )()和( function (){…} () )是两种立即执行函数
- [渝粤教育] 广东-国家-开放大学 21秋期末考试建筑设备10327k1
- 浅析C语言中assert的用法(转)
- 阿里云视频点播解决方案使用教程
- .net core2 单元测试
- c语言 结构体 选择题,C语言结构体共用体选择题(新).doc
- RS信号制java程序,java – 如何部署一个JAX-RS应用程序?
- atitit.激活一个窗口总结 swing java .net php
- css grid 自动高度_前端面试题:关于CSS布局
- 标准模板库(STL)之 queue 列传
- python所有软件-太牛逼!一款软件几乎可以操作所有的数据库!
- Mock Server基本使用方法
- riot修改服务器,riot改地区教程
- 计算机组成与原理第三章答,计算机组成与原理第三章答案.doc
- iis下屏蔽php notice,apache、iis规则屏蔽拦截蜘蛛抓取
- java 四舍六入五成双_EXCEL实现四舍六入五成双修约规则的方法
- Java:外包Java项目有什么好处?
热门文章
- C 三个学生四门成绩,求成绩总和与平均值
- ShopWind 开源电商系统 V3.4.3 发布,uni-app 商城案例,PC+APP+H5 + 小程序
- MiniJavaVM——一个Java虚拟机的设计和实现
- coffeeScript demo
- 【效能工具】记录常用效能工具
- LoadRunner 12.02 进行录制脚本时提示无Internet访问
- 033 Rust死灵书之重构Vec
- 新松机器人袁_山东新松工业软件研究院创新发展战略务虚会“实力”召开!
- 中国无管道通风柜市场趋势报告、技术动态创新及市场预测
- luoguP4098「HEOI2013」ALO