上了一学期的AI课程,零零散散学了不少知识,也听了些讲座,现在做一些总结。
还有,最近博主开了自己的微信公众号,有兴趣的可以关注一下,名称为“深水猫妖”,平时更新一些科技资讯,和基础学习内容,以及最近研究领域的论文评述。
Text Book:
Artificial Intelligence - A Modern Approach
authors: Stuart Russell, Peter Norvig
Teacher: 侯佳利
1、Artificial Intelligence
- 第二次世界大战开始迅速发展的新兴技术
- 1956年正式命名
- 一般应用:
弈棋 :桥牌,西洋棋,象棋,围棋(本妖表示我只会下五子棋)
证明数学定理、作诗、诊断疾病(我好像都不会)
自动化系统、机器人控制、游戏、排程、决策支援
家电控制(这里就要结合物联网了,也是AI的趋势)
模拟测试、电脑绘图
预测,天气、地震、股市等。
……..我想人类要失业了,共产主义指日可待
定义
一门致力于以计算过程来解释并模拟智能行为的研究(1990,Schalkoff)
关于智能行为自动化的计算机科学分分支(1993,Lauger and Stubblefield)
范畴
应用实例
- 日本展示时尚机器人HRP-4C ,2009.3.16, 日本产业技术综合研究所
拥有个移动马达,一个马达相当于人类的一个关节
158cm/43g(感没感觉有点矮)
GMIC ,2014,BeiJing 大阪大学 智能机器人研究所
石黑浩,日本当代机械人之父
有65种细微表情
手机控制直升机
2、著名人物介绍
Alan Turing
- 1936 计算机之父
Truing Machine为计算机计算理论奠定基础
John von Neumann实作第一部电子计算机
- 1943 信息安全之父
成功破解了二次大战德国最好的加密器 Enigma- 1950 人工智慧之父
提出Turing Test奠定了人工智慧验证方式
Bletchley Park
二次大战期间,由英国Bletchley Park致力于破解德军的Enigma和Lorenz两套加密系统
同盟国集结了破解机密的专家,Alan Turing 和 Dilly Knox,顺利破解了Enigma 和 Lorenz
在第二次世界大战的大西洋之役中挽救了英国船队免遭德国潜艇U-boot狼群战术的攻击
3、Turing Test——人工智能的判定
由计算机科学之父Alan Turing在1950年提出 Computing Machinery and Intelligence
用来以科学方式检定电脑的行为是否符合人工智能,具体方法如下:
房间有两部电脑,分别由人和程式控制
受测者分别以电脑打字与两部电脑聊天五分钟
猜测哪一个后面是人,哪一个是程式控制
30%以上的人类被欺骗,则通过测试
应用:著名的聊天程式ELIZA,MGONZ, ALICE
MSN机器人
2014年首部通过Turing Test的软件:
http://news-b5.zhengjian.org/node/22258
4、挑战——知难行易
人类对很多动作或行为都可以很容易做到,但很难说清楚操作的定义
如果能清除的定义,机器人就能做到
5、人工智能的学理基础
哲学基础
感觉老师和PPT上的讲解不是很清楚,暂略
我觉得任何学科的基础都是哲学,这是一个很深也很根本的理念。等我对此有了些理解后,再另作补充。
理论基础
数学方面:逻辑、概率论、决策、计算、正规法则
心理学:观察人类心灵,阐述所发展原理的科学语言
语言学:有语言结构和定义的定理 ,《语言行为》
计算机科学:各种将AI真正实现的工具
5、演化史
孕育期:1943-1956
最早的研究者是:Warren McCulloch 和Walter Pitts(1943)
以三项资源为起点,建立人工神经元模型:
基础生理学(脑神经功能的知识)
命题逻辑的正规分析
计算理论(Alan Turing)诞生(1956年)
由John McCarthy,召集了自动机器理论、类神经网络及智慧研究的学者,召开达特矛斯会议
定义人工智能的名称
AI正式成为新的研究领域
早期热忱:1952-1969
但是当时电脑能力有限,程式能做很少,主流声音都是电脑不能做的事情
1957年,Herbert Simon和Allen Newell提出通用问题解决机(GPS,General Problem Solver)
一些实际存在的事实:1966-1974
很多预期的实现,并没有如期实现:
预言:十年内电脑可以成为西洋棋冠军,但是实现花了四十年
小规模的问题上成效卓著,但对于太复杂的问题未见显著的进步
智识期础的系统:能力的关键1969-1979
AI成为工业:1980-1988
专家系统的成功
美日电脑科学竞争:
1981日本宣传第五代电脑计划
美国相应提出MCC(微电子和电脑技术公司)
AI工业从数百万美元的规模暴涨到十亿美元
类神经网络的重新出发:1986-至今
最近的事件:1987-至今
自主规划和排程:NASA的代理人程式控制在百万公里外的太空飞行器工作排程
国际级棋坛大师与电脑程式
旅行者与语音理解
实验室的分析家与即使的专家系统
机器人系统为一位驾驶员ALVINN
淋巴结病理学与专家系统
交通监控人员与自动监控系统
6、挑战
不能独立思考
道德与宗教的争议
7、游戏人工智能
制作怪兽、敌人、虚拟队友
碰撞侦测,非玩家角色控制(NPC)
定性与非定性AI:
定性Deterministic
行为或表现是明确的且可以预测,例如追逐演算法非定性Nondeterministic
具有某种程度的不确定性,有点不可预测
例如让NPC学习玩家的对战战术
作弊
有限状态机
模糊状态机Fuzzy State Machine:Fuzzy Logic
NPC躲避障碍物
规则式
1、代理人Agent
一切能透过感测器sensor感知所处环境并透过执行器actuator对该环境产生作用的东西
人类代理人:
Sensor: 眼睛、鼻子、耳朵和其他器官
Actuator:手、脚和其他部位
机器人代理人:
Sensor:摄影机、红外线测距仪、陀螺仪、电子罗盘
Actuator:服务器马达、步进马达
软件代理人:
Sensor:接受键盘Click,读取档案,接受网络封包
Actuator:荧幕、报表、写入档案,发送网络封包
每个代理人都能感知自己的行动——>知道自己做了什么
但代理人不一定能感知行动的效果,不知道行动后发生什么事,不知道这么做会对环境发生什么影响
- 代理人
percept知觉:表示在任何给定时刻下代理人的感知输入
percept序列:代理人所收到的所有输入的完整历史
Agent行动选择:取决于当下的Percept序列
Agent函数:供代理人依知觉序列对应到行动选择决定代理人的行为(抽象数学表示)
Agent程式:做人造代理人的代理人函数
举例1:
- 吸尘器
Sensor:位置侦测、干净与否
Actuator:移动马达、吸力马达
Action:向左移动、向右移动、吸、停
举例2:
- RoCar
为可程式化控制的机器车
以USB与电脑连接
可高阶语言控制
具有多种Sensor:
三个光线感测器:可以控制循黑色轨迹行驶
温度感测器:火灾警示或环境温度侦测
三个声音感测器:可以接收声音事件
两个碰撞感测器:可以侦测左前方、右前方、正前方障碍物
具有8个DIP开关
Actuator
两组马达独立:控制前进、后退,可搭配进行左、右转
蜂鸣器:发出声音
一组数字LED:可以显示数字状态
七个发光二极体:灯光变化,表达二进制数字
Action
前进
后退
左转
右转
蜂鸣器警示(可以指定音高、音长)
一个数字LED显示数字状态
八个发光二极体,做灯光变化
PID控制器
依据Sensor信号,来调整发送至Acuators的输出信号,用以改变受控制状况的装置
比例单元P:目前误差
积分单元I:过去累计误差
微分单元D:未来误差
适合用于动态且不确定的控制,透过持续回馈进行持续改造,广泛使用在多轴飞行器的稳定控制系统
例子3:
- DJI PHANTOM 4 Pro
四轴飞行器
具有前、后、下三组视觉定位壁障系统
具有下方超音波测距仪
可提供GPS自稳和视觉自稳控制:
垂直自稳:GPS+/- 0.5米,视觉+/-0.1米
水平自稳:GPS+/-1.5米,视觉+/-0.3米
2、理性代理人:
做对事情的搭理人
代理人函数的行动都设定正确
进行使代理人更加成功的新购的那个
*需要衡量的方法来评价代理人是否成功
效能指标
是代理人成功程度标准的具体表现
理性代理人会尽力满足效能指标
错误的效能指标将会带来灾难
理性判定的四个方面:
定义成功标准的效能指标
代理人对环境的先验知识(Prior Knowledge)
代理人能执行的行动
代理人当下的知觉序列
- 理性代理人的定义:
对于所有的知觉序列,根据该知觉序列与代理人内建的先验知识所提供的证据,理性代理人应该选择预期能使其效能指标最大化的行动。
全知、学习和自主性
全知(omniscience)
全知的代理人知道动作的实际代价,并且能够据此决定其行动
理性(rationality)
在实际环境中全知是不可能的
合理性仅关心那些假设已觉察到、预期中的成功
理性是使期望的效能最大化,全知是使实际效能最大化
理性的选择取决于到当下为止的知觉序列,在一定的时间里,所谓的理性,就是:
- 定义成功度的效能衡量
- 代理人觉察到的每一件事:整个感知的历史过程为感知序列
- 代理人对环境的认识:有恰当的感知器
- 代理人能够执行的动作
理性的选择:
- 不能让代理人进行肯定愚蠢的活动
- 应该在行动前对环境进行观察:透过感测器修正知觉->资讯收集
- 适当的探索未知的环境
- 具备自主学习的能力:独立于先验知识、由随机行动到内建反射行为
3、环境
任务环境:
- 本质上系以理性代理人作为解答的问题
定任务环境:
制定理性代理人规格(任务环境PEAS)
效能指标(Performance)
环境(Environment)
Actuators执行器规格
Sensors感测器规格
设计代理人的第一步是制定任务环境的规格:要尽可能地全面
举例:
代理人种类:
司机
效能指标:
安全、快速、守法、舒适的旅途,利润最大化
环境:
道路,其他车辆,行人,顾客
执行器:
方向盘,油门,刹车,信号灯,喇叭,显示器
感测器:
摄影机,声纳,速度计,引擎感测器,键盘
任务环境的性质:
- 完全可观察、部分可观察
- 确定性(deterministic)、随机性stochastic
- 片段的episodic、连续的sequential
- 静态的static,动态的dynamic
- 离散的、连续的
- 单一代理人,多代理人
4、代理人的结构
架构:
具备尸体感测器和执行器的计算装置
代理人=架构+程式
接受来自sensor的刺激
处理接受的刺激
控制actuator反应出行为
演算法-表格驱动代理人失败
记录知觉序列
使用知觉序列作为index
到行动表中查询:行动表中表示了程式做制作的代理人函数
依据查表所得回应行动
失败的原因:
没有一个实体代理人有空间可以存储该表
设计者没有时间来建立该表
没有代理人可以从经验中学到该表的所有正确条目
即使环境够简单,如何在表中填入所有的可能性仍很困难
5、基本的代理人程式
简单反射型代理人(reflex agents)
agent基于当前的知觉,选择自己的行动
忽略过去的知觉历史(知觉序列)
条件-行动规则
基于模型(model-based)的反射型代理人
保有历史的内部状态,以state记录环境状态的改变
具有目前状态和目标资讯
以提高代理人的效用为目的
6、学习型代理人
学习元件learning element
负责做出改进
接受批评者回馈的评价决定如何修改执行元件
执行元件Performance element
负责选择外部动作
批评者critic
评价代理人做得如何订出奖励或惩罚
问题产生器
负责提出探索行动
使代理人学到新而有价值的经验
之前提到过RoCar的特点:
可程式化控制的机器车
以USB与电脑连接
可高阶语言控制:提供.NET程式界面
有多种sensors
//宣告RoCar事件处理程序
private void RC_DIPsChanged(byte DIPsReceive)
{
//事件处理的动作
//DIPsReceive传回指拨开关的状态0-255
}
//碰停车
//宣告vRobots物件
vRobots.RoChar01 RC=new vRobots.RoCar01();
//在InitializeComponent()后设定TouchsChanged事件处理程序
this.RC.TouchsChanged += new
vRobots.RoChar01.TouchsChangedEventHandler(RC_TouchsChanged)
private void RC_TOuchsChanged(Byte TouchReceive)
{
RC.MoveC('X');
RC.WaitN(3000);
RC.MoveC('F');
}
RoCar的缺点:
- 目前需要通过USB执行线控操作
- 下一代RoCar可以增加无限模组,但是成本比较鬼
- 衍生问题:多辆车控制的时候,其信号会互相干扰
- 电池消耗量很大
- 不提供烧录NB为处理中心可以提供较为复杂的控制
(题外话,感觉这个作为教学用,其实还可以,更偏向软件方面的学习,高阶的设计,但是对于硬件底层方面,进行了比较全面的封装,作为学者无法学习到)
相关产品:
RoArm
RoAnt
RoDog
RoBoy
..
1、问题解决代理人
智能代理人应该最大化自己的效能指标
简化最佳化效能:具有Goal并朝满足其需求而行动
例如:
代理人正在罗马尼亚享受假期,在最佳化假期乐趣的前提下,有一张隔日从Bucharest起飞的机票,而且不能改签。我们的目标是赶上飞机。**
代理人的简单设计方式:
把目标和待求解的问题以正规化方式表达
呼叫搜寻程序对此问题求解
当代理人有多个选项的时候:
-检验各种可能的动作序列
-从中选出最佳的序列
正式定义
可定义为四个部分:
初始状态initial state: In(Arad)
可使用的所有动作(actions):
//{
, , }
// 状态空间(state space),路径(path)目标测试:
确定指定的状态是否为目标状态路径成本path cost
每一条路径的数值化成本
抽象化:把与问题无关的细节去除的过程
正规化方法:
八后问题:
状态:把0到8个皇后放在棋盘上
初始状态:棋盘上没有皇后
后继函数:加一个皇后到棋盘上任意空格
目标测试:8个皇后都放在棋盘上,且不互相攻击
==》改良后
状态:摆放n个皇后,让左边n行里每行都有一个皇后
初始状态:棋盘上没有皇后
后继函数:把一个皇后放到最左侧的空行中的任意一个空格,且没有一个皇后能攻击另一个
目标测试:8个皇后都在棋盘上,且互不攻击
对解的搜寻
正规化问题后的求解过程是透过在状态空间中的搜索来完成的。
基本的搜寻是使用初始状态和后继函数共同定义状态空间所产生的明确搜寻树(search tree)
如果有多条路径可以到达同一个状态,得到的是一个搜寻图graph
搜索方法:深度优先、广度优先
这两个概念在基础的数据结构就有提到,原理也很是简单。
节点的数据结构:
STATE:该节点的状态
PARENT-NODE:父节点(类似继承)
ACTION:由父节点产生该节点的动作
PATH-COST:路径成本,由初始节点到该节点的路径成本
DEPTH:自初始状态到该节点的步数
具体代码查看后续其他相关博文
测量问题求解的效能:
完整性Completeness
最佳性Optimality
时间复杂度Time complexity
空间复杂度Space complexity
搜索策略
广度优先:breadth-first search
自根节点开始,展开每个后继节点,再展开后继的每个后继
一层全部看完再展开下一层
成本一致搜索:uniform-cost search
为广度优先的优化
每一步的成本可以不同(由单步成本函数决定)
可应用在任何单步成本函数都是最佳的演算法
当单步成本相同时候,做特例广度优先搜索
深度优先搜索:depth-first search
有限深度搜索:depth-limited search
深度优先的改良,有深度限制
迭代深入深度优先搜索:iterative deepening search
有限深度优先的改良,逐渐调整深度限制双向搜索
同时执行两个搜索,分别从初始和目标开展
两个搜索在中间相遇就会停止
使用不完全信息的搜索
信息的不完整会导致下面三种类型的问题:
无感测问题sensorless problem
偶发性问题Contingency problem
探索性问题Exploration problem
随机对象
建立:Random r= new Random
依照指定区间传回随机数:
r.Next(-50,50);//传回-50到49间的整数
随机数的定义
第一个随机数由随机种子(Rand Seed)传入第一个方程式
第一个随机数传入第二个方程式得到第二个随机数
//宣告Class的属性
Random r=new Random();
public const int DiTimes=1000000;
public int[] di=new int[6];
//button的事件
//清空
listBox1.Items.Clear();
for(int i =0;i<6;i++)
{
di[i]=0;
}
.....
由来
达尔文的进化论
子代继承双亲的特征
应用
进行最佳化求解
商业预测
投资决策
机器学习辨识系统的处理机制
时间序列的预测特性
最佳化求解
效率高
适用于解答空间大的问题
非全域最佳解,知识近似解或是可接受解
以族群为单位,可以同时平行搜寻数个可能的答案
族群大小设定以时间特性与时间成本为考量
操作状态随随机值而改变
运算步骤存在随机性
基本运算
遗传演算法三种主要的基本运作机制:
选择 selection
轮盘法:改良后为期望值法
根据每个染色体的适应函数值高低排序
决定出该染色体被选择的几率
分数高者被选中的几率高
交配 crossover
将不同的染色体由随机交配的过程(局部交换基因)
停止条件:
固定代数
收敛程度评估
方法:
单点式交配
两点式交配
均匀交配
环境控制参数:
群体大小
交配率
Crossover 方式
Selection方式
突变率
代数或停止条件
群体大小:
同一代群体中染色体个数
通常是固定的
群体设定的大小决定了训练时间的长短、训练的品质、搜索广度以及局部最佳解的陷阱
交配率
交配运算:提供进化的主要运算
交配率:设定交配发生的机率
通过上面三个操作过程,以亲代为基础繁衍出新的子代,比较好的基因的竞争力比较大,也有较高的概率进行下一代的繁衍
准备工作:
编码,设计虚拟生物染色体结构,描述虚拟生物的特征
经常采用二进制编码
评估函数:决定何为试着生存,让虚拟生物朝适应性高的方向演化
人脑原理
人脑由神经元组成:
神经元间由化学变化产生电气信号;
接受电器信号进行信号传达;
进行大量、平行信号的处理
大脑运作具容错能力,部分神经元受损不影响整体运作。
神经元、细胞体、细胞核、突触
类神经网络:
节点nodes/单元units
链接links
权重weight输入层、输出层、隐藏层
节点
每一个节点执行一个简单的计算,并传出
活性程度:根据从相关节点收到的每个输入信号的值,以及每个输入链接的权重计算得出
三种常用的触发函数:阶梯函数、信号函数、S形函数
感知机perceptrons
单层向前回馈网络
输出单元彼此独立,每个权重只影响一个输出
能表达AND、OR和NOT的感知机,但是无法表示XOR
- 线性可分割函数的学习
感知机能表现什么问题比如何学习问题问题更加重要
若有足够的训练范例,存在一个可学习任何线性分割函数的感知机
网络结构
有很多种,主要区别向前馈送(feed-forward)和递归(recurrent)
分为三层:输入层,输出层,隐藏层
前馈:每一层与下一层的所有结构链接
倒递归:输出层开始计算误差,向生意层修正权重,逐层向后传递误差的修正
递归网络中最容易理解的,使用对称性权重的双向连接,所有的单元同时是输入和输出单元,只有一个函数——活性函数,程度是+/-1
根据网络的权重选择并决定这些函数中的哪一项确实有表达能力
最普遍的学习方法是倒递归(back-propagation)
- Link向前传递信号
- 误差以偏微分的方式向后修正
检视类神经网络
类神经网络的应用
输入资料的处理
转化为实数,通常会先正规为-1到1
布尔值:1为真,0为假
权重
输入值x权重的综合透过触发函数决定输出值
触发函数:Logistic函数,阶梯函数,双曲正切函数,线性函数
训练
目的是找出连接所有神经元值的权重,让输入资料可以透过神经网络得到所需的输出值
训练方式分为:监督式学习和非监督式学习
最常用的:监督式学习的倒递归法
训练过程
最小化均方误差,据此巨鼎前一层的修正值,方式是透过触发函数的导函数进行修正
步骤:
- 准备一组训练值,包括输入值与输出值,如果可以再加一组测试值,检验学习的成效
- 以随机数初始化权重
- 按照顺序读入训练,根据feed-forward决定输出值,持续传递到最终的输出值
- 计算输出值与期望值的误差
- 调整权重最小化误差
- 重复3-5直到停止条件成立
由来
1965年,UC Berkeley 的 Lotfi Zadehr教授提出:
模糊逻辑更接近人类解决问题的方式,人类行为中语义通常是模糊的,边界通常也是模糊的
传统计算机理论
研究明确值,以布尔值作为判断式的结果
模糊逻辑
每个问题的答案是不同程度的是,不同程度的否
适用于各种控制系统
例子:Fuzzy洗衣机
按下开始键,马达轻转动,测量衣物的重量,据此添加不同的水量,根据重量调整洗衣时程,根据水的浑浊程度调整洗衣时间。
模糊操作
归属函数的种类:
界定函数
修改归属函数传回的归属程度,不是绝对必要
模糊规则
通常以if A then B,若A则B的形式呈现
反模糊化
将输出强度聚集起来得到递归函数,转换求出明确输出值(单值输出归属函数)
Finite State Machine ,FSM
基本模型
应用
遗传演算法 Genetic Algorithms GA
由John Holland 在1975年提出
来自达尔文的进化论
GA和GP的比较
Gp在结构上具有GA所缺乏的弹性
可以搜索更大、更完整的解答空间
能有效的解决问题
由于GP搜索空间交大,因此所需的演化运算时间也比较长,较易产生特殊化的解答
GP的问题: