计算机可以模拟“模糊的记忆”吗?

2018-09-04 11:22:38 +08:00
 Morriaty

人类是有“模糊的记忆”的概念的,比如儿时玩伴,名字是叫王小二呢,还是张小四呢?五年没听过的老歌,是 111235 呢,还是 555724 呢?

那计算机如何模拟这种“模糊”的效果呢?计算机的记忆,无论是在硬盘里还是内存,似乎都是有或无二元对立的

select id, name from friends where meet_age_at=13;


id | name 
-- | --
1  | Harry Potter
2  | null

是因为计算机是数字信号,而生物是模拟信号吗?

6582 次点击
所在节点    程序员
58 条回复
msg7086
2018-09-05 05:33:20 +08:00
@dawn009 取值不一样但计算机仍然只能取到 0 或者 1,从结果上来看是明确的。读取值分为正确和错误,而不是模糊。虽然光头能读到中间值,但是回传出接口的不会是中间值。某个比特位是不可能读出 0.3 这样的值的。同样你的硬盘里存储的视频也不可能是模糊值。你从硬盘上读一个字节,硬盘读出 8 个 1bit 位,组成一个字节,而不是读出像是 [0.3,0.2,0.9,0.8] 这样的东西。
binux
2018-09-05 05:42:38 +08:00
@msg7086 #41 只能取到 0 或者 1 是人给计算机定的,计算机给你读个 0.3 你乐意吗?
msg7086
2018-09-05 05:50:44 +08:00
@binux 这个回复有点莫名其妙啊。
我需要他返回 0 和 1 的时候返回 0 和 1,我需要他返回模糊数据的时候返回模糊数据啊。
乐意不乐意管我啥事,难道不是光驱电路板乐不乐意?又不是我眼睛上装个激光头在读 VCD。
binux
2018-09-05 07:26:21 +08:00
@msg7086 #43 对啊,是你需要他返回 0 和 1,而不是他不能返回模糊数据。说明「计算机可以模拟“模糊的记忆”」。
dawn009
2018-09-05 07:39:28 +08:00
@msg7086
读取损坏的介质,对于单个比特无法知道是正确还是错误,只能知道一整块数据是正确还是错误。然而即使知道这一整块数据有错误,也不清楚错了多少、错在哪个位置。这一整块数据,每次读出来的值不一样,它自然不是确定的。如果选择其中的某一次读取为结果(比如说,只选第一次的结果,相当于忽略校验),则结果的「明确」只代表人为的选择,不代表数据本身明确。

另外计算机可以读出中间值来,只不过交给上层时要么舍为 0 要么入为 1。
baicheng10
2018-09-05 07:53:21 +08:00
@msg7086 一个 bit 读出来为什么不能是 0.3 ?你这就是钻牛角尖了,总得有个头啊,二进制的原子级别当然是 0 或者 1,抽象出来就是模糊的了。
liuyanjun0826
2018-09-05 08:01:27 +08:00
计算机有随机数,比如游戏里面的子弹轨迹就是,只是那种和现实一样的感觉我不喜欢。
Eoston
2018-09-05 09:25:11 +08:00
模糊不模糊都是人来定义的~~除非计算机可以自己判断,否则对它来说所有的一切斗不过是从磁盘中读出来写进去,并没什么区别
openbsd
2018-09-05 09:48:34 +08:00
人类记忆的精准度应该是按事情对当事人的刺激程度和次数决定,计算机不存在 /不容易出现此种“误差”吧 ?
msg7086
2018-09-05 10:49:32 +08:00
@binux 可是我回复的讨论串说的是 VCD 的数字存储信号读取错误被当作「模糊」的问题,并不是在说楼主问题的结论啊?
msg7086
2018-09-05 11:10:55 +08:00
@dawn009 你说的这个应该属于「不确定」而不是「模糊」吧。

我举个例子吧。比如说人脑中记忆的一件事,你去了某个活动,来了 8 位嘉宾。过了几个月以后,你的记忆开始模糊,你不记得到底来了几位了,可能来了 5 位,也可能来了 10 位,这叫做记忆模糊。假如一个模拟比特位用来记录人数的多少,假设 1 是来了很多人(比如 50 人),而 0 表示来了很少人(比如 1 人),那么这个值刚开始的时候是记录为比如说 0.2,但是过了几个月以后你的神经元读出了 0.3,这样报道就产生了偏差。但是如果你用 0x08 这样的数字信号来记录,过段时间 bitrot 了,变成了 0x00,来了 0 个人,这就不是记忆模糊的问题了。

