From fc8153f2817a64cecf07ce0ff99b89833bb08b32 Mon Sep 17 00:00:00 2001 From: SJ2050cn Date: Sun, 21 Nov 2021 15:30:43 +0800 Subject: [PATCH] Finish derivativing the formulas of softmax method. --- .../homework/README.md | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/homework_04_logistic_regression/homework/README.md b/homework_04_logistic_regression/homework/README.md index a2109ab..46f3b77 100644 --- a/homework_04_logistic_regression/homework/README.md +++ b/homework_04_logistic_regression/homework/README.md @@ -12,19 +12,49 @@ ​ Softmax函数的公式如下: $$ -p=\frac{e^{v_{i}}}{\sum\limits_{j=1}^{n} e^{v_{j}}} +g(z_i)=\frac{e^{z_{i}}}{\sum\limits_{j=1}^{n} e^{z_{j}}} $$ -其中,n表示多个输出或类别数,$v_j$为第$j$个输出或类别的值,$i$表示当前需要计算的类别。从上述公式中可以看出,Softmax函数的计算结果落在$[0,\ 1]$中,且所有类别的Softmax函数值之和等于1。 +其中,n表示多个输出或类别数,$z_j$为第$j$个输出或类别的值,$i$表示当前需要计算的类别。从上述公式中可以看出,Softmax函数的计算结果落在$[0,\ 1]$中,且所有类别的Softmax函数值之和等于1。 -​ 用$\boldsymbol{x}$表示输入向量,用$\boldsymbol{z}$表示输出向量,则Softmax函数可以写成: +​ 在输入到输出之间引入一层函数映射,取$\mathbf{\Theta}^T\cdot\mathbf{x}=\mathbf{z}$,其中$\mathbf{\Theta}=[\theta_1,\ \theta_2,\ ,...,\ \theta_n]$为权重系数,$\theta$为权重向量,$\mathbf{x}$为输入向量,$\mathbf{z}$为输出向量,则Softmax函数可以写成: $$ -g(z_i)=\frac{e^{z_{i}}}{\sum\limits_{j=1}^{n} e^{z_{j}}} +g(z_i)=g(\theta_i^T \mathbf{x})=\frac{e^{\theta_i^T\mathbf{x}}}{\sum\limits_{j=1}^{n} e^{\theta_j^T \mathbf{x}}}=h_{\theta_i}(\mathbf{x}) +$$ +构造似然函数,若有$m$个训练样本: +$$ +\begin{aligned} +L(\Theta)&=p(\mathbf{y}|\mathbf{X};\Theta) \\ +& = \prod\limits_{i=1}^{m} p(y^{i}|\mathbf{x}^{i};\Theta) \\ +& = \prod_{i=1}^m h_{\theta_i}(\mathbf{x}) +\end{aligned} $$ -对Softmax函数求导得到: +对似然函数取对数,转换为: $$ -\frac{\partial{g(z_i)}}{\partial{z_j}}=\begin{cases} -\frac{e^{z_i}\sum\limits_{j=1}^{n}{e^{z_j}}-e^{2z_i}}{(\sum\limits_{j=1}^{n}{e^{z_j}})^2} & \text{ if } i=j \\ -\frac{-e^{z_i+z_j}}{(\sum\limits_{j=1}^{n}{e^{z_j}})^2} & else +l(\Theta)=log(L(\Theta))=\sum\limits_{i=1}^m log(h_{\theta_i}(\mathbf{x})) +$$ +对$log(h_{\theta_i}(\mathbf{x}))$求导得到: +$$ +\frac{\partial{log(h_{\theta_i}(\mathbf{x}))}}{\partial{z_k}}=\begin{cases} +1-h_{\theta_k}(\mathbf{x}) & \text{ if } k=i \\ +-h_{\theta_k}(\mathbf{x}) & else \end{cases} $$ -在输入向量与输出向量之间加入一层函数映射,我们引入一个矩阵$\Theta$,其满足$z=\Theta \boldsymbol{x}$ \ No newline at end of file +转换后的似然函数对$\theta$求偏导,在这里我们以只有一个训练样本的情况为例: +$$ +\begin{aligned} +\frac{\partial}{\partial\theta_k}l(\Theta)&=\frac{\partial l(\Theta)}{\partial{z_k}}\cdot \frac{\partial z_k}{\partial \theta_k} \\ +&=(y_k-h_{\theta_k}(\mathbf{x}))\mathbf{x} +\end{aligned} +$$ +上式中$y_k$的表达式如下: +$$ +y_k=\begin{cases} +1 & \text{ if } k=i \\ +0 & else +\end{cases} +$$ +此时,我们就可以写出最大化似然函数的更新方向,$\theta_k$的迭代表示为: +$$ +\theta_k=\theta_k+\eta(\sum\limits_{i=1}^{m}(y_k-h_{\theta_k}(\mathbf{x}^i))\cdot \mathbf{x}^i) +$$ +其中$\eta$为学习率,可以看到,当输出向量的维度等于2时,即二分类时,上式与二分类中权重向量的迭代公式相等。