对于 \(Softmax\) 回归的正向传播非常简单,就是对于一个输入 \(X\) 对每一个输入标量 \(x_i\) 进行加权求和得到 \(Z\) 然后对其做概率归一化。

Softmax 示意图

下面看一个简单的示意图:

其中 \(X\in\mathbb{R}^{n\times m}\) 是一个向量或矩阵,这取决于传入的是一个训练样本还是一组训练样本,其中 \(n\) 是输入特征的数量,\(m\) 是传入的训练样本数量;此图只是示意的一个简单的 Softmax 的传播单元,可以把它理解为一个神经单元,所以 \(W\in\mathbb{R}^{n\times k}\) 可以看成每一个 \(X\) 的特征的权重,\(W\) 是向量还是矩阵同样取决于第二层(图中第一个方框)有多少个神经单元,用 \(k\) 表示第二层的数量,\(b\in\mathbb{R}\) 为偏置(bias)单元。

全连接神经网络

上图只是一个广泛的 \(Softmax\) 的示意图,下面用一个神经网络表示。

上图是更广义的 \(L\) 层全连接神经网络,其中,\(l_1\) 表示第一层的神经元数量,\(l_L\) 表示最后一层,即第 \(L\) 层的神经元数量,根据 Softmax 模型,假设此神经网络用作 \(C\) 分类的网络,\(l_L\) 的数量也是 \(C\) 的数量;\(\hat{y}\in\mathbb{R}^{C\times m}\) 可以是向量也可以是矩阵,同样取决于是否对一组输入进行了矢量化(vectorization),表示每一个样本的预测概率;最后将 \(\hat{y}\) 传入损失函数 \(\ell(y,\hat{y})\) 对其计算损失,公式如下:

\[\ell(y,\hat{y})=-\sum_{i=1}^Cy_i\ln{\hat{y}_i}
\]

最后,定义该网络一组训练样本的 \(cost\) 损失函数:

\[J(\theta)=\frac{1}{m}\sum_{i=1}^m\ell(y^{(i)},\hat{y}^{(i)})
\]

反向传播求导推理

下面对神经网络进行反向传播的求导推导。

首先,神经网络前向传播的最后一个操作是计算单个样本上的损失度 \(\ell(y,\hat{y})\) 所以首先计算 \(\frac{\partial\ell}{\partial\hat{y}}\) 由于神经网络的最后一层 \(a^{[L]}\) 就是 \(\hat{y}\) 的预测输出,所以就是对 \(a^{[L]}\) 求导:

\[\begin{split}
\frac{\partial\ell}{\partial a^{[L]}}&=\frac{\partial}{\partial a^{[L]}}\left(-\sum_{i=1}^Cy_i\ln{\hat{y}_i}\right)\\
&=\frac{\partial}{\partial a^{[L]}}\left(-(y_1\ln{\hat{y}_1}+y_2\ln{\hat{y}_2}+\dots+y_C\ln{\hat{y}_C})\right)\\
&=\frac{\partial}{\partial a^{[L]}}\left(-(y_1\ln{a^{[L]}_1}+y_2\ln{a^{[L]}_2}+\dots+y_C\ln{a^{[L]}_C})\right)
\end{split}
\]

可以从公式中看到,\(a^{[L]}\in\mathbb{R}^{C\times 1}\) 是一个向量,而 \(\ell\in\mathbb{R}\) 则为一个标量,根据 标量对向量 求导的法则,可以得到:

