梯度下降算法公式-梯度下降公式
梯度下降这玩意儿,实际上就是让某个模型一步步往下坡走,直到停不下来的时候,就认定自己没地方去了。
那会儿我认定它像极了那个老派地质学家,拿着个指南针,在一个彻底未知的荒原上磨蹭。
你想想,算法需求知道目前的方向对不对,就是得算出当前站点的坡度。
要是坡度是正数,那得往左挪;要是是负数,就得往右跑;要是平得像平地,那就得停下来休息。 它的核心逻辑就一句话:往误差最重的那根骨头下狠狠一扎,看看能不能少点痛。数学上把这个“痛”叫做梯度,向量指向坡度的方向,而步长大小嘛,就是脚步迈得有多大的难题。
每次更新权重,就是把当前参数的集合再推进一步,试图避开那个尖尖的悬崖。
这个过程实际上挺像爬山,别看不像人类那样会停下来喘口气要么换个姿势,它是机械地沿着梯度向量往前挪。挪得准不顺手,跟梯度的计算精度和步长选得对不对,关系就大了。 举个例子,假设我们要拟合一个穿过点 (0,0) 和 (1,1) 的直线,圆形的误差函数是 $f(w_1, w_2) = frac{1}{2}(w_1^2 + w_2^2 - 2w_1 - 2w_2 + 2)$。刚启动推演,梯度是个向量 $(1.0, 1.0)$。
这意味着我们要与此同时增添 $w_1$ 和 $w_2$。先设定一个步长,比如 $eta = 0.01$,那就小心翼翼地往右上方挪。一挪进去,发现还是有点误差,便持续算梯度,依然是正数,再往后挪。
这时候启动有点不对劲了,出于函数实际上是个碗底,往高了走就是离地越远。
这时候梯度算出来依然是正的,但物理意义变了,实际上是想往 $w_1, w_2$ 减小的方向走。
要是步长设得忒大,比如 $eta = 1.0$,那你就像是在悬崖边上疯狂乱蹬,略微一踩空,函数值就启动飞高,梯度也没了,算法就彻底懵了,彻底走不出正轨,这就是过拟合了。 故此,关键就是在“想往高处走”和“想往低处跳”之间找个平衡点。
这就得引入学习率了。
要是步子忒小,别看稳,但就像在泥潭里打滚,得拉挺久才能爬出来。
要是步子忒大,那就好办撞墙,就连掉进深渊。
这就好比你去健身房练肌肉,每天只练 10 分钟,一个月练了三个月,你的肌肉是练出来的。但要是你一天练 8 小时,半小时就停不下来,最终练出来的不是肌肉,是肩周炎。 这就涉及到步长的计算难题了。
有时候梯度估摸不准,要么特征之间纠缠得挺紧,害得梯度方向乱了,这时候就得牺牲规模,把步长设得小一点,哪怕有点慢,也要保命。
有时候梯度又特别准,方向完美,那就得大喇喇地把步长设大点,快进快出。
这玩意儿没有标准答案,得根据经验拍脑袋拍板。 还有一种情况,就是梯度消亡。当网络层数多了,深层的梯度就像被折叠了无数层,最终缩成个简直为零的点,害得权重根本没法更新。
这时候得用反向传播算梯度,把信号从叶子节点一路传上去,但在链式法则里,指数级的衰减会让后面的权重全是 0。
这时候就得引入残差,要么用 Dropout 这种“随机移除”的方式来打断信号传递,让信号能喘口气。 最终总结,梯度下降不是一蹴而就的,它是种试错的艺术。
每次迭代都是小步试探,不断调整参数,直到收敛。收敛了不是终点,而只是转折点。
有时候停下来就是胜利,有时候还得持续跑。
这个过程充满了不确定性,有时候步子迈得好,有时候步子迈得不好,有时候还得重来。
这就是机器学习的魅力,也是它不可预测的根本所在。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
