机器学习入门及实践(一)

379 阅读8分钟

image.png

欢迎关注公众号:sumsmile /专注图像处理的移动开发老兵

前言

AR最核心的技术分两部分,一是渲染,属于图形学领域,二是视觉计算,属于计算机视觉领域,一个负责算、一个复杂绘制。近代视觉技术里大量用到了机器学习/深度学习,so,想深入AR领域,有必要了解机器学习的知识。

谈到机器学习,你第一反应想到什么?“人工智能”、“高数”、“模型”、“深度学习”...等。市面上关于机器学习的资料浩如烟海,但对新手并不一定友好,这篇文章面向“零基础”读者,谈谈我对机器学习的理解。

一、什么是机器学习

image.png

你可能有下面几个困惑:

  • 机器学习需要哪些数学知识?
  • 啥是模型?
  • 一个模型是怎么跑起来的?
  • 机器学习与深度学习啥关系?
  • 入门要多长时间?

先回答最后一个问题,其他的问题你耐心读完本文就明白了。

人工智能 > 机器学习 > 深度学习,其中机器学习里的神经网络在处理复杂问题有非常好的效果,独立出来形成了深度学习。好比分公司做大独立上市了。

image.png

预计读完你能收获:

  • 知道什么是机器学习
  • 机器学习的运行机制
  • 知道哪一类问题可以用机器学习
  • 和专业的算法工程师提需求,能正常沟通
  • 能搭建ML环境,尝试训练简单的模型
  • 后续深入学习的良好开端,事半功倍

阅读建议:

  • 不要强行记忆原理与算法
  • 初次接触机器学习,不要纠结数学公式
  • 重在感受“机器学习运行”的机制,和我们平时从事业务开发的思路有很大区别

二、第一个例子-预测房价(用烂的例子)

通过这个例子来认识机器学习最核心的概念。

我从链家拿到北京某学区房的价格表,表中缺少了70平的数据,我们通过机器学习的方法来预测70平房子的价格。

image.png

首先把已知数据绘制成图的样式来观察:

image.png

看起来大致是一个线性关系,我们先简化问题,假设房价只和房屋面积相关,是一个线性函数,假设斜率为10,即y = 10x,画一根线表示,可以观察到70平的房子总价预测值为700W。

image.png

到这我们先停下,了解机器学习里最基础的几个概念:

  • 已知的房价:机器学习里我们称为“训练样本”
  • 因变量-房屋面积:特征(实际应用中的特征往往非常多,房价的影响因素也远不止面积)
  • 算法模型:线性函数y=x,是参数,这里我们通过观察假设为“10”

接下来还需要补充几个重要的概念:预测函数、误差函数、目标函数。

一般在机器学习中,我们用hθ{h_\theta}表示预测函数,用θi{\theta_i}表示模型参数:

image.png

如何确定hθ{h_\theta}是否合理呢?用误差值来衡量,我们定义一个误差函数:

image.png

不要被吓到了,计算的是“预测值与真实值的平方差取平均”,其实就是求方差,至于前面的除以2,暂时先不要管,没有太大意义,方便计算而已。

image.png

如果我们能得到一个Jθ{J_\theta}函数,使得误差函数最小,那么就大功告成了,这个最小函数称为目标函数Goal:

image.png

如果到这,你还神志清醒,说明你还是有潜力的,喝口水咱们继续,毕竟你打王者荣耀排位能干一天,这点阅读量不算啥。

三、模型训练

到了机器学习关键的地方了。 我们知道了房价和面积是线性关系,如何得到一个逼近真实值的参数呢?我们用最笨的办法,挨个试,对哒,机器最适合干这种笨笨的重复工作。

我们从0、1、2....9、10、11.....100,挨个代进误差函数里计算,看哪个值最小。

image.png

并且,我们把每一个参数对应的误差值记录下来,绘制成图来观察:

image.png

我们惊喜的发现,在 θ{\theta} = 10时,误差函数的值最小,好吧恭喜你,这个预测房价的模型训练完成了。

