-
参数估计与假设检验: 参数估计(Parameter Estimation)是指用样本的统计量去估计总体参数,包括点估计与区间估计。 点估计(Point Estimation) 区间估计(Interval Estimation)
-
贝叶斯推理
-
自举(Bootstrapping)
-
回归分析
-
Logistic 回归
-
Do We Really Need Model Compression? 指出,模型压缩技术说明了过参数化的模型趋向于收敛到哪些类型的解上,从而提示我们如何训练适当参数化的模型。目前有许多类型的模型压缩方法,每一种都利用了训练好的神经网络中易于发现的不同类型的「朴素特性」:
许多权值接近于 0(剪枝) 权值矩阵是低秩的(权值分解) 权值可以被表征为少数几个比特(量化) 网络的层通常会学习到相似的函数(权值共享)
Model compression techniques give us a hint about how to train appropriately-parameterized models by elucidating the types of solutions over-parameterized models tend to converge to. There are many types of model compression, and each one exploits a different type of “simplicity” that tends to be found in trained neural networks:
Many weights are close to zero (Pruning) Weight matrices are low rank (Weight Factorization) Weights can be represented with only a few bits (Quantization) Layers typically learn similar functions (Weight Sharing)
剪裁:类似“化学结构式的减肥”,将模型结构中对预测结果不重要的网络结构剪裁掉,使网络结构变得更加 ”瘦身“。比如,在每层网络,有些神经元节点的权重非常小,对模型加载信息的影响微乎其微。如果将这些权重较小的神经元删除,则既能保证模型精度不受大影响,又能减小模型大小。
量化:类似“量子级别的减肥”,神经网络模型的参数一般都用float32的数据表示,但如果我们将float32的数据计算精度变成int8的计算精度,则可以牺牲一点模型精度来换取更快的计算速度。
蒸馏:类似“老师教学生”,使用一个效果好的大模型指导一个小模型训练,因为大模型可以提供更多的软分类信息量,所以会训练出一个效果接近大模型的小模型。
神经网络架构搜索(NAS):类似“化学结构式的重构”,以模型大小和推理速度为约束进行模型结构搜索,从而获得更高效的网络结构。
除此以外,还有权重共享、低秩分解等技术也
Law of Demeter – 迪米特法则
迪米特法则(Law of Demeter),又称“最少知识原则”(Principle of Least Knowledge),其来源于1987年荷兰大学的一个叫做Demeter的项目。Craig Larman把Law of Demeter又称作“不要和陌生人说话”。在《程序员修炼之道》中讲LoD的那一章叫作“解耦合与迪米特法则”。关于迪米特法则有一些很形象的比喻:
- 如果你想让你的狗跑的话,你会对狗狗说还是对四条狗腿说?
- 如果你去店里买东西,你会把钱交给店员,还是会把钱包交给店员让他自己拿?
和狗的四肢说话?让店员自己从钱包里拿钱?这听起来有点荒唐,不过在我们的代码里这几乎是见怪不怪的事情了。
对于LoD,正式的表述如下:
对于对象 ‘O’ 中一个方法’M’,M应该只能够访问以下对象中的方法:
- 对象O;
- 与O直接相关的Component Object;
- 由方法M创建或者实例化的对象;
- 作为方法M的参数的对象。
在《Clean Code》一书中,有一段Apache framework中的一段违反了LoD的代码:
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
这么长的一串对其它对象的细节,以及细节的细节,细节的细节的细节……的调用,增加了耦合,使得代码结构复杂、僵化,难以扩展和维护。
在《重构》一书中的代码的环味道中有一种叫做“Feature Envy”(依恋情结),形象的描述了一种违反了LoC的情况。Feature Envy就是说一个对象对其它对象的内容更有兴趣,也就是说老是羡慕别的对象的成员、结构或者功能,大老远的调用人家的东西。这样的结构显然是不合理的。我们的程序应该写得比较“害羞”。不能像前面例子中的那个不把自己当外人的店员一样,拿过客人的钱包自己把钱拿出来。“害羞”的程序只和自己最近的朋友交谈。这种情况下应该调整程序的结构,让那个对象自己拥有它羡慕的feature,或者使用合理的设计模式(例如Facade和Mediator)。