认知三阶段与熵:从简单到复杂再到有序的旅程
具体实例与推演
假设我们学习一门新的编程语言(例如 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)=−i∑p(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=Sfinal−Sinitial
变量解释:
- Δ 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)=−i∑p(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(Y∣X)=−x∈X,y∈Y∑p(x,y)logp(y∣x)
互信息:
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(X∣Y)=H(Y)−H(Y∣X)
公式推导
条件熵的推导:
条件熵 H ( Y ∣ X ) H(Y|X) H(Y∣X) 表示在已知随机变量 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(Y∣X)=−∑x∈X,y∈Yp(x,y)logp(y∣x) | 都涉及到多个变量之间的关系。 | 条件熵衡量在已知一个变量的情况下,另一个变量的不确定性;互信息衡量两个变量之间的相互依赖程度。 |
互信息 I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y) = H(X) - H(X|Y) I(X;Y)=H(X)−H(X∣Y) | 都涉及到多个变量之间的关系。 | 条件熵衡量在已知一个变量的情况下,另一个变量的不确定性;互信息衡量两个变量之间的相互依赖程度。 |
第五节:核心代码与可视化
以下是一个使用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.
输出内容 | 描述 |
---|---|
熵值变化图 | 显示模拟学习过程中熵值的变化,反映认知复杂度的变化。 |
不同阶段的样本图像 | 展示不同学习阶段的样本图像,帮助理解认知过程中的信息变化。 |
控制台输出信息 | 提供熵值及其数据类型,用于调试。 |
代码功能实现:
- 加载 MNIST 数据集。
- 计算图像数据的熵:模拟不同学习阶段,计算每个阶段数据的熵值。
- 可视化熵的变化:使用折线图展示熵值随学习阶段的变化。
- 可视化样本图像:展示不同阶段的样本图像,直观感受数据的变化。
第六节:参考信息源
-
信息论:
- Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory. Wiley-Interscience.
-
复杂性科学:
- Mitchell, M. (2009). Complexity: A Guided Tour. Oxford University Press.
-
认知科学:
- Thagard, P. (2005). Mind: Introduction to Cognitive Science. MIT Press.
-
机器学习与数据集:
- LeCun, Y., Cortes, C., & Burges, C. J. (2010). MNIST handwritten digit database. ATT Labs [Online]. Available: http://yann.lecun.com/exdb/mnist
参考文献链接:
- Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory. Wiley-Interscience.
- Mitchell, M. (2009). Complexity: A Guided Tour. Oxford University Press.
- Thagard, P. (2005). Mind: Introduction to Cognitive Science. MIT Press.
- LeCun, Y., Cortes, C., & Burges, C. J. (2010). MNIST handwritten digit database. ATT Labs [Online].
关键词:
#认知发展
#熵
#信息论
#系统复杂度
#秩序
#无序
#学习过程
#知识构建
#复杂性科学
#自组织