本文是《人工智能基础(高中版)》的读书笔记,这本书的配图非常好,把难以理解的概念图形化,所以读后感会引用书中的图片(图片版权归商汤科技所有)。 书中部分概念还是比较晦涩,读者在小白的角度不好理解某些概念和方法之间微妙的差别,所以我用自己的理解和抹去一些难以理解的细节,以更通俗易懂的形式展示出来。 一、人工智能概述 1. 简史 2. 应用领域 安防 实时从视频中检测出行人和车辆。 自动找到视频中异常的行为(比如,醉酒的行人或者逆行的车辆),并及时发出带有具体地点方位信息的警报。 自动判断人群的密度和人流的方向,提前发现过密人群带来的潜在危险,帮助工作人员引导和管理人流。 医疗 对医学影像进行自动分析的技术。这些技术可以自动找到医学影像中的重点部位,并进行对比比分析。 通过多张医疗影像重建出人体内器官的三维模型,帮助医生设计手术,确保手术 为我们每个人提供康建议和疾病风险预警,从而让我们生活得更加健康。 智能客服 智能客服可以像人一样和客户交流沟通。它可以听懂客户的问题,对问题的意义进行分析(比如客户是询问价格呢还是咨询产品的功能呢),进行准确得体并且个性化的回应。 自动驾驶 现在的自动驾驶汽车通过多种传感器,包括视频摄像头、激光雷达、卫星定位系统(北斗卫星导航系统BDS、全球定位系统GPS等)等,来对行驶环境进行实时感知。智能驾驶系统可以对多种感知信号进行综合分析,通过结合地图和指示标志(比如交通灯和路牌),实时规划驾驶路线,并发出指令,控制车子的运行。 工业制造 帮助工厂自动检测出形态各异的缺陷 3. 概念 什么是人工智能? 人工智能是通过机器来模拟人类认知能力的技术。 人工智能的三种训练方式分别是监督学习、非监督学习、强化学习。下文会一一介绍。 二、这是不是鸾尾花(分类器) 1. 特征提取 人类感官特征 花瓣数量、颜色 人工设计特征 先确定哪些特征,再通过测量转化为具体数值 深度学习特征 这里先不提及,文章后面会说 2. 感知器 老师给了一道题: 要区分两种鸾尾花,得画出一条直线区分两类花,你可以画出无数条直线,但是哪条才是最好的呢? 怎么办呢?我可是学渣啊,靠蒙! 随便找三个数a=0.5、b=1.0、c=-2 带入 y = ax[1] + bx[2] + c, 每朵花的两个特征也代入x[1]、x[2],比如带入(4, 1) 得出 y[预测] = 1,此时 y[实际] = 1 (样本设定变色鸾尾花为 1,山鸾尾为 -1 ),所以y[实际] – y[预测] = 0. 重复以上两步,得出所有的『实际值和预测值的差距的综合』,记为 Loss1 可怎么知道是不是最优的直线呢?继续猜啊!继续懵!像猜世界杯一样猜就好了。 通过沿 y = ax[1] + bx[2] + c 梯度(梯度就是求导数,高中有学的!)下降的方向继续猜数字,具体过程大概是这样子的: 上述所属的实际值和预测值的差距实际上是一种损失函数,还有其他的损失函数,比如两点间直线距离公式,余弦相似度公式等等可以计算预测结果和实际结果之间的差距。 划重点:损失函数就是现实和理想的差距(很残酷) 3. 支持向量机 *判断依据的区别也导致了损失函数的不同(但依旧是猜) 直观的说,缝隙(上图的分类间隔)越大越好 4. 多分类 如果有多种花怎么办? 一趟植物课上,老师请来了牡丹鉴别专家、荷花鉴别专家、梅花鉴别专家。老师拿出了一盘花给各个专家鉴定,牡丹角色这是牡丹的概率是0.013、荷花专家角色这是荷花的概率是0.265、梅花专家角色这是梅花的概率是0.722。 老师综合了各位专家的意见后,告诉同学们,这是一盘梅花。 小明:这老师是不是傻,一朵花是啥都不知道,还要请三个专家 老师:你给我滚出去 实际计算过程就是通过用 2.2 和 2.3 等方法训练的二分类器,分别输出对应的分类值(比如三种花的分类器分别输出-1,2,3),那怎么把这些分类值转化成概率呢?这就要用到归一化指数化函数 Softmax(如果是二分类就用Sigmoid函数),这里就不拿公式来说,可以直观的看看书中这个表格就懂了: 5. 非监督学习 第 2.2 能从预测值和实际值的差别判断"是否猜对了",是因为生物老师告诉了学渣,哪些样本是山鸾尾花,哪些变色鸾尾花。但如果老师连样本实际的类别也不告诉学渣(非监督式学习),学渣不知道样本分别是什么花。 那该怎么办呢? 机器学习的入门课程总是在讲鸾尾花,也是够烦的。 这里我们换个场景: 假如你是某直播老板,要找一堆小主播,这时候你有一堆应聘者,然而你只有她们的胸围和臀围数据。一堆8份简历摆在你面前,你是不知道哪些更加能干( capable啊 ! ) 的,更能吸引粉丝。你也没空全部面试,那应该怎么挑选呢? 这时候你把她们的胸围和臀围都标准在一张二维坐标图上: 这是你随手一划,把她们分成两组,可以说"聚成两类了"。 用某种计算方式(比如平均值)找到这个聚类的中心。点离聚类中心越近,代表越相似。 求出每个聚类中的点到蓝色聚类中心点和黄色聚类中心的距离 如果一个点离黄色聚类中心更近却被你随手划到了蓝色分组(上图用红色边框标出的小方块),那么就把它划入黄色分组。 这时因为分组范围和分组内包含哪些小姐姐都发生了变化。这时候你需要以 步骤3 的方法重新计算聚类的中心 重复步骤 4 (算点中心距离)-> 重复步骤 5 (调整黄色小姐姐们和蓝色小姐姐们)-> 重复步骤 3 (算中心),一直循环这个过程直到蓝色和黄色聚类下所包含的小姐姐不再发生变化。那么就停止这一循环。 至此,小姐姐们已经被分为两大类。你可以得出两类小姐姐: 计算机在没有监督的情况下,成功把小姐姐们分成两类,接下来就可以在把两种主播各投放2个到平台看看谁更能干。效果更好的,以后就以那个聚类的样本特征扩充更多能干的主播。 小明:有什么了不起的,我一眼就能看出黄色小姐姐更能干 老师:你给我滚出去 上面聚类小姐姐的算法就叫做K 邻近算法,K 为要聚类的数量(这需要人工指定),上述例子 K=2.那么如果分成三类就是 K=3,训练过程可以看下图,有个直观的了解: 三、这是什么物品(图像识别) 1. 特征提取 人类感官特征 花瓣颜色、花瓣长度、有没有翅膀(区分猫和小鸟)、有没有嘴巴和眼睛(飞机和小鸟) 感官的特征通过量化得到颜色(RGB值)、边缘(圆角、直角、三角)、纹理(波浪、直线、网格)数值特征 人工设计特征 深度学习特征 通过卷积提取图像特征 划重点:卷积的作用就是提取图像有用信息,好比微信把你发出的图片压缩了,大小变小了,但是你依旧能分辨出图像的主要内容。 1维卷积 1*5+2*4+3*3=22、1*4+2*3+3*2=16、1*3+2*2+3*1=10 2维卷积 1*2+3*0+2*9+4*2=28… 通过卷积就可以得到图像的特征信息,比如边缘 垂直边缘检测 水平边缘检测 方向梯度直方图 2. 深度学习和传统模式分类的区别 既然有传统模式分类,为什么还要神经网络呢? 区别就在于传统的模式分类需要人为设置特征,比如花瓣长度、颜色等等。而深度学习省略掉人工设计特征的步骤,交由卷积操作去自动提取,分类器的训练也同时融入到神经网络当中,实现了端对端的学习 划重点:端对端学习(End to End)就是从输入直接得出输出,没有中间商,自己赚差价。 3. 深(多)层神经网络存在的问题 一般来说,神经网络层数增多,会提高准确率。但是,网络层数加深导致: 过拟合学渣把高考预测试题的答案都背一遍而不理解,考试的时候,如果试题是考生背过的,那么考生就能答对;如果没背过那么考生就不会回答了。我们就可以说,学渣『过拟合』了预测试题。 与之对应的是:欠拟合渣得不能再渣的人,连预测试题都背不下来,即使考试试题和预测试题一模一样,他也只能答对30%。那么就可以说这种人~~欠揍~~欠拟合。 有兴趣的还可以了解一下梯度弥散和梯度爆炸下面是网上很火很励志的一个公式,权重在多层网络中相乘,比如每一层的权重都是0.01,传递100层 就是0.01 的100 次方,变得非常小,在梯度下降 Gradient Descent 的学习过程中,学习将变得非常慢。(好比从一个碗顶部放下一个小球,在底部徘徊的速度会越来越慢) 非凸优化学习过程可能在局部最小值(极小值)就停止了,因为梯度(斜率)为零。在局部最低停止而不是全局最低停止,学习到的模型就不够准确了。 看图感受一下 你说的底不是底,你说的顶是什么顶 解决的办法 均匀初始化权重值(Uniform Initialization)、批归一化(Batch Normalization)、跳远链接(Shortcut)涉及到比较多数学逻辑,这里就不展开说明了。 4. 应用 人脸识别 自动驾驶把汽车顶部拍摄到的图片切分层一个个小方块,每个小方块检测物体是车还是行人还是狗,是红灯还是绿灯,识别各种交通标识等等。再配合雷达等判断物体距离。 四、这是什么歌(语音识别) 1. 特征提取 人类感官特征音量、音调、音色 通过采样、量化、编码。实现声波数字化(声波转电信号) 人工设计特征梅尔频率在低频部分分辨率高,高频部分分辨率低(这与人耳的听觉感受是相似的,即在一定频率范围内人对低频声音比较敏感而对高频声音不敏感)。 关系为: 在每一个频率区间对频谱求均值,它代表了每个频率范围内声音能量的大小。一共有26个频率范围,从而得到26维的特征。倒谱操作后,得到 13 维的梅尔频率倒谱系数(Mel-FrequencyCepstralCoefficients,MFCCs) 深度学习特征通过 3.1 所介绍的 1维卷积进行特征提取 2. 应用 音乐风格分类 输入:音频文件特征:声音特征输出:音乐种类 语音转文字 输入:音频文件特征:声音特征输出:声学模型(比如26个英文字母) 再把声学模型送入另外的学习器 输入:声学模型特征:语义和词汇输出:通顺的语句(可以查看第6点,如何让计算机输出通顺的语句) 听歌识曲通过窗口扫描(把音乐分割成一小段一小段的),然后通过4.1说的方法提取这一段的特征,就得到一个特征向量。对数据库的歌和用户录音的歌做同样的操作得到特征向量,然后两两之间计算相似度(两个向量的距离可以用余弦公式算夹角大小或者两点间距离公式来算) 五、视频里的人在做什么(视频理解,动作识别) 1. 介绍 视频,本质是由一帧帧图片连续组成的,因为人视觉的暂留效应(Persistence of vision,人眼在观察景物时,光信号传入大脑神经,并不立即消失,让人产生画面连续的印象),看上去是连续的,也就是视频。识别视频里面有什么物体,可以用上文说过的图像识别和分类方法去实时分析单帧图像,比如: 但是视频相对于图像有一个更重要的属性:动作(行为)。 怎么从一个连续的视频分析动作呢? 举个例子,像上图那只二哈,腿部的像素点相对于黄色的方框(框和狗相对静止)在左右"移动",这里的"移动"我们引入一个概念——光流(一个像素点从一个位置移动到另一个位置),通过像素点移动形成的光流作为神经网络的训练特征(X),『奔跑』作为训练目标值(Y),经过多次的迭代训练,机器就可以拟合得出一个 Y = f(X) 用于判断视频中的物体(Object)是否在奔跑。 2. 光流 假设,1)相邻两帧中物体运动很小2)相邻两帧中物体颜色基本不变 至于神经网络是怎么跟踪某个像素点的,这里不展开说明。 第 t 时刻的点指向第 t+1 时刻该点的位置,就是该点的光流,是一个二维的向量。 整个画面的光流就是这样: 整个视频的光流(轨迹)是这样的 不同的虚线代表图像上某个点移动的轨迹 假设视频宽width、高height、一共有m帧,那么该视频可以用width * height * m * 2的张量(就是立体的矩阵)来表示,把向量喂到神经网络即可进行分类训练。 进一步优化,可以把光流简化为8个方向上的,把视频某一帧的所有光流累加到这八个方向上得出某一帧的光流直方图,进一步得出 8 维的特征向量。 六、一段文字在表达什么(自然语言处理) 1. 特征提取 这里有4个句子,首先进行分词: 去掉停用词(副词、介词、标点符合等等,一般在文本处理上都有一个停用词表) 编码词表 句子向量化 这样就得到一个句子19 维 的 特征向量,再把这19维的特征向量用普通卷积网络或者 LSTM 循环神经网络作为 X 读入(喂它吃东西),文本的分类(比如积极、消极)作为训练标签值 Y,迭代训练得到的模型可以用于情感分析或文本分类等任务。 2. 进阶 词向量化厉害-牛逼、计算机-电脑是同义词。光从上面的步骤,我们可能认为厉害和牛逼是两个完全不一样的词语,但其实他们是近似的意思,怎么才能 AI 学习知道这点呢?需要从多个维度去进一步给词语更丰富的内涵,比如: 举例来说,男性用1表示,女性用0表示,不带性别倾向就是0.5。多个维度扩展之后,就得到"男人"这个词的特征向量(1,0, 0.5,0,1) 逆向文档频率一个词在一类文章出现的多,而在另外分类的文章出现的少,越能说明这个次能代表这篇文章的分类。比如游泳在体育类的文章中出现的多(2次),而在工具类的文章出现的少(0次),相比其他词语(1次)更能代表体育类的文章。 假设句子中有 N 个词, 某个词出现次数为 T,一共有 X 个句子,该词语在 W 个句子出现,则逆向文档频率 TF-IDF 为T/N * log(X/W) 3. 应用 七、让计算机画画(生成对抗网络) 从前有个人,以卖临摹名家的画来赚钱。他开始临摹一副名画: 第一次他画成这样子了: 鉴赏家一眼就看出来是假的,他不得不回去画第二幅画、第三幅画… 经过了10万次"画画-鉴别"的过程,这个临摹者画出来的画,鉴赏家居然认为这是真的原作,以高价买入了这副画。 这种生成(画画)- 鉴别(鉴伪)的模式正是生成对抗网络(GAN)的核心。 通过生成器,把随机像素点有序排列形成具有意义的画面,再通过鉴别器得出生成的画面的分类、和真实画面之间的差距,并告诉生成器要往什么方向去优化。多轮的训练之后,生成器就学会了画『真画』了。 计算机是怎么把随机像素点变成有意义的画面的呢?我们通过一个简化的例子来看看。 直线上一些均匀分布的点,经过y=2x+1变换后变成了非均匀分布。一张随机排布的像素点画面,经过某个f(x)变换后就会变成具有某种意义的画面,而生成器就是不停地去近似f(x), 就像 2.2 感知器拟合一条直线那样。 下图为计算机生成手写数字的过程 划重点:函数可以变换数据分布(库克说:可以把直的变成弯的) 八AlphaGo是怎么下棋的?(强化学习) 1. 粗略认知 监督/无监督训练:尽可能让每一次任务正确强化学习:多次任务是否达成最终目标 每一次任务都准确,不就是能达成最终目标吗?我们来看一个例子: 一家批发商店的老板爱丽丝要求她的经理比尔增加销售额,比尔指导他的销售员多卖一些收音机,其中一个销售员查尔斯弄到了一个可以获利的大单,但是之后公司因为供应紧缺无法交付这些收音机。 应该责怪谁呢? 从爱丽丝的角度来看,查尔斯的行为让公司蒙羞了(最终任务没完成)。 但是从比尔的角度,查尔斯成功地完成了他的销售任务,而比尔也增加了销量(子任务达成)。——《心智社会》第7.7章 2. AlphaGo 下围棋,最古老的办法是决策树,从左上角的位置开始到右下角的位置遍历,每一个空的位置就是一个分支,然后预测每种棋局赢的概率,找出最大概率的走法玩。这就是落子预测器。 但是由于围棋19X19的超大棋盘,空间复杂度高达10的360次方,要穷尽所有的走法几乎是不可能的,如大海捞针。 要降低复杂度,关键是要降低搜索的广度和深度。 我们栽培一颗小盆栽的时候,如果不对枝叶进行修剪,那么养分就会浪费在没长好的枝条上。需要及时对枯萎或者异常的枝条进行修剪以保证养分往正常(或者说我们希望它生长的方向)枝条上输送。 同样的道理,有限的计算机算力如果浪费在穷尽所有围棋走法上,将导致棋局推演非常慢,而且耗费大量的时间也难以找到最优的方案。 是否可以通过 "修剪" 落子选择器这颗庞大的决策树,加快较优落子方案的选择呢?怎么判断哪些是好的"枝条",哪些是坏的"枝条"呢?这就需要棋局价值评估器(哪个棋盘的赢的概率更大),把没有价值的棋局先去掉不再往下遍历,这就同时减少了搜索的广度和深度。 其中,落子预测器有个名称,叫做政策网络(policy network)价值评估器有个名称,叫做价值网络(value network)政策网络(policy network)利用蒙特卡洛搜索树从当前棋局推演(随机下棋)到最终的棋局,最终胜则回报为正,反之回报为负。之后该算法会反向沿着该对弈过程的落子方案步步回溯,将路径上胜者所选择的落子方案分数提高,与此对应将败者的落子方案分数降低,所以之后遇到相同局面时选择胜者方案的概率就会增加。因此可以加速落子选择,称为快速走子网络。 通过政策网络 + 价值网络 + 蒙特卡洛搜索树实现最优落子方案的选择,同时两个机器人互相对弈,这样就不停地训练网络,学习落子方案。 3. 定义 接下来说一下枯燥的定义 什么是强化学习? 当我们关注的不是某个判断是否准确,而是行动过程能否带来最大的收益时使用强化学习(reinforeement learning)。比如在下棋、股票交易或商业决策等场景中。 强化学习的目标是要获得一个策略(poliey)去指导行动。比如在围棋博弈中,这个策略可以根据盘面形势指导每一步应该在哪里落子;在股票交易中,这个策略会告诉我们在什么时候买入、什么时候卖出。 一个强化学习模型一般包含如下几个部分: 一组可以动态变化的状态(sute) 对于围棋棋盘上黑白子的分布位置对于股票交易来说,就是股票的价格 一组可以选取的动作(metion) 对于围棋来说,就是可以落子的位置;对于股票交易来说,就是每个时间点,买入或者卖出的股票以及数量。 一个可以和决策主体(agent)进行交互的环境(environment)这个环境会决定每个动作后状态如何变化。 棋手(主体)的落子会影响棋局(环境),环境给主体奖励(赢)或惩罚(输)操盘手(主体)的买入或卖出会影响股票价格(环境,供求关系决定价格),环境给主体奖励(赚钱)或惩罚(亏钱) 回报(reward)规则当决策主体通过行动使状态发生变化时,它会获得回报或者受到惩罚(回报为负值)。 《人工智能基础高中版》这本书,有时间建议读者可以自己阅读。 原文链接:https://jinkey.ai/post/tech/5000zi-ren-gong-zhi-neng-ke-pu-gao-zhong-sheng-du-neng-du-dong