前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >听说程序员又把妹子谈飞了?——逻辑推理浅谈(一)

听说程序员又把妹子谈飞了?——逻辑推理浅谈(一)

作者头像
magic2728
发布2019-12-03 22:51:44
4170
发布2019-12-03 22:51:44
举报
文章被收录于专栏:MatheMagicianMatheMagician

有一天,程序员和妹子聊天,讨论到手机和电脑边充电边使用对电池是否有害的问题,大概对话是这样:

程序员:我听说电脑一般可以边充电边使用,手机不可以呢。

妹子:哦,好像是这样吧。

程序员:对呢,因为电池不能边充电边使用的。

妹子:嗯嗯,对啦,我想电脑充电时应该是用电源供电的,手机应该是用电池供电的呢。

程序员:哇,你好棒,怎么能推出这么深刻的结论!

妹子:这不很简单么……

程序员:天哪,你用到了逻辑推理中最深刻的三段论推理呢!而且内化为自己的能力还浑然不知,好棒哟!

妹子:你好无聊,再见!

嗯嗯,妹子虽然已经走了,可是我们为了饭碗和内心追求,程序员还是决定来看看这样一段自然语言对话里到底蕴含着怎样的逻辑推理过程,点滴中积累能力,以便日后能够少加点班。

我们在日常生活中,经常要用到各种形式的逻辑推理,无论是买菜时候算账,还是考试时候揣摩出题者意图,或者是猜测让你心动的女生到底喜不喜欢你的时候,都需要计算,推理,想象,来去估计表面上观察不到的内容,以获取真相。可以说,逻辑推理,是人类思考智慧的最集中体现之一,它可以最高效地模拟和补齐观察的不足,还能为决策提供未来判断的依据。

那我们人类到底有着怎样的逻辑推理能力呢?

其实,我们信以为真的推理逻辑无非两种,形式逻辑辩证逻辑。这一篇我们先讲形式逻辑。

形式逻辑

大概高中数学演绎推理部分就讲过相关的内容。有效的推理有两类合情推理和演绎推理,其中合情推理又包括类比推理和归纳推理两类,所以一共是三种类型,他们的推理模型如下:

类比推理(特殊到特殊):

归纳推理(特殊到一般):

演绎推理(一般到特殊):

仅讨论推理逻辑的正确性,如果条件没有问题的话,那么仅有演绎推理是绝对正确的。而另外两个成立与否,并没有直接的理论支撑,需要更加深入的分析。我们通过几个例子,来进一步认识这些推理的逻辑:

类比推理

E.g.1 等差数列的通项公式为:an = a1 + (n - 1) * d,那么等比数列的通项公式为:bm = b1 * q ^ (m - 1)。

这个从浅层的形式上,可以类比他们之间的各种性质,只需要把对应运算符号修改过去。但不是每次都可以成功,比如两个数列的求和公式之间就没有这种类比性。而如果从源头开始推理,就会发现这些类比成立的基础是:等差数列是等比数列的对数数列。于是这个通项公式就是二者等价的了,但是等差数列的求和公式和等比数列的乘积公式才会有等价关系,和求和之间并没有什么联系,这一点从类比基础就很容易看出来。

E.g.2 地球和火星都有大气层,是恒星,有四季,温度适宜,地球上有生物。故火星上也有生物。

这一条就是明显不一定成立的结论,但却一点不妨碍它在人类逻辑中的作用,类比能提供很多猜想来作为研究的方向,凭借一些并不能严格成立但又时常有效的经验往往可以更好地找准研究的方向,由于其条件没有那么严格,所以执行起来条件也宽松,在一定意义下人类凭借此感觉建立了很多研究方向的基础,再加上一些严谨的演绎推理,构筑了一个又一个领域的知识宝库。

归纳推理

E.g.3 我每次看到有人告诉我叫“天鹅”的动物都是白色的,因此天鹅是白色的。

这是典型日常思维中的归纳推理,有智慧的人往往会选择保留这种思维方式并大胆使用,同时也谨慎地知道这很有可能是错的。使用它们应像类比推理一样,既相信其方向的潜力,同时对其是否真的成立仍然需要严格的论证才是。

这里天鹅在我的脑海里构成一个集合,我曾经往这个集合里添加过一些元素并试着总结他们的特性,但是和那个官方认定的天鹅集合的描述和正确答案之间还真不一定完全正确,我有样本的监督,因为量和学习方式的缺陷,使得我并没法完全推理正确,比如其实还有黑天鹅,而我只是没见过而已。

而一种快速的方案是查看文字描述的“天鹅”定义,并已知为标准,但是要承受的是文字到概念映射的信息损失和偏差。最后,可能天鹅集合都不怎么客观存在,只是人类的主观分类,而且科学界还没有完全统一。那这个体系就崩塌要陷入混乱了……看来啊,研究数学真幸福,这些细枝末节具体的没法解决的问题都可以不碰。

E.g.4 数列的前几项为1, 2, 4,8, 16,下一项是多少?

