游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数,我一直都有小小的迷思,总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数,打造更接近人类的AI算法,这篇文章旨在讨论下

目录

3.10. 艾宾浩斯曲线

3.10.1. 定义

3.10.1.1. 曲线计算公式

3.10.1.2. 曲线计算的python实现

3.10.2. 历史发展

3.10.3. 应用场景

3.10.4. 优缺点

3.10.4.1. 基本优缺点优点:

3.10.4.2. 梯度消失

3.10.5. 与sigmoid函数对比

3.10.6. 代码实现

3.10.7. 与sigmoid函数的导函数异同

3.10.8. 艾宾浩斯遗忘曲线如何反映记忆保持率

3.10.9. 艾宾浩斯曲线作为激活函数

3.10.9.1. 可行性

3.10.9.2. 弱点

3.10.9.3. 与Sigmoid函数的对比

3.10.9.4. 小结论


3.10. 艾宾浩斯曲线


3.10.1. 定义

艾宾浩斯遗忘曲线(Ebbinghaus Forgetting Curve)是描述人类记忆遗忘规律的一种曲线,由德国心理学家赫尔曼·艾宾浩斯(Hermann Ebbinghaus)通过大量实验得出。

艾宾浩斯遗忘曲线描述了人们在学习后随时间推移对信息的记忆保持程度。

它表明,人们在初次学习后,记忆会迅速遗忘,但随着时间的推移,遗忘速度会逐渐减慢。


3.10.1.1. 曲线计算公式

艾宾浩斯遗忘曲线通常可以通过指数衰减函数来近似表示。虽然艾宾浩斯本人没有提供一个具体的数学公式,但我们可以使用类似下面的公式来描述这一曲线:
[ R = e^{-\frac{t}{S}} ]
其中:
( R )是记忆保持率(即还记得的信息比例)。
( t )是经过的时间。
( S )是稳定性或遗忘速度的一个参数,它决定了记忆随时间衰减的速度。
注意:这个公式是一个简化的模型,并不完全准确地反映艾宾浩斯的实际发现,但它提供了一个有用的近似。

3.10.1.2. 曲线计算的python实现

艾宾浩斯遗忘曲线描述的是人类大脑对新获取知识的遗忘规律,通常用一个指数衰减函数来近似模拟。下面是一个简单的Python代码示例,用来模拟艾宾浩斯遗忘曲线

import numpy as np  
import matplotlib.pyplot as plt  
  
# 假设时间间隔(单位:天)  
time_intervals = np.arange(0, 31, 1)  # 从第0天开始到第30天,每天记录一次  
  
# 艾宾浩斯遗忘曲线通常用一个指数衰减函数来近似,这里我们假设一个简化的指数衰减模型  
# 遗忘率(保留率)可以根据实际情况调整  
retention_rate = 0.95  # 每天保留95%的记忆  
  
# 计算每个时间点的记忆保留量  
retention = retention_rate ** time_intervals  
  
# 绘制艾宾浩斯遗忘曲线  
plt.plot(time_intervals, retention, label='Retention')  
plt.xlabel('Time (days)')  
plt.ylabel('Retention Rate')  
plt.title('Ebbinghaus Forgetting Curve Simulation')  
plt.legend()  
plt.grid(True)  
plt.show()

上述代码首先定义了一个时间间隔数组,然后设定了一个每天的记忆保留率(这里是95%)。接着,使用NumPy库计算了每个时间点的记忆保留量,并用Matplotlib库绘制了艾宾浩斯遗忘曲线。请注意,这个模拟是非常简化的,实际的艾宾浩斯遗忘曲线可能会因为个体差异、记忆材料类型、复习方式等多种因素而有所不同。


3.10.2. 历史发展


艾宾浩斯在1885年发表了他的研究成果,他使用自己作为实验对象,通过记忆无意义的音节来测试记忆随时间的变化。

他的实验揭示了记忆遗忘的规律,为后来的记忆研究奠定了基础。