\[\begin{split}
\frac{\partial\ell}{\partial a^{[L]}}&=\frac{\partial}{\partial a^{[L]}}\left(-(y_1\ln{a^{[L]}_1}+y_2\ln{a^{[L]}_2}+\dots+y_C\ln{a^{[L]}_C})\right)\\
&=\begin{bmatrix}
\frac{\partial}{\partial a^{[L]}_1}\left(-(y_1\ln{a^{[L]}_1}+y_2\ln{a^{[L]}_2}+\dots+y_C\ln{a^{[L]}_C})\right)&
\frac{\partial}{\partial a^{[L]}_2}\left(-(y_1\ln{a^{[L]}_1}+y_2\ln{a^{[L]}_2}+\dots+y_C\ln{a^{[L]}_C})\right)&
\dots&
\frac{\partial}{\partial a^{[L]}_C}\left(-(y_1\ln{a^{[L]}_1}+y_2\ln{a^{[L]}_2}+\dots+y_C\ln{a^{[L]}_C})\right)
\end{bmatrix}\\
&=\begin{bmatrix}
-\frac{y_1}{a^{[L]}_1}&
-\frac{y_2}{a^{[L]}_2}&
\dots&
-\frac{y_C}{a^{[L]}_C}&
\end{bmatrix}\\
&=-\frac{y}{a^{[L]}}\\
&=-\frac{y}{\hat{y}}
\end{split}
\]

得到 \(\frac{\partial\ell}{\partial a^{[L]}}\) 后,下面就继续对 \(\frac{\partial\ell}{\partial z^{[L]}}\) 求偏导,因为 \(a\) 是关于 \(z\) 的函数,所以使用链式求导法则 \(\frac{\partial\ell}{\partial z^{[L]}}=\frac{\partial\ell}{\partial a^{[L]}}\frac{\partial a^{[L]}}{\partial z^{[L]}}\) 下面计算 \(\frac{\partial a^{[L]}}{\partial z^{[L]}}\) 又因为 \(a^{[L]},z^{[L]}\in\mathbb{R}^{C\times 1}\) 都是相同维度的向量,所以根据 向量对向量 求导的法则,可以得到:

\[\begin{split}
\frac{\partial a^{[L]}}{\partial z^{[L]}}&=\begin{bmatrix}
\frac{\partial a^{[L]}}{\partial z^{[L]}_1}&
\frac{\partial a^{[L]}}{\partial z^{[L]}_2}&
\dots&
\frac{\partial a^{[L]}}{\partial z^{[L]}_C}
\end{bmatrix}
\end{split}
\]

可以观察上式子中,\(z^{[L]}_i\in\mathbb{R}\) 是一个标量,\(a^{[L]}\) 为向量,所以使用 向量对向量 的求导法则:

\[\begin{split}
\frac{\partial a^{[L]}}{\partial z^{[L]}}&=\begin{bmatrix}
\frac{\partial a^{[L]}}{\partial z^{[L]}_1}&
\frac{\partial a^{[L]}}{\partial z^{[L]}_2}&
\dots&
\frac{\partial a^{[L]}}{\partial z^{[L]}_C}
\end{bmatrix}\\
&=\begin{bmatrix}
\frac{\partial}{\partial z^{[L]}_1}\left(\frac{e^{z^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}} \right)&
\frac{\partial}{\partial z^{[L]}_2}\left(\frac{e^{z^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}} \right)&
\dots&
\frac{\partial}{\partial z^{[L]}_C}\left(\frac{e^{z^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}} \right)
\end{bmatrix}
\end{split}
\]

我们拿出来第一个元素 \(\frac{\partial}{\partial z_1^{[L]}}\left(\frac{e_z^{[L]}}{\sum_{i=1}^Ce^{z^{[L]}_i}}\right)\) 对其研究,发现是 向量对标量 求导,我们将其展开:

\[\begin{split}
\frac{\partial}{\partial z_1^{[L]}}\left(\frac{e^{z^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}}\right)&=\begin{bmatrix}
\frac{\partial}{\partial z^{[L]}_1}\left(\frac{e^{z_1^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}}\right)&
\frac{\partial}{\partial z^{[L]}_1}\left(\frac{e^{z_2^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}}\right)&
\dots&
\frac{\partial}{\partial z^{[L]}_1}\left(\frac{e^{z_C^{[L]}}}{\sum_{i=1}^Ce^{z^{[L]}_i}}\right)&
\end{bmatrix}
\end{split}
\]