很多人一看,会想当然的看成下一项是前一项乘以2的规律于是信誓旦旦地写上32,这便是一种归纳假设下的结论。但世界上不止这一个答案,比如我们考虑由圆上的若干个连接点连线划分的区域:

当n = 6的时候,

竟然是毫不合直觉的31!

你现在觉得不合理,是不是数错了,是因为你还没有掌握这类点线的划分问题的规律,而只能理解到乘以2这样的程度,就像当时不理解等比数列的求和公式不能类比于等差数列,发现其本质联系是对数关系才能够完全理解一样。

演绎推理

E.g.5 孟德尔认为如果豌豆的圆粒还是扁粒性状是由一对基因g in G = ExpComb(S = {A, a}, n = 2)(这个集合的含义是从有序集S中有放回地抽取n次元素后排序的全集)来分别控制的,其中只要有一个A则表现为圆粒,自然条件下的豌豆都是纯种的AA或aa,没有Aa的品种(注意Aa = aA,因为元素是排序的)。假设交配的豌豆后代从双方各等概率获得一个基因,那么两代以后,扁粒的概率是1 / 4。

这个就是一个典型的演绎推理了,用了一点简单的概率论和排列组合知识,而真正核心的部分看起来还不在推理,在这些前提的设定。好处在于只要这些前提成立,那么结论一定成立,就像1 + 1 = 2那样肯定。但是这天才般的简化和定义假设并不那么容易得到,靠瞎猜肯定不行,往往还需要合情推理的支持,还有实验结论的观察,才能助你找到假设的一些可能方向,再在实验的支持下得到相对可靠的结论。

E.g.6 最后一个例子我们回到开头的那个故事,那其实是一个典型的三段论式的演绎推理,加一点最简单的布尔代数。

下面是文字版的演绎推理三段论:

对手机:

大前提:充电时,电器(集合)使用有害是因为电池边充电边使用其供电。

小前提:充电时,使用手机(元素特例)有害。

结论:充电时,使用手机是电池供电的。

电脑的同理,只不过大前提改成否命题即可:

大前提:充电时,电器(集合)使用无害是因为电池没有边充电边使用其供电。

小前提:充电时,使用电脑(元素特例)无害。

结论:充电时,使用电脑不是电池供电的,电池和电源直供二者必须有且仅有一个为真,故是电源直接供电的。

这里的推导其实有4个细节,值得一提:

  1. 大前提其实是我们的隐含知识(常识),但相对正确的常识应该是:电器的电池边充电边使用是有害的;我们仅用了其一个子集“充电”上的特例,没有考虑不充电时候的情况,相当于布尔运算中把”与真”直接当成单位元消去;
  2. 这里手机其实用了其逆命题,电脑用了逆否命题,前者不一定正确,比如充电时使用有害可能是烫手,而后者一定正确,只要我们的常识是正确的;
  3. 要得到问题结论,还有另外一个隐含知识:电器工作需要电源,电池和电源直供有且只有一个供电;
  4. 整个问题都是在使用的条件下进行的,这是全集。

以上一切都可以用下面的Wenn图表示的集合关系来说明:

当然这里最好的说明是用伪代码,不,还是直接上代码吧:

符号说明:

M:电子产品类

c:电脑

m:手机

cc:电池充电

st:可否充电时使用

s:电源选项

CE:电池

DR:直接电源

C++代码:

代码语言:javascript
复制
#include <stdlib.h>
#include <iostream>

using namespace std; 

enum Source {CE, DR};

class MC {
private:
   enum Source s;
   bool cc, st;

public:
   MC(bool cc, bool st):cc(cc), st(st) {}
   ~MC() {}
   
   enum Source GetSource();
};

enum Source MC::GetSource() {
   // logic : cc && (s == CE) = ! st
   if (cc) {
       return st ? DR: CE;
    } else {
       if (st) {
           cerr << "Cannot judge source, please get cellcharged!\n";
           exit(- 1);
       }  
   }  
}

int
main () {
   MC c(true, true), m(true, false);
   cout << "Computer is sourced by " <<((c.GetSource() == CE) ? "cell": "direct source") <<" when cell charged.\n";
   cout << "Mobile phone is sourced by " <<((m.GetSource() == CE) ? "cell": "direct source") <<" when cell charged.\n";
}

一个更为惊喜的想法是,其实这三类推理恰恰对应机器学习里的三类学习模式:

归纳推理:集合里的大量元素恰是我们要收集的样本,我们以某个函数族在上面学习这些样本的属性,通过这种方式赖主观认识他们,最后推演到新来的样本上。诸如回归,分类模型等等,都是归纳推理的具体表现,归纳的好坏取决于最开始的函数族和学习策略。

类比推理:kernel类的诸如KNN的机器学习方法就是用的类比推理,这其中的核心便是在已知维度上计算样本相似度,然后以之作为权重把结果推向未知维度。

演绎推理:在知识图谱等机器学习技术上,使用的就是这套逻辑,有点硬,召回低,但是足够可靠。

其实人类也是在这些推理过程中掌握更多的知识,甚至创造知识的。机器学习不过是用这个工具来执行人类的这几种推理罢了,本质上还是人类学习啦。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MatheMagician 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档