softmax函数,对数似然代价函数及求导反向传播
1. softmax函数定义
softmax函数为神经网络定义了一种新的输出层:它把每个神经元的输入占当前层所有神经元输入之和的比值,当作该神经元的输出。假设人工神经网络第层的第个节点的带权输入为
在该层应用softmax函数作为激活函数,则第个节点的激活值就为
一般来说,我们只在神经网络最后一层应用softmax函数,并把该层叫做softmax层。可以看到,softmax层的所有输出均为正数,且总和为1,因而可以被看作是一个概率分布。因为softmax层的输出是每个神经元的输入占当前层所有神经元输入之和的比值,所以某个神经元的输出值越大,则该神经元对应的类别是真实类别的可能性更高。我们可以选取输出值最大的神经元对应的类别,作为我们的预测结果!
softmax层的形象表示如下图:
PyTorch实现softmax的代码示例如下:
1 2 3 4 5 | import torch import torch.nn.functional as F data = torch.FloatTensor([[ 3 , 1 , - 3 ], [ 2 , 8 , 1 ]]) out = F.softmax(data, dim = 1 ) # dim=1表示对每一行求softmax print (out) |
结果如下:
1 2 | tensor([[ 8.7888e - 01 , 1.1894e - 01 , 2.1785e - 03 ], [ 2.4704e - 03 , 9.9662e - 01 , 9.0880e - 04 ]]) |
2. 交叉熵损失函数
softmax层和交叉熵损失函数结合起来可解决该层参数学习缓慢的问题。交叉熵损失函数定义为
式中,表示第个神经元的输出值,表示第个神经元对应的真实值,一般取值为0或1。值得注意的是,该损失函数的求和号是对softmax层的所有神经元求和。
3. 求导和反向传播
交叉熵损失函数关于偏置的偏导数
式(*)中除了和之外,其它均为已知,下面将推导这两个偏导数的值
把上面两个偏导值代入式(*)中,可得
同样地,可以推导得到交叉熵损失函数关于权重的偏导数
参考资料
[2]. 详解softmax函数以及相关求导过程
分类:
Deep Learning
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通