我们可以从这个式子中发现一个规律,在对 \(\frac{\partial a^{[L]}}{\partial z^{[L]}}\) 求导的展开式中,每一项都会有一个分母项 \(z_i^{[L]}\) 和分子的向量中的一个元素 \(e^{z_i^{[L]}}\) 相对应,分子中的其它项 \(e^{z_j^{[L]}}\) 就与之不对应;

比如在第一个元素 \(\frac{\partial a^{[L]}_1}{\partial z^{[L]}_1}\) 中,\(a\) 和 \(z\) 的下标都相同,所以可以得到:

\[\begin{split}
\frac{\partial a^{[L]}_1}{\partial z_1^{[L]}}
&=\frac{\partial}{\partial z_1^{[L]}}\left(\frac{e^{z_1^{[L]}}}{\sum_{i=1}^Ce^{z_i^{[L]}}}\right)\\
&=\frac{(e^{z_1^{[L]}})'\sum_{i=1}^Ce^{z_i^{[L]}}-e^{z_1^{[L]}}(e^{z_1^{[L]}}+e^{z_2^{[L]}}+\dots+e^{z_C^{[L]}})'}{\left(\sum_{i=1}^Ce^{z_i^{[L]}}\right)^2}\\
&=\frac{e^{z_1^{[L]}}\sum_{i=1}^Ce^{z_i^{[L]}}-e^{z_1^{[L]}}e^{z_1^{[L]}}}{\left(\sum_{i=1}^Ce^{z_i^{[L]}}\right)^2}\\
&=\frac{e^{z_1^{[L]}}\sum_{i=1}^Ce^{z_i^{[L]}}}{(\sum_{i=1}^Ce^{z_i^{[L]}})^2}-\frac{e^{z_1^{[L]}}e^{z_1^{[L]}}}{(\sum_{i=1}^Ce^{z_i^{[L]}})^2}\\
&=\frac{e^{z_1^{[L]}}}{\sum_{i=1}^Ce^{z_i^{[L]}}}-\frac{e^{z_1^{[L]}}}{\sum_{i=1}^Ce^{z_i^{[L]}}}\frac{e^{z_1^{[L]}}}{\sum_{i=1}^Ce^{z_i^{[L]}}}\\
&=a^{[L]}_1(1-a^{[L]}_1)
\end{split}
\]

我们可以将其对推广到其它的求导式子中,即当 \(i=j\) 时,我们可以得到:

\[\frac{\partial e^{z^{[L]}_i}}{\partial z^{[L]}_j}=a^{[L]}_i(1-a^{[L]}_i)
\]

如果,当 \(i\neq j\) 时,我们得到(由于使用的 \(i,j\) 作为下标,故将分母的 \(\Sigma\) 累加和的下标使用 \(k\) 替换):

\[\begin{split}
\frac{\partial a^{[L]}_i}{\partial z_j^{[L]}}
&=\frac{\partial}{\partial z_j^{[L]}}\left(\frac{e^{z_i^{[L]}}}{\sum_{k=1}^Ce^{z_k^{[L]}}}\right)\\
&=\frac{(e^{z_i^{[L]}})'\sum_{k=1}^Ce^{z_k^{[L]}}-e^{z_i^{[L]}}(e^{z_1^{[L]}}+e^{z_2^{[L]}}+\dots+e^{z_C^{[L]}})'}{\left(\sum_{k=1}^Ce^{z_k^{[L]}}\right)^2}\\
&=\frac{0\sum_{i=1}^Ce^{z_i^{[L]}}-e^{z_i^{[L]}}e^{z_j^{[L]}}}{\left(\sum_{k=1}^Ce^{z_k^{[L]}}\right)^2}\\
&=\frac{-e^{[L]}_ie^{[L]}_j}{(\sum_{k=1}^Ce^{[L]}_k)^2}\\
&=-\frac{e^{[L]}_i}{\sum_{k=1}^Ce^{[L]}_k}\frac{e^{[L]}_j}{\sum_{k=1}^Ce^{[L]}_k}\\
&=-a_ia_j
\end{split}
\]

