西瓜重量是数字,颜色却是「青绿 / 乌黑」。颜色怎么乘权重?
权重为什么也要从一个数字,变成一排数字?
假设只看西瓜重量来猜「好瓜分数」。重量是一个实数,比如:
x₁ = 3.5(千克)——这叫标量(scalar),就是一个单独的数字。
代入:
这里一切都很直观:数字 × 数字 = 数字。教科书举例几乎总从这里开始,因为最好懂。
现实里挑西瓜,常看这些类别特征(categorical):
| 特征 | 可能取值 | 个数 |
|---|---|---|
| 颜色 x₁ | 青绿、乌黑、浅白 | 3 |
| 根蒂 x₂ | 蜷缩、稍蜷、坚硬 | 3 |
| 纹理 x₃ | 清晰、稍糊、模糊 | 3 |
问题来了:「乌黑」× 0.5 等于什么?字符串不能直接乘数字。
有人会想:青绿=1,乌黑=2,浅白=3。然后算 y = w · 2。
这很危险——模型会以为「浅白(3) 比乌黑(2) 大」,好像颜色有大小顺序。但青绿和乌黑之间没有数值大小关系,只是不同类别。
乌黑=2、浅白=3
暗示 3 > 2,引入假顺序
每个取值占一格
只有「是 / 否」,无假大小
颜色有 3 种取值 → 用长度为 3 的向量表示。哪一种出现,对应位置写 1,其余写 0:
x₁ = 「乌黑」
无法计算
x₁ = [0, 1, 0]
3 维向量
原来「一个特征名 x₁」对应的是 1 个槽位;升维后,同一个特征名对应 K 个槽位(K = 类别数)。这就是输入参数的升维。
假设一只瓜:颜色=乌黑,根蒂=蜷缩,纹理=模糊:
标量时代:
现在 x₁ = [0, 1, 0] 是向量。若 w₁ 仍是单个数字,维度对不上——没法做点乘(Dot Product)。
颜色特征的权重也变成 3 个数,每个取值各有一个「好瓜贡献分」:
读作:模型认为「乌黑」最加分,「浅白」反而减分。
两个同长度向量逐位相乘,再全部加起来:
x₁ = [0, 1, 0],w₁ = [0.8, 1.2, −0.3]
因为只有一个位置是 1,点乘结果直接等于被选中那个类别的权重。乌黑被选中 → 贡献就是 w乌黑 = 1.2。
x₁ = [1, 0, 0],同样的 w₁:
同一套权重,换输入,分数从 1.2 变成 0.8——模型在学「哪种颜色更像好瓜」。
给每块特征各一组权重(数字是举例,真实值由训练学出来):
| 特征 | 权重向量 | 输入(独热) | 点乘贡献 |
|---|---|---|---|
| 颜色 | [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 |
工程里常把所有独热拼在一起,变成一个 9 维输入:
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]
和分块点乘再相加,数学上完全一样——只是写法更紧凑。
若再加上重量 x₄ = 3.5(标量),总公式变成:
分类特征走向量点乘,数值特征走普通乘法,最后全部加起来。神经网络第一层就是在做这件事。
类别 → 独热向量
每个取值一个可学习参数
选出被激活的权重再累加
你可以试试:点选颜色 / 根蒂 / 纹理,拖动各类别权重,观察独热向量与最终分数如何变化。
数字特征:y = w·x + b,两边都是单个数字。
用独热编码:K 个取值 → K 维 0/1 向量,避免假顺序。
输入几维,对应权重就几维,才能做点乘。
结果等于「被选中那个类别」的权重;多特征再相加即可。