无监督学习的方法有哪些

无监督学习,是指从无标签的数据中学习出一些有用的模式。无监督学习算法一般直接从数据中学习,不借助于任务人工给出的标签或者反馈等指导信息。如果监督学习是建立输入-输出之间的映射关系,那么无监督学习就是发现隐藏在数据中的有价值信息,包括有效的特征、类别、结构以及概率分布等

典型的无监督学习问题可以分为以下几类:

  • 无监督特征学习,是指从无标签的训练数据中挖掘出有效的特征或表示。无监督特征学习一般用来进行降维、数据可视化或监督学习前期的数据预处理。常见算法有PCA、稀疏编码、自编码器等;
  • 概率密度估计(简称密度估计),是根据一组训练样本来估计样本空间的概率密度。密度估计可分为参数密度估计和非参数密度估计;非参数密度估计的方法有直方图、核密度估计等;
  • 聚类,是将一组样本根据一定的准则划分到不同的组(也称为簇)。一个比较通用的准则是组内样本的相似性要高于组间样本的相似性。常见的聚类算法包括K-Means算法、谱聚类等。

其它参考补充

回归模型有哪些

  • Linear Regression线性回归:线性回归也被称为最小二乘回归,通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。线性回归通过使用最佳的拟合直线(又被称为回归线),建立因变量(Y)和一个或多个自变量(X)之间的关系。一元线性回归和多元线性回归的区别在于,多元线性回归有大于 1 个自变量,而一元线性回归只有 1 个自变量;
  • Polynomial Regression多项式回归:在分析数据的时候,我们会遇到不同的数据分布情况,当数据点呈现带状分布的时候我们会选择线性回归的方法去拟合,但是如何数据点是一条曲线的时候使用线性回归的方法去拟合效果就不是那么好了,这个时候我们可以使用多项式回归的方法。多项式回归模型就是利用多项式对数据进行拟合得到的回归模型;
  • Stepwise Regression逐步回归:在处理多个自变量时,我们可以使用这种形式的回归。这种建模技术的目的是使用最少的预测变量数来最大化预测能力。逐步回归法选择变量的过程包含两个基本步骤:一是从回归模型中剔出经检验不显著的变量,二是引入新变量到回归模型中,常用的逐步回归方法有向前法和向后法;
  • Ridge Regression岭回归:岭回归是线性回归的重要改进,增加了误差容忍度。如果数据集合矩阵存在多重共线性(数学上称为病态矩阵),那么线性回归对输入变量中的噪声非常的敏感,如果输入变量x有一个微小的变动,其反应在输出结果上也会变得非常大,其解会极为不稳定。为了解决这个问题,就有了优化算法——岭回归。岭回归通过对系数的大小施加惩罚来解决线性回归的一些问题;
  • Lasso Regression套索回归:套索回归与岭回归类似,会对回归系数的绝对值添加一个罚值。此外,它能降低偏差并提高线性回归模型的精度。与岭回归有一点不同,它在惩罚部分使用的是绝对值,而不是平方值。这导致惩罚(即用以约束估计的绝对值之和)值使一些参数估计结果等于零。使用的惩罚值越大,估计值会越趋近于零;
  • RandomForestRegressor随机森林回归:随机森林可以应用在分类和回归问题上。实现这一点,取决于随机森林的每颗cart树是分类树还是回归树。如果是回归树,则cart树是回归树,采用的原则是最小均方差;
  • XGBoost回归:基本所有的机器学习比赛的冠军方案都使用了XGBoost算法;
  • SVR支持向量回归:SVR回归,就是找到一个回归平面,让一个集合的所有数据到该平面的距离最近。 由于数据不可能都在回归平面上,距离之和还是挺大,因此所有数据到回归平面的距离可以给定一个容忍值防止过拟合。该参数是经验参数,需要人工给定;
  • 逻辑回归:广泛用于分类问题;
  • 神经网络:别忘了,神经网络有个通用近似定理,当然可以用来做回归分析。

参考文章:

生成模型和判别模型的区别

生成模型:由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型。P(Y|X)=P(X,Y)/P(X)。典型的生成模型有朴素贝叶斯、隐马尔可夫模型、高斯混合模型等;

判别模型:由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。典型的判别模型包括k近邻、感知机、决策树、LR回归、最大熵模型、支持向量机、提升方法、条件随机场、CNN、LSTM等。

数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。

参考文章

概率和似然的区别

