当前位置: 首页 > news >正文

【自由能系列(初级)】自由能原理——神经科学的“能量守恒”方程

【通俗理解】自由能原理——神经科学的“能量守恒”方程

关键词提炼

#自由能原理 #KL散度 #生成模型 #识别密度 #观测数据 #神经科学

第一节:自由能原理的类比与核心概念

1.1 自由能原理的类比

自由能原理在神经科学中的应用,可以类比为一个“大脑的能量守恒”方程。就像物理学中的能量守恒定律一样,大脑在处理信息时,也遵循着一种“自由能守恒”的原则。
这个原理通过衡量大脑对外部世界的识别(识别密度)与内部模型的生成(生成模型)之间的差异,并加上观测数据的影响,来计算大脑在处理信息时的“自由能”。

在这里插入图片描述

1.2 相似公式比对

  • 能量守恒定律 Δ E = Q − W \Delta E = Q - W ΔE=QW,描述了能量在系统中的守恒关系。
  • 自由能原理 F = D K L ( q ( x ) ∥ p ( x ∣ y ) ) + log ⁡ p ( y ) F = D_{KL}(q(x) \parallel p(x \mid y)) + \log p(y) F=DKL(q(x)p(xy))+logp(y),则描述了神经科学中信息处理的“自由能守恒”。

第二节:自由能原理的核心概念与应用

2.1 核心概念

核心概念定义比喻或解释
自由能F代表大脑在处理信息时的“能量”状态。类似于物理中的自由能,是系统状态的一种度量。
KL散度衡量识别密度q(x)与生成模型p(x∣y)之间的差异。类似于距离,表示两个分布之间的差异程度。
识别密度q(x)大脑对外部世界的识别或感知。类似于我们对外部世界的“观察”或“理解”。
生成模型p(x∣y)大脑内部的模型,用于生成对外部世界的预测或解释。类似于我们对外部世界的“假设”或“模型”。
观测数据y外部世界提供给大脑的信息。类似于我们眼睛看到的、耳朵听到的等外部信息。

2.2 优势与劣势

  • 量化分析:将大脑的信息处理过程量化,使得研究更加客观和准确。
  • 模型解释:提供了大脑如何处理外部信息的一种理论框架。

2.3 与神经科学的类比

自由能原理在神经科学中扮演着“能量守恒”的角色,它揭示了大脑在处理信息时遵循的一种基本原则,就像物理学中的能量守恒定律一样。

第三节:公式探索与推演运算

3.1 自由能原理的基本形式

自由能原理的基本形式为:

F = D K L ( q ( x ) ∥ p ( x ∣ y ) ) + log ⁡ p ( y ) F = D_{KL}(q(x) \parallel p(x \mid y)) + \log p(y) F=DKL(q(x)p(xy))+logp(y)

其中,F代表自由能, D K L D_{KL} DKL是KL散度,q(x)是识别密度,p(x∣y)是生成模型,y是观测数据。

3.2 具体实例与推演

假设识别密度q(x)是一个高斯分布,生成模型p(x∣y)也是一个高斯分布,且两者具有相同的均值但不同的方差,那么KL散度就可以通过计算两个高斯分布之间的差异来得到。同时,观测数据y的对数概率 log ⁡ p ( y ) \log p(y) logp(y)可以通过观测数据的分布来计算。将这两部分相加,就可以得到自由能F的值。

第四节:相似公式比对

  • 信息增益自由能原理中的KL散度

    • 共同点:都涉及到了信息的度量。
    • 不同点:信息增益通常用于决策树等算法中,衡量特征对分类的贡献;而KL散度则用于衡量两个分布之间的差异,是自由能原理的一部分。
  • 贝叶斯公式自由能原理

    • 相似点:都涉及到了先验概率和后验概率。
    • 差异:贝叶斯公式是概率论中的基本公式,用于计算后验概率;而自由能原理则是神经科学中的一个原理,用于描述大脑的信息处理过程。

第五节:核心代码与可视化