然后我们写出 \(\frac{\partial a^{[L]}}{\partial z^{[L]}}\) 的 雅可比矩阵(jacobian matrix)

\[\begin{split}
\frac{\partial a^{[L]}}{\partial z^{[L]}}&=\begin{bmatrix}
\frac{\partial a^{[L]}_1}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_1}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_1}{\partial z^{[L]}_C}\\
\frac{\partial a^{[L]}_2}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_2}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_2}{\partial z^{[L]}_C}\\
\vdots&\vdots&\ddots&\vdots\\
\frac{\partial a^{[L]}_C}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_C}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_C}{\partial z^{[L]}C}
\end{bmatrix}\\
\end{split}
\]

我们发现除了对角线上即 \(i=j\) 时的求导为 \(a_i(1-a_j)\) 而矩阵的其它元素即 \(i\neq j\) 时求导为 \(-a_ia_j\) 。

至此,我们求出来了 \(\frac{\partial\ell}{\partial a^{[L]}}\) 和 \(\frac{\partial a^{[L]}}{\partial z^{[L]}}\) 所以下面我们就开始计算 \(\frac{\partial\ell}{\partial z^{[L]}}\) 的导数:

\[\frac{\partial\ell}{\partial z^{[L]}}=\frac{\partial\ell}{\partial a^{[L]}}\frac{\partial a^{[L]}}{\partial z^{[L]}}
\]

首先我们先看第一项,在上面我们已经求出了 \(\frac{\partial\ell}{\partial a^{[L]}}\) 的导数即 \(-\frac{y}{a^{[L]}}\) 首先我们从分子和分母中可以看到 \(y,a^{[L]}\in\mathbb{R}^{1\times C}\) 两个都是一个 \(1\times C\) 的向量,所以可以得到 \(\frac{\partial\ell}{\partial a^{[L]}}\) 也是一个 \(1\times C\) 向量;而式子的第二项我们刚刚求出了其 雅可比矩阵 \(\frac{\partial a^{[L]}}{\partial z^{[L]}}\in\mathbb{R}^{C\times C}\) 是一个 \(C\times C\) 的矩阵,而在对 \(\frac{\partial\ell}{\partial z^{[L]}}\) 将向量和矩阵相乘,所以我们得到了一个 \(1\times C\) 的向量:

\[\begin{split}
\frac{\partial\ell}{\partial a^{[L]}}\frac{\partial a^{[L]}}{\partial z^{[L]}}&=
\begin{bmatrix}
-\frac{y_1}{a^{[L]}_1}&-\frac{y_2}{a^{[L]}_2}&\dots&-\frac{y_C}{a^{[L]}_C}
\end{bmatrix}
\begin{bmatrix}
\frac{\partial a^{[L]}_1}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_1}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_1}{\partial z^{[L]}_C}\\
\frac{\partial a^{[L]}_2}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_2}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_2}{\partial z^{[L]}_C}\\
\vdots&\vdots&\ddots&\vdots\\
\frac{\partial a^{[L]}_C}{\partial z^{[L]}_1}&\frac{\partial a^{[L]}_C}{\partial z^{[L]}_2}&\dots&\frac{\partial a^{[L]}_C}{\partial z^{[L]}C}
\end{bmatrix}\\
&=\begin{bmatrix}
-\frac{y_1}{a^{[L]}_1}\frac{\partial a^{[L]}_1}{\partial z^{[L]}_1}-\frac{y_2}{a^{[L]}_2}\frac{\partial a^{[L]}_2}{\partial z^{[L]}_1}-\dots-\frac{y_C}{a^{[L]}_C}\frac{\partial a^{[L]}_C}{\partial z^{[L]}_1}\\
-\frac{y_1}{a^{[L]}_1}\frac{\partial a^{[L]}_1}{\partial z^{[L]}_2}-\frac{y_2}{a^{[L]}_2}\frac{\partial a^{[L]}_2}{\partial z^{[L]}_2}-\dots-\frac{y_C}{a^{[L]}_C}\frac{\partial a^{[L]}_C}{\partial z^{[L]}_2}\\
\vdots\\
-\frac{y_1}{a^{[L]}_1}\frac{\partial a^{[L]}_1}{\partial z^{[L]}_C}-\frac{y_2}{a^{[L]}_2}\frac{\partial a^{[L]}_2}{\partial z^{[L]}_C}-\dots-\frac{y_C}{a^{[L]}_C}\frac{\partial a^{[L]}_C}{\partial z^{[L]}_C}\\
\end{bmatrix}^T\\
&=\begin{bmatrix}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial z^{[L]}_1}&
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial z^{[L]}_2}&
\dots&
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial z^{[L]}_C}
\end{bmatrix}
\end{split}
\]

