电脑之心重新整理
参与:电脑之心杂志社
电脑自学日渐为人所知,越来越多的计算机系统生物学家和技师投身于当中。意外的是,方法论、演算法、应用、学术论文、书刊、音频等信息这般之多,很容易让新手沉沦当中,不清楚如何才能提升专业技能。责任编辑作者依照自身经验得出了两套快速进阶的可取方式及自学天然资源的进行分类汇整,电脑之心在其基础上做了阻抗,希望对听众有所帮助。
必要条件
电脑自学的基础是数学分析。数学分析并非是一个可选无须选的方法论方式,而是必不可少的支撑点。假如你是一名计算机系统技师,每天采用 UML、ORM、程序语言及其他计算机科学工具/技术,那么请眨眼几秒钟,忘记一切。这并不是说这些基本概念不重要,决不是!但电脑自学须要一类不同的方式。如今 Python 这般盛行的原因之一是其「蓝本设计速度」。在电脑自学中,一类采用录于标识符方可可视化演算法的语言绝对是必要的。
数学分析、数学分析、数理逻辑在电脑自学几乎大部份演算法中必不可少。假如你的数学分析大背景很坚实,请埃唐佩县这一rsera、单于大学或萨西拜埃),新颖且适宜各种大背景的群体。但我建议从小册子等等的易懂书刊进阶,当中大部份核心基本概念均被涉及,相对而言基本概念可在须要的时候另行查阅。这种方式虽然不如系统,但却避免了这样的瑕疵:大量艰涩基本概念使得没有坚实方法论大背景的人却步。
新手最好先自学以下内容:
数理逻辑
对数型和naturally概率分布
主要原产(拉普拉斯原产、自然对数原产、正态原产、 指数原产、 拉普拉斯原产、Beta 和 Gamma 原产)
矩估算和最大均方估算
贝叶斯统计
相关性系数和协方差(Correlation and Covariance)
数学分析
向量和矩阵
矩阵的行列式
特征向量和特征值
矩阵分解(如 SVD)
数学分析
极限与导数
微分和积分
数值计算与最优化方式
网上有很多免费天然资源,比如
《数理逻辑进阶》,Grinstead、Snell 著(https://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf)
《数学分析进阶》,Wise、Gallagher 著(http://www.stat.columbia.edu/~liam/teaching/4315-spr06/LinAlg.pdf)
《数学分析进阶》,Heinbockel 著(http://www.math.odu.edu/~jhh/Volume-1.PDF)
维基百科上也有很多好天然资源,对方程、定理等进行了清晰易懂的解释。
电脑之心也介绍过许多数学分析基础与基本概念:
深度神经网络中的数学,对你来说会不会太难?
Reddit 热门话题:如何阅读并理解学术论文中的数学分析内容?
电脑自学主要须要的数学分析基础就是数学分析、数学分析、数理逻辑,我们感觉只须要掌握大学中常见的高数、数学分析、数理逻辑与数理统计三门课程,基本上基本概念的理解就没什么问题了。假如再学一点数值计算和最优化等,我们基本上就能理解电脑自学的自学过程推导。
电脑自学方式建议(面向新手)
特征工程
开始电脑自学的第一步是理解如何评估和改进数据集的质量。管理特征的类别和缺失、归一化和降维(PCA、ICA、NMF)是大幅提高演算法性能的基本技术,而且还有助于研究如何将数据集分割成训练集和测试集、如何采取交叉验证来取代传统的测试方式。
电脑之心也曾详解过特征工程如 PCA 降维演算法的详细方法论与推导,当然我们还介绍了其它有关特征的基本概念:
基于TensorFlow理解三大降维技术:PCA、t-SNE 和自编码器
Numpy:Python 数值计算之王!
和广播(broadcasting)是非常必要的。这些技术可以帮助加速大多数演算法的自学过程,利用多线程和 SIMD、MIMD 架构的力量。
官方文档已经很完整了,不过,我还建议大家看一下以下天然资源:
《Python 数据科学手册:数据采用的核心工具》,VanderPlas J. 著
《Python 科学编程进阶书》,LangTangen P. H. 著
数据可视化
Matplotlib 即使不是纯粹的电脑自学话题,了解如何可视化数据集也很重要。Matplotlib 可能是最广泛采用的解决方案:Matplotlib 易用,允许绘制不同种类的图表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要彻底了解大部份包,但了解每一个包的优点和弱点还是很有用的,可以帮助你选择合适的包。
了解 Matplotlib 细节的天然资源:《掌握 Matplotlib》,McGreggor D. 著
线性回归
线性回归是最简单的模型之一,可以把它作为一个优化问题来研究,该问题可通过最小化均方误差而得到求解。该方式虽然有效,但限制了可利用的可能性。我建议还可以把它当作贝叶斯问题,采用之前的可能性展示参数(比如,高斯原产),优化变成了最大均方估算(Maximum Likelihood Estimation,MLE)。即使这看起来更加复杂,但该方式提供了一个可供几十个其他复杂模型共享的新方式。
Coursera 上介绍贝叶斯统计的课程:
《贝叶斯统计:从基本概念到数据分析》(https://www.coursera.org/learn/bayesian-statistics/)
《贝叶斯统计:技术与模型》(https://www.coursera.org/learn/mcmc-bayesian-statistics)
以及这两本书:
《思考贝叶斯》,Downey B. A. 著
《黑客的贝叶斯方式》Davidson-Pilon C. 著
包括线性回归在内,电脑之心曾介绍了一些解决回归问题的方式(后文提供了 CART 演算法进行回归分析):
初学TensorFlow电脑自学:如何实现线性回归?
回归、进行分类与聚类:三大方向剖解电脑自学演算法的优缺点(附Python和R实现)
线性进行分类
通常情况下,Logistic 回归是最佳起始点,也是研究信息论进而了解信息熵、交叉熵和互信息的好机会。类别交叉熵(Categorical cross-entropy)是深度自学进行分类中最稳定、采用最广泛的代价函数,一个简单的 logistic 回归可以展示它是如何加速自学过程的(与均方差相比)。另一个重要的话题是正则化(Ridge、Lasso 和 ElasticNet)。很多情况下,人们认为它是一类提高模型准确率的深奥方式,但它的真实意义是更准确,在具体实例的帮助下变得易于理解。我还建议刚开始的时候,把 logistic 回归当作一个简单的神经网络,可视化(以 2D 实例为例)权重向量在自学过程中的移动轨迹。
我还建议本节应包括超参数网格搜索。网格搜索不在没有完整了解的情况下尝试不同的值,而是评估不同的超参数集的性能。因此,技师可以将注意力集中在可达到最高准确率的组合上。当然还有更加强大的贝叶斯优化方式,即利用先验知识逼近未知目标函数的后验原产从而调节超参数的方式。
从头开始:用Python实现带随机梯度下降的Logistic回归
支持向量机(SVM)
支持向量机提供了不同的进行分类方式(包括线性和非线性方式)。该演算法非常简单,具备基础几何知识的人也可以学会。不过,了解核支持向量机的工作原理非常有用,因为它会在线性方式失败的时候展示出其真正实力。
一些有用的免费天然资源:
《支持向量机易懂教程》,Law 著
核函数方式,维基百科词条
决策树
决策树提供了另一类进行分类和回归的方式。通常,它们不是解决复杂问题的首选,但它们提供了完全不同的方式,即使是非技术人员也可以很容易理解,该方式还可以在会议或演示中可视化。
集成自学一览
在理解了决策树的动态特性以后,研究集成训练树的集(集成)来提高整体准确率的方式很有用。随机森林、梯度树提升和 AdaBoost 都是强大的演算法,且复杂度较低。对比简单的树和提升方式与 bagging 方式采用的树的自学过程挺有趣的。Scikit-Learn 提供了最常见的实现方式,但假如你想更好地驾驭这些方式,我还是建议你在 XGBoost 上多花些时间,XGBoost 是一个既适用于 CPU 又适用于 GPU 的原产式框架,即使在较大的数据集上也能加速自学过程。
从Boosting到Stacking,概览集成自学的方式与性能
聚类
当开始聚类方式的自学时,我的建议是从高斯混合演算法(基于期望最大化/EM)学起。虽然 K-均值聚类要更加简单易懂(也是必须要自学的),但高斯混合演算法为我们提供了纯粹的贝叶斯方式,在其他类似任务中也十分新颖。其它必学的演算法还有层次聚类(Hierarchical Clustering)、谱聚类(Spectral Clustering)和 DBSCAN。这对你了解基于实例的自学或研究 K-近邻演算法(既适用于有监督又适用于无监督任务)也是有帮助的。谱聚类的一个有用的免费天然资源是:
《谱聚类教程》,Von Luxburg U 著
聚类演算法是无监督自学中的代表,电脑之心也曾详细地介绍过各种聚类方式与实现:
如何用Python和电脑自学炒股赚钱?
神经网络进阶
神经网络是深度自学的基础,你可以在单独的课程中自学神经网络。但,我认为理解感知机、多层感知机以及反向传播演算法的基本概念也很有帮助。Scikit-Learn 提供了一个实现神经网络的简单方式,但,开始探索 Keras 也是一个好主意,Keras 是一个基于 Tensorflow、Theano 或 CNTK 的高级架构,允许采用最少的努力对神经网络进行可视化和训练。开始神经网络自学的一些好天然资源:
《人工神经网络基础》Hassoun M 著
《Keras 深度自学》Gulli A.、 Pal S. 著
目前最好的深度自学书刊可能就是:
《深度自学》,Goodfellow I.、 Bengio Y.、Courville A. 著
电脑之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络
深度神经网络全面概述:从基本概念到实际模型和硬件基础
TensorFlow从基础到实战:一步步教你创建交通标志进行分类神经网络
教程 | 如何用30行JavaScript标识符编写神经网络异或运算器
神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构(附学术论文)
最后,我们将介绍部分电脑之心曾发过的综述性技术文章或学术论文,并希望这些文章能对大家全面理解各种方式有所帮助:
深度强化自学综述:从AlphaGo背后的力量到自学天然资源分享
视觉问答全景概述:从数据集到技术方式
一文读懂遗传演算法工作原理(附Python实现)