简单来讲,似然与概率分别是针对不同内容的估计和近似。概率(密度)表达给定 θ \theta θ 下样本随机向量 X = x X = x X=x 的可能性,而似然表达了给定样本 X = x X = x X=x 下参数 θ = θ 1 \theta=\theta_1 θ=θ1 (相对于另外的参数取值 θ = θ 2 \theta=\theta_2 θ=θ2 )为真实值的可能性。

换言之,似然函数的形式是 L ( θ ∣ x ) L(\theta|x) L(θx),其中"|“代表的是条件概率或者条件分布,因此似然函数是在"已知"样本随机变量 X = x X=x X=x 的情况下,估计参数空间中的参数 θ \theta θ 的值。因此似然函数是关于参数 θ \theta θ 的函数,即给定样本随机变量 x x x 后,估计能够使 X X X 的取值成为 x x x 的参数 θ \theta θ 的可能性;而概率密度函数的定义形式是 f ( x ∣ θ ) f(x|\theta) f(xθ),即概率密度函数是在"已知” θ \theta θ 的情况下,去估计样本随机变量 x x x 出现的可能性。

参考文章

最大似然估计和后验概率的区别

最大似然估计

最大似然估计(Maximum Likelihood Estimation,MLE)是频率学派常用的估计方法!

核心思想:找到使数据集 X X X 出现可能性最大的值,对参数 θ \theta θ 进行估计,即
θ ^ = a r g m a x θ P ( X ∣ θ ) \hat{\theta}=\underset{\theta}{argmax}P(X|\theta) θ^=θargmaxP(Xθ)

假设数据 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 是i.i.d.的一组抽样, X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn)。其中i.i.d.表示Independent and identical distribution,独立同分布。那么MLE对 θ \theta θ 的估计方法可以如下推导:
θ ^ M L E = a r g m a x P ( X ; θ ) = a r g m a x P ( x 1 ; θ ) P ( x 2 ; θ ) . . . P ( x n ; θ ) = a r g m a x l o g ∏ i = 1 n P ( x i ; θ ) = a r g m a x ∑ i = 1 n l o g P ( x i ; θ ) = a r g m i n − ∑ i = 1 n l o g P ( x i ; θ ) \begin{aligned} \hat{\theta}_{MLE}&=argmaxP(X;\theta) \\ &=argmaxP(x_1;\theta)P(x_2;\theta)...P(x_n;\theta) \\ &=argmaxlog\prod_{i=1}^{n}P(x_i;\theta) \\ &=argmax\sum_{i=1}^{n}logP(x_i;\theta) \\ &=argmin-\sum_{i=1}^{n}logP(x_i;\theta) \end{aligned} θ^MLE=argmaxP(X;θ)=argmaxP(x1;θ)P(x2;θ)...P(xn;θ)=argmaxlogi=1nP(xi;θ)=argmaxi=1nlogP(xi;θ)=argmini=1nlogP(xi;θ)

最后这一行所优化的函数被称为Negative Log Likelihood (NLL),这个概念和上面的推导是非常重要的!

最大后验估计

最大后验估计(Maximum A Posteriori,MAP)是贝叶斯学派常用的估计方法!

原则上,贝叶斯学派对 θ \theta θ 的估计应该就是 θ \theta θ 的后验分布 P ( θ ∣ X ) P(\theta|X) P(θX),但是大多数时候后验分布的计算较为棘手,因此此时出现一种折衷解法:找到使后验概率最大的值,对参数 θ \theta θ 进行估计。

同样的,假设数据 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 是i.i.d.的一组抽样, X = ( x 1 , x 2 , . . . , x n ) X=(x_1,x_2,...,x_n) X=(x1,x2,...,xn)。那么MAP对 θ \theta θ 的估计方法可以如下推导:

即:
θ ^ M A P = a r g m a x θ P ( θ ∣ X ) = a r g m a x θ P ( X ∣ θ ) P ( θ ) P ( X ) ( 贝 叶 斯 公 式 ) = a r g m a x θ P ( X ∣ θ ) P ( θ ) = a r g m a x θ l o g P ( X ∣ θ ) + l o g P ( θ ) ( 取 l o g 不 影 响 最 优 值 ) = a r g m i n θ − l o g P ( X ∣ θ ) − l o g P ( θ ) \begin{aligned} \hat{\theta}_{MAP}&=\underset{\theta}{argmax}P(\theta|X) \\ &=\underset{\theta}{argmax}\frac{P(X|\theta)P(\theta)}{P(X)} (贝叶斯公式) \\ &=\underset{\theta}{argmax}P(X|\theta)P(\theta) \\ &=\underset{\theta}{argmax} logP(X|\theta)+logP(\theta) (取log不影响最优值) \\ &=\underset{\theta}{argmin} -logP(X|\theta)-logP(\theta) \end{aligned} θ^MAP=θargmaxP(θX)=θargmaxP(X)P(Xθ)P(θ)=θargmaxP(Xθ)P(θ)=θargmaxlogP(Xθ)+logP(θ)log=θargminlogP(Xθ)logP(θ)

