博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Softmax分类函数
阅读量:6334 次
发布时间:2019-06-22

本文共 2842 字,大约阅读时间需要 9 分钟。

作者:chen_h

微信号 & QQ:862251340
微信公众号:coderpai
简书地址:


这篇教程是翻译 写的神经网络教程,作者已经授权翻译,这是 。

该教程将介绍如何入门神经网络,一共包含五部分。你可以在以下链接找到完整内容。

softmax分类函数


这部分教程将介绍两部分:

  • softmax函数
  • 交叉熵损失函数

在先前的中,我们已经使用学习了如何使用来实现二分类问题。对于多分类问题,我们可以使用,该方法也被称之为。接下来,我们来解释什么事softmax函数,以及怎么得到它。

我们先导入教程需要使用的软件包。

import numpy as np import matplotlib.pyplot as plt  from matplotlib.colors import colorConverter, ListedColormap from mpl_toolkits.mplot3d import Axes3D  from matplotlib import cm

Softmax函数

在之前的中,我们已经知道了只能被使用在二分类问题中,但是它的多项式回归,即,可以解决多分类问题。假设softmax函数ς的输入数据是C维度的向量z,那么softmax函数的数据也是一个C维度的向量y,里面的值是0到1之间。softmax函数其实就是一个归一化的指数函数,定义如下:

softmax函数

式子中的分母充当了正则项的作用,可以使得

作为神经网络的输出层,softmax函数中的值可以用C个神经元来表示。

对于给定的输入z,我们可以得到每个分类的概率t = c for c = 1 ... C可以表示为:

概率方程

其中,P(t=c|z)表示,在给定输入z时,该输入数据是c分类的概率。

下图展示了在一个二分类(t = 1, t = 2)中,输入向量是z = [z1, z2],那么输出概率P(t=1|z)如下图所示。

# Define the softmax functiondef softmax(z):    return np.exp(z) / np.sum(np.exp(z))
# Plot the softmax output for 2 dimensions for both classes# Plot the output in function of the weights# Define a vector of weights for which we want to plot the ooutputnb_of_zs = 200zs = np.linspace(-10, 10, num=nb_of_zs) # input zs_1, zs_2 = np.meshgrid(zs, zs) # generate gridy = np.zeros((nb_of_zs, nb_of_zs, 2)) # initialize output# Fill the output matrix for each combination of input z'sfor i in range(nb_of_zs):    for j in range(nb_of_zs):        y[i,j,:] = softmax(np.asarray([zs_1[i,j], zs_2[i,j]]))# Plot the cost function surfaces for both classesfig = plt.figure()# Plot the cost function surface for t=1ax = fig.gca(projection='3d')surf = ax.plot_surface(zs_1, zs_2, y[:,:,0], linewidth=0, cmap=cm.coolwarm)ax.view_init(elev=30, azim=70)cbar = fig.colorbar(surf)ax.set_xlabel('$z_1$', fontsize=15)ax.set_ylabel('$z_2$', fontsize=15)ax.set_zlabel('$y_1$', fontsize=15)ax.set_title ('$P(t=1|\mathbf{z})$')cbar.ax.set_ylabel('$P(t=1|\mathbf{z})$', fontsize=15)plt.grid()plt.show()

P(t=1|z)的概率

softmax函数的导数

在神经网络中,使用softmax函数,我们需要知道softmax函数的导数。如果我们定义:

那么可以得到:

因此,softmax函数的输出结果y对于它的输入数据z的导数∂yi/∂zj可以定义为:

导数推导

注意,当i = j时,softmax函数的倒数推导结果和Logistic函数一样。

softmax函数的交叉熵损失函数

在学习softmax函数的损失函数之前,我们先从学习它的最大似然函数开始。给定模型的参数组θ,利用这个参数组,我们可以得到输入样本的正确预测,正如在Logistic损失函数推导中,我们可以仿照写出这个的最大似然估计:

最大似然估计

根据,我们可以将似然函数改写成:P(t,z|θ),根据条件分布,我们最终可以得到如下公式:

条件分布

因为我们不关心z的概率,所以公式又可以改写为:L(θ|t,z)=P(t|z,θ)。而且,P(t|z, θ)可以被写成P(t|z),如果θ会一个定值。因为,每一个ti都是依赖于整个z,而且只有其中一个t将会被激活,所以我们可以得到下式:

概率推导

正如我们在Logistic函数中推导损失函数的导数一样,最大化似然函数就是最小化它的负对数释然函数:

负对数似然函数

其中,ξ表示交叉熵误差函数。在二分类问题中,我们将t2定义为t2=1−t1。同理,在softmax函数中,我们也可以定义为:

交叉熵误差函数

n个样本的批处理中,交叉熵误差函数可以这样计算:

批处理

其中,当且仅当tic1,那么样本i是属于类别cyic是样本i属于类别c的概率。

softmax函数的交叉熵损失函数的推导

损失函数对于zi的导数∂ξ/∂zi求解如下:

求导过程

上式已经求解了当i=ji≠j的两种情况。

最终的结果为∂ξ/∂zi=yi−ti for all i ∈ C,这个求导结果和Logistic函数的交叉熵损失函数求导是一样的,再次证明softmax函数是Logistic函数的一个扩展板。


作者:chen_h

微信号 & QQ:862251340
简书地址:

CoderPai 是一个专注于算法实战的平台,从基础的算法到人工智能算法都有设计。如果你对算法实战感兴趣,请快快关注我们吧。加入AI实战微信群,AI实战QQ群,ACM算法微信群,ACM算法QQ群。长按或者扫描如下二维码,关注 “CoderPai” 微信号(coderpai)

这里写图片描述

这里写图片描述

转载地址:http://trioa.baihongyu.com/

你可能感兴趣的文章
陈松松:视频营销成交率低,这三个因素没到位
查看>>
vmware nat模式原理探究,实现虚拟机跨网段管理
查看>>
JavaSE 学习参考:集合运算
查看>>
【Signals and Systems】 SYLLABUS
查看>>
RH135-2-command-line-interface
查看>>
浅谈OS
查看>>
mac下开启docker API远程调用
查看>>
tar 命令的详解
查看>>
Cisco路由器安全配置
查看>>
第十次作业
查看>>
给定一个字符串s,返回去掉子串"mi"后的字符串。
查看>>
Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
查看>>
Wrod中超链接的一些技巧
查看>>
IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
查看>>
Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
查看>>
ARM汇编指令格式
查看>>
HDU-2044-一只小蜜蜂
查看>>
HDU-1394-Minimum Inversion Number
查看>>
df -h 卡住
查看>>
[转] createObjectURL方法 实现本地图片预览
查看>>