人工智能00016 深度学习与图像识别书评16 机器学习基础05
4.2.2节中,我们主要介绍了什么是梯度下降法,本节将主要介绍学习率η对于梯度下降法的影响。
第一个例子,我们将η设置为0.01(之前是0.1)我们可以观察到,步长减少之后,蓝色的标记更加密集,这就说明步长减少之后,从起始点到导数为0的步数增加了。步数变为了424步,这样整个学习的速度就变慢了。
第二个例子,我们将η设置为0.8,我们可以观察到,代表蓝色的步长在损失函数之间发生了跳跃,不过在跳跃的过程中,损失函数的值依然在不断地变小。
步数是22步,因此当学习率为0.8时,优化过程的时间缩短,但是最终也找到了最优解。
第三个例子,我们将η设置为1.1来看一下效果。这里需要注意的是,学习率本身是一个0到1的概率,因此1.1是一个错误的值,但为了展示梯度过大会出现的情况,我们暂且用这个值来示意。
我们将会发现程序会提示这个错误OverflowError:(34,'Result too large')。我们可以想象得到,这个步长跳跃的方向导致了损失函数的值越来越大,所以才会报出错误“Result toolarge”,因此我们需要修改下求损失函数的程序,修改后代码如下:
def J(theta):
try:
return (theta-2.5)**2 -1
except:
return float('inf')
另外,我们需要增加一下循环的次数,代码如下:
i_iter= 0
n_iters = 10
while i_iter < n_iters:
gradient = dJ(theta)
last_theta = theta
theta = theta - eta * gradient
i_iter += 1
theta_history.append(theta)
if (abs(J(theta) - J(last_theta)) < epsilon):
break
#当两个theta值非常接近的时候,终止循环 我们可以很明显地看到,损失函数在最下面,学习到的损失函数的值在不断的增大,也就是说模型不会找到最优解。
学习率η=1.1时,一元二次损失函数不收敛
本节通过几个示例,简单讲解了梯度下降法以及步长η的作用。从三个实验中我们可以看出,学习率是一个需要认真调整的参数,过小会导致收敛过慢,而过大又可能会导致模型不收敛。