第9章 使用四种性能优化矩阵编写人工智能框架
本章从性能优化的角度讲解人工智能框架。首先,讲解梯度下降可能存在的一些问题;其次,关于参数调优的考虑因素;最后,通过代码优化实战,研究人工智能框架到底是怎么优化的。
深度学习的核心是从过去的经验中学到可以改进的部分,并把改进的部分运用到下一步的行动中,通过无限循环进行遍历,当训练达到一个理想的状况时就可以停止训练。不论是深度学习、机器学习还是增强学习,思路都是一样的:计算误差,然后调整误差,下一次基于调整以后的结果来改善自己的行动。
梯度下降是调整权重的过程,调整过程中会有很多陷阱或者误差,可能越调整误差越大,在人工智能中有很多办法来应对这些情况。
在图9-1中,圆点相当于权重的当前状态,圆点的切线采用正切函数tanθ计算。tanθ是三角函数的内容,三角函数非常重要,表面上正切函数tanθ是曲线变换轨迹的切线或者斜率,但实质上正切函数tanθ是y的变化率比x的变化率,这从直观上很容易理解。梯度下降是为了达到最低点,在第四张图中,沿圆点下方做一条切线,变化率为0时表明不再变化,不变化是最优化的状态,是优化的极值。
在梯度下降过程中(见图9-2),变化率可能大于0,也可能小于0,但我们的目标是尽快使其等于0,这个过程是收敛的过程。机器学习的算法及优化都是围绕收敛进行的。
图9-1 梯度下降
图9-2 梯度下降变化率
- 在图9-2的第一张图中,圆点处于下降的过程中,曲线左侧变化率小于0。如图9-3所示,Δx趋于无穷小时,Δy趋近于dy,Δy小于0,Δx大于0,Δy/Δx小于0,变化率小于0;我们想将变化率调整为0,将x往右移,但调整的时候,可能调得过大,将x调到了右侧曲线上。
图9-3 变化率小于0
● 如图9-4所示,x已经调到了右侧曲线上,Δx趋于无穷小时,Δy趋近于dy,Δy大于0,Δx大于0,Δy/Δx大于0,变化率大于0;要将变化率调整为0,将x往左移。
图9-4 变化率大于0
变换的过程中,如果x点的变化率小于0,那么将x往右移,但可能过犹不及,将x调到了右侧曲线,变化率大于0,又需将x往左移……,就像一个荡秋千的过程,从左侧到右侧从右侧到左侧不断重复。调整到什么时候结束?一直调整到变化率为0为止,此时达到曲线的最低点,这是我们的目标。
上述过程的本质是每一次移动的步伐(step)到底该有多大,因为收敛速度的快慢会影响到训练效率。从变化率的角度,如果变化率越陡峭,说明变化率越大,圆点离变化率为0的点越远,意味着权重距离真实的情况就越远,这对于我们有非常重要的现实意义。因为我们所有的做法都是为了更快、更好地进行收敛。