前言
本文为阅读书籍《Deep Learning An MIT Press book》后的随笔。
正文
想让计算机解决问题(比如,判断一张图片里有没有“人”的存在),首先需要用计算机能理解的方式来描述这个问题。
举个例子,现在需要让计算机计算游戏中某个角色不同等级时的攻击力。因为我们获得了这样的数据:
等级 | 攻击力 |
---|---|
1 | 70 |
2 | 90 |
3 | 110 |
4 | 130 |
… | … |
那么在给计算机描述这个问题的时候,就可以使用公式来做到(当然也有很多其他方法,比如数组,这里只是举个例子):
攻击力 = 70 + 等级 * 20
这样用户输入等级后,计算机就能够返回相应的攻击力。
上面这个例子所描述的问题,是计算机擅长解决的。我们先提取数据的特点,用公式就能够将问题转述成计算机能理解的方式了。但是在很多问题上,计算机不擅长解决。比如识别图片里的物体,听懂人类的语言…
而且,我们也很难用传统计算机程序所使用的一组公式来让计算机理解这类问题。曾经有人试图这么做,用公式化的方法创建人工智能——Cyc项目,但结果是失败的很惨:计算机把拿着电动剃须刀的人理解为非人,因为人的身体结构中不包含电子设备。
后来,人们终于找到了一个合适的方法,一个解决类似问题的模型:把一个复杂的问题拆分成稍微简单一些的小问题,然后把这些小问题再拆分成更加简单的小问题,这样逐层拆分。
比如,想要机器识别图片里有没有人脸,可以简化为判断图片中通过明暗差异检测出的线条中,有没有人脸的轮廓(下图中的3rd hidden layer
),然后可以再简化为,图片包含的线条中有没有位置合适,而且形状如眼睛、嘴巴的线条(下图中的2rd hidden layer
),最后可以再简化为,图片包含的线条中有没有位置合适的横线、竖线等基本信息(下图中的1rd hidden layer
)…
具体的方式就是用很多的信息节点,存储每一步计算的结果,进而为下一步更高层次的计算提供数据。比如,图像识别时,首先以图片的一个个像素点作为第一步的输入,然后逐步进行计算,在经历多层处理后,得到结果。称之为Deep Learning的原因,就是因为有很多层。
这样做的好处是,我们不用费尽心思找到一种精确描述这类抽象问题的办法,而是给一个模型,让计算机自行找到合适的表示方法。从而实现了一种人工智能。