其中,第二行到第三行使用了贝叶斯定理,第二行到第三行 P ( X ) P(X) P(X) 可以丢掉因为与 θ \theta θ 无关。注意, − l o g P ( θ ) -logP(\theta) logP(θ) 其实就是NLL,所以MLE和MAP在优化时的不同就是在于先验项 − l o g P ( θ ) -logP(\theta) logP(θ)

根据上式可以发现,最大后验估计与最大似然估计优化过程中的差异便是多了一项 l o g P ( θ ) logP(\theta) logP(θ),相当于加了一项与 θ \theta θ 的先验概率 P ( θ ) P(\theta) P(θ) 有关的惩罚项。

现在我们来研究一下这个先验项,假定先验是一个高斯分布,即
P ( θ ) = c o n s t a n t × e − θ 2 2 σ 2 P(\theta)=constant \times e^{-\frac{\theta^2}{2\sigma^2}} P(θ)=constant×e2σ2θ2

那么,
− l o g P ( θ ) = c o n s t a n t + θ 2 2 σ 2 -logP(\theta)=constant+\frac{\theta^2}{2\sigma^2} logP(θ)=constant+2σ2θ2

至此,一件神奇的事情发生了 – 在MAP中使用一个高斯分布的先验等价于在MLE中采用L2的regularizaton!

关于最大似然估计和最大后验估计的应用举例,可参考聊一聊机器学习的MLE和MAP:最大似然估计和最大后验估计这篇文章。

参考文章

L1和L2的特性及原理,分别适用于那些场合

L1和L2的特性或者说作用

  • L1正则化和L2正则化是常用的正则化方法。正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度和性能达到平衡;
  • L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制;
  • L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

L1和L2正则化的原理

模型的学习优化的目标是最小化损失函数,学习的结果是模型参数。在原始目标函数的基础上添加正则化相当于,在参数原始的解空间添加了额外的约束。

L1正则化对解空间添加的约束是: ∑ ∣ ∣ w ∣ ∣ 1 ≤ C \sum{||w||}_1 \le C w1C

L2正则化对解空间添加的约束是: ∑ ∣ ∣ w ∣ ∣ 2 2 ≤ C \sum{||w||}_2^2 \le C w22C

为了形象化的说明以假设有两个空间,以二维参数空间为例,假设有两个参数 w 1 w1 w1 w 2 w2 w2
则L1正则化对解空间的约束为: ∣ w 1 ∣ + ∣ w 2 ∣ ≤ C |w1| + |w2| \le C w1+w2C;L2对解空间的约束为: w 1 2 + w 2 2 ≤ C w1^2 + w2^2 \le C w12+w22C

在二维平面上绘制以上两个式子的图像,可得L1约束的范围是一个顶点在坐标轴上的菱形,L2约束的范围是一个圆形。

上面的图,左面是L2约束下解空间的图像,右面是L1约束下解空间的图像。

图形解释:

  • 蓝色的圆圈表示损失函数的等值线。同一个圆上的损失函数值相等的,圆的半径越大表示损失值越大,由外到内,损失函数值越来越小,中间最小。
  • 如果没有L1和L2正则化约束的话,w1和w2是可以任意取值的,损失函数可以优化到中心的最小值的,此时中心对应的w1和w2的取值就是模型最终求得的参数。
  • 但是填了L1和L2正则化约束就把解空间约束在了黄色的平面内。黄色图像的边缘与损失函数等值线的交点,便是满足约束条件的损失函数最小化的模型的参数的解。 由于L1正则化约束的解空间是一个菱形,所以等值线与菱形端点相交的概率比与线的中间相交的概率要大很多,端点在坐标轴上,一些参数的取值便为0。L2正则化约束的解空间是圆形,所以等值线与圆的任何部分相交的概率都是一样的,所以也就不会产生稀疏的参数。
  • 但是L2为什么倾向于产生分散而小的参数呢?那是因为求解模型的时候要求,在约束条件满足的情况下最小化损失函数时, ∑ ∣ ∣ w ∣ ∣ 2 2 \sum||w||_2^2 w22也应该尽可能的小。
    • 看这样一个例子:设输入向量x=[1,1,1,1],两个权重向量 w 1 w_1 w1=[1,0,0,0], w 2 w_2 w2=[0.25,0.25,0.25,0.25]。那么, w 1 T x = w 2 T x = 1 w_1^Tx=w_2^Tx=1 w1Tx=w2Tx=1,两个权重向量都得到同样的内积,但是 w 1 w_1 w1的L2惩罚是1.0,而 w 2 w_2 w2的L2惩罚是0.25。因此,根据L2惩罚来看, w 2 w_2 w2更好,因为它的正则化损失更小。从直观上来看,这是因为 w 2 w_2 w2的权重值更小且更分散。所以L2正则化倾向于是特征分散,更小

正则化参数λ

我们一般会为正则项参数添加一个超参数λ或者α,用来平衡经验风险和结构风险(正则项表示结构风险)。

以 L2 为例,若 λ 很小,就是说我们考虑经验风险更多一些,对于结构风险没有那么重视,约束条件更为宽松。对应上文中的 C 值就很大。这时候,圆形区域很大,能够让** w 更接近中心最优解的位置**。若 λ 近似为 0,相当于圆形区域覆盖了最优解位置,这时候,正则化失效,容易造成过拟合

相反,若 λ 很大,约束条件更为严格,对应上文中的 C 值就很小。这时候,圆形区域很小w 离中心最优解的位置较远。w 被限制在一个很小的区域内变化,w 普遍较小且接近 0,起到了正则化的效果。但是,λ 过大容易造成欠拟合。欠拟合和过拟合是两种对立的状态。

总结

  • 添加正则化相当于参数的解空间添加了约束,限制了模型的复杂度;
  • L1对应拉普拉斯分布,L2对应高斯分布。理论上讲,参数如果服从高斯分布就用l2,拉普拉斯分布就用l1。
  • L1正则化的形式是添加参数的绝对值之和作为结构风险项,L2正则化的形式添加参数的平方和作为结构风险项;
  • L1正则化鼓励产生稀疏的权重,即使得一部分权重为0,用于特征选择;L2鼓励产生小而分散的权重,鼓励让模型做决策的时候考虑更多的特征,而不是仅仅依赖强依赖某几个特征,可以增强模型的泛化能力,防止过拟合。L1 会产生稀疏的特征,L2 会产生更多地特征但是都会接近于0
  • 正则化参数 λ越大,约束越严格,太大容易产生欠拟合。正则化参数 λ越小,约束宽松,太小起不到约束作用,容易产生过拟合;
  • 如果不是为了进行特征选择,一般使用L2正则化模型效果更好。

思考拓展:为什么L2不适合多峰数据场景,怎么解决

以下解释参考知乎上在GAN或VAE的image2image中,为什么加上L2或L1损失函数,会导致生成的图像模糊?这篇文章的回答

  • 原因是L2 loss会产生更平滑的图像。因为最小化L2 loss相当于最大化一个高斯分布的log likelihood。也就是说,我们假定我们的数据是符合了一个高斯分布的。但是实际中,我们的数据可能是多峰的。比如说对于猫而言,有很多种不同种类长得不一样的猫,每个种类的猫可能都会带来一个对应的峰。当你使用L2 loss时,就会对这很多种猫用一个单峰的高斯去拟合,这就相当于对不同长相的猫做了一个平均,这就会使得产生的图像比较平滑。但L1 loss就会减轻这样的影响。

参考文章

介绍下过拟合和欠拟合以及预防措施

度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(underfitting)。过拟合和欠拟合是用于描述模型在训练过程中的两种状态。一般来说,训练过程会是如下所示的一个曲线图。

训练刚开始的时候,模型还在学习过程中,处于欠拟合区域。随着训练的进行,训练误差和测试误差都下降。在到达一个临界点之后,训练集的误差下降,测试集的误差上升了,这个时候就进入了过拟合区域——由于训练出来的网络过度拟合了训练集,对训练集以外的数据却不work。

欠拟合:欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。
如何解决欠拟合:欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度,在模型中增加特征,或者减少正则化系数,这些都是很好解决欠拟合的方法。

过拟合:过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差。

