人类是有“模糊的记忆”的概念的,比如儿时玩伴,名字是叫王小二呢,还是张小四呢?五年没听过的老歌,是 111235 呢,还是 555724 呢?
那计算机如何模拟这种“模糊”的效果呢?计算机的记忆,无论是在硬盘里还是内存,似乎都是有或无二元对立的
select id, name from friends where meet_age_at=13;
id | name
-- | --
1 | Harry Potter
2 | null
是因为计算机是数字信号,而生物是模拟信号吗?
1
ChillyPrince 2018-09-04 11:30:52 +08:00 via Android 4
人脑更接近于神经网络而非数据库,所谓模糊的记忆,我觉得应该是输出一个较低的匹配概率
|
2
listnodeptr 2018-09-04 11:31:34 +08:00 13
你看过 VCD 么,当 VCD 轻微损坏,播放视频时画面会有红绿蓝色块以及声音出现断断续续
这就是模糊的记忆 |
3
zhzer 2018-09-04 13:11:28 +08:00
就是,连续数据模拟离散数据失真的问题嘛
简单点弄就量化之后加噪声 |
4
PureWhiteWu 2018-09-04 13:15:49 +08:00 1
@listnodeptr 这个不一样,最终其实还是真实准确的数据,只不过变成了混乱的无意义的数据而已,计算机还是按照 VCD 上的数据进行播放的。
|
5
YvesX 2018-09-04 13:29:48 +08:00
引入权重就好吧,比如一楼那个思路。
|
6
liwufan 2018-09-04 13:31:06 +08:00
啥是模糊的记忆呢?“机器人”看自己的硬盘内存文件的时候,是不是像人类去医院拍片或者看显微镜那样是确实存在呢?对于“机器人”来说,会不会同时在发帖问---机器人是有“模糊的记忆”的概念的,比如擦写了 100 次以后残留在软盘磁粉上微弱磁场。那么人类如何模拟这种“模糊的记忆”?人类有血有肉,就在那里似乎都是有或无二元对立的?
|
7
ShineSmile 2018-09-04 13:32:43 +08:00
人:给我干活。
计算机:干什么? 人:给我干活。 计算机:??? |
8
sampeng 2018-09-04 13:32:44 +08:00
我觉得。。计算机的记忆你觉得没有模糊的记忆,是因为你知道什么是对,什么是错。其实 google 出来的类似你说的这种,你不知道一个问题的答案。就显的是个"模糊的记忆"了。
换句话说,你觉得人类有模糊记忆,是因为你不知道哪个是对的,哪个是错的。如果你知道,就无所谓对和错 |
9
kaedea 2018-09-04 13:33:41 +08:00 via Android
经典计算机就连随机数都是用确切的数字模拟的... 模糊判断基本不可能
|
10
TyteKa 2018-09-04 13:40:38 +08:00 via Android
模糊数学。
|
11
jasonyang9 2018-09-04 13:40:53 +08:00 3
代码的咖喱味再重一点就有了
|
12
takato 2018-09-04 13:48:17 +08:00
Dropout
|
13
lrzsw2008 2018-09-04 13:51:13 +08:00 via Android
长期不通电的 ssd ?
|
14
listnodeptr 2018-09-04 14:15:16 +08:00
@PureWhiteWu 破坏过程是随机的,所以最终数据不真实,破坏过程是持续非连续的,因此在不同时间下剩余数据不确定,计算机试图播放 VCD 数据我们如果观测图像整体含义(而非你说的具体二进制数据)由于色块的存在导致图像中部分意义(比如色块遮挡了人物手上拿的具体东西)变得模糊,可能根据场景推测人物手里可能拿着不太大的圆形东西,但是由于色块存在已经分辨不出是什么了
|
15
PureWhiteWu 2018-09-04 14:18:07 +08:00
@listnodeptr 我的意思是,计算机并没有做这些和“模糊”相关的,这个是由我们人去做的。计算机只是真是地将 VCD 上的数据展示出来而已。
题目问的是计算机可不可以,而不是人可不可以。 |
16
atozj 2018-09-04 14:18:47 +08:00 via iPhone
稀疏记忆算法?
|
17
lzhd24 2018-09-04 14:22:49 +08:00 via Android
游戏里可以设置吧,头号玩家那种。
|
18
linthieda 2018-09-04 14:23:06 +08:00 via Android
如果一个 nn graph 在从一个 node 到另一个 node 时的 path 有很多个而且 nondeterministic,那么很可能就类似于一个模糊的运算。 同理, 如果一个 graph 中有大量 non derministic recurrent/recursive node, 可能就类似于模糊记忆。 一句话总结:上述的 graph 现在的算力完全 train 不动
|
19
takato 2018-09-04 14:26:47 +08:00
模糊记忆的本质就是局部"精确破坏"构成的集合
|
20
3rdFaust 2018-09-04 14:29:48 +08:00
总觉得你再说现在大火的统计型 AI
|
21
dawn009 2018-09-04 14:38:58 +08:00
@PureWhiteWu #15 读取到的一段数据 IO 校验失败,说明已损坏。再次尝试读取,读取到的内容仍然校验失败,但和上一次有所不同。这段数据究竟是 000110 呢,还是 100101 呢?这是一段模糊的数据
|
22
newtype0092 2018-09-04 14:39:20 +08:00
相当于一个搜索算法吧,记忆中的儿时玩伴是一个对象,假设里面有姓、名、性别、年龄、样貌等等,都存在一个图里。
当你回想的时候,就是从一个点开始联想(搜索),假设先搜到“姓=马”,然后搜到“名长度=2 ”,然后“名[1]=梅”,这时候你不知道“名[0]”,就只是想起,我有个玩伴叫马什么梅? 想到一半头疼放弃,这是内存不够溢出了。 想到一半有别的事干扰,这是 cpu 被抢占了。 想很久没有结果,这是任务执行超时了。 记不起来具体是 a 还是 b,这是有脏数据不一致了。 这些都算模糊记忆吧。 |
23
menc 2018-09-04 14:42:25 +08:00
|
24
menc 2018-09-04 14:44:24 +08:00
|
25
rogwan 2018-09-04 15:00:49 +08:00 via Android
人脑是怎么实现记忆的?学界已经搞清楚了吗
|
26
daocheng 2018-09-04 15:12:00 +08:00
推荐一本书《生命 3.0 》,里面的内容可能会有启发,我也正在读
|
27
vincenteof 2018-09-04 16:31:03 +08:00
如果你能形式化地定义出·模糊·,那基本上就可以
|
28
PureWhiteWu 2018-09-04 17:10:25 +08:00
@dawn009 不会是这样的,因为根本不存在校验,VCD 不支持数据校验,你可以先去了解一下底层的存储。读出来是什么数据,就会播放什么数据,不存在这次读出来是 10011 下一次读出来是 01010 的可能性,除非又遭到了损坏,而且计算机不会去重新读的,读出来是什么就播放什么,你之所以看到画面是花的,就是因为读出来的数据是混乱的错误的数据,但是计算机是不知道究竟是对是错的。
所以你的这个例子不正确,计算机不支持“模糊”。 你如果学过编译原理也应该知道,计算机所使用的任何一门语言都不能有二义性,否则就是不合规的。 从计算机最最最底层的,物理层面上来说,二进制不支持模糊。 除非是薛定谔的电位。 |
29
zdnyp 2018-09-04 17:48:23 +08:00
应该不存在“模糊记忆”,但是可以模糊的找回记忆(模糊检索)。
|
30
winglight2016 2018-09-04 18:17:43 +08:00
加权 lstm+dropout,比较接近模糊记忆这个概念了,不过只是模拟,大脑真正是怎么运转的,谁也说不清
|
31
Morriaty OP @newtype0092 #22 还是有点不一样,对于计算机来说,要么同时找到“马冬梅、马春梅”,要么找到 null,而对于人来说,就停在“马什么梅”?
|
32
jfdnet 2018-09-04 19:01:28 +08:00
刚刚看了几集 西部世界 好像一开始说的就是这个
|
33
mmy1043 2018-09-04 19:50:17 +08:00 via Android
不知道楼主为什么要模拟模糊记忆,只提供一个想法吧。人的记忆中不经常被使用的内容会逐渐模糊甚至遗忘,但它们并没有消失,当你遇到一些特定的场景时能够再次回忆起那些记忆。因此可以为每一个信息设置一个权重,根据信息的调用次数来调整它,当权重过低是,对相应信息进行压缩,并留下一些特征,这样来模拟模糊记忆。
|
34
newtype0092 2018-09-04 22:00:32 +08:00 1
@Morriaty #31 并不是,你可能没看懂我说的,名字的三个字并不是存在同一块内存,找到一个就都找到了,他们之间的关系可能通过很复杂的路径连通,或者根本就不连通,需要通过别的节点才能找到。
假如搜索到名字的第二个字要 5s,搜索到第三个字要 n 天,你能保证计算机一直跑这个任务跑三天么?而且如果提前不知道 3 天能跑出来,只知道遍历一遍全量数据要好几年,你能一直等它遍历完么? 这还是内存够的情况下,如果不够那还需要调整算法使用其他辅助手段(类似边想边把线索记到小本本上)。 归根揭底人的记忆就是类似网络的,你能记不起来名字中的某个字,就说明这些字不是存储在一起的,每个独立的数据都是通过其他的数据线索串联起来。 比如姓马这个数据,就可以是通过多条不同的路径搜索到的 (小时候开学那天全班自我介绍->她嗓门很大->她大声的说我叫马 XX ) (她长得很有特点->她脸很长->她正巧姓马) 路径可短可长,每个数据的关系可远可近,所以不存在要么找到完整名字,要么找到 null。 |
35
widewing 2018-09-04 22:19:21 +08:00 via Android
有啊,各种有损压缩算法了解一下,特别是基于深度网络的
|
36
innoink 2018-09-04 22:22:05 +08:00 via Android
多种结果的概率叠加=模糊
|
37
flyaway 2018-09-04 22:32:47 +08:00 1
神经网络大神 Hinton 在 30 多年前的一篇长文中就有过关于模糊记忆的论述。基本思想就是所有的记忆都是存储在一堆 units 中的,任何记忆的实体都可以表示为一些特殊 unit 被激活(一种 pattern),不同记忆个体之间会有重叠的 units,这样就能模拟楼主所说的模糊记忆了。因为当一个新的实体被激活,其本质就是一堆 unit 被激活,这些 unit 可能又是其他实体的组成部分,这样就能发生「联想」记忆。从机器学习角度来说,这种模型天生就具有泛化性。但是我不确定人脑是否是采用同样的过程的。
Hinton 的文章在这里: http://web.stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap3_PDP86.pdf 有兴趣的话可以看看。 顺便说一句,现在 NLP 中流行的 word embedding(将词表示成向量)就是基于 Hinton 的这篇文章的,几乎所有最前沿的模型都会用到 word embedding,大神的文章 30 年后依然有很强的建设性! |
38
Cheez 2018-09-04 22:35:31 +08:00 via Android
当初因为人脑容量太小而已....相当于数据恢复。
|
39
dawn009 2018-09-05 01:26:46 +08:00
@PureWhiteWu 这个是你不了解了。VCD 卡盘常见吧,特别是用电脑播放 VCD 时。当年「超强纠错(其实是容错,跳过校验)」可是 VCD 机和 VCD 播放软件的主打广告语。
物理介质不是不「支持」模糊,反而恰恰因为容易出错,所以会有校验机制。换句话说,存储介质天生是「模糊」的,硬件和底层软件的设计需要能消除存储介质的不确定性,才能让上层软件跑在一个「确定」的系统之上。 特别强调一句,同一块数据,每次读取的值不一样,是个常见的现象。尤其是软盘、光盘等易受干扰的介质。 |
40
dartabe 2018-09-05 01:37:46 +08:00
LSTM 有个记忆单元 会丢弃一些不想记住的东西
|
41
msg7086 2018-09-05 05:33:20 +08:00
@dawn009 取值不一样但计算机仍然只能取到 0 或者 1,从结果上来看是明确的。读取值分为正确和错误,而不是模糊。虽然光头能读到中间值,但是回传出接口的不会是中间值。某个比特位是不可能读出 0.3 这样的值的。同样你的硬盘里存储的视频也不可能是模糊值。你从硬盘上读一个字节,硬盘读出 8 个 1bit 位,组成一个字节,而不是读出像是 [0.3,0.2,0.9,0.8] 这样的东西。
|
43
msg7086 2018-09-05 05:50:44 +08:00
@binux 这个回复有点莫名其妙啊。
我需要他返回 0 和 1 的时候返回 0 和 1,我需要他返回模糊数据的时候返回模糊数据啊。 乐意不乐意管我啥事,难道不是光驱电路板乐不乐意?又不是我眼睛上装个激光头在读 VCD。 |
45
dawn009 2018-09-05 07:39:28 +08:00
@msg7086
读取损坏的介质,对于单个比特无法知道是正确还是错误,只能知道一整块数据是正确还是错误。然而即使知道这一整块数据有错误,也不清楚错了多少、错在哪个位置。这一整块数据,每次读出来的值不一样,它自然不是确定的。如果选择其中的某一次读取为结果(比如说,只选第一次的结果,相当于忽略校验),则结果的「明确」只代表人为的选择,不代表数据本身明确。 另外计算机可以读出中间值来,只不过交给上层时要么舍为 0 要么入为 1。 |
46
baicheng10 2018-09-05 07:53:21 +08:00
@msg7086 一个 bit 读出来为什么不能是 0.3 ?你这就是钻牛角尖了,总得有个头啊,二进制的原子级别当然是 0 或者 1,抽象出来就是模糊的了。
|
47
liuyanjun0826 2018-09-05 08:01:27 +08:00
计算机有随机数,比如游戏里面的子弹轨迹就是,只是那种和现实一样的感觉我不喜欢。
|
48
Eoston 2018-09-05 09:25:11 +08:00
模糊不模糊都是人来定义的~~除非计算机可以自己判断,否则对它来说所有的一切斗不过是从磁盘中读出来写进去,并没什么区别
|
49
openbsd 2018-09-05 09:48:34 +08:00
人类记忆的精准度应该是按事情对当事人的刺激程度和次数决定,计算机不存在 /不容易出现此种“误差”吧 ?
|
51
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。我倒是觉得基于忆阻器的仿生电脑值得期待一下。 |
52
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。这也是记忆模糊了啊,只能说计算机的模糊和人的模糊不一样,因为你记忆有其他场景做修正,不会出现人数不连续的问题,你给计算机也搞个按范围的校验位,它也能和人类一样模糊啊。
|
53
Mutoo 2018-09-05 11:44:38 +08:00
游戏 AI 里面有一种应用叫模糊逻辑( FuzzyLogic ),可以让设计师使用“多,比较多,很多”之类的非确定量词来描述规则,然后根据背后的参数最后生成决策。
|
54
msg7086 2018-09-05 11:53:16 +08:00
@binux 不知道是你理解的问题还是我说得不清楚。
我再重申一次。我说的内容说的是上面 VCD 光盘读取错误被当成模糊的案例。从一开始我就没有说过计算机无法模拟模糊记忆。你从上到下的 3 个回复本质上是在同意我的观点,然而我并没有打算去讨论这个观点,因为过于显而易见了。像 VCD 这样的数字信号,和你#50 里说的按范围校验位完全是两回事,我觉得你的回复完全偏离了我正在回复的那件事了。 |
55
binux 2018-09-05 12:28:32 +08:00
@msg7086 #54 不,我就是在说 VCD 读取错误可以就是模糊。
因为在人类记忆模糊情况下,让人类回答一个确定答案(例如考试)时那就是读取错误。 |
56
liuyanjun0826 2018-09-05 12:33:57 +08:00
@msg7086 VCD 是碟片,是完全有价值的产品。。。。只有我现在打出来的字才是免费的。
|
57
dawn009 2018-09-05 14:08:25 +08:00
@msg7086 原来你想说的是这个啊。那 VCD 的确不是一个完美的例子。楼上有多个以神经网络举的例子更加贴切。
然而我的回复针对的是 #15 楼 「这个不一样,最终其实还是真实准确的数据,只不过变成了混乱的无意义的数据而已,计算机还是按照 VCD 上的数据进行播放的。」这段描述。损坏的介质读出的并不是真实准确的数据,而是不确定的数据。 如果你认为这仍然不能算模糊,只有像老照片那样的宏观现象才算模糊,VCD 的确做不到,但其他格式可以。比如一张以交错方式存储的 jpg 图片,把它的其中的某几段数据破坏掉,整张图片只会变模糊,而不会花屏、无法辨认。 最后,存储介质上的单个比特有中间值,和浮点数完全没关系。一个是介质的物理特性,一个是数据的编码格式。 磁盘单元上的磁性,不是绝对的非 0 即 1,而是有在[0,1]范围内的强和弱。通过判断这些中间值,可以恢复出已经被复写的磁盘数据。这其实就是删除敏感数据时要求以随机数将相应磁盘单元复写 N 次的原因。 |
58
yuchting 2018-09-05 18:31:18 +08:00
计算机一模糊,程序员就要通宵加班找出来为啥他就模糊了呢?
|