人工智能算法综述

  “那一些被认作常识的东西,是不是只是时代的附属品?从整个历史的长河去看待,也许是一些莫名其妙或者残忍至极的怪事而已”

                                                    ———— 默默无名

  这两年因为一些爆炸式的AI应用,导致又把公众的视野转向这个方向发展,自图灵提出“图灵测试”之后,AI已经爆发了两次热潮,相应的也跌入了两次低谷,目前看应该是进入了第三次的热潮,但是之后是迎来“奇点”,还是第三次低谷,尚不可知。

  强人工智能(也就是通用人工智能),或者说机器的自我意识,自然是一个终极目标,但是当我们朝着这个目标行进的时候,总会获得一些小奖励,这些小奖励就是现在的弱人工智能,一些很实用的算法理论跟应用,虽然落地还有一些难度,但是整体趋于成熟,商用的应用已经开始遍地开花,短时间内将会引发全行业AI+,所有业务都会被AI刷新一遍,当然有人会说一堆职业要消亡了,又有很多人要下岗了。但是也同样会创造出更多的职业与岗位。而且自有人类以来,这件事我们也干过不少次了(前三次工业革命),完全不用惊慌,历史的车轮滚滚而行,总会丢下一部分人,又载上另外一部分人,时代就是逆水行舟,不进则退,总要保持学习,保持上进,保持饥渴。如果时代抛弃了你连一句再见也不说,那你就得赶紧加快脚步上去揍它一顿。

--------------(这看上去像一根线)--------------------

  闲话少说,为各位呈上各类流弊的算法简介(通俗易懂的说明,具体细节不表),可能会有些地方讲的不对,希望能得到一点友情提醒,我会立马修正。

CNN:卷积神经网络

  我在上一篇关于 tensorflow(谷歌开源AI框架)的踩坑日志有说过一点关于卷积神经网络的基本原理。

  当然具体原理我还是推荐看这篇 http://www.36dsj.com/archives/24006

  就是卷积层+N层神经网络BP层(也叫全链接层) 关于 BP的原理我之前有写过一篇了,翻回去看看就有了。

  那卷积层具体是什么呢?很像是一个滤镜层,我们知道实际上图像是由每个像素点组成的矩阵,然后每个像素点又可以由 RGB 3原色的数值表示范围是(0-255) 如果做一次灰度处理,那么每个像素点就是由0-255的灰度数值表示。那图像就等同于 一个 2维的 数字矩阵。 当然如果颜色想保留的话,不做灰度处理的话,RGB就等同于3个不同的矩阵,长宽是一样的。里面的数值不同而已。

  那我们回到卷积层,就是拿一个卷积核在这个矩阵上滚一遍(矩阵相乘)得出一个新的矩阵。卷积核也是一个小的2维矩阵,不同数值的卷积核,可以对这张图片提取的信息不同,这就是图像的特征, 比如说把一个专门提取竖线的卷积核在原始图片上滚一遍,就能获得一个全部都是竖线的特征图。如果我们要做一个竹子的识别器,肯定要用这个特征了。但是如果要做一个篮球的识别器,就用不上了,用或者不用,这是由BP层决定的。但是提取的工作还是要做的,但是怎么决定卷积核应该是由什么数值构成呢?随机! 因为这个算法比较通用,可以做成识别各种东西,所以卷积核应该是任意特征都能提取的,那只要生成1000,1W ,或者1亿个卷积核,每个都在这个图像上滚一遍,就能提取1亿种特征了。如果最后BP层只用到其中一个特征就能识别竹子或者篮球。那岂不是非常浪费,所以卷积核的数量要根据识别复杂度而定。否则计算量很可怕。

  当然CNN里面还有很多细节,比如池化层,归一化,dropout 。

池化层也有几种不同的方法,如果是求均值就是mean pooling,求最大值就是max pooling

池化就是降维比较好理解一点吧,为了减少计算量。

归一化(Normalization,也叫规范化)是为了让数据在网络中传输的时候不要太大,或者太小,或者太稀疏。

  早前的一些归一化方法 看这篇  《归一化方法总结》 http://blog.csdn.net/junmuzi/article/details/48917361

后来google 有一篇论文讲了另外一种方式 Batch Normalization http://blog.csdn.net/zhikangfu/article/details/53391840

听说效果不错。

dropout是指随机的把一些特征失效掉来训练这个网络,这样泛化能力比较强。我自己实践过一次,但是感觉训练过程变得更久了,波动更大了。慎用。

