神经网络入门 · 最容易卡住的一步

输入参数的升维
从数字到独热向量

西瓜重量是数字,颜色却是「青绿 / 乌黑」。颜色怎么乘权重?
权重为什么也要从一个数字,变成一排数字?

向下滑动
第一步 · 标量世界

先从最简单的:一个数字进,一个数字出

1 用重量猜甜度

假设只看西瓜重量来猜「好瓜分数」。重量是一个实数,比如:

x₁ = 3.5(千克)——这叫标量(scalar),就是一个单独的数字。

y = w₁ · x₁ + b
w₁ 也是标量,比如 0.5  |  b 是偏置,比如 −0.2

2 算一遍就懂

代入:

1 y = 0.5 × 3.5 + (−0.2) = 1.55

这里一切都很直观:数字 × 数字 = 数字。教科书举例几乎总从这里开始,因为最好懂。

记住这一幕:标量输入时,权重也是标量。维度是匹配的——都是「1 维」。
第二步 · 分类困境

挑好西瓜时,输入往往不是数字

1 真正用到的特征

现实里挑西瓜,常看这些类别特征(categorical):

特征可能取值个数
颜色 x₁青绿、乌黑、浅白3
根蒂 x₂蜷缩、稍蜷、坚硬3
纹理 x₃清晰、稍糊、模糊3

问题来了:「乌黑」× 0.5 等于什么?字符串不能直接乘数字。

2 错误直觉:给类别编号

有人会想:青绿=1,乌黑=2,浅白=3。然后算 y = w · 2。

这很危险——模型会以为「浅白(3) 比乌黑(2) 大」,好像颜色有大小顺序。但青绿和乌黑之间没有数值大小关系,只是不同类别。

❌ 直接编号

乌黑=2、浅白=3
暗示 3 > 2,引入假顺序

✓ 独热编码

每个取值占一格
只有「是 / 否」,无假大小

第三步 · 独热升维

把「一个词」变成「一排 0/1」

1 独热编码(One-Hot)

颜色有 3 种取值 → 用长度为 3 的向量表示。哪一种出现,对应位置写 1,其余写 0

青绿
1青绿
0乌黑
0浅白
乌黑
0青绿
1乌黑
0浅白
浅白
0青绿
0乌黑
1浅白

升维前

x₁ = 「乌黑」
无法计算

独热编码

升维后

x₁ = [0, 1, 0]
3 维向量

核心洞察

原来「一个特征名 x₁」对应的是 1 个槽位;升维后,同一个特征名对应 K 个槽位(K = 类别数)。这就是输入参数的升维。

2 三个特征一起升维

假设一只瓜:颜色=乌黑,根蒂=蜷缩,纹理=模糊:

x₁ 颜色
0青绿
1乌黑
0浅白
= [0, 1, 0]
x₂ 根蒂
1蜷缩
0稍蜷
0坚硬
= [1, 0, 0]
x₃ 纹理
0清晰
0稍糊
1模糊
= [0, 0, 1]
第四步 · 权重升维

输入变 3 维了,权重也必须跟着变

1 初学者最常卡住的地方

标量时代:

y = w₁ · x₁
两边都是数字,直接相乘

现在 x₁ = [0, 1, 0] 是向量。若 w₁ 仍是单个数字,维度对不上——没法做点乘(Dot Product)。

2 权重升维成同长度向量

颜色特征的权重也变成 3 个数,每个取值各有一个「好瓜贡献分」:

w₁
0.8青绿
1.2乌黑
−0.3浅白

读作:模型认为「乌黑」最加分,「浅白」反而减分。

w₁ · x₁ = [0.8, 1.2, −0.3] · [0, 1, 0]
维度匹配:3 维 · 3 维 → 得到 1 个标量
一句话:输入升维到几维,对应那一块权重也必须升维到几维。匹配,才能点乘。
第五步 · 点乘怎么算

升维之后,参数到底怎么算?

1 点乘的定义(先背一句)

两个同长度向量逐位相乘,再全部加起来:

a · b = a₁b₁ + a₂b₂ + a₃b₃

2 例 A:只算颜色(乌黑)

x₁ = [0, 1, 0],w₁ = [0.8, 1.2, −0.3]

1 0.8×0 + 1.2×1 + (−0.3)×0
2 0 + 1.2 + 0 = 1.2

独热的妙处

因为只有一个位置是 1,点乘结果直接等于被选中那个类别的权重。乌黑被选中 → 贡献就是 w乌黑 = 1.2。

3 例 B:换一种颜色(青绿)

x₁ = [1, 0, 0],同样的 w₁:

1 0.8×1 + 1.2×0 + (−0.3)×0 = 0.8

同一套权重,换输入,分数从 1.2 变成 0.8——模型在学「哪种颜色更像好瓜」。

4 例 C:三个特征一起算

给每块特征各一组权重(数字是举例,真实值由训练学出来):

特征权重向量输入(独热)点乘贡献
颜色 [0.8, 1.2, −0.3] [0, 1, 0] 乌黑 1.2
根蒂 [1.5, 0.4, −1.0] [1, 0, 0] 蜷缩 1.5
纹理 [1.0, 0.2, −0.8] [0, 0, 1] 模糊 −0.8
y = w₁·x₁ + w₂·x₂ + w₃·x₃ + b
= 1.2 + 1.5 + (−0.8) + (−0.1) = 1.8

5 例 D:拼成一条大向量(更像真实代码)

工程里常把所有独热拼在一起,变成一个 9 维输入:

颜色(3) · 根蒂(3) · 纹理(3)

x = [0, 1, 0,   1, 0, 0,   0, 0, 1]

权重也拼成 9 维:

w = [0.8, 1.2, −0.3,   1.5, 0.4, −1.0,   1.0, 0.2, −0.8]

Σ y = w · x + b = 1.2 + 1.5 − 0.8 − 0.1 = 1.8

和分块点乘再相加,数学上完全一样——只是写法更紧凑。

6 例 E:和标量特征混用

若再加上重量 x₄ = 3.5(标量),总公式变成:

y = w·x + w·x + w·x + w₄·3.5 + b

分类特征走向量点乘,数值特征走普通乘法,最后全部加起来。神经网络第一层就是在做这件事。

输入升维

类别 → 独热向量

权重匹配

每个取值一个可学习参数

点乘求和

选出被激活的权重再累加

第六步 · 动手试

互动:挑一只瓜,看升维与点乘

你可以试试:点选颜色 / 根蒂 / 纹理,拖动各类别权重,观察独热向量与最终分数如何变化。

拼接后的 9 维输入向量 x
好瓜分数 y = w · x + b
0.00
总结

从标量过渡到多维,记住四句话

标量最直观

数字特征:y = w·x + b,两边都是单个数字。

类别要升维

用独热编码:K 个取值 → K 维 0/1 向量,避免假顺序。

权重跟着升

输入几维,对应权重就几维,才能做点乘。

独热点乘很简单

结果等于「被选中那个类别」的权重;多特征再相加即可。

y = Σᵢ (wᵢ · xᵢ) + b
xᵢ 是升维后的向量,wᵢ 是同维权重。
神经网络的第一层,本质上就是「升维后的加权求和」。
相关阅读:权重如何通过误差被更新,见 《通俗理解梯度下降》;完整线性模型见 《线性回归详解》
返回首页