AI赋能:AI重新定义产品经理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 AI产品经理应该了解的算法

算法包括基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析算法、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法等。

算法可以分为三类。

(1)有限的、确定的算法。这类算法可在有限的一段时间内终止。它们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。

(2)有限的、非确定的算法。这类算法可在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。

(3)无限的算法。无限的算法是那些由于没有定义终止条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,产生无限的算法是由于没有明确定义终止条件。

对AI产品经理来说,算法只有两种:传统算法和AI算法。

1.6.1 传统算法

传统算法是一种逻辑算法,是处理决策,而不是模拟人脑,所以不能叫AI,可以称之为逻辑运算。例如:加、减、乘、除都是逻辑运算,也是一种算法。排序算法、二分树算法、递归算法都叫算法,虽然是算法,但是它们不智能,智能算法更突出的特性在于解决复杂的问题,在于模拟人脑的思维方式,所以叫AI算法。

传统算法是不智能的,没有自主学习和进化的能力,属于逻辑运算且是AI算法的一部分。智能算法在利用数据进行训练的基础上才有深度学习的能力。

1.6.2 AI算法

AI算法首先能模拟人脑,其次能做处理决策,再次则是智能的。

一个机器嵌入了AI算法后,这个机器就拥有了人所具有的基本能力,比如观察、思考、学习、创造等。这部分要介绍的就是这种算法,实际上目前(2018年)的算法还达不到全面超越人类的水平。

AI算法主要由两部分组成:深度学习(Deep Learning)和强化学习(Reinforce Learning)。

1.深度学习

深度学习就是多层人工神经网络,如下图所示。

深度学习的示意图

它主要包括三个部分:输入层、隐藏层、输出层。输入层就是向机器输入的数据,比如我们问它“你吃了吗”;隐藏层就是对这句话进行特征提取和分析的过程,机器思考“我今天到底有没有吃饭”;输出层就是输出的结果,比如机器人说“吃了”。

2.强化学习

强化学习相当于建立了一个机器与环境交互的过程。

强化学习原理示意图

强化学习主要包括两个部分:一个是Agent,即机器;一个是Environment,即环境。对于机器(Agent)来说,外面的任何事物,如天气、光线、张三、李四,都是环境(Environment)。比如,今天的环境(Environment)很冷,就是环境(Environment)当前时刻的状态(State)是“冷”,现在机器(Agent)知道了有点冷,就执行了一个动作(Action)——把衣服脱了。环境(Environment)知道了机器(Agent)把衣服脱了,天冷了脱衣服不对啊,所以环境(Environment)就给了机器(Agent)一个负的反馈(Reward),因为它的动作(Action)不对。然后环境(Environment)又给了机器(Agent)当前时刻的状态(State)“冷”,这时候机器(Agent)吸取上次的教训,就把衣服穿上了。环境(Environment)知道机器(Agent)把衣服穿上了,这是个正确的行为,所以就给了机器(Agent)正的反馈(Reward)。以后环境(Environment)冷的时候,机器(Agent)就知道要穿衣服了。

3.神经网络的基本实现

神经网络的基本单元是神经元,第一层的神经元是我们输入的数据,是已知的。第二层的每个神经元相当于一个函数,它接收输入值x,经过函数映射得到输出值y,然后把y作为下一层的x。以此类推,到最后一层,得到最后一层的值。

神经网络的本质是一个分类算法,所谓分类算法就是一个公式,根据不同的输入x,经分类算法映射得到的 y 就是分类结果。就像我们输入猫的图片,得到的就是一个猫的标签或者狗的预测,这就是分类。

神经网络的简化表达:y=ax+b, y是分类结果,同时也被称为预测值,x是输入值,ab是公式参数。

神经网络的目标是调整 ab的值,使预测值和真值越来越接近,直到它们的差值小于等于我们设定的阈值。其中真值就是上面说的图片的标签,预测值就是公式的结果y。神经网络的结构如下图所示。

神经网络的结构

神经网络的实现主要有两个步骤:网络的搭建,网络的训练。

搭建网络时要考虑神经网络设计成几层,每层有多少个神经元,层与层之间是怎样连接的。层数越多、神经元越多,这个神经网络就越强大。但是当层和神经元太多的时候会出现一个过拟合的现象,就是随着层数的增多,拟合效果不一定越好,层的数量要根据激活函数、正则项、层与层之间的连接方式等因素综合考虑。

怎么训练网络呢?我们拿已经贴好标签的猫、狗的图片来训练。猫的图片我们就贴标签“猫”,狗的图片我们就贴标签“狗”。首先,我们把猫的图片输入神经网络,如果神经网络判断这个图片是猫,那就不去管神经网络里面的参数,如果神经网络判断猫的图片是狗,那就使用反向传播算法更新神经网络的参数。更新原则就是最小化真值和预测值之间的差值。

网络搭建完成,神经网络的模型训练好之后,就可以拿模型来识别猫、狗的图片了。

笔者的观点是,深度学习是在强化学习范畴内的。现阶段来看,强化学习仍然是AI的Top-Level算法。对AI其他算法有兴趣的读者也可以结合书中的引导再专门找一些AI算法资料来研究。

1.6.3 传统算法和AI算法的区别、联系

我们知道AI算法包含传统算法中解决复杂问题的部分。

先看传统算法系统。传统算法是已经给定了一个算法处理逻辑的系统,当用户给系统一个输入时,系统按照这个算法处理逻辑进行处理,就能得到相应的输出,如下图所示。

传统算法系统原理示意图

再看AI算法中的机器学习系统。机器学习系统是给定输入、输出的(这里先介绍监督学习),让系统根据这些数据学习算法,以后,通过这个学习到的算法模型对给定输入进行判断,得到输出结果,如下图所示。

机器学习系统原理示意图

例如,在传统的算法系统中,我们的要求是,给定一个数 n,输出1+2+⋯+n的结果。我们很容易由等差数列求和公式得到算法程序,如下图所示。

求1+2+…+n的结果的算法

根据上面的算法流程,我们输入一个数n,直接用程序“跑”一下,就能得到结果。

机器学习系统是否也能够直接编写判断逻辑算法呢?为此,笔者用一个机器学习最经典的入门例子——手写数字识别来解释。

比如我们要判断一个手写数字是几。按照我们的思维逻辑,需要写10个if⋯else⋯来分别判断是不是0、是不是1、是不是2⋯⋯

比如判断是不是3,就会有下图所示的判断过程。

判断是不是3的代码

看起来我们好像完成任务了。但是,“if(满足是3的条件)”这个“满足是3”的条件怎么编写呢?我们先看看标准的3是什么样子的,如下图所示。

我们可以根据这个标准的3和其他数字的不同特征来编写,比如3开始是向右上提,最后是向左上提,中间有一条短横线,等等。

标准的3

其他的数字类似,只要找到每个数字和其他数字的不同,就能编写出if()中“满足是数字几”的条件。

这样不就满足要求了?为什么还需要机器学习算法呢?

问题没有这么简单。我们真正碰到的手写的数字3,根本不会有上图所示这么标准,而是各种各样的都有,如下图所示。

不同种类的“3”

对于上图这些数字,我们通过人眼观察还是能够认出大部分是3,但是它们都满足前面刚刚说的3的特征吗?上面好几个3都没有满足,我们无法一一列出现实生活中的各种情况。

这时,我们就需要机器学习算法自动地学习相关的特征,构建出一个机器学习模型,进而帮助我们判断一个手写数字是3还是其他数字。

其实从某种程度上来说,上面这两个例子都能反映两种系统的本质区别。