3.10.3. 应用场景

  • 学习策略:学生可以利用艾宾浩斯遗忘曲线来制定更有效的复习计划,以便在关键时间点上回顾和巩固知识。
  • 市场营销:在广告和品牌宣传中,了解消费者的记忆遗忘规律有助于制定更有效的广告投放策略。
  • 产品设计:在用户界面设计中,考虑用户的记忆遗忘曲线可以帮助设计师创建更直观、更易于记忆的用户界面。


3.10.4. 优缺点

3.10.4.1. 基本优缺点
优点:
  • 提供了对人类记忆遗忘规律的深刻见解。
  • 有助于制定更有效的学习和复习策略。

缺点:

  • 艾宾浩斯的研究是基于无意义音节的记忆,可能与实际生活中的有意义信息记忆有所不同。
  • 个体差异可能导致遗忘曲线有所不同,因此该曲线可能并不适用于所有人。
  • 梯度消失问题相对出现较快
3.10.4.2. 梯度消失

艾宾浩斯曲线本身并不直接涉及梯度消失问题,因为它不是一个用于神经网络训练的激活函数。然而,当我们在讨论神经网络中的梯度消失问题时,这通常与激活函数的选择和网络的结构设计有关。

梯度消失问题主要发生在深度神经网络中,特别是在使用某些激活函数(如sigmoid或tanh)时。这些函数在输入值的极端情况下(接近正无穷或负无穷)的梯度接近于零,导致在反向传播过程中,梯度在逐层传递时迅速减小,甚至接近于零,从而使得网络无法有效学习。

为了解决梯度消失问题,可以采取以下几种方法:

  1. 选择合适的激活函数:使用ReLU(Rectified Linear Unit)及其变种(如Leaky ReLU、PReLU等)作为激活函数,这些函数在输入值大于零时有非零梯度,从而有助于缓解梯度消失问题。
  2. 使用批归一化(Batch Normalization):批归一化可以帮助网络更好地学习,通过规范每一层神经元的激活值,使得它们的分布更加稳定,从而有助于防止梯度消失。
  3. 优化网络结构:采用残差网络(ResNet)等结构,通过添加跨层连接(shortcuts),使得梯度能够直接回传到较浅的层,从而缓解梯度消失问题。
  4. 使用梯度裁剪:当梯度过大时,将其限制在一个合理的范围内,以防止梯度爆炸和由此引起的梯度消失问题。
  5. 权重正则化:使用L1或L2正则化来限制网络权重的增长,从而有助于防止过拟合和梯度消失问题。

3.10.5. 与sigmoid函数对比


Sigmoid函数通常用于机器学习中的逻辑回归和神经网络,其公式为:
[ \sigma(x) = \frac{1}{1 + e^{-x}} ]
与艾宾浩斯遗忘曲线相比,sigmoid函数在形状上有些相似,但两者的应用场景和含义完全不同。

Sigmoid函数用于将任意实数映射到0到1之间,常用于表示概率或激活函数的输出。

而艾宾浩斯遗忘曲线则描述了记忆随时间的衰减。

3.10.6. 代码实现

使用Python和C++实现艾宾浩斯遗忘曲线代码
Python实现

import numpy as np
import matplotlib.pyplot as plt

# 定义艾宾浩斯遗忘曲线函数
def ebbinghaus_forgetting_curve(t, S=10):
    return np.exp(-t / S)

# 生成时间点
times = np.linspace(0, 100, 100)

# 计算每个时间点的记忆保持率
retention_rates = ebbinghaus_forgetting_curve(times, S=10)

# 绘制艾宾浩斯遗忘曲线
plt.plot(times, retention_rates)
plt.xlabel('Time')
plt.ylabel('Retention Rate')
plt.title('Ebbinghaus Forgetting Curve')
plt.show()

C++实现(使用简单的控制台输出和绘图库,如GNUplot):

#include <iostream>
#include <cmath>
#include <vector>
// 如果你使用GNUplot或其他绘图库,请包含相应的头文件

