一点点改着往下走,梯度下降
假设你站在一座大雾弥漫的山上。你想去最低的山谷,可它太远,看不见。但脚下往哪边倾斜,你还是感觉得到。朝着往下的那边一步,再一步,最后就到了谷底。降低损失的学习,也是这样一步步地改。
走下大雾的山坡
前面我们学过损失。
损失是错的总和,
越小越好。
那怎么把损失降下来呢?
把损失随值画出来,
就像中间凹下去的山谷。
谷底就是损失最小的地方。
朝那个谷底往下走就行,
可大雾挡住了谷底。
能看见的只有脚下的坡度。
一步步点着把球送下去。它朝坡度指的更低那侧滚,损失就减小。
每往下一步,
球的高度,也就是损失,就减小了。
看不见谷底也没关系。
只要知道脚下往哪边倾斜,
往下的方向就总能知道。
知道了方向,接下来
就是实际把值改多少。
来看看这一步怎么迈?
把值一点点改
这里的值,就像我们能转的
一个旋钮。
转这个旋钮,损失就升或降。
看脚下的坡度,
就知道该把旋钮往哪边转,
损失才会下降。
就朝那边把值改一点点。
不是一下子猛改,而是一点点。
这样损失就降一格。
把这个反复做,才是关键。
点一下走一步的按钮。值朝坡度方向改一点,损失也随之减小。
步子迈得越多,
值就越往谷中间靠,
损失的条也越来越短。
坡陡的地方,
步幅看起来自然就大些。
越靠近谷底坡越缓,
步子也就越轻。
不过这里有一件事要定。
一步该迈多大?
步幅太大就会跨过去
一步的大小叫步幅。
在学习里把它叫学习率。
步幅大像是能快点下去,
可有个陷阱。
靠近谷底时步幅太大,
就会直接跨过谷底,
弹到对面的坡上去。
然后左一下右一下地摆,
损失反而可能变大。
反过来,步幅太小,
虽安全,往下却要很久。
选小步幅或大步幅走走看。小的慢慢到谷底;太大的跨过谷底,弹到对面去。
小步幅是一步一步来,
太大的步幅跨过谷底,
左右乱弹,我们都看见了。
所以步幅得选得
不太大也不太小。
合适的步幅又快,
又能在谷底稳稳落住。
来,用合适的步幅
一直走到谷底吧?
反复迈步到达谷底
现在办法都齐了。
用坡度定方向,
用合适的步幅迈一步,
再看坡度,再迈一步。
一直这样反复,
值就靠向谷底。
越靠近谷底坡度越近乎平,
步幅也就自然变小。
所以最后会缓缓停下。
停下的那地方,就是损失最小的地方。
一步步地一直点。越靠近谷底步子越小,收敛到损失最小的那一点。
一步接一步之后,
球正好稳稳落在谷底。
损失的条也变得最短。
哪怕在雾里,只凭脚下的坡度,
一步步走下来,到了谷底。
不用看得很远,
就从你现在站的地方,朝最低的那侧
一点点改,最后就到。
现在来把整件事理一理。
来理一理
归成一句话,是这样。
损失像中间低的山谷。
大雾挡住了谷底,
但脚下的坡度感觉得到。
朝往下的那侧把值改一点,
损失就降一格。
反复这一步,就到谷底。
一步的大小,步幅,
太大就跨过,太小就慢。
感觉坡度一点点往下走,这就是梯度下降。
依次点要点回顾一下。(损失是山谷 → 用坡度定方向 → 一步步改 → 步幅要紧 → 收敛到谷底)
现在你知道了降低损失
最基本的办法。
感觉坡度、一步步去改的这种本事,
就是机器自己学习的秘诀。
把无数个旋钮用同样的方式
一点点改着,机器就变聪明了。
下回我们接着一起看
把这一步迈得更好的办法。