程序员的需要掌握的数学知识

  人工智能跟开发 APP 、后台服务器、前端相比,人工智能需要大量的数学知识。一般都需要用到哪些呢?

  • 微积分
  • 线性代数
  • 概率论
  • 最优化

  关于书籍,特别说明一下,除非你是数学知识遗忘的特别厉害了,或者是本科的时候没有学过相关数学知识,或者你对数学有强烈的兴趣,否则不建议大家抱着书去学习,会浪费大家大量的时间和精力。我们人工智能所需要的数学知识,只是书本中的一部分,大家认真听课,把我们讲解的数学知识点掌握,就足够了!我们是应用型数学,不是研究型数学,我们学了数学更不是为了做题。

微积分

  • 导数与求导公式
  • 一阶导数与函数的单调性
  • 一元函数极值判定法则
  • 高阶导数
  • 二阶导数与函数凸凹性
  • 一元函数泰勒展开式

  先说高等数学中的微积分。在机器学习中,微积分主要用到了微分部分,作用是求函数的极值,就是很多机器学习库中的求解器(solver)所实现的功能。在机器学习里会用到微积分中的以下知识点:

  • 导数和偏导数的定义与计算方法
  • 梯度向量的定义
  • 极值定理,可导函数在极值点处导数或梯度必须为0
  • 雅克比矩阵,这是向量到向量映射函数的偏导数构成的矩阵,在求导推导中会用到
  • Hessian 矩阵,这是 2 阶导数对多元函数的推广,与函数的极值有密切的联系
  • 凸函数的定义与判断方法
  • 泰勒展开公式
  • 拉格朗日乘数法,用于求解带等式约束的极值问题

  其中最核心的是记住多元函数的泰勒展开公式,根据它我们可以推导出机器学习中常用的梯度下降法,牛顿法,拟牛顿法等一系列最优化方法,泰勒公式:

  f(x)=∑n=0∞f(n)(x0)n!(x−x0)nf(x) = \displaystyle\sum_{n = 0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x - x_0)^nf(x)=n=0∑∞​n!f(n)(x0​)​(x−x0​)n

  泰勒公式一阶展开:

  f(x)≈f(x0)+f′(x0)(x−x0)f(x) \approx f(x_0) + f^{'}(x_0)(x - x_0)f(x)≈f(x0​)+f′(x0​)(x−x0​)

  泰勒公式二阶展开:

  f(x)≈f(x0)+f′(x0)(x−x0)+12f′′(x0)(x−x0)2f(x) \approx f(x_0) + f^{'}(x_0)(x - x_0) + \frac{1}{2}f^{''}(x_0)(x - x_0)^2f(x)≈f(x0​)+f′(x0​)(x−x0​)+21​f′′(x0​)(x−x0​)2

  微积分和线性代数,微积分中会用到大量线性代数的知识,线性代数中也会用到微积分的知识,两者相辅相成。

  参考书目:

线性代数

  • 向量及其运算

  • 矩阵及其运算

  • 张量

  • 行列式

  • 二次型

  • 特征值与特征向量

  相比之下,线性代数用的更多。在机器学习的几乎所有地方都有使用,具体用到的知识点有:

  • 向量和它的各种运算,包括加法,减法,数乘,转置,内积
  • 向量和矩阵的范数,L1 范数和 L2 范数
  • 矩阵和它的各种运算,包括加法,减法,乘法,数乘
  • 逆矩阵的定义与性质
  • 行列式的定义与计算方法
  • 二次型的定义
  • 矩阵的正定性
  • 矩阵的特征值与特征向量
  • 矩阵的奇异值分解
  • 线性方程组的数值解法,尤其是共轭梯度法
  • 常用的矩阵和向量求导公式

  机器学习算法处理的数据一般都是向量、矩阵或者张量。经典的机器学习算法输入的数据都是特征向量,深度学习算法在处理图像时输入的 2 维的矩阵或者 3 维的张量。掌握这些知识会使你游刃有余。

  参考书目:

概率论

  • 随机事件与概率
  • 条件概率和贝叶斯公式
  • 随机变量
  • 随机变量的期望和方差常用概率分布(正太分布、均匀分布、伯努利二项分布)
  • 随机向量(合概率密度函数等)
  • 协方差与协方差矩阵
  • 最大似然估计

  如果把机器学习所处理的样本数据看作随机变量/向量,我们就可以用概率论的观点对问题进行建模,这代表了机器学习中很大一类方法。在机器学习里用到的概率论知识点有:

  • 随机事件的概念,概率的定义与计算方法
  • 随机变量与概率分布,尤其是连续型随机变量的概率密度函数和分布函数
  • 条件概率与贝叶斯公式
  • 常用的概率分布,包括正态分布,伯努利二项分布,均匀分布
  • 随机变量的均值与方差,协方差
  • 随机变量的独立性
  • 最大似然估计

  参考书目:

最优化

  最后要说的是最优化,因为几乎所有机器学习算法归根到底都是在求解最优化问题。 求解最优化问题的指导思想是在极值点处函数的导数/梯度必须为0。因此你必须理解梯度下降法,牛顿法这两种常用的算法,它们的迭代公式都可以从泰勒展开公式中得到。如果能知道坐标下降法、拟牛顿法就更好了。

  凸优化是机器学习中经常会提及的一个概念,这是一类特殊的优化问题,它的优化变量的可行域是凸集,目标函数是凸函数。凸优化最好的性质是它的所有局部最优解就是全局最优解,因此求解时不会陷入局部最优解。如果一个问题被证明为是凸优化问题,基本上已经宣告此问题得到了解决。在机器学习中,线性回归、岭回归、 支持向量机、logistic 回归等很多算法求解的都是凸优化问题。

  拉格朗日乘子法将带约束(等式和不等式)的优化问题构造成拉格朗日函数。通过这一步变换,将带约束条件的问题转换成不带约束条件的问题。通过变换原始优化变量和拉格朗日乘子的优化次序,进一步转换为对偶问题,如果满足某种条件,原问题和对偶问题是等价的。这种方法的意义在于可以将一个不易于求解的问题转换成更容易求解的问题。在支持向量机中有拉格朗日对偶的应用。

  KKT条件是拉格朗日乘子法对带不等式约束问题的推广,它给出了带等式和不等式约束的优化问题在极值点处所必须满足的条件。在支持向量机中也有它的应用。 如果你没有学过最优化方法这门课也不用担心,这些方法根据微积分和线性代数的基础知识可以很容易推导出来。如果需要系统的学习这方面的知识,可以阅读《凸优化》这本经典教材。

  参考书目:

算法或理论 相关数学知识
KNN 距离函数
决策树 概率、熵、Gini系数
贝叶斯分类器 随机变量、贝叶斯公式、随机变量独立性、正态分布、最大似然估计
PCA 协方差、散布矩阵、特征值特征向量
线性判别 散布矩阵、逆矩阵、特征值特征向量
支持向量机 点到面举例、Slater条件、强对偶、拉格朗日函数、KKT条件、凸优化、核函数、Mercer条件
Logistic 概率、随机变量、最大似然估计、梯度下降法、凸优化、牛顿法
随机森林 抽样、概率、方差
AdaBoost 概率、随机变量、极值定理、数学期望、牛顿法
隐马尔科夫模型 概率、离散型随机变量、条件概率、随机变量独立性、最大似然估计、拉格朗日乘子法
条件随机场 条件概率、数学期望、最大似然估计
高斯混合模型 正太分布、最大似然估计、Jensen不等式
人工神经网络 梯度下降、链式法则、BP反向传播
卷积神经网络 梯度下降、链式法则、BP反向传播
循环神经网络 梯度下降、链式法则、BP反向传播
对抗神经网络 梯度下降、链式法则、BP反向传播、极值定理、Kullback-Leibler散度、Jensen-Shannon散度、测地举例、条件分布、互信息
K-Means 距离函数
贝叶斯网络 条件概率、贝叶斯公式、图
VC维 Hoeffding不等式

  出现频率最高的是优化方法,拉格朗日乘数法,梯度下降法,牛顿法,凸优化。其次是概率论知识,随机变量,贝叶斯公式,随机变量独立性,正太分布,最大似然估计。再次是线性代数知识,几乎所有都会涉及到向量、矩阵、张量的计算,包括特征值和特征向量,很多算法都会最终变成求解特征值和特征向量问题。

  微积分的知识比如链式法则。 除了主体这些数学知识,会用到微分几何中的流形、测地线、测地距离的概念。 支持向量机会用到 Mercer 条件、核函数,涉及到泛函分析和识别函数的范畴。 再比如说人工神经网络的证明,万能逼近定理会用到泛函分析和识别函数的内容,用来证明这样一个函数可以来逼近任何形式的函数。离散数学的知识比如图论、树在机器学习里面也会用到,但是用的都是比较简单的。

  所以说我们只有掌握好微积分、线性代数、概率论还有一些优化的算法,我们就能看懂所有的机器学习算法了。像刚才说的一些相对高深的微分几何、泛函分析和识别函数,它们主要用在一些基础理论证明上面,说白了就是证明一些算法的合理性,你即使看不懂这些证明,它也不影响你理解这些算法的推导、思想和使用。

下一关更新《一元函数的微分》!
持续更新中……

程序员的需要掌握的数学知识相关推荐

  1. 程序员需要学习太多数学知识吗?

    如果你想当一个顶级程序员,梦想着改变世界,那么数学对你来说就很重要了." 数学对我们每一个程序员来说,都是最熟悉的陌生人.你从小就开始学习数学,那些熟悉的数学定理和公式陪伴你走过好多年.但是 ...

  2. 好程序员分享24个canvas基础知识小结

    好程序员分享24个canvas基础知识小结,非常全面详尽,推荐给大家. 现把canvas的知识点总结如下,以便随时查阅. 1.填充矩形 fillRect(x,y,width,height); 2.绘制 ...

  3. unicode 编码转换漏洞_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  4. python编码转换语句_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  5. 程序员如何学习更好的知识_如何保持学习并成为更好的程序员

    程序员如何学习更好的知识 by Kevin Gardner 凯文·加德纳(Kevin Gardner) 如何保持学习并成为更好的程序员 (How to keep learning and become ...

  6. 多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

  7. 程序员需要了解的硬核知识之操作系统和应用

    作者 | cxuan 责编 | maozz 利用计算机运行程序大部分都是为了提高处理效率.例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft ...

  8. 好程序员分享24个canvas基础知识小结 1

    好程序员分享24个canvas基础知识小结,非常全面详尽,推荐给大家. 现把canvas的知识点总结如下,以便随时查阅. 1.填充矩形 fillRect(x,y,width,height); 2.绘制 ...

  9. java前台界面设计_前端程序员要懂的 UI 设计知识

    前端程序员要懂的 UI 设计知识 疯狂的技术宅 前端先锋 翻译:疯狂的技术宅 作者:Per Harald Borgen 来源:freecodecamp 正文共:1401 字 预计阅读时间:5分钟 作为 ...

  10. 程序员需要了解的硬核知识之控制硬件

    应用和硬件的关系 我们作为程序员一般很少直接操控硬件,我们一般通过 C.Java 等高级语言编写的程序起到间接控制硬件的作用.所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 ...

最新文章

  1. 电脑怎么分屏2个显示器_程序员一台电脑装2个显示屏?因为专业
  2. 2021年下半年,你还可以把论文投给这 9 个国际会议
  3. Hibernate性能提升
  4. 为何excel中数据无法计算机,excel表格内数据为何无法计算机-为什么EXCEL单元格内的数字不能运算...
  5. 想做DBA,多租户管理你一定要知道这些
  6. 你第一次去丈母娘家时发生了哪些趣事?
  7. pytorchgpu测试_pytorch学习(十)—训练并测试CNN网络
  8. 拓端tecdat|R语言ARIMA、GARCH 和 VAR模型估计、预测ts 和 xts格式时间序列
  9. Tik Tok账号被封了怎么办?
  10. 一个人靠不靠谱,在于能力是否配得上承诺
  11. SDK是什么?什么是SDK
  12. Unity播放视频OGV格式视频
  13. 纯CSS3模拟iPhone X背景切换动画
  14. 一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(以北为y轴正向,以东为x轴正向)。小车会受到一系列依照时间戳记排序的命令,1表示“向左转”
  15. 学生学籍管理系统简单设计(上)
  16. Java Web之过滤器的简单创建
  17. 无线传感网路由协议(一)
  18. linux寄存器位运算,位运算的一些操作
  19. 半加器、全加器及其应用
  20. vue2 watch监听中调用methods方法

热门文章

  1. QQ聊天记录恢复、迁移教程(改变默认存储位置、个人文件夹保存位置)
  2. 掌握Android阅读源码的两种简单方式
  3. 染色问题 —— 扇形涂色
  4. 电脑广告太多,请避免安装这些软件
  5. C语言函数调用的方式求两个数的大小
  6. java类与对象实验报告心得体会_java实验报告心得体会
  7. 吉利车机安装第三方软件教程(win10笔记本详细操作方法)
  8. QT编程入门系列文章之三十三——国际化(上)
  9. 彩虹查课插件 使用说明 网课查询插件 极速版
  10. vivo发布OriginOS Ocean,国产定制系统越来越好了