有任何的书写错误、排版错误、概念错误等,希望大家包含指正。
由于字数限制,分成两篇博客。
【机器学习】线性分类【上】广义线性模型
【机器学习】线性分类【下】经典线性分类算法
下面将简单介绍几个经典的线性分类模型,包括感知机、线性判别分析、逻辑回归(及softmax)、高斯判别分析和朴素贝叶斯分类器。
规定符号。
数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\} D={(x1,y1),(x2,y2),…,(xn,yn)},向量 x i ∈ R p x_i\in\mathbb{R}^p xi∈Rp 为样本, y i ∈ R y_i\in \mathbb R yi∈R 为标签, i = 1 , 2 , … , n i=1,2,\dots,n i=1,2,…,n; W ∈ R p W\in \mathbb R^p W∈Rp 为模型参数(权重)。
记
X = ( x 1 x 2 … x n ) T = ( x 1 T x 2 T ⋮ x n T ) = ( x 11 x 12 … x 1 p x 21 x 22 … x 2 p ⋮ ⋮ ⋮ x n 1 x n 2 … x n p ) n × p Y = ( y 1 y 2 … y n ) n × 1 T W = ( w 1 w 2 … w p ) p × 1 T X= \left( \begin{matrix} x_1 & x_2 & \dots & x_n \end{matrix} \right)^T =\left( \begin{matrix} x_1^T \\ x_2^T \\ \vdots \\ x_n^T \end{matrix} \right) =\left( \begin{matrix} x_{11} & x_{12} & \dots & x_{1p} \\ x_{21} & x_{22} & \dots & x_{2p} \\ \vdots & \vdots & & \vdots \\ x_{n1} & x_{n2} & \dots & x_{np} \\ \end{matrix} \right)_{n\times p} \\ \\ Y=\left( \begin{matrix} y_1 & y_2 & \dots & y_n \end{matrix} \right)^T_{n\times 1} \\\\ W=\left( \begin{matrix} w_1 & w_2 & \dots & w_p \end{matrix} \right)^T_{p\times 1} X=(x1x2…xn)T=⎝⎜⎜⎜⎛x1Tx2T⋮xnT⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛x11x21⋮xn1x12x22⋮xn2………x1px2p⋮xnp⎠⎟⎟⎟⎞n×pY=(y1y2…yn)n×1TW=(w1w2…wp)p×1T
本来是这篇文章应该是在探讨线性分类的相关知识,但是还是忍不住地补充了许多其他类似的知识。即使如此,在讨论广义线性回归时,我们也会不自觉地将回归应用于分类,这主要是因为分类问题更加直观,便于理解。当然,这与“线性回归”和“线性分类”本身就不分家脱不了干系。
人们根据输入输出变量的不同类型,对预测任务给予不同的名称:输入变量与输出变量均为连续变量的预测问题称为回归问题;输出变量为有限个离散变量的预测问题称为分类问题。
现在的机器学习或者深度学习在处理分类问题上,都倾向于先将数据连续化,再将数据离散化,从而实现分类的效果;其中的数据连续化处理就可以认为是线性回归,因此现在的分类问题已经离不开回归了。提几个简单的模型,聚类算法是一种分类算法,它的输入样本的特征完全可以是连续的,而且我们更希望特征是连续的,方便对特征进行度量,这种算法属于直接使用现有的连续数据,所以无需将数据连续化;又比如 softmax 就是用于将离散的独热编码(one-hot)转换成连续的概率表示的一种方法。
显然,线性回归和线性分类在具体的算法实现上已经没有很明显的界限了,但是它们追求的目标是明显不同的,也就是像定义所说,一个得到连续结果,一个得到离散结果。
这里我讨论了一下回归与分类,是希望大家对后面出现的一些名词不要过度纠结,比如逻辑回归居然是用于分类的等等。与其纠结算法是回归还是分类,不如花时间熟悉具体的算法。
感知机(Perceptron)(感知机线性分析,PLA)是机器学习中最简单的一个分类模型,也是神经网络的基础。
如果样本是线性可分的,那么可以采用朴素感知机算法确定最佳分类超平面保证样本同类同侧异类异侧。模型的预测函数为
f ( x ) = s i g n ( W T x ) f(x)={\rm sign}(W^Tx) f(x)=sign(WTx)
其中,函数 s i g n ( ⋅ ) = { 1 ⋅ ≥ 0 − 1 ⋅ < 0 \rm sign(·)=\left\{\begin{matrix} 1& ·\ge 0 \\ -1& ·\lt 0 \end{matrix}\right. sign(⋅)={1−1⋅≥0⋅<0 。如果 W T x ≥ 0 W^Tx\ge 0 WTx≥0 则样本 x x x 被分为正样本(标签为 1 1 1),否则分为负样本(标签为 − 1 -1 −1)。训练朴素感知机模型的目标是找到一个法向量为 W W W 超平面的超平面将两类样本完全分开。模型采用错误驱动的思想进行训练,将损失函数定义为被错误分类的样本个数
L ( W ) = ∑ i = 1 n 1 { y i W T x i < 0 } L(W)=\sum_{i=1}^n 1\{y_iW^Tx_i<0\} L(W)=i=1∑n1{yiWTxi<0}
当样本为正样本时,即 y i = 1 y_i=1 yi=1 时,对应的正确预测为 W T x i ≥ 0 W^Tx_i\ge0 WTxi≥0;当样本为负样本时,即 y i = − 1 y_i=-1 yi=−1 时,对应的正确预测为 W T x i < 0 W^Tx_i\lt0 WTxi<0 。综合表示为当分类正确时 y i W T x i ≥ 0 y_iW^Tx_i\ge0 yiWTxi≥0,因此 y i W T x i < 0 y_iW^Tx_i\lt0 yiWTxi<0 对应分类错误。
我们知道函数 1 { ⋅ } 1\{·\} 1{⋅} 是不可导的,损失函数无法采用梯度下降等方式进行迭代更新。我们对损失函数进行等价变形
L ( W ) = ∑ ( x i , y i ) ∈ M − y i W T x i (8) L(W)=\sum_{(x_i,y_i)\in M} -y_iW^Tx_i \tag{8} L(W)=(xi,yi)∈M∑−yiWTxi(8)
其中, M M M 为被错误分类的样本及其对应标签的集合。式 ( 8 ) (8) (8) 的想法是, y i W T x i < 0 y_iW^Tx_i<0 yiWTxi<0 的样本为错误分类样本,我们保证全部错误样本的 y i W T x i y_iW^Tx_i yiWTxi 尽可能大,也就保证了错误样本尽可能少;又因为我们一般希望极小化损失函数,所以添加负号。对于式 ( 8 ) (8) (8) 我们可以采用 SGD 算法更新模型参数,对式 ( 8 ) (8) (8) 计算偏导得
∇ W L = − y i x i (9) \nabla_W L = -y_ix_i\tag{9} ∇WL=−yixi(9)
参数更新
W t + 1 = W t + y i x i (10) W^{t+1}=W^{t}+y_ix_i\tag{10} Wt+1=Wt+yixi(10)
朴素感知机算法完整流程描述为,随机初始化 W 0 W^{0} W0,只要找到一个错误分类的样本就可以根据式 ( 9 ) (9) (9) 计算对应的梯度值并根据式 ( 10 ) (10) (10) 更新参数 W W W,不断迭代直至全部样本分类正确。
朴素感知机算法中,在判断迭代是否结束时需要遍历全部样本进行判断,但是其实只要遇到一个分类错误的样本就可以说明算法还需要继续迭代,且此时也找到了一个错误分类的样本可以用于新的迭代中继续更新模型参数。这就是朴素感知机算法相较于下面要讲到的口袋算法更高效的原因。
朴素感知机算法并不是完美的,只有在数据线性可分的前提下才能使用,而这个前提条件往往无法事先知道;另外,即便数据线性可分,由于采用 SGD 算法更新模型参数可能出现越过最值点的情况,出现震荡现象,所以算法的收敛时间无法保证。口袋算法(pocket algorithm)就是用来解决这两个问题的。
针对无法线性分类的问题,口袋算法思想是选择一个错误分类样本最少的超平面。对于每次迭代,如果使用本次迭代得到的 W ^ \hat W W^ 对样本集进行分类的效果比之前迭代得到的最佳 W W W 的分类效果更好,那么就用本次迭代得到的模型参数 W ^ \hat W W^ 作为在完成的迭代中最佳的模型参数,否则不会更新模型参数,如此重复下去直至达到规定迭代次数。其中分类效果好坏的判断依据是错分样本的个数。
口袋算法每次贪心地选择最佳的模型参数,如果新迭代到的模型参数更好就替换,如果不好就不换,不再是一味按照梯度减小的方向进行更新,从而解决了线性不可分的数据集无法采用 SGD 更新模型参数的问题。设置迭代次数保证了算法能够在规定时间结束。我们可以发现,其实口袋算法也可以用于处理线性可分的数据,只需要将算法结束条件修改为全部样本分类正确,就与朴素感知机算法很相似了。
口袋算法完整流程描述为,随机初始化 W 0 W^{0} W0,随机找到一个错分样本根据式 ( 9 ) (9) (9) 计算对应的梯度值并根据式 ( 10 ) (10) (10) 计算用该错分样本更新得到的模型参数,记为 W ^ \hat W W^。遍历全部样本,统计在模型参数为 W ^ \hat W W^ 时错分样本的个数,与已经统计完成的更新前的模型参数 W W W 对应的错分样本个数作比较。如果 W ^ \hat W W^ 更好,则 W ← W ^ W\leftarrow \hat W W←W^ 并保存 W ^ \hat W W^ 对应的错分样本个数;否则模型参数依然为 W W W,不做更新。直至满足结束条件。
与朴素感知机算法流程对比。虽然口袋算法同样采用对某个错分样本进行修正的方式更新参数,但更新不一定发生,只有更新后分类错误的点减少时,才会实际更新;而且终止条件也不必要求是所有样本均分类正确,可以选择设置最大迭代次数。
与朴素感知机算法效率对比。虽然随机找到一个错分样本计算梯度不需要遍历完整个数据集,但是每次迭代都要几乎完整遍历一遍数据集,因为需要统计本次迭代得到的模型参数对应的错分样本个数,因此这显然比朴素感知机算法效率要低。
严格来说,在引入偏置 b b b 的前提下, W W W 对应决策面的法向量, b b b 对应决策面的位置, W W W 和 b b b 共同确定具体的决策面。在二维平面中,决策面为直线,那么 W W W 对应的就是直线的法向量(类似斜率的作用),而 b b b 确定了直线位置(类似截距的作用)。由于我们为了方便表示,忽略了偏置项,所以会显得些许不严谨。
线性判别分析(Linear Discriminant Analysis,LDA)的目标是确定一个超平面,使得高维坐标系中的点投影到该超平面上满足,同类点尽可能近,异类点尽可能远。对比图 2 2 2 的两个投影方向,显然右图更符合 LDA “同类近异类远”的目标。
我个人习惯将“投影方向”认为是“投影面”的法向量。
图 2 选择不同的投影超平面对应的投影效果
同类点近是通过类内方差尽可能小体现,异类点远是通过类均值之差尽可能大体现,根据这两个条件我们将定性问题转化成为定量问题。
投影方向(投影面的法向量方向)为 W W W,不妨假设 ∣ ∣ W ∣ ∣ = 1 ||W||=1 ∣∣W∣∣=1,那么样本投影到投影面为 z i = W T x i z_i=W^Tx_i zi=WTxi,其实即使 ∣ ∣ W ∣ ∣ ≠ 1 ||W||\ne 1 ∣∣W∣∣=1 也可以采用这种方式定义。
以二分类为例,可以计算出第一类 C 1 C_1 C1 的均值和类内方差为
z ˉ 1 = 1 n 1 ∑ x i ∈ C 1 z i = 1 n 1 ∑ x i ∈ C 1 W T x i S 1 = 1 n 1 ∑ x i ∈ C 1 ( z i − z ˉ 1 ) ( z i − z ˉ 1 ) T \bar z_1 = \frac{1}{n_1} \sum_{x_i\in C_1} z_i=\frac{1}{n_1}\sum_{x_i\in C_1}W^Tx_i\\ S_1=\frac{1}{n_1}\sum_{x_i\in C_1}(z_i-\bar z_1)(z_i-\bar z_1)^T zˉ1=n11xi∈C1∑zi=n11xi∈C1∑WTxiS1=n11xi∈C1∑(zi−zˉ1)(zi−zˉ1)T
其中, z ˉ 1 \bar z_1 zˉ1 表示第一类样本投影后的均值, S 1 S_1 S1 表示第一类样本投影后的类内方差, n 1 n_1 n1 表示第一类样本的数量。
类似地,计算出第一类 C 1 C_1 C1 投影后的均值和类内方差为
z ˉ 2 = 1 n 2 ∑ x i ∈ C 2 z i = 1 n 2 ∑ x i ∈ C 2 W T x i S 2 = 1 n 2 ∑ x i ∈ C 2 ( z i − z ˉ 2 ) ( z i − z ˉ 2 ) T \bar z_2 = \frac{1}{n_2} \sum_{x_i\in C_2} z_i=\frac{1}{n_2}\sum_{x_i\in C_2}W^Tx_i\\ S_2=\frac{1}{n_2}\sum_{x_i\in C_2}(z_i-\bar z_2)(z_i-\bar z_2)^T zˉ2=n21xi∈C2∑zi=n21xi∈C2∑WTxiS2=n21xi∈C2∑(zi−zˉ2)(zi−zˉ2)T
类间距离通过 ( z ˉ 1 − z ˉ 2 ) 2 (\bar z_1 - \bar z_2)^2 (zˉ1−zˉ2)2 来度量,类内散度通过 S 1 + S 2 S_1+S_2 S1+S2 来度量,所以可以定义损失函数
J ( W ) = ( z ˉ 1 − z ˉ 2 ) 2 S 1 + S 2 J(W)=\frac{(\bar z_1 - \bar z_2)^2}{S_1+S_2} J(W)=S1+S2(zˉ1−zˉ2)2
对损失函数的分子进行变形
( z ˉ 1 − z ˉ 2 ) 2 = ( 1 n 1 ∑ x i ∈ C 1 W T x i − 1 n 2 ∑ x i ∈ C 2 W T x i ) 2 = ( W T ( 1 n 1 ∑ x i ∈ C 1 T x i − 1 n 2 ∑ x i ∈ C 2 x i ) ) 2 = ( W T ( x ˉ 1 − x ˉ 2 ) ) 2 = W T ( x ˉ 1 − x ˉ 2 ) ( x ˉ 1 − x ˉ 2 ) T W \begin{aligned} (\bar z_1 - \bar z_2)^2 & = \left( \frac{1}{n_1}\sum_{x_i\in C_1} W^Tx_i-\frac{1}{n_2}\sum_{x_i\in C_2} W^Tx_i \right)^2 \\ &= \left(W^T\Big( \frac{1}{n_1}\sum_{x_i\in C_1} Tx_i-\frac{1}{n_2}\sum_{x_i\in C_2} x_i \Big)\right)^2 \\ &= \big(W^T(\bar x_1-\bar x_2)\big)^2 \\ &= W^T(\bar x_1-\bar x_2)(\bar x_1-\bar x_2)^TW \end{aligned} (zˉ1−zˉ2)2=(n11xi∈C1∑WTxi−n21xi∈C2∑WTxi)2=(WT(n11xi∈C1∑Txi−n21xi∈C2∑xi))2=(WT(xˉ1−xˉ2))2=WT(xˉ1−xˉ2)(xˉ1−xˉ2)TW
对分母变形
S 1 + S 2 = 1 n 1 ∑ x i ∈ C 1 ( z i − z ˉ 1 ) ( z i − z ˉ 1 ) T + 1 n 2 ∑ x i ∈ C 2 ( z i − z ˉ 2 ) ( z i − z ˉ 2 ) T = 1 n 1 ∑ x i ∈ C 1 ( W T x i − 1 n 1 ∑ x j ∈ C 1 W T x j ) ( W T x i − 1 n 1 ∑ x j ∈ C 1 W T x j ) T + 1 n 2 ∑ x i ∈ C 2 ( W T x i − 1 n 2 ∑ x j ∈ C 2 W T x j ) ( W T x i − 1 n 2 ∑ x j ∈ C 2 W T x j ) T = W T 1 n 1 ∑ x i ∈ C 1 ( ( x i − x ˉ 1 ) ( x i − x ˉ 1 ) T ) W + W T 1 n 2 ∑ x i ∈ C 2 ( ( x i − x ˉ 2 ) ( x i − x ˉ 2 ) T ) W = W T S a W + W T S b W = W T ( S C 1 + S C 2 ) W \begin{aligned} S_1+S_2 &=\frac{1}{n_1}\sum_{x_i\in C_1}(z_i-\bar z_1)(z_i-\bar z_1)^T + \frac{1}{n_2}\sum_{x_i\in C_2}(z_i-\bar z_2)(z_i-\bar z_2)^T\\ &= \frac{1}{n_1}\sum_{x_i\in C_1}\Big(W^Tx_i-\frac{1}{n_1}\sum_{x_j\in C_1}W^Tx_j\Big)\Big(W^Tx_i-\frac{1}{n_1}\sum_{x_j\in C_1}W^Tx_j\Big)^T + \frac{1}{n_2}\sum_{x_i\in C_2}\Big(W^Tx_i-\frac{1}{n_2}\sum_{x_j\in C_2}W^Tx_j\Big)\Big(W^Tx_i-\frac{1}{n_2}\sum_{x_j\in C_2}W^Tx_j\Big)^T\\ &= W^T\frac{1}{n_1}\sum_{x_i\in C_1}\Big((x_i-\bar x_1)(x_i-\bar x_1)^T\Big)W + W^T\frac{1}{n_2}\sum_{x_i\in C_2}\Big((x_i-\bar x_2)(x_i-\bar x_2)^T\Big)W \\ &= W^TS_{a}W + W^T S_bW \\ &= W^T(S_{C_1}+S_{C_2})W \end{aligned} S1+S2=n11xi∈C1∑(zi−zˉ1)(zi−zˉ1)T+n21xi∈C2∑(zi−zˉ2)(zi−zˉ2)T=n11xi∈C1∑(WTxi−n11xj∈C1∑WTxj)(WTxi−n11xj∈C1∑WTxj)T+n21xi∈C2∑(WTxi−n21xj∈C2∑WTxj)(WTxi−n21xj∈C2∑WTxj)T=WTn11xi∈C1∑((xi−xˉ1)(xi−xˉ1)T)W+WTn21xi∈C2∑((xi−xˉ2)(xi−xˉ2)T)W=WTSaW+WTSbW=WT(SC1+SC2)W
其中, S a S_a Sa 和 S b S_b Sb 分别表示投影前两类样本的方差。因此,损失函数进一步表示为
J ( W ) = W T ( x ˉ 1 − x ˉ 2 ) ( x ˉ 1 − x ˉ 2 ) T W W T ( S a + S b ) W J(W)=\frac{W^T(\bar x_1-\bar x_2)(\bar x_1-\bar x_2)^TW}{W^T(S_a+S_b)W} J(W)=WT(Sa+Sb)WWT(xˉ1−xˉ2)(xˉ1−xˉ2)TW
记投影前的类间方差 S b = ( x ˉ 1 − x ˉ 2 ) ( x ˉ 1 − x ˉ 2 ) T S_b=(\bar x_1-\bar x_2)(\bar x_1 - \bar x_2)^T Sb=(xˉ1−xˉ2)(xˉ1−xˉ2)T ,投影前的类内方差 S w = S C 1 + S C 2 S_w=S_{C_1}+S_{C_2} Sw=SC1+SC2,损失函数可以被进一步表示为
J ( W ) = W T S b W W T S w W = ( W T S b W ) ( W T S w W ) − 1 J(W)=\frac{W^TS_bW}{W^TS_wW}=(W^TS_bW)(W^TS_wW)^{-1} J(W)=WTSwWWTSbW=(WTSbW)(WTSwW)−1
计算梯度
∇ W J = 2 S b W ⋅ ( W T S w W ) − 1 + ( W T S b W ) ⋅ ( − 1 ) ( W T S w W ) − 2 ⋅ 2 S w W \nabla_W J = 2S_bW·(W^TS_wW)^{-1} + (W^TS_bW)·(-1)(W^TS_wW)^{-2}·2S_wW ∇WJ=2SbW⋅(WTSwW)−1+(WTSbW)⋅(−1)(WTSwW)−2⋅2SwW
令梯度为零
S b W − ( W T S b W ) ⋅ ( W T S w W ) − 1 ⋅ S w W = 0 S b W = W T S b W W T S w W S w W W = W T S b W W T S w W S w − 1 S b W \begin{aligned} S_bW - (W^TS_bW)·(W^TS_wW)^{-1}·S_wW &=0 \\ S_bW&=\frac{W^TS_bW}{W^TS_wW} S_wW \\ W&=\frac{W^TS_bW}{W^TS_w W}S_w^{-1}S_bW \end{aligned} SbW−(WTSbW)⋅(WTSwW)−1⋅SwWSbWW=0=WTSwWWTSbWSwW=WTSwWWTSbWSw−1SbW
即
W ^ = W T S b W W T S w W S w − 1 S b W (11) \hat W=\frac{W^TS_bW}{W^TS_w W}S_w^{-1}S_bW \tag{11} W^=WTSwWWTSbWSw−1SbW(11)
根据矩阵维度可以看出 W T S b W W T S w W \frac{W^TS_bW}{W^TS_wW} WTSwWWTSbW 为常数; S b = ( x ˉ 1 − x ˉ 2 ) ( x ˉ 1 − x ˉ 2 ) T S_b=(\bar x_1-\bar x_2)(\bar x_1 - \bar x_2)^T Sb=(xˉ1−xˉ2)(xˉ1−xˉ2)T,所以式 ( 11 ) (11) (11) 中后半部分的 S b W = ( x ˉ 1 − x ˉ 2 ) ( x ˉ 1 − x ˉ 2 ) T W S_bW=(\bar x_1-\bar x_2)(\bar x_1 - \bar x_2)^TW SbW=(xˉ1−xˉ2)(xˉ1−xˉ2)TW,其中 ( x ˉ 1 − x ˉ 2 ) T W (\bar x_1-\bar x_2)^TW (xˉ1−xˉ2)TW 为常数。因此 W = k S w − 1 ( x ˉ 1 − x ˉ 2 ) W=kS_w^{-1}(\bar x_1-\bar x_2) W=kSw−1(xˉ1−xˉ2) ,即 W ∝ S w − 1 ( x ˉ 1 − x ˉ 2 ) W\propto S_w^{-1}(\bar x_1-\bar x_2) W∝Sw−1(xˉ1−xˉ2) 。之所以可以忽略系数,是因为我们只是希望找到一个合适的投影方向,即投影面法向量,而法向量的长度不影响向量的方向,因此无需关心系数。
我们在上面从概率分布的角度讲解了如何获取预测函数,但是没提到如何训练模型,也就是只说了模型如何用,没说如何训练。下面就模型训练进行讲解。
交叉熵(cross-entropy)主要用于度量两个概率分布间的差异性信息。假设 p p p 和 q q q 为两个分布,交叉熵 H ( p , q ) H(p,q) H(p,q) 定义为
H ( p , q ) = − ∑ x p ( x ) log q ( x ) H(p,q) = -\sum_x p(x)\log q(x) H(p,q)=−x∑p(x)logq(x)
机器学习中,我们通常将分布理解为向量,所以交叉熵 H ( p , q ) H(p,q) H(p,q) 也可以表示为
H ( p , q ) = − ∑ i p i log q i (12) H(p,q) = -\sum_i p_i\log q_i \tag{12} H(p,q)=−i∑pilogqi(12)
我们知道 logistics 对应的概率质量分布为 P ( y ∣ x ) = p y ( 1 − p ) 1 − y P(y\mid x)=p^y(1-p)^{1-y} P(y∣x)=py(1−p)1−y 。如果采用最大似然估计(MLE)构造损失函数以求解最优参数,则有
W ^ = a r g max W log ( P ( Y ∣ X ) ) = a r g max W log ( ∏ i = 1 n P ( y i ∣ x i ) ) = a r g max W ∑ i = 1 n log P ( y i ∣ x i ) = a r g max W ∑ i = 1 n log p i y i ( 1 − p i ) 1 − y i = a r g max W ∑ i = 1 n ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) \begin{aligned} \hat W&={\rm arg}\max_W \log(P(Y\mid X)) \\ &={\rm arg}\max_W\log (\prod_{i=1}^n P(y_i\mid x_i)) \\ &={\rm arg}\max_W\sum_{i=1}^n \log P(y_i\mid x_i) \\ &={\rm arg}\max_W\sum_{i=1}^n \log p_i^{y_i}(1-p_i)^{1-y_i} \\ &={\rm arg}\max_W\sum_{i=1}^n \big(y_i\log p_i+(1-y_i)\log(1-p_i)\big) \end{aligned} W^=argWmaxlog(P(Y∣X))=argWmaxlog(i=1∏nP(yi∣xi))=argWmaxi=1∑nlogP(yi∣xi)=argWmaxi=1∑nlogpiyi(1−pi)1−yi=argWmaxi=1∑n(yilogpi+(1−yi)log(1−pi))
令 L ( W ) = ∑ i = 1 n ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) L(W)=\sum_{i=1}^n \big(y_i\log p_i+(1-y_i)\log(1-p_i)\big) L(W)=∑i=1n(yilogpi+(1−yi)log(1−pi)),其中 p p p 为预测函数 σ ( W T x ) \sigma(W^Tx) σ(WTx),我们知道 sigmoid 函数的导数为 σ ′ = σ ( 1 − σ ) \sigma'=\sigma(1-\sigma) σ′=σ(1−σ),所以 L L L 的梯度为
∇ W L = ∑ i = 1 n ( y i 1 p i p i ( 1 − p i ) x i + ( 1 − y i ) 1 1 − p i ( − 1 ) p i ( 1 − p i ) x i ) = ∑ i = 1 n ( y i − p i ) x i \begin{aligned} \nabla_WL &=\sum_{i=1}^n\Big(y_i\frac{1}{p_i}p_i(1-p_i)x_i+(1-y_i)\frac{1}{1-p_i}(-1)p_i(1-p_i)x_i\Big) \\ &=\sum_{i=1}^n (y_i-p_i)x_i \end{aligned} ∇WL=i=1∑n(yipi1pi(1−pi)xi+(1−yi)1−pi1(−1)pi(1−pi)xi)=i=1∑n(yi−pi)xi
可以采用 SGD 等算法迭代更新模型参数。
其实损失函数 L L L 也可以理解为交叉熵的形式。令 a i = ( y i 1 − y i ) T a_i = \left(\begin{matrix} y_i & 1-y_i \end{matrix}\right)^T ai=(yi1−yi)T, b i = ( p i 1 − p i ) T b_i = \left(\begin{matrix} p_i & 1-p_i \end{matrix}\right)^T bi=(pi1−pi)T,单样本的交叉熵对应式 ( 12 ) (12) (12) 为
H ( a i , b i ) = − ∑ j = 1 2 a i j log b i j = − a i T ⋅ b i = − ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) \begin{aligned} H(a_i,b_i)&=-\sum_{j=1}^2 a_{ij}\log b_{ij} \\ &= -a_i^T·b_i \\ &= -\big( y_i\log p_i + (1-y_i)\log(1-p_i) \big) \end{aligned} H(ai,bi)=−j=1∑2aijlogbij=−aiT⋅bi=−(yilogpi+(1−yi)log(1−pi))
考虑将全部样本的交叉熵之和作为损失函数,则
J ( W ) = − ∑ i = 1 n ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) J(W) =- \sum_{i=1}^n \big( y_i\log p_i + (1-y_i)\log(1-p_i) \big) J(W)=−i=1∑n(yilogpi+(1−yi)log(1−pi))
显然,交叉熵对应的最小化 J ( W ) J(W) J(W) 与 MLE 对应的最大化 L ( W ) L(W) L(W) 是等价的。
多分类的情况实际上就是对二分类的扩展,同样考虑交叉熵的形式。
令 a i = ( y i 1 y i 2 … y i m ) T a_i = \left(\begin{matrix} y_{i1} & y_{i2} & \dots & y_{im} \end{matrix}\right)^T ai=(yi1yi2…yim)T, b i = 1 ∑ j = 1 m exp ( p i j ) ( exp ( p i 1 ) exp ( p i 2 ) … exp ( p i m ) ) T b_i = \frac{1}{\sum_{j=1}^m\exp{(p_{ij}})}\Big(\begin{matrix}\exp({p_{i1}}) & \exp(p_{i2}) & \dots & \exp(p_{im})\end{matrix}\Big)^T bi=∑j=1mexp(pij)1(exp(pi1)exp(pi2)…exp(pim))T ,其中 m m m 为类别数目, a i a_i ai 为以 one-hot 形式表示样本 i i i 的标签 y i y_i yi。单样本的交叉熵对应式 ( 12 ) (12) (12) 为
H ( a i , b i ) = − ∑ j = 1 m a i j log b i j \begin{aligned} H(a_i,b_i)&=-\sum_{j=1}^m a_{ij}\log b_{ij} \\ \end{aligned} H(ai,bi)=−j=1∑maijlogbij
考虑将全部样本的交叉熵之和作为损失函数,则
J ( W ) = − ∑ i = 1 n ∑ j = 1 m a i j log b i j J(W) = -\sum_{i=1}^n\sum_{j=1}^m a_{ij}\log b_{ij} J(W)=−i=1∑nj=1∑maijlogbij
其中 a i a_i ai 为 one-hot 数据, ∣ ∣ b i ∣ ∣ = 1 ||b_i||=1 ∣∣bi∣∣=1,所以进一步简化表示为
J ( W ) = − ∑ i = 1 n log exp ( p i k ) ∑ j = 1 m exp ( p i j ) J(W) = -\sum_{i=1}^n \log\frac{\exp(p_{ik})}{\sum_{j=1}^m \exp(p_{ij})} J(W)=−i=1∑nlog∑j=1mexp(pij)exp(pik)
其中 k k k 表示样本 i i i 对应标签 y i y_i yi,亦满足 y i k = 1 y_{ik}=1 yik=1。
我们可以稍微总结一下交叉熵损失函数与 sigmoid(或 softmax)的关系。交叉熵损失函数是指将全部样本的交叉熵之和作为损失函数,用于计算交叉熵的两个向量 p p p 和 q q q 分别是样本标签的独热编码和一组通过 sigmoid 函数(或 softmax 函数)计算得到的该样本在每种类别的概率值。可见,将 sigmoid 函数(或 softmax 函数)作为内函数,交叉熵函数作为外函数复合起来,得到单个样本的交叉熵损失,再复合上加和函数,得到最终的模型损失函数。
高斯判别分析(Gaussian Discriminative Analysis,GDA)的思想是对联合概率 P ( x , y ) P(x,y) P(x,y) 进行建模,通过最大化对数似然估计计算出模型参数,属于生成模型。
以二分类为例理解高斯判别分析模型。假设
y ∼ B e r n o u l l i ( ϕ ) x ∣ y = 0 ∼ N ( μ 0 , Σ ) x ∣ y = 1 ∼ N ( μ 1 , Σ ) \begin{aligned} y&\sim Bernoulli(ϕ) \\ x\mid y=0 &\sim N(\mu_0,\Sigma)\\ x\mid y=1 &\sim N(\mu_1,\Sigma) \end{aligned} yx∣y=0x∣y=1∼Bernoulli(ϕ)∼N(μ0,Σ)∼N(μ1,Σ)
其中, μ \mu μ 为均值向量, Σ \Sigma Σ 为协方差对角矩阵。对应的概率分布为
P ( y ) = ϕ y ( 1 − ϕ ) 1 − y P ( x ∣ y = 0 ) = 1 ( 2 π ) d 2 ∣ Σ ∣ 1 2 exp ( − 1 2 ( x − μ 0 ) T Σ − 1 ( x − μ 0 ) ) P ( x ∣ y = 1 ) = 1 ( 2 π ) d 2 ∣ Σ ∣ 1 2 exp ( − 1 2 ( x − μ 1 ) T Σ − 1 ( x − μ 1 ) ) \begin{aligned} P(y) &= \phi^y(1-\phi)^{1-y} \\ P(x\mid y=0)&=\frac{1}{(2\pi)^\frac{d}{2}|\Sigma|^\frac{1}{2}}\exp \left( -\frac{1}{2}(x-\mu_0)^T\Sigma^{-1}(x-\mu_0) \right)\\ P(x\mid y=1)&=\frac{1}{(2\pi)^\frac{d}{2}|\Sigma|^\frac{1}{2}}\exp \left( -\frac{1}{2}(x-\mu_1)^T\Sigma^{-1}(x-\mu_1) \right)\\ \end{aligned} P(y)P(x∣y=0)P(x∣y=1)=ϕy(1−ϕ)1−y=(2π)2d∣Σ∣211exp(−21(x−μ0)TΣ−1(x−μ0))=(2π)2d∣Σ∣211exp(−21(x−μ1)TΣ−1(x−μ1))
将对数似然函数作为损失函数
L L ( ϕ , μ 0 , μ 1 , Σ ) = log ∏ i = 1 n P ( x i , y i ; ϕ , μ 0 , μ 1 , Σ ) = log ∏ i = 1 n P ( x i ∣ y i ; μ 0 , μ 1 , Σ ) P ( y i ; ϕ ) = ∑ i = 1 n ( log P ( x i ∣ y i ; μ 0 , μ 1 , Σ ) + log P ( y i ; ϕ ) ) = ∑ i = 1 n ( log P ( x i ∣ y i = 0 ; μ 0 , Σ ) 1 − y i P ( x i ∣ y i = 1 ; μ 1 , Σ ) y i + log P ( y i ; ϕ ) ) = ∑ i = 1 n ( ( 1 − y i ) log P ( x i ∣ y i = 0 ; μ 0 , Σ ) + y i log P ( x i ∣ y i = 1 ; μ 1 , Σ ) + log P ( y i ; ϕ ) ) = ∑ i = 1 n ( ( 1 − y i ) ( − d 2 log 2 π − 1 2 log ∣ Σ ∣ − 1 2 ( x i − μ 0 ) T Σ − 1 ( x i − μ 0 ) ) + y i ( − d 2 log 2 π − 1 2 log ∣ Σ ∣ − 1 2 ( x i − μ 1 ) T Σ ( x i − μ 1 ) ) + log ϕ y i ( 1 − ϕ ) 1 − y i ) \begin{aligned} LL(\phi,\mu_0,\mu_1,\Sigma)&=\log\prod_{i=1}^n P(x_i,y_i;\phi, \mu_0, \mu_1, \Sigma) \\ &=\log \prod_{i=1}^n P(x_i\mid y_i;\mu_0,\mu_1,\Sigma)P(y_i;\phi) \\ &=\sum_{i=1}^n \Big(\log P(x_i\mid y_i;\mu_0,\mu_1,\Sigma)+\log P(y_i;\phi)\Big) \\ &=\sum_{i=1}^n \Big(\log P(x_i\mid y_i=0;\mu_0,\Sigma)^{1-y_i} P(x_i\mid y_i=1;\mu_1,\Sigma)^{y_i}+\log P(y_i;\phi)\Big) \\ &=\sum_{i=1}^n \Big((1-y_i)\log P(x_i\mid y_i=0;\mu_0,\Sigma)+y_i\log P(x_i\mid y_i=1;\mu_1,\Sigma)+\log P(y_i;\phi)\Big) \\ &=\sum_{i=1}^n\Big( (1-y_i)\big( -\frac{d}{2}\log2\pi -\frac{1}{2}\log|\Sigma|-\frac{1}{2}(x_i-\mu_0)^T\Sigma^{-1}(x_i-\mu_0) \big) + y_i\big( -\frac{d}{2} \log2\pi-\frac{1}{2}\log|\Sigma|-\frac{1}{2}(x_i-\mu_1)^T\Sigma(x_i-\mu_1) \big) + \log \phi^{y_i}(1-\phi)^{1-y_i} \Big) \end{aligned} LL(ϕ,μ0,μ1,Σ)=logi=1∏nP(xi,yi;ϕ,μ0,μ1,Σ)=logi=1∏nP(xi∣yi;μ0,μ1,Σ)P(yi;ϕ)=i=1∑n(logP(xi∣yi;μ0,μ1,Σ)+logP(yi;ϕ))=i=1∑n(logP(xi∣yi=0;μ0,Σ)1−yiP(xi∣yi=1;μ1,Σ)yi+logP(yi;ϕ))=i=1∑n((1−yi)logP(xi∣yi=0;μ0,Σ)+yilogP(xi∣yi=1;μ1,Σ)+logP(yi;ϕ))=i=1∑n((1−yi)(−2dlog2π−21log∣Σ∣−21(xi−μ0)TΣ−1(xi−μ0))+yi(−2dlog2π−21log∣Σ∣−21(xi−μ1)TΣ(xi−μ1))+logϕyi(1−ϕ)1−yi)
对模型参数 ϕ \phi ϕ, μ 0 \mu_0 μ0, μ 1 \mu_1 μ1 和 Σ \Sigma Σ 分别计算偏导,并令偏导数等于零,得
ϕ = 1 n ∑ i = 1 n 1 { y i = 1 } μ 0 = 1 n ∑ i = 1 n 1 { y i = 0 } x i μ 1 = 1 n ∑ i = 1 n 1 { y i = 1 } x i Σ = 1 n ∑ i = 1 n ( y i ( x i − μ 1 ) ( x i − μ 1 ) T + ( 1 − y i ) ( x i − μ 0 ) ( x i − μ 0 ) T ) \phi = \frac{1}{n}\sum_{i=1}^n 1\{y_i=1\} \\ \mu_0 = \frac{1}{n}\sum_{i=1}^n 1\{y_i=0\}x_i \\ \mu_1 = \frac{1}{n}\sum_{i=1}^n 1\{y_i=1\}x_i \\ \Sigma = \frac{1}{n}\sum_{i=1}^n\Big( y_i(x_i-\mu_1)(x_i-\mu_1)^T + (1-y_i)(x_i-\mu_0)(x_i-\mu_0)^T \Big) ϕ=n1i=1∑n1{yi=1}μ0=n1i=1∑n1{yi=0}xiμ1=n1i=1∑n1{yi=1}xiΣ=n1i=1∑n(yi(xi−μ1)(xi−μ1)T+(1−yi)(xi−μ0)(xi−μ0)T)
具体的数学推导和公式讲解见本小节后半部分。
对于二分类而言,GDA 训练两个多元高斯分布。想要对输入样本进行分类,只需要把样本输入到参数已知的两个高斯分布中,取输出概率大者对应的类别作为样本类别便实现了预测;另外这类基于概率的模型一般都具有生成数据的功能,按照选择某一个类别对应的多元高斯分布,用该分布对每个特征逐一随机采样构造一个属于该类别的生成样本。
可以借助图 3 3 3 辅助理解。既可以理解为,根据已知样本和对应类别计算两个高斯分布的参数;也可以理解为,利用两个已知参数的分布,选取其中一个分布,按照概率随机采样,来实现生成样本。
图 3 二分类高斯判别分析模型
损失函数关于模型参数更新公式完整推导。
多元高斯模型假设每个特征相互独立,且服从正态分布。多元高斯分布函数中的参数 Σ \Sigma Σ 为 d × d d\times d d×d 维协方差矩阵,由于不同特征独立,所以 Σ \Sigma Σ 为对角矩阵, ∣ Σ ∣ |\Sigma| ∣Σ∣ 表示协方差矩阵的行列式 ∣ Σ ∣ = σ 1 σ 2 … σ d |\Sigma|=\sigma_1\sigma_2\dots\sigma_d ∣Σ∣=σ1σ2…σd,其中 σ i \sigma_i σi 表示全部样本第 i i i 维特征的方差。
另外,我们还需要了解几个会用到的求导公式
t r A B C = t r C A B = B C A ∂ t r A X ∂ X = ∂ X A ∂ X = A T ∂ u T v ∂ x = ∂ u ∂ x v + ∂ v ∂ x u ∂ log ∣ X ∣ ∂ X = ( X − 1 ) T ∂ t r X − 1 A ∂ X = − ( X − 1 ) T A T ( X − 1 ) T {\rm tr}ABC={\rm tr}CAB={\rm } BCA \\ \frac{\partial {\rm tr} AX}{\partial X} = \frac{\partial{\rm} XA}{\partial X}=A^T \\ \frac{\partial u^Tv}{\partial x} =\frac{\partial u}{\partial x}v + \frac{\partial v}{\partial x}u \\ \frac{\partial \log|X|}{\partial X} = (X^{-1})^T \\ \frac{\partial {\rm tr}X^{-1}A}{\partial X} = -(X^{-1})^TA^T(X^{-1})^T trABC=trCAB=BCA∂X∂trAX=∂X∂XA=AT∂x∂uTv=∂x∂uv+∂x∂vu∂X∂log∣X∣=(X−1)T∂X∂trX−1A=−(X−1)TAT(X−1)T
对 ϕ \phi ϕ 计算偏导
∇ ϕ L L = ∂ ∑ i = 1 n log ( ϕ y i ( 1 − ϕ ) 1 − y i ) ∂ ϕ = ∂ ∑ i = 1 n ( y i log ϕ + ( 1 − y i ) log ( 1 − ϕ ) ) ∂ ϕ = ∑ i = 1 n ( y i ϕ − 1 − y i 1 − ϕ ) = ∑ i = 1 n y i − ϕ ϕ ( 1 − ϕ ) \begin{aligned} \nabla_\phi LL& = \frac{\partial \sum_{i=1}^n\log \big (\phi^{y_i} (1-\phi)^{1-y_i} \big)}{\partial \phi} \\ &=\frac{\partial \sum_{i=1}^n \big ( y_i\log\phi+(1-y_i) \log(1-\phi) \big)}{\partial \phi} \\ &=\sum_{i=1}^n \Big(\frac{y_i}{\phi}-\frac{1-y_i}{1-\phi} \Big) \\ &=\sum_{i=1}^n\frac{y_i-\phi}{\phi(1-\phi)} \end{aligned} ∇ϕLL=∂ϕ∂∑i=1nlog(ϕyi(1−ϕ)1−yi)=∂ϕ∂∑i=1n(yilogϕ+(1−yi)log(1−ϕ))=i=1∑n(ϕyi−1−ϕ1−yi)=i=1∑nϕ(1−ϕ)yi−ϕ令偏导等于零,得
∇ ϕ L L = 0 ∑ i = 1 n y i − ϕ ϕ ( 1 − ϕ ) = 0 ∑ i = 1 n ( y i − ϕ ) = 0 ∑ i = 1 n y i = m ϕ ϕ = 1 n ∑ i = 1 n 1 { y i = 1 } \begin{aligned} \nabla_\phi LL &= 0 \\ \sum_{i=1}^n \frac{y_i-\phi}{\phi(1-\phi)}&=0 \\ \sum_{i=1}^n \big (y_i-\phi \big) &= 0 \\ \sum_{i=1}^n y_i &= m\phi \\ \phi &= \frac{1}{n} \sum_{i=1}^n 1\{y_i=1\} \end{aligned} ∇ϕLLi=1∑nϕ(1−ϕ)yi−ϕi=1∑n(yi−ϕ)i=1∑nyiϕ=0=0=0=mϕ=n1i=1∑n1{yi=1}
对 μ 0 \mu_0 μ0 计算偏导
∇ μ 0 L L = ∂ ∑ i = 1 n ( 1 − y i ) ( − 1 2 ( x i − μ 0 ) T Σ − 1 ( x i − μ 0 ) ) ∂ μ 0 = − 1 2 ∑ i = 1 n ( 1 − y i ) ( ∂ ( x i − μ 0 ) ∂ μ 0 Σ − 1 ( x i − μ 0 ) + ∂ Σ − 1 ( x i − μ 0 ) ∂ μ 0 ( x i − μ 0 ) ) = − 1 2 ∑ i = 1 n ( 1 − y i ) ( − Σ − 1 ( x i − μ 0 ) − ( Σ − 1 ) T ( x i − μ 0 ) ) = − 1 2 ∑ i = 1 n ( 1 − y i ) ( − 2 Σ − 1 ( x i − μ 0 ) ) = ∑ i = 1 n ( 1 − y i ) Σ − 1 ( x i − μ 0 ) \begin{aligned} \nabla_{\mu_0} LL&=\frac{\partial \sum_{i=1}^n (1-y_i)\big( -\frac{1}{2}(x_i-\mu_0)^T\Sigma^{-1}(x_i-\mu_0) \big)}{\partial \mu_0} \\ &=-\frac{1}{2}\sum_{i=1}^n (1-y_i)\big( \frac{\partial (x_i-\mu_0)}{\partial \mu_0}\Sigma^{-1}(x_i-\mu_0)+\frac{\partial \Sigma^{-1} (x_i-\mu_0)}{\partial \mu_0}(x_i-\mu_0) \big) \\ &=-\frac{1}{2}\sum_{i=1}^n (1-y_i)\big( -\Sigma^{-1}(x_i-\mu_0)-(\Sigma^{-1})^T(x_i-\mu_0) \big) \\ &=-\frac{1}{2}\sum_{i=1}^n (1-y_i)\big( -2\Sigma^{-1}(x_i-\mu_0) \big) \\ &=\sum_{i=1}^n (1-y_i)\Sigma^{-1}(x_i-\mu_0) \\ \end{aligned} ∇μ0LL=∂μ0∂∑i=1n(1−yi)(−21(xi−μ0)TΣ−1(xi−μ0))=−21i=1∑n(1−yi)(∂μ0∂(xi−μ0)Σ−1(xi−μ0)+∂μ0∂Σ−1(xi−μ0)(xi−μ0))=−21i=1∑n(1−yi)(−Σ−1(xi−μ0)−(Σ−1)T(xi−μ0))=−21i=1∑n(1−yi)(−2Σ−1(xi−μ0))=i=1∑n(1−yi)Σ−1(xi−μ0)
令偏导等于零,得
∇ μ 0 L L = 0 ∑ i = 1 n ( 1 − y i ) Σ − 1 ( x i − μ 0 ) = 0 ∑ i = 1 n ( 1 − y i ) Σ Σ − 1 ( x i − μ 0 ) = 0 ∑ i = 1 n ( 1 − y i ) ( x i − μ 0 ) = 0 μ 0 = 1 n ∑ i = 1 n 1 { y i = 0 } x i \begin{aligned} \nabla_{\mu_0}LL &= 0\\ \sum_{i=1}^n (1-y_i)\Sigma^{-1}(x_i-\mu_0) &= 0\\ \sum_{i=1}^n (1-y_i)\Sigma\Sigma^{-1}(x_i-\mu_0) &= 0\\ \sum_{i=1}^n (1-y_i)(x_i-\mu_0) &= 0\\ \mu_0&=\frac{1}{n}\sum_{i=1}^n 1\{y_i=0\}x_i \end{aligned} ∇μ0LLi=1∑n(1−yi)Σ−1(xi−μ0)i=1∑n(1−yi)ΣΣ−1(xi−μ0)i=1∑n(1−yi)(xi−μ0)μ0=0=0=0=0=n1i=1∑n1{yi=0}xi
同理可以计算出 L L LL LL 关于 μ 1 \mu_1 μ1 偏导等于零的解析解
μ 1 = 1 n ∑ i = 1 n 1 { y i = 1 } x i \mu_1 = \frac{1}{n}\sum_{i=1}^n 1\{y_i=1\}x_i μ1=n1i=1∑n1{yi=1}xi
对 Σ \Sigma Σ 计算偏导
∇ Σ L L = ∂ ∑ i = 1 n y i ( − 1 2 ( x i − μ 1 ) T Σ − 1 ( x i − μ 1 ) ) ∂ Σ + ∂ ∑ i = 1 n ( 1 − y i ) ( − 1 2 ( x i − μ 0 ) T Σ − 1 ( x i − μ 0 ) ) ∂ Σ + ∂ ∑ i = 1 n − 1 2 log ∣ Σ ∣ ∂ Σ = ∑ i = 1 n y i ∂ t r ( − 1 2 ( x i − μ 1 ) T Σ − 1 ( x i − μ 1 ) ) ∂ Σ + ∑ i = 1 n ( 1 − y i ) ∂ t r ( − 1 2 ( x i − μ 0 ) T Σ − 1 ( x i − μ 0 ) ) ∂ Σ + ∑ i = 1 n ∂ ( − 1 2 log ∣ Σ ∣ ) ∂ Σ = − 1 2 ∑ i = 1 n y i ∂ t r ( Σ − 1 ( x i − μ 1 ) ( x i − μ 1 ) T ) ∂ Σ − 1 2 ∑ i = 1 n ( 1 − y i ) ∂ t r ( Σ − 1 ( x i − μ 0 ) ( x i − μ 0 ) T ) ∂ Σ − 1 2 ∑ i = 1 n ( Σ − 1 ) T = − 1 2 ∑ i = 1 n y i ( − ( Σ − 1 ) T ( ( x i − μ 1 ) ( x i − μ 1 ) T ) T ( Σ − 1 ) T ) − 1 2 ∑ i = 1 n ( 1 − y i ) ( − ( Σ − 1 ) T ( ( x i − μ 0 ) ( x i − μ 0 ) T ) T ( Σ − 1 ) T ) − 1 2 n ( Σ − 1 ) T = 1 2 ∑ i = 1 n y i ( Σ − 1 ( x i − μ 1 ) ( x i − μ 1 ) T Σ − 1 ) + 1 2 ∑ i = 1 n ( 1 − y i ) ( Σ − 1 ( x i − μ 0 ) ( x i − μ 0 ) T Σ − 1 ) − 1 2 n Σ − 1 = 1 2 ( ∑ i = 1 n y i ( Σ − 1 ( x i − μ 1 ) ( x i − μ 1 ) T Σ − 1 ) + ∑ i = 1 n ( 1 − y i ) ( Σ − 1 ( x i − μ 0 ) ( x i − μ 0 ) T Σ − 1 ) − n Σ − 1 ) \begin{aligned} \nabla_\Sigma LL &= \frac{\partial \sum_{i=1}^n y_i\big(-\frac{1}{2} (x_i-\mu_1)^T\Sigma^{-1} (x_i-\mu_1) \big) }{\partial \Sigma} + \frac{\partial \sum_{i=1}^n (1-y_i)\big(-\frac{1}{2} (x_i-\mu_0)^T\Sigma^{-1} (x_i-\mu_0) \big) }{\partial \Sigma} + \frac{ \partial \sum_{i=1}^n-\frac{1}{2}\log |\Sigma| }{\partial \Sigma} \\ &=\sum_{i=1}^n y_i\frac{\partial{\rm tr} \big(−\frac{1}{2} (x_i-\mu_1)^T\Sigma^{-1} (x_i-\mu_1) \big) }{\partial \Sigma} + \sum_{i=1}^n (1-y_i)\frac{\partial{\rm tr} \big(−\frac{1}{2} (x_i-\mu_0)^T\Sigma^{-1} (x_i-\mu_0) \big) }{\partial \Sigma} + \sum_{i=1}^n\frac{\partial \big( -\frac{1}{2}\log|\Sigma| \big)}{\partial \Sigma} \\ &=−\frac{1}{2}\sum_{i=1}^n y_i\frac{\partial{\rm tr} \big(\Sigma^{-1} (x_i-\mu_1)(x_i-\mu_1)^T \big) }{\partial \Sigma} -\frac{1}{2}\sum_{i=1}^n (1-y_i)\frac{\partial{\rm tr} \big(\Sigma^{-1} (x_i-\mu_0) (x_i-\mu_0)^T \big) }{\partial \Sigma} -\frac{1}{2} \sum_{i=1}^n(\Sigma^{-1} )^T\\ &=−\frac{1}{2}\sum_{i=1}^n y_i \Big(-(\Sigma^{-1})^T \big((x_i-\mu_1)(x_i-\mu_1)^T\big)^T (\Sigma^{-1})^T \Big) −\frac{1}{2}\sum_{i=1}^n (1-y_i) \Big(-(\Sigma^{-1})^T \big((x_i-\mu_0)(x_i-\mu_0)^T\big)^T (\Sigma^{-1})^T \Big) -\frac{1}{2} n(\Sigma^{-1} )^T\\ &=\frac{1}{2}\sum_{i=1}^n y_i \Big(\Sigma^{-1} (x_i-\mu_1)(x_i-\mu_1)^T \Sigma^{-1}\Big) +\frac{1}{2}\sum_{i=1}^n (1-y_i) \Big(\Sigma^{-1} (x_i-\mu_0)(x_i-\mu_0)^T \Sigma^{-1} \Big) -\frac{1}{2} n\Sigma^{-1}\\ &=\frac{1}{2}\left(\sum_{i=1}^n y_i \Big(\Sigma^{-1} (x_i-\mu_1)(x_i-\mu_1)^T \Sigma^{-1}\Big) +\sum_{i=1}^n (1-y_i) \Big(\Sigma^{-1} (x_i-\mu_0)(x_i-\mu_0)^T \Sigma^{-1} \Big) - n\Sigma^{-1} \right)\\ \end{aligned} ∇ΣLL=∂Σ∂∑i=1nyi(−21(xi−μ1)TΣ−1(xi−μ1))+∂Σ∂∑i=1n(1−yi)(−21(xi−μ0)TΣ−1(xi−μ0))+∂Σ∂∑i=1n−21log∣Σ∣=i=1∑nyi∂Σ∂tr(−21(xi−μ1)TΣ−1(xi−μ1))+i=1∑n(1−yi)∂Σ∂tr(−21(xi−μ0)TΣ−1(xi−μ0))+i=1∑n∂Σ∂(−21log∣Σ∣)=−21i=1∑nyi∂Σ∂tr(Σ−1(xi−μ1)(xi−μ1)T)−2