当前位置:首页>python>一口气读完《Python深度学习》:深度学习的流形奥秘,全景图大揭秘!

一口气读完《Python深度学习》:深度学习的流形奥秘,全景图大揭秘!

  • 2026-01-31 19:17:17
一口气读完《Python深度学习》:深度学习的流形奥秘,全景图大揭秘!
深度学习在干什么? 2012年,AlexNet横空出世,开启了深度学习的黄金十年。但很多人至今仍把深度学习当作"炼丹术"——调参、堆层、祈祷收敛。
其实,深度学习有一个极其优美的几何解释:
想象一张被揉皱的纸团。纸上画着手写数字0-9。在三维空间里,这些数字混杂在一起,很难分开。但如果我们能找到一种方法把纸团展开,数字之间的边界就清晰可见了。
神经网络就是那双展开纸团的手。
PART 01
章:CNN——空间流形的局部探测器
1.1 卷积:局部特征的侦察兵
当你第一次看CNN代码时,可能会写出这样的东西:
model.add(layers.Conv2D(32, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
这些3×3的小方块在干什么?
直觉:每个卷积核就是一个特征探测器。它在图像上滑动,寻找特定的局部模式:
  • 低层卷积核:检测边缘、纹理(横线、竖线、角点)
  • 中层卷积核:检测部件(眼睛、轮子、窗户)
  • 高层卷积核:检测整体(人脸、汽车、房屋)
数学本质:卷积操作是一种局部线性变换:
但真正让CNN强大的,是它背后的两个归纳偏置(Inductive Bias):
  • 局部性:每个像素只和周围的像素有关(用小卷积核而不是全连接)
  • 平移不变性:同一个卷积核滑过整张图(权重共享)
这两条假设,就是CNN对图像世界的"物理定律"。
1.2 池化:特征的"存在性投票"
model.add(layers.MaxPooling2D((2, 2)))
MaxPooling干了什么?它把2×2的区域压缩成1个值(取最大)。
传统解释:降采样,减少计算量。
流形视角:池化做的是局部平均,它在问:"这片区域里有没有这个特征?"而不关心"特征具体在哪个像素"。
这就是为什么CNN具有一定的平移不变性——你把猫往右挪10个像素,经过几层池化后,高层特征几乎不变。
1.3 1×1卷积:被低估的通道魔法师
在VGG、ResNet、Inception里,你会频繁看到1×1卷积:
model.add(layers.Conv2D(64, (1, 1), activation='relu'))
1×1能干什么?它不看任何空间结构,只在通道维度上操作。
三大作用:
  • 通道混合:把不同通道的信息融合起来
相当于在每个像素位置上做一个全连接
数学上:,其中是通道之间的权重矩阵
  • 降维(瓶颈层):256通道 → 64通道 → 256通道
减少计算量,同时提取核心特征
这就是ResNet里著名的"Bottleneck"结构
  • 增加非线性:每个1×1卷积后面通常跟着ReLU
相当于在通道维度上增加一层"思考"
1.4 从平移不变到旋转不变:群论的登场
CNN的平移不变性很强,但旋转不变性呢?
把一张猫的图片旋转45度,CNN可能就不认识了。怎么办?
传统方案:数据增强——把训练集里的猫各种角度都转一遍。
优雅方案:群等变卷积神经网络(G-CNN)
核心思想:把卷积核的"平移群"扩展为"欧式群SE(2)"(平移 + 旋转)。
传统(平移等变)
(群等变,)
通俗解释:普通CNN只在x-y方向滑动卷积核;G-CNN还会旋转卷积核,同时滑动。这样网络就能"天然"识别各种角度的特征。
为什么没有大规模采用?
这涉及到AI的一个深刻教训——Bitter Lesson(苦涩的教训):
G-CNN理论优美,但实际上:
  • 把旋转不变性"硬编码"进网络,计算成本高
  • 不如直接用海量数据 + 数据增强 + 更大的模型
这就是为什么现在的大模型(GPT、Sora)不强调精巧的结构设计,而是靠暴力美学——堆参数、堆数据、堆算力。
1.5 本章小结:CNN的流形视角
操作
传统解释
流形视角
卷积
提取局部特征
在空间流形上做局部线性变换
池化
降采样
特征存在性的局部投票(流形的局部平均)
1×1卷积
通道混合/降维
在通道流形上做投影变换
深层堆叠
学习复杂特征
逐层展开扭曲的数据流形
平移不变性
权重共享
平移群对称性
数据增强
增加样本多样性
给流形穿上厚衣服(增加流形厚度)
一句话总结:CNN是一台局部到全局的流形展平机。它假设图像数据分布在一个低维流形上,通过层层卷积和池化,把这个弯曲的流形逐渐拉直,让分类边界变得清晰。
PART 02
章:LSTM——时间流形的传送带
2.1 RNN:为什么简单循环会"失忆"?
当我们处理序列数据(文本、语音、股票)时,时间维度登场了。最直观的想法是循环神经网络(RNN):
ht = tanh(W h{t-1} + W x_t + b)
问题来了:当序列很长时,RNN会"失忆"。
数学原因:梯度消失/爆炸
假设我们要把梯度从时刻传回时刻:
每一步乘以一个矩阵。如果的特征值:
  • < 1:连乘后趋近于0(梯度消失)→ 前面的记忆"蒸发"了
  • > 1:连乘后趋近于∞(梯度爆炸)→ 训练炸了
流形视角:简单RNN在时间维度上做"激进变换",每一步都把流形扭曲变形。信息在传递过程中被不断"压缩"或"放大",最终丢失。
2.2 LSTM:给记忆修一条高速公路
1997年,Hochreiter和Schmidhuber提出了长短期记忆网络(LSTM),核心思想很简单:
LSTM引入了一个关键概念:细胞状态(Cell State)
──────────────────────────────────▶ C_t(细胞状态:传送带)
│         │         │
▼         ▼         ▼
遗忘门      输入门      输出门
│         │         │
─────────────────────────────────▶ h_t(隐藏状态:工作记忆)
三个门的作用:
公式
作用
遗忘门
决定丢弃多少旧记忆
输入门
决定写入多少新信息
输出门
决定输出多少当前状态
细胞状态的更新(核心公式):
直觉:
是传送带上的货物(旧记忆)
是"丢弃阀":决定扔掉多少旧货
是"装载口":决定加多少新货
货物沿着传送带顺畅流动,不会被压缩变形
2.3 LSTM = 时间版的 ResNet
惊人的相似性:
ResNet
LSTM
残差连接(跳跃连接)
细胞状态(传送带)
解决深层网络梯度消失
解决长序列梯度消失
空间维度的"高速公路"
时间维度的"高速公路"
数学本质:两者都在做同一件事——给梯度留一条直达通道。
在ResNet中:
那个"1"就是恒等映射,保证梯度至少能原样传回去。
在LSTM中,当(遗忘门全开)时:
梯度同样可以无损地沿着细胞状态传回很远的过去。
流形视角:
  • 简单RNN每一步都"激进变形"流形 → 信息丢失
  • LSTM的细胞状态是"温和传送" → 流形结构被保护
  • 门控机制决定"在哪里变形,在哪里保持"
2.4 用LSTM生成文本:概率的接龙游戏
书中用LSTM生成尼采风格的文本,核心思路是:
model = Sequential([
LSTM(128, input_shape=(maxlen, len(chars))),
Dense(len(chars), activation='softmax')
])
生成过程:
  • 输入种子文本(如"the philosophy of")
  • 模型输出下一个字符的概率分布
  • 根据概率采样一个字符
  • 把新字符加入输入,重复
温度(Temperature)的魔法:
采样时不是直接用模型输出的概率,而是用温度来调节:
温度 T
效果
比喻
T → 0
只选最高概率(贪婪)
冰冻的水:稳定但无趣
T = 1
保持原始分布
液态水:正常状态
T → ∞
趋向均匀分布(随机)
沸腾的水:混乱无序
T ∈ [0.5, 1.0]
创造力区间
临界点:既有结构又有惊喜
代码实现:
def sample(preds, temperature=1.0):
preds = np.asarray(preds).astype('float64')
preds = np.log(preds) / temperature  # 温度调节
exp_preds = np.exp(preds)
preds = exppreds / np.sum(exppreds)  # 重新归一化
probas = np.random.multinomial(1, preds, 1)  # 掷骰子
return np.argmax(probas)
一句话总结:文本生成就是不断掷一个被"温度"调节过的骰子。
2.5 本章小结:LSTM的流形视角
概念
传统解释
流形视角
RNN梯度消失
矩阵连乘导致梯度衰减
流形在时间维度被过度压缩/拉伸
细胞状态
长期记忆存储
时间流形上的"保护通道"
门控机制
控制信息流
选择性地变形或保持流形结构
LSTM vs ResNet
都用跳跃连接
都在保护流形不被撕裂
温度采样
控制随机性
调节输出分布的熵(混乱程度)
一句话总结:LSTM是时间维度的ResNet。它通过细胞状态这条"传送带",让信息能够跨越长时间尺度无损传递,保护时间流形不被压缩变形。
PART 03
章:VAE——把图像压缩成一片云
3.1 传统自编码器(AE)的缺陷
自编码器(Autoencoder)的想法很简单:把图片压缩成一个短向量(编码),再还原回去(解码)。
问题:传统AE学到的潜在空间是不连续的。
比如:数字"1"被编码在点A,数字"7"被编码在点B。只有A和B这两个点是有意义的。如果你在A和B之间取一个点C,解码出来可能是一团乱码,而不是"像1又像7"的数字。
流形视角:传统AE只是死记硬背了几个孤立的点,没有学会流形的连续结构。
3.2 VAE:从"点"到"分布"的飞跃
变分自编码器(VAE)说:不要把图片编码成一个死板的点,而要编码成一个概率分布(高斯云)。
输入:一张人脸图片
编码器输出:(均值)和 (方差)
采样:从 中随机采样一个
解码:把 还原成图片
直觉:
  • 传统AE:这张图的坐标是
  • VAE:这张图大概在 附近,方差是 的范围内
这样做的好处是强迫潜在空间变得平滑。因为是随机采样的,模型被迫学会:在附近的任何点,解码出来都必须像这人脸。
这样,点与点之间的空隙被填满了,流形变得连续了。
3.3 重参数化技巧:让随机变得可导
我们在网络中间搞了个随机采样:。
问题:随机过程是不可导的,反向传播怎么过?梯度怎么传给编码器?
神来之笔:重参数化技巧(Reparameterization Trick)
把随机性从网络路径中"剥离"出来:
:来自外部的随机噪声(不参与求导)
:网络的输出(可以求导)
这样,梯度就可以顺着 和 毫无阻碍地传回编码器了。
3.4 损失函数:除了像,还要乱
VAE的损失函数包含两部分:
  • 重构损失 ():解码出来的图要像原图(让流形准确)
  • KL散度 ():预测的分布要接近标准正态分布 (让流形平滑、紧凑)
对抗与平衡:
如果没有KL损失:VAE退化成普通AE,分布会极其尖锐(方差),退化成点。
KL损失强迫所有分布都向原点靠拢,并保持一定的"蓬松度"(方差不能太小)。
3.5 概念向量:在潜在空间里做算术
既然潜在空间是连续且有结构的,我们就可以在里面做向量运算。
微笑向量:
  • 找一堆"笑脸"图片,算出它们的潜在向量平均值
  • 找一堆"不笑"图片,算出平均值
  • 微笑方向向量:
图像编辑:
拿一张不笑的图 ,编码得到 。
解码 ,你就得到了一张同样的人,但正在笑的图片。
流形视角:我们在流形上沿着"微笑"这个测地线方向移动。因为流形是连续平滑的,这种移动会产生自然的渐变效果。
3.6 本章小结:VAE的流形视角
概念
传统视角
流形视角
传统AE
压缩重构
学习离散的流形采样点
VAE
生成模型
学习流形的连续概率密度函数
重参数化
解决采样不可导
把随机性作为外部输入,保持梯度流形通道畅通
KL散度
正则化
强迫流形变得紧凑、平滑,无空洞
概念向量
特征算术
流形上的切向量方向
一句话总结:VAE通过引入随机性和KL正则化,强迫扭曲的数据流形变成一个标准、平滑、无空洞的高斯流形,从而实现了连续的图像生成和编辑。
PART 04
章:GAN——两个玩家的零和博弈
4.1 GAN的直觉:伪造者与鉴定师
想象一个场景:
  • 伪造者(Generator):试图伪造毕加索的画
  • 鉴定师(Discriminator):试图分辨真画和赝品
一开始伪造者画得很烂,鉴定师一眼就能看穿。但伪造者不断学习鉴定师的反馈,技术越来越好。与此同时,鉴定师也不断提高标准。
最终结果:伪造者画得以假乱真,鉴定师只能瞎猜(50%概率)。
这就是GAN的核心:两个网络互相博弈,最终达到纳什均衡。
4.2 数学形式化:Minimax博弈
GAN的目标函数是一个极小极大博弈:
判别器D想最大化这个值:对真图输出接近1,对假图输出接近0
生成器G想最小化这个值:让判别器对假图也输出接近1(骗过它)
训练流程:
  • 固定G,训练D几步(让D变聪明)
  • 固定D,训练G几步(让G更会骗)
  • 重复,直到平衡
4.3 Goodfellow的定理:GAN在最小化JS散度
原论文中有一个漂亮的数学证明。
第一步:求最优判别器
固定生成器G,什么样的D是最优的?对目标函数求导,令导数为0:
直觉:如果某个点处,真实数据概率远大于生成数据概率,(这肯定是真的);如果两者相等,(只能瞎猜)。
第二步:代回原式
把最优判别器代回目标函数,经过一番推导:
其中 是 Jensen-Shannon散度,衡量两个分布的"距离"。
结论:
4.4 为什么GAN训练这么难?流形不重叠问题
理论很美,实践很惨。GAN以"难训练"著称。为什么?
问题根源:在高维空间里,两个随机初始化的流形几乎不可能重叠。
想象两条曲线在三维空间里随机画,它们相交的概率接近于0。
JS散度的致命缺陷:当两个分布完全不重叠时,JS散度恒等于 (常数),梯度为0!
  • 判别器轻松区分真假()
  • 生成器拿不到有用的梯度
  • 训练卡死
流形视角:JS散度只能告诉你"两个流形有没有交集",但无法告诉你"离得有多远"。
4.5 WGAN:换一把标尺——推土机距离
2017年,Arjovsky等人提出了Wasserstein GAN (WGAN),用Wasserstein距离(又称推土机距离/Earth Mover's Distance)替代JS散度。
直觉:把分布看成一堆土,把看成一个坑。要把土全部推进坑里,最小的"土方量 × 距离"是多少?
优势:哪怕两个流形完全不重叠,Wasserstein距离也能告诉你"还差多远"——提供持续有效的梯度!
4.6 Kantorovich-Rubinstein对偶性
直接计算Wasserstein距离需要穷举所有"搬土方案",太慢了。
数学家用对偶性把它变成可训练的形式:
这里的就是判别器(Critic),但有一个约束:1-Lipschitz连续(函数的斜率处处不超过1)。
实现方式:
  • 权重裁剪(Weight Clipping):强行把权重限制在范围内
  • 梯度惩罚(Gradient Penalty):在损失函数中加入梯度范数的惩罚项(WGAN-GP)
4.7 GAN vs VAE:清晰度 vs 平滑性
特性
VAE
GAN
生成质量
模糊但稳定
清晰但不稳定
潜在空间
平滑、连续、有结构
可能不连续、有空洞
训练难度
相对简单
极其困难(模式崩塌、不收敛)
适用场景
图像编辑、插值
写实图像生成
数学目标
最大化变分下界 (ELBO)
最小化分布距离 (JS/Wasserstein)
流形视角:
  • VAE:学习一个平滑但模糊的流形近似
  • GAN:学习流形上极其尖锐、逼真的采样点,但点与点之间可能断裂
4.8 本章小结:GAN的流形视角
概念
传统视角
流形视角
Generator
噪声→图像的映射
从简单流形(高斯)到复杂流形(图像)的变换
Discriminator
真假二分类器
测量两个流形重叠程度的探测器
JS散度
分布距离
无法感知不重叠流形之间的几何距离
Wasserstein距离
推土机距离
测量流形之间的真正几何距离
纳什均衡
博弈平衡点
生成流形与真实流形完全重合
模式崩塌
生成器只输出几种图
流形退化成几个孤立点
一句话总结:GAN是一场发生在高维流形空间里的博弈。生成器试图把一个简单流形(高斯噪声)变形成复杂的数据流形;判别器充当裁判,测量两个流形的距离。当距离为0时,博弈结束,生成流形与真实流形完美重合。
PART 05
章:风格迁移与DeepDream——特征流形的"盗梦空间"
5.1 DeepDream:让神经网络"做梦"
平时训练CNN是:固定输入图片,修改网络权重(让损失变小)。
DeepDream反其道而行之:固定网络权重,修改输入图片(让神经元激活变大)。
原理:
  • 选定CNN某一层(比如检测"狗头"的层)
  • 把这一层的激活值作为损失函数:
  • 对输入图片做梯度上升(Gradient Ascent):
(注意是加号,因为要最大化激活)
效果:这就像你在看天上的云。你觉得某朵云有点像狗,你就强行把它想象成狗,脑补出眼睛、鼻子,直到它真的变成一只狗。
流形视角:我们在输入空间中游走,寻找那些能让CNN特定神经元"极其兴奋"的流形区域(即DeepDream图像)。
5.2 风格迁移:数学定义的艺术伪造
如何把一张照片画成梵高的《星夜》?我们需要把图片拆解为两部分:
  • 内容(Content):房子在哪,河在哪(宏观结构)
  • 风格(Style):笔触、纹理、色调(微观统计量)
Gatys的发现:CNN不仅能提取内容,还能提取风格。
内容损失 ()
直接比较高层特征图的差异(MSE Loss)。如果两张图在高层看来差不多,那它们的内容就是一样的。
风格损失 ()
最难的是"风格"怎么数学化?
Gatys定义:风格 = 特征之间的相关性(Correlation)。
引入Gram矩阵(Gram Matrix):
设特征图 的形状是 ,把空间维度展平得到 。
表示第 个通道和第 个通道同时激活的程度。
物理意义:它扔掉了空间信息(H, W被求和消掉了),只保留了通道间的关系。
比如:"垂直纹理卷积核"和"黄色卷积核"总是同时激活 → "黄色垂直条纹"风格。
5.3 为什么风格迁移看起来"粗糙"?
风格迁移生成的图,乍一看很像梵高,但仔细看细节往往不如人意。
流形视角:
Gram矩阵只统计了二阶统计量(两两相关性)。它捕捉了纹理(Texture),但捕捉不到更高级的语义风格。
它能模仿梵高的"笔触质感",但模仿不了梵高的"构图灵魂"。
真正的艺术风格是一个极高维、极复杂的流形分布,仅靠二阶Gram矩阵只能逼近它的一个低阶投影。
5.4 梯度上升的统一视角
无论是DeepDream还是风格迁移,本质上都是关于输入 的优化问题:
我们不再训练网络参数,而是把像素值 当作参数来训练。
这是一场在像素流形上的搜索:
  • 一只手拉着你往"照片内容"跑
  • 另一只手拉着你往"梵高风格"跑
  • 最终你停在了一个既像照片又像梵高画的平衡点上
5.5 本章小结:特征流形的操控术
技术
目标函数
修改对象
流形视角
训练CNN
分类损失
权重
学习流形的展平变换
DeepDream
神经元激活
输入
在流形上寻找让神经元最兴奋的点
风格迁移
内容损失 + 风格损失
输入
在流形交界处寻找平衡点
Gram矩阵
特征相关性
-
风格流形的二阶统计描述
一句话总结:风格迁移证明了,通过操纵特征空间(Feature Space)并利用Gram矩阵这种统计工具,我们可以把图像的"内容"和"风格"解耦,并重新组合,创造出一种全新的视觉体验。
PART 06
章:数据增强——给流形穿上厚衣服
6.1 问题:数据流形太"薄"
假设你只有1000张猫的图片,虽然它们代表了"猫"这个流形,但覆盖范围太小了:
  • 可能都是正面照,没有侧面
  • 可能都是白天,没有夜晚
  • 可能都是站着,没有躺着
流形视角:你的数据只是一张薄薄的膜,覆盖了流形的一小块区域。模型容易过拟合到这张薄膜上,泛化能力很差。
6.2 数据增强:人为"加厚"流形
核心思想:通过变换,人为在已有数据点周围采样更多点,把薄膜"吹成气球"。
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=40,      # 随机旋转 ±40°
widthshiftrange=0.2,  # 水平平移 20%
heightshiftrange=0.2, # 垂直平移 20%
shear_range=0.2,        # 剪切变换
zoom_range=0.2,         # 随机缩放
horizontal_flip=True,   # 水平翻转
fill_mode='nearest')
直觉:原来只有一张猫的正面照。现在我们给它:
  • 旋转15° → 仍然是猫
  • 放大1.1倍 → 仍然是猫
  • 水平翻转 → 仍然是猫
每一个变换都在"猫"这个流形附近生成了一个新点。大量变换后,原本孤立的点变成了一小团"云"。
6.3 流形的几何视角:变换群
什么样的变换是"合法"的?即变换后仍然是同一类别。
群论视角:这些变换构成一个变换群。
  • 平移群:所有平移操作
  • 旋转群SO(2):所有二维旋转
  • 欧氏群SE(2):平移 + 旋转
数据增强就是在说:我认为"猫"这个类别对这些变换是不变的。
  • 猫翻转还是猫 ✓
  • 猫旋转还是猫 ✓
  • 猫变成狗 ✗
通过在变换群的作用下生成新样本,我们人为地告诉模型:"这些点都应该被映射到同一个类别。"
6.4 G-CNN vs 数据增强:硬编码 vs 数据驱动
有两种方式让模型学会对变换不变:
方法
思路
优点
缺点
数据增强
用更多数据"淹没"模型
简单、通用
计算量大、间接
G-CNN
把不变性写进网络结构
精确、高效
复杂、适用范围窄
G-CNN的原理:
  • 普通卷积核只在x-y方向滑动
  • G-CNN的卷积核同时旋转,在离散旋转角度(如0°, 45°, 90°...)上都做卷积
  • 这样网络天然具备旋转等变性
为什么G-CNN没有大规模应用?
6.5 Bitter Lesson:苦涩的教训
2019年,Sutton发表了著名的文章《The Bitter Lesson》:
翻译成流形语言:
  • 精巧方法(G-CNN):我精心设计网络结构,让它"天生"理解旋转
  • 暴力方法(数据增强):我不管那么多,直接给它看几百万张各种角度的图
现实:当GPU算力足够、数据足够多时,暴力方法往往更容易扩展、效果更好。
这就是为什么:
  • Transformer战胜了各种精心设计的递归结构
  • GPT用简单的下一个词预测战胜了各种复杂的语言模型
  • 生成式AI宁可用几十亿参数的通用模型,也不愿用小而精的专用模型
6.6 Dropout:另一种"加厚"流形的方式
除了输入端的数据增强,还可以在网络内部制造随机性。
model.add(layers.Dropout(0.5))  # 随机关掉50%的神经元
直觉:每次训练时,随机"杀死"一部分神经元。网络被迫学会:即使缺了一些脑细胞,也能正确分类。
流形视角:Dropout迫使网络学习冗余表征。
  • 原来:"猫"的信息存在特定的10个神经元里
  • Dropout后:"猫"的信息分散在100个神经元里,任意删掉一半仍然能识别
这就像把一根细线换成粗麻绳——更难被扯断。
6.7 本章小结:增厚流形的三种方式
方法
作用位置
流形视角
数据增强
输入端
在流形表面密集采样,增加覆盖度
Dropout
网络内部
迫使表征冗余化,增加鲁棒性
G-CNN
网络结构
硬编码对称性,直接在流形上施加约束
一句话总结:数据增强的本质是在流形附近进行密集采样,把"薄膜"变成"厚垫",让模型更难过拟合,更容易泛化。但在算力充足的时代,简单粗暴的数据增强往往比精巧的结构设计更有效——这就是"Bitter Lesson"。
PART 07
章:注意力机制——从固定拓扑到动态连接
7.1 CNN和RNN的局限:固定的"几何假设"
回顾一下CNN和RNN的核心假设:
模型
假设
局限
CNN
局部性 + 平移不变性
只能看到固定大小的邻域(感受野)
RNN
序列性(从左到右)
长距离依赖困难,串行计算慢
问题:如果"大象"这个词出现在句子开头,"红色的"在句子末尾,RNN要把信息传递很远才能建立关联。
流形视角:CNN和RNN假设数据流形具有固定的拓扑结构(空间邻近或时间顺序)。但语言的语义关系不遵循这种简单拓扑——"大象"和"红色的"在语义上紧密相关,即使它们在句子中相隔很远。
7.2 注意力机制:让网络自己决定"看哪里"
核心思想:不要预设固定的连接模式,让网络动态地决定每个位置应该关注哪些其他位置。
自注意力(Self-Attention)公式:
Q (Query):当前位置的"提问" —— "我在找什么?"
K (Key):所有位置的"标签" —— "我是什么?"
V (Value):所有位置的"内容" —— "如果你选我,给你这些信息"
直觉:
  • 用Q和每个K做点积,得到"相关性分数"
  • Softmax归一化,变成权重(加起来=1)
  • 用权重对V加权求和 → 得到融合了全局信息的输出
7.3 为什么要除以 ?
当维度很大时,点积的值会很大(因为是很多项相加)。
如果点积太大,Softmax会变得极其尖锐(只关注一个位置),梯度几乎为0。
除以是为了让点积的方差保持在合理范围,稳定Softmax的温度。
7.4 多头注意力:从不同角度看问题
一个注意力头只能学一种"关注模式"。多头注意力(Multi-Head Attention)让网络同时学习多种模式:
每个头有自己的投影矩阵,学习不同的"提问方式"。
直觉:
  • 头1:学习"语法关系"(主语-谓语)
  • 头2:学习"指代关系"(他-小明)
  • 头3:学习"修饰关系"(红色的-耳朵)
7.5 Transformer:纯注意力架构
2017年,Vaswani等人提出了Transformer,核心创新是:完全抛弃RNN和CNN,只用注意力。
架构:
输入嵌入 + 位置编码
[Multi-Head Self-Attention + Add&Norm]  ← 重复N次
[Feed-Forward + Add&Norm]
输出
关键组件:
  • 位置编码:因为没有了RNN的顺序性,需要显式告诉模型"这是第几个词"
  • 残差连接:又见老朋友!保护梯度流动
  • Layer Norm:稳定训练
7.6 CNN vs RNN vs Transformer:拓扑结构对比
模型
连接模式
拓扑假设
流形视角
CNN
固定邻域(卷积核)
空间局部性
假设流形是欧几里得空间
RNN
串行(时间链条)
时间顺序性
假设流形是一维流形(链)
Transformer
全连接(动态权重)
无固定假设
假设流形是任意图结构
流形视角:
  • CNN把输入当作欧氏空间上的函数
  • RNN把输入当作时间轴上的链条
  • Transformer把输入当作语义拓扑空间上的节点集合,节点之间的"距离"由注意力动态确定
这就是为什么Transformer能处理:
  • 长距离依赖(不需要一步步传递)
  • 并行计算(不需要串行)
  • 复杂的语义关系(动态构建任意连接)
7.7 "大象红色耳朵"问题
假设句子是:"The elephant has red ears."
RNN视角:
elephant → has → red → ears
信息需要经过4步传递
long-range dependency困难
Transformer视角:
"ears"直接Query所有词:"谁和我有关?"
"red"的Key和"ears"的Query高度匹配 → 高权重
"elephant"的Key也和"ears"匹配 → 建立关联
一步完成所有语义连接
7.8 本章小结:从几何到语义的飞跃
概念
传统视角
流形视角
CNN
局部特征提取
在欧氏流形上的固定窗口操作
RNN
序列建模
在一维时间流形上的串行传递
Self-Attention
全局关系建模
在语义流形上动态构建拓扑
Q, K, V
查询/键/值
语义空间中的坐标变换
缩放
防止梯度消失
控制Softmax的温度
一句话总结:Transformer抛弃了CNN和RNN对数据拓扑的固定假设,用注意力机制让网络自己学习"什么和什么相关"。这使得它能在语义流形上灵活操作,而不受物理空间或时间顺序的束缚。
PART 08
章:端到端学习——从手工特征到自动发现
8.1 传统机器学习的流水线
在深度学习之前,机器学习工程师的日常是这样的:
原始数据 → 手工特征提取 → 特征选择 → 分类器训练 → 预测
(SIFT, HOG...)   (PCA...)   (SVM, RF...)
痛点:
  • 手工特征需要领域专家设计(费人)
  • 特征可能不是最优的(局限)
  • 每个环节独立优化,无法全局协调(割裂)
8.2 端到端(End-to-End)的革命
深度学习说:把所有环节连成一条线,让梯度一路反向传播到底。
原始数据 → [神经网络(自动学习特征和分类)] → 预测
梯度一路传回来
核心思想:不预设任何中间表示。让损失函数直接驱动整个系统一起优化。
流形视角:
  • 传统方法:人为设计流形的中间站(特征空间),再逐段平铺
  • 端到端:让网络自己学习流形的最佳展开方式,不设中间站
8.3 Keras的设计哲学
Keras的设计完美体现了端到端思想:
model = Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(xtrain, ytrain, epochs=5)
一条龙服务:
  • 定义计算图(前向传播)
  • 自动求导(反向传播)
  • 优化更新(SGD/Adam)
你只需要定义"从输入到输出长什么样",剩下的Keras全包了。
8.4 端到端的成功案例
任务
传统流水线
端到端方案
语音识别
音频→MFCC→HMM→文字
音频→Wav2Vec→文字
机器翻译
分词→对齐→语言模型
Seq2Seq/Transformer
自动驾驶
感知→规划→控制
图像→端到端神经网络→控制指令
围棋
棋谱特征→规则搜索
棋盘→AlphaGo→落子
结论:越来越多的领域,端到端方案在性能上碾压了传统流水线。
8.5 端到端的代价
天下没有免费的午餐:
优点
缺点
全局最优(理论上)
需要大量数据
自动特征学习
可解释性差(黑盒)
简化工程流程
调试困难(哪里出了问题?)
流形视角:端到端学习把整个流形展平的任务完全交给数据驱动。如果数据不够或有偏,学到的流形可能是扭曲的。
PART 09
章:Turbo码与现代AI——殊途同归的信息论
9.1 一个跨领域的惊人直觉
你之前提到过一个精彩的类比:
这和现代AI中的很多技术惊人地相似!
9.2 Turbo码简介
1993年,Turbo码震惊了通信界——它逼近了香农极限。
核心结构:
输入 → 编码器1 →
↘ 交织器(Interleaver) → 编码器2 → 输出
解码过程:
  • 解码器1给出"软信息"(概率,不是硬判决)
  • 软信息传给解码器2
  • 解码器2给出自己的软信息回传给解码器1
  • 迭代,直到收敛
关键要素:
  • 两个域:原始顺序 + 交织后的顺序
  • 软信息:概率而非0/1
  • 迭代交换:信息在两个域间流动
  • 收敛:最终达到一致
9.3 对比学习(Contrastive Learning):AI版的Turbo码
SimCLR/MoCo等自监督学习方法:
同一张图 → 增强变换1 → 编码器 → 特征1
→ 增强变换2 → 编码器 → 特征2
目标:特征1和特征2应该相似(正样本对)
特征1和其他图的特征应该不同(负样本对)
Turbo码的回响:
Turbo码
对比学习
两个编码器
两个增强视图
软信息交换
特征空间对齐
迭代收敛
训练收敛
逼近香农极限
逼近有监督性能
9.4 CycleGAN的循环一致性
CycleGAN在没有配对数据的情况下做图像翻译(马→斑马):
马图 → GAB → 斑马图 → GBA → 重建马图
Cycle Consistency: 重建马图 ≈ 原马图
Turbo码的回响:
  • 两个域:马的域 + 斑马的域
  • 双向变换:GAB和GBA
  • 循环一致性:信息往返后保持不变
  • 收敛:两个生成器达成一致
9.5 Diffusion模型:迭代去噪
扩散模型(Diffusion)也有类似结构:
干净图 → 加噪声(T步)→ 纯噪声
纯噪声 → 去噪(T步)→ 干净图
每一步去噪都是"软"的——不是直接预测原图,而是预测噪声的方向并小步修正。
Turbo码的回响:
  • 迭代过程:小步前进,逐步收敛
  • 软信息:每步的修正是概率性的
  • 最终收敛:从纯噪声还原出清晰图像
9.6 统一视角:信息论的胜利
这些看似不同的技术,都在做同一件事:
技术
域1
域2
迭代机制
Turbo码
原始序列
交织序列
软信息来回传递
对比学习
视图1
视图2
特征对齐
CycleGAN
域A
域B
循环一致性
Diffusion
噪声空间
图像空间
逐步去噪
GAN
生成器
判别器
博弈迭代
流形视角:这些方法都在用迭代的方式,让两个流形逐渐对齐、融合或变换。
PART 10
结语:压缩即智能,流形即本质
我们用流形视角走完了整本《Python深度学习》的核心内容:
章节
核心洞察
CNN
空间流形的局部展平机
LSTM
时间流形的传送带
VAE
把流形压缩成标准高斯云
GAN
用博弈对齐两个流形
风格迁移
在内容流形和风格流形的交界处搜索
数据增强
给流形穿上厚衣服
Transformer
在语义流形上动态构建拓扑
端到端
让流形自己找最佳展开方式
Turbo码/对比学习
两个域的软信息迭代收敛
一个哲学式的总结:
感谢阅读!
如果这篇文章对你有帮助,欢迎转发给更多对深度学习感兴趣的朋友。
有问题可以在评论区留言,我会一一回复。
本文基于 François Chollet《Deep Learning with Python》整理,加入了大量流形视角的解读和跨学科联想。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 15:14:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/470431.html
  2. 运行时间 : 0.102968s [ 吞吐率:9.71req/s ] 内存消耗:4,690.32kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=07adf80df7bad44e391af915d93d0c30
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000864s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000840s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000343s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000234s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000522s ]
  6. SELECT * FROM `set` [ RunTime:0.000181s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000594s ]
  8. SELECT * FROM `article` WHERE `id` = 470431 LIMIT 1 [ RunTime:0.000610s ]
  9. UPDATE `article` SET `lasttime` = 1770448498 WHERE `id` = 470431 [ RunTime:0.003108s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000264s ]
  11. SELECT * FROM `article` WHERE `id` < 470431 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000504s ]
  12. SELECT * FROM `article` WHERE `id` > 470431 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000403s ]
  13. SELECT * FROM `article` WHERE `id` < 470431 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001087s ]
  14. SELECT * FROM `article` WHERE `id` < 470431 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006428s ]
  15. SELECT * FROM `article` WHERE `id` < 470431 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004440s ]
0.104556s