MLP 小课堂AI FOR KIDS
CLASS 01 · 约 15 分钟

加权求和

神经网络每天做的事,其实和老师算总分差不多: 把几个数乘上各自的份量,再全部加起来。 这一课我们从一张成绩单出发,把这件事彻底玩明白。

01

一张成绩表

先认识十位同学。点任意一行,看看他的总分和平均分。

姓名 语文 数学 英语
小明859288
小红907895
乐乐728870
甜甜958290
阿强689965
朵朵889092
浩浩768580
小美937086
天天809478
果果988891
小明
265
总分
88.33
平均分

小提示:点表格里的名字,或者用键盘 Tab 选中后按 Enter。

02

总分和平均分

加法大家都熟。平均分,就是先加再平分。

总分

总分 = 语文 + 数学 + 英语

平均分

平均分 = 总分3 = 语文 + 数学 + 英语3

三门课一样重要,所以直接除以 3。可以理解成:每门课各占 1/3 的份量。

让分数走一遍

三科成绩85 · 92 · 88
+
总分265
÷3
平均分88.33

框图里的箭头,就是数据流动的方向。

用 Python 写出来

score1 = float(input("语文成绩:"))
score2 = float(input("数学成绩:"))
score3 = float(input("英语成绩:"))

score_sum = score1 + score2 + score3
score_avg = score_sum / 3

print("总分:", score_sum)
print("平均分:", score_avg)
想一想:如果语文老师说要“多算一点”,平均分还能直接除以 3 吗?
不能了。这就轮到下一节的权重出场。
03

加权平均分

每门课不再一样重要。份量大的科目,对结果影响更大——这个份量就叫权重。

权重表

学科百分比小数
语文35%0.35
数学40%0.40
英语25%0.25

35% 就是 35/100,也就是 0.35。三个权重加起来 = 100% = 1。

加权分 =
语文×0.35 + 数学×0.40 + 英语×0.25

🧪 权重复验室

权重合计 100%

当前同学:小明(回到上面点别的名字可以换人)。分数和权重都可以改。

语文 85 分
数学 92 分
英语 88 分

语文权重 35%
数学权重 40%
英语权重 25%

算出来的式子

简单平均分
88.33
加权平均分
88.55

两种算法只差 0.22 分——现在的权重还挺均衡的。

比一比

简单平均
88.33
加权平均
88.55
试试「只看语文」:加权分立刻变成语文分数。权重就是发言权——谁权重大,谁说了算。

百分比版本

加权分 = 85×35 + 92×40 + 88×25100 = 88.55

记号版本

加权分 = Σi=1n xi × wi

Σ 读作“西格玛”,意思就是“把后面这些东西全部加起来”。神经网络里到处是它。

04

用循环,一步一步加上去

科目变多时,一项一项手写太累。让循环替我们做:每转一圈,就把一项乘积累加进总和。

weights = [0.35, 0.40, 0.25]scores  = [85, 92, 88] weighted_sum = 0for i in range(len(scores)):    weighted_sum = weighted_sum + scores[i] * weights[i] print("加权平均成绩:", weighted_sum)

高亮的那一行,就是这一轮正在执行的代码。

i(第几项)—
scores[i] × weights[i]—
weighted_sum0

点「下一步」,开始第一轮循环。

注意:代码里的 scores[0] 是第 1 项。Python 从 0 开始编号,Scratch 从 1 开始。

05

生活里的加权

成绩单只是开始。只要一件事由几部分组成,而它们的重要性不一样,就会用到加权。

例 1:期末总评

作业 30% · 期中 30% · 期末 40%

作业 80
期中 70
期末 90
直接平均
80.00
加权总评
81.00

期末占 40%,所以期末考得好,总评更占便宜。拖动期末分数试试。

例 2:面试打分

简历 20% · 笔试 30% · 面试 50%。面试权重最高,最能决定结果。

简历筛选
20%
笔试
30%
现场面试
50%
记住这句话:加权求和 = 每一项先乘上它的权重,再全部加起来。神经网络的一颗神经元,做的就是这个。
06

Scratch 和 Python 对照

课上的例子,两种语言都能写。左边看 Scratch,右边看 Python。

基本运算

ScratchPython
加法◖( ) + ( )◗a + b
减法◖( ) − ( )◗a - b
乘法◖( ) × ( )◗a * b
除法◖( ) ÷ ( )◗a / b

Python 里乘号是 *,除号是 /,和数学课上写的不一样。

列表操作

做什么Python
新建列表list = []
加到末尾list.append(123)
删除某一项del list[0]
全部删除list.clear()
插入list.insert(0, 123)
替换list[0] = 123
取出某一项list[0]
查编号list.index(123)
有多少项len(list)
包含吗123 in list

最容易搞错的地方:编号从几开始?

Scratch 说“第 1 项”,Python 里却写作 [0]。点一点,看看对应关系:

Python 写法
list[0]
因为 Python 从 0 开始数,所以要减 1。
第1项第2项第3项
Scratch123
Python012

所以“删除第 1 项”是 del list[0],“第 3 项”是 list[2]。

第一课 · 小测验

← 返回 课程首页 下一课 → 第二课:人工神经元