← 回到文章

把梯度下降讲给外婆听

445 字 · 1 分钟机器学习科普家人


外婆八十二岁,识字不多,但她会腌最好的萝卜干,知道什么时候下雨。上个月她问我:你每天对着电脑,到底在做什么?

我想了很久。说「训练神经网络」是不行的,说「优化损失函数」更不行。最后我说:外婆,我在教一台机器下山。

山和雾

想象你站在一座山上,起了很浓的雾,你什么都看不见,只能看见自己脚下这一小块地。你想下山,怎么办?

外婆说:那就看哪边往下斜,就往哪边走呗。

对,这就是全部了。这就是梯度下降。机器每一步都摸一摸脚下的坡度,朝最陡的下坡方向挪一小步。挪一步,再摸一摸,再挪一步。几百万次以后,它就到了谷底——虽然它从头到尾都没看见过整座山。

聪明不是看得远,是每一步都踩得准。——外婆听完之后说的,我记在了实验日志第一页。

那一小步有多大

外婆接着问:步子迈多大呢?这个问题让我愣住了——她一句话问到了学习率。

步子太大,会从山谷这边直接跨到那边,永远在两侧震荡;步子太小,天黑了你还在半山腰。调参数的人一辈子都在跟这件事较劲。

# 整个深度学习,本质上就是这几行
for step in range(1_000_000):
    loss = criterion(model(x), y)   # 我现在站在哪,多高
    loss.backward()                 # 摸一摸脚下的坡度
    optimizer.step()                # 朝下坡挪一小步
    optimizer.zero_grad()           # 忘掉刚才的坡,重新摸

外婆看不懂这些字母。但她说:哦,就是摸着石头下山嘛,你外公修水库那会儿就这么干。


那天之后我常想,我们这行的大部分黑话,其实都能翻译成一个八十二岁的人早就知道的道理。翻译不出来的那部分,多半是我们自己也没真懂。