矩阵运算在机器学习中的若干应用

作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591

矩阵运算在机器学习中的若干应用_第1张图片

批量加权求和

logistic回归在对权值向量进行训练的过程可以矩阵化。

首先我们看权值向量的修正方向,即对误差函数在所有训练集上对进行求导

矩阵运算在机器学习中的若干应用_第2张图片

对求导结果的计算式可以作如下说明:

是一个标量,是一个向量,计算式可以可以解释为:以标量作为权重对其对应的向量进行加权,然后把加权后得到的向量进行求和,得到一个新的向量,这个向量就是权值向量的修正方向。示意图如下:

矩阵运算在机器学习中的若干应用_第3张图片


把该过程改造成矩阵形式,如下:

矩阵运算在机器学习中的若干应用_第4张图片

只加权不求和的情况下,就比较棘手了,比如下面的矩阵求导问题:

矩阵运算在机器学习中的若干应用_第5张图片

推导如下:

矩阵运算在机器学习中的若干应用_第6张图片

可以看到求导结果是个的矩阵,这个矩阵是矩阵的第列分别用的第个元素加权得到的,这个结果无法用最初的向量和矩阵来表示。

马氏距离

经调查,某个濒危物种最适合生存的几处自然保护区的环境参数(只获取到两个参数,分别是海拔 Elevation和地形陡峭程度Slope)的均值和方差如下:

如果给了某处的环境Elevation和Slope参数,我们就可以根据马氏距离计算此处与适宜的环境的参数的马氏距离,进而确定此处是否适合建立该濒危物种的自然保护区。
矩阵运算在机器学习中的若干应用_第7张图片
现在我们拥有n个地区的Elevation和Slope参数,怎么计算呢?
当然可以按地区依次计算获取n个地区的与适宜环境的马氏距离,只是太麻烦了。能否用矩阵方式批量计算呢?我们试一下:

从结果的维数就可以看出这种计算方法不对。

矩阵运算在机器学习中的若干应用_第8张图片
观察上图,将矩阵计算与普通计算相比较,发现第一步矩阵乘积是正确的,矩阵乘相当于多个普通计算过程的并行过程。

矩阵运算在机器学习中的若干应用_第9张图片

由上图可知,矩阵计算的第二步矩阵乘出错。

怎么破呢?我们将第二项获得的结果转置,再与点乘,再将得到的矩阵在列上求和,就得到,如下:

矩阵运算在机器学习中的若干应用_第10张图片


有点乘和矩阵乘的求导

在矩阵运算中,经常用于求导运算的链式法则在这里将不再适用,下面两个例子说明了我们的解决方案。

矩阵运算在机器学习中的若干应用_第11张图片

矩阵运算在机器学习中的若干应用_第12张图片

矩阵运算在机器学习中的若干应用_第13张图片

参考文献

  • 机器学习中的向量求导法则 
    http://www.verydemo.com/demo_c161_i98742.html 
  • 矩阵求导
    http://wenku.baidu.com/view/fce160acdd3383c4bb4cd283.html
  • 上海交大数学系,有课程介绍及课件
    http://math.sjtu.edu.cn/course/Matrix/
    http://math.sjtu.edu.cn/course/ 
  • 分分钟推导神经网络
    https://www.zybuluo.com/Feiteng/note/20154

