标量:机器学习中最基础的"数"

发布者:不虚此行 2026-7-16 10:07

背景

机器学习里处理的数据有各种排列形式。有的是单个数字,有的排成一排,有的排成方阵,有的堆成立方体。标量是最简单的一种。

19世纪数学家研究向量和张量时,需要一个词来描述"普通数字"。他们选了scalar(标量)这个词。拉丁语scala是"梯子"或"刻度"的意思,就像温度计上的刻度,只有大小,没有方向。

定义

标量就是一个数字。你能写在纸上的:3、-5.2、0.001、100。它只有大小,没有方向。

数学上怎么写:

小写字母:a, b, x, y

希腊字母:α (alpha), β (beta), λ (lambda)

整数、小数、正数、负数、复数都行

对比其他形式:

向量:一排数字 [1, 2, 3]

矩阵:数字排成表格

张量:更高维度的数组

使用场景

损失函数的输出

训练神经网络时,损失函数吐出来的那个数字就是标量。你训练图像分类模型,最后看到 loss = 0.523,这个0.523就是。

学习率

learning rate 决定参数更新的步长。lr = 0.001,标量。

评估指标

准确率 = 0.95,F1分数 = 0.87,这些都是。

超参数

batch_size = 32,epochs = 100,dropout = 0.5。

物理量和统计量

温度、速度的大小(速度本身是向量,速度大小是标量)、均值、方差、标准差、权重衰减系数、正则化强度。

神经网络的偏置项

每个神经元有一个偏置值b。

优缺点

优点

简单

一个数字,谁都懂。不用考虑维度、形状。

计算快

加减乘除直接算,不像矩阵乘法那么复杂。

省内存

一个标量4字节(float32)或8字节(float64)。

好监控

训练时画损失曲线、准确率曲线,一条线就说清楚了。

好比较

0.9 > 0.8,一眼看出来。两个向量比大小?那就复杂了。

缺点

表达能力弱

只能表示一个维度。物体在三维空间的位置,一个标量不够,要三个(x, y, z)。

没有方向

风速10米/秒,标量能告诉你。但风往哪吹?得用向量。

丢信息

矩阵求和或求平均,得到一个汇总值,但原始数据的空间结构没了。

批量处理慢

1000个数据点,一个个用标量处理,不如直接向量化操作快。

难扩展

问题一复杂,标量处理就笨拙了。按像素处理图片(每个像素值是标量),代码会很长。用矩阵或张量表示整张图,简洁多了。

通俗理解

把数据类型想象成容器。

标量像一个杯子,只能装一份东西。你问"今天多少度?",回答"25度"。

向量像一排杯子:[25, 30, 28] 表示三天的温度。

矩阵像杯子托盘:能装很多排杯子,比如一周七天、每天三个时段的温度。

张量像一摞托盘:存放更高维的数据。

再举个例子。你的银行账户余额:3500元,这是标量。你这个月每天的支出:[50, 120, 80, ...],这是向量。你们全家人每天的支出记录,这是矩阵。

标量就是单个数字,不管来自哪里、去往哪里,就是个实在的量。

代码示例

import numpy as npimport torch# Python中的标量a = 5b = 3.14print(f"a = {a}, 类型: {type(a)}")# NumPy中的标量scalar_np = np.array(42)print(f"NumPy标量: {scalar_np}, 形状: {scalar_np.shape}")# PyTorch中的标量scalar_torch = torch.tensor(3.14)print(f"PyTorch标量: {scalar_torch}, 形状: {scalar_torch.shape}")# 标量运算loss = 0.5learning_rate = 0.01new_loss = loss * (1 - learning_rate)print(f"更新后的loss: {new_loss}")# 从向量到标量的操作vector = np.array([1, 2, 3, 4, 5])mean_value = vector.mean()  # 求平均得到标量print(f"向量的均值(标量): {mean_value}")

标量是机器学习里最基本的数据单位。虽然简单,但深度学习就建在这些基本单位上。

标量 = 一个数字 = 零维数组 = 只有大小没有方向

大家都在看

相关文章