注意第二行得到的结果应该是一个 \(1\times C\) 的向量,由于排版所以将其转置成 \(C\times 1\) 的向量,不过这毫不影响推导。

所以,根据式子的最后一步,我们可以得到,对于 \(a^{[L]}\) 上的所有元素 \(a^{[L]}_j\) 我们可以得到一个更统一化的式子:

\[\begin{split}
\frac{\partial\ell}{\partial a^{[L]}}\frac{\partial a^{[L]}}{\partial z^{[L]}}&=\begin{bmatrix}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial a^{[L]}_1}&
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial a^{[L]}_2}&
\dots&
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial a^{[L]}_C}
\end{bmatrix}\\
&=\begin{bmatrix}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial a^{[L]}_j}
\end{bmatrix},j=[1,2,\dots,C]\\
\end{split}
\]

我们观察式子的最后一项关于 \(\frac{\partial a^{[L]}_i}{\partial a^{[L]}_j}\) 我们在上面求出了其导数有两种情况:

\[\begin{split}
\frac{\partial a^{[L]}_i}{\partial a^{[L]}_j}=\left\{\begin{matrix}
a_i(1-a_j)&&i=j\\
-a_ia_j&&i\neq j
\end{matrix}\right.
\end{split}
\]

我们将这个结果带回到上面的式子中:

\[\begin{split}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial z^{[L]}_j}&=
\left\{\begin{matrix}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}a^{[L]}_i(1-a^{[L]}_j)&&i=j\\
\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}a^{[L]}_ia^{[L]}_j&&i\neq j
\end{matrix}\right.\\
&=
\left\{\begin{matrix}
-\sum_{i=1}^Cy_i(1-a^{[L]}_j)&&i=j\\
\sum_{i=1}^Cy_ia^{[L]}_j&&i\neq j
\end{matrix}\right.\\
&=
\left\{\begin{matrix}
\sum_{i=1}^Cy_ia^{[L]}_j-y_i&&i=j\\
\sum_{i=1}^Cy_ia^{[L]}_j&&i\neq j
\end{matrix}\right.
\end{split}
\]

注意虽然最后把式子推导成为两个部分,但是最原始的式子就是要把每一项 \(i\) 与 \(j\) 全部加起来,不过就是因为要区别对待 \(i,j\) 相不相等的情况,这里当 \(i=j\) 时只有一项,所以可以将前面的 \(\sum\) 符号去掉,然后把后面的 \(i\neq j\) 的项加起来,我们可以得到:

\[\begin{split}
-\sum_{i=1}^C\frac{y_i}{a^{[L]}_i}\frac{\partial a^{[L]}_i}{\partial z^{[L]}_j}&=
{\color{red}{-y_j+y_ja^{[L]}_j}}+{\color{green}{\sum_{i\in{\{i|i\neq j\}}}y_ia^{[L]}_j}}\\
&=-y_j+{\color{blue}{y_ja^{[L]}_j+\sum_{i\in{\{i|i\neq j\}}}y_ia^{[L]}_j}}\\
&=-y_j+{\color{orange}{\sum_{i=1}^Cy_ia^{[L]}_j}}\\
&=-y_j+a^{[L]}_j\sum_{i=1}^Cy_i\\
&=a^{[L]}_i-y_j\\
&=a^{[L]}-y
\end{split}
\]

首先说明一下式子的第一行,红色的部分是 \(i=j\) 的情况,只有一项,所以不需要用 \(\sum\) 符号表示,绿色部分是当 \(i\neq j\) 的情况;

在第二行中,我们可以看到,在整个蓝色的式子中,第一项是 \(i=j\) 的情况,而后面是 \(i\neq j\) 的所有项加起来,我们可以发现第一项的 \(y_j\) 正好补充了后面的 \(\sum\) 求和的部分,所以将这两项合并就到了 \(\sum_{i=1}^C\) 的项;

因为下标是 \(i\) 索引的,所以将常数项 \(a^{[L]}_j\) 提到前面来;此时观察后面的 \(\sum_{i=1}^Cy_i\) 项,根据 \(Softmax\) 多分类的情况,\(y\) 是由一个 \(1\) 和其它全 \(0\) 组成的,所以对 \(y\) 进行累加和,我们得到的是 \(1\)

最后,整理下式子,我们就能得到 \(\frac{\partial\ell}{\partial z^{[L]}}\) 的导数为 \(a^{[L]}-y\)

总结

\(Softmax\) 回归的激活部分,和使用 \(Sigmoid/ReLu\) 作为激活函数是有所不同的,因为在 \(Sigmoid/ReLu\) 中,每一个神经元计算得到 \(z\) 后不需要将其它神经元的 \(z\) 全部累加起来做概率的 归一化 ;也就是说以往的 \(Sigmoid/ReLu\) 作为激活函数,每一个神经元由 \(z\) 计算 \(a\) 时是独立于其它的神经元的;所以在反向传播求导数的时候,我们就能发现当计算 \(\frac{\partial a}{\partial z}\) 的时候,不再是单独的一一对应的关系,而是像正向传播那样,将上一层的结果全部集成到每一个神经元上,下面的图中,红色箭头表示了 \(Softmax\) 和 \(Sigmoid/ReLu\) 的反向传播的路径的有所不同。

在上图中, \(Softmax\) 层的激活的反向传播,可以看到每一个 \(a^{[L]}_i\) 都回馈到了不同的 \(z^{[L]}_j\) 的神经元上;其中红色的线表示了 \(i=j\) 的情况,其它蓝色的线表明了 \(i\neq j\) 的情况,这也说明了为什么在 \(Softmax\) 里的求导中会出现两种情况;反观第一层中的 \(Sigmoid/ReLu\) 激活中,每一个对 \(z^{[1]}_i\) 的激活都是在本地的神经元中得到的,没有其它神经单元传入的情况,所以也没有复杂的分下标 \(i,j\) 讨论求导的情况。

参考博客

  1. https://www.cnblogs.com/zhaopAC/p/9539118.html
  2. https://blog.csdn.net/xxuffei/article/details/90022008

关于 Softmax 回归的反向传播求导数过程的更多相关文章

  1. 关于 RNN 循环神经网络的反向传播求导

    关于 RNN 循环神经网络的反向传播求导 本文是对 RNN 循环神经网络中的每一个神经元进行反向传播求导的数学推导过程,下面还使用 PyTorch 对导数公式进行编程求证. RNN 神经网络架构 一个 ...

  2. BP神经网络反向传播之计算过程分解(详细版)

    摘要:本文先从梯度下降法的理论推导开始,说明梯度下降法为什么能够求得函数的局部极小值.通过两个小例子,说明梯度下降法求解极限值实现过程.在通过分解BP神经网络,详细说明梯度下降法在神经网络的运算过程, ...

  3. AI之旅(7):神经网络之反向传播

    前置知识   求导 知识地图   神经网络算法是通过前向传播求代价,反向传播求梯度.在上一篇中介绍了神经网络的组织结构,逻辑关系和代价函数.本篇将介绍如何求代价函数的偏导数(梯度). 梯度检测   在 ...

  4. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  5. 一文弄懂神经网络中的反向传播法——BackPropagation

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  6. BP(back propagation)反向传播

    转自:http://www.zhihu.com/question/27239198/answer/89853077 机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定 ...

  7. 深度神经网络(DNN)反向传播算法(BP)

    在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结. 1. DNN反向 ...

  8. [转] 一文弄懂神经网络中的反向传播法——BackPropagation

    在看CNN和RNN的相关算法TF实现,总感觉有些细枝末节理解不到位,浮在表面.那么就一点点扣细节吧. 这个作者讲方向传播也是没谁了,666- 原文地址:https://www.cnblogs.com/ ...

  9. cs231n(三) 误差反向传播

    摘要 本节将对反向传播进行直观的理解.反向传播是利用链式法则递归计算表达式的梯度的方法.理解反向传播过程及其精妙之处,对于理解.实现.设计和调试神经网络非常关键.反向求导的核心问题是:给定函数 $f( ...

随机推荐

  1. Java基础教程——正则表达式

    正则表达式·Regular Expression 正则表达式就是一个用于匹配字符串的模板,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 主要用到的对象: java.util.rege ...

  2. 蚂蚁上市员工人均一套大 House,阿里程序员身价和这匹配吗?

    作者 | 硬核云顶宫 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 上周,蚂蚁集团迎来IPO,其发行价格将达到68.8元,总市值将突破2万亿元.市场对蚂蚁的成长性有着充分的信心,为了 ...

  3. Istio 之ServiceEntry

    使用服务条目资源(ServiceEntry)可以将条目添加到 Istio 内部维护的服务注册表中.添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样.通过配置服 ...

  4. 我是如何使计算提速>150倍的

    我是如何使计算提速>150倍的 我的原始文档:https://www.yuque.com/lart/blog/lwgt38 书接上文<我是如何使计算时间提速25.6倍>. 上篇文章提 ...

  5. 前端vue小知识点

    前端转后端Json数据 this.orderList=JSON.parse(resp.parameter)

  6. Spring Boot 2.x 多数据源配置之 MyBatis 篇

    场景假设:现有电商业务,商品和库存分别放在不同的库 配置数据库连接 app: datasource: first: driver-class-name: com.mysql.cj.jdbc.Drive ...

  7. kafka 消费组功能验证以及消费者数据重复数据丢失问题说明 3

    原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 背景 上一篇文章记录了kafka的副本机制和容错功能的说明,本篇则主要在上一篇文章的基础上 ...

  8. 单调栈高封装模板hia hia hia

    这个单调栈应该可以了,舒服舒服 #include <bits/stdc++.h> using namespace std; #define limit (400000 + 5)//防止溢出 ...

  9. moviepy音视频开发:audio_loop实现音频内容循环重复

    ☞ ░ 前往老猿Python博文目录 ░ 概述 moviepy的audio_loop函数用于将音频剪辑内容循环一定次数,返回值是原剪辑内容重复指定次数对应的剪辑. 调用语法: audio_loop(a ...

  10. 《Machine Learning in Action》—— Taoye给你讲讲Logistic回归是咋回事

    在手撕机器学习系列文章的上一篇,我们详细讲解了线性回归的问题,并且最后通过梯度下降算法拟合了一条直线,从而使得这条直线尽可能的切合数据样本集,已到达模型损失值最小的目的. 在本篇文章中,我们主要是手撕 ...