标签:sum 如图所示 ldo 参数 one 输入数据 函数 embedding 机器学习
2020.2.22.从本篇开始,所有文章使用markdown编辑
为什么使用FM?
机器学习的通常模式为学习输入到输出的变换,比如最常见的线性回归模型,对于特征向量
\(X=\left(x_{1}, x_{2}, \ldots, x_{n}\right)^{T}\)
我们有目标预估函数
\(\begin{aligned} \hat{y}(x) &=w_{0}+w_{1} x_{1}+w_{2} x_{2}+\ldots w_{n} x_{n} \\ &=w_{0}+\sum_{i=1}^{n} w_{n} x_{n} \end{aligned}\)
线性回归是最简单的线性模型,是基于各个特征独立同分布的假设,只能捕捉到一阶线性关系。
事实上,各个特征并不是相互对立的,有些特征是相互影响的,此时就有了二阶特征表达式,考虑了两个特征变量之间的交互影响。
\(\widehat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{n} x_{n}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}\)
这里每俩个特征就有一个参数\(W_{1 j}\)需要学习。但是这里有一个问题,对于二项式回归来说,如果有n个特征,那么就要学习到俩俩之间的关系,那么就有n(n-1)/2个参数需要学习,参数数量特别多。
既然每一个参数\(W_{1 j}\)都是二阶特征,我们可以把对于\(W_{1 j}\)的估计,转换成为矩阵分解MF问题:
\(\hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{n} x_{n}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}\)
\(\hat{y}(x)=w_{0}+\sum_{i=1}^{n} w_{n} x_{n}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle V_{i}, V_{j}\right\rangle x_{i} x_{j}\)
\(\left\langle V_{i}, V_{j}\right\rangle:=\sum_{f=1}^{k} v_{i, f} \cdot v_{j, f}\)
如果直接计算,如图所示,复杂度为\(O\left(k^{*} n^{2}\right)\),n是特征个数,K是特征的embedding size。虽然复杂度很高,但是可以优化。
如果训练的输入数据有n个特征,设i,j俩个特征的相互关系可以用参数\(W_{1 j}\)表示,那么\(w_{i, j}=w_{j, i}\),这样所有w的参数值会形成一个对称的矩阵如下。
none \(w_{1,2} w_{1,3} w_{1,4} \ldots w_{1, n}\)
\(w_{2,1}\) none \(w_{2,3} w_{2,4} \ldots w_{2, n}\)
\(w_{n, 1} w_{n, 2} w_{n, 3} \dots w_{n, n-1}\) none
这个矩阵没有对角线,而且我们只要这个矩阵的一半即可。
\(\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle V_{i}, V_{j}\right\rangle x_{i} x_{j}\)
\(=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle V_{i}, V_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle V_{i}, V_{i}\right\rangle x_{i} x_{i}\)
\(=\frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{i}\right)\)
\(=\frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right)\)
\(=\frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right)\)、
从而复杂度变为\(O\left(k^{*} n^{2}\right)=>O\left(k^{*} n\right)\),而且基于矩阵分解的思想,将以上矩阵分解为俩个低阶矩阵的乘积,那么在分解过程中,减少了数据存储的复杂度。
标签:sum 如图所示 ldo 参数 one 输入数据 函数 embedding 机器学习
原文地址:https://www.cnblogs.com/guangluwutu/p/12347238.html