因为各种复杂的原因,工作中遇到了某个模块当中的一个动态库(Linux Dynamic Shared Object,我们称其为 A.so)需要使用与整个模块不同版本的 gcc 进行编译。由于 A.so 使用了高版本 libstdc++.so 中提供的接口;因此,如果让 A.so 与整个模块运行在同一个环境(即,依赖同一个低版本的 libstdc++.so),那么,整个程序运行时将会由动态链接器提示「找不到符号」的错误。

一个「看似」可行的解决办法,是在编译 A.so 的时候,将对应的高版本的 libstdc++ 以静态的方式链接到 A.so 里面。这样,如果能把来自高版本 libstdc++.a 的符号隐藏起来(不暴露给动态链接器,避免符号冲突),那么就可以解决问题了。

然而,这个解决办法,实际上是不可行的。本文将分析为什么不可行。

阅读全文 »

前作里,我们讨论了机器学习里的偏差-方差权衡。机器学习里的损失函数(代价函数)可以用来描述模型与上帝真相(ground truth)之间的差距,因此可以解决「偏差」的问题。但是仅有损失函数时,我们无法解决方差的问题,因而会有过拟合风险。

今次我们讨论损失函数的反面——正则项,看看 $L_1$-正则项和 $L_2$-正则项是如何使机器学习模型走出过拟合的泥沼的。

阅读全文 »

准确是两个概念。准是 bias 小,确是 variance 小。准确是相对概念,因为 bias-variance tradeoff。
——Liam Huang

在机器学习领域,人们总是希望使自己的模型尽可能准确地描述数据背后的真实规律。通俗所言的「准确」,其实就是误差小。在领域中,排除人为失误,人们一般会遇到三种误差来源:随机误差、偏差和方差。偏差和方差又与「欠拟合」及「过拟合」紧紧联系在一起。由于随机误差是不可消除的,所以此篇我们讨论在偏差和方差之间的权衡(Bias-Variance Tradeoff)。

阅读全文 »

前文说了,浮动体主要是处理高度比较大,又不方便分割的内容:比如图片和表格。实际上,此类内容除了在高度上可能很高,它们也可能很宽。LaTeX 在水平方向,会贴着版芯的左边边界,开始排列内容。因此,如果一张图片或者表格的宽度超过了版芯的宽度,那么看起来就像是没有居中,而是偏右。

此篇我们讲一下如何处理此类情况。

阅读全文 »

此篇介绍一下 LaTeX 中的浮动体基本概念,以及最常见的几个问题。

浮动体是什么

在实际撰写文稿的过程中,我们可能会碰到一些占据篇幅较大,但同时又不方便分页的内容。(比如图片和表格,通常属于这样的类型)此时,我们通常会希望将它们放在别的地方,避免页面空间不够而强行置入这些内容导致 overfull vbox 或者大片的空白。此外,因为被放在别的地方,所以,我们通常需要对这些内容做一个简单的描述,确保读者在看到这些大块的内容时,不至于无从下手去理解。同时,因为此类内容被放在别的地方,所以在文中引述它们时,我们无法用「下图」、「上表」之类的相对位置来引述他们。于是,我们需要对它们进行编号,方便在文中引用。

阅读全文 »


悲剧!

如题图,GitHub 在北京时间 2017 年 2 月 23 日晚在中国大陆地区大部无法正常访问。那么,你挂在 GitHub 上的仓库们还好吗?

此篇介绍如何为 Git 仓库重新设置远程仓库。

阅读全文 »