全链接层的梯度下降方法也有很多种如:http://blog.csdn.net/xierhacker/article/details/53174558

这里列了一些tensorflow 内置的一些梯度下降优化器 GradientDescentOptimizerAdagradOptimizerMomentumOptimizer,AdamOptimizer

CNN的算法里面有很多参数要调,比如说网络的层数,初始学习率,dropout的概率等等,这类统称为超参数

有文章说现在很多CNN的工作都是很枯燥的调参数,因为训练一次周期很长,超参数的调整又跟具体的要识别的东西相关性很强,比如说训练10种类别,跟训练1000种类别的网络深度就是不同的,前面我写踩坑日志的时候就犯了这个错误,拿一个很简单的网络去训练很多种类,结果一直不收敛。loss很大。

当然关于调参数也有一些很实用的实践性经验分享,大家可以自行去找找。这里我就不细说了。

虽然我们刚才说的都是图像上的,但是文字跟音频也可以转化成这种输入,类似说1*N的矩阵。

----------------------(这看上去跟第一根线没什么区别)----------------------

RL:强化学习(reinforcement learning)

关于RL的详细内容可以看 Deepmind 的公开课

  这里给大家分享一个B站带中文字幕的视频,每课100分钟左右,总共10课,16个小时也能看完,不过因为相对比较晦涩,我建议是不要一次性看完,不然一脸懵逼的进去,一脸懵逼的出来。遇到不懂的就去问问,懂了再继续看。 https://www.bilibili.com/video/av9831889/

强化学习核心的原理是:

  造一个agent(智能代理者)跟环境(state)交互(action)然后根据获得的反馈(reward)反复训练后,这个agent可以在遇到任意的state时都能选择最优的决策(action),这个最优的决策会在未来带来最大化的reward。

RL解决的问题是连续决策问题,就是有一系列的决策之后才会获得奖励的现实问题。比方说某baby 3岁,暂且先叫A酱,A酱还不会拿杯子喝东西。我们知道最优策略就是

:靠近杯子,拿起来,倒进嘴巴里。

但是她一开始的时候并不知道看到一个杯子在远处,究竟是应该靠近,还是远离。而且就算反复做了这2件事,也没有一些立即奖励给她(喝到东西)。所以说奖励是滞后的,但是我们希望可以对动作的打分,根据分数的高低让智能体决定要做的事情,比方说 靠近杯子10分,远离杯子-10分。如果每一步都有这样的标量作为衡量标准的话,那么她就可以知道要获得奖励的最优策略是什么了,当然有些动作在不同的场景下会导致不同的效果,所以这里的打分要针对 state-action pair(状态-动作对) 评分。

所以RL的作用就是经过反复的训练,为每对action-state 提供一个分数。这就Value based(其中的一种的RL算法实现方式)。

如果先假设 最终的奖励分数是 100分。那么究竟前一步应该分配多少分呢?然后前前一步又是多少?这里就用到了贝尔曼方程

具体细节可以看这篇 http://blog.csdn.net/VictoriaW/article/details/78839929

s :state

a:action

Q就是我上面讲的分数。然后Qπ 指的就是最优策略下的分数函数。

P是指状态s下决定某动作a之后 =》下一个状态s的转移概率。(比方说A酱虽然见到了杯子,然后她使用了动作a1(拿起来)但是不一定能够成功,这里有个转移概率P)。

R是指立即奖励。

指折扣率,是一个0-1的数,就是指未来的Q值对当前Q的影响有多少,如果是1的话就是100%影响。

这里我们可以看到,当前的Q值是由两部分组成,当前R值+下一个状态的Q值。

假设 折扣率这里是0.5,最终的奖励分数是 100分。

反过来推导的话,A酱在喝到杯中物的时候 Q值等于R值,因为没有下一个状态了。在往前一个动作 (拿起杯子)因为只有1个动作,而且立即奖励R=0,所以Q值等于 0+ 0.5*100=50 。

然后再往前面一步,状态1(见到杯子)的时候 选择 (靠近),所以Q值 是 0+0.5*(0+ 0.5*100)=25

这是我们通过已知最优策略然后用贝尔曼方程反推Q值,这样便于理解Q值的含义。

虽然不知道最优策略,但是如果我们有一个所有状态所有动作的 记录Q值的表,只要反复通过上面的过程推导就能知道这个大表的所有值,最终就能通过这个大表知道最优策略。