相关代码:

  • LaTeX代码
    \documentclass[11pt]{ctexart}
    \usepackage{mathtools}
    \usepackage{bm}
    \begin{document}
    \section{维度上做文章}
    $J=(\bm{X}\bm{w}-\bm{y})^T(\bm{X}\bm{w}-\bm{y})=||\bm{X}\bm{w}-\bm{y}||^2$, 其中$\bm{X}\in R^{m \times n}$,$ \bm{w} \in R^{n \times 1}$, $\bm{y} \in R^{m \times 1}$,
    求$\frac{\partial J}{\partial \bm{X}}$、$\frac{\partial J}{\partial \bm{w}}$、$\frac{\partial J}{\partial \bm{y}}$
    
    依据链式法则有$\frac{\partial J}{\partial \bm{X}}=2(\bm{X}\bm{w}-\bm{y})\bm{w}$、$\frac{\partial J}{\partial \bm{w}}=2(\bm{X}\bm{w}-\bm{y})\bm{X}$、$\frac{\partial J}{\partial \bm{y}}=-2(\bm{X}\bm{w}-\bm{y})$。 可以看出除了$\frac{\partial J}{\partial \bm{y}}=-2(\bm{X}\bm{w}-\bm{y})$,$\frac{\partial J}{\partial \bm{X}}$ 和$\frac{\partial J}{\partial \bm{w}}$ 的求导结果表达式连矩阵乘法的维度要求都不满足,从而可知链式法则再次并不适用。
    
    依据维数相容原则$\frac{\partial J}{\partial \bm{X}} \in R^{m \times n}$,但是$2(\bm{X}\bm{w}-\bm{y})\bm{w}$中$ (\bm{X}\bm{w}-\bm{y})\in R^{m \times 1}$、$\bm{w} \in R^{n \times 1}$,自然地我们调整为 $\frac{\partial J}{\partial \bm{X}}=2(\bm{X}\bm{w}-\bm{y})\bm{w}^T$。同理:$\frac{\partial J}{\partial \bm{w}} \in R^{n \times 1}$, 但是 $2(\bm{X}\bm{w}-\bm{y})\bm{X}$中$ (\bm{X}\bm{w}-\bm{y}) \in R^{m \times 1}$、$\bm{X} \in R^{m \times n}$,那么通过换序和转置我们可以得到维度符合的结果$2\bm{X}^T(\bm{X}\bm{w}-\bm{y})$
    \section{logistic的例子}
    \begin{table}[h]
      \centering
      \begin{tabular}{c|c|l}
        \hline
        Label&Dimension&Meanings\\
        \hline
        $\bm{w}$&$k\times 1$&权值向量\\
        $\bm{X}$&$k \times n$&输入数据\\
        $\bm{h}$&$1 \times n$&模型输出\\
        $\bm{y}$&$1 \times n$&真实的输出数据\\
        $E$&$1 \times 1$&误差函数\\
        \hline
      \end{tabular}
    \end{table}
    其中$\bm{y}$和$E$的表达式为
    \begin{equation*}
    \begin{split}
      \bm{h}&=\frac{1}{1+e^{-\bm{w}^{T}\bm{X}}}\\
      E&=\frac{1}{2}(\bm{y}-\bm{h})(\bm{y}-\bm{h})^{T}
    \end{split}
    \end{equation*}
    \par 下面求$E$关于$\bm{w}$的导数:
    \par 我们定义以下变量:
    \begin{table}[h]
      \centering
      \begin{tabular}{c|c|c}
        \hline
        Label&Repression&Dimension\\
        \hline
        $\bm{A}$&$\bm{y}-\bm{h}$&$1 \times n$\\
        $\bm{B}$&$-\bm{w}^{T}\bm{X}$&$1 \times n$\\
        $\bm{C}$&$\frac{1}{1+e^{\bm{B}}}$&$1 \times n$\\
        \hline
      \end{tabular}
    \end{table}
    \par 我们定义函数
    \begin{equation*}
      f(.)
    \end{equation*}
    \par $f(.)$输入变量之间可以任意以{\bf 点乘}或{\bf 矩阵乘}组合,则本题的求导可以作如下分解:
    \begin{equation*}
      \frac{\partial E}{\partial \bm{w}} = f\left(\frac{\partial E}{\partial \bm{A}},\frac{\partial \bm{A}}{\partial \bm{h}},\frac{\partial \bm{h}}{\partial \bm{B}},\frac{\partial \bm{B}}{\partial \bm{w}}\right)
    \end{equation*}
    \par 我们为什么不直接写成如下形式呢?
    \begin{equation*}
      \frac{\partial E}{\partial \bm{w}} = \frac{\partial E}{\partial \bm{A}}\cdot \frac{\partial \bm{A}}{\partial \bm{h}}\cdot \frac{\partial \bm{h}}{\partial \bm{B}}\cdot \frac{\partial \bm{B}}{\partial \bm{w}}
    \end{equation*}
    \par 这是因为链式法则在矩阵求导中已经不再适用,而且我们不知道两个导数之间的算子是矩阵乘还是点乘,这也是我们定义$f(.)$的原因。下面我们的任务就是找到分解出的求导的各个部分的顺序和相邻两部分之间的算子。
    \subsection{维度分析}
    \par 下面是各部分的维度列表:
    \begin{table}[h]
      \centering
      \begin{tabular}{c|c}
        \hline
        Repression&Dimension\\
        \hline
        $\frac{\partial E}{\partial \bm{w}}$&$k \times 1$\\
        $\frac{\partial E}{\partial \bm{A}}$&$1 \times n$\\
        $\frac{\partial \bm{A}}{\partial \bm{h}}$&$1 \times n$\\
        $\frac{\partial \bm{h}}{\partial \bm{B}}$&$1 \times n$\\
        $\frac{\partial \bm{B}}{\partial \bm{w}}$&$k \times n$\\
        \hline
      \end{tabular}
    \end{table}
    由上表列出的维度关系,就可以推出导数的表达式,即上表4个导数的关系为
    \begin{equation*}
      \frac{\partial E}{\partial \bm{w}} = \frac{\partial \bm{B}}{\partial \bm{w}}\times\left(\frac{\partial E}{\partial \bm{A}}.*\frac{\partial \bm{A}}{\partial \bm{h}}.* \frac{\partial \bm{h}}{\partial \bm{B}}\right)
    \end{equation*}
    \subsection{关系式的分析}
    \par 另外看$\bm{A}$和$\bm{B}$的关系式:
    \begin{equation*}
     \bm{A}=\bm{y}-\frac{1}{1+e^{\bm{B}}}
    \end{equation*}
    \par 可以看出$\bm{A}$、$\bm{B}$之间不存在矩阵乘运算且维度相同,故求导的公式里$\frac{\partial \bm{A}}{\partial \bm{h}}$和$\frac{\partial \bm{h}}{\partial \bm{B}}$之间应为点乘运算。这一点也可以用在构建导数关系式上。
    
    \end{document}




你可能感兴趣的:(批量处理,加权,矩阵求导,维数,链式法则)