// 定义艾宾浩斯遗忘曲线函数
double ebbinghaus_forgetting_curve(double t, double S = 10.0) {
    return exp(-t / S);
}

int main() {
    std::vector<double> times;
    std::vector<double> retention_rates;
    
    // 生成时间点并计算记忆保持率
    for (double t = 0; t <= 100; t++) {
        times.push_back(t);
        retention_rates.push_back(ebbinghaus_forgetting_curve(t));
    }
    
    // 输出结果到控制台(或绘制图形,取决于你使用的库)
    for (size_t i = 0; i < times.size(); ++i) {
        std::cout << "Time: " << times[i] << ", Retention Rate: " << retention_rates[i] << std::endl;
    }
    
    // 如果你使用绘图库,请在这里调用相应的绘图函数来绘制曲线
    // ... (绘图代码)
    
    return 0;
}


注意:C++代码中的绘图部分取决于你使用的具体绘图库。上面的代码仅提供了计算和输出数据的基础框架。如果你希望绘制图形,你可能需要使用如GNUplot、Qt的图形界面或其他第三方图形库。

3.10.7. 与sigmoid函数的导函数异同

艾宾浩斯遗忘曲线与sigmoid函数的导数函数,在定义半衰期为1时的共同点和区别:

艾宾浩斯遗忘曲线与sigmoid函数的导数函数在定义和应用场景上存在显著差异,但当我们将两者的某些特性进行对比时,可以找出一些共同点和区别。

以下是在定义半衰期为1时,两者的共同点和区别的分析:


共同点:

  • 数学特性:两者都是基于数学函数的表达。艾宾浩斯遗忘曲线可以通过指数衰减函数来近似表示,而sigmoid函数的导数则是一个具体的数学函数。
  • 值域范围:在特定的条件下(如半衰期为1时),两者的函数值都可能在0到1之间变化。艾宾浩斯遗忘曲线表示记忆保持率,其值在0到1之间;sigmoid函数的导数在特定输入范围内也表现出类似的特性。
  • 描述变化过程:两者都用于描述某种变化过程。艾宾浩斯遗忘曲线描述记忆随时间的衰减过程,而sigmoid函数的导数则描述sigmoid函数斜率的变化,即函数增减的速率。


区别:

  • 应用场景:艾宾浩斯遗忘曲线主要应用于学习和记忆领域,用于描述人类记忆随时间的遗忘规律;而sigmoid函数的导数则主要应用于机器学习、神经网络等领域,用于描述函数的变化率。
  • 函数形状:艾宾浩斯遗忘曲线通常呈现为指数衰减的形状,表示记忆随时间的快速遗忘后逐渐趋于稳定;而sigmoid函数的导数则呈现先增后减的趋势,反映了sigmoid函数在特定点上的斜率变化。
  • 参数依赖:艾宾浩斯遗忘曲线的形状受时间参数的影响,表示不同时间点上的记忆保持率;而sigmoid函数的导数则受原函数输入值的影响,描述了在不同输入值下函数的变化速率。
  • 物理意义:艾宾浩斯遗忘曲线具有明确的物理意义,即描述人类记忆的遗忘规律;而sigmoid函数的导数则更多地是数学意义上的变化率描述,虽然在神经网络中有其特定的应用意义,但相比之下其物理意义更为抽象。

艾宾浩斯遗忘曲线与sigmoid函数的导数函数在定义、应用场景、函数形状、参数依赖以及物理意义等方面存在显著差异。

尽管在某些数学特性上它们可能表现出相似性(如在特定条件下的值域范围),但两者的本质和应用领域是不同的。

3.10.8. 艾宾浩斯遗忘曲线如何反映记忆保持率

艾宾浩斯遗忘曲线通过一系列实验数据绘制而成,深刻地反映了人类记忆的保持率随时间的变化规律。以下是对艾宾浩斯遗忘曲线如何反映记忆保持率的详细解释:

  • 初始遗忘速度快:

根据艾宾浩斯的实验,人们在初次学习后,记忆会迅速开始遗忘。例如,学习后的20分钟内,就有高达42%的信息被遗忘,只剩下58%被记住。这显示了人类记忆在初始阶段的快速遗忘特点。

  • 遗忘速度逐渐减慢:

随着时间的推移,遗忘的速度会逐渐减慢。艾宾浩斯的实验数据显示,在学习后的1小时内,56%的信息被遗忘,而到了1天后,遗忘率增至74%。然而,从长时间尺度来看,遗忘的速度显著降低。比如,1周后遗忘率达到77%,1个月后达到79%,这表明随着时间的推移,遗忘的速度变得越来越慢。

  • 记忆保持率的长期趋势:

艾宾浩斯遗忘曲线表明,虽然初始遗忘速度很快,但随着时间的推移,记忆保持率逐渐趋于稳定。这意味着在经历了一段时间的快速遗忘后,人们仍然能够保留相当一部分的记忆,并且这部分记忆在较长时间内相对稳定。

  • 个体差异与曲线适用性:

艾宾浩斯遗忘曲线是基于对无意义音节的记忆实验得出的,因此它主要反映了机械记忆的遗忘规律。

对于有意义的信息或实际生活中的记忆情况,个体的记忆保持率可能会有所不同。

然而,艾宾浩斯遗忘曲线仍然提供了一个有价值的参考框架,帮助人们理解记忆随时间的变化趋势。

艾宾浩斯遗忘曲线通过展示记忆保持率随时间的变化规律,反映了人类记忆的遗忘特点。这条曲线提醒我们,在学习新知识后要及时复习以巩固记忆,因为初始阶段的遗忘速度非常快。同时,它也揭示了记忆保持的长期趋势和个体差异的重要性。

3.10.9. 艾宾浩斯曲线作为激活函数

艾宾浩斯曲线本身并不是一个典型的激活函数,因为激活函数通常在神经网络中使用,它们需要满足一些特定的数学特性,如可导性、非线性和输出值范围等。

然而,如果我们尝试从艾宾浩斯遗忘曲线的角度来设计一个类似的激活函数,可以探讨其可行性和潜在的弱点。

3.10.9.1. 可行性

艾宾浩斯遗忘曲线描述的是随着时间的推移,记忆保留率逐渐降低的过程。从这个角度看,我们可以设计一个随时间或输入值递减的激活函数,模拟类似遗忘效应的行为。这种设计在某些特定应用中可能是有意义的,例如需要模拟记忆衰减或注意力降低的系统。

3.10.9.2. 弱点
  1. 非线性不足:艾宾浩斯遗忘曲线虽然表现为下降趋势,但其下降速度可能相对平稳,不够非线性。在神经网络中,非线性是激活函数的一个关键特性,因为它允许网络学习复杂的数据表示。
  2. 输出范围限制:艾宾浩斯遗忘曲线描述的是记忆保留率,其输出范围通常在0到1之间。然而,在神经网络中,一些激活函数(如ReLU)的输出可以超过这个范围,从而提供更大的表示能力。
  3. 没有明确的数学公式:艾宾浩斯遗忘曲线是通过实验数据拟合得到的,没有明确的数学公式。这可能导致在神经网络中难以精确实现。
3.10.9.3. 与Sigmoid函数的对比

Sigmoid函数是神经网络中常用的激活函数之一。

Sigmoid函数将输入值映射到0到1之间的输出值,与艾宾浩斯遗忘曲线的输出范围相似。

然而,Sigmoid函数具有更好的非线性特性,能够在神经网络的训练过程中更好地学习数据表示。

在运行效率方面,Sigmoid函数由于其简单的数学形式,通常比复杂的自定义激活函数(如基于艾宾浩斯遗忘曲线的激活函数)更快。

此外,由于Sigmoid函数在深度学习框架中得到广泛支持,因此可以充分利用框架的优化来提高运行效率。

3.10.9.4. 小结论

虽然从概念上讲,我们可以尝试将艾宾浩斯遗忘曲线的思想应用于神经网络中的激活函数设计,但由于其非线性不足、输出范围限制以及没有明确的数学公式等弱点,这种设计在实际应用中可能面临挑战。相比之下,Sigmoid函数作为一种成熟的激活函数,在非线性、输出范围以及运行效率方面都具有更好的表现。

3.10.10. 结论

综合来说,艾宾浩斯遗忘曲线函数相对计算难度较大,非线性不足,同时,其还会快速陷入梯度消失。所以还是乖乖的使用sigmoid函数来搞激活函数吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/765655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【QT】常用控件|widget|QPushButton|RadioButton|核心属性

目录 ​编辑 概念 信号与槽机制 控件的多样性和定制性 核心属性 enabled geometry ​编辑 windowTiltle windowIcon toolTip styleSheet PushButton RadioButton 概念 QT 控件是构成图形用户界面&#xff08;GUI&#xff09;的基础组件&#xff0c;它们是实现与…

维护Nginx千字经验总结

Hello , 我是恒 。 维护putty和nginx两个项目好久了&#xff0c;用面向底层的思路去接触 在nginx社区的收获不少&#xff0c;在这里谈谈我的感悟 Nginx的夺冠不是偶然 高速:一方面&#xff0c;在正常情况下&#xff0c;单次请求会得到更快的响应&#xff1b;另一方面&#xff0…

深入解析:Java爬虫的本质是什么?

深入解析&#xff1a;Java爬虫的本质是什么&#xff1f; 引言&#xff1a; 随着互联网的快速发展&#xff0c;获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序&#xff0c;能够模拟人类浏览器的行为&#xff0c;从网页中提取所需信息&#xff0c;成为了…

递归算法练习

112. 路径总和 package Tree;import java.util.HashMap; import java.util.Map;class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val val;} }/*** 求 树的路径和* <p>* 递归 递减* <p>* 询问是否存在从*当前节点 root 到叶…

【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)

文章目录 配置镜像源下载Pytorch验证使用Pytorch进行数字识别 配置镜像源 Anaconda下载完毕之后&#xff0c;有两种方式下载pytorch&#xff0c;一种是用页面可视化的方式去下载&#xff0c;另一种方式就是直接用命令行工具去下载。 但是由于默认的Anaconda走的是外网&#x…

3D Gaussian Splatting代码中的forward和backward两个文件代码解读

3dgs代码前向传播部分 先来讨论一下glm&#xff0c;因为定义变量的时候用到了这个。 glm的解释 glm 是指 OpenGL Mathematics&#xff0c;这是一个针对图形编程的数学库。它的全称是 OpenGL Mathematics (GLM)&#xff0c;主要用于 OpenGL 的开发。这个库是基于 C 的模板库&…

heic格式转化jpg,手把手教你将heic转换成jpg【办公必备】

一、什么是heic heic格式是一种高效的图片格式&#xff0c;它可以在较小的文件大小下提供高质量的图片。 二、如何打开heic 然而&#xff0c;这种图片因其格式的特殊性&#xff0c;在实际应用中仍存在一些问题&#xff1a;压缩效果可能不够理想&#xff0c;一些老旧的软件和设…

墨烯的C语言技术栈-C语言基础-003

三.数据类型 1.char // 字符数据型 2.short // 短整型 3.int // 整型 4.long // 长整型 5.long long // 更长的整型 6.float // 单精度浮点数 7.double // 双精度浮点数 为什么写代码? 为了解决生活中的问题 购物,点餐,看电影 为什么有这么多类型呢? 因为说的话都是字符型…

Ubuntu下反弹shell的思考

目录 Ubuntu的命令执行环境 bash (Bourne Again SHell): sh (Bourne SHell): dash (Debian Almquist SHell): 它们之间的关系&#xff1a; 可能遇到的问题 一、脚本权限问题 二、命令执行环境(shell解释器)问题 如何解决&#xff1f; 1.修改/bin/sh软连接的指向为bas…

什么美业门店管理系统好用?2024美业收银系统软件排名分享

美业SAAS系统在美容、美发、美甲等行业中十分重要&#xff0c;这种系统为美业提供了一种数字化解决方案&#xff0c;帮助企业更高效地管理业务和客户关系。 美业门店管理系统通常提供预约管理、客户管理、库存管理、报表生成等一系列功能&#xff0c;以满足美容院、美发沙龙等…

iptables防火墙详解、相关命令示例

目录 Linux包过滤防火墙 包过滤的工作层次 iptables的链结构 规则链 默认包括5中规则链&#xff08;对数据包控制的时机&#xff09; iptables的表结构 规则表 默认包括4个规则表 数据包过滤的匹配流程 规则表之间的顺序 规则链之间的顺序 规则链内的匹配顺序 匹配…

【Arduino】XIAOFEIYU实验ESP32使用TOUCH触摸模块(图文)

今天XIAOFEIYU继续来实验ESP32使用传感器模块&#xff0c;这次用到的模块为TOUCH触摸模块。 三个针脚分别为正负极&#xff0c;IO针脚。 #define pin 25void setup(){Serial.begin(9600); pinMode(pin, INPUT); }float value 0.0; void loop(){value digitalRead(pin); …

Vue3详解

vite和webpack区别 vite vite使用原生ES模块进行开发&#xff0c;无需在编译时将所有代码转换为JS打包&#xff0c;从而提供了更快的热更新和自动刷新功能&#xff1b; vite在开发模式下没有打包步骤&#xff0c;而是利用浏览器的ES Module Imports特性实现按需编译&#xff…

提高候选人的招聘感受:成功的策略

大约78%的候选人表示&#xff0c;他们的整体应聘体验表明企业对员工的关注。然而&#xff0c;超过一半的候选人透露&#xff0c;他们在招聘过程中有过负面的候选人经历&#xff0c;80%的候选人在经历了令人失望的招聘过程后会公开与他人分享他们的不良经历。 但也有一线希望&am…

友好前端vue脚手架

企业级后台集成方案vue-element-admin-CSDN博客在哔站学习&#xff0c;老师说可以有直接的脚手架&#xff08;vue-element-admin&#xff09;立马去搜索&#xff0c;找到了这博主这篇文章 介绍 | vue-element-admin​​​​​​ 官方默认英文版&#xff1a; git clone https:/…

【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现

原题链接 题目描述 给你一个整数数组 nums。 返回两个&#xff08;不一定不同的&#xff09;质数在 nums 中 下标 的 最大距离。 示例 1&#xff1a; 输入&#xff1a; nums [4,2,9,5,3] 输出&#xff1a; 3 解释&#xff1a; nums[1]、nums[3] 和 nums[4] 是质数。因此答…

力扣每日一题 7/2 数学、数论、数组/双指针

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 3115.质数的最大距离【中等】 题目&#xff1a; 给你一个整数数组 nums。…

uview文本框组件计数count报错u--textarea

报错内容&#xff1a; [Vue warn]: Error in render: “TypeError: Cannot read property ‘length’ of null” found in —> at uni_modules/uview-ui/components/u-textarea/u-textarea.vue at uni_modules/uview-ui/components/u–textarea/u–textarea.vue mp.runtime.…

C盘清理和管理

本篇是C盘一些常用的管理方法&#xff0c;以及定期清理C盘的方法&#xff0c;大部分情况下都能避免C盘爆红。 C盘清理和管理 C盘存储管理查看存储情况清理存储存储感知清理临时文件清理不需要的 迁移存储 磁盘清理桌面存储管理应用存储管理浏览器微信 工具清理 C盘存储管理 查…

ERROR: No matching distribution found for torch==2.0.1+cu117(比手动下载方便)

ERROR: No matching distribution found for torch2.0.1cu117 遇见这种报错可以把pip install -r requirements.txt修改为 pip install -r requirements.tx --extra-index-url https://download.pytorch.org/whl/cu117 -i https://pypi.tuna.tsinghua.edu.cn/simple或者直接…