这段代码使用Python的NumPy和Matplotlib库来计算和可视化自由能原理。通过模拟识别密度和生成模型,计算KL散度和观测数据的对数概率,从而得到自由能的值,并进行可视化展示。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# Define the recognition density q(x) and the generative model p(x|y)
def q(x):return np.exp(-(x - 0)**2 / (2 * 1**2)) / (np.sqrt(2 * np.pi) * 1)def p(x, y):return np.exp(-(x - y)**2 / (2 * 0.5**2)) / (np.sqrt(2 * np.pi) * 0.5)# Define the KL divergence
def KL_divergence(q_dist, p_dist):return np.sum(q_dist * np.log(q_dist / p_dist))# Define the log probability of the observation data
def log_probability(y):return -np.log(np.sqrt(2 * np.pi)) - 0.5 * y**2# Calculate the free energy
def free_energy(y):x_values = np.linspace(-5, 5, 1000)q_dist = q(x_values)p_dist = p(x_values, y)kl_div = KL_divergence(q_dist, p_dist)log_prob = log_probability(y)return kl_div + log_prob# Visualize the free energy for different observation data
y_values = np.linspace(-3, 3, 10)
free_energies = [free_energy(y) for y in y_values]sns.set_theme(style="whitegrid")
plt.plot(y_values, free_energies, label='Free Energy F(y)')
plt.xlabel('Observation Data y')
plt.ylabel('Free Energy F')
plt.title('Free Energy for Different Observation Data')
plt.legend()
plt.show()# Printing more detailed output information
print("Free energy plot has been generated and displayed. \nThe plot illustrates the free energy F(y) for different values of observation data y, \ncalculated using the Free Energy Principle.")

这段代码首先定义了识别密度q(x)和生成模型p(x∣y),然后计算了KL散度和观测数据的对数概率,最后得到了自由能的值,并进行了可视化展示。通过可视化,我们可以直观地看到自由能随观测数据y的变化情况。

代码输出内容
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 惠海H6900B升压恒流调光IC芯片3.7V7.4V12V升压18V24V36V 48V 植物灯/电解水
  • 娱乐社交、游戏等行业共探合规前提下,实现产品可持续的增长与营收 | 网易数智x华为云泛娱乐行业沙龙-杭州站邀您前来!
  • 学苑教育杂志社学苑教育编辑部学苑教育杂志2024年第23期目录
  • 解决有向图中节点出度和入度计算问题
  • 万字详解Spring框架基础(Java开发社区最受欢迎的框架之一)
  • python 和C通过共享内存通信
  • Redis 实现哨兵模式
  • uniapp,uview:inputnumber或者input,当type为number的时候,在ios里输入不了小数的问题
  • 歌曲转换成mp3格式免费秘籍,安利6款音频转换软件(简单实用)
  • JVM 性能分析 —— CMS 老年代并发 GC 触发条件与压缩式 GC (升级为 Full GC)触发条件
  • 数据库命令与语句
  • 深度学习入门-10
  • 金融知识普及月答题活动
  • Spring 源码解读:实现Bean的初始化与销毁机制
  • node.js使用express框架实现api接口开发(从零开始,超简单可直接复制)
  • 【Leetcode】104. 二叉树的最大深度
  • Debian下无root权限使用Python访问Oracle
  • gops —— Go 程序诊断分析工具
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • passportjs 源码分析
  • Rancher如何对接Ceph-RBD块存储
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • v-if和v-for连用出现的问题
  • 机器学习中为什么要做归一化normalization
  • 记一次删除Git记录中的大文件的过程
  • 解决iview多表头动态更改列元素发生的错误
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 普通函数和构造函数的区别
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 三分钟教你同步 Visual Studio Code 设置
  • 延迟脚本的方式
  • 用简单代码看卷积组块发展
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • !!Dom4j 学习笔记
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2)STM32单片机上位机
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (LeetCode 49)Anagrams
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (六)软件测试分工
  • (篇九)MySQL常用内置函数
  • (转载)虚函数剖析
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net 流——流的类型体系简单介绍
  • .net 设置默认首页
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理