人工智能 —— 从入门到放弃吗

你是 AI 吗?

首先思考一个问题,时间是什么?

然后再思考一个问题,为什么用铯-133 原子基态的超精细能级之间的跃迀所对应的辐射的 9192631770 个周期所持续的时间来定义「秒」。

再思考一下,你所编写的代码,假如它有所谓的「意识」,它能理解为什么经过了 XXX 个时钟周期就是一秒吗?

好了,故弄玄虚到此结束,想太多会疯的。前几周在组内做了一个「前端遇上 AI」的分享,本来以为讲得很直白和通俗了,然而大家听完还是比较迷茫。

大概就是我讲得太渣了吧,今天抽时间把用文字的形式,把这个坑填了。

为什么是 AI

高热度

旦凡关注过几个科技微信公众号的,应该都对前一阵的 AI 营销狂潮不陌生。到处都在恰饭,出售各种 AI 课程。一时间,把人工智能推上了风口浪尖。在这样的大背景下,感觉不懂点 AI,都无法好好交流了。

高门槛

然而,当你想去入门 AI 时,你会发现面对多如牛毛的教材和知识点,无从下手。另外,如果纯粹的学习是枯燥的,缺乏项目实操前提下,对 AI 的理解也不深。

高价值

一个伟人曾经瞎逼逼过「价值投资永远都不会是在高点买入,跟风的大概率是韭菜」。从这个角度看,AI 已经是穷途末路的技术了。

但是,还有一个伟人逼逼过「资本总是高估技术的短期价值,而低估它的长期价值」,把这句话中的「资本」换成「老板」也同样适用。

大众对 AI 的期待由低到高,再逐渐回归正常水平。这件事对于 AI 从业者来说,应该算是好事。而且,会有各行各业需要使用到 AI 技术赋能和提效。

随着确定性问题的解决方法逐渐沉淀,未来程序员的主要工作在于解决不确定性的问题,这点和 AI 是吻合的。

基本概念

AI 是什么

首先,思考下这两个问题:工作生活中有哪些 AI 应用?你是如何区分 AI 与 Non-AI 应用的?

使用空调遥控器控制空调,算不算 AI 应用? 出入小区刷门禁算不算 AI 应用?那么人脸解锁、指纹解锁呢?

AI 是 Artificial Intelligence 的缩写,翻译过来是人工智能。那么它有两部分含义:一部分是人工、一部分是智能。

首先理解「人工」,你家的阿旺/阿喵很聪明,但因为它不是人造物,它不能算是人工智能。至于智能的定义,各说纷纭,但普遍认为「智能」的创造过程中,要有「学习」的过程。

传统系统与机器学习

如果你写了一个程序,程序的输入和输出之间的映射规则是由你制定的,它不会因为使用时间的推移而发生变化,那么它没有「学习」的过程。即使它实现了看上去很智能的功能,但也不属于人工智能。

如果你写了一个程序,它需要靠你「喂」它一些正确的输入输出对,它自己构建内部的映射规则。那么它有资格被划分为人工智能。

机器学习与深度学习

人工智能领域

在人工智能提到「学习」,不可避免地要提到机器学习、深度学习。

让机器能够使用已有数据进行自我学习,进而实现人工智能的方法都可以划分到机器学习的范畴中。深度学习是机器学习的子集,它主要使用深度神经网络进行建模。

透过现象看本质

不确定性问题解决思路

现在有两个需求,一个是要求你通过程序实现垃圾邮件分类,一个是从图片中区分大熊猫和企鹅。假如你从未接触过机器学习的知识,你很有可能写出这样的伪代码。

垃圾邮件分类

通过判断邮件是否包含「坏词」,来实现垃圾邮件分类。因为企鹅多生活在冰天雪地,所以可以通过判断图片是否包含「冰」来区分企鹅和大熊猫。

图像分类

邮件中包含的「坏词」、图片中包含的「冰」都可以认为是我们研究对象的特征,但是我们怎么提取出这些特征呢?

还有另外的问题,邮件中只要包含「坏词」就是垃圾邮件了吗?图片中只要出现「冰」就不是熊猫了吗?

AI 研究的本质

言至于此,相信你应该知道,AI 在研究的东西无外乎两个:特征和可能性。

在分析垃圾邮件的时候,我为什么选择了「坏词」作为特征,是不是还可以选择「发件人」作为特征。我又应该怎么样程序化地从图片中提取「冰」这个特征。特征出现与最终的结果之间存在什么样的关系,我应该如何建立这种映射关系。

AI 研究领域和手段

人工智能研究的领域,包括但不限于图像处理、自然语言处理(NLP)、音频处理等。

常用的传统机器学习算法有 K-近邻分类算法(KNN)、朴素贝叶斯、决策树、支持向量机(SVM)、K-Means、TF-IDF 等。

比较常听到的深度神经网络模型主要有卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络(LSTM)、Transformer 等。

模型和张量

在机器学习中,模型( Model )是一个具有可学习参数的函数,它将输入映射到输出。最优参数是通过在数据上训练模型获得的。一个训练有素的模型将提供从输入到所需输出的精确映射。