而像 VCD 这样的,属于数字信号,每个最小记录单位就只有 0 和 1,假如 0 是正确的,那么 1 读出来就是完全错误的数据,在转换成计算机整数的时候会变成完全不同的数字(例如 0x4000 被读取成了 0x4080 ),那么之后经过 IDCT 等处理,出来的就是完全错误的内容。

再同样类比,比如说印刷出的实体照片,经过时间的流逝会逐渐变黄变旧。但是数字照片只会因为一个比特读取错误而导致解码错误,出现花屏等现象。

再说计算机可以读出中间值的问题。计算机使用的是数字信号,所以单个元素(比特)是没有中间值的,计算机能获取的所谓中间值,一般是用 IEEE754 编码的、使用 0 和 1 信号组成的浮点数,而非真正的模拟比特。计算机的电路本身就是构筑在 0 和 1 之上的。

之前看过新发现的忆阻器,可以方便地在一个比特中存储模拟值,也就是你可以通过注入电流,让元器件里面存储的数据逐渐变化,比如从 0.1 逐渐加到 0.4。我倒是觉得基于忆阻器的仿生电脑值得期待一下。
binux
2018-09-05 11:38:21 +08:00
@msg7086 #51 就拿你 [0.3,0.2,0.9,0.8] 的例子,假如这 4 个 bit 代表 “来了几位嘉宾”,那么它有 0.4032 的概率为 3, 0.1728 的概率为 11,0.1008 的概率为 7。这也是记忆模糊了啊,只能说计算机的模糊和人的模糊不一样,因为你记忆有其他场景做修正,不会出现人数不连续的问题,你给计算机也搞个按范围的校验位,它也能和人类一样模糊啊。
Mutoo
2018-09-05 11:44:38 +08:00
游戏 AI 里面有一种应用叫模糊逻辑( FuzzyLogic ),可以让设计师使用“多,比较多,很多”之类的非确定量词来描述规则,然后根据背后的参数最后生成决策。
msg7086
2018-09-05 11:53:16 +08:00
@binux 不知道是你理解的问题还是我说得不清楚。
我再重申一次。我说的内容说的是上面 VCD 光盘读取错误被当成模糊的案例。从一开始我就没有说过计算机无法模拟模糊记忆。你从上到下的 3 个回复本质上是在同意我的观点,然而我并没有打算去讨论这个观点,因为过于显而易见了。像 VCD 这样的数字信号,和你#50 里说的按范围校验位完全是两回事,我觉得你的回复完全偏离了我正在回复的那件事了。
binux
2018-09-05 12:28:32 +08:00
@msg7086 #54 不,我就是在说 VCD 读取错误可以就是模糊。
因为在人类记忆模糊情况下,让人类回答一个确定答案(例如考试)时那就是读取错误。
liuyanjun0826
2018-09-05 12:33:57 +08:00
@msg7086 VCD 是碟片,是完全有价值的产品。。。。只有我现在打出来的字才是免费的。
dawn009
2018-09-05 14:08:25 +08:00
@msg7086 原来你想说的是这个啊。那 VCD 的确不是一个完美的例子。楼上有多个以神经网络举的例子更加贴切。

然而我的回复针对的是 #15 楼 「这个不一样,最终其实还是真实准确的数据,只不过变成了混乱的无意义的数据而已,计算机还是按照 VCD 上的数据进行播放的。」这段描述。损坏的介质读出的并不是真实准确的数据,而是不确定的数据。

如果你认为这仍然不能算模糊,只有像老照片那样的宏观现象才算模糊,VCD 的确做不到,但其他格式可以。比如一张以交错方式存储的 jpg 图片,把它的其中的某几段数据破坏掉,整张图片只会变模糊,而不会花屏、无法辨认。

最后,存储介质上的单个比特有中间值,和浮点数完全没关系。一个是介质的物理特性,一个是数据的编码格式。
磁盘单元上的磁性,不是绝对的非 0 即 1,而是有在[0,1]范围内的强和弱。通过判断这些中间值,可以恢复出已经被复写的磁盘数据。这其实就是删除敏感数据时要求以随机数将相应磁盘单元复写 N 次的原因。
yuchting
2018-09-05 18:31:18 +08:00
计算机一模糊,程序员就要通宵加班找出来为啥他就模糊了呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX