认知三阶段与熵:从简单到复杂再到有序的旅程

认知三阶段与熵:从简单到复杂再到有序的旅程

具体实例与推演

假设我们学习一门新的编程语言(例如 Python)。

  • 第一阶段(看山是山):初学者只接触到基本语法和简单程序,感觉一切都很直接明了。就像一个整洁的房间,只有几件必需家具。

    • 步骤:学习基本语法,编写 “Hello, World!” 程序。
    • 应用公式 H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi),此时 p ( x i ) p(x_i) p(xi) 集中在少数几个基本概念上,熵较低。
  • 第二阶段(看山不是山):随着学习深入,接触到更多高级概念(如面向对象、异常处理、库的使用等),开始感到困惑和混乱。就像房间里堆满了各种物品,杂乱无章。

    • 步骤:学习类、对象、继承、多态等概念,尝试编写更复杂的程序,遇到各种 bug 和问题。
    • 应用公式 H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi),此时 p ( x i ) p(x_i) p(xi) 分布更广泛,熵达到峰值。
  • 第三阶段(看山还是山):通过不断实践、理解和总结,逐渐掌握了语言的精髓,能够灵活运用各种概念解决问题,构建出复杂的系统。就像房间经过整理,物品各归其位,恢复了秩序。

    • 步骤:深入理解编程范式,熟练运用各种库和框架,能够设计和实现复杂的软件系统。
    • 应用公式 H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi),虽然 p ( x i ) p(x_i) p(xi) 仍然广泛,但通过建立概念之间的联系和层次结构,有效降低了系统的熵。

第一节:认知三阶段与熵的联系【通俗讲解,打比方来讲解!】

认知的三阶段可以用熵的概念来类比,熵描述了系统的无序程度或信息的不确定性。

核心概念
核心概念定义比喻或解释
第一阶段 (看山是山)认知简单,系统熵低像一个整洁的房间,只有几件必需家具,一目了然
第二阶段 (看山不是山)认知复杂化,混乱增加,熵达到峰值像一个杂乱的房间,堆满了各种物品,难以找到所需
第三阶段 (看山还是山)通过理解和秩序的重建,熵再次降低像一个经过整理的房间,物品各归其位,恢复了秩序和功能性
熵的公式

信息论中的熵:

H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi)

变量解释

  • H ( X ) H(X) H(X):随机变量 X X X 的熵,表示 X X X 的不确定性。
  • p ( x i ) p(x_i) p(xi):事件 x i x_i xi 发生的概率。在认知过程中,可以理解为对某个概念或知识点的掌握程度。

第二节:认知复杂化与熵增

认知复杂化的过程

在学习过程中,随着接触的信息增多,认知的复杂度会逐渐增加,这对应着熵的增加。

Δ S = S final − S initial \Delta S = S_{\text{final}} - S_{\text{initial}} ΔS=SfinalSinitial

变量解释

  • Δ S \Delta S ΔS:熵的变化量,表示系统无序程度的变化。
  • S final S_{\text{final}} Sfinal:最终状态的熵。
  • S initial S_{\text{initial}} Sinitial:初始状态的熵。
熵增的意义

熵增反映了系统从有序到无序的转变,在认知过程中,这表现为从简单认知到复杂认知的过渡。

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

熵的基本形式

热力学熵的基本公式:

S = k B ln ⁡ Ω S = k_B \ln \Omega S=kBlnΩ

信息论中的熵:

H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi)

条件熵:

H ( Y ∣ X ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) log ⁡ p ( y ∣ x ) H(Y|X) = -\sum_{x \in X, y \in Y} p(x, y) \log p(y|x) H(YX)=xX,yYp(x,y)logp(yx)

互信息:

I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) = H ( Y ) − H ( Y ∣ X ) I(X;Y) = H(X) - H(X|Y) = H(Y) - H(Y|X) I(X;Y)=H(X)H(XY)=H(Y)H(YX)

公式推导

条件熵的推导

条件熵 H ( Y ∣ X ) H(Y|X) H(YX) 表示在已知随机变量 X X X 的条件下,随机变量 Y Y Y 的不确定性。其推导基于联合概率和条件概率的定义。

互信息的推导

互信息 I ( X ; Y ) I(X;Y) I(X;Y) 表示两个随机变量之间的相互依赖程度,可以通过熵和条件熵的关系推导得出。

认知过程中的熵变

在认知过程中,我们可以将知识体系看作一个系统,学习过程就是系统状态的演化。

  • 初始阶段:知识体系简单,熵较低。
  • 学习过程:引入新知识,系统复杂度增加,熵增加。
  • 理解和整理:通过建立知识之间的联系,构建知识体系,熵降低。

第四节:相似公式比对

公式共同点不同点
香农熵 H ( X ) = − ∑ i p ( x i ) log ⁡ p ( x i ) H(X) = -\sum_{i} p(x_i) \log p(x_i) H(X)=ip(xi)logp(xi)都是对不确定性或信息量的度量。香农熵用于信息论,描述随机变量的不确定性;热力学熵用于热力学,描述系统的无序程度。
热力学熵 S = k B ln ⁡ Ω S = k_B \ln \Omega S=kBlnΩ都与系统的状态数或概率分布有关。热力学熵关注微观状态数,香农熵关注事件的概率分布。
条件熵 H ( Y ∣ X ) = − ∑ x ∈ X , y ∈ Y p ( x , y ) log ⁡ p ( y ∣ x ) H(Y|X) = -\sum_{x \in X, y \in Y} p(x, y) \log p(y|x) H(YX)=xX,yYp(x,y)logp(yx)都涉及到多个变量之间的关系。条件熵衡量在已知一个变量的情况下,另一个变量的不确定性;互信息衡量两个变量之间的相互依赖程度。
互信息 I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y) = H(X) - H(X|Y) I(X;Y)=H(X)H(XY)都涉及到多个变量之间的关系。条件熵衡量在已知一个变量的情况下,另一个变量的不确定性;互信息衡量两个变量之间的相互依赖程度。

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

以下是一个使用Python模拟认知过程中熵的变化,并进行可视化的示例代码。该代码使用MNIST数据集进行演示。

# This code performs the following functions:
# 1. Loads the MNIST dataset.
# 2. Calculates the entropy of the dataset at different stages of "learning" (simulated by subsetting the data).
# 3. Visualizes the entropy change using matplotlib and seaborn.
# 4. Demonstrates how the structure of the data (images) can be used to understand the concept of entropy in a visual way.

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import fetch_openml
from scipy.stats import entropy

# Load the MNIST dataset
mnist = fetch_openml('mnist_784', version=1, as_frame=False, parser='auto')
X, y = mnist["data"], mnist["target"]

# Function to calculate entropy of image data
def calculate_image_entropy(images):
    entropies = []
    for image in images:
        # Flatten the image to a 1D array
        flat_image = image.flatten()
        # Calculate the histogram (probability distribution)
        hist, _ = np.histogram(flat_image, bins=256, range=(0, 256), density=True)
        # Calculate entropy
        entropies.append(entropy(hist, base=2))
    return np.mean(entropies)

# Simulate different stages of learning by taking subsets of the data
stages = [100, 500, 1000, 5000, 10000, 70000]
entropy_values = []

for stage_size in stages:
    subset_X = X[:stage_size]
    entropy_values.append(calculate_image_entropy(subset_X))

# Visualize entropy change
sns.set_theme(style="whitegrid")
plt.figure(figsize=(12, 7))
plt.plot(stages, entropy_values, marker='o', linestyle='-', color='blue')
plt.title('Entropy Change During Simulated Learning Process (MNIST Dataset)', fontsize=16)
plt.xlabel('Number of Samples (Simulated Learning Stage)', fontsize=12)
plt.ylabel('Average Entropy (bits)', fontsize=12)
plt.xscale('log')
plt.grid(True, which="both", ls="--", c='0.7')

# Highlight key stages with vertical lines and annotations
for i, stage_size in enumerate(stages):
    plt.axvline(x=stage_size, color='gray', linestyle='--', linewidth=0.8)
    plt.annotate(f'Stage {i+1}', xy=(stage_size, entropy_values[i]), xytext=(stage_size, max(entropy_values)),
                 arrowprops=dict(facecolor='black', shrink=0.05, width=1, headwidth=5),
                 horizontalalignment='right', verticalalignment='top')

# Add a text box explaining the trend
plt.text(100, max(entropy_values) * 0.95,
         'Entropy increases as more samples are introduced,\nrepresenting the increasing complexity and diversity\nof the learned information.',
         fontsize=9, bbox=dict(facecolor='white', alpha=0.8))

plt.show()

# Visualize some sample images from different stages to show increasing complexity
fig, axes = plt.subplots(2, 3, figsize=(12, 8))
fig.suptitle('Sample Images from Different Learning Stages', fontsize=16)

for i, stage_size in enumerate(stages[:6]):
    ax = axes[i // 3, i % 3]
    sample_image = X[stage_size - 1].reshape(28, 28)
    ax.imshow(sample_image, cmap='gray')
    ax.set_title(f'Stage {i+1} ({stage_size} Samples)')
    ax.axis('off')

plt.tight_layout()
plt.subplots_adjust(top=0.9)
plt.show()

# Output the entropy values and their data types for debugging
print("Entropy values:", entropy_values)
print("Data type of entropy values:", type(entropy_values[0]))

# SHAP (SHapley Additive exPlanations) is typically used for explaining the output of machine learning models.
# Since this code does not involve a machine learning model, SHAP is not applicable here.
# If you want to use SHAP, you need to train a model on the MNIST dataset first.
输出内容描述
熵值变化图显示模拟学习过程中熵值的变化,反映认知复杂度的变化。
不同阶段的样本图像展示不同学习阶段的样本图像,帮助理解认知过程中的信息变化。
控制台输出信息提供熵值及其数据类型,用于调试。

代码功能实现

  1. 加载 MNIST 数据集
  2. 计算图像数据的熵:模拟不同学习阶段,计算每个阶段数据的熵值。
  3. 可视化熵的变化:使用折线图展示熵值随学习阶段的变化。
  4. 可视化样本图像:展示不同阶段的样本图像,直观感受数据的变化。

第六节:参考信息源

  1. 信息论

    • Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory. Wiley-Interscience.
  2. 复杂性科学

    • Mitchell, M. (2009). Complexity: A Guided Tour. Oxford University Press.
  3. 认知科学

    • Thagard, P. (2005). Mind: Introduction to Cognitive Science. MIT Press.
  4. 机器学习与数据集

    • LeCun, Y., Cortes, C., & Burges, C. J. (2010). MNIST handwritten digit database. ATT Labs [Online]. Available: http://yann.lecun.com/exdb/mnist

参考文献链接

  1. Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory. Wiley-Interscience.
  2. Mitchell, M. (2009). Complexity: A Guided Tour. Oxford University Press.
  3. Thagard, P. (2005). Mind: Introduction to Cognitive Science. MIT Press.
  4. LeCun, Y., Cortes, C., & Burges, C. J. (2010). MNIST handwritten digit database. ATT Labs [Online].

关键词:

#认知发展
#熵
#信息论
#系统复杂度
#秩序
#无序
#学习过程
#知识构建
#复杂性科学
#自组织

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

认知计算 茂森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值