文字、图片、声音……AI到底怎么"看懂"世界的?一篇扫盲文讲透:从人类语言到浮点数的奇幻旅程
你有没有想过一个问题:
当你对AI说:"帮我画一只穿西装的猫",
它真的"看见"了猫?
它真的"理解"了西装?
它真的"知道"什么是可爱?
答案是:不。
AI没有眼睛,没有耳朵,没有意识。
它不会"看"图,也不会"读"字。
它看到的,只有——
一串串数字,全是小数点后的浮点数。
你输入的"文字""图片""语音",
在AI眼里,
都变成了这样:
[0.23, -1.05, 0.89, 0.11, -0.33, 0.77, ……]
[0.41, 0.92, -0.18, 0.66, 0.02, -0.91, ……]
这些数字,就是AI的"世界"。
今天,我们就来一场彻底的AI认知扫盲——
人类眼中的文字、图片、声音,是怎么变成AI能"算"的浮点数的?
🌍 一、AI的世界,没有"字"和"图",只有数字
想象一下,你是一个外星人,第一次来到地球。
你看到人类在纸上画"🐱",听到他们说"猫",
但你不懂这些符号,也不懂这些声音。
你唯一能理解的,是数字。
AI,就是这样的"外星人"。
它不识字、不识图、不识音。
它只认识:
0 和 1 组成的浮点数(float)。
所以,所有输入,必须翻译成数字——
这一步,叫编码(Encoding)。
🧩 第一部分:文字 → 数字:Tokenization 的魔法
你输入:"我喜欢吃苹果"
AI看到的不是这6个字,而是:
[1023, 2045, 3012, 4567]
为什么是4个数字?不是6个?
因为AI用的是分词(Tokenization),不是"一字一码"。
✅ 举个真实例子(使用Llama 3的词表):
| 原始文本 | 分词结果 | 对应Token ID |
|---|---|---|
| 我 | 我 | 1023 |
| 喜欢 | 喜 | 2045 |
| 欢 | 3012 | |
| 吃苹果 | 吃 | 4567 |
| 苹 | 5001 | |
| 果 | 6789 |
→ 最终输入:[1023, 2045, 3012, 4567, 5001, 6789]
💡 为什么不用"一"=1,"喜"=2?
因为"苹果"是一个完整语义单元,拆成"苹"+"果"会丢失意义。
所以AI用BPE算法,把常用词组(如"喜欢""苹果")合并成一个Token,生僻字才拆开。
✅ 然后,这些数字变成向量 —— Embedding
Token ID 只是"编号",AI还不知道它的含义。
于是,它有一个词嵌入矩阵(Embedding Table),
就像一本"数字词典",每一行对应一个Token的"语义向量"。
假设词嵌入维度是 512,那么:
- Token 1023("我") →
[0.12, -0.45, 0.89, ..., 0.33](512个浮点数) - Token 2045("喜") →
[-0.01, 0.77, -0.22, ..., 0.11] - Token 3012("欢") →
[0.33, 0.55, 0.05, ..., -0.44]
最终,整句话变成一个 6×512 的二维浮点数矩阵:
[
[0.12, -0.45, 0.89, ...], ← "我"
[-0.01, 0.77, -0.22, ...], ← "喜"
[0.33, 0.55, 0.05, ...], ← "欢"
[0.21, 0.12, 0.91, ...], ← "吃"
[0.44, -0.33, 0.67, ...], ← "苹"
[0.55, 0.19, -0.11, ...] ← "果"
]
✅ 这就是AI"看到"的文字世界:
一串串浮点数,承载着语义、语法、上下文关系。
🖼️ 第二部分:图片 → 数字:像素就是浮点数
你发一张猫的照片:
AI看到的,不是"一只猫",而是:
一个 224×224×3 的三维浮点数数组
✅ 拆解一下:
| 维度 | 含义 | 示例 |
|---|---|---|
| 224 | 图片高度(像素) | 224行 |
| 224 | 图片宽度(像素) | 每行224个点 |
| 3 | 颜色通道:红、绿、蓝 | 每个像素有3个数值 |
每个像素点,都是一个0~1之间的浮点数:
- 红通道:0.92(很红)
- 绿通道:0.15(很暗)
- 蓝通道:0.08(几乎没蓝)
所以,一个像素 = [0.92, 0.15, 0.08]
一个像素点 → 3个浮点数
整张图 → 224 × 224 × 3 = 150,528 个浮点数
AI把这15万个数字,输入一个叫 CNN(卷积神经网络) 的模块,
它会一层层提取:
- 第一层:边缘、线条
- 第二层:圆圈、纹理
- 第三层:眼睛、耳朵
- 最后一层:判断 → "这是一只猫"(概率 97%)
🌟 所以,AI不是"认出猫",而是:
在15万个浮点数中,找到了和"猫"训练数据最相似的模式。
🔊 第三部分:声音 → 数字:波形采样成浮点序列
你对AI说:"你好"
它听到的,不是"你好"两个字,而是一段声波的数字采样。
✅ 声音是怎么变成数字的?
- 麦克风采集声波 → 连续的模拟信号
- 采样:每秒采样 16,000 次(16kHz)
- 每次采样 → 记录一个-1.0 到 +1.0 之间的浮点数
比如:
0.0 → 静音
0.8 → 大声"嘿"
-0.5 → 低沉的"好"
一段1秒的"你好",可能变成:
[0.01, 0.03, 0.08, 0.15, 0.32, ..., -0.12, -0.05, 0.00]
共 16,000 个浮点数。
AI再用 Transformer 或 CNN 把这些波形,
转换成"音素"(如 /n/ /i/ /h/ /a/),
再组合成文字,最后预测回答。
✅ 所以,AI听你说话,
就像你盯着一条波浪线,
猜它是不是在说"你好"。
🤖 第四部分:统一!所有输入,都变成"向量"
你可能以为:文字、图片、声音,是三种东西。
但在AI眼里,它们都是:
一串浮点数构成的张量(Tensor)
| 输入类型 | 输入形式 | 输出形状 | AI如何处理 |
|---|---|---|---|
| 文字 | Token ID序列 | [6] → [6, 512] | Embedding + Transformer |
| 图片 | RGB像素矩阵 | [224, 224, 3] → [196, 768] | CNN + Vision Transformer |
| 声音 | 波形采样 | [16000] → [100, 512] | 1D CNN / Spectrogram + Transformer |
💡 所有模型,无论叫LLM、Diffusion、Whisper,
最终都只干一件事:
对输入的浮点数张量,做一系列矩阵乘法、加法、激活函数。
它们不"理解"世界,
它们只是在高维空间里,寻找数字之间的统计规律。
🧠 为什么用浮点数?不用整数?
你可能会问:
为什么不用整数?比如"猫"=100,"狗"=101?
因为:
| 问题 | 整数 | 浮点数 |
|---|---|---|
| 表达语义 | 无法表达"相似性" | 可以:猫和狗的向量很近,和汽车很远 |
| 梯度计算 | 无法反向传播 | 浮点数可微,能用梯度下降训练 |
| 精度 | 太粗糙 | 浮点数保留小数,能表达细微差别 |
✅ 浮点数让AI能做:
"king - man + woman ≈ queen"
这种"语义运算"——只有浮点向量才能做到。
🧪 举个真实例子:你输入"猫",AI内部发生了什么?
# 你输入: "猫"
token_id = 8723 # 在词表中查到的编号
# AI查Embedding表:
embedding = embedding_table[8723] # 返回一个512维向量
print(embedding[:5]) # 打印前5个浮点数
# 输出:[0.21, -0.33, 0.88, 0.11, -0.05]
# 这个向量进入Transformer
# 经过Attention、FFN、归一化……
# 最后输出一个新向量
# AI说:"这词和‘狗'很像,和‘动物'更近,和‘汽车'很远"
🔍 你看到的是"猫",
AI看到的是:一个512维空间中的点,
它的位置,是数百万张图、数十亿句话训练出来的。
✅ 总结:AI的"感官"到底是什么?
| 人类感官 | AI的"感官" |
|---|---|
| 眼睛 | 像素矩阵 → 浮点数组 |
| 耳朵 | 声波采样 → 浮点序列 |
| 大脑 | 文字 → Token ID → 浮点向量 |
| 理解 | 数学运算 + 统计模式匹配 |
🚫 AI没有"看见"猫
✅ AI看到的是:224×224×3 的浮点数,和训练数据中最相似的模式🚫 AI没有"听懂"你好
✅ AI听到的是:16000个浮点数,和"你好"语音的波形匹配度最高🚫 AI没有"读懂"我爱你
✅ AI读到的是:[1023, 2045, 3012] → 三个浮点向量,在语义空间里指向"亲密情感"区域
🌟 最后一句话:AI的"世界",是数学的宇宙
你看到的是色彩、语言、旋律。
AI看到的,是一串串浮点数,像银河中的星辰。
它不理解爱,但它知道:
"喜欢"和"爱"在向量空间里靠得很近。
它不理解猫,但它知道:
"猫"和"狗"在图像特征上共享相似的边缘、毛发、眼睛结构。
AI不是在"理解世界",它是在"模拟世界的统计规律"。
而这一切,
都始于一个简单的决定:
把一切,变成数字。
📌 动手实验建议(零基础也能做):
- 打开 Google Colab
- 新建Notebook
- 运行这段代码:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf")
text = "今天天气真好"
tokens = tokenizer.encode(text)
print("Tokens:", tokens)
# 查看第一个token的embedding(需加载模型,可跳过)
# 但你知道:它现在是一个浮点向量了
你输入的每一个字,
都在变成数字。
而你,已经站在了AI世界的门口。
💬 留言区互动:
你有没有想过,AI看到的世界,和你看到的,有多不一样?
欢迎写下你的脑洞👇
#AI科普 #浮点数 #AI如何理解世界 #Tokenization #词嵌入 #图像编码 #AI扫盲 #深度学习入门 #AI原理 #人工智能