梯度下降法
不是一个机器学习算法,是一个基于搜索的优化算法。
用于最小化损失函数(或最大化效用函数:梯度上升法)
导数:可以代表方向,对应损失函数J增大的方向
学习率 α \alpha α:梯度下降法的一个超参数
关于梯度的调试
代码:
def dJ_debug(theta,X,y,epsilon = 0.01):
res = np.empty(len(theta))
for i in range(len(theta)):
theta_1 = theta.copy()
theta_1[i] = theta_1[i]+epsilon
theta_2 = theta.copy()
theta_2[i] = theta_2[i]-epsilon
res[i] = (J(theta_1,X,y)-J(theta_2,X,y)) / 2 / epsilon
return res
总结
- 批量梯度下降法:每次更新都需要看所有样本
优点:每次都能找到下降最快的方向
缺点:速度慢 - 随机梯度下降法:每次更新随机看一个样本
优点:速度快
缺点:每次下降的方向不稳定 - 小批量梯度下降法:每次更新看一个batch的样本
综合前两者的优点
多了一个超参数:batch的大小
Note:梯度下降法不是一个机器学习算法!是一个基于搜索的最优化方法,来最小化损失函数。