为什么会出现过拟合现象

  • 训练数据集样本单一,样本不足。如果训练样本只有负样本,然后那生成的模型去预测正样本,这肯定预测不准。所以训练样本要尽可能的全面,覆盖所有的数据类型。
  • 训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。
  • 模型过于复杂。模型太复杂,已经能够“死记硬背”记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素。

如何防止过拟合

要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。我们可以使用正则化(Regularization)方法。那什么是正则化呢?正则化是指修改学习算法,使其降低泛化误差而非训练误差

常用的正则化方法根据具体的使用策略不同可分为:(1)直接提供正则化约束的参数正则化方法,如L1/L2正则化;(2)通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout;(3)不直接提供约束的隐式正则化方法,如数据增强等。

防止过拟合小结

  • 获取和使用更多的数据:如CNN图像领域常采用中的数据增强、GNN生成图像等,更多的数据能让模型学习到更多有效的特征,减少噪声的影响;
  • 降低模型复杂度:适当降低模型复杂度可以避免模型拟合过多的采样噪声。如神经网络中减少网络层数、神经元个数等;决策树模型中降低树的深度、进行剪枝等;
  • 降低特征数量:对于一些特征工程而言,可以降低特征的数量——删除冗余特征,人工选择保留哪些特征。这种方法也可以解决过拟合问题。
  • 正则化:给模型的参数添加一定的正则约束,比如讲权值的大小加入损失函数中,避免权值过大带来的过拟合风险,如L1正则、L2正则等;
  • Dropout:指在深度网络训练中,以一定的概率随机的“临时丢弃”一部分神经元节点。具体来讲,Dropout作用于每份小批量训练数据,由于随机丢弃部分神经元的机制,相当于每次迭代都在训练不同结构的神经网络。类比于Bagging方法,Dropout可被人为是一种实用大规模深度神经网络的模型集成方法。举例,对于包含N个神经元节点的神经网络,在Dropout的作用下可看作为 2 N 2^N 2N个模型的集成;
  • Early stopping(早停):早停是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
  • 集成学习:将多个模型集成在一起,降低单一模型的过拟合风险,如Bagging方法。

参考文章

推导softmax做激活函数求导

softmax函数

softmax常用在神经网络中作为分类任务的输出层。给定一个n维向量,softmax函数将其映射为一个概率分布。

softmax函数数学公式:
S i = e z i ∑ k e z k S_i=\frac{e^{z_i}}{\sum_k{e^{z_k}}} Si=kezkezi

其中, S i S_i Si代表的是第 i i i个神经元的输出。

在推导之前,我们统一一下网络中的各个表示符号。
首先是神经元的输出,一个神经元如下图:

神经元的输出设为:
z i = ∑ j w i j x i j + b z_i=\underset{j}{\sum}{w_{ij}x_{ij}+b} zi=jwijxij+b

其中, w i j w_{ij} wij是第 i i i个神经元的第 j j j个权重, b b b是偏移值。 z i z_i zi表示该网络的第 i i i个输出。
给这个输出加上一个softmax函数,那就变成了这样:
a i = e z i ∑ k e z k a_i=\frac{e^{z_i}}{\sum_{k}{e^{z_k}}} ai=kezkezi

其中, a i a_i ai代表softmax的第i个输出值,右侧就是套用了softmax函数。

损失函数 loss function

在神经网络反向传播中,要求一个损失函数,这个损失函数其实表示的是真实值与网络的估计值的误差,知道误差了,才能知道怎样去修改网络中的权重。

损失函数可以有很多形式,这里用的是交叉熵函数,主要是由于这个求导结果比较简单,易于计算,并且交叉熵解决某些损失函数学习缓慢的问题。交叉熵的函数是这样的:
C = − ∑ i y i l n a i C=-\underset{i}{\sum}{y_i}ln{a_i} C=iyilnai

其中 y i y_i yi 表示真实的分类结果。

推导过程

首先,我们要明确一下我们要求什么,我们要求的是我们的loss对于神经元输出( z i z_i zi)的梯度,即:
∂ C ∂ z i \frac{\partial{C}}{\partial{z_i}} ziC

根据复合函数求导法则:
∂ C ∂ z i = ∑ j ( ∂ C j ∂ a j ∂ a j ∂ z i ) \frac{\partial{C}}{\partial{z_i}}=\underset{j}{\sum}(\frac{\partial{C_j}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{z_i}}) ziC=j(ajCjziaj)