张量

人工智能领域中经常提到「张量」或者 Tensor 这个词,人工智能领域的绝大部分数据都以张量的形式存在,无论是模型的输入、输出还是隐含层的参数表示。

尽管在维基百科上,张量有非常丰富的介绍。但我们可以把张量理解为 0~N 维的数组。

神经网络

人为什么受电击之后,身体会不受控制?

这是因为大脑是通过神经元和身体其它组织进行通信,而神经元的通信依赖彼此释放的微弱电信号。

人工智能的智能程度,依赖于人对自身大脑运作方式的理解程度。科学家们基于人脑的构造,提出了人工神经网络模型。

随着计算机计算能力的大幅提升,神经网络这个特征提取大杀器,成为人工智能领域中最火热的关键词。

人工神经元结构

神经元与人工神经元

神经元在结构上大致分为两部分:细胞体和突起,而突起又分为树突、轴突两种。神经元从树突接受来自其它神经元的输入,经过整合后,通过轴突向其它神经元输出。

人工神经元也有类似的结构,有多个输入端用于接受其它神经元的信息,经过激活函数的「整合」之后,输出给其它神经元。

神经元的特征提取能力

特征提取能力

只需要使用一个神经元,选择阶跃函数作为激活函数,并加上合适的权值参数($w_0$,$w_1$,$w_2$),就可以实现上图的二分类。

有可能你会觉得这个例子太简单,但其实不然,复杂特征实际上也是由多个简单特征组合而来。比如,我们可以把「是否垃圾邮件」当作邮件的一个特征,这个特征是由「是否包含垃圾词汇」和「发件人是否在黑名单」等特征组成。

建议感兴趣的朋友在 TensorFlow Playground 感受一下神经网络的乐趣。

前向传播与反向传播

反向传播

前向传播,即信号由输入层进入模型,再经隐含层逐层传播,最终达到输出层的过程。反向传播,指神经网络的训练过程中,根据实际输出与期望输出间的误差,反向逐层修正网络参数的过程。

模型的训练过程,就是确定模型参数的过程。反向传播为参数调整提供了科学的方法。通过计算模型参数如何对预测值产生影响,从而知道如何调整模型参数,来逼近真实值。可以把这个过程类比「带提示的暴力破解」。

反向传播计算

上图以 8 号神经元的输入输出为例,说明了 $w_{84}$ 对误差的影响程度和影响方向。逐层求出 $w_{mn}$ 和误差的关系之后,就可以往减少误差的方向调整 $w_{mn}$,让模型训练往期望方向进行。

那么问题来了,$w_{mn}$ 的调整方向是确定的,但是每次应该调整多少呢?步子迈太大了,可能模型一直在训练,永远不收敛,步子迈小了,训练时间又太长。这就涉及到所谓「学习速率」的调参了,本文就不展开讲了。

训练速度

案例分析

看到这里,相信你对人工智能、神经网络都有了基本的了解。接下来,我们来看一个真实的需求:在小程序端实现图片分类功能,能够区分普通杯子和雀巢咖啡杯。

对于图像分类需求,一般使用卷积神经网络(CNN)实现,它的一般模型结构如下图所示。通过一层层的卷积和池化操作,提取出图像中的特征,最后再经过一层全连接层,输出图像分类的概率值。

PS: 附一个助于理解 CNN 的有趣网站:Image Kernels

卷积神经网络

对于上面这段话不理解,没有关系。只要知道以下几点,就可以完成这个需求:

  1. 神经网络是特征提取的神器
  2. 通常 CNN 的倒数第二层输出是图像的特征
  3. 特征表示为张量,而张量理解为多维数组
  4. 使用一些简单的算法(K-NN 或 SVM)可以实现自定义分类

此处附上 K-NN 分类的动态图,只要看图马上理解这个过程是如此的简单。

K-NN

发展趋势

AI 目前能发挥出作用的场景大多和提效赋能有关,比如搭建智能客服系统,解放人力。又比如阿里推出的 ImgCook,专注以 Sketch、PSD、静态图片等形式的视觉稿作为输入,通过智能化技术一键生成可维护的前端代码,包含视图代码、数据字段绑定、组件代码、部分业务逻辑代码。

ImgCook

除此之外,ToC 产品中比较火的应用场景是在线试妆、在线换脸等。像腾讯的人脸试妆能力、手淘的在线试妆小程序、曾大火的 FaceApp 换脸应用,抖音的换动漫脸功能等。

也有一些在健身、康复领域的应用,比如国外一家叫 Tonal 的公司,开发出了一款辅助健身器械,可以识别健身者的动态姿态,并做相应的提示和评分。阿里开发过一款「魔力智屏」的 AI 健身产品,厦门一家公司也在尝试开发类似 Tonal 的产品。

之前创业那会,我们还想到可以出一款根据学生的上课的姿态分析课堂氛围的产品,可惜凉了。

结尾

希望本文能给你的 AI 入门带来一点点帮助,也不枉我码这么多字。

PS: 能看到这里的都是勇士,给自己加个鸡腿吧