计算机科学基础_11 - 智能
机器学习&人工智能
- 分类
- 分类器
- 特征
- 标记数据
- 决策边界
- 混淆矩阵
- 未标签数据
- 决策树
- 支持向量机
- 人工神经网络
- 弱AI,窄AI
- 强AI
- 强化学习
计算机很擅长存放,整理,获取和处理大量数据。很合适有上百万商品的电商网站,或是存几十亿条健康记录,方便查看。
但如果想根据数据做决定呢?
这是机器学习的本质(根据数据做决定)。机器学习算法让计算机可以从数据中学习,然后自行作出预测和决定。
能自我学习的程序很有用,比如判断是不是垃圾邮件。人是否有心律失常吗?下一个视频该推荐哪个?等等。虽然有用,但不会说它有人类一般的智能。虽然AI和ML这两词经常混着用,大多数计算机科学家会说,机器学习是为了实现人工智能这个更宏大目标的技术之一,人工智能简称AI。
机器学习和人工智能算法一般都很复杂,说一说概念。
分类器
例如:判断飞蛾是“月娥”还是“帝娥”,这叫“分类”。
做分类的算法叫“分类器”,虽然用照片和声音来训练算法,很多算法会减少复杂性,把数据简化成“特征”,“特征”是用来帮助“分类”的值。
标记数据和决策边界
对于飞蛾分类的例子,用两个特征:“翼展”和“重量”,为了训练“分类器”作出好的预测,需要“训练数据”,为了得到数据,需要收集相应相关合适量的数据。收集过程中,需要记录数据,并且不只记录特征值,还会把种类记录上,这叫“标记数据”,因为只有两个特征,很容易用散点图把数据视觉化。能够大致分成俩组,但还是会有一定的重叠,需要机器学习算法,找出最佳区分,通过数值估量,翼展小于45毫米的,很可能是帝娥,再加上一个条件,重量必须小于0.75,才算是帝娥。这些叫做“决策边界”。
混淆矩阵
一定数量的帝娥在正确的区域,但剩下的几只,在错误的区域,另一方面,一定数量的月娥在正确的区域,剩下的在错误的区域。这个表,记录正确数和错误数,这表叫“混淆矩阵”。
--------------------------- | 正确区域帝娥 | 错误区域帝娥 | |-------------------------| | 错误区域月娥 | 正确区域月娥 | ---------------------------
机器学习算法的目的,是最大化正确分类 + 最小化错误分类。
未标签数据
用决策边界,如果是一只不认识的飞蛾,可以测量它的特征,并绘制到决策空间上,这叫“未标签数据”。
决策边界可以猜测飞蛾的种类。
决策树
这个把决策空间,切成几个盒子的简单方法,可以用“决策树”来表示。
图像与if语句:
生成决策树的机器学习算法,需要选择用什么特征来分类,每个特征用什么值。
有时候一些算法甚至用多个“决策树”来预测,计算机科学家叫这个“森林”,因为有多棵树。
支持向量机
本质上使用任意线来切分“决策空间”,不一定是直线,可以是多项式或其他数学函数。机器学习算法负责,找出最好的线,最准确的决策边界。
只有两个特征比较好实现,但如果加第三个特征,比如“触角长度”,那么2D线段,会变成3D平面。在三个唯独上做决策边界,这些平面不必是直的,而且 真正有用的分类器会有很多飞蛾种类。
三个特征和五个品种,可以用3D散点图 实现:
如果是一次性有4个或更多个特征,就容易实现,没有好的方法,更别说成百上千的特征了。这正是机器学习面临的问题。
通过想象在一个上千纬度的决策空间里,给超平面找出一个方程。是不可行的,但机器学习算法可以做到。
人工神经网络
“决策树”和“支持向量机”这些都出至于统计学,统计学早在计算机出现前,就在用数据做决定,有一大类机器学习算法用了统计学,也有不使用统计学的。其中值得注意的是 人工神经网络,灵感来自大脑里的神经元。神经元是细胞,用电信号和化学信号,来处理和传输消息,它从其他细胞得到一个或多个输入,然后处理信号并发出信号,形成巨大的互联网络,能处理复杂的信息。
人造神经元很类似,可以接受多个输入,然后整合并发出一个信号,它不用电信号或化学信号。而是吃数字进去,吐数字出来,它们被放成一层层,形成神经元网络,因此得名神经网络。
飞蛾例子,看如何用神经网络分类:
- 第一层,输入层,提供需要被分类的单个飞蛾数据,同样,也用重量和翼展。
- 另一边是输出层,有两个神经元:一个是月娥,一个是帝娥。2个神经元里最兴奋的,就是分类结果。
- 中间有一个隐藏层,负责把输入变成输出,负责干分类这个重活。
抽取一个“隐藏层”里第一个神经元,神经元做的第一件事是把每个输入乘以一个权重。
假设2.8是第一个输入,0.1是第二个输入。然后它会相加输入,总共是9.74。0.55 * 2.8 = 1.54
, 82 * 0.1 = 8.2
, 1.54 + 8.2 = 9.74
。
然后对这个结果,用一个偏差值处理,意思是加或减一个固定值。比如-6
, 9.74 - 6 = 3.74
。
做神经网络时,这些偏差和权重,一开始会设置成随机值,然后算法会调整这些值,来训练神经网络,使用“标记数据”来训练和测试。逐渐提高准确性,很像人类学习的过程。
最后,神经元有激活函数,它也叫传递函数。会应用于输出,对结果执行最后一次数学修改。例如,把值限制在-1
和+1
之间。或把负数改成0,用线性传递函数,它不会改变值,所以,3.74
还是3.74
。
所以,该最小神经元,输入0.55和82,输出3.74。但加权,求和,偏置,激活函数,会应用于一层里的每个神经元,并向前传播,一次一层。数字最高的结果就是:月娥。(根据输入的不同数值,使用不同算法,最后弄成一类可比较的数字经行输出,根据输出的不同经行分类)。
隐藏层不是只能有一层,可以有很多层。“深度学习”因此得名。
训练更复杂的网络,需要更多的计算量和数据,尽管神经网络50多年前就发明了,深层神经网络直到最近才成为可能。需要强大的处理器和超快的GPU,对于帧率的要求。
弱AI,窄AI
展示了深度神经网络,在照片中识别人脸的准确率,和人一样高。有了深层神经网络开车,翻译,诊断医疗状况等等。这些算法非常复杂,但还不够“聪明”,它们只能做一件事情,分类飞蛾,找人脸,翻译。这种AI叫“弱AI”或“窄AI”,只能做特定任务。
能自动作出诊断的医疗设备和自动驾驶的汽车。
强AI
真正通用的,像人一样聪明的AI,叫“强AI”。目前没有人做出来,接近人类智能的AI,有些人认为不可能做出来,但许多人说,数字化知识的爆炸性增长,比如,维基百科,网页,视频,是“强AI”的完美引燃物。
AI不仅可以吸收大量信息,也可以不断学习进步,而且一般比人类快得多,学习什么管用,什么不管用,自己发现成功的策略。这叫“强化学习”,是一种很强大的方法。和人类的学习方式非常类似。计算机现在才刚学会反复试错来学习,对于很多狭窄的问题,强化学习已被广泛使用。
计算机视觉
- 检测垂直边缘的算法
- 核/过滤器 kernel or filter
- 卷积 convolution
- Prewitt 算子
- 卷积神经网络
- 识别出脸之后,可以进一步用其他算法定位面部标志,如眼睛和眉毛具体位置,从而判断心情等信息
- 跟踪全身的标记点,如肩部,手臂等。
视觉的重要性
大部分人靠视觉来工作,越过障碍,读路牌,看视频,以及无数其它任务。
视觉是信息最多的感官,比如周围的世界是怎样的,如何和世界交互。
因此,一直以来,计算机科学家一直在想办法让计算机有视觉,因此有了“计算机视觉”这个领域。
目标是:让计算机理解图像和视频。
“听到”不等于“听懂”;
“看到”不等于“看懂”。
图像是像素网格,每个像素的颜色,通过三种基色定义:红,绿,蓝。
通过组合三种颜色的强度,可以得到任何颜色,也叫RGB值。
最简单计算机视觉算法,是跟踪一个颜色物体,比如一个粉色的球。
- 首先,记录下球的颜色,保存最中心像素的RGB的值。
- 然后,给程序喂入图像,让它找最接近这个颜色的像素。
- 算法可以从左上角开始,逐个检查像素,计算和目标颜色的差异,检查了每个像素后,最贴近的像素,很可能就是球。
不只是一张图片,可以在视频的每一帧图片中跑这个算法,跟踪球的位置。
当然,因为光线,阴影和其它影响。球的颜色会有所变化,不会存在和RGB值完全一样,但会很接近。
如果情况更极端一些,比如比赛是晚上,追踪效果可能会很差。如果球衣的颜色和球一样,算法就完全晕了。
因此很少用这类颜色跟踪算法,除非环境可以严格控制,颜色跟踪算法是一个个像素搜索,因为颜色是在一个像素里。
但这种方法,不适合多个像素的特征,比如物体的边缘,是多个像素组成的,为了识别这些特征,算法要一块块像素来处理,每一块都叫做“块”。
垂直边缘算法
找垂直边缘的算法,假设用来帮无人机躲避障碍,为了简单,需要把图像转成灰度,不过大部分算法可以处理颜色
放大其中一个杆子,看看边缘是怎样的:
很容易地看到 杆子地左侧边缘从哪里开始,因为有垂直地颜色变化,可以定一个规则说,某像素是垂直边缘的可能性,取决于左右两边像素的颜色差异程度。
左右像素的区别越大,这个像素越可能是边缘。如果色差很小,就不是边缘。
核
这个操作的数学符号,看起来像这样:
这个叫做“核”或“过滤器”
找垂直边缘的算法,假设用来帮无人机躲避障碍,为了简单,需要把图像转成灰度,不过大部分算法可以处理颜色
里面的数字用来做像素乘法,总和,存到中心像素里。
例如,
把所有像素已经转成灰度值,把“核”的中心,对准感兴趣的像素:
这指定了每个像素要乘的值,然后把所有数字加起来,在这里,最后的结果是147
成为新的像素值,把“核”应用于像素块,这种操作叫“卷积”。
卷积
结果值,色差很小,不是边缘。
如果把“核”用于照片中每个像素,结果,会成为这样:
垂直边缘的像素值很高,注意,水平边缘,几乎看不见。如果要突出那些特征,要用不同的“核”,用于水平边缘敏感的“核”。
这两个边缘增强的核叫“Prewitt算子”,以发明者命名,众多“核”的两个例子,“核”能作出很多种图像转换。
例如,锐化的“核”:
模糊图像的“核”:
“核”也可以像饼干模具一样,匹配特定形状,之前做检测边缘的“核”,会检查左右或上下的差异,但也可以作出擅长找线段的“核”。
或者包了一圈对比色的区域,这类“核”可以描述简单的形状,
比如鼻梁往往比鼻子两侧更亮,所以线段敏感的“核”对这里的值更高。
眼睛也很独特,一个黑色圆圈被外层更亮的一层像素包着,有其它“核”对这种模式敏感。
卷积神经网络
当计算机扫描图像时,最常见的是用一个窗口来扫,可以找出人脸的特征组合。
当计算机扫描图像时,最常见的是用一个窗口来扫,可以找出人脸的特征组合。
虽然每个“核”单独找出脸的能力很弱,但组合在一起会相当准确,不是脸但又有一堆脸的特征在正确的位置,这种情况不太可能。
这种检测算法叫:人脸检测算法。
热门算法是:卷积神经网络。
神经网络是最基本单元,是神经元,它有多个输入,然后会把每个输入,乘一个权重值,然后求总和。
“核”也可以像饼干模具一样,匹配特定形状,之前做检测边缘的“核”,会检查左右或上下的差异,但也可以作出擅长找线段的“核”。
或者包了一圈对比色的区域,这类“核”可以描述简单的形状,
比如鼻梁往往比鼻子两侧更亮,所以线段敏感的“核”对这里的值更高。
眼睛也很独特,一个黑色圆圈被外层更亮的一层像素包着,有其它“核”对这种模式敏感。
如果给神经元输入二维像素,完全就像“卷积”,输入权重等于“核”的值,但和预定义“核”不同,神经网络可以学习对自己有用的“核”,来识别图像中的特征。
“卷积神经网络”用一堆神经元处理图像数据,每个都会输出一个新图像,本质上是被不同“核”处理了,输出会被后面一层神经元处理,卷积卷积再卷积。
第一层可能会发现“边缘”这样的特征,单次卷积可以识别出这样的东西,下一层可以再这些基础上识别,比如由“边缘”组成的角落,
然后下一层可以在“角落”上继续卷积,下一层可能识别简单物体的神经元,比如,嘴和眉毛。然后不断重复,逐渐增加复杂度,
直到某一层把所有的特征都放在一起:眼睛,耳朵,嘴巴,鼻子。
“卷积神经网络”不是非要很多很多层,但一般会有很多层,来识别复杂的物体和场景,所以算是“深度学习”了。
还可以识别手写文字,在CT扫描中发现肿瘤,监测马路是否拥堵。
不管用什么算法,识别出脸之后,可以用更专用的计算机视觉算法,来定位面部标志,比如鼻尖和嘴角。有了标志点,判断眼睛有没有张开就很容易了,只是点之间的距离罢了,
也可以跟踪眉毛的位置,眉毛相对眼睛的位置,可以代表惊喜或喜悦,根据嘴巴的标志点,检测出微笑也很简单。
这些信息可以用“情感识别算法”来识别,让电脑知道你是开心,忧伤,沮丧,困惑等等。然后计算机可以作出合适的行为。
比如当你不明白的时候,给你提示,心情不好的时候,就不弹更新提示了。不只是物理环境。
面部标记点,也可以捕捉脸的形状,比如两只眼睛之间的距离,以及前额有多高,做生物识别,让有摄像头的计算机能认出你,
不管是手机解锁,还是政府用摄像头跟踪人,人脸识别有无限应用场景。
跟踪手臂和全身的标记点,也有突破,让计算机理解用户的身体语言。
抽象是构建复杂系统的关键。
计算机视觉也一样,硬件层面,有工程师在造更好的摄像头,让计算机有越来越好的视力。
用来自摄像头的数据,可以用视觉算法找出脸和手,然后可以用其它算法,接着处理,解释图片中的东西。比如用户的表情和手势。
计算机视觉的应用:
- 商店里的扫条形码
- 等红灯的自动驾驶汽车
- 自拍添加一些搞怪的东西的App
视觉能力达到人类水平的计算机会彻底改变交互方式。
自然语言处理
- 词性
- 短语结构规则
- 分析树
- 语音识别
- 谱图,Spectrogram
- 快速傅立叶变换
- 音速
- 语音合成
计算机视觉 - 让电脑能看到并理解。
计算机如何理解自然语言?
编程语言,词汇量少,而且非常结构化,代码只能在拼写和语法完全正确时,编译运行。
自然语言有大量词汇,有些词有多种含义,不同口音,以及各种有趣的文字游戏。
人类有强大的语言能力,因此,让计算机拥有语音对话的能力,这个想法从构思计算机的时候,就已经诞生了。
因此有“自然语言处理”,简称“NLP”。
结合了计算机科学和语言学的 一个跨学科领域。
单词组成句子的方式有无限种,没法给计算机一个字典,包含所有可能的句子,让计算机理解人类在嘟嚷什么。
所以NLP
早期的一个基本问题是 怎么把句子切成一块块。
英语单词有九种基本类型:
名词,代词,冠词,动词,形容词,副词,介词,连词和感叹词。
这些叫“词性”。
还有各种子类,比如:
单词名词 vs 复数名词
副词最高级 vs 副词比较级
分析树
了解单词类型有用,但不幸的是,很多词有多重含义,有些还可以作动词或形容词。仅靠字典,不能解决这种模糊问题。所以电脑也要知道语法。
因此开发了“短语结构规则”来代表语法规则。
例如,英语中有一条规则,句子可以由名词短语和一个动词短语组成。
名词短语可以是冠词,然后一个名词,或一个形容词后面跟一个名词。
可以给一门语言制定出一堆规则,用这些规则,可以作出“分析树”,它给每个单词标了可能是什么词性,也标明了句子的结构。
语音识别
例如,
THE MONGOLS ROSE FROM THE LEAVES
它给每个单词标了可能是什么词性,也标明句子的结构。
句子的名词重点是the mongols
, 在做rising
行为, 从leaves
rising。
数据块更小,更容易处理。
每次的语音搜索,都有这样的流程。
计算机能明白这是“哪里”(where)的问题。
把语言像乐高一样拆分,方便计算机处理,计算机可以回答问题,以及处理命令。
如果句子复杂一点计算机就没法理解。
还有,“短语结构规则”和其他语言结构转化的方法,可以用来生成句子。
数据存在语义信息网络时,这种方法特别有效,实体互相连接在一起,提供构造句子的所有成分。
Google称之为“知识图谱”,在2016年,包含大概七百亿个事实,以及不同实体间的关系。
处理,分析,生成文字,是聊天机器人的最基本部件。
聊天机器人就是能和你聊天的程序,早期的聊天机器人大多用的是规则。
把用户可能会说的话,和机器人应该回复什么,写成上百个规则,显然,这很难维护,而且对话不能太复杂。
聊天机器人和对话系统,在过去发展极快,如今可以和真人很像。
如今大多数用机器学习,用上GB的真人聊天数据 来训练机器人。
听到一个句子,计算机怎么从声音中提取词汇?
这个领域叫“语音识别”。
处理自然语言的新算法,不再是手工定规则,而是用机器学习,从语言数据库中学习。
如今准确度最高的语音识别系统,用深度神经网络。
理解原理:
先看看元音,比如a
和e
这是两个声音的波形,这个信号来自麦克风内部隔膜震动的频率,在这个视图中,横轴是时间,竖轴是隔膜移动的幅度,或者说振幅。
虽然可以看到2个波形有区别,但不能看出那个表示e
或那个表示a
。
为了更容易识别,换个方式看:谱图。
这里横轴还是时间,但竖轴不是振幅,而是不同频率的振幅,颜色越亮,那个频率的声音就越大,这种波形到频率的转换,是用一种算法做的:快速傅立叶变换(FFT)。
如果盯过立体声系统的EQ可视化器,差不多是一回事。
谱图是随时间变化的。
谱图中,信号有种螺纹图案,那是声道回声,为了发出不同声音,需要嘴巴和舌头变成不同形状,放大或减少不同的共振,可以看到有些区域更亮,有些更暗。
如果从底向上看,标出高峰,叫“共振峰”:
所有的元音都是如此,这让计算机可以识别元音,然后识别出整个单词。
例如:
当说“she... was.. happy”。
可以看到e
声,和a
声,以及其它不同的声音。
比如she
中的shh
声,was
中的wah
和sss
等等。
这些构成单词的声音片段,叫“音素”,语音识别软件,知道这些音素,英语有大概44种音素,所以本质上变成了音素识别。
还要把不同的词分开,弄清句子的开始和结束点,最后把语音转成文字。
结合语言模型后,语音转文字的准确度会大大提高,里面有单词顺序的统计信息。
语音合成
让计算机输出语音,它很像语音识别,不过反过来,把一段文字,分解成多个声音,然后播放这些声音,早期语音合成技术,可以清楚听到音素是拼在一起的。
到了1980年代,技术改进了很多,但音素混合依然不好,产生明显的机器人声音。
创造一个正循环反馈,人们用语音交互的频率会提高,给更多公司提供数据,来训练语音系统。
提高准确性,准确度高了,更愿意使用语音交互。