欢迎关注公众号:sumsmile /专注图像处理的移动开发老兵
前言
AR最核心的技术分两部分,一是渲染,属于图形学领域,二是视觉计算,属于计算机视觉领域,一个负责算、一个复杂绘制。近代视觉技术里大量用到了机器学习/深度学习,so,想深入AR领域,有必要了解机器学习的知识。
谈到机器学习,你第一反应想到什么?“人工智能”、“高数”、“模型”、“深度学习”...等。市面上关于机器学习的资料浩如烟海,但对新手并不一定友好,这篇文章面向“零基础”读者,谈谈我对机器学习的理解。
一、什么是机器学习
你可能有下面几个困惑:
- 机器学习需要哪些数学知识?
- 啥是模型?
- 一个模型是怎么跑起来的?
- 机器学习与深度学习啥关系?
- 入门要多长时间?
先回答最后一个问题,其他的问题你耐心读完本文就明白了。
人工智能 > 机器学习 > 深度学习,其中机器学习里的神经网络在处理复杂问题有非常好的效果,独立出来形成了深度学习。好比分公司做大独立上市了。
预计读完你能收获:
- 知道什么是机器学习
- 机器学习的运行机制
- 知道哪一类问题可以用机器学习
- 和专业的算法工程师提需求,能正常沟通
- 能搭建ML环境,尝试训练简单的模型
- 后续深入学习的良好开端,事半功倍
阅读建议:
- 不要强行记忆原理与算法
- 初次接触机器学习,不要纠结数学公式
- 重在感受“机器学习运行”的机制,和我们平时从事业务开发的思路有很大区别
二、第一个例子-预测房价(用烂的例子)
通过这个例子来认识机器学习最核心的概念。
我从链家拿到北京某学区房的价格表,表中缺少了70平的数据,我们通过机器学习的方法来预测70平房子的价格。
首先把已知数据绘制成图的样式来观察:
看起来大致是一个线性关系,我们先简化问题,假设房价只和房屋面积相关,是一个线性函数,假设斜率为10,即y = 10x,画一根线表示,可以观察到70平的房子总价预测值为700W。
到这我们先停下,了解机器学习里最基础的几个概念:
- 已知的房价:机器学习里我们称为“训练样本”
- 因变量-房屋面积:特征(实际应用中的特征往往非常多,房价的影响因素也远不止面积)
- 算法模型:线性函数y=x,是参数,这里我们通过观察假设为“10”
接下来还需要补充几个重要的概念:预测函数、误差函数、目标函数。
一般在机器学习中,我们用表示预测函数,用表示模型参数:
如何确定是否合理呢?用误差值来衡量,我们定义一个误差函数:
不要被吓到了,计算的是“预测值与真实值的平方差取平均”,其实就是求方差,至于前面的除以2,暂时先不要管,没有太大意义,方便计算而已。
如果我们能得到一个函数,使得误差函数最小,那么就大功告成了,这个最小函数称为目标函数Goal:
如果到这,你还神志清醒,说明你还是有潜力的,喝口水咱们继续,毕竟你打王者荣耀排位能干一天,这点阅读量不算啥。
三、模型训练
到了机器学习关键的地方了。 我们知道了房价和面积是线性关系,如何得到一个逼近真实值的参数呢?我们用最笨的办法,挨个试,对哒,机器最适合干这种笨笨的重复工作。
我们从0、1、2....9、10、11.....100,挨个代进误差函数里计算,看哪个值最小。
并且,我们把每一个参数对应的误差值记录下来,绘制成图来观察:
我们惊喜的发现,在 = 10时,误差函数的值最小,好吧恭喜你,这个预测房价的模型训练完成了。
什么?太简单了?兄弟,机器学习里最核心的概念并不复杂,难的是在实际工程中如何选择恰当的模型、如何获取大量准确的训练样本、以及如何优雅的对接业务,甚至连训练模型的算法都有成熟的框架供开发者调用,江湖上称“算法工程师”为调参侠、炼丹道士,不是没有道理的瞎喷。
回归正题,上面是我们运气好从1开始迭代到10就找到最小值。如果运气不好,选择从0.1、0.2、0.3开始迭代呢?或者说如果参数不止一个,还有、呢?复杂度从线性变成了指数增长,稍微有点编码功底的就知道不能这么蛮干了。
机器学习中求误差函数最小值,借鉴了微积分里面的梯度(偏导)的方式,下面我们花几分钟介绍下偏导,如果你已经比较了解了,可以跳过。
多元函数的偏导:
看个例子巩固下:
偏导的几何意义:
空间几何中,求一个点的偏导,即沿着每一个坐标方向求斜率。
梯度下降,就是沿着函数偏导的方向下降,如果你对偏导还很模糊,建议你停下来上网查下偏导、梯度的详细解释,这个概念实在是太重要了。
OK,回到正题。
梯度下降的步骤,上面给出了伪代码。用文字再描述即:
- 初始化参数(、、...),比如都设置成1
- 误差函数对每一个参数求偏导
- 第一次迭代:( - * 偏导),更新到。(是一个权重,调节梯度下降的幅度,先不用管。)
- 后续迭代:重复第2、3步m次(m是我们设定的迭代次数)
- 绘图观察收敛情况,当然也可以通过程序来自动获取收敛值,绘图比较直观而已。
梯度下降很像是“你站在山坡上,沿着下山最快、最陡峭的路走向山底”,抱歉这也是个用烂的比喻,不过确实太形象了。
注意两点:
-
偏导(斜率)如果是负的,说明你在下山,( - * 偏导)增大;反之( - * 偏导)减小,往回走。偏导的正负始终引导往“山底”收敛。
-
偏导越大,说明你离山底还很远,步子可以跨大一点。上面的图中,斜率大的地方,更新的步幅较大,快接近山底(梯度最小值)时,步幅越来越小,这是合理的。如果你的步幅一直不变,就有可能在最小值附近左右震荡,无法收敛。
看一个梯度下降的示意图:
注意:不同的起始点,可能导致最后的收敛值不同,即目标函数存在多个局部最小值,下图中选择了另一组初始化参数(下山起始点)
恭喜你,如果到这里,你都听懂了,机器学习最基础的概念,你已经搞清楚了80%。
四、总结
简单总结下机器学习的流程:
- 获取训练样本
- 确定模型(线性、非线性...)
- 定义误差函数,运用梯度下降训练模型,获取最优解
- 生成模型,预测新的数据
回答本文开始的问题
机器学习需要哪些数学知识? 如果只是想简单的了解,了解梯度微分的概念就够了,如果想深入掌握,需要有良好的高数基础,包括“微积分”、“线性代数”、“概率论与数理统计”,机器学习也叫“统计学习方法”,看名字就知道是玩数学的。
啥是模型? 模型就是函数,可能参数比较多,但是逻辑不一定复杂
一个模型是怎么跑起来的? 跟运行普通的程序方法没有本质的区别
机器学习与深度学习啥关系? 见上文
入门要多长时间? 从零基础学机器学习,我参考的吴恩达老师112节视频课程,约2.5周。不过我从19年就抽时间复习数学,线性代数刷了至少两遍。
五、机器学习入门参考资料
吴恩达的教程github上有多个版本的代码实现,参考:
github.com/fengdu78/Co… github.com/nsoojin/cou…
下一篇讲“ML的开发环境”及“基础ML算法”。
欢迎关注公众号:sumsmile /专注图像处理的移动开发老兵