分享

面试官如何过招看出面试者的机器学习水平

本帖最后由 levycui 于 2019-3-12 16:10 编辑
问题导读:
1、如何理解线性回归有闭式解?
2、如何理解QR分解中两种常见的实现方法?
3、如何理解双线性汇合?
4、如何理解格拉姆矩阵展成向量的公式?





不需要考察很复杂的知识点,机器学习就和武侠小说一样,稍微过两招,对方水平怎么样,高下立判。

举个例子,就考察最基础的算法,线性回归。怎么样,没人说自己不会吧,也没人说自己不了解吧。这几乎是所有人学机器学习学的第一个算法,我们就问线性回归。我们都知道,线性回归有闭式解

2019-03-12_155036.jpg
如果我们是数学家,我们关心的是正确性和理论的优美。得到这个解之后很满意,在黑板上华丽地顿个点,擦擦手,大功告成。但是,我们是从事的是计算机科学,光理论正确是远远不够的,需要把理论应用到实际问题中去。那么,问题来了,如何在计算机实现上述公式?注意我们不是要重复造轮子,把矩阵乘法之类的自己实现一遍。现在有许多现成的工具,关键是调用哪个,如何调用。

面试者A自告奋勇,写下如下一行MATLAB代码

[mw_shl_code=python,true]x = inv(A' * A) * A' * b;[/mw_shl_code]

如果是喜欢用Python的用户,有对应的np.linalg.inv()函数。智商没问题,但是计算机和数学基础差的还很多,很有可能是看公开课自学或者外面上培训班速成的。入门级玩家,于是向他摆了摆手,面试者A灰溜溜地走了。

面试者B按耐不住了,过来写了下面的代码
[mw_shl_code=python,true]x = (A' * A) \ (A' * b);[/mw_shl_code]

Python中有对应的np.linalg.solve()函数。\操作对矩阵进行了LU分解,实际上就是我们大学线性代数天天干的高斯消去法。虽然它和直接求逆再相乘的计算复杂度都是立方复杂度,但是它们前面的系数不一样,使用LU分解的系数是求逆的三分之一。实际在计算机中实验的话,通常使用\会比使用inv快一个数量级。写出这个程度的已经可以进入下一 轮了,未来可以培养培养。

这个时候,面试者C来了,定睛一看,发现这人松形鹤骨,气宇不凡,写下了下面两行代码

[mw_shl_code=python,true][Q, R] = qr(A);
x = R \ (Q' * b);[/mw_shl_code]

周围人有点懵,这个解释起来稍微有些麻烦,需要补充一些知识。

2019-03-12_155307.jpg
2019-03-12_155342.jpg
回过头来看这个例子,
2019-03-12_155420.jpg

这个问题如果想问还可以继续问下去,在QR分解的时候有两种常见的实现方法。一种是线性代数教材里面必讲的格拉姆-施密特正交化(Gram-Schmidt orthogonalization),还有一种是可能有人都没听说过的Householder变换。如果是你,你用哪一个?

为什么我们需要了解这些内容?机器学习是计算机科学领域对数学要求最高的研究方向之一(另一个是理论计算机科学),需要我们同时有计算机和数学两方面的基础。如果在实际应用中部署过机器学习算法的读者往往会发现性能达不到自己的预期,这个时候常常会产生这样的疑问,是这个算法(或者idea)本身不work呢,还是在实现或者参数设置上没有做好?如果是使用深度学习体会可能更加明显。掌握线性回归的各种细节不是我们的最终目的,能面对实际问题诊断机器学习解决方案才是从机器学习工程师成为数据科学家的必由之路。

举个例子。为了使这个例子更有说服力,我们举一个看上去对数学要求最低的深度学习的例子。在计算机视觉领域,有一个任务是细粒度图像分类(fine-grained image classification)。相比通用图像分类,细粒度图像分类需要判断的图像类别更加精细。比如,我们需要判断该目标具体是哪一种鸟、哪一款的车、或哪一个型号的飞机。通常,这些子类之间的差异十分微小。比如,波音737-300和波音737-400的外观可见的区别只是窗户的个数不同。因此,细粒度图像分类是比通用图像分类更具有挑战性的任务。

2019-03-12_155509.jpg
2019-03-12_155533.jpg
最后将其结果给全连接层和softmax层进行分类,输出其属于各类别的概率。
  • [1]. Tsung-Yu Lin, Aruni RoyChowdhury, and Subhransu Maji. Bilinear CNN models for fine-grained visual recognition. ICCV 2015: 1449-1457.
  • [2]. Tsung-Yu Lin, Aruni RoyChowdhury, and Subhransu Maji. Bilinear convolutional neural networks for fine-grained visual recognition. TPAMI 2018, 40(6): 1309-1322.

现在,你面临一个细粒度分类的问题,于是就将双线性汇合的方法部署到你的解决方案之中,结果发现性能和主管下达的目标还有一点差距。于是,问题是,如何改进该方法以得到更好的性能?
2019-03-12_155616.jpg
将一个操作写成矩阵乘法就已经迈出了成功的第一步。这个时候,联系本文介绍的内容,你有没有什么改进的思路?如果还没有的话,阅读下面的论文,这些论文中提出的方法和本文介绍的内容有没有什么联系,为什么增加这样的操作可以提升性能?

  • [3]. Tsung-Yu Lin and Subhransu Maji. Improved bilinear pooling with CNNs. BMVC 2017.
  • [4]. Peihua Li, Jiangtao Xie, Qilong Wang, and Wangmeng Zuo. Is second-order information helpful for large-scale visual recognition? ICCV 2017: 2089-2097.
  • [5]. Qilong Wang, Peihua Li, and Lei Zhang. G2DeNet: Global Gaussian distribution embedding network and its application to visual recognition. CVPR 2017: 6507-6516.
  • [6]. Peihua Li, Jiangtao Xie, Qilong Wang, and Zilin Gao. Towards faster training of global covariance pooling networks by iterative matrix square root normalization. CVPR 2018: 947-955.
  • [7]. Xing Wei, Yue Zhang, Yihong Gong, Jiawei Zhang, and Nanning Zheng. Grassmann pooling as compact homogeneous bilinear pooling for fine-grained visual classification. ECCV 2018: 365-380.

另外一方面,由于格拉姆矩阵非常高维,有很多工作致力于设计精简双线性汇合。其中一大类方法的思路是对后续的参数矩阵进行低秩近似,一个附加的好处是进行低秩近似之后可以不需要显式地计算格拉姆矩阵。按说进行近似之后性能应该是接近原来的性能,为什么这类方法有的可以达到非常接近甚至超过原有方法的性能?

作者:张皓
来源:https://www.zhihu.com/question/62482926/answer/526304253
最新经典文章,欢迎关注公众号

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条