什么?太简单了?兄弟,机器学习里最核心的概念并不复杂,难的是在实际工程中如何选择恰当的模型、如何获取大量准确的训练样本、以及如何优雅的对接业务,甚至连训练模型的算法都有成熟的框架供开发者调用,江湖上称“算法工程师”为调参侠、炼丹道士,不是没有道理的瞎喷。

回归正题,上面是我们运气好从1开始迭代到10就找到最小值。如果运气不好,选择从0.1、0.2、0.3开始迭代呢?或者说如果参数θj{\theta_j}不止一个,还有、呢?复杂度从线性变成了指数增长,稍微有点编码功底的就知道不能这么蛮干了。

机器学习中求误差函数最小值,借鉴了微积分里面的梯度(偏导)的方式,下面我们花几分钟介绍下偏导,如果你已经比较了解了,可以跳过。

多元函数的偏导:

image.png

看个例子巩固下:

image.png

偏导的几何意义:

image.png

空间几何中,求一个点的偏导,即沿着每一个坐标方向求斜率。

梯度下降,就是沿着函数偏导的方向下降,如果你对偏导还很模糊,建议你停下来上网查下偏导、梯度的详细解释,这个概念实在是太重要了。

OK,回到正题。

image.png

梯度下降的步骤,上面给出了伪代码。用文字再描述即:

  • 初始化参数θj{\theta_j}(θ0{\theta_0}θ1{\theta_1}θ2{\theta_2}...),比如都设置成1
  • 误差函数对每一个参数求偏导
  • 第一次迭代:( θj{\theta_j} - * 偏导),更新到。(是一个权重,调节梯度下降的幅度,先不用管。)
  • 后续迭代:重复第2、3步m次(m是我们设定的迭代次数)
  • 绘图观察收敛情况,当然也可以通过程序来自动获取收敛值,绘图比较直观而已。

梯度下降很像是“你站在山坡上,沿着下山最快、最陡峭的路走向山底”,抱歉这也是个用烂的比喻,不过确实太形象了。

注意两点:

  • 偏导(斜率)如果是负的,说明你在下山,( θj{\theta_j} - α{\alpha}* 偏导)增大;反之( θj{\theta_j} - α{\alpha} * 偏导)减小,往回走。偏导的正负始终引导往“山底”收敛。

  • 偏导越大,说明你离山底还很远,步子可以跨大一点。上面的图中,斜率大的地方,θj{\theta_j}更新的步幅较大,快接近山底(梯度最小值)时,步幅越来越小,这是合理的。如果你的步幅一直不变,就有可能在最小值附近左右震荡,无法收敛。

看一个梯度下降的示意图:

image.png

注意:不同的起始点,可能导致最后的收敛值不同,即目标函数存在多个局部最小值,下图中选择了另一组初始化参数(下山起始点)

image.png

恭喜你,如果到这里,你都听懂了,机器学习最基础的概念,你已经搞清楚了80%。

四、总结

简单总结下机器学习的流程:

image.png

  • 获取训练样本
  • 确定模型(线性、非线性...)
  • 定义误差函数,运用梯度下降训练模型,获取最优解
  • 生成模型,预测新的数据

回答本文开始的问题

机器学习需要哪些数学知识? 如果只是想简单的了解,了解梯度微分的概念就够了,如果想深入掌握,需要有良好的高数基础,包括“微积分”、“线性代数”、“概率论与数理统计”,机器学习也叫“统计学习方法”,看名字就知道是玩数学的。

啥是模型? 模型就是函数,可能参数比较多,但是逻辑不一定复杂

一个模型是怎么跑起来的? 跟运行普通的程序方法没有本质的区别

机器学习与深度学习啥关系? 见上文

入门要多长时间? 从零基础学机器学习,我参考的吴恩达老师112节视频课程,约2.5周。不过我从19年就抽时间复习数学,线性代数刷了至少两遍。

image.png

五、机器学习入门参考资料

image.png

吴恩达的教程github上有多个版本的代码实现,参考:

github.com/fengdu78/Co… github.com/nsoojin/cou…

下一篇讲“ML的开发环境”及“基础ML算法”。

欢迎关注公众号:sumsmile /专注图像处理的移动开发老兵