本笔记参照西安电子科技大学、浙江工业大学、哈尔滨工业大学慕课以及北京交通大学课程PPT记录。
如有错误,敬请指正!
第三章
一阶谓词逻辑表示法
谓词
谓词包括一元谓词、二元谓词、多元谓词
- 个体是常量:一个或者一组指定的个体;
- 个体也可以是变量:没有制定的一个或者一组个体;
- 变量具体赋值后,才能确定真假
- 个体可以是函数:一个个体到另一个个体的映射;
- 个体可以是谓词。
谓词公式:
单个谓词是谓词公式,称为原子谓词公式。
谓词公式的性质:
- 永真性
- 可满足性
- 等价性
- 永真蕴含
连接词
蕴含关系:P→Q,仅当Q为F时,表达式才为假
量词
- 全称量词
- 存在量词
全称量词和存在量词在同一命题中的次序会影响命题意思。
量词辖域:
量词辖域:位于量词后面的单个谓词或者用括弧括起来的谓词公式。
约束变元与自由变元:辖域内与量词中间名的变元称为约束变元,不同名的变元称为自由变元。
一阶谓词逻辑知识表示法
步骤:
- 定义谓词及个体
- 变元赋值
- 用连接词连接各个谓词,形成谓词公式
特点:
- 优点
- 自然性
- 精确性
- 严密性
- 容易实现
- 缺点
- 不能表示不确定的知识
- 组合爆炸
- 效率低
产生式规则表示法
确定性规则:
只要前提满足,结论一定正确
基本形式:IF P THEN Q、 或 P→Q、
不确定性规则:
基本形式:IF P THEN Q(置信度) 或 P→Q(置信度)
确定性事实性知识:
表示:(对象,属性,值) 或 (关系,对象1,对象2)
不确定性事实性知识:
表示:(对象,属性,值,置信度) 或 (关系,对象1,对象2,置信度)
产生式与蕴含式的区别:
- 除逻辑蕴含外,产生式还包括各种操作、规则、变换、算子、函数等。
- 蕴含式只能表示精确知识,产生式还可以表示不精确的知识。
巴科斯范式BNF(backus normal form):
产生式系统
- 规则库:相应领域内知识的产生式集合
- 综合数据库:存放问题求解过程中各种当前信息的数据结构
- 控制系统:由一组程序组成,负责整个产生式系统的运行,实现对问题的求解
产生式系统就是不断对特征进行匹配,并将匹配结果加入特征中,知道匹配到相应结果。
语义网络表示法
两个弧连接的结点之间的关系默认为合取关系。用封闭的虚线作为析取界限,表示析取关系,并注以DIS。
如果合取关系嵌套在析取关系内部,也应用虚线围起来,并标以CONJ。
“非”的关系用NEG表示。
蕴涵关系用一对封闭虚线表示,前项标以ANTE,后项标以CONSE。
具有继承性的关系:
- ISA:表示层次关系
- AKO:表示集合关系
- ISPART:表示组成关系
分块语义网络
结点:物理实体、概念、性质和关系。
弧:该关系所涉及参数。
lFORM-OF、COMP-OF均为LISP函数,在语义网络中表示为:
分类学网络
推理网络
点:断言,取值为真、假,或附以确信度。
弧:规则。
结点格式:
规则格式:
推理方式——混合主动式:
过程:不断修改各结点的可信度(后验概率),直至顶层结点的可信度超过某一阈值为止。
- 正向推理:每当用户输入一个证据E及其可信度,系统就沿推理网络修改各结点的可信度。
- 主动式推理:在推理的任何时刻,用户都可以为系统提供信息(任何层次结点的信息)。
- 反向推理:正向推理结束后,如果已经确定了存在某种矿藏,则输出结果;否则进行反向推理,为断定某种矿藏的成矿寻找有关数据。
框架表示法
一种描述所论对象属性的数据结构。
框架结构
例:教师框架
框架表示法的特点
- 结构性:便于表达结构性知识,能够将知识的内部结构关系及知识间的联系表示出来
- 继承性:框架网络中,下层框架可以继承上层框架的槽值,也可以进行补充、修改
第四章
问题规模很大或很复杂,以至于不可能考虑其目标的全部可能性时,以解决寻优问题为目标的优化算法就转变为局部搜索。
局部搜索算法的终止条件一般有两种选择:
- 时间限制
- 搜索获得的当前目标不能再改善
状态空间表示法
状态空间法:基于解答空间的问题表示和求解方法,它是以状态和算符为基础来表示和求解问题的。
主要包括:状态、算符、状态空间
状态
状态:表示问题求解过程中每一步问题状态的数据结构,一般用一组数据表示:
S
k
=
{
S
k
0
,
S
k
1
,
.
.
.
}
S_k=\{Sk_0, Sk_1, ...\}
Sk={Sk0,Sk1,...}
式中每个元素为集合的分量,称为状态变量。
迷宫问题的状态表示:
八数码问题的状态表示:
算符
算符:当对一个问题状态使用某个可用操作时,它将引起该状态中某些分量值的变化,从而使问题从一个具体状态变为另一个具体状态。
迷宫问题的算符:
八数码难题的算符:
问题的状态空间
问题的状态空间:用来描述一个问题的全部状态以及这些状态之间的互相关系。
状态空间常用一个三元组表示: ( S , F , G ) (S, F, G) (S,F,G)。
- S S S:为问题的所有初始状态的集合;
- F F F:算符的集合;
- G G G:为目标状态的集合。
八数码的状态空间:
状态图示法:状态空间的图示形式,其中节点表示状态,边表示算符,求解过程就是求相应路径的问题(搜索)。
二阶梵塔难题
状态:
算符:
状态空间图:
爬山法
局部最大值可能出现在局部最大值、“平坦”局部最大值、山肩的平坦处。
爬山法是一种贪心算法,即从当前状态出发,向相邻状态进行试探,若发现某个相邻转台比当前状态更好,则转入相邻状态并放弃当前状态。
八皇后问题
八皇后问题若不做任何约束,则可能的排列数很大。若限制每个皇后只能再同一行或同一列移动,则排列数大大减少。
八皇后问题中,需要采用一个代价函数h。其代表再八皇后问题中,两两冲突对的个数h值不能增加,只能慢慢减少,以此作为标准判断是否从当前状态移动到相邻状态。
图搜索问题
图的概念
- OPEN表:记录带拓展节点
- CLOSED表:记录已拓展的节点
- 必须记住从目标返回的路径
图搜索流程:
搜索图:算法结束后,所生成的“足迹”为一个图 G G G。
搜索树:由于每个节点都有一个指针指向父节点,这些指针指向的节点构成 G G G的一个支撑树。
图搜索分类
对OPEN表中节点排序方式产生了不同的搜索策略,不同的搜索搜索策略效率不同。
- 无信息搜索(盲目式搜索)
- 宽度优先搜索
- 深度优先搜索
- 等代价搜索
- 有信息搜索(启发式搜索)
- A算法
- A*算法
盲目式搜索
按预定的控制策略进行搜索,在搜索过程中获得的中间信息不用来改进控制策略。
宽度优先搜索(BFS):
BFS的性质:
- 属于图搜索
- 新拓展的节点排在OPEN表末端
- 当问题有解时,一定能找到解
- 方法与问题无关,具有通用性
- 效率较低
深度优先搜索(DFS):
与BFS的不同在于,DFS将待拓展的节点放在OPEN表的开头。
节点深度:
- 起始节点深度为0。
- 任何其他节点的深度为其父辈节点深度加1。
DFS的特点:
- 搜索一般不能找到最优解。若解在该分支上,则能很快找到解;若解不在该分支上,则不能;若该分支为无穷深度,则永远不可能找到解。可以定义深度界限 d m d_m dm来解决这个问题。
- 深度界限 d m d_m dm 不合理时,也有可能找不到解,如 d m d_m dm定义过小的情况。将 d m d_m dm更改为可变深度限制可以在一定程度上解决这个问题。
等代价搜索:
核心思想:利用边的代价,对OPEN表进行排序。若每条边的代价为1,则等代价搜索即为BFS。
小结:
- BFS按“层”进行搜索,先进入OPEN表的节点先被考察。
- DFS沿纵深方向进行搜索,后进入OPEN表的节点先被考察。
- 等代价搜索首先扩展最小代价节点。
启发式搜索
盲目式搜索的缺点:效率低,耗费过多的计算空间与时间。
盲目式搜索只知道 S 0 → n S_0→n S0→n,但是启发式搜索可以通过 S 0 → n S_0→n S0→n及 n → S g n→S_g n→Sg两者来判断目标,向最有希望的方向搜索。
八数码难题:
S 0 S_0 S0与 S A S_A SA、 S B S_B SB、 S C S_C SC相比, S B S_B SB与 S g S_g Sg最相似,变为 S g S_g Sg移动次数最少,故先拓展 B B B节点。
启发式信息:与具体问题求解过程有关的,并可知道搜索过程朝着最有希望的方向前进的控制信息。
启发式需要猜测:
- 从节点 n n n开始,找到最优解的可能性?
- 从起始节点开始,经过节点 n n n,到达目标节点的最佳路径的费用?
要解决这些问题,需要定义一个评价函数
f
(
n
)
f(n)
f(n),用于估算节点“希望”程度。
f
(
n
)
=
g
(
n
)
+
h
(
n
)
f(n)=g(n)+h(n)
f(n)=g(n)+h(n)
g
(
n
)
g(n)
g(n):从起始状态到当前状态
n
n
n的代价。
h ( n ) h(n) h(n):从当前状态到目标状态的估计代价(启发函数)。
A算法:
-
局部择优算法
- 把初始节点 S 0 S_0 S0放入OPEN表中,表示 f ( S 0 ) f(S_0) f(S0);
- 如果OPEN表为空,则问题无解,退出;
- 把OPEN表的第一个节点(记为节点 n n n),放入CLOSED表中;
- 考察节点 n n n是否为目标节点,若是,则得解,退出;
- 若节点 n n n不可拓展,则转第2步;
- 拓展节点 n n n,用评价函数 f ( x ) f(x) f(x)计算每个子节点,并按评价值从小到大的顺序依次放入OPEN表的首部,并为每一个子节点都配置指向父节点的指针,转第2步。
-
有序搜索算法:选择OPEN表中具有最小 f f f值的节点作为下一个要拓展的节点。
八数码难题难题的有序搜索搜索图:
有序搜索有一点儿类似DFS。
A*算法:
g ∗ ( n ) g^*(n) g∗(n):从初始节点 S 0 S_0 S0到任意节点 n n n的一条最佳路径的代价。
h ∗ ( n ) h^*(n) h∗(n):从节点 n n n到目标节点的一条最佳路径的代价。
A*算法有评价函数:
f
(
n
)
=
g
(
n
)
+
h
(
n
)
f(n)=g(n)+h(n)
f(n)=g(n)+h(n)
- g ( n ) g(n) g(n)是对 g ∗ ( n ) g^*(n) g∗(n)的估计, g ( n ) > = g ∗ ( n ) g(n)>=g^*(n) g(n)>=g∗(n)
- h ( n ) h(n) h(n)是对 h ∗ ( n ) h^*(n) h∗(n)的估计,且满足对所有的 n n n, h ( n ) ⩽ h ∗ ( n ) h(n) \leqslant h^*(n) h(n)⩽h∗(n)
八数码难题:
根据
h
(
x
)
h(x)
h(x)函数值,有:
0
⩽
h
1
(
n
)
⩽
h
2
(
n
)
⩽
h
∗
(
n
)
0\leqslant h_1(n)\leqslant h_2(n)\leqslant h^*(n)
0⩽h1(n)⩽h2(n)⩽h∗(n)
由于
h
2
(
n
)
h_2(n)
h2(n)相较于
h
1
(
n
)
h_1(n)
h1(n)更接近于
h
∗
(
n
)
h^*(n)
h∗(n),故方案二与方案一相比,方案二更好。
A*算法的搜索效率在很大程度上取决于 h ( n ) h(n) h(n),在满足 h ( n ) < = h ∗ ( n ) h(n)<= h^*(n) h(n)<=h∗(n)的前提下, h ( n ) h(n) h(n)的值越大越好。
衡量一个搜索策略性能的准则:
- 问题有解是否能找到
- 搜索空间小
- 解最佳
与或图
- 与图:要解决A问题,需要解决B、C、D三个问题,从而求解。
- 或图:要解决A问题,需要解决B或C问题,从而求解。
- 弧线:父辈节点指向子节点的连线,表示操作符;
- 或节点:只要解决某个问题就可以解决其父辈问题的节点集合;
- 与节点:只有解决所有子问题,才能解决其父辈问题的节点集合。
当所有节点都是或节点时,这是变为状态空间图。
除起始节点外,所有节点只有一个父节点,此时为与或树。
与或图的结构:
- 初始节点对应于原始问题描述;
- 对应本院问题的节点叫做叶节点;
- 中间问题对应非终叶节点。
与或图有解的条件是:起使节点是可解的。
与或图BFS搜索:
- 把原始问题作为初始节点 S 0 S_0 S0,并把它作为当前节点;
- 应用分解或等价变换对当前节点进行拓展;
- 为每个节点设置指向父节点的指针;
- 选择适合的节点作为当前节点,反复执行第2步和第3步,在此期间要多次调用可解标志过程和不可解标志过程,直到初始节点被标为可解节点或不可解节点为止。
与或图DFS搜索:
-
要判断从OPEN表取出来的节点深度。如果等于深度界限,认定它是不可解节点。
-
拓展节点 n n n把其子节点放入OPEN表的前端,即新产生的节点先拓展
在对与或图进行搜索时,需要关注节点是与节点还是或节点。
博弈与博弈树
博弈树
一种特殊的与或树。其节点为博弈的格局(棋局),相当于状态空间中的状态,反映了博弈的信息,并且与节点、或节点隔层交替出现。
与或节点交替出现的原因:我方走步时,我方只需选择一种好步骤执行,是或关系;而对方走步时,我方则需要考虑所有好步骤,是与关系。
在博弈树中,所有能使自己一方获胜的终局是本原问题,相应节点为可解节点,所有能使对方获胜的终局都是不可解节点。
极大极小搜索(Max-Min搜索)
基本思想:
- 目的是为博弈双方中的一方寻找一个最优行动方案;
- 要寻找最优方案,就要通过计算所有可能的方案进行比较;
- 方案的比较是根据问题的特征来定义一个估价函数,用来估算当前博弈树端节点的得分;
- 当计算出端节点的估值后,再推出父节点的得分:
- 对或节点,选择子节点中的最大得分为父节点得分
- 对与节点,选择子节点中的最小得分为父节点得分
- 若一个行动方案能获得较大得分,则它就是当前最好的行动方案。
搜索步骤:
- 生成k-步博弈树
- 评估棋局(博弈状态)
打分评估方法是从叶节点自下而上进行打分。
- 回溯评估
- 递归循环
α \alpha α- β \beta β剪枝搜索
在生成博弈树的过程中计算评估各节点的倒推值。
搜索策略:k-步博弈;深度优先;每次扩展一个节点;一边扩展一边评估。
基本概念:
- 对或节点,选择子节点中的最大得分为父节点得分的下界,称为 α \alpha α值
- 对与节点,选择子节点中的最小得分为父节点得分的上界,称为 β \beta β值
由于在最左侧分支中,已经求得 α \alpha α=-1,又求得第二分支的第一次分支中得分为-1,那么第二分支的 β \beta β=-1。即使第二分支中还有次分支的值比-1大或小, α \alpha α的也不会受到影响。故X处进行剪枝。
以上过程是根据Min节点上界与Max节点下界进行判断。
剪枝规则:
- 任何与节点 x x x的 β \beta β值如果不能升高其父节点的 α \alpha α值,则对节点 x x x以下的分支可停止搜索,并使 x x x的倒推值为 β \beta β
- 任何或节点 x x x的 α \alpha α值如果不能降低其父节点的 β \beta β值,则对节点 x x x以下的分支可停止搜索,并使 x x x的倒推值为 α \alpha α
第五章
合一及合一算法
文字:正、负原子公式,前面有否定连接词的谓词公式为负原子公式。
子句:仅使用析取连接词将原子公式连接后的公式。
空子句:不包含任何文字的子句。
- 空子句是永假的,不可满足的。
Horn子句:至多有一个正文字的子句,其中正文字称为Horn子句头,其他称为子句体。
置换:设 x 1 , … , x n x_1,…,x_n x1,…,xn是 n n n个变量,且各不相同, t 1 , … , t n t_1,…,t_n t1,…,tn是 n n n个项(常量、变量、函数), t i ≠ x i t_i\ne x_i ti=xi,则用 t i t_i ti替换变量 x i x_i xi操作形成的有限序列 x 1 / t 1 , … , x n / t n {x_1/t_1, …,x_n/t_n} x1/t1,…,xn/tn称为一个置换(运算)。
置换乘积(置换合成):设 θ \theta θ和 λ \lambda λ是2两个置换,则先 θ \theta θ后 λ \lambda λ作用于公式或项,称为置换乘积,用 θ o λ \theta^o\lambda θoλ表示。
合一:通过相关置换使不同的一阶谓词公式称为相同的过程。
合一置换:设有一组谓词公式 { F 1 , … , F k } \{F_1,…,F_k\} {F1,…,Fk}和置换 θ \theta θ,使得 F 1 θ = F 2 θ = … = F k θ F_1\theta=F_2\theta=…=F_k\theta F1θ=F2θ=…=Fkθ,则 θ \theta θ称为合一置换, F 1 , … , F k F_1,…,F_k F1,…,Fk称为可合一的。
最一般合一置换(mgu):如果 σ \sigma σ和 θ \theta θ都是公式组 { F 1 , … , F k } \{F_1,…,F_k\} {F1,…,Fk}的合一置换,且有置换 λ \lambda λ存在,使得 θ = σ o λ \theta=\sigma^o\lambda θ=σoλ,则称 σ \sigma σ为公式组 { F 1 , … , F k } \{F_1,…,F_k\} {F1,…,Fk}的最一般合一置换。
归结演绎推理
定理: Q Q Q为 P 1 , P 2 , … , P n P_1,P_2,…,P_n P1,P2,…,Pn的逻辑结论,当且仅当 ( P 1 ∧ P 2 ∧ … ∧ P n ) ∧ ¬ Q (P_1\wedge P_2\wedge …\wedge P_n)\wedge \lnot Q (P1∧P2∧…∧Pn)∧¬Q是不可满足的。
谓词公式生成子句集步骤:
鲁滨逊归结原理
子句集中子句之间是合取关系,只要有一个子句不可满足,则子句集就不可满足。
基本思想:检查子句集 S S S中是否包含空子句,若包含,则 S S S不可满足。若不包含,在 S S S中选择合适的子句进行归结,一旦归结出空子句,就说明 S S S是不可满足的。
定义3.1(归结):设 C 1 C_1 C1与 C 2 C_2 C2是子句集中的任意两个子句,如果 C 1 C_1 C1中的文字 L 1 L_1 L1与 C 2 C_2 C2中的文字 L 2 L_2 L2互补,那么从 C 1 C_1 C1和 C 2 C_2 C2中分别消去 L 1 L_1 L1和 L 2 L_2 L2,并将两个子句余下的的部分析取,构成新的子句 C 12 C_{12} C12。
定理3.2:归结式 C 12 C_{12} C12是其亲本子句 C 1 C_1 C1与 C 2 C_2 C2的逻辑结论。如果 C 1 C_1 C1与 C 2 C_2 C2为真,则 C 12 C_{12} C12为真。
推论1:设
C
1
C_1
C1与
C
2
C_2
C2是子句集
S
S
S中的两个子句,
C
12
C_{12}
C12是它们的归结式,若用
C
12
C_{12}
C12代替
C
1
C_1
C1与
C
2
C_2
C2后得到新子句集
S
1
S_1
S1,则由
S
1
S_1
S1不满足性可推出原子句集
S
S
S的不可满足行,即:
S
1
的
不
可
满
足
性
⇒
S
的
不
可
满
足
性
S_1的不可满足性\Rightarrow S的不可满足性
S1的不可满足性⇒S的不可满足性
推论2:设
C
1
C_1
C1与
C
2
C_2
C2是子句集
S
S
S中的两个子句,
C
12
C_{12}
C12是它们的归结式,若
C
12
C_{12}
C12新子句集加入原子句集
S
S
S得到新子句集
S
2
S_2
S2,则
S
1
S_1
S1与
S
2
S_2
S2在不满足性的意义上是等价的,即:
S
2
的
不
可
满
足
性
⟺
S
的
不
可
满
足
性
S_2的不可满足性\Longleftrightarrow S的不可满足性
S2的不可满足性⟺S的不可满足性
谓词逻辑中的归结原理(上一小节有讲):
定义3.2:设 C 1 C_1 C1与 C 2 C_2 C2是两个没有相同变元的子句, L 1 L_1 L1和 L 2 L_2 L2分别是 C 1 C_1 C1和 C 2 C_2 C2中的文字,若 σ \sigma σ是 L 1 L_1 L1和 ¬ L 2 \lnot L_2 ¬L2的最一般合一,则称 C 12 = ( C 1 σ − { L 1 σ } ∨ ( C 2 σ − { L 2 σ } ) ) C_{12}=(C_1\sigma-\{L_1\sigma\} \vee (C_2\sigma-\{L_2\sigma\})) C12=(C1σ−{L1σ}∨(C2σ−{L2σ}))为 C 1 C_1 C1和 C 2 C_2 C2的二元归结式。
归结反演
证明步骤:
- 将已知前提表示为谓词公式 F F F。
- 将待证明的结论表示为谓词公式 Q Q Q,并否定得到 ¬ Q \lnot Q ¬Q。
- 把谓词公式集 { F , ¬ Q } \{F,\lnot Q\} {F,¬Q}化为子句集 S S S。
- 应用归结原理把子句集 S S S中的子句进行归结,并把每次归结得到的归结式并入到 S S S中。如此反复,若出现空子句,则停止归结, Q Q Q为真得证;未出现空子句,则继续。
正向和反向推理方法
正向演绎系统
一个与或图表示的子句集就对应于在图的文字结点上结束的解图集。
将相应规则转换为与或图:
正向演绎系统中,所推出的目标即叶子节点之间的关系为析取,与归结反演系统对偶。
逆向演绎系统
与或图的描述:
补充:人工神经网络
神经网络的特点:
- 大规模并行处理
- 信息的分布式存放
- 学习能力
感知机
感知机的特点:
- 输入为一个实数向量;
- 有多种激活函数可以选择;
- 属于一个可学习模型。
感知机模型的学习方法:
- 将感知机模型用向量 h ( x ) = s g n ( w T x ) h(x)=sgn(w^Tx) h(x)=sgn(wTx)进行表示
- 对于给定的训练样本,挑选出分类错误的样本对 { x ( i ) , y ( i ) } \{x^{(i)},y^{(i)}\} {x(i),y(i)}
- 对权重向量 w = w + x ( i ) y ( i ) w=w+x^{(i)}y^{(i)} w=w+x(i)y(i)进行更新
梯度下降
利用MSE(均方误差)来衡量预测值与真实值之间的差距,此处仅考虑单输出:
e
=
∣
y
−
y
t
r
u
e
∣
2
e=|y-y_{true}|^2
e=∣y−ytrue∣2
对于神经网络模型:
y
=
w
x
+
b
y=wx+b
y=wx+b
可通过
e
e
e对
w
w
w、
b
b
b求导,获得导数方向为误差
e
e
e上升最快的方向,并将
w
w
w、
b
b
b向反方向进行调整即可。在这个过程中,有一个学习率参数
l
r
lr
lr,其作用为调整
w
w
w、
b
b
b:
w
=
w
−
l
r
⋅
d
e
d
w
w=w-lr \cdot \frac{de}{dw}
w=w−lr⋅dwde
批量梯度下降法(BGD)
每次使用全部的训练样本来更新模型参数/学习。
随机梯度下降法(SGD)
每次从训练集中随机选择一个样本来进行学习。
小批量梯度下降法(MBGD)
每次更新从训练集整体取 m m m个样本中随机选择 k k k个样本进行学习。
反向传播算法
反向传播更新公式:
Δ
w
h
j
=
η
g
j
b
h
Δ
θ
j
=
−
η
g
j
Δ
v
i
h
=
η
e
h
x
i
Δ
γ
h
=
−
η
e
h
e
h
=
b
h
(
1
−
b
h
)
∑
j
=
1
i
w
h
j
g
j
\Delta w_{hj}=\eta g_j b_h\\ \Delta \theta_j=-\eta g_j\\ \Delta v_{ih}=\eta e_h x_i\\ \Delta \gamma_h=-\eta e_h\\ e_h=b_h(1-b_h)\sum_{j=1}^{i}w_{hj}g_j
Δwhj=ηgjbhΔθj=−ηgjΔvih=ηehxiΔγh=−ηeheh=bh(1−bh)j=1∑iwhjgj