这就是Q-learning 算法的逻辑。

当然Q-learning是不实用的,因为如果state 跟action有非常多,这个表数据量要爆炸的。

所以后续又发展好多算法,我推荐读一下DQN相关的算法。

RL很早很早就有了。

强化学习的历史发展

  1. 1956年Bellman提出了动态规划方法。
  2. 1977年Werbos提出只适应动态规划算法。
  3. 1988年sutton提出时间差分算法。
  4. 1992年Watkins 提出Q-learning 算法。
  5. 1994年rummery 提出Saras算法。
  6. 1996年Bersekas提出解决随机过程中优化控制的神经动态规划方法。
  7. 2006年Kocsis提出了置信上限树算法。
  8. 2009年kewis提出反馈控制只适应动态规划算法。
  9. 2014年silver提出确定性策略梯度(Policy Gradents)算法。
  10. 2015年Google-deepmind 提出Deep-Q-Network算法。

因为alphaGo 就是基于RL的,主要用了蒙特卡罗树搜索算法 (MCTS)然后RL这两年又被大神们推进了好多优化。

这里有一篇 http://geek.csdn.net/news/detail/201928

我摘一段放这里说明一下实现RL算法的几种类别:

  • Model-free:不尝试去理解环境, 环境给什么就是什么,一步一步等待真实世界的反馈, 再根据反馈采取下一步行动。
  • Model-based:先理解真实世界是怎样的, 并建立一个模型来模拟现实世界的反馈,通过想象来预判断接下来将要发生的所有情况,然后选择这些想象情况中最好的那种,并依据这种情况来采取下一步的策略。它比 Model-free 多出了一个虚拟环境,还有想象力。
  • Policy based:通过感官分析所处的环境, 直接输出下一步要采取的各种动作的概率, 然后根据概率采取行动。
  • Value based:输出的是所有动作的价值, 根据最高价值来选动作,这类方法不能选取连续的动作。
  • Monte-carlo update:游戏开始后, 要等待游戏结束, 然后再总结这一回合中的所有转折点, 再更新行为准则。
  • Temporal-difference update:在游戏进行中每一步都在更新, 不用等待游戏的结束, 这样就能边玩边学习了。
  • On-policy:必须本人在场, 并且一定是本人边玩边学习。
  • Off-policy:可以选择自己玩, 也可以选择看着别人玩, 通过看别人玩来学习别人的行为准则。

RL现阶段比较实用的算法是:

DQN,DDPG, A3C,DPPO 等

这里有一篇deepmind 关于DQN混血的报道 http://tech.ifeng.com/a/20171010/44710270_0.shtml

摘一张图大家看看

横轴是训练次数,纵轴是超过人类水平百分比,100%就是等同于平均的人类玩游戏的水平,在57款雅达利游戏中的平均表现。

今天就先讲这么多,之后我会陆续补充一下算法的综述,感谢各位阅读!

GANs:生成对抗网络(待续)

RNN:循环神经网络(待续)

LSTM:长短期记忆网络(待续)

迁移学习(待续)

这两年一些很有趣的开源应用示例,以及使用的算法

CNN :图像识别 人脸识别 风格迁移

RL :alphaGO 游戏代打 机器人控制 阿里商品推荐系统

GANs:风格迁移 草图生成实体图 猫脸转狗脸  去掉图像遮挡  年龄转移   超分辨率

RNN  LSTM:翻译模型,生成古诗,生成对联,PSD生成HTML代码

原文地址:https://www.cnblogs.com/7rhythm/p/8545362.html

时间: 2024-08-29 00:24:05

人工智能算法综述的相关文章

特征选择常用算法综述

特征选择的一般过程: 1.生成子集:搜索特征子集,为评价函数提供特征子集 2.评价函数:评价特征子集的好坏 3.停止准则:与评价函数相关,一般是阈值,评价函数达到一定标准后就可停止搜索 4.验证过程:在验证数据集上验证选出来的特征子集的有效性 1.生成子集 搜索算法有 完全搜索.启发式搜索.随机搜索 三大类. (1)完全搜索 <1>宽搜(Breadth First Search):时间复杂度高,不实用 <2>分支界限搜索(Branch and Bound):其实就是宽搜加上深度的限

网格聚类算法综述

网格聚类算法综述 (1)STING STING(Statistical Information Grid)是一种基于网格的多分辨率聚类技术它将空间区域划分为矩型单元.针对不同级别的分辨率,通常存在多个级别的矩形单元,这些单元形成了一个层次结构:高层的每个单元被划分为多个低一层的单元.每个网格单元属性的统计信息(例如平均值.最大值和最小值)被预先计算和存储.这些统计信息对于下面描述的查询处理是有用的. STING有几个优点:(1)由于存储在每个单元中的统计信息提供了单元中的数据不依赖查询的汇总信息

关联规则挖掘算法综述

摘  要  本文介绍了关联规则的基本概念和分类方法,列举了一些关联规则挖掘算法并简要分析了典型算法,展望了关联规则挖掘的未来研究方向. 关键词  数据挖掘,关联规则,频集,Apriori算法,FP-树 1 引言 关联规则挖掘发现大量数据中项集之间有趣的关联或相关联系.它在数据挖掘中是一个重要的课题,最近几年已被业界所广泛研究. 关联规则挖掘的一个典型例子是购物篮分析.关联规则研究有助于发现交易数据库中不同商品(项)之间的联系,找出顾客购买行为模式,如购买了某一商品对购买其他商品的影响.分析结果可

运动目标检测跟踪各过程算法综述

运动目标检测跟踪各过程算法综述 图像预处理数字图像中的几种典型噪声有:高斯噪声来源于电子电路噪声和低照明度或高温带来的传感器噪声:椒盐噪声类似于随机分布在图像上的胡椒和盐粉微粒,主要由图像切割引起或变换域引起的误差:加性噪声是图像在传输中引进的信道噪声.一般来说,引入的都是加性随机噪声,可以采用均值滤波.中值滤波.高斯滤波等方法去除噪声,提高信噪比.均值滤波在噪声分布较平均,且峰值不是很高的情况下能够得到较好的应用:中值滤波对尖脉冲噪声的滤除有较好的效果,并且能突出图像的边缘和细节:高斯滤波对滤

运动目标跟踪算法综述

运动目标跟踪是视频监控系统中不可缺少的环节.在特定的场景中,有一些经典的算法可以实现比较好的目标跟踪效果.本文介绍了一般的目标跟踪算法,对几个常用的算法进行对比,并详细介绍了粒子滤波算法和基于轮廓的目标跟踪算法.最后简单介绍了目标遮挡的处理.多摄像头目标跟踪和摄像头运动下的目标跟踪. 一.一般的目标跟踪算法 一般将目标跟踪分为两个部分:特征提取.目标跟踪算法.其中提取的目标特征大致可以分为以下几种: 1) 以目标区域的颜色直方图作为特征,颜色特征具有旋转不变性,且不受目标物大小和形状的变化影响,

Python神经网络算法与深度学习视频教程人工智能算法机器学习实战视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Python 人工智能算法工具包 SimpleAI

SimpleAI 是 Python 实现的人工智能算法工具包,示例代码: from simpleai.search import SearchProblem, astar GOAL = 'HELLO WORLD' class HelloProblem(SearchProblem): def actions(self, state): if len(state) < len(GOAL): return list(' ABCDEFGHIJKLMNOPQRSTUVWXYZ') else: return

象棋人工智能算法的C++实现(一)

点击上方"程序人生",选择"置顶公众号"第一时间关注程序猿(媛)身边的故事 前言:自AlphaGo战胜世界著名九段围棋手李世石之后,我就对棋类人工智能产生了极大的兴趣,并想要自己实现象棋的人工智能.然而那个时候我还在读高二,没有这么深厚的代码基础,所以那个时候也就只能想想了.但是现在不一样了,通过学习编程,已经可以让我在棋类人工智能这个领域向前探索了.推荐下小编的C++学习群:513801371,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的

微软为Bing开源搜寻人工智能算法 SPTAG

我们日常的网络活动中,有不少都是在进行搜寻,而文字搜寻之外,非文字搜寻例如声音或者图像搜寻变得越来越普及.这些功能需要人工智能辅助以分析声音或者图像内容,微软的搜寻用人工智能算法 SPTAG 最近终于开源化,让开发社群可以参与和使用这技术.微软的 Space Partition Tree And Graph(SPTAG)人工智能算法可以使开发人员能够以毫秒为单位筛选向量,也就是单词.图像像素和其他数据点的数学表示形式.微软表示,SPTAG(用 C++ 编写并用 Python 包装)是众多 Bin