注意:这里为什么是 a j a_j aj而不是 a i a_i ai,因为softmax公式的特性,它的分母包含了所有神经元的输出,所以,对于不等于 i i i 的其他输出里面,也包含着 z i z_i zi,所有的 a a a 都要纳入到计算范围中,并且后面的计算可以看到需要分为 i = j i = j i=j i ≠ j i \neq j i=j 两种情况求导。

下面我们一个一个推:
∂ C j ∂ a j = ∂ ( − y j l n a j ) ∂ a j = − y j 1 a j \frac{\partial{C_j}}{\partial{a_j}}=\frac{\partial({-y_{j}ln{a_j}})}{\partial{a_j}}=-y_j\frac{1}{a_j} ajCj=aj(yjlnaj)=yjaj1

第二个稍微复杂一点,我们先把它分为两种情况:
①如果 i = j i = j i=j
∂ a i ∂ z i = ∂ ( e z i ∑ k e z k ) ∂ z i = ∑ k e z k e z i − ( e z i ) 2 ( ∑ k e z k ) 2 = ( e z i ∑ k e z k ) ( 1 − e z i ∑ k e z k ) = a i ( 1 − a i ) \begin{aligned} \frac{\partial{a_i}}{\partial{z_i}}&=\frac{\partial{(\frac{e^{z_i}}{\sum_k{e^{z_k}}})}}{\partial{z_i}}=\frac{\sum_k{e^{z_k}e^{z_i}}-(e^{z_i})^2}{(\sum_k{e^{z_k}})^2} \\ &=(\frac{e^{z_i}}{\sum_k{e^{z_k}}})(1-\frac{e^{z_i}}{\sum_k{e^{z_k}}}) \\ &=a_i(1-a_i) \end{aligned} ziai=zi(kezkezi)=(kezk)2kezkezi(ezi)2=(kezkezi)(1kezkezi)=ai(1ai)

②如果 i ≠ j i \neq j i=j
∂ a j ∂ z i = ∂ e z j ∑ k e z k ∂ z i = − e z j ( 1 ∑ k e z k ) 2 e z i = − a i a j \frac{\partial{a_j}}{\partial{z_i}}=\frac{\partial{\frac{e^{z_j}}{\sum_k{e^{z_k}}}}}{\partial{z_i}}=-e^{z_j}(\frac{1}{\sum_k{e^{z_k}}})^2e^{z_i}=-a_ia_j ziaj=zikezkezj=ezj(kezk1)2ezi=aiaj

接下来,我们只需要把上面的组合起来:

∂ C ∂ z i = ∑ j ( ∂ C j ∂ a j ∂ a j ∂ z i ) = ∑ j ≠ i ( ∂ C j ∂ a j ∂ a j ∂ z i ) + ∑ j = i ( ∂ C j ∂ a j ∂ a j ∂ z i ) = ∑ j ≠ i − y j 1 a j ( − a i a j ) + ( − y i 1 a i ) ( a i ( 1 − a i ) ) = ∑ j ≠ i a i y j + ( − y i ( 1 − a i ) ) = ∑ j ≠ i a i y j + a i y i − y i = a i ∑ j y j − y i \begin{aligned} \frac{\partial{C}}{\partial{z_i}}&=\underset{j}{\sum}(\frac{\partial{C_j}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{z_i}})=\underset{j \neq i}{\sum}(\frac{\partial{C_j}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{z_i}})+\underset{j = i}{\sum}(\frac{\partial{C_j}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{z_i}}) \\ &=\underset{j \neq i}{\sum}-y_j\frac{1}{a_j}(-a_ia_j)+(-y_i\frac{1}{a_i})(a_i(1-a_i)) \\ &=\underset{j \neq i}{\sum}a_iy_j+(-y_i(1-a_i)) \\ &=\underset{j \neq i}{\sum}a_iy_j+a_iy_i-y_i \\ &=a_i\underset{j}{\sum}y_j-y_i \end{aligned} ziC=j(ajCjziaj)=j=i(ajCjziaj)+j=i(ajCjziaj)=j=iyjaj1(aiaj)+(yiai1)(ai(1ai))=j=iaiyj+(yi(1ai))=j=iaiyj+aiyiyi=aijyjyi

最后的结果看起来简单了很多,最后,针对分类问题,我们给定的结果 y i y_i yi 最终只会有一个类别是1,其他类别都是0,因此,对于分类问题,这个梯度等于:
∂ C ∂ z i = a i − y i \frac{\partial{C}}{\partial{z_i}}=a_i-y_i ziC=aiyi

参考文章

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